From 87a3e4b5336d7e55e00b75ba65dcee7dfed3d61e Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sat, 6 Jan 2024 09:04:52 +0700 Subject: [PATCH 01/60] chore: sth --- .npmrc | 5 + LICENSE | 865 +++++++++++-------------------------------------- docs/main.json | 1 - package.json | 4 +- 4 files changed, 198 insertions(+), 677 deletions(-) create mode 100644 .npmrc delete mode 100644 docs/main.json diff --git a/.npmrc b/.npmrc new file mode 100644 index 00000000..91c338d --- /dev/null +++ b/.npmrc @@ -0,0 +1,5 @@ +audit=false +fund=false +legacy-peer-deps=true +tag-version-prefix="" +message="chore(Release): %s" diff --git a/LICENSE b/LICENSE index 16a0271..52b53d4 100644 --- a/LICENSE +++ b/LICENSE @@ -1,674 +1,191 @@ -GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2022 aiko-chan-ai and discordjs - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2015 - 2021 Noel Buechler + Copyright 2015 - 2021 Amish Shah + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/docs/main.json b/docs/main.json deleted file mode 100644 index d31ea41..00000000 --- a/docs/main.json +++ /dev/null @@ -1 +0,0 @@ -{"meta":{"generator":"0.11.1","format":20,"date":1699882442263},"custom":{"general":{"name":"General","files":{"welcome":{"name":"Welcome","type":"md","content":"
\r\n
\r\n

\r\n \"discord.js\"\r\n

\r\n
\r\n

\r\n \"Discord\r\n \"npm\r\n \"npm\r\n \"Tests\r\n

\r\n
\r\n\r\n## About\r\n\r\nWelcome to `discord.js-selfbot-v13@v2.15`, based on `discord.js@13.17`\r\n\r\n- discord.js-selfbot-v13 is a [Node.js](https://nodejs.org) module that allows user accounts to interact with the Discord API v9.\r\n\r\n\r\n
\r\n

\r\n \"npm\r\n \"npm\r\n \"Tests\r\n

\r\n
\r\n\r\n### I don't take any responsibility for blocked Discord accounts that used this module.\r\n### Using this on a user account is prohibited by the [Discord TOS](https://discord.com/terms) and can lead to the account block.\r\n\r\n## Project Status\r\n\r\n`discord.js-selfbot-v13` is currently in maintenance mode. New features are not actively being added but existing features and new versions of discord are supported as possible. There are some major architectural changes which need to be added to improve the stability and security of the project. I don't have as much spare time as I did when I started this project, so there is not currently any plan for these improvements.\r\n\r\n### [Document Website (recommend)](https://discordjs-self-v13.netlify.app/)\r\n\r\n### [Extend Document (With Example)](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/tree/main/Document)\r\n\r\n## Features (User)\r\n- [x] Message: Embeds (WebEmbed)\r\n- [x] User: Settings, Status, Activity, DeveloperPortal, RemoteAuth, etc.\r\n- [X] Guild: Fetch Members, Join / Leave, Top emojis, ...\r\n- [X] Interactions: Slash Commands, Click Buttons, Menu, Modal, Context Menu, ...\r\n- [X] Captcha Handler (2captcha, capmonster, custom)\r\n- [X] Documentation\r\n- [x] Voice & [Video stream](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/issues/293)\r\n- [ ] Everything\r\n\r\n### Optional packages\r\n\r\n- [2captcha](https://www.npmjs.com/package/2captcha) for solving captcha (`npm install 2captcha`)\r\n- [node-capmonster](https://www.npmjs.com/package/node-capmonster) for solving captcha (`npm install node-capmonster`)\r\n\r\n## Installation\r\n\r\n**Node.js 16.6.0 or newer is required**\r\n\r\n> Recommended Node.js version: 18 (LTS)\r\n\r\n```sh-session\r\nnpm install discord.js-selfbot-v13@latest\r\n```\r\n\r\n## Example\r\n\r\n```js\r\nconst { Client } = require('discord.js-selfbot-v13');\r\nconst client = new Client({\r\n\t// See other options here\r\n\t// https://discordjs-self-v13.netlify.app/#/docs/docs/main/typedef/ClientOptions\r\n\t// All partials are loaded automatically\r\n});\r\n\r\nclient.on('ready', async () => {\r\n console.log(`${client.user.username} is ready!`);\r\n})\r\n\r\nclient.login('token');\r\n```\r\n\r\n## Get Token ?\r\n\r\nRun code (Discord Console - [Ctrl + Shift + I])\r\n\r\n```js\r\nwindow.webpackChunkdiscord_app.push([\r\n [Math.random()],\r\n {},\r\n req => {\r\n for (const m of Object.keys(req.c)\r\n .map(x => req.c[x].exports)\r\n .filter(x => x)) {\r\n if (m.default && m.default.getToken !== undefined) {\r\n return copy(m.default.getToken());\r\n }\r\n if (m.getToken !== undefined) {\r\n return copy(m.getToken());\r\n }\r\n }\r\n },\r\n]);\r\nconsole.log('%cWorked!', 'font-size: 50px');\r\nconsole.log(`%cYou now have your token in the clipboard!`, 'font-size: 16px');\r\n```\r\n\r\nCredit: \".\" [hxr404](https://github.com/hxr404/Discord-Console-hacks)\r\n\r\n\r\n## Contributing\r\n\r\n- Before creating an issue, please ensure that it hasn't already been reported/suggested, and double-check the\r\n[documentation](https://discord.js.org/#/docs). \r\n- See [the contribution guide](https://github.com/discordjs/discord.js/blob/main/.github/CONTRIBUTING.md) if you'd like to submit a PR.\r\n\r\n## Need help?\r\nGithub Discussion: [Here](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/discussions)\r\n\r\n## Credits\r\n- [Discord.js](https://github.com/discordjs/discord.js)\r\n\r\n## \".\" Other project(s)\r\n\r\n- 📘 [***aiko-chan-ai/DiscordBotClient***](https://github.com/aiko-chan-ai/DiscordBotClient)
\r\n A patched version of discord, with bot login support\r\n- 📕 [***aiko-chan-ai/Discord-Markdown***](https://github.com/aiko-chan-ai/Discord-Markdown)
\r\n Better Markdown to text chat Discord.\r\n- 📗 ...\r\n\r\n## Star History\r\n\r\n[![Star History Chart](https://api.star-history.com/svg?repos=aiko-chan-ai/discord.js-selfbot-v13&type=Date)](https://star-history.com/#aiko-chan-ai/discord.js-selfbot-v13&Date)\r\n\r\n\r\n# From Github with love 💕","path":"README.md"}}}},"classes":[{"name":"BaseClient","description":"The base class for all clients.","extends":[[["EventEmitter"]]],"props":[{"name":"options","description":"The options the client was instantiated with","type":[[["ClientOptions"]]],"meta":{"line":26,"file":"BaseClient.js","path":"src/client"}},{"name":"rest","description":"The REST manager of the client","access":"private","type":[[["RESTManager"]]],"meta":{"line":33,"file":"BaseClient.js","path":"src/client"}},{"name":"api","description":"API shortcut","access":"private","readonly":true,"type":[[["Object"]]],"meta":{"line":42,"file":"BaseClient.js","path":"src/client"}}],"methods":[{"name":"destroy","description":"Destroys all assets used by the base client.","returns":[[["void"]]],"meta":{"line":50,"file":"BaseClient.js","path":"src/client"}},{"name":"incrementMaxListeners","description":"Increments max listeners by one, if they are not zero.","access":"private","meta":{"line":58,"file":"BaseClient.js","path":"src/client"}},{"name":"decrementMaxListeners","description":"Decrements max listeners by one, if they are not zero.","access":"private","meta":{"line":69,"file":"BaseClient.js","path":"src/client"}}],"events":[{"name":"debug","description":"Emitted for general debugging information.","params":[{"name":"info","description":"The debug information","type":[[["string"]]]}],"meta":{"line":83,"file":"BaseClient.js","path":"src/client"}},{"name":"rateLimit","description":"Emitted when the client hits a rate limit while making a request","params":[{"name":"rateLimitData","description":"Object containing the rate limit info","type":[[["RateLimitData"]]]}],"meta":{"line":137,"file":"RequestHandler.js","path":"src/rest"}},{"name":"apiRequest","description":"Emitted before every API request.\nThis event can emit several times for the same request, e.g. when hitting a rate limit.\nThis is an informational event that is emitted quite frequently,\nit is highly recommended to check `request.path` to filter the data.","params":[{"name":"request","description":"The request that is about to be sent","type":[[["APIRequest"]]]}],"meta":{"line":188,"file":"RequestHandler.js","path":"src/rest"}},{"name":"apiResponse","description":"Emitted after every API request has received a response.\nThis event does not necessarily correlate to completion of the request, e.g. when hitting a rate limit.\nThis is an informational event that is emitted quite frequently,\nit is highly recommended to check `request.path` to filter the data.","params":[{"name":"request","description":"The request that triggered this response","type":[[["APIRequest"]]]},{"name":"response","description":"The response received from the Discord API","type":[[["Response"]]]}],"meta":{"line":220,"file":"RequestHandler.js","path":"src/rest"}},{"name":"invalidRequestWarning","description":"Emitted periodically when the process sends invalid requests to let users avoid the\n10k invalid requests in 10 minutes threshold that causes a ban","params":[{"name":"invalidRequestWarningData","description":"Object containing the invalid request info","type":[[["InvalidRequestWarningData"]]]}],"meta":{"line":297,"file":"RequestHandler.js","path":"src/rest"}}],"meta":{"line":13,"file":"BaseClient.js","path":"src/client"}},{"name":"Client","description":"The main hub for interacting with the Discord API, and the starting point for any bot.","extends":[[["BaseClient"]]],"construct":{"name":"Client","params":[{"name":"options","description":"Options for the client","type":[[["ClientOptions"]]]}]},"props":[{"name":"_cleanups","description":"Functions called when a cache is garbage collected or the Client is destroyed","access":"private","type":[[["Set","<"],["function","()>"]]],"meta":{"line":96,"file":"Client.js","path":"src/client"}},{"name":"_finalizers","description":"The finalizers used to cleanup items.","access":"private","type":[[["FinalizationRegistry"]]],"meta":{"line":103,"file":"Client.js","path":"src/client"}},{"name":"ws","description":"The WebSocket manager of the client","type":[[["WebSocketManager"]]],"meta":{"line":109,"file":"Client.js","path":"src/client"}},{"name":"actions","description":"The action manager of the client","access":"private","type":[[["ActionsManager"]]],"meta":{"line":116,"file":"Client.js","path":"src/client"}},{"name":"voice","description":"The voice manager of the client","type":[[["ClientVoiceManager"]]],"meta":{"line":122,"file":"Client.js","path":"src/client"}},{"name":"voiceStates","description":"A manager of the voice states of this client (Support DM / Group DM)","type":[[["VoiceStateManager"]]],"meta":{"line":128,"file":"Client.js","path":"src/client"}},{"name":"shard","description":"Shard helpers for the client (only if the process was spawned from a {@link ShardingManager})","nullable":true,"type":[[["ShardClientUtil"]]],"meta":{"line":134,"file":"Client.js","path":"src/client"}},{"name":"users","description":"All of the {@link User} objects that have been cached at any point, mapped by their ids","type":[[["UserManager"]]],"meta":{"line":142,"file":"Client.js","path":"src/client"}},{"name":"relationships","description":"All of the relationships {@link User}","type":[[["RelationshipManager"]]],"meta":{"line":149,"file":"Client.js","path":"src/client"}},{"name":"settings","description":"All of the settings {@link Object}","type":[[["ClientUserSettingManager"]]],"meta":{"line":154,"file":"Client.js","path":"src/client"}},{"name":"guilds","description":"All of the guilds the client is currently handling, mapped by their ids -\nas long as sharding isn't being used, this will be *every* guild the bot is a member of","type":[[["GuildManager"]]],"meta":{"line":160,"file":"Client.js","path":"src/client"}},{"name":"billing","description":"Manages the API methods","type":[[["BillingManager"]]],"meta":{"line":166,"file":"Client.js","path":"src/client"}},{"name":"sessions","description":"All of the sessions of the client","type":[[["SessionManager"]]],"meta":{"line":172,"file":"Client.js","path":"src/client"}},{"name":"channels","description":"All of the {@link Channel}s that the client is currently handling, mapped by their ids -\nas long as sharding isn't being used, this will be *every* channel in *every* guild the bot\nis a member of. Note that DM channels will not be initially cached, and thus not be present\nin the Manager without their explicit fetching or use.","type":[[["ChannelManager"]]],"meta":{"line":181,"file":"Client.js","path":"src/client"}},{"name":"sweepers","description":"The sweeping functions and their intervals used to periodically sweep caches","type":[[["Sweepers"]]],"meta":{"line":187,"file":"Client.js","path":"src/client"}},{"name":"developerPortal","description":"The developer portal manager of the client","type":[[["DeveloperPortalManager"]]],"meta":{"line":193,"file":"Client.js","path":"src/client"}},{"name":"presence","description":"The presence of the Client","access":"private","type":[[["ClientPresence"]]],"meta":{"line":200,"file":"Client.js","path":"src/client"}},{"name":"token","description":"Authorization token for the logged in bot.\nIf present, this defaults to `process.env.DISCORD_TOKEN` when instantiating the client\nThis should be kept private at all times.","nullable":true,"type":[[["string"]]],"meta":{"line":210,"file":"Client.js","path":"src/client"}},{"name":"user","description":"User that the client is logged in as","nullable":true,"type":[[["ClientUser"]]],"meta":{"line":221,"file":"Client.js","path":"src/client"}},{"name":"application","description":"The application of this bot","nullable":true,"type":[[["ClientApplication"]]],"meta":{"line":227,"file":"Client.js","path":"src/client"}},{"name":"readyAt","description":"Time at which the client was last regarded as being in the `READY` state\n(each time the client disconnects and successfully reconnects, this will be overwritten)","nullable":true,"type":[[["Date"]]],"meta":{"line":234,"file":"Client.js","path":"src/client"}},{"name":"password","description":"Password cache","nullable":true,"type":[[["string"]]],"meta":{"line":240,"file":"Client.js","path":"src/client"}},{"name":"sessionId","description":"Session ID","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":259,"file":"Client.js","path":"src/client"}},{"name":"emojis","description":"All custom emojis that the client has access to, mapped by their ids","readonly":true,"type":[[["BaseGuildEmojiManager"]]],"meta":{"line":268,"file":"Client.js","path":"src/client"}},{"name":"readyTimestamp","description":"Timestamp of the time the client was last `READY` at","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":281,"file":"Client.js","path":"src/client"}},{"name":"uptime","description":"How long it has been since the client last entered the `READY` state in milliseconds","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":290,"file":"Client.js","path":"src/client"}},{"name":"callVoice","description":"Get connection to current call","readonly":true,"nullable":true,"type":[[["VoiceConnection"]]],"meta":{"line":303,"file":"Client.js","path":"src/client"}},{"name":"options","description":"The options the client was instantiated with","type":[[["ClientOptions"]]],"meta":{"line":26,"file":"BaseClient.js","path":"src/client"}},{"name":"rest","description":"The REST manager of the client","access":"private","type":[[["RESTManager"]]],"meta":{"line":33,"file":"BaseClient.js","path":"src/client"}},{"name":"api","description":"API shortcut","access":"private","readonly":true,"type":[[["Object"]]],"meta":{"line":42,"file":"BaseClient.js","path":"src/client"}}],"methods":[{"name":"login","description":"Logs the client in, establishing a WebSocket connection to Discord.","examples":["client.login('my token');"],"params":[{"name":"token","description":"Token of the account to log in with","optional":true,"default":"this.token","type":[[["string"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["string",">"]]],"description":"Token of the account used"},"meta":{"line":314,"file":"Client.js","path":"src/client"}},{"name":"normalLogin","description":"Login Discord with Username and Password","params":[{"name":"username","description":"Email or Phone Number","type":[[["string"]]]},{"name":"password","description":"Password","nullable":true,"type":[[["string"]]]},{"name":"mfaCode","description":"2FA Code / Backup Code","nullable":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["string",">"]]],"meta":{"line":356,"file":"Client.js","path":"src/client"}},{"name":"switchUser","description":"Switch the user","params":[{"name":"token","description":"User Token","type":[[["string"]]]}],"returns":[[["Promise","<"],["string",">"]]],"meta":{"line":411,"file":"Client.js","path":"src/client"}},{"name":"QRLogin","description":"Sign in with the QR code on your phone.","examples":["client.QRLogin();"],"params":[{"name":"options","description":"Options","type":[[["DiscordAuthWebsocketOptions"]]]}],"returns":[[["DiscordAuthWebsocket"]]],"meta":{"line":430,"file":"Client.js","path":"src/client"}},{"name":"remoteAuth","description":"Implement `remoteAuth`, like using your phone to scan a QR code","params":[{"name":"url","description":"URL from QR code","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":441,"file":"Client.js","path":"src/client"}},{"name":"createToken","description":"Create a new token based on the current token","returns":{"types":[[["Promise","<"],["string",">"]]],"description":"New Discord Token"},"meta":{"line":470,"file":"Client.js","path":"src/client"}},{"name":"checkUpdate","description":"Check for updates","async":true,"returns":[[["Promise","<"],["Client",">"]]],"meta":{"line":508,"file":"Client.js","path":"src/client"}},{"name":"isReady","description":"Returns whether the client has logged in, indicative of being able to access\nproperties such as `user` and `application`.","returns":[[["boolean"]]],"meta":{"line":528,"file":"Client.js","path":"src/client"}},{"name":"destroy","description":"Logs out, terminates the connection to Discord, and destroys the client.","returns":[[["void"]]],"meta":{"line":536,"file":"Client.js","path":"src/client"}},{"name":"logout","description":"Logs out, terminates the connection to Discord, destroys the client and destroys the token.","async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":554,"file":"Client.js","path":"src/client"}},{"name":"fetchInvite","description":"Obtains an invite from Discord.","examples":["client.fetchInvite('https://discord.gg/djs')\n .then(invite => console.log(`Obtained invite with code: ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"invite","description":"Invite code or URL","type":[[["InviteResolvable"]]]},{"name":"options","description":"Options for fetching the invite","optional":true,"type":[[["ClientFetchInviteOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":581,"file":"Client.js","path":"src/client"}},{"name":"acceptInvite","description":"Join this Guild using this invite (fast)","examples":["await client.acceptInvite('https://discord.gg/genshinimpact')"],"params":[{"name":"invite","description":"Invite code or URL","type":[[["InviteResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":596,"file":"Client.js","path":"src/client"}},{"name":"redeemNitro","description":"Redeem nitro from code or url.","params":[{"name":"nitro","description":"Nitro url or code","type":[[["string"]]]},{"name":"channel","description":"Channel that the code was sent in","type":[[["TextChannelResolvable"]]]},{"name":"paymentSourceId","description":"Payment source id","optional":true,"type":[[["Snowflake"]]]}],"returns":[[["Promise","<"],["any",">"]]],"meta":{"line":620,"file":"Client.js","path":"src/client"}},{"name":"fetchGuildTemplate","description":"Obtains a template from Discord.","examples":["client.fetchGuildTemplate('https://discord.new/FKvmczH2HyUf')\n .then(template => console.log(`Obtained template with code: ${template.code}`))\n .catch(console.error);"],"params":[{"name":"template","description":"Template code or URL","type":[[["GuildTemplateResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["GuildTemplate",">"]]],"meta":{"line":643,"file":"Client.js","path":"src/client"}},{"name":"fetchWebhook","description":"Obtains a webhook from Discord.","examples":["client.fetchWebhook('id', 'token')\n .then(webhook => console.log(`Obtained webhook with name: ${webhook.name}`))\n .catch(console.error);"],"params":[{"name":"id","description":"The webhook's id","type":[[["Snowflake"]]]},{"name":"token","description":"Token for the webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Webhook",">"]]],"meta":{"line":659,"file":"Client.js","path":"src/client"}},{"name":"fetchVoiceRegions","description":"Obtains the available voice regions from Discord.","examples":["client.fetchVoiceRegions()\n .then(regions => console.log(`Available regions are: ${regions.map(region => region.name).join(', ')}`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Collection","<"],["string",", "],["VoiceRegion",">>"]]],"meta":{"line":672,"file":"Client.js","path":"src/client"}},{"name":"fetchSticker","description":"Obtains a sticker from Discord.","examples":["client.fetchSticker('id')\n .then(sticker => console.log(`Obtained sticker with name: ${sticker.name}`))\n .catch(console.error);"],"params":[{"name":"id","description":"The sticker's id","type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["Sticker",">"]]],"meta":{"line":688,"file":"Client.js","path":"src/client"}},{"name":"fetchPremiumStickerPacks","description":"Obtains the list of sticker packs available to Nitro subscribers from Discord.","examples":["client.fetchPremiumStickerPacks()\n .then(packs => console.log(`Available sticker packs are: ${packs.map(pack => pack.name).join(', ')}`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["StickerPack",">>"]]],"meta":{"line":701,"file":"Client.js","path":"src/client"}},{"name":"_finalize","description":"A last ditch cleanup function for garbage collection.","access":"private","params":[{"name":"options.cleanup","description":"The function called to GC","type":[[["function"]]]},{"name":"options.message","description":"The message to send after a successful GC","optional":true,"type":[[["string"]]]},{"name":"options.name","description":"The name of the item being GCed","optional":true,"type":[[["string"]]]}],"meta":{"line":712,"file":"Client.js","path":"src/client"}},{"name":"_clearCache","description":"Clear a cache","access":"private","params":[{"name":"cache","description":"The cache to clear","type":[[["Collection"]]]}],"returns":{"types":[[["number"]]],"description":"The number of removed entries"},"meta":{"line":730,"file":"Client.js","path":"src/client"}},{"name":"sweepMessages","description":"Sweeps all text-based channels' messages and removes the ones older than the max message lifetime.\nIf the message has been edited, the time of the edit is used rather than the time of the original message.","examples":["// Remove all messages older than 1800 seconds from the messages cache\nconst amount = client.sweepMessages(1800);\nconsole.log(`Successfully removed ${amount} messages from the cache.`);"],"params":[{"name":"lifetime","description":"Messages that are older than this (in seconds)\nwill be removed from the caches. The default is based on {@link ClientOptions#messageCacheLifetime}","optional":true,"default":"this.options.messageCacheLifetime","type":[[["number"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of messages that were removed from the caches,\nor -1 if the message cache lifetime is unlimited"},"meta":{"line":746,"file":"Client.js","path":"src/client"}},{"name":"fetchGuildPreview","description":"Obtains a guild preview from Discord, available for all guilds the bot is in and all Discoverable guilds.","params":[{"name":"guild","description":"The guild to fetch the preview for","type":[[["GuildResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["GuildPreview",">"]]],"meta":{"line":765,"file":"Client.js","path":"src/client"}},{"name":"fetchGuildWidget","description":"Obtains the widget data of a guild from Discord, available for guilds with the widget enabled.","params":[{"name":"guild","description":"The guild to fetch the widget data for","type":[[["GuildResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["Widget",">"]]],"meta":{"line":777,"file":"Client.js","path":"src/client"}},{"name":"generateInvite","description":"Generates a link that can be used to invite the bot to a guild.","examples":["const link = client.generateInvite({\n scopes: ['applications.commands'],\n});\nconsole.log(`Generated application invite link: ${link}`);","const link = client.generateInvite({\n permissions: [\n Permissions.FLAGS.SEND_MESSAGES,\n Permissions.FLAGS.MANAGE_GUILD,\n Permissions.FLAGS.MENTION_EVERYONE,\n ],\n scopes: ['bot'],\n});\nconsole.log(`Generated bot invite link: ${link}`);"],"params":[{"name":"options","description":"Options for the invite","optional":true,"default":"{}","type":[[["InviteGenerationOptions"]]]}],"returns":[[["string"]]],"meta":{"line":813,"file":"Client.js","path":"src/client"}},{"name":"_eval","description":"Calls {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval} on a script\nwith the client as `this`.","access":"private","params":[{"name":"script","description":"Script to eval","type":[[["string"]]]}],"returns":[["*"]],"meta":{"line":868,"file":"Client.js","path":"src/client"}},{"name":"customStatusAuto","description":"Sets the client's presence. (Sync Setting).","access":"private","params":[{"name":"client","description":"Discord Client","type":[[["Client"]]]}],"meta":{"line":877,"file":"Client.js","path":"src/client"}},{"name":"authorizeURL","description":"Authorize an application.","examples":["client.authorizeURL(`https://discord.com/api/oauth2/authorize?client_id=botID&permissions=8&scope=applications.commands%20bot`, {\n guild_id: \"guildID\",\n permissions: \"62221393\", // your permissions\n authorize: true\n })"],"params":[{"name":"url","description":"Discord Auth URL","type":[[["string"]]]},{"name":"options","description":"Oauth2 options","type":[[["OAuth2AuthorizeOptions"]]]}],"returns":[[["Promise","<"],["Object",">"]]],"meta":{"line":920,"file":"Client.js","path":"src/client"}},{"name":"sleep","description":"Makes waiting time for Client.","params":[{"name":"miliseconds","description":"Sleeping time as milliseconds.","type":[[["number"]]]}],"returns":[[["Promise","<"],["void",">"]],[["null"]]],"meta":{"line":944,"file":"Client.js","path":"src/client"}},{"name":"_validateOptions","description":"Validates the client options.","access":"private","params":[{"name":"options","description":"Options to validate","optional":true,"default":"this.options","type":[[["ClientOptions"]]]}],"meta":{"line":953,"file":"Client.js","path":"src/client"}},{"name":"incrementMaxListeners","description":"Increments max listeners by one, if they are not zero.","access":"private","inherits":"BaseClient#incrementMaxListeners","inherited":true,"meta":{"line":58,"file":"BaseClient.js","path":"src/client"}},{"name":"decrementMaxListeners","description":"Decrements max listeners by one, if they are not zero.","access":"private","inherits":"BaseClient#decrementMaxListeners","inherited":true,"meta":{"line":69,"file":"BaseClient.js","path":"src/client"}}],"events":[{"name":"applicationCommandPermissionsUpdate","description":"Emitted whenever permissions for an application command in a guild were updated.\nThis includes permission updates for other applications in addition to the logged in client,\ncheck `data.applicationId` to verify which application the update is for","params":[{"name":"data","description":"The updated permissions","type":[[["ApplicationCommandPermissionsUpdateData"]]]}],"meta":{"line":18,"file":"ApplicationCommandPermissionsUpdate.js","path":"src/client/actions"}},{"name":"autoModerationActionExecution","description":"Emitted whenever an auto moderation rule is triggered.\nThis event requires the {@link Permissions.FLAGS.MANAGE_GUILD} permission.","params":[{"name":"autoModerationActionExecution","description":"The data of the execution","type":[[["AutoModerationActionExecution"]]]}],"meta":{"line":13,"file":"AutoModerationActionExecution.js","path":"src/client/actions"}},{"name":"autoModerationRuleCreate","description":"Emitted whenever an auto moderation rule is created.\nThis event requires the {@link Permissions.FLAGS.MANAGE_GUILD} permission.","params":[{"name":"autoModerationRule","description":"The created auto moderation rule","type":[[["AutoModerationRule"]]]}],"meta":{"line":14,"file":"AutoModerationRuleCreate.js","path":"src/client/actions"}},{"name":"autoModerationRuleDelete","description":"Emitted whenever an auto moderation rule is deleted.\nThis event requires the {@link Permissions.FLAGS.MANAGE_GUILD} permission.","params":[{"name":"autoModerationRule","description":"The deleted auto moderation rule","type":[[["AutoModerationRule"]]]}],"meta":{"line":17,"file":"AutoModerationRuleDelete.js","path":"src/client/actions"}},{"name":"autoModerationRuleUpdate","description":"Emitted whenever an auto moderation rule gets updated.\nThis event requires the {@link Permissions.FLAGS.MANAGE_GUILD} permission.","params":[{"name":"oldAutoModerationRule","description":"The auto moderation rule before the update","nullable":true,"type":[[["AutoModerationRule"]]]},{"name":"newAutoModerationRule","description":"The auto moderation rule after the update","type":[[["AutoModerationRule"]]]}],"meta":{"line":15,"file":"AutoModerationRuleUpdate.js","path":"src/client/actions"}},{"name":"channelCreate","description":"Emitted whenever a guild channel is created.","params":[{"name":"channel","description":"The channel that was created","type":[[["GuildChannel"]]]}],"meta":{"line":12,"file":"ChannelCreate.js","path":"src/client/actions"}},{"name":"channelDelete","description":"Emitted whenever a channel is deleted.","params":[{"name":"channel","description":"The channel that was deleted","type":[[["DMChannel"]],[["GuildChannel"]]]}],"meta":{"line":27,"file":"ChannelDelete.js","path":"src/client/actions"}},{"name":"guildAuditLogEntryCreate","description":"Emitted whenever a guild audit log entry is created.","params":[{"name":"auditLogEntry","description":"The entry that was created","type":[[["GuildAuditLogsEntry"]]]},{"name":"guild","description":"The guild where the entry was created","type":[[["Guild"]]]}],"meta":{"line":16,"file":"GuildAuditLogEntryCreate.js","path":"src/client/actions"}},{"name":"guildBanAdd","description":"Emitted whenever a member is banned from a guild.","params":[{"name":"ban","description":"The ban that occurred","type":[[["GuildBan"]]]}],"meta":{"line":11,"file":"GuildBanAdd.js","path":"src/client/actions"}},{"name":"guildBanRemove","description":"Emitted whenever a member is unbanned from a guild.","params":[{"name":"ban","description":"The ban that was removed","type":[[["GuildBan"]]]}],"meta":{"line":12,"file":"GuildBanRemove.js","path":"src/client/actions"}},{"name":"guildUnavailable","description":"Emitted whenever a guild becomes unavailable, likely due to a server outage.","params":[{"name":"guild","description":"The guild that has become unavailable","type":[[["Guild"]]]}],"meta":{"line":23,"file":"GuildDelete.js","path":"src/client/actions"}},{"name":"guildDelete","description":"Emitted whenever a guild kicks the client or the guild is deleted/left.","params":[{"name":"guild","description":"The guild that was deleted","type":[[["Guild"]]]}],"meta":{"line":44,"file":"GuildDelete.js","path":"src/client/actions"}},{"name":"emojiCreate","description":"Emitted whenever a custom emoji is created in a guild.","params":[{"name":"emoji","description":"The emoji that was created","type":[[["GuildEmoji"]]]}],"meta":{"line":10,"file":"GuildEmojiCreate.js","path":"src/client/actions"}},{"name":"emojiDelete","description":"Emitted whenever a custom emoji is deleted in a guild.","params":[{"name":"emoji","description":"The emoji that was deleted","type":[[["GuildEmoji"]]]}],"meta":{"line":11,"file":"GuildEmojiDelete.js","path":"src/client/actions"}},{"name":"emojiUpdate","description":"Emitted whenever a custom emoji is updated in a guild.","params":[{"name":"oldEmoji","description":"The old emoji","type":[[["GuildEmoji"]]]},{"name":"newEmoji","description":"The new emoji","type":[[["GuildEmoji"]]]}],"meta":{"line":9,"file":"GuildEmojiUpdate.js","path":"src/client/actions"}},{"name":"guildIntegrationsUpdate","description":"Emitted whenever a guild integration is updated","params":[{"name":"guild","description":"The guild whose integrations were updated","type":[[["Guild"]]]}],"meta":{"line":10,"file":"GuildIntegrationsUpdate.js","path":"src/client/actions"}},{"name":"guildMemberRemove","description":"Emitted whenever a member leaves a guild, or is kicked.","deprecated":"See {@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/issues/197 this issue} for more information.","params":[{"name":"member","description":"The member that has left/been kicked from the guild","type":[[["GuildMember"]]]}],"meta":{"line":18,"file":"GuildMemberRemove.js","path":"src/client/actions"}},{"name":"guildMemberUpdate","description":"Emitted whenever a guild member changes - i.e. new role, removed role, nickname.","deprecated":"See {@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/issues/197 this issue} for more information.","params":[{"name":"oldMember","description":"The member before the update","type":[[["GuildMember"]]]},{"name":"newMember","description":"The member after the update","type":[[["GuildMember"]]]}],"meta":{"line":23,"file":"GuildMemberUpdate.js","path":"src/client/actions"}},{"name":"guildMemberAvailable","description":"Emitted whenever a member becomes available.","params":[{"name":"member","description":"The member that became available","type":[[["GuildMember"]]]}],"meta":{"line":33,"file":"GuildMemberUpdate.js","path":"src/client/actions"}},{"name":"roleCreate","description":"Emitted whenever a role is created.","params":[{"name":"role","description":"The role that was created","type":[[["Role"]]]}],"meta":{"line":14,"file":"GuildRoleCreate.js","path":"src/client/actions"}},{"name":"roleDelete","description":"Emitted whenever a guild role is deleted.","params":[{"name":"role","description":"The role that was deleted","type":[[["Role"]]]}],"meta":{"line":18,"file":"GuildRoleDelete.js","path":"src/client/actions"}},{"name":"roleUpdate","description":"Emitted whenever a guild role is updated.","params":[{"name":"oldRole","description":"The role before the update","type":[[["Role"]]]},{"name":"newRole","description":"The role after the update","type":[[["Role"]]]}],"meta":{"line":17,"file":"GuildRoleUpdate.js","path":"src/client/actions"}},{"name":"guildScheduledEventCreate","description":"Emitted whenever a guild scheduled event is created.","params":[{"name":"guildScheduledEvent","description":"The created guild scheduled event","type":[[["GuildScheduledEvent"]]]}],"meta":{"line":13,"file":"GuildScheduledEventCreate.js","path":"src/client/actions"}},{"name":"guildScheduledEventDelete","description":"Emitted whenever a guild scheduled event is deleted.","params":[{"name":"guildScheduledEvent","description":"The deleted guild scheduled event","type":[[["GuildScheduledEvent"]]]}],"meta":{"line":16,"file":"GuildScheduledEventDelete.js","path":"src/client/actions"}},{"name":"guildScheduledEventUpdate","description":"Emitted whenever a guild scheduled event gets updated.","params":[{"name":"oldGuildScheduledEvent","description":"The guild scheduled event object before the update","nullable":true,"type":[[["GuildScheduledEvent"]]]},{"name":"newGuildScheduledEvent","description":"The guild scheduled event object after the update","type":[[["GuildScheduledEvent"]]]}],"meta":{"line":15,"file":"GuildScheduledEventUpdate.js","path":"src/client/actions"}},{"name":"guildScheduledEventUserAdd","description":"Emitted whenever a user subscribes to a guild scheduled event","params":[{"name":"guildScheduledEvent","description":"The guild scheduled event","type":[[["GuildScheduledEvent"]]]},{"name":"user","description":"The user who subscribed","type":[[["User"]]]}],"meta":{"line":16,"file":"GuildScheduledEventUserAdd.js","path":"src/client/actions"}},{"name":"guildScheduledEventUserRemove","description":"Emitted whenever a user unsubscribes from a guild scheduled event","params":[{"name":"guildScheduledEvent","description":"The guild scheduled event","type":[[["GuildScheduledEvent"]]]},{"name":"user","description":"The user who unsubscribed","type":[[["User"]]]}],"meta":{"line":16,"file":"GuildScheduledEventUserRemove.js","path":"src/client/actions"}},{"name":"stickerCreate","description":"Emitted whenever a custom sticker is created in a guild.","params":[{"name":"sticker","description":"The sticker that was created","type":[[["Sticker"]]]}],"meta":{"line":10,"file":"GuildStickerCreate.js","path":"src/client/actions"}},{"name":"stickerDelete","description":"Emitted whenever a custom sticker is deleted in a guild.","params":[{"name":"sticker","description":"The sticker that was deleted","type":[[["Sticker"]]]}],"meta":{"line":11,"file":"GuildStickerDelete.js","path":"src/client/actions"}},{"name":"stickerUpdate","description":"Emitted whenever a custom sticker is updated in a guild.","params":[{"name":"oldSticker","description":"The old sticker","type":[[["Sticker"]]]},{"name":"newSticker","description":"The new sticker","type":[[["Sticker"]]]}],"meta":{"line":9,"file":"GuildStickerUpdate.js","path":"src/client/actions"}},{"name":"guildUpdate","description":"Emitted whenever a guild is updated - e.g. name change.","params":[{"name":"oldGuild","description":"The guild before the update","type":[[["Guild"]]]},{"name":"newGuild","description":"The guild after the update","type":[[["Guild"]]]}],"meta":{"line":13,"file":"GuildUpdate.js","path":"src/client/actions"}},{"name":"interactionCreate","description":"Emitted when an interaction is created.","params":[{"name":"interaction","description":"The interaction which was created.","type":[[["InteractionResponseBody"]],[["Interaction"]]]}],"meta":{"line":95,"file":"InteractionCreate.js","path":"src/client/actions"}},{"name":"interaction","description":"Emitted when an interaction is created.","deprecated":"Use {@link Client#event:interactionCreate} instead","params":[{"name":"interaction","description":"The interaction which was created","type":[[["Interaction"]]]}],"meta":{"line":102,"file":"InteractionCreate.js","path":"src/client/actions"}},{"name":"inviteCreate","description":"Emitted when an invite is created.\n This event only triggers if the client has `MANAGE_GUILD` permissions for the guild,\nor `MANAGE_CHANNELS` permissions for the channel.","params":[{"name":"invite","description":"The invite that was created","type":[[["Invite"]]]}],"meta":{"line":16,"file":"InviteCreate.js","path":"src/client/actions"}},{"name":"inviteDelete","description":"Emitted when an invite is deleted.\n This event only triggers if the client has `MANAGE_GUILD` permissions for the guild,\nor `MANAGE_CHANNELS` permissions for the channel.","params":[{"name":"invite","description":"The invite that was deleted","type":[[["Invite"]]]}],"meta":{"line":18,"file":"InviteDelete.js","path":"src/client/actions"}},{"name":"messageCreate","description":"Emitted whenever a message is created.","params":[{"name":"message","description":"The created message","type":[[["Message"]]]}],"meta":{"line":36,"file":"MessageCreate.js","path":"src/client/actions"}},{"name":"message","description":"Emitted whenever a message is created.","deprecated":"Use {@link Client#event:messageCreate} instead","params":[{"name":"message","description":"The created message","type":[[["Message"]]]}],"meta":{"line":43,"file":"MessageCreate.js","path":"src/client/actions"}},{"name":"messageDelete","description":"Emitted whenever a message is deleted.","params":[{"name":"message","description":"The deleted message","type":[[["Message"]]]}],"meta":{"line":19,"file":"MessageDelete.js","path":"src/client/actions"}},{"name":"messageDeleteBulk","description":"Emitted whenever messages are deleted in bulk.","params":[{"name":"messages","description":"The deleted messages, mapped by their id","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]]]}],"meta":{"line":34,"file":"MessageDeleteBulk.js","path":"src/client/actions"}},{"name":"messageReactionAdd","description":"Emitted whenever a reaction is added to a cached message.","params":[{"name":"messageReaction","description":"The reaction object","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that applied the guild or reaction emoji","type":[[["User"]]]}],"meta":{"line":44,"file":"MessageReactionAdd.js","path":"src/client/actions"}},{"name":"messageReactionRemove","description":"Emitted whenever a reaction is removed from a cached message.","params":[{"name":"messageReaction","description":"The reaction object","type":[[["MessageReaction"]]]},{"name":"user","description":"The user whose emoji or reaction emoji was removed","type":[[["User"]]]}],"meta":{"line":33,"file":"MessageReactionRemove.js","path":"src/client/actions"}},{"name":"messageReactionRemoveAll","description":"Emitted whenever all reactions are removed from a cached message.","params":[{"name":"message","description":"The message the reactions were removed from","type":[[["Message"]]]},{"name":"reactions","description":"The cached message reactions that were removed.","type":[[["Collection","<("],["string","|"],["Snowflake","), "],["MessageReaction",">"]]]}],"meta":{"line":26,"file":"MessageReactionRemoveAll.js","path":"src/client/actions"}},{"name":"messageReactionRemoveEmoji","description":"Emitted when a bot removes an emoji reaction from a cached message.","params":[{"name":"reaction","description":"The reaction that was removed","type":[[["MessageReaction"]]]}],"meta":{"line":18,"file":"MessageReactionRemoveEmoji.js","path":"src/client/actions"}},{"name":"presenceUpdate","description":"Emitted whenever a guild member's presence (e.g. status, activity) is changed.","params":[{"name":"oldPresence","description":"The presence before the update, if one at all","nullable":true,"type":[[["Presence"]]]},{"name":"newPresence","description":"The presence after the update","type":[[["Presence"]]]}],"meta":{"line":32,"file":"PresenceUpdate.js","path":"src/client/actions"}},{"name":"stageInstanceCreate","description":"Emitted whenever a stage instance is created.","params":[{"name":"stageInstance","description":"The created stage instance","type":[[["StageInstance"]]]}],"meta":{"line":14,"file":"StageInstanceCreate.js","path":"src/client/actions"}},{"name":"stageInstanceDelete","description":"Emitted whenever a stage instance is deleted.","params":[{"name":"stageInstance","description":"The deleted stage instance","type":[[["StageInstance"]]]}],"meta":{"line":18,"file":"StageInstanceDelete.js","path":"src/client/actions"}},{"name":"stageInstanceUpdate","description":"Emitted whenever a stage instance gets updated - e.g. change in topic or privacy level","params":[{"name":"oldStageInstance","description":"The stage instance before the update","nullable":true,"type":[[["StageInstance"]]]},{"name":"newStageInstance","description":"The stage instance after the update","type":[[["StageInstance"]]]}],"meta":{"line":15,"file":"StageInstanceUpdate.js","path":"src/client/actions"}},{"name":"threadCreate","description":"Emitted whenever a thread is created or when the client user is added to a thread.","params":[{"name":"thread","description":"The thread that was created","type":[[["ThreadChannel"]]]},{"name":"newlyCreated","description":"Whether the thread was newly created","type":[[["boolean"]]]}],"meta":{"line":12,"file":"ThreadCreate.js","path":"src/client/actions"}},{"name":"threadDelete","description":"Emitted whenever a thread is deleted.","params":[{"name":"thread","description":"The thread that was deleted","type":[[["ThreadChannel"]]]}],"meta":{"line":20,"file":"ThreadDelete.js","path":"src/client/actions"}},{"name":"threadListSync","description":"Emitted whenever the client user gains access to a text or news channel that contains threads","params":[{"name":"threads","description":"The threads that were synced","type":[[["Collection","<"],["Snowflake",", "],["ThreadChannel",">"]]]}],"meta":{"line":38,"file":"ThreadListSync.js","path":"src/client/actions"}},{"name":"threadMembersUpdate","description":"Emitted whenever members are added or removed from a thread. Requires `GUILD_MEMBERS` privileged intent","params":[{"name":"oldMembers","description":"The members before the update","type":[[["Collection","<"],["Snowflake",", "],["ThreadMember",">"]]]},{"name":"newMembers","description":"The members after the update","type":[[["Collection","<"],["Snowflake",", "],["ThreadMember",">"]]]}],"meta":{"line":22,"file":"ThreadMembersUpdate.js","path":"src/client/actions"}},{"name":"threadMemberUpdate","description":"Emitted whenever the client user's thread member is updated.","params":[{"name":"oldMember","description":"The member before the update","type":[[["ThreadMember"]]]},{"name":"newMember","description":"The member after the update","type":[[["ThreadMember"]]]}],"meta":{"line":18,"file":"ThreadMemberUpdate.js","path":"src/client/actions"}},{"name":"typingStart","description":"Emitted whenever a user starts typing in a channel.","params":[{"name":"typing","description":"The typing state","type":[[["Typing"]]]}],"meta":{"line":19,"file":"TypingStart.js","path":"src/client/actions"}},{"name":"userUpdate","description":"Emitted whenever a user's details (e.g. username) are changed.\nTriggered by the Discord gateway events USER_UPDATE, GUILD_MEMBER_UPDATE, and PRESENCE_UPDATE.","params":[{"name":"oldUser","description":"The user before the update","type":[[["User"]]]},{"name":"newUser","description":"The user after the update","type":[[["User"]]]}],"meta":{"line":14,"file":"UserUpdate.js","path":"src/client/actions"}},{"name":"voiceStateUpdate","description":"Emitted whenever a member changes voice state - e.g. joins/leaves a channel, mutes/unmutes.","params":[{"name":"oldState","description":"The voice state before the update","type":[[["VoiceState"]]]},{"name":"newState","description":"The voice state after the update","type":[[["VoiceState"]]]}],"meta":{"line":32,"file":"VoiceStateUpdate.js","path":"src/client/actions"}},{"name":"webhookUpdate","description":"Emitted whenever a channel has its webhooks changed.","params":[{"name":"channel","description":"The channel that had a webhook update","type":[[["TextChannel"]],[["NewsChannel"]],[["VoiceChannel"]],[["StageChannel"]],[["ForumChannel"]]]}],"meta":{"line":10,"file":"WebhooksUpdate.js","path":"src/client/actions"}},{"name":"warn","description":"Emitted for general warnings.","params":[{"name":"info","description":"The warning","type":[[["string"]]]}],"meta":{"line":1092,"file":"Client.js","path":"src/client"}},{"name":"update","description":"Emitted whenever clientOptions.checkUpdate = false","params":[{"name":"oldVersion","description":"Current version","type":[[["string"]]]},{"name":"newVersion","description":"Latest version","type":[[["string"]]]}],"meta":{"line":497,"file":"Client.js","path":"src/client"}},{"name":"applicationCommandAutocompleteResponse","description":"Emitted when receiving a response from Discord","deprecated":"Test only","params":[{"name":"data","description":"Data","type":[[["AutocompleteResponse"]]]}],"meta":{"line":16,"file":"APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE.js","path":"src/client/websocket/handlers"}},{"name":"applicationCommandCreate","description":"Emitted when a guild application command is created.","deprecated":"See {@link https://github.com/discord/discord-api-docs/issues/3690 this issue} for more information.","params":[{"name":"command","description":"The command which was created","type":[[["ApplicationCommand"]]]}],"meta":{"line":11,"file":"APPLICATION_COMMAND_CREATE.js","path":"src/client/websocket/handlers"}},{"name":"applicationCommandDelete","description":"Emitted when a guild application command is deleted.","deprecated":"See {@link https://github.com/discord/discord-api-docs/issues/3690 this issue} for more information.","params":[{"name":"command","description":"The command which was deleted","type":[[["ApplicationCommand"]]]}],"meta":{"line":13,"file":"APPLICATION_COMMAND_DELETE.js","path":"src/client/websocket/handlers"}},{"name":"applicationCommandUpdate","description":"Emitted when a guild application command is updated.","deprecated":"See {@link https://github.com/discord/discord-api-docs/issues/3690 this issue} for more information.","params":[{"name":"oldCommand","description":"The command before the update","nullable":true,"type":[[["ApplicationCommand"]]]},{"name":"newCommand","description":"The command after the update","type":[[["ApplicationCommand"]]]}],"meta":{"line":12,"file":"APPLICATION_COMMAND_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"callCreate","description":"Emitted whenever received a call","params":[{"name":"call","description":"Call","type":[[["Call"]]]}],"meta":{"line":8,"file":"CALL_CREATE.js","path":"src/client/websocket/handlers"}},{"name":"callDelete","description":"Emitted whenever delete a call","params":[{"name":"call","description":"Call","type":[[["Call"]]]}],"meta":{"line":5,"file":"CALL_DELETE.js","path":"src/client/websocket/handlers"}},{"name":"callUpdate","description":"Emitted whenever update a call","params":[{"name":"call","description":"Call","type":[[["Call"]]]}],"meta":{"line":5,"file":"CALL_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"channelPinsUpdate","description":"Emitted whenever the pins of a channel are updated. Due to the nature of the WebSocket event,\nnot much information can be provided easily here - you need to manually check the pins yourself.","params":[{"name":"channel","description":"The channel that the pins update occurred in","type":[[["TextBasedChannels"]]]},{"name":"time","description":"The time of the pins update","type":[[["Date"]]]}],"meta":{"line":13,"file":"CHANNEL_PINS_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"channelRecipientAdd","description":"Emitted whenever a recipient is added from a group DM.","params":[{"name":"channel","description":"Group DM channel","type":[[["PartialGroupDMChannel"]]]},{"name":"user","description":"User","type":[[["User"]]]}],"meta":{"line":4,"file":"CHANNEL_RECIPIENT_ADD.js","path":"src/client/websocket/handlers"}},{"name":"channelRecipientRemove","description":"Emitted whenever a recipient is removed from a group DM.","params":[{"name":"channel","description":"Group DM channel","type":[[["PartialGroupDMChannel"]]]},{"name":"user","description":"User","type":[[["User"]]]}],"meta":{"line":4,"file":"CHANNEL_RECIPIENT_REMOVE.js","path":"src/client/websocket/handlers"}},{"name":"channelUpdate","description":"Emitted whenever a channel is updated - e.g. name change, topic change, channel type change.","params":[{"name":"oldChannel","description":"The channel before the update","type":[[["DMChannel"]],[["GuildChannel"]]]},{"name":"newChannel","description":"The channel after the update","type":[[["DMChannel"]],[["GuildChannel"]]]}],"meta":{"line":8,"file":"CHANNEL_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"guildAvailable","description":"Emitted whenever a guild becomes available.","params":[{"name":"guild","description":"The guild that became available","type":[[["Guild"]]]}],"meta":{"line":32,"file":"GUILD_CREATE.js","path":"src/client/websocket/handlers"}},{"name":"guildCreate","description":"Emitted whenever the client joins a guild.","params":[{"name":"guild","description":"The created guild","type":[[["Guild"]]]}],"meta":{"line":44,"file":"GUILD_CREATE.js","path":"src/client/websocket/handlers"}},{"name":"guildMemberAdd","description":"Emitted whenever a user joins a guild.","deprecated":"See {@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/issues/197 this issue} for more information.","params":[{"name":"member","description":"The member that has joined a guild","type":[[["GuildMember"]]]}],"meta":{"line":11,"file":"GUILD_MEMBER_ADD.js","path":"src/client/websocket/handlers"}},{"name":"guildMemberListUpdate","description":"Emitted whenever a guild member list (sidebar) is updated.","params":[{"name":"members","description":"Members that were updated","type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]]},{"name":"guild","description":"Guild","type":[[["Guild"]]]},{"name":"type","description":"Type of update (INVALIDATE | UPDATE | INSERT | DELETE | SYNC)","type":[[["string"]]]},{"name":"raw","description":"Raw data","type":[[["data"]]]}],"meta":{"line":46,"file":"GUILD_MEMBER_LIST_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"guildMembersChunk","description":"Emitted whenever a chunk of guild members is received (all members come from the same guild).","params":[{"name":"members","description":"The members in the chunk","type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]]},{"name":"guild","description":"The guild related to the member chunk","type":[[["Guild"]]]},{"name":"chunk","description":"Properties of the received chunk","type":[[["GuildMembersChunk"]]]}],"meta":{"line":26,"file":"GUILD_MEMBERS_CHUNK.js","path":"src/client/websocket/handlers"}},{"name":"interactionFailure","description":"Emitted whenever client user send interaction and error","params":[{"name":"data","description":"data","type":[[["InteractionResponseBody"]]]}],"meta":{"line":5,"file":"INTERACTION_FAILURE.js","path":"src/client/websocket/handlers"}},{"name":"interactionModalCreate","description":"Emitted whenever client user receive interaction.showModal()","params":[{"name":"modal","description":"The modal (extended)","type":[[["Modal"]]]}],"meta":{"line":5,"file":"INTERACTION_MODAL_CREATE.js","path":"src/client/websocket/handlers"}},{"name":"interactionSuccess","description":"Emitted whenever client user send interaction and success","params":[{"name":"data","description":"data","type":[[["InteractionResponseBody"]]]}],"meta":{"line":5,"file":"INTERACTION_SUCCESS.js","path":"src/client/websocket/handlers"}},{"name":"messageAck","description":"Emitted whenever message is acknowledged (mark read / unread)","params":[{"name":"channel","description":"Channel","type":[[["TextChannel"]]]},{"name":"message_id","description":"Message ID","type":[[["Snowflake"]]]},{"name":"isRead","description":"Whether the message is read","type":[[["boolean"]]]},{"name":"raw","description":"Raw data","type":[[["Object"]]]}],"meta":{"line":7,"file":"MESSAGE_ACK.js","path":"src/client/websocket/handlers"}},{"name":"messageUpdate","description":"Emitted whenever a message is updated - e.g. embed or content change.","params":[{"name":"oldMessage","description":"The message before the update","type":[[["Message"]]]},{"name":"newMessage","description":"The message after the update","type":[[["Message"]]]}],"meta":{"line":8,"file":"MESSAGE_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"relationshipAdd","description":"Emitted whenever a relationship is updated.","params":[{"name":"user","description":"The userID that was updated","type":[[["Snowflake"]]]},{"name":"type","description":"The new relationship type","type":[[["RelationshipTypes"]]]}],"meta":{"line":10,"file":"RELATIONSHIP_ADD.js","path":"src/client/websocket/handlers"}},{"name":"relationshipRemove","description":"Emitted whenever a relationship is delete.","params":[{"name":"user","description":"The userID that was updated","type":[[["Snowflake"]]]},{"name":"type","description":"The type of the old relationship","type":[[["RelationshipTypes"]]]}],"meta":{"line":8,"file":"RELATIONSHIP_REMOVE.js","path":"src/client/websocket/handlers"}},{"name":"relationshipUpdate","description":"Emitted whenever a relationship is updated.","params":[{"name":"user","description":"The userID that was updated","type":[[["Snowflake"]]]},{"name":"type","description":"The new relationship type","type":[[["RelationshipTypes"]]]},{"name":"data","description":"The raw data","type":[[["Object"]]]}],"meta":{"line":7,"file":"RELATIONSHIP_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"shardResume","description":"Emitted when a shard resumes successfully.","params":[{"name":"id","description":"The shard id that resumed","type":[[["number"]]]},{"name":"replayedEvents","description":"The amount of replayed events","type":[[["number"]]]}],"meta":{"line":7,"file":"RESUMED.js","path":"src/client/websocket/handlers"}},{"name":"threadUpdate","description":"Emitted whenever a thread is updated - e.g. name change, archive state change, locked state change.","params":[{"name":"oldThread","description":"The thread before the update","type":[[["ThreadChannel"]]]},{"name":"newThread","description":"The thread after the update","type":[[["ThreadChannel"]]]}],"meta":{"line":8,"file":"THREAD_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"userGuildSettingsUpdate","description":"Emitted whenever guild settings are updated","params":[{"name":"guild","description":"Guild","type":[[["Guild"]]]}],"meta":{"line":6,"file":"USER_GUILD_SETTINGS_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"shardReady","description":"Emitted when a shard turns ready.","params":[{"name":"id","description":"The shard id that turned ready","type":[[["number"]]]},{"name":"unavailableGuilds","description":"Set of unavailable guild ids, if any","nullable":true,"type":[[["Set","<"],["Snowflake",">"]]]}],"meta":{"line":200,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"shardDisconnect","description":"Emitted when a shard's WebSocket disconnects and will no longer reconnect.","params":[{"name":"event","description":"The WebSocket close event","type":[[["CloseEvent"]]]},{"name":"id","description":"The shard id that disconnected","type":[[["number"]]]}],"meta":{"line":214,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"shardReconnecting","description":"Emitted when a shard is attempting to reconnect or re-identify.","params":[{"name":"id","description":"The shard id that is attempting to reconnect","type":[[["number"]]]}],"meta":{"line":230,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"invalidated","description":"Emitted when the client's session becomes invalidated.\nYou are expected to handle closing the process gracefully and preventing a boot loop\nif you are listening to this event.","meta":{"line":304,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"unhandledPacket","description":"Emitted whenever a packet isn't handled.","params":[{"name":"packet","description":"The packet (t: Event name, d: Data)","type":[[["Object"]]]},{"name":"shard","description":"The shard that received the packet (Auto = 0)","type":[[["Number"]]]}],"meta":{"line":368,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"ready","description":"Emitted when the client becomes ready to start working.","params":[{"name":"client","description":"The client","type":[[["Client"]]]}],"meta":{"line":401,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"shardError","description":"Emitted whenever a shard's WebSocket encounters a connection error.","params":[{"name":"error","description":"The encountered error","type":[[["Error"]]]},{"name":"shardId","description":"The shard that encountered this error","type":[[["number"]]]}],"meta":{"line":345,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"captchaRequired","description":"Emitted when a request is blocked by a captcha","params":[{"name":"request","description":"The request that was blocked","type":[[["Request"]]]},{"name":"data","description":"The data returned by Discord","type":[[["Captcha"]]]}],"meta":{"line":358,"file":"RequestHandler.js","path":"src/rest"}},{"name":"error","description":"Emitted when the client encounters an error.","params":[{"name":"error","description":"The error encountered","type":[[["Error"]]]}],"meta":{"line":211,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"debug","description":"Emitted for general debugging information.","params":[{"name":"info","description":"The debug information","type":[[["string"]]]}],"meta":{"line":83,"file":"BaseClient.js","path":"src/client"}},{"name":"rateLimit","description":"Emitted when the client hits a rate limit while making a request","params":[{"name":"rateLimitData","description":"Object containing the rate limit info","type":[[["RateLimitData"]]]}],"meta":{"line":137,"file":"RequestHandler.js","path":"src/rest"}},{"name":"apiRequest","description":"Emitted before every API request.\nThis event can emit several times for the same request, e.g. when hitting a rate limit.\nThis is an informational event that is emitted quite frequently,\nit is highly recommended to check `request.path` to filter the data.","params":[{"name":"request","description":"The request that is about to be sent","type":[[["APIRequest"]]]}],"meta":{"line":188,"file":"RequestHandler.js","path":"src/rest"}},{"name":"apiResponse","description":"Emitted after every API request has received a response.\nThis event does not necessarily correlate to completion of the request, e.g. when hitting a rate limit.\nThis is an informational event that is emitted quite frequently,\nit is highly recommended to check `request.path` to filter the data.","params":[{"name":"request","description":"The request that triggered this response","type":[[["APIRequest"]]]},{"name":"response","description":"The response received from the Discord API","type":[[["Response"]]]}],"meta":{"line":220,"file":"RequestHandler.js","path":"src/rest"}},{"name":"invalidRequestWarning","description":"Emitted periodically when the process sends invalid requests to let users avoid the\n10k invalid requests in 10 minutes threshold that causes a ban","params":[{"name":"invalidRequestWarningData","description":"Object containing the invalid request info","type":[[["InvalidRequestWarningData"]]]}],"meta":{"line":297,"file":"RequestHandler.js","path":"src/rest"}}],"meta":{"line":49,"file":"Client.js","path":"src/client"}},{"name":"ClientVoiceManager","description":"Manages voice connections for the client","props":[{"name":"client","description":"The client that instantiated this voice manager","readonly":true,"type":[[["Client"]]],"meta":{"line":10,"file":"ClientVoiceManager.js","path":"src/client/voice"}},{"name":"adapters","description":"Maps guild ids to voice adapters created for use with @discordjs/voice.","type":[[["Map","<"],["Snowflake",", "],["Object",">"]]],"meta":{"line":22,"file":"ClientVoiceManager.js","path":"src/client/voice"}}],"meta":{"line":8,"file":"ClientVoiceManager.js","path":"src/client/voice"}},{"name":"WebhookClient","description":"The webhook client.","extends":[[["BaseClient"]]],"implements":[[["Webhook"]]],"construct":{"name":"WebhookClient","params":[{"name":"data","description":"The data of the webhook","type":[[["WebhookClientData"]]]},{"name":"options","description":"Options for the client","optional":true,"type":[[["ClientOptions"]]]}]},"props":[{"name":"id","description":"The webhook's id","type":[[["Snowflake"]]],"meta":{"line":55,"file":"Webhook.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the webhook was created at","readonly":true,"type":[[["number"]]],"meta":{"line":394,"file":"Webhook.js","path":"src/structures"}},{"name":"createdAt","description":"The time the webhook was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":403,"file":"Webhook.js","path":"src/structures"}},{"name":"url","description":"The URL of this webhook","readonly":true,"type":[[["string"]]],"meta":{"line":412,"file":"Webhook.js","path":"src/structures"}},{"name":"options","description":"The options the client was instantiated with","type":[[["ClientOptions"]]],"meta":{"line":26,"file":"BaseClient.js","path":"src/client"}},{"name":"rest","description":"The REST manager of the client","access":"private","type":[[["RESTManager"]]],"meta":{"line":33,"file":"BaseClient.js","path":"src/client"}},{"name":"api","description":"API shortcut","access":"private","readonly":true,"type":[[["Object"]]],"meta":{"line":42,"file":"BaseClient.js","path":"src/client"}}],"methods":[{"name":"send","description":"Sends a message with this webhook.","implements":["Webhook#send"],"examples":["// Send a basic message\nwebhook.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a basic message in a thread\nwebhook.send({ content: 'hello!', threadId: '836856309672348295' })\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nwebhook.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nwebhook.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg'\n }]\n})\n .then(console.log)\n .catch(console.error);","// Send an embed with a local image inside\nwebhook.send({\n content: 'This is an embed',\n embeds: [{\n thumbnail: {\n url: 'attachment://file.jpg'\n }\n }],\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["WebhookMessageOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":185,"file":"Webhook.js","path":"src/structures"}},{"name":"sendSlackMessage","description":"Sends a raw slack message with this webhook.","see":["{@link https://api.slack.com/messaging/webhooks}"],"implements":["Webhook#sendSlackMessage"],"examples":["// Send a slack message\nwebhook.sendSlackMessage({\n 'username': 'Wumpus',\n 'attachments': [{\n 'pretext': 'this looks pretty cool',\n 'color': '#F0F',\n 'footer_icon': 'http://snek.s3.amazonaws.com/topSnek.png',\n 'footer': 'Powered by sneks',\n 'ts': Date.now() / 1_000\n }]\n}).catch(console.error);"],"params":[{"name":"body","description":"The raw body to send","type":[[["Object"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":225,"file":"Webhook.js","path":"src/structures"}},{"name":"edit","description":"Edits this webhook.","implements":["Webhook#edit"],"params":[{"name":"options","description":"Options for editing the webhook","type":[[["WebhookEditData"]]]},{"name":"reason","description":"Reason for editing the webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Webhook",">"]]],"meta":{"line":252,"file":"Webhook.js","path":"src/structures"}},{"name":"fetchMessage","description":"Gets a message that was sent by this webhook.","implements":["Webhook#fetchMessage"],"params":[{"name":"message","description":"The id of the message to fetch","type":[[["Snowflake"]],[["original","'"]]]},{"name":"cacheOrOptions","description":"The options to provide to fetch the message.\nA **deprecated** boolean may be passed instead to specify whether to cache the message.","optional":true,"default":"{}","type":[[["WebhookFetchMessageOptions"]],[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"description":"Returns the raw message data if the webhook was instantiated as a\n{@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned"},"meta":{"line":286,"file":"Webhook.js","path":"src/structures"}},{"name":"editMessage","description":"Edits a message that was sent by this webhook.","implements":["Webhook#editMessage"],"params":[{"name":"message","description":"The message to edit","type":[[["MessageResolvable"]],[["original","'"]]]},{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["WebhookEditMessageOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"description":"Returns the raw message data if the webhook was instantiated as a\n{@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned"},"meta":{"line":322,"file":"Webhook.js","path":"src/structures"}},{"name":"delete","description":"Deletes the webhook.","implements":["Webhook#delete"],"params":[{"name":"reason","description":"Reason for deleting this webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":364,"file":"Webhook.js","path":"src/structures"}},{"name":"deleteMessage","description":"Delete a message that was sent by this webhook.","implements":["Webhook#deleteMessage"],"params":[{"name":"message","description":"The message to delete","type":[[["MessageResolvable"]],[["original","'"]]]},{"name":"threadId","description":"The id of the thread this message belongs to","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":374,"file":"Webhook.js","path":"src/structures"}},{"name":"destroy","description":"Destroys all assets used by the base client.","inherits":"BaseClient#destroy","inherited":true,"returns":[[["void"]]],"meta":{"line":50,"file":"BaseClient.js","path":"src/client"}},{"name":"incrementMaxListeners","description":"Increments max listeners by one, if they are not zero.","access":"private","inherits":"BaseClient#incrementMaxListeners","inherited":true,"meta":{"line":58,"file":"BaseClient.js","path":"src/client"}},{"name":"decrementMaxListeners","description":"Decrements max listeners by one, if they are not zero.","access":"private","inherits":"BaseClient#decrementMaxListeners","inherited":true,"meta":{"line":69,"file":"BaseClient.js","path":"src/client"}}],"events":[{"name":"debug","description":"Emitted for general debugging information.","params":[{"name":"info","description":"The debug information","type":[[["string"]]]}],"meta":{"line":83,"file":"BaseClient.js","path":"src/client"}},{"name":"rateLimit","description":"Emitted when the client hits a rate limit while making a request","params":[{"name":"rateLimitData","description":"Object containing the rate limit info","type":[[["RateLimitData"]]]}],"meta":{"line":137,"file":"RequestHandler.js","path":"src/rest"}},{"name":"apiRequest","description":"Emitted before every API request.\nThis event can emit several times for the same request, e.g. when hitting a rate limit.\nThis is an informational event that is emitted quite frequently,\nit is highly recommended to check `request.path` to filter the data.","params":[{"name":"request","description":"The request that is about to be sent","type":[[["APIRequest"]]]}],"meta":{"line":188,"file":"RequestHandler.js","path":"src/rest"}},{"name":"apiResponse","description":"Emitted after every API request has received a response.\nThis event does not necessarily correlate to completion of the request, e.g. when hitting a rate limit.\nThis is an informational event that is emitted quite frequently,\nit is highly recommended to check `request.path` to filter the data.","params":[{"name":"request","description":"The request that triggered this response","type":[[["APIRequest"]]]},{"name":"response","description":"The response received from the Discord API","type":[[["Response"]]]}],"meta":{"line":220,"file":"RequestHandler.js","path":"src/rest"}},{"name":"invalidRequestWarning","description":"Emitted periodically when the process sends invalid requests to let users avoid the\n10k invalid requests in 10 minutes threshold that causes a ban","params":[{"name":"invalidRequestWarningData","description":"Object containing the invalid request info","type":[[["InvalidRequestWarningData"]]]}],"meta":{"line":297,"file":"RequestHandler.js","path":"src/rest"}}],"meta":{"line":12,"file":"WebhookClient.js","path":"src/client"}},{"name":"WebSocketManager","description":"The WebSocket manager for this client.\nThis class forwards raw dispatch events,\nread more about it here {@link https://discord.com/developers/docs/topics/gateway}","extends":[[["EventEmitter"]]],"props":[{"name":"client","description":"The client that instantiated this WebSocketManager","readonly":true,"type":[[["Client"]]],"meta":{"line":40,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"gateway","description":"The gateway this manager uses","nullable":true,"type":[[["string"]]],"meta":{"line":52,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"totalShards","description":"The amount of shards this manager handles","access":"private","type":[[["number"]]],"meta":{"line":59,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"shards","description":"A collection of all shards this manager handles","type":[[["Collection","<"],["number",", "],["WebSocketShard",">"]]],"meta":{"line":65,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"shardQueue","description":"An array of shards to be connected or that need to reconnect","access":"private","type":[[["Set","<"],["WebSocketShard",">"]]],"meta":{"line":67,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"packetQueue","description":"An array of queued events before this WebSocketManager became ready","access":"private","type":[[["Array","<"],["Object",">"]]],"meta":{"line":75,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"status","description":"The current status of this WebSocketManager","type":[[["Status"]]],"meta":{"line":87,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"destroyed","description":"If this manager was destroyed. It will prevent shards from reconnecting","access":"private","type":[[["boolean"]]],"meta":{"line":94,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"reconnecting","description":"If this manager is currently reconnecting one or multiple shards","access":"private","type":[[["boolean"]]],"meta":{"line":101,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"ping","description":"The average ping of all WebSocketShards","readonly":true,"type":[[["number"]]],"meta":{"line":109,"file":"WebSocketManager.js","path":"src/client/websocket"}}],"methods":[{"name":"debug","description":"Emits a debug message.","access":"private","params":[{"name":"message","description":"The debug message","type":[[["string"]]]},{"name":"shard","description":"The shard that emitted this message, if any","optional":true,"nullable":true,"type":[[["WebSocketShard"]]]}],"meta":{"line":120,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"connect","description":"Connects this manager to the gateway.","access":"private","async":true,"meta":{"line":128,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"createShards","description":"Handles the creation of a shard.","access":"private","async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":190,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"reconnect","description":"Handles reconnects for this manager.","access":"private","async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":289,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"broadcast","description":"Broadcasts a packet to every shard this manager handles.","access":"private","params":[{"name":"packet","description":"The packet to send","type":[[["Object"]]]}],"meta":{"line":327,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"destroy","description":"Destroys this manager and all its shards.","access":"private","meta":{"line":335,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"handlePacket","description":"Processes a packet and queues it if this WebSocketManager is not ready.","access":"private","params":[{"name":"packet","description":"The packet to be handled","optional":true,"type":[[["Object"]]]},{"name":"shard","description":"The shard that will handle this packet","optional":true,"type":[[["WebSocketShard"]]]}],"returns":[[["boolean"]]],"meta":{"line":350,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"checkShardsReady","description":"Checks whether the client is ready to be marked as ready.","access":"private","meta":{"line":383,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"triggerClientReady","description":"Causes the client to be marked as ready and emits the ready event.","access":"private","meta":{"line":396,"file":"WebSocketManager.js","path":"src/client/websocket"}}],"meta":{"line":36,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"WebSocketShard","description":"Represents a Shard's WebSocket connection","props":[{"name":"manager","description":"The WebSocketManager of the shard","type":[[["WebSocketManager"]]],"meta":{"line":29,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"id","description":"The shard's id","type":[[["number"]]],"meta":{"line":35,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"status","description":"The current status of the shard","type":[[["Status"]]],"meta":{"line":41,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"sequence","description":"The current sequence of the shard","access":"private","type":[[["number"]]],"meta":{"line":48,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"closeSequence","description":"The sequence of the shard after close","access":"private","type":[[["number"]]],"meta":{"line":55,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"sessionId","description":"The current session id of the shard","access":"private","nullable":true,"type":[[["string"]]],"meta":{"line":62,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"resumeURL","description":"URL to use when resuming","access":"private","nullable":true,"type":[[["string"]]],"meta":{"line":69,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"ping","description":"The previous heartbeat ping of the shard","type":[[["number"]]],"meta":{"line":75,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"lastPingTimestamp","description":"The last time a ping was sent (a timestamp)","access":"private","type":[[["number"]]],"meta":{"line":82,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"lastHeartbeatAcked","description":"If we received a heartbeat ack back. Used to identify zombie connections","access":"private","type":[[["boolean"]]],"meta":{"line":89,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"closeEmitted","description":"Used to prevent calling {@link WebSocketShard#event:close} twice while closing or terminating the WebSocket.","access":"private","type":[[["boolean"]]],"meta":{"line":96,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"ratelimit","description":"Contains the rate limit queue and metadata","access":"private","type":[[["Object"]]],"meta":{"line":98,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"connection","description":"The WebSocket connection for the current shard","access":"private","nullable":true,"type":[[["WebSocket"]]],"meta":{"line":114,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"inflate","description":"The compression to use","access":"private","nullable":true,"type":[[["Inflate"]]],"meta":{"line":127,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"helloTimeout","description":"The HELLO timeout","access":"private","nullable":true,"type":[[["NodeJSTimeout"]]],"meta":{"line":135,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"wsCloseTimeout","description":"The WebSocket timeout.","access":"private","nullable":true,"type":[[["NodeJSTimeout"]]],"meta":{"line":143,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"eventsAttached","description":"If the manager attached its event handlers on the shard","access":"private","type":[[["boolean"]]],"meta":{"line":151,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"expectedGuilds","description":"A set of guild ids this shard expects to receive","access":"private","nullable":true,"type":[[["Set","<"],["string",">"]]],"meta":{"line":159,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"readyTimeout","description":"The ready timeout","access":"private","nullable":true,"type":[[["NodeJSTimeout"]]],"meta":{"line":167,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"connectedAt","description":"Time when the WebSocket connection was opened","access":"private","type":[[["number"]]],"meta":{"line":175,"file":"WebSocketShard.js","path":"src/client/websocket"}}],"methods":[{"name":"debug","description":"Emits a debug event.","access":"private","params":[{"name":"message","description":"The debug message","type":[[["string"]]]}],"meta":{"line":189,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"connect","description":"Connects the shard to the gateway.","access":"private","returns":{"types":[[["Promise","<"],["void",">"]]],"description":"A promise that will resolve if the shard turns ready successfully,\nor reject if we couldn't connect"},"meta":{"line":199,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"onOpen","description":"Called whenever a connection is opened to the gateway.","access":"private","meta":{"line":300,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"onMessage","description":"Called whenever a message is received.","access":"private","params":[{"name":"event","description":"Event received","type":[[["MessageEvent"]]]}],"meta":{"line":310,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"onError","description":"Called whenever an error occurs with the WebSocket.","access":"private","params":[{"name":"event","description":"The error that occurred","type":[[["ErrorEvent"]]]}],"meta":{"line":341,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"onClose","description":"Called whenever a connection to the gateway is closed.","access":"private","params":[{"name":"event","description":"Close event that was received","type":[[["CloseEvent"]]]}],"meta":{"line":374,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"emitClose","description":"This method is responsible to emit close event for this shard.\nThis method helps the shard reconnect.","params":[{"name":"event","description":"Close event that was received","optional":true,"type":[[["CloseEvent"]]]}],"meta":{"line":397,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"onPacket","description":"Called whenever a packet is received.","access":"private","params":[{"name":"packet","description":"The received packet","type":[[["Object"]]]}],"meta":{"line":422,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"checkReady","description":"Checks if the shard can be marked as ready","access":"private","meta":{"line":511,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"setHelloTimeout","description":"Sets the HELLO packet timeout.","access":"private","params":[{"name":"time","description":"If set to -1, it will clear the hello timeout","optional":true,"type":[[["number"]]]}],"meta":{"line":563,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"setWsCloseTimeout","description":"Sets the WebSocket Close timeout.\nThis method is responsible for detecting any zombie connections if the WebSocket fails to close properly.","access":"private","params":[{"name":"time","description":"If set to -1, it will clear the timeout","optional":true,"type":[[["number"]]]}],"meta":{"line":585,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"setHeartbeatTimer","description":"Sets the heartbeat timer for this shard.","access":"private","params":[{"name":"time","description":"If -1, clears the interval, any other number sets an interval","type":[[["number"]]]}],"meta":{"line":624,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"sendHeartbeat","description":"Sends a heartbeat to the WebSocket.\nIf this shard didn't receive a heartbeat last time, it will destroy it and reconnect","access":"private","params":[{"name":"tag","description":"What caused this heartbeat to be sent","optional":true,"default":"'HeartbeatTimer'","type":[[["string"]]]},{"name":"ignoreHeartbeatAck","description":"If we should send the heartbeat forcefully.","optional":true,"type":[[["boolean"]]]}],"meta":{"line":646,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"ackHeartbeat","description":"Acknowledges a heartbeat.","access":"private","meta":{"line":674,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"identify","description":"Identifies the client on the connection.","access":"private","returns":[[["void"]]],"meta":{"line":686,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"identifyNew","description":"Identifies as a new connection on the gateway.","access":"private","meta":{"line":694,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"identifyResume","description":"Resumes a session on the gateway.","access":"private","meta":{"line":729,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"send","description":"Adds a packet to the queue to be sent to the gateway.\nIf you use this method, make sure you understand that you need to provide\na full [Payload](https://discord.com/developers/docs/topics/gateway-events#payload-structure).\nDo not use this method if you don't know what you're doing.","params":[{"name":"data","description":"The full packet to send","type":[[["Object"]]]},{"name":"important","description":"If this packet should be added first in queue","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":757,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"_send","description":"Sends data, bypassing the queue.","access":"private","params":[{"name":"data","description":"Packet to send","type":[[["Object"]]]}],"returns":[[["void"]]],"meta":{"line":768,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"processQueue","description":"Processes the current WebSocket queue.","access":"private","returns":[[["void"]]],"meta":{"line":785,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"destroy","description":"Destroys this shard and closes its WebSocket connection.","access":"private","params":[{"name":"options","description":"Options for destroying the shard","optional":true,"default":"{ closeCode: 1000, reset: false, emit: true, log: true }","type":[[["Object"]]]}],"meta":{"line":807,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"_cleanupConnection","description":"Cleans up the WebSocket connection listeners.","access":"private","meta":{"line":886,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"_emitDestroyed","description":"Emits the DESTROYED event on the shard","access":"private","meta":{"line":895,"file":"WebSocketShard.js","path":"src/client/websocket"}}],"events":[{"name":"close","description":"Emitted when a shard's WebSocket closes.","params":[{"name":"event","description":"The received event","type":[[["CloseEvent"]]]}],"meta":{"line":408,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"ready","description":"Emitted when the shard receives the READY payload and is now waiting for guilds","meta":{"line":430,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"resumed","description":"Emitted when the shard resumes successfully","meta":{"line":445,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"invalidSession","description":"Emitted when the session has been invalidated.","meta":{"line":486,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"allReady","description":"Emitted when the shard is fully ready.\nThis event is emitted if:\n* all guilds were received by this shard\n* the ready timeout expired, and some guilds are unavailable","params":[{"name":"unavailableGuilds","description":"Set of unavailable guilds, if any","nullable":true,"type":[[["Set","<"],["string",">"]]]}],"meta":{"line":522,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"destroyed","description":"Emitted when a shard is destroyed, but no WebSocket connection was present.","meta":{"line":896,"file":"WebSocketShard.js","path":"src/client/websocket"}}],"meta":{"line":21,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"ApplicationCommandManager","description":"Manages API methods for application commands and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"permissions","description":"The manager for permissions of arbitrary commands on arbitrary guilds","type":[[["ApplicationCommandPermissionsManager"]]],"meta":{"line":23,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["ApplicationCommand",">"]]],"meta":{"line":27,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"commandPath","description":"The APIRouter path to the commands","access":"private","params":[{"name":"options.id","description":"The application command's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options.guildId","description":"The guild's id to use in the path,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"returns":[[["Object"]]],"meta":{"line":45,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or multiple application commands from Discord, or the cache if it's already available.","examples":["// Fetch a single command\nclient.application.commands.fetch('123456789012345678')\n .then(command => console.log(`Fetched command ${command.name}`))\n .catch(console.error);","// Fetch all commands\nguild.commands.fetch()\n .then(commands => console.log(`Fetched ${commands.size} commands`))\n .catch(console.error);"],"params":[{"name":"id","description":"The application command's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["FetchApplicationCommandOptions"]]]}],"async":true,"returns":[[["Promise","<("],["ApplicationCommand","|"],["Collection","<"],["Snowflake",", "],["ApplicationCommand",">)>"]]],"meta":{"line":96,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"create","description":"Creates an application command.","examples":["// Create a new command\nclient.application.commands.create({\n name: 'test',\n description: 'A test command',\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"command","description":"The command","type":[[["ApplicationCommandDataResolvable"]]]},{"name":"guildId","description":"The guild's id to create this command in,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":134,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"set","description":"Sets all the commands for this application or guild.","examples":["// Set all commands to just this one\nclient.application.commands.set([\n {\n name: 'test',\n description: 'A test command',\n },\n])\n .then(console.log)\n .catch(console.error);","// Remove all commands\nguild.commands.set([])\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"commands","description":"The commands","type":[[["Array","<"],["ApplicationCommandDataResolvable",">"]]]},{"name":"guildId","description":"The guild's id to create the commands in,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["ApplicationCommand",">>"]]],"meta":{"line":164,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"edit","description":"Edits an application command.","examples":["// Edit an existing command\nclient.application.commands.edit('123456789012345678', {\n description: 'New description',\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"command","description":"The command to edit","type":[[["ApplicationCommandResolvable"]]]},{"name":"data","description":"The data to update the command with","type":[[["Partial","<"],["ApplicationCommandDataResolvable",">"]]]},{"name":"guildId","description":"The guild's id where the command registered,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":187,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes an application command.","examples":["// Delete a command\nguild.commands.delete('123456789012345678')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"command","description":"The command to delete","type":[[["ApplicationCommandResolvable"]]]},{"name":"guildId","description":"The guild's id where the command is registered,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise",""]]],"meta":{"line":210,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}},{"name":"transformCommand","description":"Transforms an {@link ApplicationCommandData} object into something that can be used with the API.","scope":"static","access":"private","params":[{"name":"command","description":"The command to transform","type":[[["ApplicationCommandDataResolvable"]]]}],"returns":[[["APIApplicationCommand"]]],"meta":{"line":228,"file":"ApplicationCommandManager.js","path":"src/managers"}}],"meta":{"line":15,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"ApplicationCommandPermissionsManager","description":"Manages API methods for permissions of Application Commands.","extends":[[["BaseManager"]]],"props":[{"name":"manager","description":"The manager or command that this manager belongs to","access":"private","type":[[["ApplicationCommandManager"]],[["ApplicationCommand"]]],"meta":{"line":21,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"guild","description":"The guild that this manager acts on","nullable":true,"type":[[["Guild"]]],"meta":{"line":27,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"guildId","description":"The id of the guild that this manager acts on","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":33,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"commandId","description":"The id of the command this manager acts on","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":39,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"permissionsPath","description":"The APIRouter path to the commands","access":"private","params":[{"name":"guildId","description":"The guild's id to use in the path,","type":[[["Snowflake"]]]},{"name":"commandId","description":"The application command's id","optional":true,"type":[[["Snowflake"]]]}],"returns":[[["Object"]]],"meta":{"line":51,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches the permissions for one or multiple commands.","examples":["// Fetch permissions for one command\nguild.commands.permissions.fetch({ command: '123456789012345678' })\n .then(perms => console.log(`Fetched permissions for ${perms.length} users`))\n .catch(console.error);","// Fetch permissions for all commands in a guild\nclient.application.commands.permissions.fetch({ guild: '123456789012345678' })\n .then(perms => console.log(`Fetched permissions for ${perms.size} commands`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options used to fetch permissions","optional":true,"type":[[["BaseApplicationCommandPermissionsOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Array","<"],["ApplicationCommandPermissions",">|"],["Collection","<"],["Snowflake",", "],["Array","<"],["ApplicationCommandPermissions",">>)>"]]],"meta":{"line":100,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"set","description":"Sets the permissions for one or more commands.","examples":["// Set the permissions for one command\nclient.application.commands.permissions.set({ guild: '892455839386304532', command: '123456789012345678',\n permissions: [\n {\n id: '876543210987654321',\n type: 'USER',\n permission: false,\n },\n]})\n .then(console.log)\n .catch(console.error);","// Set the permissions for all commands\nguild.commands.permissions.set({ fullPermissions: [\n {\n id: '123456789012345678',\n permissions: [{\n id: '876543210987654321',\n type: 'USER',\n permission: false,\n }],\n },\n]})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options used to set permissions","type":[[["SetApplicationCommandPermissionsOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Array","<"],["ApplicationCommandPermissions",">|"],["Collection","<"],["Snowflake",", "],["Array","<"],["ApplicationCommandPermissions",">>)>"]]],"meta":{"line":166,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"add","description":"Add permissions to a command.","examples":["// Block a role from the command permissions\nguild.commands.permissions.add({ command: '123456789012345678', permissions: [\n {\n id: '876543211234567890',\n type: 'ROLE',\n permission: false\n },\n]})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options used to add permissions","type":[[["AddApplicationCommandPermissionsOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationCommandPermissions",">>"]]],"meta":{"line":228,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"remove","description":"Remove permissions from a command.","examples":["// Remove a user permission from this command\nguild.commands.permissions.remove({ command: '123456789012345678', users: '876543210123456789' })\n .then(console.log)\n .catch(console.error);","// Remove multiple roles from this command\nguild.commands.permissions.remove({\n command: '123456789012345678', roles: ['876543210123456789', '765432101234567890']\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options used to remove permissions","type":[[["RemoveApplicationCommandPermissionsOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationCommandPermissions",">>"]]],"meta":{"line":280,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"has","description":"Check whether a permission exists for a user or role","examples":["// Check whether a user has permission to use a command\nguild.commands.permissions.has({ command: '123456789012345678', permissionId: '876543210123456789' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options used to check permissions","type":[[["AddApplicationCommandPermissionsOptions"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":356,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"transformPermissions","description":"Transforms an {@link ApplicationCommandPermissionData} object into something that can be used with the API.","scope":"static","access":"private","params":[{"name":"permissions","description":"The permissions to transform","type":[[["ApplicationCommandPermissionData"]]]},{"name":"received","description":"Whether these permissions have been received from Discord","optional":true,"type":[[["boolean"]]]}],"returns":[[["APIApplicationCommandPermissions"]]],"meta":{"line":407,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"AutoModerationRuleManager","description":"Manages API methods for auto moderation rules and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to.","type":[[["Guild"]]],"meta":{"line":25,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of items for this manager.","abstract":true,"type":[[["Collection"]]],"meta":{"line":49,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves an {@link AutoModerationRuleResolvable} to an {@link AutoModerationRule} object.","params":[{"name":"autoModerationRule","description":"The AutoModerationRule resolvable to resolve","type":[[["AutoModerationRuleResolvable"]]]}],"returns":{"types":[[["AutoModerationRule"]]],"nullable":true},"meta":{"line":28,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves an {@link AutoModerationRuleResolvable} to a {@link AutoModerationRule} id.","params":[{"name":"autoModerationRule","description":"The AutoModerationRule resolvable to resolve","type":[[["AutoModerationRuleResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":37,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"create","description":"Creates a new auto moderation rule.","params":[{"name":"options","description":"Options for creating the auto moderation rule","type":[[["AutoModerationRuleCreateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":108,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"edit","description":"Edits an auto moderation rule.","params":[{"name":"autoModerationRule","description":"The auto moderation rule to edit","type":[[["AutoModerationRuleResolvable"]]]},{"name":"options","description":"Options for editing the auto moderation rule","type":[[["AutoModerationRuleEditOptions"]]]}],"async":true,"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":174,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches auto moderation rules from Discord.","examples":["// Fetch all auto moderation rules from a guild without caching\nguild.autoModerationRules.fetch({ cache: false })\n .then(console.log)\n .catch(console.error);","// Fetch a single auto moderation rule\nguild.autoModerationRules.fetch('979083472868098119')\n .then(console.log)\n .catch(console.error);","// Fetch a single auto moderation rule without checking cache and without caching\nguild.autoModerationRules.fetch({ autoModerationRule: '979083472868098119', cache: false, force: true })\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"options","description":"Options for fetching auto moderation rule(s)","optional":true,"type":[[["AutoModerationRuleResolvable"]],[["FetchAutoModerationRuleOptions"]],[["FetchAutoModerationRulesOptions"]]]}],"returns":[[["Promise","<("],["AutoModerationRule","|"],["Collection","<"],["Snowflake",", "],["AutoModerationRule",">)>"]]],"meta":{"line":255,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes an auto moderation rule.","params":[{"name":"autoModerationRule","description":"The auto moderation rule to delete","type":[[["AutoModerationRuleResolvable"]]]},{"name":"reason","description":"The reason for deleting the auto moderation rule","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":290,"file":"AutoModerationRuleManager.js","path":"src/managers"}}],"meta":{"line":17,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"BaseGuildEmojiManager","description":"Holds methods to resolve GuildEmojis and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"cache","description":"The cache of GuildEmojis","type":[[["Collection","<"],["Snowflake",", "],["GuildEmoji",">"]]],"meta":{"line":17,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves an EmojiResolvable to an Emoji object.","params":[{"name":"emoji","description":"The Emoji resolvable to identify","type":[[["EmojiResolvable"]]]}],"returns":{"types":[[["GuildEmoji"]]],"nullable":true},"meta":{"line":36,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves an EmojiResolvable to an Emoji id string.","params":[{"name":"emoji","description":"The Emoji resolvable to identify","type":[[["EmojiResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":46,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"resolveIdentifier","description":"Resolves an EmojiResolvable to an emoji identifier.","params":[{"name":"emoji","description":"The emoji resolvable to resolve","type":[[["EmojiIdentifierResolvable"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":64,"file":"BaseGuildEmojiManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"BaseManager","description":"Manages the API methods of a data model.","abstract":true,"props":[{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"meta":{"line":7,"file":"BaseManager.js","path":"src/managers"}},{"name":"BillingManager","description":"Manages the API methods of a data model.","extends":[[["CachedManager"]]],"props":[{"name":"paymentSources","description":"All the payment sources of the client","type":[[["Collection","<"],["Snowflake",", "],["Object",">"]]],"meta":{"line":18,"file":"BillingManager.js","path":"src/managers"}},{"name":"guildBoosts","description":"All the guild boosts of the client","type":[[["Collection","<"],["Snowflake",", "],["GuildBoost",">"]]],"meta":{"line":23,"file":"BillingManager.js","path":"src/managers"}},{"name":"currentSubscription","description":"The current subscription of the client","type":[[["Collection","<"],["Snowflake",", "],["Object",">"]]],"meta":{"line":28,"file":"BillingManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of items for this manager.","abstract":true,"type":[[["Collection"]]],"meta":{"line":49,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetchPaymentSources","description":"Fetches all the payment sources of the client","async":true,"returns":[[["Collection","<"],["Snowflake",", "],["Object",">"]]],"meta":{"line":35,"file":"BillingManager.js","path":"src/managers"}},{"name":"fetchGuildBoosts","description":"Fetches all the guild boosts of the client","async":true,"returns":[[["Collection","<"],["Snowflake",", "],["GuildBoost",">"]]],"meta":{"line":47,"file":"BillingManager.js","path":"src/managers"}},{"name":"fetchCurrentSubscription","description":"Fetches the current subscription of the client","async":true,"returns":[[["Collection","<"],["Snowflake",", "],["Object",">"]]],"meta":{"line":58,"file":"BillingManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":11,"file":"BillingManager.js","path":"src/managers"}},{"name":"CachedManager","description":"Manages the API methods of a data model with a mutable cache of instances.","extends":[[["DataManager"]]],"abstract":true,"props":[{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of items for this manager.","abstract":true,"type":[[["Collection"]]],"meta":{"line":49,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":11,"file":"CachedManager.js","path":"src/managers"}},{"name":"ChannelManager","description":"A manager of channels belonging to a client","extends":[[["CachedManager"]]],"props":[{"name":"cache","description":"The cache of Channels","type":[[["Collection","<"],["Snowflake",", "],["Channel",">"]]],"meta":{"line":30,"file":"ChannelManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a ChannelResolvable to a Channel object.","params":[{"name":"channel","description":"The channel resolvable to resolve","type":[[["ChannelResolvable"]]]}],"returns":{"types":[[["Channel"]]],"nullable":true},"meta":{"line":73,"file":"ChannelManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a ChannelResolvable to a channel id string.","params":[{"name":"channel","description":"The channel resolvable to resolve","type":[[["ChannelResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":82,"file":"ChannelManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains a channel from Discord, or the channel cache if it's already available.","examples":["// Fetch a channel by its id\nclient.channels.fetch('222109930545610754')\n .then(channel => console.log(channel.name))\n .catch(console.error);"],"params":[{"name":"id","description":"The channel's id","type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["FetchChannelOptions"]]]}],"async":true,"returns":[[["Promise",""]]],"meta":{"line":109,"file":"ChannelManager.js","path":"src/managers"}},{"name":"createGroupDM","description":"Create Group DM","params":[{"name":"recipients","description":"Array of recipients","type":[[["Array","<"],["UserResolvable",">"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["PartialGroupDMChannel",">"]]],"description":"Channel"},"meta":{"line":125,"file":"ChannelManager.js","path":"src/managers"}}],"meta":{"line":14,"file":"ChannelManager.js","path":"src/managers"}},{"name":"ClientUserSettingManager","description":"Manages API methods for users and stores their cache.","see":["{@link https://luna.gitlab.io/discord-unofficial-docs/user_settings.html}"],"extends":[[["BaseManager"]]],"props":[{"name":"rawSetting","description":"Raw data","type":[[["Object"]]],"meta":{"line":22,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"locale","description":"Language","nullable":true,"type":[[["string"]]],"meta":{"line":27,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"activityDisplay","description":"From: Setting => ACTIVITY SETTINGS => Activity Status => Display current activity as a status message","nullable":true,"type":[[["boolean"]]],"meta":{"line":32,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"disableDMfromServer","description":"Disable Direct Message from servers","type":[[["Collection","<"],["Snowflake",", "],["boolean",">"]]],"meta":{"line":37,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"DMfromServerMode","description":"Allow direct messages from server members","nullable":true,"type":[[["boolean"]]],"meta":{"line":42,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"displayImage","description":"Display images","nullable":true,"type":[[["boolean"]]],"meta":{"line":47,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"linkedImageDisplay","description":"Display linked images","nullable":true,"type":[[["boolean"]]],"meta":{"line":52,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"autoplayGIF","description":"From: Setting => APP SETTINGS => Accessibility => Automatically play GIFs when Discord is focused.","nullable":true,"type":[[["boolean"]]],"meta":{"line":57,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"previewLink","description":"Show embeds and preview website links pasted into chat","nullable":true,"type":[[["boolean"]]],"meta":{"line":62,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"animatedEmojis","description":"From: Setting => APP SETTINGS => Accessibility => Play Animated Emojis","nullable":true,"type":[[["boolean"]]],"meta":{"line":67,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"allowTTS","description":"From: Setting => APP SETTINGS => Accessibility => Text-to-speech => Allow playback","nullable":true,"type":[[["boolean"]]],"meta":{"line":72,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"compactMode","description":"From: Setting => APP SETTINGS => Appearance => Message Display => Compact Mode","nullable":true,"type":[[["boolean"]]],"meta":{"line":77,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"convertEmoticons","description":"From: Setting => APP SETTINGS => Text & Images => Emoji => Convert Emoticons","nullable":true,"type":[[["boolean"]]],"meta":{"line":82,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"DMScanLevel","description":"SAFE DIRECT MESSAGING","nullable":true,"type":[[["DMScanLevel"]]],"meta":{"line":87,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"theme","description":"From: Setting => APP SETTINGS => Appearance => Theme","type":[[["dark","'"]],[["light","'"]],[["null"]]],"meta":{"line":92,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"developerMode","description":"Developer Mode (Copy ID, etc.)","nullable":true,"type":[[["boolean"]]],"meta":{"line":97,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"afkTimeout","description":"AFK timeout (receives notifications)","nullable":true,"type":[[["number"]]],"meta":{"line":102,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"stickerAnimationMode","description":"Sticker animation mode","nullable":true,"type":[[["stickerAnimationMode"]]],"meta":{"line":107,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"addFriendFrom","description":"WHO CAN ADD YOU AS A FRIEND ?","see":["{@link https://luna.gitlab.io/discord-unofficial-docs/user_settings.html#friend-source-flags-structure}"],"nullable":true,"type":[[["object"]]],"meta":{"line":113,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"showEmojiReactions","description":"From: Setting => APP SETTINGS => Text & Images => Emoji => Show emoji reactions","nullable":true,"type":[[["boolean"]]],"meta":{"line":122,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"customStatus","description":"Custom Stauts","see":["{@link https://luna.gitlab.io/discord-unofficial-docs/custom_status.html#customstatus-structure}"],"nullable":true,"type":[[["object"]]],"meta":{"line":128,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"guildFolder","description":"Guild folder and position","type":[[["GuildFolderManager"]]],"meta":{"line":133,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"_patch","description":"Patch data file\nhttps://github.com/Merubokkusu/Discord-S.C.U.M/blob/master/discum/user/user.py","access":"private","params":[{"name":"data","description":"Raw Data to patch","type":[[["Object"]]]}],"meta":{"line":142,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"edit","description":"Edit data","access":"private","params":[{"name":"data","description":"Data to edit","type":[[["Object"]]]}],"async":true,"meta":{"line":226,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"setDisplayCompactMode","description":"Set compact mode","params":[{"name":"value","description":"Compact mode enable or disable","type":[[["boolean"]],[["null"]]]}],"async":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"setTheme","description":"Discord Theme","params":[{"name":"value","description":"Theme to set","type":[[["null"]],[["dark"]],[["light"]]]}],"async":true,"returns":[[["theme"]]],"meta":{"line":252,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"setCustomStatus","description":"Set custom status","params":[{"name":"options","description":"CustomStatus","type":[[["CustomStatus"]],[["CustomStatusOption"]]]}],"meta":{"line":280,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"setLocale","description":"* Locale Setting, must be one of:\n* `DANISH`\n* `GERMAN`\n* `ENGLISH_UK`\n* `ENGLISH_US`\n* `SPANISH`\n* `FRENCH`\n* `CROATIAN`\n* `ITALIAN`\n* `LITHUANIAN`\n* `HUNGARIAN`\n* `DUTCH`\n* `NORWEGIAN`\n* `POLISH`\n* `BRAZILIAN_PORTUGUESE`\n* `ROMANIA_ROMANIAN`\n* `FINNISH`\n* `SWEDISH`\n* `VIETNAMESE`\n* `TURKISH`\n* `CZECH`\n* `GREEK`\n* `BULGARIAN`\n* `RUSSIAN`\n* `UKRAINIAN`\n* `HINDI`\n* `THAI`\n* `CHINA_CHINESE`\n* `JAPANESE`\n* `TAIWAN_CHINESE`\n* `KOREAN`","params":[{"name":"value","description":"Locale to set","type":[[["localeSetting"]]]}],"async":true,"returns":[[["locale"]]],"meta":{"line":369,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"_move","access":"private","params":[{"name":"array","description":"Array","type":[[["Array"]]]},{"name":"from","description":"Index1","type":[[["number"]]]},{"name":"to","description":"Index2","type":[[["number"]]]}],"returns":[[["Array"]]],"meta":{"line":389,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"guildChangePosition","description":"Change Guild Position (from * to Folder or Home)","access":"private","params":[{"name":"guildId","description":"guild.id","type":[[["GuildIDResolve"]]]},{"name":"newPosition","description":"Guild Position\n* **WARNING**: Type = `FOLDER`, newPosition is the guild's index in the Folder.","type":[[["number"]]]},{"name":"type","description":"Move to folder or home\n* `FOLDER`: 1\n* `HOME`: 2","type":[[["number"]]]},{"name":"folderId","description":"If you want to move to folder","type":[[["FolderID"]]]}],"meta":{"line":409,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"restrictedGuilds","description":"Restricted guilds setting","params":[{"name":"status","description":"Restricted status","type":[[["boolean"]]]}],"returns":[[["Promise"]]],"meta":{"line":455,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"addRestrictedGuild","description":"Add a guild to the list of restricted guilds.","params":[{"name":"guildId","description":"The guild to add","type":[[["GuildIDResolve"]]]}],"returns":[[["Promise"]]],"meta":{"line":469,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"removeRestrictedGuild","description":"Remove a guild from the list of restricted guilds.","params":[{"name":"guildId","description":"The guild to remove","type":[[["GuildIDResolve"]]]}],"returns":[[["Promise"]]],"meta":{"line":484,"file":"ClientUserSettingManager.js","path":"src/managers"}}],"meta":{"line":15,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"DataManager","description":"Manages the API methods of a data model along with a collection of instances.","extends":[[["BaseManager"]]],"abstract":true,"props":[{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of items for this manager.","abstract":true,"type":[[["Collection"]]],"meta":{"line":30,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a data entry to a data Object.","params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":11,"file":"DataManager.js","path":"src/managers"}},{"name":"DeveloperPortalManager","description":"Manages API methods for users and stores their cache.","extends":[[["BaseManager"]]],"props":[{"name":"applications","description":"A collection of all the applications the client has.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["DeveloperPortalApplication",">"]]],"meta":{"line":20,"file":"DeveloperPortalManager.js","path":"src/managers"}},{"name":"teams","description":"A collection of all the teams the client has.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Team",">"]]],"meta":{"line":26,"file":"DeveloperPortalManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetch","description":"Fetches all the applications & teams the client has.","async":true,"returns":[[["Promise","<"],["DeveloperPortalManager",">"]]],"meta":{"line":32,"file":"DeveloperPortalManager.js","path":"src/managers"}},{"name":"createTeam","description":"Creates a new Team.","params":[{"name":"name","description":"Name of the team","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Team",">"]]],"meta":{"line":54,"file":"DeveloperPortalManager.js","path":"src/managers"}},{"name":"createApplication","description":"Creates a new application.","params":[{"name":"name","description":"Name of the application","type":[[["string"]]]},{"name":"teamId","description":"The team to create the application in","default":null,"type":[[["Snowflake"]],[["Team"]]]}],"async":true,"returns":[[["Promise","<"],["DeveloperPortalApplication",">"]]],"meta":{"line":71,"file":"DeveloperPortalManager.js","path":"src/managers"}},{"name":"deleteApplication","description":"Deletes an application.","params":[{"name":"id","description":"Application ID","type":[[["Snowflake"]]]},{"name":"MFACode","description":"2FA code (if 2FA is enabled)","nullable":true,"type":[[["number"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":89,"file":"DeveloperPortalManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"DeveloperPortalManager.js","path":"src/managers"}},{"name":"GuildApplicationCommandManager","description":"An extension for guild-specific application commands.","extends":[[["ApplicationCommandManager"]]],"props":[{"name":"guild","description":"The guild that this manager belongs to","type":[[["Guild"]]],"meta":{"line":18,"file":"GuildApplicationCommandManager.js","path":"src/managers"}},{"name":"permissions","description":"The manager for permissions of arbitrary commands on this guild","type":[[["ApplicationCommandPermissionsManager"]]],"meta":{"line":24,"file":"GuildApplicationCommandManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["ApplicationCommand",">"]]],"meta":{"line":27,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"commandPath","description":"The APIRouter path to the commands","access":"private","inherits":"ApplicationCommandManager#commandPath","inherited":true,"params":[{"name":"options.id","description":"The application command's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options.guildId","description":"The guild's id to use in the path,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"returns":[[["Object"]]],"meta":{"line":45,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or multiple application commands from Discord, or the cache if it's already available.","inherits":"ApplicationCommandManager#fetch","inherited":true,"examples":["// Fetch a single command\nclient.application.commands.fetch('123456789012345678')\n .then(command => console.log(`Fetched command ${command.name}`))\n .catch(console.error);","// Fetch all commands\nguild.commands.fetch()\n .then(commands => console.log(`Fetched ${commands.size} commands`))\n .catch(console.error);"],"params":[{"name":"id","description":"The application command's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["FetchApplicationCommandOptions"]]]}],"async":true,"returns":[[["Promise","<("],["ApplicationCommand","|"],["Collection","<"],["Snowflake",", "],["ApplicationCommand",">)>"]]],"meta":{"line":96,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"create","description":"Creates an application command.","inherits":"ApplicationCommandManager#create","inherited":true,"examples":["// Create a new command\nclient.application.commands.create({\n name: 'test',\n description: 'A test command',\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"command","description":"The command","type":[[["ApplicationCommandDataResolvable"]]]},{"name":"guildId","description":"The guild's id to create this command in,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":134,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"set","description":"Sets all the commands for this application or guild.","inherits":"ApplicationCommandManager#set","inherited":true,"examples":["// Set all commands to just this one\nclient.application.commands.set([\n {\n name: 'test',\n description: 'A test command',\n },\n])\n .then(console.log)\n .catch(console.error);","// Remove all commands\nguild.commands.set([])\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"commands","description":"The commands","type":[[["Array","<"],["ApplicationCommandDataResolvable",">"]]]},{"name":"guildId","description":"The guild's id to create the commands in,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["ApplicationCommand",">>"]]],"meta":{"line":164,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"edit","description":"Edits an application command.","inherits":"ApplicationCommandManager#edit","inherited":true,"examples":["// Edit an existing command\nclient.application.commands.edit('123456789012345678', {\n description: 'New description',\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"command","description":"The command to edit","type":[[["ApplicationCommandResolvable"]]]},{"name":"data","description":"The data to update the command with","type":[[["Partial","<"],["ApplicationCommandDataResolvable",">"]]]},{"name":"guildId","description":"The guild's id where the command registered,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":187,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes an application command.","inherits":"ApplicationCommandManager#delete","inherited":true,"examples":["// Delete a command\nguild.commands.delete('123456789012345678')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"command","description":"The command to delete","type":[[["ApplicationCommandResolvable"]]]},{"name":"guildId","description":"The guild's id where the command is registered,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise",""]]],"meta":{"line":210,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"GuildApplicationCommandManager.js","path":"src/managers"}},{"name":"GuildBanManager","description":"Manages API methods for GuildBans and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this Manager belongs to","type":[[["Guild"]]],"meta":{"line":24,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["GuildBan",">"]]],"meta":{"line":27,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a GuildBanResolvable to a GuildBan object.","params":[{"name":"ban","description":"The ban that is in the guild","type":[[["GuildBanResolvable"]]]}],"returns":{"types":[[["GuildBan"]]],"nullable":true},"meta":{"line":49,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches ban(s) from Discord.","examples":["// Fetch multiple bans from a guild\nguild.bans.fetch()\n .then(console.log)\n .catch(console.error);","// Fetch a maximum of 5 bans from a guild without caching\nguild.bans.fetch({ limit: 5, cache: false })\n .then(console.log)\n .catch(console.error);","// Fetch a single ban\nguild.bans.fetch('351871113346809860')\n .then(console.log)\n .catch(console.error);","// Fetch a single ban without checking cache\nguild.bans.fetch({ user, force: true })\n .then(console.log)\n .catch(console.error)","// Fetch a single ban without caching\nguild.bans.fetch({ user, cache: false })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for fetching guild ban(s)","optional":true,"type":[[["UserResolvable"]],[["FetchBanOptions"]],[["FetchBansOptions"]]]}],"returns":[[["Promise","<("],["GuildBan","|"],["Collection","<"],["Snowflake",", "],["GuildBan",">)>"]]],"meta":{"line":98,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"create","description":"Bans a user from the guild.","examples":["// Ban a user by id (or with a user/guild member object)\nguild.bans.create('84484653687267328')\n .then(banInfo => console.log(`Banned ${banInfo.user?.tag ?? banInfo.tag ?? banInfo}`))\n .catch(console.error);"],"params":[{"name":"user","description":"The user to ban","type":[[["UserResolvable"]]]},{"name":"options","description":"Options for the ban","optional":true,"type":[[["BanOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["GuildMember","|"],["User","|"],["Snowflake",")>"]]],"description":"Result object will be resolved as specifically as possible.\nIf the GuildMember cannot be resolved, the User will instead be attempted to be resolved. If that also cannot\nbe resolved, the user id will be the result."},"meta":{"line":151,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"remove","description":"Unbans a user from the guild.","examples":["// Unban a user by id (or with a user/guild member object)\nguild.bans.remove('84484653687267328')\n .then(user => console.log(`Unbanned ${user.username} from ${guild.name}`))\n .catch(console.error);"],"params":[{"name":"user","description":"The user to unban","type":[[["UserResolvable"]]]},{"name":"reason","description":"Reason for unbanning user","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise",""]]],"meta":{"line":196,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":16,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"GuildChannelManager","description":"Manages API methods for GuildChannels and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this Manager belongs to","type":[[["Guild"]]],"meta":{"line":50,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"channelCountWithoutThreads","description":"The number of channels in this managers cache excluding thread channels\nthat do not count towards a guild's maximum channels restriction.","readonly":true,"type":[[["number"]]],"meta":{"line":59,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", ("],["GuildChannel","|"],["ThreadChannel",")>"]]],"meta":{"line":66,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a GuildChannelResolvable to a Channel object.","params":[{"name":"channel","description":"The GuildChannel resolvable to resolve","type":[[["GuildChannelResolvable"]]]}],"returns":{"types":[[["GuildChannel"]],[["ThreadChannel"]]],"nullable":true},"meta":{"line":92,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a GuildChannelResolvable to a channel id.","params":[{"name":"channel","description":"The GuildChannel resolvable to resolve","type":[[["GuildChannelResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":102,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"create","description":"Creates a new channel in the guild.","examples":["// Create a new text channel\nguild.channels.create('new-general', { reason: 'Needed a cool new channel' })\n .then(console.log)\n .catch(console.error);","// Create a new channel with permission overwrites\nguild.channels.create('new-voice', {\n type: 'GUILD_VOICE',\n permissionOverwrites: [\n {\n id: message.author.id,\n deny: [Permissions.FLAGS.VIEW_CHANNEL],\n },\n ],\n})"],"params":[{"name":"name","description":"The name of the new channel","type":[[["string"]]]},{"name":"options","description":"Options for creating the new channel","optional":true,"default":"{}","type":[[["GuildChannelCreateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":135,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","examples":["// Create a webhook for the current channel\nguild.channels.createWebhook('222197033908436994', 'Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"channel","description":"The channel to create the webhook for","type":[[["GuildChannelResolvable"]]]},{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":217,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"addFollower","description":"Adds the target channel to a channel's followers.","params":[{"name":"channel","description":"The channel to follow","type":[[["NewsChannel"]],[["Snowflake"]]]},{"name":"targetChannel","description":"The channel where published announcements will be posted at","type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for creating the webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Snowflake",">"]]],"description":"Returns created target webhook id."},"meta":{"line":240,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"edit","description":"Edits the channel.","examples":["// Edit a channel\nguild.channels.edit('222197033908436994', { name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"channel","description":"The channel to edit","type":[[["GuildChannelResolvable"]]]},{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":290,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","examples":["// Set a new channel position\nguild.channels.setPosition('222078374472843266', 2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The channel to set the position for","type":[[["GuildChannelResolvable"]]]},{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":359,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or more guild channels from Discord, or the channel cache if they're already available.","examples":["// Fetch all channels from the guild (excluding threads)\nmessage.guild.channels.fetch()\n .then(channels => console.log(`There are ${channels.size} channels.`))\n .catch(console.error);","// Fetch a single channel\nmessage.guild.channels.fetch('222197033908436994')\n .then(channel => console.log(`The channel name is: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"id","description":"The channel's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<(?"],["GuildChannel","|"],["ThreadChannel","|"],["Collection","<"],["Snowflake",", ?"],["GuildChannel",">)>"]]],"meta":{"line":394,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","examples":["// Fetch webhooks\nguild.channels.fetchWebhooks('769862166131245066')\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The channel to fetch webhooks for","type":[[["GuildChannelResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":423,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"setPositions","description":"Batch-updates the guild's channels' positions.\nOnly one channel's parent can be changed at a time","examples":["guild.channels.setPositions([{ channel: channelId, position: newChannelIndex }])\n .then(guild => console.log(`Updated channel positions for ${guild}`))\n .catch(console.error);"],"params":[{"name":"channelPositions","description":"Channel positions to update","type":[[["Array","<"],["ChannelPosition",">"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":456,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"fetchActiveThreads","description":"Obtains all active thread channels in the guild from Discord","examples":["// Fetch all threads from the guild\nmessage.guild.channels.fetchActiveThreads()\n .then(fetched => console.log(`There are ${fetched.threads.size} threads.`))\n .catch(console.error);"],"params":[{"name":"cache","description":"Whether to cache the fetched data","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":481,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes the channel.","examples":["// Delete the channel\nguild.channels.delete('858850993013260338', 'making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"channel","description":"The channel to delete","type":[[["GuildChannelResolvable"]]]},{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":497,"file":"GuildChannelManager.js","path":"src/managers"}}],"meta":{"line":31,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"GuildEmojiManager","description":"Manages API methods for GuildEmojis and stores their cache.","extends":[[["BaseGuildEmojiManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":21,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of GuildEmojis","type":[[["Collection","<"],["Snowflake",", "],["GuildEmoji",">"]]],"meta":{"line":17,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"create","description":"Creates a new custom emoji in the guild.","examples":["// Create a new emoji from a URL\nguild.emojis.create('https://i.imgur.com/w3duR07.png', 'rip')\n .then(emoji => console.log(`Created new emoji with name ${emoji.name}!`))\n .catch(console.error);","// Create a new emoji from a file on your computer\nguild.emojis.create('./memes/banana.png', 'banana')\n .then(emoji => console.log(`Created new emoji with name ${emoji.name}!`))\n .catch(console.error);"],"params":[{"name":"attachment","description":"The image for the emoji","type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"name","description":"The name for the emoji","type":[[["string"]]]},{"name":"options","description":"Options for creating the emoji","optional":true,"type":[[["GuildEmojiCreateOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Emoji",">"]]],"description":"The created emoji"},"meta":{"line":52,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or more emojis from Discord, or the emoji cache if they're already available.","examples":["// Fetch all emojis from the guild\nmessage.guild.emojis.fetch()\n .then(emojis => console.log(`There are ${emojis.size} emojis.`))\n .catch(console.error);","// Fetch a single emoji\nmessage.guild.emojis.fetch('222078108977594368')\n .then(emoji => console.log(`The emoji name is: ${emoji.name}`))\n .catch(console.error);"],"params":[{"name":"id","description":"The emoji's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<("],["GuildEmoji","|"],["Collection","<"],["Snowflake",", "],["GuildEmoji",">)>"]]],"meta":{"line":89,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes an emoji.","params":[{"name":"emoji","description":"The Emoji resolvable to delete","type":[[["EmojiResolvable"]]]},{"name":"reason","description":"Reason for deleting the emoji","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":111,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"edit","description":"Edits an emoji.","params":[{"name":"emoji","description":"The Emoji resolvable to edit","type":[[["EmojiResolvable"]]]},{"name":"data","description":"The new data for the emoji","type":[[["GuildEmojiEditData"]]]},{"name":"reason","description":"Reason for editing this emoji","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":124,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"fetchAuthor","description":"Fetches the author for this emoji","params":[{"name":"emoji","description":"The emoji to fetch the author of","type":[[["EmojiResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":152,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves an EmojiResolvable to an Emoji object.","inherits":"BaseGuildEmojiManager#resolve","inherited":true,"params":[{"name":"emoji","description":"The Emoji resolvable to identify","type":[[["EmojiResolvable"]]]}],"returns":{"types":[[["GuildEmoji"]]],"nullable":true},"meta":{"line":36,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves an EmojiResolvable to an Emoji id string.","inherits":"BaseGuildEmojiManager#resolveId","inherited":true,"params":[{"name":"emoji","description":"The Emoji resolvable to identify","type":[[["EmojiResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":46,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"resolveIdentifier","description":"Resolves an EmojiResolvable to an emoji identifier.","inherits":"BaseGuildEmojiManager#resolveIdentifier","inherited":true,"params":[{"name":"emoji","description":"The emoji resolvable to resolve","type":[[["EmojiIdentifierResolvable"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":64,"file":"BaseGuildEmojiManager.js","path":"src/managers"}}],"meta":{"line":13,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"GuildEmojiRoleManager","description":"Manages API methods for roles belonging to emojis and stores their cache.","extends":[[["DataManager"]]],"props":[{"name":"emoji","description":"The emoji belonging to this manager","type":[[["GuildEmoji"]]],"meta":{"line":20,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"guild","description":"The guild belonging to this manager","type":[[["Guild"]]],"meta":{"line":25,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of roles belonging to this emoji","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":33,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"add","description":"Adds a role (or multiple roles) to the list of roles that can use this emoji.","params":[{"name":"roleOrRoles","description":"The role or roles to add","type":[[["RoleResolvable"]],[["Array","<"],["RoleResolvable",">"]],[["Collection","<"],["Snowflake",", "],["Role",">"]]]}],"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":42,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"remove","description":"Removes a role (or multiple roles) from the list of roles that can use this emoji.","params":[{"name":"roleOrRoles","description":"The role or roles to remove","type":[[["RoleResolvable"]],[["Array","<"],["RoleResolvable",">"]],[["Collection","<"],["Snowflake",", "],["Role",">"]]]}],"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":63,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"set","description":"Sets the role(s) that can use this emoji.","examples":["// Set the emoji's roles to a single role\nguildEmoji.roles.set(['391156570408615936'])\n .then(console.log)\n .catch(console.error);","// Remove all roles from an emoji\nguildEmoji.roles.set([])\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"roles","description":"The roles or role ids to apply","type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]}],"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":94,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"_patch","description":"Patches the roles for this manager's cache","access":"private","params":[{"name":"roles","description":"The new roles","type":[[["Array","<"],["Snowflake",">"]]]}],"meta":{"line":109,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"GuildFolderManager","description":"Manages API methods for users and stores their cache.","extends":[[["BaseManager"]]],"props":[{"name":"cache","description":"The guild folder cache (Index, GuildFolder)","type":[[["Collection","<"],["number",", "],["GuildFolder",">"]]],"meta":{"line":17,"file":"GuildFolderManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"GuildFolderManager.js","path":"src/managers"}},{"name":"GuildForumThreadManager","description":"Manages API methods for threads in forum channels and stores their cache.","extends":[[["ThreadManager"]]],"props":[{"name":"channel","description":"The channel this Manager belongs to","type":[[["ForumChannel"]]],"meta":{"line":13,"file":"GuildForumThreadManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["ThreadChannel",">"]]],"meta":{"line":23,"file":"ThreadManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"create","description":"Creates a new thread in the channel.","examples":["// Create a new forum post\nforum.threads\n .create({\n name: 'Food Talk',\n autoArchiveDuration: 60,\n message: {\n content: 'Discuss your favorite food!',\n },\n reason: 'Needed a separate thread for food',\n })\n .then(threadChannel => console.log(threadChannel))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to create a new thread","optional":true,"type":[[["GuildForumThreadCreateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":51,"file":"GuildForumThreadManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a {@link ThreadChannelResolvable} to a {@link ThreadChannel} object.","inherits":"ThreadManager#resolve","inherited":true,"params":[{"name":"thread","description":"The ThreadChannel resolvable to resolve","type":[[["ThreadChannelResolvable"]]]}],"returns":{"types":[[["ThreadChannel"]]],"nullable":true},"meta":{"line":43,"file":"ThreadManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link ThreadChannelResolvable} to a {@link ThreadChannel} id.","inherits":"ThreadManager#resolveId","inherited":true,"params":[{"name":"thread","description":"The ThreadChannel resolvable to resolve","type":[[["ThreadChannelResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":52,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains a thread from Discord, or the channel cache if it's already available.","inherits":"ThreadManager#fetch","inherited":true,"examples":["// Fetch a thread by its id\nchannel.threads.fetch('831955138126104859')\n .then(channel => console.log(channel.name))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to fetch threads. If it is a\nThreadChannelResolvable then the specified thread will be fetched. Fetches all active threads if `undefined`","optional":true,"type":[[["ThreadChannelResolvable"]],[["FetchChannelThreadsOptions"]],[["FetchThreadsOptions"]]]},{"name":"cacheOptions","description":"Additional options for this fetch. The `force` field gets ignored\nif `options` is not a {@link ThreadChannelResolvable}","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise",""]]],"meta":{"line":80,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetchArchived","description":"Obtains a set of archived threads from Discord, requires `READ_MESSAGE_HISTORY` in the parent channel.","inherits":"ThreadManager#fetchArchived","inherited":true,"params":[{"name":"options","description":"The options to fetch archived threads","optional":true,"type":[[["FetchChannelThreadsOptions"]]]},{"name":"cache","description":"Whether to cache the new thread objects if they aren't already","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":122,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetchActive","description":"Obtains the accessible active threads from Discord, requires `READ_MESSAGE_HISTORY` in the parent channel.","inherits":"ThreadManager#fetchActive","inherited":true,"params":[{"name":"cache","description":"Whether to cache the new thread objects if they aren't already","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"options","description":"Options for self-bots where advanced users can specify further options","optional":true,"default":null,"type":[[["FetchChannelThreadsOptions"]]]}],"async":true,"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":168,"file":"ThreadManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"GuildForumThreadManager.js","path":"src/managers"}},{"name":"GuildInviteManager","description":"Manages API methods for GuildInvites and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this Manager belongs to","type":[[["Guild"]]],"meta":{"line":21,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["string",", "],["Invite",">"]]],"meta":{"line":24,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves an InviteResolvable to an Invite object.","params":[{"name":"invite","description":"The invite resolvable to resolve","type":[[["InviteResolvable"]]]}],"returns":{"types":[[["Invite"]]],"nullable":true},"meta":{"line":53,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves an InviteResolvable to an invite code string.","params":[{"name":"invite","description":"The invite resolvable to resolve","type":[[["InviteResolvable"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":62,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches invite(s) from Discord.","examples":["// Fetch all invites from a guild\nguild.invites.fetch()\n .then(console.log)\n .catch(console.error);","// Fetch all invites from a guild without caching\nguild.invites.fetch({ cache: false })\n .then(console.log)\n .catch(console.error);","// Fetch all invites from a channel\nguild.invites.fetch({ channelId: '222197033908436994' })\n .then(console.log)\n .catch(console.error);","// Fetch a single invite\nguild.invites.fetch('bRCvFy9')\n .then(console.log)\n .catch(console.error);","// Fetch a single invite without checking cache\nguild.invites.fetch({ code: 'bRCvFy9', force: true })\n .then(console.log)\n .catch(console.error)","// Fetch a single invite without caching\nguild.invites.fetch({ code: 'bRCvFy9', cache: false })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for fetching guild invite(s)","optional":true,"type":[[["InviteResolvable"]],[["FetchInviteOptions"]],[["FetchInvitesOptions"]]]}],"returns":[[["Promise","<("],["Invite","|"],["Collection","<"],["string",", "],["Invite",">)>"]]],"meta":{"line":122,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"create","description":"Create an invite to the guild from the provided channel.","examples":["// Create an invite to a selected channel\nguild.invites.create('599942732013764608')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"channel","description":"The options for creating the invite from a channel.","type":[[["GuildInvitableChannelResolvable"]]]},{"name":"options","description":"The options for creating the invite from a channel.","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":178,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes an invite.","params":[{"name":"invite","description":"The invite to delete","type":[[["InviteResolvable"]]]},{"name":"reason","description":"Reason for deleting the invite","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":206,"file":"GuildInviteManager.js","path":"src/managers"}}],"meta":{"line":13,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"GuildManager","description":"Manages API methods for Guilds and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["Guild",">"]]],"meta":{"line":46,"file":"GuildManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a GuildResolvable to a Guild object.","params":[{"name":"guild","description":"The guild resolvable to identify","type":[[["GuildResolvable"]]]}],"returns":{"types":[[["Guild"]]],"nullable":true},"meta":{"line":104,"file":"GuildManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link GuildResolvable} to a {@link Guild} id string.","params":[{"name":"guild","description":"The guild resolvable to identify","type":[[["GuildResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":125,"file":"GuildManager.js","path":"src/managers"}},{"name":"create","description":"Creates a guild.\nThis is only available to bots in fewer than 10 guilds.","params":[{"name":"name","description":"The name of the guild","type":[[["string"]]]},{"name":"options","description":"Options for creating the guild","optional":true,"type":[[["GuildCreateOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Guild",">"]]],"description":"The guild that was created"},"meta":{"line":170,"file":"GuildManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or multiple guilds from Discord, or the guild cache if it's already available.","params":[{"name":"options","description":"The guild's id or options","optional":true,"type":[[["GuildResolvable"]],[["FetchGuildOptions"]],[["FetchGuildsOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Guild","|"],["Collection","<"],["Snowflake",", "],["OAuth2Guild",">)>"]]],"meta":{"line":286,"file":"GuildManager.js","path":"src/managers"}}],"meta":{"line":34,"file":"GuildManager.js","path":"src/managers"}},{"name":"GuildMemberManager","description":"Manages API methods for GuildMembers and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":31,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":34,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"me","description":"The client user as a GuildMember of this guild","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":131,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a {@link GuildMemberResolvable} to a {@link GuildMember} object.","params":[{"name":"member","description":"The user that is part of the guild","type":[[["GuildMemberResolvable"]]]}],"returns":{"types":[[["GuildMember"]]],"nullable":true},"meta":{"line":56,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link GuildMemberResolvable} to a member id.","params":[{"name":"member","description":"The user that is part of the guild","type":[[["GuildMemberResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":69,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"add","description":"Adds a user to the guild using OAuth2. Requires the `CREATE_INSTANT_INVITE` permission.","params":[{"name":"user","description":"The user to add to the guild","type":[[["UserResolvable"]]]},{"name":"options","description":"Options for adding the user to the guild","type":[[["AddGuildMemberOptions"]]]}],"async":true,"returns":[[["Promise","<("],["GuildMember","|"],["null",")>"]]],"meta":{"line":96,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches member(s) from Discord, even if they're offline.","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/FetchGuildMember.md}"],"examples":["// Fetch all members from a guild\nguild.members.fetch()\n .then(console.log)\n .catch(console.error);","// Fetch a single member\nguild.members.fetch('66564597481480192')\n .then(console.log)\n .catch(console.error);","// Fetch a single member without checking cache\nguild.members.fetch({ user, force: true })\n .then(console.log)\n .catch(console.error)","// Fetch a single member without caching\nguild.members.fetch({ user, cache: false })\n .then(console.log)\n .catch(console.error);","// Fetch by an array of users including their presences\nguild.members.fetch({ user: ['66564597481480192', '191615925336670208'], withPresences: true })\n .then(console.log)\n .catch(console.error);","// Fetch by query\nguild.members.fetch({ query: 'hydra', limit: 1 })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"If a UserResolvable, the user to fetch.\nIf undefined, fetches all members.\nIf a query, it limits the results to users with similar usernames.","optional":true,"type":[[["UserResolvable"]],[["FetchMemberOptions"]],[["FetchMembersOptions"]]]}],"returns":[[["Promise","<("],["GuildMember","|"],["Collection","<"],["Snowflake",", "],["GuildMember",">)>"]]],"meta":{"line":196,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"fetchMe","description":"Fetches the client user as a GuildMember of the guild.","params":[{"name":"options","description":"The options for fetching the member","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":234,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"search","description":"Searches for members in the guild based on a query.","params":[{"name":"options","description":"Options for searching members","type":[[["GuildSearchMembersOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["GuildMember",">>"]]],"meta":{"line":251,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"list","description":"Lists up to 1000 members of the guild.","params":[{"name":"options","description":"Options for listing members","optional":true,"type":[[["GuildListMembersOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["GuildMember",">>"]]],"meta":{"line":269,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"edit","description":"Edits a member of the guild.\nThe user must be a member of the guild","params":[{"name":"user","description":"The member to edit","type":[[["UserResolvable"]]]},{"name":"data","description":"The data to edit the member with","type":[[["GuildMemberEditData"]]]},{"name":"reason","description":"Reason for editing this user","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":299,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"prune","description":"Prunes members from the guild based on how long they have been inactive.","examples":["// See how many members will be pruned\nguild.members.prune({ dry: true })\n .then(pruned => console.log(`This will prune ${pruned} people!`))\n .catch(console.error);","// Actually prune the members\nguild.members.prune({ days: 1, reason: 'too many people!' })\n .then(pruned => console.log(`I just pruned ${pruned} people!`))\n .catch(console.error);","// Include members with a specified role\nguild.members.prune({ days: 7, roles: ['657259391652855808'] })\n .then(pruned => console.log(`I just pruned ${pruned} people!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options for pruning","optional":true,"type":[[["GuildPruneMembersOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["number","|"],["null",")>"]]],"description":"The number of members that were/will be kicked"},"meta":{"line":381,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"kick","description":"Kicks a user from the guild.\nThe user must be a member of the guild","examples":["// Kick a user by id (or with a user/guild member object)\nguild.members.kick('84484653687267328')\n .then(kickInfo => console.log(`Kicked ${kickInfo.user?.tag ?? kickInfo.tag ?? kickInfo}`))\n .catch(console.error);"],"params":[{"name":"user","description":"The member to kick","type":[[["UserResolvable"]]]},{"name":"reason","description":"Reason for kicking","optional":true,"type":[[["string"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["GuildMember","|"],["User","|"],["Snowflake",")>"]]],"description":"Result object will be resolved as specifically as possible.\nIf the GuildMember cannot be resolved, the User will instead be attempted to be resolved. If that also cannot\nbe resolved, the user's id will be the result."},"meta":{"line":422,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"ban","description":"Bans a user from the guild.","examples":["// Ban a user by id (or with a user/guild member object)\nguild.members.ban('84484653687267328')\n .then(banInfo => console.log(`Banned ${banInfo.user?.tag ?? banInfo.tag ?? banInfo}`))\n .catch(console.error);"],"params":[{"name":"user","description":"The user to ban","type":[[["UserResolvable"]]]},{"name":"options","description":"Options for the ban","optional":true,"type":[[["BanOptions"]]]}],"returns":{"types":[[["Promise","<("],["GuildMember","|"],["User","|"],["Snowflake",")>"]]],"description":"Result object will be resolved as specifically as possible.\nIf the GuildMember cannot be resolved, the User will instead be attempted to be resolved. If that also cannot\nbe resolved, the user id will be the result.\nInternally calls the GuildBanManager#create method."},"meta":{"line":445,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"unban","description":"Unbans a user from the guild. Internally calls the {@link GuildBanManager#remove} method.","examples":["// Unban a user by id (or with a user/guild member object)\nguild.members.unban('84484653687267328')\n .then(user => console.log(`Unbanned ${user.username} from ${guild.name}`))\n .catch(console.error);"],"params":[{"name":"user","description":"The user to unban","type":[[["UserResolvable"]]]},{"name":"reason","description":"Reason for unbanning user","optional":true,"type":[[["string"]]]}],"returns":{"types":[[["Promise",""]]],"description":"The user that was unbanned"},"meta":{"line":460,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"fetchBruteforce","description":"Fetches multiple members from the guild.","see":["https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/FetchGuildMember.md"],"examples":["guild.members.fetchBruteforce()\n.then(members => console.log(`Fetched ${members.size} members`))\n.catch(console.error);"],"params":[{"name":"options","description":"Options for the bruteforce","type":[[["BruteforceOptions"]]]}],"returns":{"types":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"description":"(All) members in the guild"},"meta":{"line":492,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"fetchByMemberSafety","description":"Experimental method to fetch members from the guild.\nLists up to 10000 members of the guild.","params":[{"name":"timeout","description":"Timeout for receipt of members in ms","optional":true,"default":"15_000","type":[[["number"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["GuildMember",">>"]]],"meta":{"line":547,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"fetchMemberList","description":"Fetches multiple members from the guild in the channel.","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/FetchGuildMember.md}"],"examples":["const guild = client.guilds.cache.get('id');\nconst channel = guild.channels.cache.get('id');\n// Overlap (slow)\nfor (let index = 0; index <= guild.memberCount; index += 100) {\n await guild.members.fetchMemberList(channel, index, index !== 100).catch(() => {});\n await client.sleep(500);\n}\n// Non-overlap (fast)\nfor (let index = 0; index <= guild.memberCount; index += 200) {\n await guild.members.fetchMemberList(channel, index == 0 ? 100 : index, index !== 100).catch(() => {});\n await client.sleep(500);\n}\nconsole.log(guild.members.cache.size); // will print the number of members in the guild"],"params":[{"name":"channel","description":"The channel to get members from (Members has VIEW_CHANNEL permission)","type":[[["GuildTextChannelResolvable"]]]},{"name":"offset","description":"Start index of the members to get","optional":true,"default":0,"type":[[["number"]]]},{"name":"double","description":"Whether to use double range","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"retryMax","description":"Number of retries","optional":true,"default":3,"type":[[["number"]]]},{"name":"time","description":"Timeout for receipt of members","optional":true,"default":"10e3","type":[[["number"]]]}],"returns":{"types":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"description":"Members in the guild"},"meta":{"line":610,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"addRole","description":"Adds a role to a member.","params":[{"name":"user","description":"The user to add the role from","type":[[["GuildMemberResolvable"]]]},{"name":"role","description":"The role to add","type":[[["RoleResolvable"]]]},{"name":"reason","description":"Reason for adding the role","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<("],["GuildMember","|"],["User","|"],["Snowflake",")>"]]],"meta":{"line":696,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"removeRole","description":"Removes a role from a member.","params":[{"name":"user","description":"The user to remove the role from","type":[[["UserResolvable"]]]},{"name":"role","description":"The role to remove","type":[[["RoleResolvable"]]]},{"name":"reason","description":"Reason for removing the role","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<("],["GuildMember","|"],["User","|"],["Snowflake",")>"]]],"meta":{"line":712,"file":"GuildMemberManager.js","path":"src/managers"}}],"meta":{"line":23,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"GuildMemberRoleManager","description":"Manages API methods for roles of a GuildMember and stores their cache.","extends":[[["DataManager"]]],"props":[{"name":"member","description":"The GuildMember this manager belongs to","type":[[["GuildMember"]]],"meta":{"line":20,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"guild","description":"The Guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":26,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"cache","description":"The roles of this member","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":34,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"hoist","description":"The role of the member used to hoist them in a separate category in the users list","readonly":true,"nullable":true,"type":[[["Role"]]],"meta":{"line":44,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"icon","description":"The role of the member used to set their role icon","readonly":true,"nullable":true,"type":[[["Role"]]],"meta":{"line":55,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"color","description":"The role of the member used to set their color","readonly":true,"nullable":true,"type":[[["Role"]]],"meta":{"line":66,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"highest","description":"The role of the member with the highest position","readonly":true,"type":[[["Role"]]],"meta":{"line":77,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"premiumSubscriberRole","description":"The premium subscriber role of the guild, if present on the member","readonly":true,"nullable":true,"type":[[["Role"]]],"meta":{"line":86,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"botRole","description":"The managed role this member created when joining the guild, if any\nOnly ever available on bots","readonly":true,"nullable":true,"type":[[["Role"]]],"meta":{"line":96,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"add","description":"Adds a role (or multiple roles) to the member.","params":[{"name":"roleOrRoles","description":"The role or roles to add","type":[[["RoleResolvable"]],[["Array","<"],["RoleResolvable",">"]],[["Collection","<"],["Snowflake",", "],["Role",">"]]]},{"name":"reason","description":"Reason for adding the role(s)","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":107,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"remove","description":"Removes a role (or multiple roles) from the member.","params":[{"name":"roleOrRoles","description":"The role or roles to remove","type":[[["RoleResolvable"]],[["Array","<"],["RoleResolvable",">"]],[["Collection","<"],["Snowflake",", "],["Role",">"]]]},{"name":"reason","description":"Reason for removing the role(s)","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":138,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"set","description":"Sets the roles applied to the member.","examples":["// Set the member's roles to a single role\nguildMember.roles.set(['391156570408615936'])\n .then(console.log)\n .catch(console.error);","// Remove all the roles from a member\nguildMember.roles.set([])\n .then(member => console.log(`Member roles is now of ${member.roles.cache.size} size`))\n .catch(console.error);"],"params":[{"name":"roles","description":"The roles or role ids to apply","type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"reason","description":"Reason for applying the roles","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":180,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"GuildScheduledEventManager","description":"Manages API methods for GuildScheduledEvents and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":22,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["GuildScheduledEvent",">"]]],"meta":{"line":25,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"create","description":"Creates a new guild scheduled event.","params":[{"name":"options","description":"Options for creating the guild scheduled event","type":[[["GuildScheduledEventCreateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":69,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or more guild scheduled events from Discord, or the guild cache if it's already available.","params":[{"name":"options","description":"The id of the guild scheduled event or options","optional":true,"type":[[["GuildScheduledEventResolvable"]],[["FetchGuildScheduledEventOptions"]],[["FetchGuildScheduledEventsOptions"]]]}],"async":true,"returns":[[["Promise","<("],["GuildScheduledEvent","|"],["Collection","<"],["Snowflake",", "],["GuildScheduledEvent",">)>"]]],"meta":{"line":136,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"edit","description":"Edits a guild scheduled event.","params":[{"name":"guildScheduledEvent","description":"The guild scheduled event to edit","type":[[["GuildScheduledEventResolvable"]]]},{"name":"options","description":"Options to edit the guild scheduled event","type":[[["GuildScheduledEventEditOptions"]]]}],"async":true,"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":189,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes a guild scheduled event.","params":[{"name":"guildScheduledEvent","description":"The guild scheduled event to delete","type":[[["GuildScheduledEventResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"fetchSubscribers","description":"Fetches subscribers of a guild scheduled event.","params":[{"name":"guildScheduledEvent","description":"The guild scheduled event to fetch subscribers of","type":[[["GuildScheduledEventResolvable"]]]},{"name":"options","description":"Options for fetching the subscribers","optional":true,"default":"{}","type":[[["FetchGuildScheduledEventSubscribersOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["GuildScheduledEventUser",">>"]]],"meta":{"line":274,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":14,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"GuildSettingManager","description":"Manages API methods for users and stores their cache.","see":["{@link https://luna.gitlab.io/discord-unofficial-docs/user_settings.html}"],"extends":[[["BaseManager"]]],"props":[{"name":"rawSetting","description":"Raw data","type":[[["Object"]]],"meta":{"line":16,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"guildId","description":"Guild Id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":21,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"guild","description":"Get the guild","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":28,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"suppressEveryone","description":"Notification setting > Suppress `@everyone` and `@here`","nullable":true,"type":[[["boolean"]]],"meta":{"line":43,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"suppressRoles","description":"Notification setting > Suppress all role `@mention`","nullable":true,"type":[[["boolean"]]],"meta":{"line":50,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"muteScheduledEvents","description":"Notification setting > Mute new events","nullable":true,"type":[[["boolean"]]],"meta":{"line":57,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"messageNotifications","description":"Notification setting > Message notifications\n* `0` = All messages\n* `1` = Only @mentions\n* `2` = Nothing","nullable":true,"type":[[["number"]]],"meta":{"line":67,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"flags","description":"Flags (unknown)","nullable":true,"type":[[["number"]]],"meta":{"line":74,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"mobilePush","description":"Notification setting > Mobile push notifications","nullable":true,"type":[[["boolean"]]],"meta":{"line":81,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"muted","description":"Mute server","nullable":true,"type":[[["boolean"]]],"meta":{"line":88,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"muteConfig","description":"Mute config (muted = true)\n* `muteConfig.endTime`: End time (Date)\n* `muteConfig.selectedTimeWindow`: Selected time window (seconds) (number)","nullable":true,"type":[[["Object"]]],"meta":{"line":97,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"hideMutedChannels","description":"Hide muted channels","nullable":true,"type":[[["boolean"]]],"meta":{"line":109,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"channelOverrides","description":"Channel overrides (unknown)","nullable":true,"type":[[["Array"]]],"meta":{"line":116,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"notifyHighlights","description":"Notification setting > Suppress highlights\n* `0` = ??? (unknown)\n* `1` = Enable\n* `2` = Disable","nullable":true,"type":[[["number"]]],"meta":{"line":126,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"version","description":"Version (unknown)","nullable":true,"type":[[["number"]]],"meta":{"line":133,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"_patch","description":"Patch data file","access":"private","params":[{"name":"data","description":"Raw Data to patch","type":[[["Object"]]]}],"meta":{"line":36,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"edit","description":"Edit guild settings","params":[{"name":"data","description":"Data to edit","type":[[["Object"]]]}],"async":true,"returns":[[["Promise","<"],["GuildSettingManager",">"]]],"meta":{"line":141,"file":"GuildSettingManager.js","path":"src/managers"}}],"meta":{"line":9,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"GuildStickerManager","description":"Manages API methods for Guild Stickers and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":21,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of Guild Stickers","type":[[["Collection","<"],["Snowflake",", "],["Sticker",">"]]],"meta":{"line":24,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"create","description":"Creates a new custom sticker in the guild.","examples":["// Create a new sticker from a URL\nguild.stickers.create('https://i.imgur.com/w3duR07.png', 'rip', 'headstone')\n .then(sticker => console.log(`Created new sticker with name ${sticker.name}!`))\n .catch(console.error);","// Create a new sticker from a file on your computer\nguild.stickers.create('./memes/banana.png', 'banana', 'banana')\n .then(sticker => console.log(`Created new sticker with name ${sticker.name}!`))\n .catch(console.error);"],"params":[{"name":"file","description":"The file for the sticker","type":[[["BufferResolvable"]],[["Stream"]],[["FileOptions"]],[["MessageAttachment"]]]},{"name":"name","description":"The name for the sticker","type":[[["string"]]]},{"name":"tags","description":"The Discord name of a unicode emoji representing the sticker's expression","type":[[["string"]]]},{"name":"options","description":"Options","optional":true,"type":[[["GuildStickerCreateOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Sticker",">"]]],"description":"The created sticker"},"meta":{"line":59,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a StickerResolvable to a Sticker object.","params":[{"name":"sticker","description":"The Sticker resolvable to identify","type":[[["StickerResolvable"]]]}],"returns":{"types":[[["Sticker"]]],"nullable":true},"meta":{"line":79,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a StickerResolvable to a Sticker id string.","params":[{"name":"sticker","description":"The Sticker resolvable to identify","type":[[["StickerResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":88,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"edit","description":"Edits a sticker.","params":[{"name":"sticker","description":"The sticker to edit","type":[[["StickerResolvable"]]]},{"name":"data","description":"The new data for the sticker","optional":true,"type":[[["GuildStickerEditData"]]]},{"name":"reason","description":"Reason for editing this sticker","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Sticker",">"]]],"meta":{"line":104,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes a sticker.","params":[{"name":"sticker","description":"The sticker to delete","type":[[["StickerResolvable"]]]},{"name":"reason","description":"Reason for deleting this sticker","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":128,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or more stickers from Discord, or the sticker cache if they're already available.","examples":["// Fetch all stickers from the guild\nmessage.guild.stickers.fetch()\n .then(stickers => console.log(`There are ${stickers.size} stickers.`))\n .catch(console.error);","// Fetch a single sticker\nmessage.guild.stickers.fetch('222078108977594368')\n .then(sticker => console.log(`The sticker name is: ${sticker.name}`))\n .catch(console.error);"],"params":[{"name":"id","description":"The Sticker's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Sticker","|"],["Collection","<"],["Snowflake",", "],["Sticker",">)>"]]],"meta":{"line":151,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"fetchUser","description":"Fetches the user who uploaded this sticker, if this is a guild sticker.","params":[{"name":"sticker","description":"The sticker to fetch the user for","type":[[["StickerResolvable"]]]}],"async":true,"returns":[[["Promise",""]]],"meta":{"line":170,"file":"GuildStickerManager.js","path":"src/managers"}}],"meta":{"line":13,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"GuildTextThreadManager","description":"Manages API methods for {@link ThreadChannel} objects and stores their cache.","extends":[[["ThreadManager"]]],"props":[{"name":"channel","description":"The channel this Manager belongs to","type":[[["TextChannel"]],[["NewsChannel"]]],"meta":{"line":13,"file":"GuildTextThreadManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["ThreadChannel",">"]]],"meta":{"line":23,"file":"ThreadManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"create","description":"Creates a new thread in the channel.","examples":["// Create a new public thread\nchannel.threads\n .create({\n name: 'food-talk',\n autoArchiveDuration: 60,\n reason: 'Needed a separate thread for food',\n })\n .then(threadChannel => console.log(threadChannel))\n .catch(console.error);","// Create a new private thread\nchannel.threads\n .create({\n name: 'mod-talk',\n autoArchiveDuration: 60,\n type: 'GUILD_PRIVATE_THREAD',\n reason: 'Needed a separate thread for moderation',\n })\n .then(threadChannel => console.log(threadChannel))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to create a new thread","optional":true,"type":[[["GuildTextThreadCreateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":58,"file":"GuildTextThreadManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a {@link ThreadChannelResolvable} to a {@link ThreadChannel} object.","inherits":"ThreadManager#resolve","inherited":true,"params":[{"name":"thread","description":"The ThreadChannel resolvable to resolve","type":[[["ThreadChannelResolvable"]]]}],"returns":{"types":[[["ThreadChannel"]]],"nullable":true},"meta":{"line":43,"file":"ThreadManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link ThreadChannelResolvable} to a {@link ThreadChannel} id.","inherits":"ThreadManager#resolveId","inherited":true,"params":[{"name":"thread","description":"The ThreadChannel resolvable to resolve","type":[[["ThreadChannelResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":52,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains a thread from Discord, or the channel cache if it's already available.","inherits":"ThreadManager#fetch","inherited":true,"examples":["// Fetch a thread by its id\nchannel.threads.fetch('831955138126104859')\n .then(channel => console.log(channel.name))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to fetch threads. If it is a\nThreadChannelResolvable then the specified thread will be fetched. Fetches all active threads if `undefined`","optional":true,"type":[[["ThreadChannelResolvable"]],[["FetchChannelThreadsOptions"]],[["FetchThreadsOptions"]]]},{"name":"cacheOptions","description":"Additional options for this fetch. The `force` field gets ignored\nif `options` is not a {@link ThreadChannelResolvable}","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise",""]]],"meta":{"line":80,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetchArchived","description":"Obtains a set of archived threads from Discord, requires `READ_MESSAGE_HISTORY` in the parent channel.","inherits":"ThreadManager#fetchArchived","inherited":true,"params":[{"name":"options","description":"The options to fetch archived threads","optional":true,"type":[[["FetchChannelThreadsOptions"]]]},{"name":"cache","description":"Whether to cache the new thread objects if they aren't already","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":122,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetchActive","description":"Obtains the accessible active threads from Discord, requires `READ_MESSAGE_HISTORY` in the parent channel.","inherits":"ThreadManager#fetchActive","inherited":true,"params":[{"name":"cache","description":"Whether to cache the new thread objects if they aren't already","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"options","description":"Options for self-bots where advanced users can specify further options","optional":true,"default":null,"type":[[["FetchChannelThreadsOptions"]]]}],"async":true,"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":168,"file":"ThreadManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"GuildTextThreadManager.js","path":"src/managers"}},{"name":"InteractionManager","description":"Manages API methods for InteractionResponse and holds their cache.","extends":[[["CachedManager"]]],"props":[{"name":"channel","description":"The channel that the messages belong to","type":[[["TextBasedChannels"]]],"meta":{"line":18,"file":"InteractionManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of InteractionResponse","type":[[["Collection","<"],["Snowflake",", "],["InteractionResponse",">"]]],"meta":{"line":21,"file":"InteractionManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"InteractionManager.js","path":"src/managers"}},{"name":"MessageManager","description":"Manages API methods for Messages and holds their cache.","extends":[[["CachedManager"]]],"props":[{"name":"channel","description":"The channel that the messages belong to","type":[[["TextBasedChannels"]]],"meta":{"line":22,"file":"MessageManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of Messages","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]]],"meta":{"line":25,"file":"MessageManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetch","description":"Gets a message, or messages, from this channel.\nThe returned Collection does not contain reaction users of the messages if they were not cached.\nThose need to be fetched separately in such a case.","examples":["// Get message\nchannel.messages.fetch('99539446449315840')\n .then(message => console.log(message.content))\n .catch(console.error);","// Get messages\nchannel.messages.fetch({ limit: 10 })\n .then(messages => console.log(`Received ${messages.size} messages`))\n .catch(console.error);","// Get messages and filter by user id\nchannel.messages.fetch()\n .then(messages => console.log(`${messages.filter(m => m.author.id === '84484653687267328').size} messages`))\n .catch(console.error);"],"params":[{"name":"message","description":"The id of the message to fetch, or query parameters.","optional":true,"type":[[["Snowflake"]],[["ChannelLogsQueryOptions"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["Collection","<"],["Snowflake",", "],["Message",">)>"]]],"meta":{"line":68,"file":"MessageManager.js","path":"src/managers"}},{"name":"fetchPinned","description":"Fetches the pinned messages of this channel and returns a collection of them.\nThe returned Collection does not contain any reaction data of the messages.\nThose need to be fetched separately.","examples":["// Get pinned messages\nchannel.messages.fetchPinned()\n .then(messages => console.log(`Received ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"cache","description":"Whether to cache the message(s)","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":84,"file":"MessageManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a {@link MessageResolvable} to a {@link Message} object.","params":[{"name":"message","description":"The message resolvable to resolve","type":[[["MessageResolvable"]]]}],"returns":{"types":[[["Message"]]],"nullable":true},"meta":{"line":98,"file":"MessageManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link MessageResolvable} to a {@link Message} id.","params":[{"name":"message","description":"The message resolvable to resolve","type":[[["MessageResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":107,"file":"MessageManager.js","path":"src/managers"}},{"name":"edit","description":"Edits a message, even if it's not cached.","params":[{"name":"message","description":"The message to edit","type":[[["MessageResolvable"]]]},{"name":"options","description":"The options to edit the message","type":[[["string"]],[["MessageEditOptions"]],[["MessagePayload"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":122,"file":"MessageManager.js","path":"src/managers"}},{"name":"crosspost","description":"Publishes a message in an announcement channel to all channels following it, even if it's not cached.","params":[{"name":"message","description":"The message to publish","type":[[["MessageResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":173,"file":"MessageManager.js","path":"src/managers"}},{"name":"pin","description":"Pins a message to the channel's pinned messages, even if it's not cached.","params":[{"name":"message","description":"The message to pin","type":[[["MessageResolvable"]]]},{"name":"reason","description":"Reason for pinning","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":187,"file":"MessageManager.js","path":"src/managers"}},{"name":"unpin","description":"Unpins a message from the channel's pinned messages, even if it's not cached.","params":[{"name":"message","description":"The message to unpin","type":[[["MessageResolvable"]]]},{"name":"reason","description":"Reason for unpinning","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":200,"file":"MessageManager.js","path":"src/managers"}},{"name":"react","description":"Adds a reaction to a message, even if it's not cached.","params":[{"name":"message","description":"The message to react to","type":[[["MessageResolvable"]]]},{"name":"emoji","description":"The emoji to react with","type":[[["EmojiIdentifierResolvable"]]]},{"name":"burst","description":"Super Reactions (Discord Nitro only)","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":214,"file":"MessageManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes a message, even if it's not cached.","params":[{"name":"message","description":"The message to delete","type":[[["MessageResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":242,"file":"MessageManager.js","path":"src/managers"}},{"name":"search","description":"Search Messages in the channel.","params":[{"name":"options","description":"Performs a search within the channel.","type":[[["MessageSearchOptions"]]]}],"async":true,"returns":[[["MessageSearchResult"]]],"meta":{"line":304,"file":"MessageManager.js","path":"src/managers"}}],"meta":{"line":14,"file":"MessageManager.js","path":"src/managers"}},{"name":"PermissionOverwriteManager","description":"Manages API methods for guild channel permission overwrites and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"channel","description":"The channel of the permission overwrite this manager belongs to","type":[[["GuildChannel"]]],"meta":{"line":32,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["PermissionOverwrites",">"]]],"meta":{"line":41,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"set","description":"Replaces the permission overwrites in this channel.","examples":["message.channel.permissionOverwrites.set([\n {\n id: message.author.id,\n deny: [Permissions.FLAGS.VIEW_CHANNEL],\n },\n], 'Needed to change permissions');"],"params":[{"name":"overwrites","description":"Permission overwrites the channel gets updated with","type":[[["Array","<"],["OverwriteResolvable",">"]],[["Collection","<"],["Snowflake",", "],["OverwriteResolvable",">"]]]},{"name":"reason","description":"Reason for updating the channel overwrites","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":65,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"upsert","description":"Creates or edits permission overwrites for a user or role in this channel.","access":"private","params":[{"name":"userOrRole","description":"The user or role to update","type":[[["RoleResolvable"]],[["UserResolvable"]]]},{"name":"options","description":"The options for the update","type":[[["PermissionOverwriteOptions"]]]},{"name":"overwriteOptions","description":"The extra information for the update","optional":true,"type":[[["GuildChannelOverwriteOptions"]]]},{"name":"existing","description":"The existing overwrites to merge with this update","optional":true,"type":[[["PermissionOverwrites"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":91,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"create","description":"Creates permission overwrites for a user or role in this channel, or replaces them if already present.","examples":["// Create or Replace permission overwrites for a message author\nmessage.channel.permissionOverwrites.create(message.author, {\n SEND_MESSAGES: false\n})\n .then(channel => console.log(channel.permissionOverwrites.cache.get(message.author.id)))\n .catch(console.error);"],"params":[{"name":"userOrRole","description":"The user or role to update","type":[[["RoleResolvable"]],[["UserResolvable"]]]},{"name":"options","description":"The options for the update","type":[[["PermissionOverwriteOptions"]]]},{"name":"overwriteOptions","description":"The extra information for the update","optional":true,"type":[[["GuildChannelOverwriteOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":126,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"edit","description":"Edits permission overwrites for a user or role in this channel, or creates an entry if not already present.","examples":["// Edit or Create permission overwrites for a message author\nmessage.channel.permissionOverwrites.edit(message.author, {\n SEND_MESSAGES: false\n})\n .then(channel => console.log(channel.permissionOverwrites.cache.get(message.author.id)))\n .catch(console.error);"],"params":[{"name":"userOrRole","description":"The user or role to update","type":[[["RoleResolvable"]],[["UserResolvable"]]]},{"name":"options","description":"The options for the update","type":[[["PermissionOverwriteOptions"]]]},{"name":"overwriteOptions","description":"The extra information for the update","optional":true,"type":[[["GuildChannelOverwriteOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":144,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes permission overwrites for a user or role in this channel.","params":[{"name":"userOrRole","description":"The user or role to delete","type":[[["UserResolvable"]],[["RoleResolvable"]]]},{"name":"reason","description":"The reason for deleting the overwrite","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":157,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":17,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"PresenceManager","description":"Manages API methods for Presences and holds their cache.","extends":[[["CachedManager"]]],"props":[{"name":"cache","description":"The cache of Presences","type":[[["Collection","<"],["Snowflake",", "],["Presence",">"]]],"meta":{"line":15,"file":"PresenceManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a {@link PresenceResolvable} to a {@link Presence} object.","params":[{"name":"presence","description":"The presence resolvable to resolve","type":[[["PresenceResolvable"]]]}],"returns":{"types":[[["Presence"]]],"nullable":true},"meta":{"line":38,"file":"PresenceManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link PresenceResolvable} to a {@link Presence} id.","params":[{"name":"presence","description":"The presence resolvable to resolve","type":[[["PresenceResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"PresenceManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"PresenceManager.js","path":"src/managers"}},{"name":"ReactionManager","description":"Manages API methods for reactions and holds their cache.","extends":[[["CachedManager"]]],"props":[{"name":"message","description":"The message that this manager belongs to","type":[[["Message"]]],"meta":{"line":18,"file":"ReactionManager.js","path":"src/managers"}},{"name":"cache","description":"The reaction cache of this manager","type":[[["Collection","<("],["string","|"],["Snowflake","), "],["MessageReaction",">"]]],"meta":{"line":25,"file":"ReactionManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a {@link MessageReactionResolvable} to a {@link MessageReaction} object.","params":[{"name":"reaction","description":"The MessageReaction to resolve","type":[[["MessageReactionResolvable"]]]}],"returns":{"types":[[["MessageReaction"]]],"nullable":true},"meta":{"line":39,"file":"ReactionManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link MessageReactionResolvable} to a {@link MessageReaction} id.","params":[{"name":"reaction","description":"The MessageReaction to resolve","type":[[["MessageReactionResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":48,"file":"ReactionManager.js","path":"src/managers"}},{"name":"removeAll","description":"Removes all reactions from a message.","async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":61,"file":"ReactionManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"ReactionManager.js","path":"src/managers"}},{"name":"ReactionUserManager","description":"Manages API methods for users who reacted to a reaction and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"reaction","description":"The reaction that this manager belongs to","type":[[["MessageReaction"]]],"meta":{"line":20,"file":"ReactionUserManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["DiscordUser",">"]]],"meta":{"line":23,"file":"ReactionUserManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetch","description":"Fetches all the users that gave this reaction. Resolves with a collection of users, mapped by their ids.","params":[{"name":"options","description":"Options for fetching the users","optional":true,"type":[[["FetchReactionUsersOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["DiscordUser",">>"]]],"meta":{"line":41,"file":"ReactionUserManager.js","path":"src/managers"}},{"name":"remove","description":"Removes a user from this reaction.","params":[{"name":"user","description":"The user to remove the reaction of","optional":true,"default":"this.client.user","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["MessageReaction",">"]]],"meta":{"line":60,"file":"ReactionUserManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"ReactionUserManager.js","path":"src/managers"}},{"name":"RelationshipManager","description":"Manages API methods for Relationships and stores their cache.","props":[{"name":"client","description":"The client that instantiated this manager.","type":[[["Client"]]],"meta":{"line":20,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"cache","description":"A collection of users this manager is caching. (Type: Number)","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["RelationshipTypes",">"]]],"meta":{"line":26,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"friendCache","description":"Get all friends","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":35,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"blockedCache","description":"Get all blocked users","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":47,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"incomingCache","description":"Get all incoming friend requests","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":59,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"outgoingCache","description":"Get all outgoing friend requests","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":71,"file":"RelationshipManager.js","path":"src/managers"}}],"methods":[{"name":"toArray","description":"Return array of cache","returns":[[["Array","<{"],["id",": "],["Snowflake",", "],["type",": "],["RelationshipTypes","}>"]]],"meta":{"line":82,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"_setup","access":"private","params":[{"name":"users","description":"An array of users to add to the cache","type":[[["Array","<"],["User",">"]]]}],"returns":[[["void"]]],"meta":{"line":91,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link UserResolvable} to a {@link User} id.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":104,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains a user from Discord, or the user cache if it's already available.","params":[{"name":"user","description":"The user to fetch","optional":true,"type":[[["UserResolvable"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<("],["RelationshipTypes","|"],["RelationshipManager",")>"]]],"meta":{"line":118,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"deleteFriend","description":"Deletes a friend relationship with a client user.","params":[{"name":"user","description":"Target","type":[[["UserResolvable"]]]}],"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":140,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"deleteBlocked","description":"Deletes a blocked relationship with a client user.","params":[{"name":"user","description":"Target","type":[[["UserResolvable"]]]}],"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":152,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"sendFriendRequest","description":"Sends a friend request.","params":[{"name":"username","description":"Username of the user to send the request to","type":[[["string"]]]},{"name":"discriminator","description":"Discriminator of the user to send the request to","nullable":true,"type":[[["number"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":165,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"cancelFriendRequest","description":"Cancels a friend request.","params":[{"name":"user","description":"the user you want to delete","type":[[["UserResolvable"]]]}],"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":183,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"addFriend","description":"Accepts a friend request.","params":[{"name":"user","description":"The user to add as a friend","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":203,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"setNickname","description":"Changes the nickname of a friend.","params":[{"name":"user","description":"The user to change the nickname","type":[[["UserResolvable"]]]},{"name":"nickname","description":"New nickname","nullable":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":226,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"addBlocked","description":"Blocks a user.","params":[{"name":"user","description":"User to block","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":242,"file":"RelationshipManager.js","path":"src/managers"}}],"meta":{"line":14,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"RoleManager","description":"Manages API methods for roles and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild belonging to this manager","type":[[["Guild"]]],"meta":{"line":34,"file":"RoleManager.js","path":"src/managers"}},{"name":"cache","description":"The role cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":37,"file":"RoleManager.js","path":"src/managers"}},{"name":"everyone","description":"The `@everyone` role of the guild","readonly":true,"type":[[["Role"]]],"meta":{"line":329,"file":"RoleManager.js","path":"src/managers"}},{"name":"premiumSubscriberRole","description":"The premium subscriber role of the guild, if any","readonly":true,"nullable":true,"type":[[["Role"]]],"meta":{"line":338,"file":"RoleManager.js","path":"src/managers"}},{"name":"highest","description":"The role with the highest position in the cache","readonly":true,"type":[[["Role"]]],"meta":{"line":347,"file":"RoleManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetch","description":"Obtains a role from Discord, or the role cache if they're already available.","examples":["// Fetch all roles from the guild\nmessage.guild.roles.fetch()\n .then(roles => console.log(`There are ${roles.size} roles.`))\n .catch(console.error);","// Fetch a single role\nmessage.guild.roles.fetch('222078108977594368')\n .then(role => console.log(`The role color is: ${role.color}`))\n .catch(console.error);"],"params":[{"name":"id","description":"The role's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<(?"],["Role","|"],["Collection","<"],["Snowflake",", "],["Role",">)>"]]],"meta":{"line":63,"file":"RoleManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a {@link RoleResolvable} to a {@link Role} object.","params":[{"name":"role","description":"The role resolvable to resolve","type":[[["RoleResolvable"]]]}],"returns":{"types":[[["Role"]]],"nullable":true},"meta":{"line":83,"file":"RoleManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link RoleResolvable} to a {@link Role} id.","params":[{"name":"role","description":"The role resolvable to resolve","type":[[["RoleResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":92,"file":"RoleManager.js","path":"src/managers"}},{"name":"create","description":"Creates a new role in the guild with given information.\nThe position will silently reset to 1 if an invalid one is provided, or none.","examples":["// Create a new role\nguild.roles.create()\n .then(console.log)\n .catch(console.error);","// Create a new role with data and a reason\nguild.roles.create({\n name: 'Super Cool Blue People',\n color: 'BLUE',\n reason: 'we needed a role for Super Cool People',\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for creating the new role","optional":true,"type":[[["CreateRoleOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":137,"file":"RoleManager.js","path":"src/managers"}},{"name":"edit","description":"Edits a role of the guild.","examples":["// Edit a role\nguild.roles.edit('222079219327434752', { name: 'buddies' })\n .then(updated => console.log(`Edited role name to ${updated.name}`))\n .catch(console.error);"],"params":[{"name":"role","description":"The role to edit","type":[[["RoleResolvable"]]]},{"name":"data","description":"The new data for the role","type":[[["RoleData"]]]},{"name":"reason","description":"Reason for editing this role","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":179,"file":"RoleManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes a role.","examples":["// Delete a role\nguild.roles.delete('222079219327434752', 'The role needed to go')\n .then(() => console.log('Deleted the role.'))\n .catch(console.error);"],"params":[{"name":"role","description":"The role to delete","type":[[["RoleResolvable"]]]},{"name":"reason","description":"Reason for deleting the role","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":220,"file":"RoleManager.js","path":"src/managers"}},{"name":"setPosition","description":"Sets the new position of the role.","examples":["// Set the position of the role\nguild.roles.setPosition('222197033908436994', 1)\n .then(updated => console.log(`Role position: ${updated.position}`))\n .catch(console.error);"],"params":[{"name":"role","description":"The role to change the position of","type":[[["RoleResolvable"]]]},{"name":"position","description":"The new position for the role","type":[[["number"]]]},{"name":"options","description":"Options for setting the position","optional":true,"type":[[["SetRolePositionOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":238,"file":"RoleManager.js","path":"src/managers"}},{"name":"setPositions","description":"Batch-updates the guild's role positions","examples":["guild.roles.setPositions([{ role: roleId, position: updatedRoleIndex }])\n .then(guild => console.log(`Role positions updated for ${guild}`))\n .catch(console.error);"],"params":[{"name":"rolePositions","description":"Role positions to update","type":[[["Array","<"],["GuildRolePosition",">"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":273,"file":"RoleManager.js","path":"src/managers"}},{"name":"comparePositions","description":"Compares the positions of two roles.","params":[{"name":"role1","description":"First role to compare","type":[[["RoleResolvable"]]]},{"name":"role2","description":"Second role to compare","type":[[["RoleResolvable"]]]}],"returns":{"types":[[["number"]]],"description":"Negative number if the first role's position is lower (second role's is higher),\npositive number if the first's is higher (second's is lower), 0 if equal"},"meta":{"line":297,"file":"RoleManager.js","path":"src/managers"}},{"name":"botRoleFor","description":"Gets the managed role a user created when joining the guild, if any\nOnly ever available for bots","params":[{"name":"user","description":"The user to access the bot role for","type":[[["UserResolvable"]]]}],"returns":{"types":[[["Role"]]],"nullable":true},"meta":{"line":318,"file":"RoleManager.js","path":"src/managers"}}],"meta":{"line":19,"file":"RoleManager.js","path":"src/managers"}},{"name":"SessionManager","description":"Manages API methods for users and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"cache","description":"The cache of Sessions","type":[[["Collection","<"],["string",", "],["Session",">"]]],"meta":{"line":14,"file":"SessionManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetch","description":"Fetch all sessions of the client.","returns":[[["Promise","<"],["SessionManager",">"]]],"meta":{"line":24,"file":"SessionManager.js","path":"src/managers"}},{"name":"logoutAllDevices","description":"Logout the client (remote).","params":[{"name":"mfaCode","description":"MFA code (if 2FA is enabled)","type":[[["string"]],[["null"]]]}],"returns":[[["Promise","<"],["undefined",">"]]],"meta":{"line":45,"file":"SessionManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"SessionManager.js","path":"src/managers"}},{"name":"StageInstanceManager","description":"Manages API methods for {@link StageInstance} objects and holds their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":20,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["StageInstance",">"]]],"meta":{"line":23,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"create","description":"Creates a new stage instance.","examples":["// Create a stage instance\nguild.stageInstances.create('1234567890123456789', {\n topic: 'A very creative topic',\n privacyLevel: 'GUILD_ONLY'\n})\n .then(stageInstance => console.log(stageInstance))\n .catch(console.error);"],"params":[{"name":"channel","description":"The stage channel to associate the created stage instance to","type":[[["StageChannelResolvable"]]]},{"name":"options","description":"The options to create the stage instance","type":[[["StageInstanceCreateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":60,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches the stage instance associated with a stage channel, if it exists.","examples":["// Fetch a stage instance\nguild.stageInstances.fetch('1234567890123456789')\n .then(stageInstance => console.log(stageInstance))\n .catch(console.error);"],"params":[{"name":"channel","description":"The stage channel whose associated stage instance is to be fetched","type":[[["StageChannelResolvable"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":93,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"edit","description":"Edits an existing stage instance.","examples":["// Edit a stage instance\nguild.stageInstances.edit('1234567890123456789', { topic: 'new topic' })\n .then(stageInstance => console.log(stageInstance))\n .catch(console.error);"],"params":[{"name":"channel","description":"The stage channel whose associated stage instance is to be edited","type":[[["StageChannelResolvable"]]]},{"name":"options","description":"The options to edit the stage instance","type":[[["StageInstanceEditOptions"]]]}],"async":true,"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":124,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes an existing stage instance.","params":[{"name":"channel","description":"The stage channel whose associated stage instance is to be deleted","type":[[["StageChannelResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":154,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"ThreadManager","description":"Manages API methods for {@link ThreadChannel} objects and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"channel","description":"The channel this Manager belongs to","type":[[["NewsChannel"]],[["TextChannel"]]],"meta":{"line":20,"file":"ThreadManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["ThreadChannel",">"]]],"meta":{"line":23,"file":"ThreadManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a {@link ThreadChannelResolvable} to a {@link ThreadChannel} object.","params":[{"name":"thread","description":"The ThreadChannel resolvable to resolve","type":[[["ThreadChannelResolvable"]]]}],"returns":{"types":[[["ThreadChannel"]]],"nullable":true},"meta":{"line":43,"file":"ThreadManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link ThreadChannelResolvable} to a {@link ThreadChannel} id.","params":[{"name":"thread","description":"The ThreadChannel resolvable to resolve","type":[[["ThreadChannelResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":52,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains a thread from Discord, or the channel cache if it's already available.","examples":["// Fetch a thread by its id\nchannel.threads.fetch('831955138126104859')\n .then(channel => console.log(channel.name))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to fetch threads. If it is a\nThreadChannelResolvable then the specified thread will be fetched. Fetches all active threads if `undefined`","optional":true,"type":[[["ThreadChannelResolvable"]],[["FetchChannelThreadsOptions"]],[["FetchThreadsOptions"]]]},{"name":"cacheOptions","description":"Additional options for this fetch. The `force` field gets ignored\nif `options` is not a {@link ThreadChannelResolvable}","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise",""]]],"meta":{"line":80,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetchArchived","description":"Obtains a set of archived threads from Discord, requires `READ_MESSAGE_HISTORY` in the parent channel.","params":[{"name":"options","description":"The options to fetch archived threads","optional":true,"type":[[["FetchChannelThreadsOptions"]]]},{"name":"cache","description":"Whether to cache the new thread objects if they aren't already","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":122,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetchActive","description":"Obtains the accessible active threads from Discord, requires `READ_MESSAGE_HISTORY` in the parent channel.","params":[{"name":"cache","description":"Whether to cache the new thread objects if they aren't already","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"options","description":"Options for self-bots where advanced users can specify further options","optional":true,"default":null,"type":[[["FetchChannelThreadsOptions"]]]}],"async":true,"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":168,"file":"ThreadManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"ThreadManager.js","path":"src/managers"}},{"name":"ThreadMemberManager","description":"Manages API methods for GuildMembers and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"thread","description":"The thread this manager belongs to","type":[[["ThreadChannel"]]],"meta":{"line":23,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["ThreadMember",">"]]],"meta":{"line":26,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"me","description":"The client user as a ThreadMember of this ThreadChannel","readonly":true,"nullable":true,"type":[[["ThreadMember"]]],"meta":{"line":56,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetchMe","description":"Fetches the client user as a ThreadMember of the thread.","params":[{"name":"options","description":"The options for fetching the member","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise","<"],["ThreadMember",">"]]],"meta":{"line":47,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a {@link ThreadMemberResolvable} to a {@link ThreadMember} object.","params":[{"name":"member","description":"The user that is part of the thread","type":[[["ThreadMemberResolvable"]]]}],"returns":{"types":[[["GuildMember"]]],"nullable":true},"meta":{"line":72,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link ThreadMemberResolvable} to a {@link ThreadMember} id string.","params":[{"name":"member","description":"The user that is part of the guild","type":[[["ThreadMemberResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":85,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"add","description":"Adds a member to the thread.","params":[{"name":"member","description":"The member to add","type":[[["UserResolvable"]],[["me","'"]]]},{"name":"reason","description":"The reason for adding this member","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Snowflake",">"]]],"meta":{"line":98,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"remove","description":"Remove a user from the thread.","params":[{"name":"id","description":"The id of the member to remove","type":[[["Snowflake"]],[["me","'"]]]},{"name":"reason","description":"The reason for removing this member from the thread","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Snowflake",">"]]],"meta":{"line":111,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches member(s) for the thread from Discord.","params":[{"name":"member","description":"The member to fetch. If `undefined`, all members\nin the thread are fetched, and will be cached based on `options.cache`.","optional":true,"type":[[["UserResolvable"]],[["FetchThreadMembersOptions"]],[["boolean"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["FetchThreadMemberOptions"]],[["FetchThreadMembersOptions"]]]}],"returns":[[["Promise","<("],["ThreadMember","|"],["Collection","<"],["Snowflake",", "],["ThreadMember",">)>"]]],"meta":{"line":171,"file":"ThreadMemberManager.js","path":"src/managers"}}],"meta":{"line":15,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"UserManager","description":"Manages API methods for users and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"cache","description":"The cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":19,"file":"UserManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"dmChannel","description":"The DM between the client's user and a user","access":"private","params":[{"name":"userId","description":"The user id","type":[[["Snowflake"]]]}],"returns":{"types":[[["DMChannel"]]],"nullable":true},"meta":{"line":41,"file":"UserManager.js","path":"src/managers"}},{"name":"createDM","description":"Creates a {@link DMChannel} between the client and a user.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":51,"file":"UserManager.js","path":"src/managers"}},{"name":"deleteDM","description":"Deletes a {@link DMChannel} (if one exists) between the client and a user. Resolves with the channel if successful.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":77,"file":"UserManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains a user from Discord, or the user cache if it's already available.","params":[{"name":"user","description":"The user to fetch","type":[[["UserResolvable"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]},{"name":"options.guildId","description":"The guild ID to fetch the member for","optional":true,"nullable":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":93,"file":"UserManager.js","path":"src/managers"}},{"name":"fetchFlags","description":"Fetches a user's flags.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<"],["UserFlags",">"]]],"meta":{"line":112,"file":"UserManager.js","path":"src/managers"}},{"name":"send","description":"Sends a message to a user.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]},{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":122,"file":"UserManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a {@link UserResolvable} to a {@link User} object.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]}],"returns":{"types":[[["User"]]],"nullable":true},"meta":{"line":131,"file":"UserManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link UserResolvable} to a {@link User} id.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":142,"file":"UserManager.js","path":"src/managers"}}],"meta":{"line":14,"file":"UserManager.js","path":"src/managers"}},{"name":"VoiceStateManager","description":"Manages API methods for VoiceStates and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":18,"file":"VoiceStateManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["VoiceState",">"]]],"meta":{"line":21,"file":"VoiceStateManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"VoiceStateManager.js","path":"src/managers"}},{"name":"DiscordAPIError","description":"Represents an error from the Discord API.","extends":[[["Error"]]],"props":[{"name":"method","description":"The HTTP method used for the request","type":[[["string"]]],"meta":{"line":18,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"path","description":"The path of the request relative to the HTTP endpoint","type":[[["string"]]],"meta":{"line":24,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"code","description":"HTTP error code returned by Discord","type":[[["number"]],[["string"]]],"meta":{"line":30,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"httpStatus","description":"The HTTP status code","type":[[["number"]]],"meta":{"line":36,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"captcha","description":"Captcha response data if the request requires a captcha","type":[[["Captcha"]],[["null"]]],"meta":{"line":51,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"requestData","description":"The data associated with the request that caused this error","type":[[["HTTPErrorData"]]],"meta":{"line":57,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"retries","description":"The number of times this request has been retried","type":[[["number"]]],"meta":{"line":66,"file":"DiscordAPIError.js","path":"src/rest"}}],"methods":[{"name":"flattenErrors","description":"Flattens an errors object returned from the API into an array.","scope":"static","access":"private","params":[{"name":"obj","description":"Discord errors object","type":[[["APIError"]]]},{"name":"key","description":"Used internally to determine key names of nested fields","optional":true,"type":[[["string"]]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":76,"file":"DiscordAPIError.js","path":"src/rest"}}],"meta":{"line":7,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"HTTPError","description":"Represents an HTTP error from a request.","extends":[[["Error"]]],"props":[{"name":"name","description":"The name of the error","type":[[["string"]]],"meta":{"line":15,"file":"HTTPError.js","path":"src/rest"}},{"name":"code","description":"HTTP error code returned from the request","type":[[["number"]]],"meta":{"line":21,"file":"HTTPError.js","path":"src/rest"}},{"name":"method","description":"The HTTP method used for the request","type":[[["string"]]],"meta":{"line":27,"file":"HTTPError.js","path":"src/rest"}},{"name":"path","description":"The path of the request relative to the HTTP endpoint","type":[[["string"]]],"meta":{"line":33,"file":"HTTPError.js","path":"src/rest"}},{"name":"requestData","description":"The data associated with the request that caused this error","type":[[["HTTPErrorData"]]],"meta":{"line":54,"file":"HTTPError.js","path":"src/rest"}}],"meta":{"line":7,"file":"HTTPError.js","path":"src/rest"}},{"name":"RateLimitError","description":"Represents a RateLimit error from a request.","extends":[[["Error"]]],"props":[{"name":"name","description":"The name of the error","type":[[["string"]]],"meta":{"line":15,"file":"RateLimitError.js","path":"src/rest"}},{"name":"timeout","description":"Time until this rate limit ends, in milliseconds","type":[[["number"]]],"meta":{"line":21,"file":"RateLimitError.js","path":"src/rest"}},{"name":"method","description":"The HTTP method used for the request","type":[[["string"]]],"meta":{"line":27,"file":"RateLimitError.js","path":"src/rest"}},{"name":"path","description":"The path of the request relative to the HTTP endpoint","type":[[["string"]]],"meta":{"line":33,"file":"RateLimitError.js","path":"src/rest"}},{"name":"route","description":"The route of the request relative to the HTTP endpoint","type":[[["string"]]],"meta":{"line":39,"file":"RateLimitError.js","path":"src/rest"}},{"name":"global","description":"Whether this rate limit is global","type":[[["boolean"]]],"meta":{"line":45,"file":"RateLimitError.js","path":"src/rest"}},{"name":"limit","description":"The maximum amount of requests of this endpoint","type":[[["number"]]],"meta":{"line":51,"file":"RateLimitError.js","path":"src/rest"}}],"meta":{"line":7,"file":"RateLimitError.js","path":"src/rest"}},{"name":"Shard","description":"A self-contained shard created by the {@link ShardingManager}. Each one has a {@link ChildProcess} that contains\nan instance of the bot and its {@link Client}. When its child process/worker exits for any reason, the shard will\nspawn a new one to replace it as necessary.","extends":[[["EventEmitter"]]],"props":[{"name":"manager","description":"Manager that created the shard","type":[[["ShardingManager"]]],"meta":{"line":30,"file":"Shard.js","path":"src/sharding"}},{"name":"id","description":"The shard's id in the manager","type":[[["number"]]],"meta":{"line":36,"file":"Shard.js","path":"src/sharding"}},{"name":"args","description":"Arguments for the shard's process (only when {@link ShardingManager#mode} is `process`)","type":[[["Array","<"],["string",">"]]],"meta":{"line":42,"file":"Shard.js","path":"src/sharding"}},{"name":"execArgv","description":"Arguments for the shard's process executable (only when {@link ShardingManager#mode} is `process`)","type":[[["Array","<"],["string",">"]]],"meta":{"line":48,"file":"Shard.js","path":"src/sharding"}},{"name":"env","description":"Environment variables for the shard's process, or workerData for the shard's worker","type":[[["Object"]]],"meta":{"line":54,"file":"Shard.js","path":"src/sharding"}},{"name":"ready","description":"Whether the shard's {@link Client} is ready","type":[[["boolean"]]],"meta":{"line":65,"file":"Shard.js","path":"src/sharding"}},{"name":"process","description":"Process of the shard (if {@link ShardingManager#mode} is `process`)","nullable":true,"type":[[["ChildProcess"]]],"meta":{"line":71,"file":"Shard.js","path":"src/sharding"}},{"name":"worker","description":"Worker of the shard (if {@link ShardingManager#mode} is `worker`)","nullable":true,"type":[[["Worker"]]],"meta":{"line":77,"file":"Shard.js","path":"src/sharding"}},{"name":"_evals","description":"Ongoing promises for calls to {@link Shard#eval}, mapped by the `script` they were called with","access":"private","type":[[["Map","<"],["string",", "],["Promise",">"]]],"meta":{"line":84,"file":"Shard.js","path":"src/sharding"}},{"name":"_fetches","description":"Ongoing promises for calls to {@link Shard#fetchClientValue}, mapped by the `prop` they were called with","access":"private","type":[[["Map","<"],["string",", "],["Promise",">"]]],"meta":{"line":91,"file":"Shard.js","path":"src/sharding"}},{"name":"_exitListener","description":"Listener function for the {@link ChildProcess}' `exit` event","access":"private","type":[[["function"]]],"meta":{"line":98,"file":"Shard.js","path":"src/sharding"}}],"methods":[{"name":"spawn","description":"Forks a child process or creates a worker thread for the shard.\nYou should not need to call this manually.","params":[{"name":"timeout","description":"The amount in milliseconds to wait until the {@link Client} has become ready\nbefore resolving (`-1` or `Infinity` for no wait)","optional":true,"default":30000,"type":[[["number"]]]}],"returns":[[["Promise","<"],["ChildProcess",">"]]],"meta":{"line":108,"file":"Shard.js","path":"src/sharding"}},{"name":"kill","description":"Immediately kills the shard's process/worker and does not restart it.","meta":{"line":179,"file":"Shard.js","path":"src/sharding"}},{"name":"respawn","description":"Kills and restarts the shard's process/worker.","params":[{"name":"options","description":"Options for respawning the shard","optional":true,"type":[[["ShardRespawnOptions"]]]}],"async":true,"returns":[[["Promise","<"],["ChildProcess",">"]]],"meta":{"line":205,"file":"Shard.js","path":"src/sharding"}},{"name":"send","description":"Sends a message to the shard's process/worker.","params":[{"name":"message","description":"Message to send to the shard","type":[["*"]]}],"returns":[[["Promise","<"],["Shard",">"]]],"meta":{"line":216,"file":"Shard.js","path":"src/sharding"}},{"name":"fetchClientValue","description":"Fetches a client property value of the shard.","examples":["shard.fetchClientValue('guilds.cache.size')\n .then(count => console.log(`${count} guilds in shard ${shard.id}`))\n .catch(console.error);"],"params":[{"name":"prop","description":"Name of the client property to get, using periods for nesting","type":[[["string"]]]}],"returns":[[["Promise","<"],["*",">"]]],"meta":{"line":239,"file":"Shard.js","path":"src/sharding"}},{"name":"eval","description":"Evaluates a script or function on the shard, in the context of the {@link Client}.","params":[{"name":"script","description":"JavaScript to run on the shard","type":[[["string"]],[["function"]]]},{"name":"context","description":"The context for the eval","optional":true,"type":[["*"]]}],"returns":{"types":[[["Promise","<"],["*",">"]]],"description":"Result of the script execution"},"meta":{"line":279,"file":"Shard.js","path":"src/sharding"}},{"name":"_handleMessage","description":"Handles a message received from the child process/worker.","access":"private","params":[{"name":"message","description":"Message received","type":[["*"]]}],"meta":{"line":321,"file":"Shard.js","path":"src/sharding"}},{"name":"_handleExit","description":"Handles the shard's process/worker exiting.","access":"private","params":[{"name":"respawn","description":"Whether to spawn the shard again","optional":true,"default":"this.manager.respawn","type":[[["boolean"]]]},{"name":"timeout","description":"The amount in milliseconds to wait until the {@link Client}\nhas become ready (`-1` or `Infinity` for no wait)","optional":true,"type":[[["number"]]]}],"meta":{"line":401,"file":"Shard.js","path":"src/sharding"}},{"name":"incrementMaxListeners","description":"Increments max listeners by one for a given emitter, if they are not zero.","access":"private","params":[{"name":"emitter","description":"The emitter that emits the events.","type":[[["EventEmitter"]],[["process"]]]}],"meta":{"line":423,"file":"Shard.js","path":"src/sharding"}},{"name":"decrementMaxListeners","description":"Decrements max listeners by one for a given emitter, if they are not zero.","access":"private","params":[{"name":"emitter","description":"The emitter that emits the events.","type":[[["EventEmitter"]],[["process"]]]}],"meta":{"line":435,"file":"Shard.js","path":"src/sharding"}}],"events":[{"name":"spawn","description":"Emitted upon the creation of the shard's child process/worker.","params":[{"name":"process","description":"Child process/worker that was created","type":[[["ChildProcess"]],[["Worker"]]]}],"meta":{"line":133,"file":"Shard.js","path":"src/sharding"}},{"name":"ready","description":"Emitted upon the shard's {@link Client#event:shardReady} event.","meta":{"line":326,"file":"Shard.js","path":"src/sharding"}},{"name":"disconnect","description":"Emitted upon the shard's {@link Client#event:shardDisconnect} event.","meta":{"line":337,"file":"Shard.js","path":"src/sharding"}},{"name":"reconnecting","description":"Emitted upon the shard's {@link Client#event:shardReconnecting} event.","meta":{"line":348,"file":"Shard.js","path":"src/sharding"}},{"name":"message","description":"Emitted upon receiving a message from the child process/worker.","params":[{"name":"message","description":"Message that was received","type":[["*"]]}],"meta":{"line":386,"file":"Shard.js","path":"src/sharding"}},{"name":"death","description":"Emitted upon the shard's child process/worker exiting.","params":[{"name":"process","description":"Child process/worker that exited","type":[[["ChildProcess"]],[["Worker"]]]}],"meta":{"line":402,"file":"Shard.js","path":"src/sharding"}}],"meta":{"line":19,"file":"Shard.js","path":"src/sharding"}},{"name":"ShardClientUtil","description":"Helper class for sharded clients spawned as a child process/worker, such as from a {@link ShardingManager}.\nUtilises IPC to send and receive data to/from the master process and other shards.","props":[{"name":"client","description":"Client for the shard","type":[[["Client"]]],"meta":{"line":18,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"mode","description":"Mode the shard was spawned with","type":[[["ShardingManagerMode"]]],"meta":{"line":24,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"parentPort","description":"Message port for the master process (only when {@link ShardClientUtil#mode} is `worker`)","nullable":true,"type":[[["MessagePort"]]],"meta":{"line":30,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"ids","description":"Array of shard ids of this client","readonly":true,"type":[[["Array","<"],["number",">"]]],"meta":{"line":63,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"count","description":"Total number of shards","readonly":true,"type":[[["number"]]],"meta":{"line":72,"file":"ShardClientUtil.js","path":"src/sharding"}}],"methods":[{"name":"send","description":"Sends a message to the master process.","emits":["Shard#event:message"],"params":[{"name":"message","description":"Message to send","type":[["*"]]}],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":82,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"fetchClientValues","description":"Fetches a client property value of each shard, or a given shard.","see":["{@link ShardingManager#fetchClientValues}"],"examples":["client.shard.fetchClientValues('guilds.cache.size')\n .then(results => console.log(`${results.reduce((prev, val) => prev + val, 0)} total guilds`))\n .catch(console.error);"],"params":[{"name":"prop","description":"Name of the client property to get, using periods for nesting","type":[[["string"]]]},{"name":"shard","description":"Shard to fetch property from, all if undefined","optional":true,"type":[[["number"]]]}],"returns":[[["Promise","<("],["*","|"],["Array","<"],["*",">)>"]]],"meta":{"line":107,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"broadcastEval","description":"Evaluates a script or function on all shards, or a given shard, in the context of the {@link Client}s.","see":["{@link ShardingManager#broadcastEval}"],"examples":["client.shard.broadcastEval(client => client.guilds.cache.size)\n .then(results => console.log(`${results.reduce((prev, val) => prev + val, 0)} total guilds`))\n .catch(console.error);"],"params":[{"name":"script","description":"JavaScript to run on each shard","type":[[["function"]]]},{"name":"options","description":"The options for the broadcast","optional":true,"default":"{}","type":[[["BroadcastEvalOptions"]]]}],"returns":{"types":[[["Promise","<("],["*","|"],["Array","<"],["*",">)>"]]],"description":"Results of the script execution"},"meta":{"line":140,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"respawnAll","description":"Requests a respawn of all shards.","see":["{@link ShardingManager#respawnAll}"],"params":[{"name":"options","description":"Options for respawning shards","optional":true,"type":[[["MultipleShardRespawnOptions"]]]}],"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the message being sent"},"meta":{"line":172,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"_handleMessage","description":"Handles an IPC message.","access":"private","params":[{"name":"message","description":"Message received","type":[["*"]]}],"async":true,"meta":{"line":181,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"_respond","description":"Sends a message to the master process, emitting an error from the client upon failure.","access":"private","params":[{"name":"type","description":"Type of response to send","type":[[["string"]]]},{"name":"message","description":"Message to send","type":[["*"]]}],"meta":{"line":207,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"incrementMaxListeners","description":"Increments max listeners by one for a given emitter, if they are not zero.","access":"private","params":[{"name":"emitter","description":"The emitter that emits the events.","type":[[["EventEmitter"]],[["process"]]]}],"meta":{"line":255,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"decrementMaxListeners","description":"Decrements max listeners by one for a given emitter, if they are not zero.","access":"private","params":[{"name":"emitter","description":"The emitter that emits the events.","type":[[["EventEmitter"]],[["process"]]]}],"meta":{"line":267,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"singleton","description":"Creates/gets the singleton of this class.","scope":"static","params":[{"name":"client","description":"The client to use","type":[[["Client"]]]},{"name":"mode","description":"Mode the shard was spawned with","type":[[["ShardingManagerMode"]]]}],"returns":[[["ShardClientUtil"]]],"meta":{"line":226,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"shardIdForGuildId","description":"Get the shard id for a given guild id.","scope":"static","params":[{"name":"guildId","description":"Snowflake guild id to get shard id for","type":[[["Snowflake"]]]},{"name":"shardCount","description":"Number of shards","type":[[["number"]]]}],"returns":[[["number"]]],"meta":{"line":244,"file":"ShardClientUtil.js","path":"src/sharding"}}],"meta":{"line":12,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"ShardingManager","description":"This is a utility class that makes multi-process sharding of a bot an easy and painless experience.\nIt works by spawning a self-contained {@link ChildProcess} or {@link Worker} for each individual shard, each\ncontaining its own instance of your bot's {@link Client}. They all have a line of communication with the master\nprocess, and there are several useful methods that utilise it in order to simplify tasks that are normally difficult\nwith sharding. It can spawn a specific number of shards or the amount that Discord suggests for the bot, and takes a\npath to your main bot script to launch for each one.","extends":[[["EventEmitter"]]],"construct":{"name":"ShardingManager","params":[{"name":"file","description":"Path to your shard script file","type":[[["string"]]]},{"name":"options","description":"Options for the sharding manager","optional":true,"type":[[["ShardingManagerOptions"]]]}]},"props":[{"name":"file","description":"Path to the shard script file","type":[[["string"]]],"meta":{"line":66,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"shardList","description":"List of shards this sharding manager spawns","type":[[["string"]],[["Array","<"],["number",">"]]],"meta":{"line":76,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"totalShards","description":"Amount of shards that all sharding managers spawn in total","type":[[["number"]]],"meta":{"line":96,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"mode","description":"Mode for shards to spawn with","type":[[["ShardingManagerMode"]]],"meta":{"line":111,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"respawn","description":"Whether shards should automatically respawn upon exiting","type":[[["boolean"]]],"meta":{"line":120,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"shardArgs","description":"An array of arguments to pass to shards (only when {@link ShardingManager#mode} is `process`)","type":[[["Array","<"],["string",">"]]],"meta":{"line":126,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"execArgv","description":"An array of arguments to pass to the executable (only when {@link ShardingManager#mode} is `process`)","type":[[["Array","<"],["string",">"]]],"meta":{"line":132,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"token","description":"Token to use for obtaining the automatic shard count, and passing to shards","nullable":true,"type":[[["string"]]],"meta":{"line":138,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"shards","description":"A collection of shards that this manager has spawned","type":[[["Collection","<"],["number",", "],["Shard",">"]]],"meta":{"line":144,"file":"ShardingManager.js","path":"src/sharding"}}],"methods":[{"name":"createShard","description":"Creates a single shard.\nUsing this method is usually not necessary if you use the spawn method.","params":[{"name":"id","description":"Id of the shard to create\nThis is usually not necessary to manually specify.","optional":true,"default":"this.shards.size","type":[[["number"]]]}],"returns":{"types":[[["Shard"]]],"description":"Note that the created shard needs to be explicitly spawned using its spawn method."},"meta":{"line":158,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"spawn","description":"Spawns multiple shards.","params":[{"name":"options","description":"Options for spawning shards","optional":true,"type":[[["MultipleShardSpawnOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["number",", "],["Shard",">>"]]],"meta":{"line":183,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"broadcast","description":"Sends a message to all shards.","params":[{"name":"message","description":"Message to be sent to the shards","type":[["*"]]}],"returns":[[["Promise","<"],["Array","<"],["Shard",">>"]]],"meta":{"line":231,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"broadcastEval","description":"Evaluates a script on all shards, or a given shard, in the context of the {@link Client}s.","params":[{"name":"script","description":"JavaScript to run on each shard","type":[[["function"]]]},{"name":"options","description":"The options for the broadcast","optional":true,"default":"{}","type":[[["BroadcastEvalOptions"]]]}],"returns":{"types":[[["Promise","<("],["*","|"],["Array","<"],["*",">)>"]]],"description":"Results of the script execution"},"meta":{"line":250,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"fetchClientValues","description":"Fetches a client property value of each shard, or a given shard.","examples":["manager.fetchClientValues('guilds.cache.size')\n .then(results => console.log(`${results.reduce((prev, val) => prev + val, 0)} total guilds`))\n .catch(console.error);"],"params":[{"name":"prop","description":"Name of the client property to get, using periods for nesting","type":[[["string"]]]},{"name":"shard","description":"Shard to fetch property from, all if undefined","optional":true,"type":[[["number"]]]}],"returns":[[["Promise","<("],["*","|"],["Array","<"],["*",">)>"]]],"meta":{"line":265,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"_performOnShards","description":"Runs a method with given arguments on all shards, or a given shard.","access":"private","params":[{"name":"method","description":"Method name to run on each shard","type":[[["string"]]]},{"name":"args","description":"Arguments to pass through to the method call","type":[[["Array","<"],["*",">"]]]},{"name":"shard","description":"Shard to run on, all if undefined","optional":true,"type":[[["number"]]]}],"returns":{"types":[[["Promise","<("],["*","|"],["Array","<"],["*",">)>"]]],"description":"Results of the method execution"},"meta":{"line":277,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"respawnAll","description":"Kills all running shards and respawns them.","params":[{"name":"options","description":"Options for respawning shards","optional":true,"type":[[["MultipleShardRespawnOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["number",", "],["Shard",">>"]]],"meta":{"line":307,"file":"ShardingManager.js","path":"src/sharding"}}],"events":[{"name":"shardCreate","description":"Emitted upon creating a shard.","params":[{"name":"shard","description":"Shard that was created","type":[[["Shard"]]]}],"meta":{"line":161,"file":"ShardingManager.js","path":"src/sharding"}}],"meta":{"line":22,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"AnonymousGuild","description":"Bundles common attributes and methods between {@link Guild} and {@link InviteGuild}","extends":[[["BaseGuild"]]],"abstract":true,"props":[{"name":"splash","description":"The hash of the guild invite splash image","nullable":true,"type":[[["string"]]],"meta":{"line":25,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"banner","description":"The hash of the guild banner","nullable":true,"type":[[["string"]]],"meta":{"line":33,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"description","description":"The description of the guild, if any","nullable":true,"type":[[["string"]]],"meta":{"line":41,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"verificationLevel","description":"The verification level of the guild","type":[[["VerificationLevel"]]],"meta":{"line":49,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"vanityURLCode","description":"The vanity invite code of the guild, if any","nullable":true,"type":[[["string"]]],"meta":{"line":57,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"nsfwLevel","description":"The NSFW level of this guild","type":[[["NSFWLevel"]]],"meta":{"line":65,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"premiumSubscriptionCount","description":"The total number of boosts for this server","nullable":true,"type":[[["number"]]],"meta":{"line":73,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"id","description":"The guild's id","type":[[["Snowflake"]]],"meta":{"line":19,"file":"BaseGuild.js","path":"src/structures"}},{"name":"name","description":"The name of this guild","type":[[["string"]]],"meta":{"line":25,"file":"BaseGuild.js","path":"src/structures"}},{"name":"icon","description":"The icon hash of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":31,"file":"BaseGuild.js","path":"src/structures"}},{"name":"features","description":"An array of features available to this guild","type":[[["Array","<"],["Features",">"]]],"meta":{"line":37,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this guild was created at","readonly":true,"type":[[["number"]]],"meta":{"line":45,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdAt","description":"The time this guild was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":54,"file":"BaseGuild.js","path":"src/structures"}},{"name":"nameAcronym","description":"The acronym that shows up in place of a guild icon","readonly":true,"type":[[["string"]]],"meta":{"line":63,"file":"BaseGuild.js","path":"src/structures"}},{"name":"partnered","description":"Whether this guild is partnered","readonly":true,"type":[[["boolean"]]],"meta":{"line":75,"file":"BaseGuild.js","path":"src/structures"}},{"name":"verified","description":"Whether this guild is verified","readonly":true,"type":[[["boolean"]]],"meta":{"line":84,"file":"BaseGuild.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"bannerURL","description":"The URL to this guild's banner.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":84,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"splashURL","description":"The URL to this guild's invite splash image.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"iconURL","description":"The URL to this guild's icon.","inherits":"BaseGuild#iconURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"BaseGuild.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this guild.","inherits":"BaseGuild#fetch","inherited":true,"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":102,"file":"BaseGuild.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the guild's name instead of the Guild object.","inherits":"BaseGuild#toString","inherited":true,"returns":[[["string"]]],"meta":{"line":111,"file":"BaseGuild.js","path":"src/structures"}}],"meta":{"line":11,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"ApplicationCommand","description":"Represents an application command.","extends":[[["Base"]]],"props":[{"name":"id","description":"The command's id","type":[[["Snowflake"]]],"meta":{"line":32,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"applicationId","description":"The parent application's id","type":[[["Snowflake"]]],"meta":{"line":38,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"permissions","description":"The manager for permissions of this command on its guild or arbitrary guilds when the command is global","type":[[["ApplicationCommandPermissionsManager"]]],"meta":{"line":44,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"type","description":"The type of this application command","type":[[["ApplicationCommandType"]]],"meta":{"line":50,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"guild","description":"The guild this command is part of","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":62,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"guildId","description":"The guild's id this command is part of, this may be non-null when `guild` is `null` if the command\nwas fetched from the `ApplicationCommandManager`","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":73,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"name","description":"The name of this command","type":[[["string"]]],"meta":{"line":81,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"nameLocalizations","description":"The name localizations for this command","nullable":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]],"meta":{"line":89,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"nameLocalized","description":"The localized name for this command","nullable":true,"type":[[["string"]]],"meta":{"line":99,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"description","description":"The description of this command","type":[[["string"]]],"meta":{"line":109,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"descriptionLocalizations","description":"The description localizations for this command","nullable":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]],"meta":{"line":117,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"descriptionLocalized","description":"The localized description for this command","nullable":true,"type":[[["string"]]],"meta":{"line":127,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"options","description":"The options of this command","type":[[["Array","<"],["ApplicationCommandOption",">"]]],"meta":{"line":137,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"defaultPermission","description":"Whether the command is enabled by default when the app is added to a guild","deprecated":"Use {@link ApplicationCommand.defaultMemberPermissions} and {@link ApplicationCommand.dmPermission} instead.","type":[[["boolean"]]],"meta":{"line":149,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"defaultMemberPermissions","description":"The default bitfield used to determine whether this command be used in a guild","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":159,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"dmPermission","description":"Whether the command can be used in DMs\nThis property is always `null` on guild commands","nullable":true,"type":[[["boolean"]]],"meta":{"line":172,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"version","description":"Autoincrementing version identifier updated during substantial record changes","type":[[["Snowflake"]]],"meta":{"line":182,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the command was created at","readonly":true,"type":[[["number"]]],"meta":{"line":191,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"createdAt","description":"The time the command was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":200,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"manager","description":"The manager that this command belongs to","readonly":true,"type":[[["ApplicationCommandManager"]]],"meta":{"line":209,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"edit","description":"Edits this application command.","examples":["// Edit the description of this command\ncommand.edit({\n description: 'New description',\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The data to update the command with","type":[[["Partial","<"],["ApplicationCommandData",">"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":273,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setName","description":"Edits the name of this ApplicationCommand","params":[{"name":"name","description":"The new name of the command","type":[[["string"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":282,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setNameLocalizations","description":"Edits the localized names of this ApplicationCommand","examples":["// Edit the name localizations of this command\ncommand.setLocalizedNames({\n 'en-GB': 'test',\n 'pt-BR': 'teste',\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"nameLocalizations","description":"The new localized names for the command","type":[[["Object","<"],["Locale",", "],["string",">"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":299,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setDescription","description":"Edits the description of this ApplicationCommand","params":[{"name":"description","description":"The new description of the command","type":[[["string"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":308,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setDescriptionLocalizations","description":"Edits the localized descriptions of this ApplicationCommand","examples":["// Edit the description localizations of this command\ncommand.setLocalizedDescriptions({\n 'en-GB': 'A test command',\n 'pt-BR': 'Um comando de teste',\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"descriptionLocalizations","description":"The new localized descriptions for the command","type":[[["Object","<"],["Locale",", "],["string",">"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":325,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setDefaultPermission","description":"Edits the default permission of this ApplicationCommand","deprecated":"Use {@link ApplicationCommand#setDefaultMemberPermissions} and {@link ApplicationCommand#setDMPermission} instead.","params":[{"name":"defaultPermission","description":"The default permission for this command","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":336,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setDefaultMemberPermissions","description":"Edits the default member permissions of this ApplicationCommand","params":[{"name":"defaultMemberPermissions","description":"The default member permissions required to run this command","nullable":true,"type":[[["PermissionResolvable"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":347,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setDMPermission","description":"Edits the DM permission of this ApplicationCommand","params":[{"name":"dmPermission","description":"Whether the command can be used in DMs","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":356,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setOptions","description":"Edits the options of this ApplicationCommand","params":[{"name":"options","description":"The options to set for this command","type":[[["Array","<"],["ApplicationCommandOptionData",">"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":365,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"delete","description":"Deletes this command.","examples":["// Delete this command\ncommand.delete()\n .then(console.log)\n .catch(console.error);"],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":378,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"equals","description":"Whether this command equals another command. It compares all properties, so for most operations\nit is advisable to just compare `command.id === command2.id` as it is much faster and is often\nwhat most users need.","params":[{"name":"command","description":"The command to compare with","type":[[["ApplicationCommand"]],[["ApplicationCommandData"]],[["APIApplicationCommand"]]]},{"name":"enforceOptionOrder","description":"Whether to strictly check that options and choices are in the same\norder in the array The client may not always respect this ordering!","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"sendSlashCommand","description":"Send Slash command to channel","params":[{"name":"message","description":"Discord Message","type":[[["Message"]]]},{"name":"subCommandArray","description":"SubCommand Array","type":[[["Array","<"],["string",">"]]]},{"name":"options","description":"The options to Slash Command","type":[[["Array","<"],["any",">"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":608,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"sendContextMenu","description":"Message Context Menu","params":[{"name":"message","description":"Discord Message","type":[[["Message"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":954,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"optionsEqual","description":"Recursively checks that all options for an {@link ApplicationCommand} are equal to the provided options.\nIn most cases it is better to compare using {@link ApplicationCommand#equals}","scope":"static","params":[{"name":"existing","description":"The options on the existing command,\nshould be {@link ApplicationCommand#options}","type":[[["Array","<"],["ApplicationCommandOptionData",">"]]]},{"name":"options","description":"The options to compare against","type":[[["Array","<"],["ApplicationCommandOptionData",">"]],[["Array","<"],["APIApplicationCommandOption",">"]]]},{"name":"enforceOptionOrder","description":"Whether to strictly check that options and choices are in the same\norder in the array The client may not always respect this ordering!","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["boolean"]]],"meta":{"line":441,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"_optionEquals","description":"Checks that an option for an {@link ApplicationCommand} is equal to the provided option\nIn most cases it is better to compare using {@link ApplicationCommand#equals}","scope":"static","access":"private","params":[{"name":"existing","description":"The option on the existing command,\nshould be from {@link ApplicationCommand#options}","type":[[["ApplicationCommandOptionData"]]]},{"name":"option","description":"The option to compare against","type":[[["ApplicationCommandOptionData"]],[["APIApplicationCommandOption"]]]},{"name":"enforceOptionOrder","description":"Whether to strictly check that options or choices are in the same\norder in their array The client may not always respect this ordering!","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["boolean"]]],"meta":{"line":467,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"transformOption","description":"Transforms an {@link ApplicationCommandOptionData} object into something that can be used with the API.","scope":"static","access":"private","params":[{"name":"option","description":"The option to transform","type":[[["ApplicationCommandOptionData"]],[["ApplicationCommandOption"]]]},{"name":"received","description":"Whether this option has been received from Discord","optional":true,"type":[[["boolean"]]]}],"returns":[[["APIApplicationCommandOption"]]],"meta":{"line":560,"file":"ApplicationCommand.js","path":"src/structures"}}],"meta":{"line":24,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"AutocompleteInteraction","description":"Represents an autocomplete interaction.","extends":[[["Interaction"]]],"props":[{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":15,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"commandId","description":"The invoked application command's id","type":[[["Snowflake"]]],"meta":{"line":25,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"commandName","description":"The invoked application command's name","type":[[["string"]]],"meta":{"line":31,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"responded","description":"Whether this interaction has already received a response","type":[[["boolean"]]],"meta":{"line":37,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"options","description":"The options passed to the command","type":[[["CommandInteractionOptionResolver"]]],"meta":{"line":43,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"command","description":"The invoked application command, if it was fetched before","nullable":true,"type":[[["ApplicationCommand"]]],"meta":{"line":53,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"transformOption","description":"Transforms an option received from the API.","access":"private","params":[{"name":"option","description":"The received option","type":[[["APIApplicationCommandOption"]]]}],"returns":[[["CommandInteractionOption"]]],"meta":{"line":64,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"respond","description":"Sends results for the autocomplete of this interaction.","examples":["// respond to autocomplete interaction\ninteraction.respond([\n {\n name: 'Option 1',\n value: 'option1',\n },\n])\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the autocomplete","type":[[["Array","<"],["ApplicationCommandOptionChoiceData",">"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":92,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":11,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"AutoModerationActionExecution","description":"Represents the structure of an executed action when an {@link AutoModerationRule} is triggered.","props":[{"name":"guild","description":"The guild where this action was executed from.","type":[[["Guild"]]],"meta":{"line":14,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"action","description":"The action that was executed.","type":[[["AutoModerationAction"]]],"meta":{"line":20,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"ruleId","description":"The id of the auto moderation rule this action belongs to.","type":[[["Snowflake"]]],"meta":{"line":26,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"ruleTriggerType","description":"The trigger type of the auto moderation rule which was triggered.","type":[[["AutoModerationRuleTriggerType"]]],"meta":{"line":32,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"userId","description":"The id of the user that triggered this action.","type":[[["Snowflake"]]],"meta":{"line":38,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel where this action was triggered from.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":44,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"messageId","description":"The id of the message that triggered this action.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":51,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"alertSystemMessageId","description":"The id of any system auto moderation messages posted as a result of this action.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":57,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"content","description":"The content that triggered this action.\nThis property requires the {@link Intents.FLAGS.MESSAGE_CONTENT} privileged gateway intent.","type":[[["string"]]],"meta":{"line":64,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"matchedKeyword","description":"The word or phrase configured in the rule that triggered this action.","nullable":true,"type":[[["string"]]],"meta":{"line":70,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"matchedContent","description":"The substring in content that triggered this action.","nullable":true,"type":[[["string"]]],"meta":{"line":76,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"autoModerationRule","description":"The auto moderation rule this action belongs to.","readonly":true,"nullable":true,"type":[[["AutoModerationRule"]]],"meta":{"line":84,"file":"AutoModerationActionExecution.js","path":"src/structures"}}],"meta":{"line":8,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"AutoModerationRule","description":"Represents an auto moderation rule.","extends":[[["Base"]]],"props":[{"name":"id","description":"The id of this auto moderation rule.","type":[[["Snowflake"]]],"meta":{"line":24,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"guild","description":"The guild this auto moderation rule is for.","type":[[["Guild"]]],"meta":{"line":30,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"creatorId","description":"The user that created this auto moderation rule.","type":[[["Snowflake"]]],"meta":{"line":36,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"triggerType","description":"The trigger type of this auto moderation rule.","type":[[["AutoModerationRuleTriggerType"]]],"meta":{"line":42,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"name","description":"The name of this auto moderation rule.","type":[[["string"]]],"meta":{"line":53,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"eventType","description":"The event type of this auto moderation rule.","type":[[["AutoModerationRuleEventType"]]],"meta":{"line":61,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"triggerMetadata","description":"The trigger metadata of the rule.","type":[[["AutoModerationTriggerMetadata"]]],"meta":{"line":83,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"actions","description":"The actions of this auto moderation rule.","type":[[["Array","<"],["AutoModerationAction",">"]]],"meta":{"line":113,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"enabled","description":"Whether this auto moderation rule is enabled.","type":[[["boolean"]]],"meta":{"line":128,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"exemptRoles","description":"The roles exempt by this auto moderation rule.","type":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":136,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"exemptChannels","description":"The channels exempt by this auto moderation rule.","type":[[["Collection","<"],["Snowflake",", ("],["GuildChannel","|"],["ThreadChannel",")>"]]],"meta":{"line":146,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"edit","description":"Edits this auto moderation rule.","params":[{"name":"options","description":"Options for editing this auto moderation rule","type":[[["AutoModerationRuleEditOptions"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":157,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"delete","description":"Deletes this auto moderation rule.","params":[{"name":"reason","description":"The reason for deleting this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setName","description":"Sets the name for this auto moderation rule.","params":[{"name":"name","description":"The name of this auto moderation rule","type":[[["string"]]]},{"name":"reason","description":"The reason for changing the name of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":176,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setEventType","description":"Sets the event type for this auto moderation rule.","params":[{"name":"eventType","description":"The event type of this auto moderation rule","type":[[["AutoModerationRuleEventType"]]]},{"name":"reason","description":"The reason for changing the event type of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":186,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setKeywordFilter","description":"Sets the keyword filter for this auto moderation rule.","params":[{"name":"keywordFilter","description":"The keyword filter of this auto moderation rule","type":[[["Array","<"],["string",">"]]]},{"name":"reason","description":"The reason for changing the keyword filter of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":196,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setRegexPatterns","description":"Sets the regular expression patterns for this auto moderation rule.","params":[{"name":"regexPatterns","description":"The regular expression patterns of this auto moderation rule\nOnly Rust-flavored regular expressions are supported.","type":[[["Array","<"],["string",">"]]]},{"name":"reason","description":"The reason for changing the regular expression patterns of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":207,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setPresets","description":"Sets the presets for this auto moderation rule.","params":[{"name":"presets","description":"The presets of this auto moderation rule","type":[[["Array","<"],["AutoModerationRuleKeywordPresetType",">"]]]},{"name":"reason","description":"The reason for changing the presets of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":217,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setAllowList","description":"Sets the allow list for this auto moderation rule.","params":[{"name":"allowList","description":"The allow list of this auto moderation rule","type":[[["Array","<"],["string",">"]]]},{"name":"reason","description":"The reason for changing the allow list of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":227,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setMentionTotalLimit","description":"Sets the mention total limit for this auto moderation rule.","params":[{"name":"mentionTotalLimit","description":"The mention total limit of this auto moderation rule","type":[[["number"]]]},{"name":"reason","description":"The reason for changing the mention total limit of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":237,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setMentionRaidProtectionEnabled","description":"Sets whether to enable mention raid protection for this auto moderation rule.","params":[{"name":"mentionRaidProtectionEnabled","description":"Whether to enable mention raid protection for this auto moderation rule","type":[[["boolean"]]]},{"name":"reason","description":"The reason for changing the mention raid protection of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":248,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setActions","description":"Sets the actions for this auto moderation rule.","params":[{"name":"actions","description":"The actions of this auto moderation rule","type":[[["Array","<"],["AutoModerationActionOptions",">"]]]},{"name":"reason","description":"The reason for changing the actions of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":258,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setEnabled","description":"Sets whether this auto moderation rule should be enabled.","params":[{"name":"enabled","description":"Whether to enable this auto moderation rule","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"The reason for enabling or disabling this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":268,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setExemptRoles","description":"Sets the exempt roles for this auto moderation rule.","params":[{"name":"exemptRoles","description":"The exempt roles of this auto moderation rule","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"reason","description":"The reason for changing the exempt roles of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":278,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setExemptChannels","description":"Sets the exempt channels for this auto moderation rule.","params":[{"name":"exemptChannels","description":"The exempt channels of this auto moderation rule","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["GuildChannel","|"],["ThreadChannel",")>"]],[["Array","<"],["GuildChannelResolvable",">"]]]},{"name":"reason","description":"The reason for changing the exempt channels of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":289,"file":"AutoModerationRule.js","path":"src/structures"}}],"meta":{"line":16,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"Base","description":"Represents a data model that is identifiable by a Snowflake (i.e. Discord API data models).","abstract":true,"props":[{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"meta":{"line":9,"file":"Base.js","path":"src/structures"}},{"name":"BaseCommandInteraction","description":"Represents a command interaction.","extends":[[["Interaction"]]],"implements":[[["InteractionResponses"]]],"abstract":true,"props":[{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":20,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandId","description":"The invoked application command's id","type":[[["Snowflake"]]],"meta":{"line":30,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandName","description":"The invoked application command's name","type":[[["string"]]],"meta":{"line":36,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":42,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":48,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":54,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":60,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"command","description":"The invoked application command, if it was fetched before","nullable":true,"type":[[["ApplicationCommand"]]],"meta":{"line":67,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"transformResolved","description":"Transforms the resolved received from the API.","access":"private","params":[{"name":"resolved","description":"The received resolved objects","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionResolvedData"]]],"meta":{"line":89,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"transformOption","description":"Transforms an option received from the API.","access":"private","params":[{"name":"option","description":"The received option","type":[[["APIApplicationCommandOption"]]]},{"name":"resolved","description":"The resolved interaction data","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionOption"]]],"meta":{"line":162,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferReply","description":"Defers the reply to this interaction.","implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":16,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"BaseGuild","description":"The base class for {@link Guild}, {@link OAuth2Guild} and {@link InviteGuild}.","extends":[[["Base"]]],"abstract":true,"props":[{"name":"id","description":"The guild's id","type":[[["Snowflake"]]],"meta":{"line":19,"file":"BaseGuild.js","path":"src/structures"}},{"name":"name","description":"The name of this guild","type":[[["string"]]],"meta":{"line":25,"file":"BaseGuild.js","path":"src/structures"}},{"name":"icon","description":"The icon hash of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":31,"file":"BaseGuild.js","path":"src/structures"}},{"name":"features","description":"An array of features available to this guild","type":[[["Array","<"],["Features",">"]]],"meta":{"line":37,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this guild was created at","readonly":true,"type":[[["number"]]],"meta":{"line":45,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdAt","description":"The time this guild was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":54,"file":"BaseGuild.js","path":"src/structures"}},{"name":"nameAcronym","description":"The acronym that shows up in place of a guild icon","readonly":true,"type":[[["string"]]],"meta":{"line":63,"file":"BaseGuild.js","path":"src/structures"}},{"name":"partnered","description":"Whether this guild is partnered","readonly":true,"type":[[["boolean"]]],"meta":{"line":75,"file":"BaseGuild.js","path":"src/structures"}},{"name":"verified","description":"Whether this guild is verified","readonly":true,"type":[[["boolean"]]],"meta":{"line":84,"file":"BaseGuild.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"iconURL","description":"The URL to this guild's icon.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"BaseGuild.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this guild.","async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":102,"file":"BaseGuild.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the guild's name instead of the Guild object.","returns":[[["string"]]],"meta":{"line":111,"file":"BaseGuild.js","path":"src/structures"}}],"meta":{"line":11,"file":"BaseGuild.js","path":"src/structures"}},{"name":"BaseGuildEmoji","description":"Parent class for {@link GuildEmoji} and {@link GuildPreviewEmoji}.","extends":[[["Emoji"]]],"abstract":true,"props":[{"name":"guild","description":"The guild this emoji is a part of","type":[[["Guild"]],[["GuildPreview"]]],"meta":{"line":18,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"requiresColons","description":"Whether or not this emoji requires colons surrounding it","nullable":true,"type":[[["boolean"]]],"meta":{"line":35,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"managed","description":"Whether this emoji is managed by an external service","nullable":true,"type":[[["boolean"]]],"meta":{"line":43,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"available","description":"Whether this emoji is available","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"animated","description":"Whether or not the emoji is animated","nullable":true,"type":[[["boolean"]]],"meta":{"line":34,"file":"Emoji.js","path":"src/structures"}},{"name":"name","description":"The emoji's name","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Emoji.js","path":"src/structures"}},{"name":"id","description":"The emoji's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Emoji.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":54,"file":"Emoji.js","path":"src/structures"}},{"name":"identifier","description":"The identifier of this emoji, used for message reactions","readonly":true,"type":[[["string"]]],"meta":{"line":84,"file":"Emoji.js","path":"src/structures"}},{"name":"url","description":"The URL to the emoji file if it's a custom emoji","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":94,"file":"Emoji.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":103,"file":"Emoji.js","path":"src/structures"}},{"name":"createdAt","description":"The time the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":112,"file":"Emoji.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the text required to form a graphical emoji on Discord\ninstead of the Emoji object.","inherits":"Emoji#toString","inherited":true,"examples":["// Send a custom emoji from a guild:\nconst emoji = guild.emojis.cache.first();\nmsg.channel.send(`Hello! ${emoji}`);","// Send the emoji used in a reaction to the channel the reaction is part of\nreaction.message.channel.send(`The emoji used was: ${reaction.emoji}`);"],"returns":[[["string"]]],"meta":{"line":128,"file":"Emoji.js","path":"src/structures"}}],"meta":{"line":10,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"BaseGuildTextChannel","description":"Represents a text-based guild channel on Discord.","extends":[[["GuildChannel"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":22,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":28,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"threads","description":"A manager of the threads belonging to this channel","type":[[["GuildTextThreadManager"]]],"meta":{"line":34,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":40,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"topic","description":"The topic of the text channel","nullable":true,"type":[[["string"]]],"meta":{"line":53,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in the channel, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":65,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastPinTimestamp","description":"The timestamp when the last pinned message was pinned, if there was one","nullable":true,"type":[[["number"]]],"meta":{"line":73,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"defaultAutoArchiveDuration","description":"The default auto archive duration for newly created threads in this channel","nullable":true,"type":[[["number"]]],"meta":{"line":81,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"defaultThreadRateLimitPerUser","description":"The initial rate limit per user (slowmode) to set on newly created threads in a channel.","nullable":true,"type":[[["number"]]],"meta":{"line":89,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinAt","description":"The date when the last pinned message was pinned, if there was one","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":68,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":274,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"setDefaultAutoArchiveDuration","description":"Sets the default auto archive duration for all newly created threads in this channel.","params":[{"name":"defaultAutoArchiveDuration","description":"The new default auto archive duration","type":[[["ThreadAutoArchiveDuration"]]]},{"name":"reason","description":"Reason for changing the channel's default auto archive duration","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["TextChannel",">"]]],"meta":{"line":105,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"setType","description":"Sets the type of this channel (only conversion between text and news is supported)","params":[{"name":"type","description":"The new channel type","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the channel's type","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":115,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"setTopic","description":"Sets a new topic for the guild channel.","examples":["// Set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.error);"],"params":[{"name":"topic","description":"The new topic for the guild channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's topic","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":130,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"createInvite","description":"Creates an invite to this guild channel.","examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":168,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":178,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","implements":["TextBasedChannel#createMessageComponentCollector"],"examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","implements":["TextBasedChannel#awaitMessageComponent"],"examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"bulkDelete","description":"Bulk deletes given messages that are newer than two weeks.","implements":["TextBasedChannel#bulkDelete"],"examples":["// Bulk delete messages\nchannel.bulkDelete(5)\n .then(messages => console.log(`Bulk deleted ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"messages","description":"Messages or number of messages to delete","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]],[["Array","<"],["MessageResolvable",">"]],[["number"]]]},{"name":"filterOld","description":"Filter messages to remove those which are older than two weeks automatically","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Collection","<"],["Snowflake",", ("],["Message","|"],["undefined",")>>"]]],"description":"Returns the deleted messages"},"meta":{"line":319,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":368,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":393,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":403,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":413,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"searchInteraction","description":"Search Slash Command (return raw data)","implements":["TextBasedChannel#searchInteraction"],"params":[{"name":"applicationId","description":"Application ID","type":[[["Snowflake"]]]},{"name":"type","description":"Command Type","default":"CHAT_INPUT","nullable":true,"type":[[["ApplicationCommandType"]]]}],"returns":[[["Object"]]],"meta":{"line":423,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendSlash","description":"Send Slash to this channel","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/SlashCommand.md}"],"implements":["TextBasedChannel#sendSlash"],"examples":["// Send a basic slash\nchannel.sendSlash('botid', 'ping')\n .then(console.log)\n .catch(console.error);","// Send a remote file\nchannel.sendSlash('botid', 'emoji upload', 'https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048', 'test')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"bot","description":"Bot user (BotID, not applicationID)","type":[[["UserResolvable"]]]},{"name":"commandString","description":"Command name (and sub / group formats)","type":[[["string"]]]},{"name":"args","description":"Command arguments","variable":true,"type":[[["any"]],[["Array","<"],["any",">"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":463,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":14,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"BaseGuildVoiceChannel","description":"Represents a voice-based guild channel on Discord.","extends":[[["GuildChannel"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":23,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":29,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":35,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"bitrate","description":"The bitrate of this voice-based channel","type":[[["number"]]],"meta":{"line":48,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"rtcRegion","description":"The RTC region for this voice-based channel. This region is automatically selected if `null`.","nullable":true,"type":[[["string"]]],"meta":{"line":56,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"userLimit","description":"The maximum amount of users allowed in this channel.","type":[[["number"]]],"meta":{"line":64,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"videoQualityMode","description":"The camera video quality mode of the channel.","nullable":true,"type":[[["VideoQualityMode"]]],"meta":{"line":72,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in the channel, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":82,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for this channel in seconds","type":[[["number"]]],"meta":{"line":94,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"members","description":"The members in this voice-based channel","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":107,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"full","description":"Checks if the voice-based channel is full","readonly":true,"type":[[["boolean"]]],"meta":{"line":122,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"joinable","description":"Whether the channel is joinable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":131,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"createInvite","description":"Creates an invite to this guild channel.","examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":155,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":165,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setBitrate","description":"Sets the bitrate of the channel.","examples":["// Set the bitrate of a voice channel\nvoiceChannel.setBitrate(48_000)\n .then(vc => console.log(`Set bitrate to ${vc.bitrate}bps for ${vc.name}`))\n .catch(console.error);"],"params":[{"name":"bitrate","description":"The new bitrate","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's bitrate","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":180,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setRTCRegion","description":"Sets the RTC region of the channel.","examples":["// Set the RTC region to sydney\nchannel.setRTCRegion('sydney');","// Remove a fixed region for this channel - let Discord decide automatically\nchannel.setRTCRegion(null, 'We want to let Discord decide.');"],"params":[{"name":"rtcRegion","description":"The new region of the channel. Set to `null` to remove a specific region for the channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"The reason for modifying this region.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["BaseGuildVoiceChannel",">"]]],"meta":{"line":196,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setUserLimit","description":"Sets the user limit of the channel.","examples":["// Set the user limit of a voice channel\nvoiceChannel.setUserLimit(42)\n .then(vc => console.log(`Set user limit to ${vc.userLimit} for ${vc.name}`))\n .catch(console.error);"],"params":[{"name":"userLimit","description":"The new user limit","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the user limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":211,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setVideoQualityMode","description":"Sets the camera video quality mode of the channel.","params":[{"name":"videoQualityMode","description":"The new camera video quality mode.","type":[[["VideoQualityMode"]],[["number"]]]},{"name":"reason","description":"Reason for changing the camera video quality mode.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":221,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","implements":["TextBasedChannel#createMessageComponentCollector"],"examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","implements":["TextBasedChannel#awaitMessageComponent"],"examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"bulkDelete","description":"Bulk deletes given messages that are newer than two weeks.","implements":["TextBasedChannel#bulkDelete"],"examples":["// Bulk delete messages\nchannel.bulkDelete(5)\n .then(messages => console.log(`Bulk deleted ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"messages","description":"Messages or number of messages to delete","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]],[["Array","<"],["MessageResolvable",">"]],[["number"]]]},{"name":"filterOld","description":"Filter messages to remove those which are older than two weeks automatically","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Collection","<"],["Snowflake",", ("],["Message","|"],["undefined",")>>"]]],"description":"Returns the deleted messages"},"meta":{"line":319,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":368,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":393,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":403,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":413,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":16,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"BaseMessageComponent","description":"Represents an interactive component of a Message or Modal. It should not be necessary to construct this directly.\nSee {@link MessageComponent}","construct":{"name":"BaseMessageComponent","params":[{"name":"data","description":"The options for this component","optional":true,"default":"{}","type":[[["BaseMessageComponent"]],[["BaseMessageComponentOptions"]]]}]},"props":[{"name":"type","description":"The type of this component","nullable":true,"type":[[["MessageComponentType"]]],"meta":{"line":52,"file":"BaseMessageComponent.js","path":"src/structures"}}],"methods":[{"name":"create","description":"Constructs a component based on the type of the incoming data","scope":"static","access":"private","params":[{"name":"data","description":"Data for a MessageComponent","type":[[["MessageComponentOptions"]]]},{"name":"client","description":"Client constructing this component","optional":true,"type":[[["Client"]],[["WebhookClient"]]]}],"returns":{"types":[[["MessageComponent"]],[["ModalComponent"]]],"nullable":true},"meta":{"line":62,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"resolveType","description":"Resolves the type of a component","scope":"static","access":"private","params":[{"name":"type","description":"The type to resolve","type":[[["MessageComponentTypeResolvable"]]]}],"returns":[[["MessageComponentType"]]],"meta":{"line":109,"file":"BaseMessageComponent.js","path":"src/structures"}}],"meta":{"line":10,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"ButtonInteraction","description":"Represents a button interaction.","extends":[[["MessageComponentInteraction"]]],"props":[{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":17,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"message","description":"The message to which the component was attached","type":[[["Message"]],[["APIMessage"]]],"meta":{"line":27,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"customId","description":"The custom id of the component which was interacted with","type":[[["string"]]],"meta":{"line":33,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"componentType","description":"The type of component which was interacted with","type":[[["string"]]],"meta":{"line":39,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":45,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":57,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":63,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"component","description":"The component which was interacted with","readonly":true,"type":[[["MessageActionRowComponent"]],[["APIMessageActionRowComponent"]]],"meta":{"line":78,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"MessageComponentInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"MessageComponentInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"MessageComponentInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"MessageComponentInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"MessageComponentInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"MessageComponentInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","inherits":"MessageComponentInteraction#deferUpdate","inherited":true,"implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","inherits":"MessageComponentInteraction#update","inherited":true,"implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"MessageComponentInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"MessageComponentInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":9,"file":"ButtonInteraction.js","path":"src/structures"}},{"name":"Call","description":"Represents a call","extends":[[["Base"]]],"props":[{"name":"channelId","description":"The channel ID of the call","type":[[["Snowflake"]]],"meta":{"line":17,"file":"Call.js","path":"src/structures"}},{"name":"ringing","description":"The list of user ID who is ringing","type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":23,"file":"Call.js","path":"src/structures"}},{"name":"region","description":"The region of the call","type":[[["string"]]],"meta":{"line":33,"file":"Call.js","path":"src/structures"}},{"name":"channel","description":"The channel of the call","type":[[["DMChannel"]],[["PartialGroupDMChannel"]]],"meta":{"line":45,"file":"Call.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"setVoiceRegion","description":"Sets the voice region of the call","params":[{"name":"region","description":"Region of the call","type":[[["string"]]]}],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":53,"file":"Call.js","path":"src/structures"}}],"meta":{"line":10,"file":"Call.js","path":"src/structures"}},{"name":"CategoryChannel","description":"Represents a guild category channel on Discord.","extends":[[["GuildChannel"]]],"props":[{"name":"parentId","description":"The id of the parent of this channel.","type":[[["null"]]],"meta":{"line":10,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"parent","description":"The parent of this channel.","readonly":true,"type":[[["null"]]],"meta":{"line":16,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"children","description":"Channels that are a part of this category","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildChannel",">"]]],"meta":{"line":28,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":274,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"setParent","description":"Sets the category parent of this channel.\nIt is not possible to set the parent of a CategoryChannel.","params":[{"name":"channel","description":"The channel to set as parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":32,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"createChannel","description":"Creates a new channel within this category.\nYou cannot create a channel of type `GUILD_CATEGORY` inside a CategoryChannel.","params":[{"name":"name","description":"The name of the new channel","type":[[["string"]]]},{"name":"options","description":"Options for creating the new channel","type":[[["CategoryCreateChannelOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":77,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":9,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"Channel","description":"Represents any channel on Discord.","extends":[[["Base"]]],"abstract":true,"props":[{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","examples":["// Delete the channel\nchannel.delete()\n .then(console.log)\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":143,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":32,"file":"Channel.js","path":"src/structures"}},{"name":"ClientApplication","description":"Represents a client application.","extends":[[["Application"]]],"props":[{"name":"commands","description":"The application command manager for this application","type":[[["ApplicationCommandManager"]]],"meta":{"line":30,"file":"ClientApplication.js","path":"src/structures"}},{"name":"tags","description":"The tags this application has (max of 5)","type":[[["Array","<"],["string",">"]]],"meta":{"line":40,"file":"ClientApplication.js","path":"src/structures"}},{"name":"installParams","description":"Settings for this application's default in-app authorization","nullable":true,"type":[[["ClientApplicationInstallParams"]]],"meta":{"line":47,"file":"ClientApplication.js","path":"src/structures"}},{"name":"customInstallURL","description":"This application's custom installation URL","nullable":true,"type":[[["string"]]],"meta":{"line":60,"file":"ClientApplication.js","path":"src/structures"}},{"name":"flags","description":"The flags this application has","type":[[["ApplicationFlags"]]],"meta":{"line":70,"file":"ClientApplication.js","path":"src/structures"}},{"name":"approximateGuildCount","description":"An approximate amount of guilds this application is in.","nullable":true,"type":[[["number"]]],"meta":{"line":78,"file":"ClientApplication.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild associated with this application.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":88,"file":"ClientApplication.js","path":"src/structures"}},{"name":"cover","description":"The hash of the application's cover image","nullable":true,"type":[[["string"]]],"meta":{"line":98,"file":"ClientApplication.js","path":"src/structures"}},{"name":"rpcOrigins","description":"The application's RPC origins, if enabled","type":[[["Array","<"],["string",">"]]],"meta":{"line":108,"file":"ClientApplication.js","path":"src/structures"}},{"name":"botRequireCodeGrant","description":"If this application's bot requires a code grant when using the OAuth2 flow","nullable":true,"type":[[["boolean"]]],"meta":{"line":118,"file":"ClientApplication.js","path":"src/structures"}},{"name":"botPublic","description":"If this application's bot is public","nullable":true,"type":[[["boolean"]]],"meta":{"line":128,"file":"ClientApplication.js","path":"src/structures"}},{"name":"popularCommands","description":"List of popular command","nullable":true,"type":[[["Collection","<"],["Snowflake",", "],["ApplicationCommand",">"]]],"meta":{"line":138,"file":"ClientApplication.js","path":"src/structures"}},{"name":"owner","description":"The owner of this OAuth application","nullable":true,"type":[[["User"]],[["Team"]]],"meta":{"line":148,"file":"ClientApplication.js","path":"src/structures"}},{"name":"guild","description":"The guild associated with this application.","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":160,"file":"ClientApplication.js","path":"src/structures"}},{"name":"partial","description":"Whether this application is partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":169,"file":"ClientApplication.js","path":"src/structures"}},{"name":"id","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":29,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"name","description":"The name of the application","nullable":true,"type":[[["string"]]],"meta":{"line":36,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"description","description":"The application's description","nullable":true,"type":[[["string"]]],"meta":{"line":46,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"icon","description":"The application's icon hash","nullable":true,"type":[[["string"]]],"meta":{"line":56,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"roleConnectionsVerificationURL","description":"This application's role connection verification entry point URL","nullable":true,"type":[[["string"]]],"meta":{"line":66,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"createdTimestamp","description":"The timestamp the application was created at","readonly":true,"type":[[["number"]]],"meta":{"line":77,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"createdAt","description":"The time the application was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":86,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"fetch","description":"Obtains this application from Discord.","async":true,"returns":[[["Promise","<"],["ClientApplication",">"]]],"meta":{"line":177,"file":"ClientApplication.js","path":"src/structures"}},{"name":"fetchRoleConnectionMetadataRecords","description":"Gets this application's role connection metadata records","async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationRoleConnectionMetadata",">>"]]],"meta":{"line":194,"file":"ClientApplication.js","path":"src/structures"}},{"name":"editRoleConnectionMetadataRecords","description":"Updates this application's role connection metadata records","params":[{"name":"records","description":"The new role connection metadata records","type":[[["Array","<"],["ApplicationRoleConnectionMetadataEditOptions",">"]]]}],"async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationRoleConnectionMetadata",">>"]]],"meta":{"line":215,"file":"ClientApplication.js","path":"src/structures"}},{"name":"invite","description":"Invites this application to a guild / server","inherits":"Application#invite","inherited":true,"params":[{"name":"guild_id","description":"The id of the guild that you want to invite the bot to","type":[[["Snowflake"]]]},{"name":"permissions","description":"The permissions for the bot in number form (the default is 8 / Administrator)","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"captcha","description":"The captcha key to add","optional":true,"default":null,"type":[[["string"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"nothing :)"},"meta":{"line":97,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"iconURL","description":"A link to the application's icon.","inherits":"Application#iconURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":127,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"coverURL","description":"A link to this application's cover image.","inherits":"Application#coverURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":137,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"fetchAssets","description":"Gets the application's rich presence assets.","inherits":"Application#fetchAssets","inherited":true,"deprecated":"This will be removed in the next major as it is unsupported functionality.","async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationAsset",">>"]]],"meta":{"line":155,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the application's name instead of the\nApplication object.","inherits":"Application#toString","inherited":true,"examples":["// Logs: Application name: My App\nconsole.log(`Application name: ${application}`);"],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":181,"file":"Application.js","path":"src/structures/interfaces"}}],"meta":{"line":22,"file":"ClientApplication.js","path":"src/structures"}},{"name":"ClientPresence","description":"Represents the client's presence.","extends":[[["Presence"]]],"props":[{"name":"userId","description":"The presence's user id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Presence.js","path":"src/structures"}},{"name":"guild","description":"The guild this presence is in","nullable":true,"type":[[["Guild"]]],"meta":{"line":57,"file":"Presence.js","path":"src/structures"}},{"name":"user","description":"The user of this presence","readonly":true,"nullable":true,"type":[[["User"]]],"meta":{"line":67,"file":"Presence.js","path":"src/structures"}},{"name":"member","description":"The member of this presence","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":76,"file":"Presence.js","path":"src/structures"}},{"name":"status","description":"The status of this presence","type":[[["PresenceStatus"]]],"meta":{"line":86,"file":"Presence.js","path":"src/structures"}},{"name":"activities","description":"The activities of this presence","type":[[["Array","<"],["Activity",">"]]],"meta":{"line":96,"file":"Presence.js","path":"src/structures"}},{"name":"clientStatus","description":"The devices this presence is on","nullable":true,"type":[[["Object"]]],"props":[{"name":"web","description":"The current presence in the web application","nullable":true,"type":[[["ClientPresenceStatus"]]]},{"name":"mobile","description":"The current presence in the mobile application","nullable":true,"type":[[["ClientPresenceStatus"]]]},{"name":"desktop","description":"The current presence in the desktop application","nullable":true,"type":[[["ClientPresenceStatus"]]]}],"meta":{"line":121,"file":"Presence.js","path":"src/structures"}},{"name":"lastModified","description":"The timestamp this presence was last updated","type":[[["number"]]],"meta":{"line":131,"file":"Presence.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"set","description":"Sets the client's presence","params":[{"name":"presence","description":"The data to set the presence to","type":[[["PresenceData"]]]}],"returns":[[["ClientPresence"]]],"meta":{"line":23,"file":"ClientPresence.js","path":"src/structures"}},{"name":"_parse","description":"Parses presence data into a packet ready to be sent to Discord","access":"private","params":[{"name":"presence","description":"The data to parse","type":[[["PresenceData"]]]}],"returns":[[["APIPresence"]]],"meta":{"line":47,"file":"ClientPresence.js","path":"src/structures"}},{"name":"equals","description":"Whether this presence is equal to another.","inherits":"Presence#equals","inherited":true,"params":[{"name":"presence","description":"The presence to compare with","type":[[["Presence"]]]}],"returns":[[["boolean"]]],"meta":{"line":148,"file":"Presence.js","path":"src/structures"}}],"meta":{"line":13,"file":"ClientPresence.js","path":"src/structures"}},{"name":"ClientUser","description":"Represents the logged in client's Discord user.","extends":[[["User"]]],"props":[{"name":"verified","description":"Whether or not this account has been verified","type":[[["boolean"]]],"meta":{"line":27,"file":"ClientUser.js","path":"src/structures"}},{"name":"mfaEnabled","description":"If the bot's {@link ClientApplication#owner Owner} has MFA enabled on their account","nullable":true,"type":[[["boolean"]]],"meta":{"line":35,"file":"ClientUser.js","path":"src/structures"}},{"name":"nitroType","description":"Nitro type of the client user.","type":[[["NitroType"]]],"meta":{"line":49,"file":"ClientUser.js","path":"src/structures"}},{"name":"purchasedFlags","description":"Purchased state of the client user.","nullable":true,"type":[[["PurchasedFlags"]]],"meta":{"line":57,"file":"ClientUser.js","path":"src/structures"}},{"name":"premiumUsageFlags","description":"Premium usage state of the client user.","nullable":true,"type":[[["PremiumUsageFlags"]]],"meta":{"line":65,"file":"ClientUser.js","path":"src/structures"}},{"name":"phoneNumber","description":"Phone number of the client user.","nullable":true,"type":[[["string"]]],"meta":{"line":73,"file":"ClientUser.js","path":"src/structures"}},{"name":"nsfwAllowed","description":"Whether or not the client user is allowed to send NSFW messages [iOS device].","nullable":true,"type":[[["boolean"]]],"meta":{"line":81,"file":"ClientUser.js","path":"src/structures"}},{"name":"emailAddress","description":"Email address of the client user.","nullable":true,"type":[[["string"]]],"meta":{"line":89,"file":"ClientUser.js","path":"src/structures"}},{"name":"friendNicknames","description":"The friend nicknames cache of the client user.","access":"private","type":[[["Collection","<"],["Snowflake",", "],["string",">"]]],"meta":{"line":106,"file":"ClientUser.js","path":"src/structures"}},{"name":"notes","description":"The notes cache of the client user.","access":"private","type":[[["Collection","<"],["Snowflake",", "],["string",">"]]],"meta":{"line":130,"file":"ClientUser.js","path":"src/structures"}},{"name":"presence","description":"Represents the client user's presence","readonly":true,"type":[[["ClientPresence"]]],"meta":{"line":138,"file":"ClientUser.js","path":"src/structures"}},{"name":"id","description":"The user's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"User.js","path":"src/structures"}},{"name":"connectedAccounts","description":"Accounts connected to this user\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["Array","<"],["ConnectionAccount",">"]]],"meta":{"line":49,"file":"User.js","path":"src/structures"}},{"name":"premiumSince","description":"Time that User has nitro (Unix Timestamp)\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["number"]]],"meta":{"line":55,"file":"User.js","path":"src/structures"}},{"name":"premiumGuildSince","description":"Time that User has nitro and boost server (Unix Timestamp)","nullable":true,"type":[[["number"]]],"meta":{"line":60,"file":"User.js","path":"src/structures"}},{"name":"bio","description":"About me (User)\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":66,"file":"User.js","path":"src/structures"}},{"name":"pronouns","description":"Pronouns (User)\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":72,"file":"User.js","path":"src/structures"}},{"name":"application","description":"[Bot] Application","nullable":true,"type":[[["ClientApplication"]]],"meta":{"line":78,"file":"User.js","path":"src/structures"}},{"name":"username","description":"The username of the user","nullable":true,"type":[[["string"]]],"meta":{"line":89,"file":"User.js","path":"src/structures"}},{"name":"globalName","description":"The global name of this user","nullable":true,"type":[[["string"]]],"meta":{"line":99,"file":"User.js","path":"src/structures"}},{"name":"bot","description":"Whether or not the user is a bot","nullable":true,"type":[[["boolean"]]],"meta":{"line":109,"file":"User.js","path":"src/structures"}},{"name":"discriminator","description":"The discriminator of this user\n`'0'`, or a 4-digit stringified number if they're using the legacy username system","nullable":true,"type":[[["string"]]],"meta":{"line":124,"file":"User.js","path":"src/structures"}},{"name":"avatar","description":"The user avatar's hash","nullable":true,"type":[[["string"]]],"meta":{"line":134,"file":"User.js","path":"src/structures"}},{"name":"banner","description":"The user banner's hash\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":145,"file":"User.js","path":"src/structures"}},{"name":"accentColor","description":"The base 10 accent color of the user's banner\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["number"]]],"meta":{"line":156,"file":"User.js","path":"src/structures"}},{"name":"system","description":"Whether the user is an Official Discord System user (part of the urgent message system)","nullable":true,"type":[[["boolean"]]],"meta":{"line":166,"file":"User.js","path":"src/structures"}},{"name":"flags","description":"The flags for this user","nullable":true,"type":[[["UserFlags"]]],"meta":{"line":176,"file":"User.js","path":"src/structures"}},{"name":"botInGuildsCount","description":"Check how many guilds the bot is in (Probably only approximate) (application.fetch() first)","nullable":true,"type":[[["number"]]],"meta":{"line":184,"file":"User.js","path":"src/structures"}},{"name":"avatarDecoration","description":"The user avatar decoration's hash","nullable":true,"type":[[["string"]]],"meta":{"line":192,"file":"User.js","path":"src/structures"}},{"name":"mutualGuilds","description":"This user is on the same servers as Client User\nThe user must be force fetched for this property to be present or be updated","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Guild",">"]]],"meta":{"line":204,"file":"User.js","path":"src/structures"}},{"name":"mutualFriends","description":"Get all mutual friends (Client -> User)","readonly":true,"type":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["User",">>"]]],"meta":{"line":213,"file":"User.js","path":"src/structures"}},{"name":"relationships","description":"Check relationship status (Client -> User)","readonly":true,"type":[[["RelationshipTypes"]]],"meta":{"line":231,"file":"User.js","path":"src/structures"}},{"name":"note","description":"Check note","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":241,"file":"User.js","path":"src/structures"}},{"name":"nickname","description":"Get friend nickname","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":250,"file":"User.js","path":"src/structures"}},{"name":"voice","description":"The voice state of this member","readonly":true,"type":[[["VoiceState"]]],"meta":{"line":259,"file":"User.js","path":"src/structures"}},{"name":"themeColors","description":"The user's theme colors (Profile theme) [Primary, Accent]\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["Array","<"],["number",">"]]],"meta":{"line":302,"file":"User.js","path":"src/structures"}},{"name":"badges","description":"User badges (Boost, Slash, AutoMod, etc.)","nullable":true,"type":[[["Array","<"],["UserBadge",">"]]],"meta":{"line":336,"file":"User.js","path":"src/structures"}},{"name":"partial","description":"Whether this User is a partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":430,"file":"User.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the user was created at","readonly":true,"type":[[["number"]]],"meta":{"line":439,"file":"User.js","path":"src/structures"}},{"name":"createdAt","description":"The time the user was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":448,"file":"User.js","path":"src/structures"}},{"name":"defaultAvatarURL","description":"A link to the user's default avatar","readonly":true,"type":[[["string"]]],"meta":{"line":477,"file":"User.js","path":"src/structures"}},{"name":"hexAccentColor","description":"The hexadecimal version of the user accent color, with a leading hash\nThe user must be force fetched for this property to be present","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":498,"file":"User.js","path":"src/structures"}},{"name":"hexThemeColor","description":"The hexadecimal version of the user theme color, with a leading hash [Primary, Accent]\nThe user must be force fetched for this property to be present or be updated","readonly":true,"nullable":true,"type":[[["Array","<"],["string",">"]]],"meta":{"line":541,"file":"User.js","path":"src/structures"}},{"name":"tag","description":"The tag of this user\nThis user's username, or their legacy tag (e.g. `hydrabolt#0001`)\nif they're using the legacy username system","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":552,"file":"User.js","path":"src/structures"}},{"name":"displayName","description":"The global name of this user, or their username if they don't have one","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":565,"file":"User.js","path":"src/structures"}},{"name":"dmChannel","description":"The DM between the client's user and this user","readonly":true,"nullable":true,"type":[[["DMChannel"]]],"meta":{"line":574,"file":"User.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"_patchNote","description":"Patch note","access":"private","params":[{"name":"data","description":"Note data","type":[[["Object"]]]}],"meta":{"line":124,"file":"ClientUser.js","path":"src/structures"}},{"name":"edit","description":"Edits the logged in client.","params":[{"name":"options","description":"The new data","type":[[["ClientUserEditData"]]]}],"async":true,"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":156,"file":"ClientUser.js","path":"src/structures"}},{"name":"setUsername","description":"Sets the username of the logged in client.\nChanging usernames in Discord is heavily rate limited, with only 2 requests\nevery hour. Use this sparingly!","examples":["// Set username\nclient.user.setUsername('discordjs')\n .then(user => console.log(`My new username is ${user.username}`))\n .catch(console.error);"],"params":[{"name":"username","description":"The new username","type":[[["string"]]]},{"name":"password","description":"The password of the account","type":[[["string"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":176,"file":"ClientUser.js","path":"src/structures"}},{"name":"setAvatar","description":"Sets the avatar of the logged in client.","examples":["// Set avatar\nclient.user.setAvatar('./avatar.png')\n .then(user => console.log(`New avatar set!`))\n .catch(console.error);"],"params":[{"name":"avatar","description":"The new avatar","nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]}],"async":true,"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":196,"file":"ClientUser.js","path":"src/structures"}},{"name":"setBanner","description":"Sets the banner of the logged in client.","examples":["// Set banner\nclient.user.setBanner('./banner.png')\n .then(user => console.log(`New banner set!`))\n .catch(console.error);"],"params":[{"name":"banner","description":"The new banner","nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]}],"async":true,"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":210,"file":"ClientUser.js","path":"src/structures"}},{"name":"setHypeSquad","description":"Set HyperSquad House","examples":["// Set HyperSquad HOUSE_BRAVERY\nclient.user.setHypeSquad(1); || client.user.setHypeSquad('HOUSE_BRAVERY');\n// Leave\nclient.user.setHypeSquad(0);"],"params":[{"name":"type","description":"* `LEAVE`: 0\n* `HOUSE_BRAVERY`: 1\n* `HOUSE_BRILLIANCE`: 2\n* `HOUSE_BALANCE`: 3","type":[[["HypeSquadType"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":232,"file":"ClientUser.js","path":"src/structures"}},{"name":"setAccentColor","description":"Set Accent color","params":[{"name":"color","description":"Color to set","default":null,"type":[[["ColorResolvable"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":251,"file":"ClientUser.js","path":"src/structures"}},{"name":"setDiscriminator","description":"Set discriminator","params":[{"name":"discriminator","description":"It is #1234","type":[[["Userdiscriminator"]]]},{"name":"password","description":"The password of the account","type":[[["string"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":261,"file":"ClientUser.js","path":"src/structures"}},{"name":"setAboutMe","description":"Set About me","params":[{"name":"bio","description":"Bio to set","default":null,"type":[[["string"]],[["null"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":278,"file":"ClientUser.js","path":"src/structures"}},{"name":"setEmail","description":"Change the email","params":[{"name":"email","description":"Email to change","type":[[["Email","<"],["string",">"]]]},{"name":"password","description":"Password of the account","type":[[["string"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":290,"file":"ClientUser.js","path":"src/structures"}},{"name":"setPassword","description":"Set new password","params":[{"name":"oldPassword","description":"Old password","type":[[["string"]]]},{"name":"newPassword","description":"New password to set","type":[[["string"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":308,"file":"ClientUser.js","path":"src/structures"}},{"name":"disableAccount","description":"Disable account","params":[{"name":"password","description":"Password of the account","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":324,"file":"ClientUser.js","path":"src/structures"}},{"name":"setDeaf","description":"Set selfdeaf (Global)","params":[{"name":"status","description":"Whether or not the ClientUser is deafened","type":[[["boolean"]]]}],"returns":[[["boolean"]]],"meta":{"line":341,"file":"ClientUser.js","path":"src/structures"}},{"name":"setMute","description":"Set selfmute (Global)","params":[{"name":"status","description":"Whether or not the ClientUser is muted","type":[[["boolean"]]]}],"returns":[[["boolean"]]],"meta":{"line":355,"file":"ClientUser.js","path":"src/structures"}},{"name":"deleteAccount","description":"Delete account. Warning: Cannot be changed once used!","params":[{"name":"password","description":"Password of the account","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":369,"file":"ClientUser.js","path":"src/structures"}},{"name":"setPresence","description":"Sets the full presence of the client user.","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/RichPresence.md}"],"examples":["// Set the client user's presence\nclient.user.setPresence({ activities: [{ name: 'with discord.js' }], status: 'idle' });"],"params":[{"name":"data","description":"Data for the presence","type":[[["PresenceData"]]]}],"returns":[[["ClientPresence"]]],"meta":{"line":408,"file":"ClientUser.js","path":"src/structures"}},{"name":"setStatus","description":"Sets the status of the client user.","examples":["// Set the client user's status\nclient.user.setStatus('idle');"],"params":[{"name":"status","description":"Status to change to","type":[[["PresenceStatusData"]]]},{"name":"shardId","description":"Shard id(s) to have the activity set on","optional":true,"type":[[["number"]],[["Array","<"],["number",">"]]]}],"returns":[[["ClientPresence"]]],"meta":{"line":430,"file":"ClientUser.js","path":"src/structures"}},{"name":"setActivity","description":"Sets the activity the client user is playing.","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/RichPresence.md}"],"examples":["// Set the client user's activity\nclient.user.setActivity('discord.js', { type: 'WATCHING' });"],"params":[{"name":"name","description":"Activity being played, or options for setting the activity","type":[[["string"]],[["ActivityOptions"]]]},{"name":"options","description":"Options for setting the activity","optional":true,"type":[[["ActivityOptions"]]]}],"returns":[[["ClientPresence"]]],"meta":{"line":453,"file":"ClientUser.js","path":"src/structures"}},{"name":"setAFK","description":"Sets/removes the AFK flag for the client user.","params":[{"name":"afk","description":"Whether or not the user is AFK","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"shardId","description":"Shard Id(s) to have the AFK flag set on","optional":true,"type":[[["number"]],[["Array","<"],["number",">"]]]}],"returns":[[["ClientPresence"]]],"meta":{"line":471,"file":"ClientUser.js","path":"src/structures"}},{"name":"createFriendInvite","description":"Create an invite [Friend Invites]\nmaxAge: 604800 | maxUses: 1","see":["{@link https://github.com/13-05/hidden-disc-docs#js-snippet-for-creating-friend-invites}"],"examples":["// Options not working\nclient.user.createFriendInvite();\n .then(console.log)\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":486,"file":"ClientUser.js","path":"src/structures"}},{"name":"getAllFriendInvites","description":"Get all friend invites","async":true,"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":497,"file":"ClientUser.js","path":"src/structures"}},{"name":"revokeAllFriendInvites","description":"Revoke all friend invites","async":true,"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":510,"file":"ClientUser.js","path":"src/structures"}},{"name":"getMentions","description":"Get a collection of messages mentioning clientUser","params":[{"name":"limit","description":"Maximum number of messages to get","optional":true,"default":25,"type":[[["number"]]]},{"name":"mentionRoles","description":"Whether or not to mention roles","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"mentionEveryone","description":"Whether or not to mention `@everyone`","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":526,"file":"ClientUser.js","path":"src/structures"}},{"name":"setThemeColors","description":"Change Theme color","params":[{"name":"primary","description":"The primary color of the user's profile","type":[[["ColorResolvable"]]]},{"name":"accent","description":"The accent color of the user's profile","type":[[["ColorResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":548,"file":"ClientUser.js","path":"src/structures"}},{"name":"setSamsungActivity","description":"Sets Discord Playing status to \"Playing on Samsung Galaxy\". Only selected gamss from discords database works","examples":["// Set the client user's status\nclient.user.setSamsungActivity('com.YostarJP.BlueArchive', 'START');\n// Update\nclient.user.setSamsungActivity('com.miHoYo.bh3oversea', 'UPDATE');\n// Stop\nclient.user.setSamsungActivity('com.miHoYo.GenshinImpact', 'STOP');"],"params":[{"name":"packageName","description":"Android package name","type":[[["string"]]]},{"name":"type","description":"Must be START, UPDATE, or STOP","default":"START","nullable":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":580,"file":"ClientUser.js","path":"src/structures"}},{"name":"stopRinging","description":"Stop ringing","params":[{"name":"channel","description":"DMChannel | GroupDMChannel","type":[[["ChannelResolvable"]]]}],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":600,"file":"ClientUser.js","path":"src/structures"}},{"name":"fetchBurstCredit","description":"Super Reactions","returns":[[["Promise","<"],["number",">"]]],"meta":{"line":612,"file":"ClientUser.js","path":"src/structures"}},{"name":"setGlobalName","description":"Set global display name","params":[{"name":"globalName","description":"The new display name","type":[[["string"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":621,"file":"ClientUser.js","path":"src/structures"}},{"name":"setPronouns","description":"Set pronouns","params":[{"name":"pronouns","description":"Your pronouns","nullable":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":630,"file":"ClientUser.js","path":"src/structures"}},{"name":"getProfile","description":"Get profile from Discord, if client is in a server with the target.","inherits":"User#getProfile","inherited":true,"params":[{"name":"guildId","description":"The guild id to get the profile from","type":[[["Snowflake"]],[["null"]]]}],"async":true,"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":354,"file":"User.js","path":"src/structures"}},{"name":"setFriend","description":"Friends the user [If incoming request]","inherits":"User#setFriend","inherited":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":376,"file":"User.js","path":"src/structures"}},{"name":"setNickname","description":"Changes the nickname of the friend","inherits":"User#setNickname","inherited":true,"params":[{"name":"nickname","description":"The nickname to change","nullable":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":386,"file":"User.js","path":"src/structures"}},{"name":"sendFriendRequest","description":"Send Friend Request to the user","inherits":"User#sendFriendRequest","inherited":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":395,"file":"User.js","path":"src/structures"}},{"name":"setBlock","description":"Blocks the user","inherits":"User#setBlock","inherited":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":403,"file":"User.js","path":"src/structures"}},{"name":"unBlock","description":"Removes the user from your blocks list","inherits":"User#unBlock","inherited":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":412,"file":"User.js","path":"src/structures"}},{"name":"unFriend","description":"Removes the user from your friends list","inherits":"User#unFriend","inherited":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":421,"file":"User.js","path":"src/structures"}},{"name":"avatarURL","description":"A link to the user's avatar.","inherits":"User#avatarURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":457,"file":"User.js","path":"src/structures"}},{"name":"avatarDecorationURL","description":"A link to the user's avatar decoration.","inherits":"User#avatarDecorationURL","inherited":true,"params":[{"name":"options","description":"Options for the image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":467,"file":"User.js","path":"src/structures"}},{"name":"displayAvatarURL","description":"A link to the user's avatar if they have one.\nOtherwise a link to their default avatar will be returned.","inherits":"User#displayAvatarURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":[[["string"]]],"meta":{"line":488,"file":"User.js","path":"src/structures"}},{"name":"bannerURL","description":"A link to the user's banner.\nThis method will throw an error if called before the user is force fetched.\nSee {@link User#banner} for more info","inherits":"User#bannerURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":510,"file":"User.js","path":"src/structures"}},{"name":"ring","description":"Ring the user's phone / PC (call)","inherits":"User#ring","inherited":true,"deprecated":true,"returns":[[["Promise","<"],["any",">"]]],"meta":{"line":523,"file":"User.js","path":"src/structures"}},{"name":"createDM","description":"Creates a DM channel between the client and the user.","inherits":"User#createDM","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":583,"file":"User.js","path":"src/structures"}},{"name":"deleteDM","description":"Deletes a DM channel (if one exists) between the client and the user. Resolves with the channel if successful.","inherits":"User#deleteDM","inherited":true,"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":591,"file":"User.js","path":"src/structures"}},{"name":"equals","description":"Checks if the user is equal to another.\nIt compares id, username, discriminator, avatar, banner, accent color, and bot flags.\nIt is recommended to compare equality by using `user.id === user2.id` unless you want to compare all properties.","inherits":"User#equals","inherited":true,"params":[{"name":"user","description":"User to compare with","type":[[["User"]]]}],"returns":[[["boolean"]]],"meta":{"line":602,"file":"User.js","path":"src/structures"}},{"name":"_equals","description":"Compares the user with an API user object","access":"private","inherits":"User#_equals","inherited":true,"params":[{"name":"user","description":"The API user object to compare","type":[[["APIUser"]]]}],"returns":[[["boolean"]]],"meta":{"line":623,"file":"User.js","path":"src/structures"}},{"name":"fetchFlags","description":"Fetches this user's flags.","inherits":"User#fetchFlags","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["UserFlags",">"]]],"meta":{"line":642,"file":"User.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this user.","inherits":"User#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":651,"file":"User.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the user's mention instead of the User object.","inherits":"User#toString","inherited":true,"examples":["// Logs: Hello from <@123456789012345678>!\nconsole.log(`Hello from ${user}!`);"],"returns":[[["string"]]],"meta":{"line":662,"file":"User.js","path":"src/structures"}},{"name":"setNote","description":"Set note to user","inherits":"User#setNote","inherited":true,"params":[{"name":"note","description":"Note to set","default":null,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":687,"file":"User.js","path":"src/structures"}},{"name":"presenceFetch","description":"Get presence (~ v12)","inherits":"User#presenceFetch","inherited":true,"async":true,"returns":[[["Promise","<("],["Presence","|"],["null",")>"]]],"meta":{"line":696,"file":"User.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this user.","inherits":"User#send","inherited":true,"implements":["TextBasedChannel#send"],"examples":["// Send a direct message\nuser.send('Hello!')\n .then(message => console.log(`Sent message: ${message.content} to ${user.tag}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":709,"file":"User.js","path":"src/structures"}}],"meta":{"line":18,"file":"ClientUser.js","path":"src/structures"}},{"name":"CommandInteraction","description":"Represents a command interaction.","extends":[[["BaseCommandInteraction"]]],"props":[{"name":"options","description":"The options passed to the command.","type":[[["CommandInteractionOptionResolver"]]],"meta":{"line":18,"file":"CommandInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":20,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandId","description":"The invoked application command's id","type":[[["Snowflake"]]],"meta":{"line":30,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandName","description":"The invoked application command's name","type":[[["string"]]],"meta":{"line":36,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":42,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":48,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":54,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":60,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"command","description":"The invoked application command, if it was fetched before","nullable":true,"type":[[["ApplicationCommand"]]],"meta":{"line":67,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"Returns a string representation of the command interaction.\nThis can then be copied by a user and executed again in a new command while keeping the option order.","returns":[[["string"]]],"meta":{"line":30,"file":"CommandInteraction.js","path":"src/structures"}},{"name":"transformResolved","description":"Transforms the resolved received from the API.","access":"private","inherits":"BaseCommandInteraction#transformResolved","inherited":true,"params":[{"name":"resolved","description":"The received resolved objects","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionResolvedData"]]],"meta":{"line":89,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"transformOption","description":"Transforms an option received from the API.","access":"private","inherits":"BaseCommandInteraction#transformOption","inherited":true,"params":[{"name":"option","description":"The received option","type":[[["APIApplicationCommandOption"]]]},{"name":"resolved","description":"The resolved interaction data","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionOption"]]],"meta":{"line":162,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"BaseCommandInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"BaseCommandInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"BaseCommandInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"BaseCommandInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"BaseCommandInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"BaseCommandInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"BaseCommandInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseCommandInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":10,"file":"CommandInteraction.js","path":"src/structures"}},{"name":"CommandInteractionOptionResolver","description":"A resolver for command interaction options.","props":[{"name":"client","description":"The client that instantiated this.","readonly":true,"type":[[["Client"]]],"meta":{"line":10,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"_group","description":"The name of the subcommand group.","access":"private","nullable":true,"type":[[["string"]]],"meta":{"line":23,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"_subcommand","description":"The name of the subcommand.","access":"private","nullable":true,"type":[[["string"]]],"meta":{"line":30,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"_hoistedOptions","description":"The bottom-level options for the interaction.\nIf there is a subcommand (or subcommand and group), this is the options for the subcommand.","access":"private","type":[[["Array","<"],["CommandInteractionOption",">"]]],"meta":{"line":38,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"data","description":"The interaction options array.","readonly":true,"type":[[["ReadonlyArray","<"],["CommandInteractionOption",">"]]],"meta":{"line":51,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"resolved","description":"The interaction resolved data","type":[[["Readonly","<"],["CommandInteractionResolvedData",">"]]],"meta":{"line":59,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}}],"methods":[{"name":"get","description":"Gets an option by its name.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["CommandInteractionOption"]]],"description":"The option, if found.","nullable":true},"meta":{"line":73,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"_getTypedOption","description":"Gets an option by name and property and checks its type.","access":"private","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"type","description":"The type of the option.","type":[[["ApplicationCommandOptionType"]]]},{"name":"properties","description":"The properties to check for for `required`.","type":[[["Array","<"],["string",">"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","type":[[["boolean"]]]}],"returns":{"types":[[["CommandInteractionOption"]]],"description":"The option, if found.","nullable":true},"meta":{"line":93,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getSubcommand","description":"Gets the selected subcommand.","params":[{"name":"required","description":"Whether to throw an error if there is no subcommand.","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["string"]]],"description":"The name of the selected subcommand, or null if not set and not required.","nullable":true},"meta":{"line":110,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getSubcommandGroup","description":"Gets the selected subcommand group.","params":[{"name":"required","description":"Whether to throw an error if there is no subcommand group.","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["string"]]],"description":"The name of the selected subcommand group, or null if not set and not required.","nullable":true},"meta":{"line":122,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getBoolean","description":"Gets a boolean option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["boolean"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":135,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getChannel","description":"Gets a channel option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["GuildChannel"]],[["ThreadChannel"]],[["APIChannel"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":147,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getString","description":"Gets a string option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["string"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":158,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getInteger","description":"Gets an integer option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["number"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":169,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getNumber","description":"Gets a number option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["number"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":180,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getUser","description":"Gets a user option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["User"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":191,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getMember","description":"Gets a member option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["GuildMember"]],[["APIGuildMember"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":203,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getRole","description":"Gets a role option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["Role"]],[["APIRole"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":214,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getMentionable","description":"Gets a mentionable option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["User"]],[["GuildMember"]],[["APIGuildMember"]],[["Role"]],[["APIRole"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":226,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getMessage","description":"Gets a message option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["Message"]],[["APIMessage"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":238,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getFocused","description":"Gets the focused option.","params":[{"name":"getFull","description":"Whether to get the full option object","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["string"]],[["AutocompleteFocusedOption"]]],"description":"The value of the option, or the whole option if getFull is true"},"meta":{"line":258,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getAttachment","description":"Gets an attachment option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["MessageAttachment"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":270,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}}],"meta":{"line":8,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"ContextMenuInteraction","description":"Represents a context menu interaction.","extends":[[["BaseCommandInteraction"]]],"props":[{"name":"options","description":"The target of the interaction, parsed into options","type":[[["CommandInteractionOptionResolver"]]],"meta":{"line":18,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"targetId","description":"The id of the target of the interaction","type":[[["Snowflake"]]],"meta":{"line":28,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"targetType","description":"The type of the target of the interaction; either USER or MESSAGE","type":[[["ApplicationCommandType"]]],"meta":{"line":34,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":20,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandId","description":"The invoked application command's id","type":[[["Snowflake"]]],"meta":{"line":30,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandName","description":"The invoked application command's name","type":[[["string"]]],"meta":{"line":36,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":42,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":48,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":54,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":60,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"command","description":"The invoked application command, if it was fetched before","nullable":true,"type":[[["ApplicationCommand"]]],"meta":{"line":67,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"resolveContextMenuOptions","description":"Resolves and transforms options received from the API for a context menu interaction.","access":"private","params":[{"name":"data","description":"The interaction data","type":[[["APIApplicationCommandInteractionData"]]]}],"returns":[[["Array","<"],["CommandInteractionOption",">"]]],"meta":{"line":43,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"transformResolved","description":"Transforms the resolved received from the API.","access":"private","inherits":"BaseCommandInteraction#transformResolved","inherited":true,"params":[{"name":"resolved","description":"The received resolved objects","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionResolvedData"]]],"meta":{"line":89,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"transformOption","description":"Transforms an option received from the API.","access":"private","inherits":"BaseCommandInteraction#transformOption","inherited":true,"params":[{"name":"option","description":"The received option","type":[[["APIApplicationCommandOption"]]]},{"name":"resolved","description":"The resolved interaction data","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionOption"]]],"meta":{"line":162,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"BaseCommandInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"BaseCommandInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"BaseCommandInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"BaseCommandInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"BaseCommandInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"BaseCommandInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"BaseCommandInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseCommandInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":11,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"DeveloperPortalApplication","description":"Represents an OAuth2 Application.","extends":[[["Base"]]],"abstract":true,"props":[{"name":"id","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":28,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"name","description":"The name of the application","nullable":true,"type":[[["string"]]],"meta":{"line":35,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"description","description":"The application's description","nullable":true,"type":[[["string"]]],"meta":{"line":45,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"icon","description":"The application's icon hash","nullable":true,"type":[[["string"]]],"meta":{"line":55,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"bot","description":"Bot application","type":[[["User"]]],"meta":{"line":65,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"tags","description":"The tags this application has (max of 5)","type":[[["Array","<"],["string",">"]]],"meta":{"line":72,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"installParams","description":"Settings for this application's default in-app authorization","nullable":true,"type":[[["ClientApplicationInstallParams"]]],"meta":{"line":79,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"customInstallURL","description":"This application's custom installation URL","nullable":true,"type":[[["string"]]],"meta":{"line":92,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"flags","description":"The flags this application has","type":[[["ApplicationFlags"]]],"meta":{"line":102,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"cover","description":"The hash of the application's cover image","nullable":true,"type":[[["string"]]],"meta":{"line":110,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"rpcOrigins","description":"The application's RPC origins, if enabled","type":[[["Array","<"],["string",">"]]],"meta":{"line":120,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"botRequireCodeGrant","description":"If this application's bot requires a code grant when using the OAuth2 flow","nullable":true,"type":[[["boolean"]]],"meta":{"line":130,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"botPublic","description":"If this application's bot is public","nullable":true,"type":[[["boolean"]]],"meta":{"line":140,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"owner","description":"The owner of this OAuth application","nullable":true,"type":[[["User"]],[["Team"]]],"meta":{"line":149,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"redirectURIs","description":"Redirect URIs for this application","type":[[["Array","<"],["string",">"]]],"meta":{"line":160,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"interactionEndpointURL","description":"BOT_HTTP_INTERACTIONS feature flag","nullable":true,"type":[[["string"]]],"meta":{"line":166,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"publicKey","description":"Public key","nullable":true,"type":[[["string"]]],"meta":{"line":172,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"testers","description":"User tester","type":[[["Collection","<"],["Snowflake",", "],["Tester",">"]]],"meta":{"line":183,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"TermsOfService","description":"Terms of service URL","nullable":true,"type":[[["string"]]],"meta":{"line":189,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"PrivacyPolicy","description":"Privacy policy URL","nullable":true,"type":[[["string"]]],"meta":{"line":195,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"roleConnectionsVerificationURL","description":"This application's role connection verification entry point URL","nullable":true,"type":[[["string"]]],"meta":{"line":202,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the application was created at","readonly":true,"type":[[["number"]]],"meta":{"line":212,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"createdAt","description":"The time the application was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":221,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"partial","description":"Whether this application is partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":272,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"iconURL","description":"A link to the application's icon.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":230,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"coverURL","description":"A link to this application's cover image.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":240,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"fetchAssets","description":"Gets the application's rich presence assets.","deprecated":"This will be removed in the next major as it is unsupported functionality.","async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationAsset",">>"]]],"meta":{"line":258,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"fetch","description":"Obtains this application from Discord.","async":true,"returns":[[["Promise","<"],["DeveloperPortalApplication",">"]]],"meta":{"line":280,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"fetchTesters","description":"Gets all testers for this application.","async":true,"returns":[[["Promise","<"],["DeveloperPortalApplication",">"]]],"meta":{"line":290,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"addTester","description":"Add user to this application's allowlist.","params":[{"name":"username","description":"Username of the user to add","type":[[["string"]]]},{"name":"discriminator","description":"Discriminator of the user to add","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["DeveloperPortalApplication",">"]]],"meta":{"line":308,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"deleteTester","description":"Delete user from this application's allowlist.","params":[{"name":"user","description":"User","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["DeveloperPortalApplication",">"]]],"meta":{"line":327,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"edit","description":"Edits this application.","params":[{"name":"data","description":"Edit data for the application","type":[[["ApplicationEditData"]]]}],"async":true,"returns":[[["Promise","<"],["DeveloperPortalApplication",">"]]],"meta":{"line":354,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"createBot","description":"Creates a new bot for this application.","async":true,"returns":[[["Promise","<"],["DeveloperPortalApplication",">"]]],"meta":{"line":381,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"resetClientSecret","description":"Reset CLient Secret for this application.","params":[{"name":"MFACode","description":"The MFA code (if required)","type":[[["number"]]]}],"async":true,"returns":[[["Promise","<"],["string",">"]]],"meta":{"line":393,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"resetBotToken","description":"Reset Bot Token for this application.","params":[{"name":"MFACode","description":"The MFA code (if required)","type":[[["number"]]]}],"async":true,"returns":[[["Promise","<"],["string",">"]]],"meta":{"line":409,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"delete","description":"Deletes this application.","params":[{"name":"MFACode","description":"The MFA code (if required)","type":[[["number"]]]}],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":425,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"addAsset","description":"Add new image to this application. (RPC)","params":[{"name":"image","description":"Image Resolvable","type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"name","description":"Name of the image","type":[[["string"]]]}],"async":true,"returns":[[["ApplicationAsset"]]],"meta":{"line":435,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"deleteAsset","description":"Delete an image from this application. (RPC)","params":[{"name":"id","description":"ID of the image","type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["undefined",">"]]],"meta":{"line":456,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"fetchRoleConnectionMetadataRecords","description":"Gets this application's role connection metadata records","async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationRoleConnectionMetadata",">>"]]],"meta":{"line":465,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"editRoleConnectionMetadataRecords","description":"Updates this application's role connection metadata records","params":[{"name":"records","description":"The new role connection metadata records","type":[[["Array","<"],["ApplicationRoleConnectionMetadataEditOptions",">"]]]}],"async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationRoleConnectionMetadata",">>"]]],"meta":{"line":486,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the application's name instead of the\nApplication object.","examples":["// Logs: Application name: My App\nconsole.log(`Application name: ${application}`);"],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":511,"file":"DeveloperPortalApplication.js","path":"src/structures"}}],"meta":{"line":18,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"DirectoryChannel","description":"Represents a channel that displays a directory of guilds.","extends":[[["Channel"]]],"props":[{"name":"name","description":"The channel's name","type":[[["string"]]],"meta":{"line":16,"file":"DirectoryChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"Channel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete()\n .then(console.log)\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":143,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":9,"file":"DirectoryChannel.js","path":"src/structures"}},{"name":"DMChannel","description":"Represents a direct message channel between two users.","extends":[[["Channel"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"messages","description":"A manager of the messages belonging to this channel","type":[[["MessageManager"]]],"meta":{"line":27,"file":"DMChannel.js","path":"src/structures"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":33,"file":"DMChannel.js","path":"src/structures"}},{"name":"recipient","description":"The recipient on the other end of the DM","type":[[["User"]]],"meta":{"line":44,"file":"DMChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The channel's last message id, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"DMChannel.js","path":"src/structures"}},{"name":"lastPinTimestamp","description":"The timestamp when the last pinned message was pinned, if there was one","nullable":true,"type":[[["number"]]],"meta":{"line":60,"file":"DMChannel.js","path":"src/structures"}},{"name":"messageRequest","description":"Whether the channel is a message request","type":[[["boolean"]]],"meta":{"line":70,"file":"DMChannel.js","path":"src/structures"}},{"name":"messageRequestTimestamp","description":"The timestamp when the message request was created","nullable":true,"type":[[["number"]]],"meta":{"line":78,"file":"DMChannel.js","path":"src/structures"}},{"name":"partial","description":"Whether this DMChannel is a partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":116,"file":"DMChannel.js","path":"src/structures"}},{"name":"voiceUsers","description":"The user in this voice-based channel","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":230,"file":"DMChannel.js","path":"src/structures"}},{"name":"voiceConnection","description":"Get connection to current call","readonly":true,"nullable":true,"type":[[["VoiceConnection"]]],"meta":{"line":244,"file":"DMChannel.js","path":"src/structures"}},{"name":"shard","description":"Get current shard","readonly":true,"type":[[["WebSocketShard"]]],"meta":{"line":256,"file":"DMChannel.js","path":"src/structures"}},{"name":"voiceAdapterCreator","description":"The voice state adapter for this client that can be used with @discordjs/voice to play audio in DM / Group DM channels.","readonly":true,"nullable":true,"type":[[["function"]]],"meta":{"line":264,"file":"DMChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinAt","description":"The date when the last pinned message was pinned, if there was one","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":68,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"acceptMessageRequest","description":"Accept this DMChannel.","async":true,"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":86,"file":"DMChannel.js","path":"src/structures"}},{"name":"cancelMessageRequest","description":"Cancel this DMChannel.","async":true,"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":103,"file":"DMChannel.js","path":"src/structures"}},{"name":"fetch","description":"Fetch this DMChannel.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":125,"file":"DMChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the recipient's mention instead of the\nDMChannel object.","examples":["// Logs: Hello from <@123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":137,"file":"DMChannel.js","path":"src/structures"}},{"name":"call","description":"Call this DMChannel. Return discordjs/voice VoiceConnection","params":[{"name":"options","description":"Options for the call","type":[[["CallOptions"]]]}],"returns":[[["Promise","<"],["VoiceConnection",">"]]],"meta":{"line":163,"file":"DMChannel.js","path":"src/structures"}},{"name":"ring","description":"Ring the user's phone / PC (call)","returns":[[["Promise","<"],["any",">"]]],"meta":{"line":205,"file":"DMChannel.js","path":"src/structures"}},{"name":"sync","description":"Sync VoiceState of this DMChannel.","returns":[[["undefined"]]],"meta":{"line":217,"file":"DMChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","implements":["TextBasedChannel#createMessageComponentCollector"],"examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","implements":["TextBasedChannel#awaitMessageComponent"],"examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"searchInteraction","description":"Search Slash Command (return raw data)","implements":["TextBasedChannel#searchInteraction"],"params":[{"name":"applicationId","description":"Application ID","type":[[["Snowflake"]]]},{"name":"type","description":"Command Type","default":"CHAT_INPUT","nullable":true,"type":[[["ApplicationCommandType"]]]}],"returns":[[["Object"]]],"meta":{"line":423,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendSlash","description":"Send Slash to this channel","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/SlashCommand.md}"],"implements":["TextBasedChannel#sendSlash"],"examples":["// Send a basic slash\nchannel.sendSlash('botid', 'ping')\n .then(console.log)\n .catch(console.error);","// Send a remote file\nchannel.sendSlash('botid', 'emoji upload', 'https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048', 'test')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"bot","description":"Bot user (BotID, not applicationID)","type":[[["UserResolvable"]]]},{"name":"commandString","description":"Command name (and sub / group formats)","type":[[["string"]]]},{"name":"args","description":"Command arguments","variable":true,"type":[[["any"]],[["Array","<"],["any",">"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":463,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"delete","description":"Deletes this channel.","inherits":"Channel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete()\n .then(console.log)\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":143,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":16,"file":"DMChannel.js","path":"src/structures"}},{"name":"Emoji","description":"Represents an emoji, see {@link GuildEmoji} and {@link ReactionEmoji}.","extends":[[["Base"]]],"props":[{"name":"animated","description":"Whether or not the emoji is animated","nullable":true,"type":[[["boolean"]]],"meta":{"line":34,"file":"Emoji.js","path":"src/structures"}},{"name":"name","description":"The emoji's name","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Emoji.js","path":"src/structures"}},{"name":"id","description":"The emoji's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Emoji.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":54,"file":"Emoji.js","path":"src/structures"}},{"name":"identifier","description":"The identifier of this emoji, used for message reactions","readonly":true,"type":[[["string"]]],"meta":{"line":84,"file":"Emoji.js","path":"src/structures"}},{"name":"url","description":"The URL to the emoji file if it's a custom emoji","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":94,"file":"Emoji.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":103,"file":"Emoji.js","path":"src/structures"}},{"name":"createdAt","description":"The time the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":112,"file":"Emoji.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the text required to form a graphical emoji on Discord\ninstead of the Emoji object.","examples":["// Send a custom emoji from a guild:\nconst emoji = guild.emojis.cache.first();\nmsg.channel.send(`Hello! ${emoji}`);","// Send the emoji used in a reaction to the channel the reaction is part of\nreaction.message.channel.send(`The emoji used was: ${reaction.emoji}`);"],"returns":[[["string"]]],"meta":{"line":128,"file":"Emoji.js","path":"src/structures"}}],"meta":{"line":27,"file":"Emoji.js","path":"src/structures"}},{"name":"ForumChannel","description":"Represents a channel that only contains threads","extends":[[["GuildChannel"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":53,"file":"ForumChannel.js","path":"src/structures"}},{"name":"threads","description":"A manager of the threads belonging to this channel","type":[[["GuildForumThreadManager"]]],"meta":{"line":59,"file":"ForumChannel.js","path":"src/structures"}},{"name":"availableTags","description":"The set of tags that can be used in this channel.","type":[[["Array","<"],["GuildForumTag",">"]]],"meta":{"line":71,"file":"ForumChannel.js","path":"src/structures"}},{"name":"defaultReactionEmoji","description":"The emoji to show in the add reaction button on a thread in a guild forum channel","nullable":true,"type":[[["DefaultReactionEmoji"]]],"meta":{"line":81,"file":"ForumChannel.js","path":"src/structures"}},{"name":"defaultThreadRateLimitPerUser","description":"The initial rate limit per user (slowmode) to set on newly created threads in a channel.","nullable":true,"type":[[["number"]]],"meta":{"line":92,"file":"ForumChannel.js","path":"src/structures"}},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for this channel.","nullable":true,"type":[[["number"]]],"meta":{"line":102,"file":"ForumChannel.js","path":"src/structures"}},{"name":"defaultAutoArchiveDuration","description":"The default auto archive duration for newly created threads in this channel.","nullable":true,"type":[[["ThreadAutoArchiveDuration"]]],"meta":{"line":112,"file":"ForumChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If this channel is considered NSFW.","type":[[["boolean"]]],"meta":{"line":122,"file":"ForumChannel.js","path":"src/structures"}},{"name":"topic","description":"The topic of this channel.","nullable":true,"type":[[["string"]]],"meta":{"line":132,"file":"ForumChannel.js","path":"src/structures"}},{"name":"defaultSortOrder","description":"The default sort order mode used to order posts","nullable":true,"type":[[["SortOrderType"]]],"meta":{"line":140,"file":"ForumChannel.js","path":"src/structures"}},{"name":"defaultForumLayout","description":"The default layout type used to display posts","type":[[["ForumLayoutType"]]],"meta":{"line":149,"file":"ForumChannel.js","path":"src/structures"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":274,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"setAvailableTags","description":"Sets the available tags for this forum channel","params":[{"name":"availableTags","description":"The tags to set as available in this channel","type":[[["Array","<"],["GuildForumTagData",">"]]]},{"name":"reason","description":"Reason for changing the available tags","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ForumChannel",">"]]],"meta":{"line":158,"file":"ForumChannel.js","path":"src/structures"}},{"name":"setDefaultReactionEmoji","description":"Sets the default reaction emoji for this channel","params":[{"name":"defaultReactionEmoji","description":"The emoji to set as the default reaction emoji","nullable":true,"type":[[["DefaultReactionEmoji"]]]},{"name":"reason","description":"Reason for changing the default reaction emoji","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ForumChannel",">"]]],"meta":{"line":168,"file":"ForumChannel.js","path":"src/structures"}},{"name":"setDefaultThreadRateLimitPerUser","description":"Sets the default rate limit per user (slowmode) for new threads in this channel","params":[{"name":"defaultThreadRateLimitPerUser","description":"The rate limit to set on newly created threads in this channel","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the default rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ForumChannel",">"]]],"meta":{"line":178,"file":"ForumChannel.js","path":"src/structures"}},{"name":"setDefaultSortOrder","description":"Sets the default sort order mode used to order posts","params":[{"name":"defaultSortOrder","description":"The default sort order mode to set on this channel","nullable":true,"type":[[["SortOrderType"]]]},{"name":"reason","description":"Reason for changing the default sort order","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ForumChannel",">"]]],"meta":{"line":188,"file":"ForumChannel.js","path":"src/structures"}},{"name":"setDefaultForumLayout","description":"Sets the default forum layout type used to display posts","params":[{"name":"defaultForumLayout","description":"The default forum layout type to set on this channel","type":[[["ForumLayoutType"]]]},{"name":"reason","description":"Reason for changing the default forum layout","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ForumChannel",">"]]],"meta":{"line":198,"file":"ForumChannel.js","path":"src/structures"}},{"name":"createInvite","description":"Creates an invite to this guild channel.","examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":212,"file":"ForumChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":222,"file":"ForumChannel.js","path":"src/structures"}},{"name":"setDefaultAutoArchiveDuration","description":"Sets the default auto archive duration for all newly created threads in this channel.","params":[{"name":"defaultAutoArchiveDuration","description":"The new default auto archive duration","type":[[["ThreadAutoArchiveDuration"]]]},{"name":"reason","description":"Reason for changing the channel's default auto archive duration","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ForumChannel",">"]]],"meta":{"line":232,"file":"ForumChannel.js","path":"src/structures"}},{"name":"setTopic","description":"Sets a new topic for the guild channel.","examples":["// Set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.error);"],"params":[{"name":"topic","description":"The new topic for the guild channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's topic","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ForumChannel",">"]]],"meta":{"line":247,"file":"ForumChannel.js","path":"src/structures"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":368,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":393,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":403,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":413,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":45,"file":"ForumChannel.js","path":"src/structures"}},{"name":"Guild","description":"Represents a guild (or a server) on Discord.\nIt's recommended to see if a guild is available before performing operations or reading data from it. You can\ncheck this with {@link Guild#available}.","extends":[[["AnonymousGuild"]]],"props":[{"name":"members","description":"A manager of the members belonging to this guild.","type":[[["GuildMemberManager"]]],"meta":{"line":66,"file":"Guild.js","path":"src/structures"}},{"name":"channels","description":"A manager of the channels belonging to this guild.","type":[[["GuildChannelManager"]]],"meta":{"line":72,"file":"Guild.js","path":"src/structures"}},{"name":"bans","description":"A manager of the bans belonging to this guild.","type":[[["GuildBanManager"]]],"meta":{"line":78,"file":"Guild.js","path":"src/structures"}},{"name":"roles","description":"A manager of the roles belonging to this guild.","type":[[["RoleManager"]]],"meta":{"line":84,"file":"Guild.js","path":"src/structures"}},{"name":"presences","description":"A manager of the presences belonging to this guild.","type":[[["PresenceManager"]]],"meta":{"line":90,"file":"Guild.js","path":"src/structures"}},{"name":"voiceStates","description":"A manager of the voice states of this guild.","type":[[["VoiceStateManager"]]],"meta":{"line":96,"file":"Guild.js","path":"src/structures"}},{"name":"stageInstances","description":"A manager of the stage instances of this guild.","type":[[["StageInstanceManager"]]],"meta":{"line":102,"file":"Guild.js","path":"src/structures"}},{"name":"invites","description":"A manager of the invites of this guild.","type":[[["GuildInviteManager"]]],"meta":{"line":108,"file":"Guild.js","path":"src/structures"}},{"name":"scheduledEvents","description":"A manager of the scheduled events of this guild.","type":[[["GuildScheduledEventManager"]]],"meta":{"line":114,"file":"Guild.js","path":"src/structures"}},{"name":"autoModerationRules","description":"A manager of the auto moderation rules of this guild.","type":[[["AutoModerationRuleManager"]]],"meta":{"line":120,"file":"Guild.js","path":"src/structures"}},{"name":"available","description":"Whether the guild is available to access. If it is not available, it indicates a server outage.","type":[[["boolean"]]],"meta":{"line":129,"file":"Guild.js","path":"src/structures"}},{"name":"shardId","description":"The id of the shard this Guild belongs to.","type":[[["number"]]],"meta":{"line":139,"file":"Guild.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted.","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":149,"file":"Guild.js","path":"src/structures"}},{"name":"shard","description":"The Shard this Guild belongs to.","readonly":true,"type":[[["WebSocketShard"]]],"meta":{"line":179,"file":"Guild.js","path":"src/structures"}},{"name":"discoverySplash","description":"The hash of the guild discovery splash image.","nullable":true,"type":[[["string"]]],"meta":{"line":199,"file":"Guild.js","path":"src/structures"}},{"name":"memberCount","description":"The full amount of members in this guild.","type":[[["number"]]],"meta":{"line":207,"file":"Guild.js","path":"src/structures"}},{"name":"large","description":"Whether the guild is \"large\" (has more than {@link WebsocketOptions large_threshold} members, 50 by default).","type":[[["boolean"]]],"meta":{"line":215,"file":"Guild.js","path":"src/structures"}},{"name":"premiumProgressBarEnabled","description":"Whether this guild has its premium (boost) progress bar enabled.","type":[[["boolean"]]],"meta":{"line":223,"file":"Guild.js","path":"src/structures"}},{"name":"applicationId","description":"The id of the application that created this guild (if applicable).","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":271,"file":"Guild.js","path":"src/structures"}},{"name":"afkTimeout","description":"The time in seconds before a user is counted as \"away from keyboard\".","nullable":true,"type":[[["number"]]],"meta":{"line":279,"file":"Guild.js","path":"src/structures"}},{"name":"afkChannelId","description":"The id of the voice channel where AFK members are moved.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":287,"file":"Guild.js","path":"src/structures"}},{"name":"systemChannelId","description":"The system channel's id.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":295,"file":"Guild.js","path":"src/structures"}},{"name":"premiumTier","description":"The premium tier of this guild.","type":[[["PremiumTier"]]],"meta":{"line":303,"file":"Guild.js","path":"src/structures"}},{"name":"widgetEnabled","description":"Whether widget images are enabled on this guild.","nullable":true,"type":[[["boolean"]]],"meta":{"line":311,"file":"Guild.js","path":"src/structures"}},{"name":"widgetChannelId","description":"The widget channel's id, if enabled.","nullable":true,"type":[[["string"]]],"meta":{"line":319,"file":"Guild.js","path":"src/structures"}},{"name":"explicitContentFilter","description":"The explicit content filter level of the guild.","type":[[["ExplicitContentFilterLevel"]]],"meta":{"line":327,"file":"Guild.js","path":"src/structures"}},{"name":"mfaLevel","description":"The required MFA level for this guild.","type":[[["MFALevel"]]],"meta":{"line":335,"file":"Guild.js","path":"src/structures"}},{"name":"joinedTimestamp","description":"The timestamp the client user joined the guild at.","type":[[["number"]]],"meta":{"line":343,"file":"Guild.js","path":"src/structures"}},{"name":"defaultMessageNotifications","description":"The default message notification level of the guild.","type":[[["DefaultMessageNotificationLevel"]]],"meta":{"line":351,"file":"Guild.js","path":"src/structures"}},{"name":"systemChannelFlags","description":"The value set for the guild's system channel flags.","type":[[["Readonly","<"],["SystemChannelFlags",">"]]],"meta":{"line":359,"file":"Guild.js","path":"src/structures"}},{"name":"maximumMembers","description":"The maximum amount of members the guild can have.","nullable":true,"type":[[["number"]]],"meta":{"line":367,"file":"Guild.js","path":"src/structures"}},{"name":"maximumPresences","description":"The maximum amount of presences the guild can have.\nYou will need to fetch the guild using {@link Guild#fetch} if you want to receive this parameter.","nullable":true,"type":[[["number"]]],"meta":{"line":378,"file":"Guild.js","path":"src/structures"}},{"name":"maxVideoChannelUsers","description":"The maximum amount of users allowed in a video channel.","nullable":true,"type":[[["number"]]],"meta":{"line":388,"file":"Guild.js","path":"src/structures"}},{"name":"maxStageVideoChannelUsers","description":"The maximum amount of users allowed in a stage video channel.","nullable":true,"type":[[["number"]]],"meta":{"line":398,"file":"Guild.js","path":"src/structures"}},{"name":"approximateMemberCount","description":"The approximate amount of members the guild has.\nYou will need to fetch the guild using {@link Guild#fetch} if you want to receive this parameter.","nullable":true,"type":[[["number"]]],"meta":{"line":409,"file":"Guild.js","path":"src/structures"}},{"name":"approximatePresenceCount","description":"The approximate amount of presences the guild has.\nYou will need to fetch the guild using {@link Guild#fetch} if you want to receive this parameter.","nullable":true,"type":[[["number"]]],"meta":{"line":420,"file":"Guild.js","path":"src/structures"}},{"name":"vanityURLUses","description":"The use count of the vanity URL code of the guild, if any.\nYou will need to fetch this parameter using {@link Guild#fetchVanityData} if you want to receive it.","nullable":true,"type":[[["number"]]],"meta":{"line":430,"file":"Guild.js","path":"src/structures"}},{"name":"rulesChannelId","description":"The rules channel's id for the guild.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":437,"file":"Guild.js","path":"src/structures"}},{"name":"publicUpdatesChannelId","description":"The community updates channel's id for the guild.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":445,"file":"Guild.js","path":"src/structures"}},{"name":"preferredLocale","description":"The preferred locale of the guild, defaults to `en-US`.","see":["{@link https://discord.com/developers/docs/reference#locales}"],"type":[[["Locale"]]],"meta":{"line":454,"file":"Guild.js","path":"src/structures"}},{"name":"safetyAlertsChannelId","description":"The safety alerts channel's id for the guild","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":462,"file":"Guild.js","path":"src/structures"}},{"name":"ownerId","description":"The user id of this guild's owner.","type":[[["Snowflake"]]],"meta":{"line":495,"file":"Guild.js","path":"src/structures"}},{"name":"emojis","description":"A manager of the emojis belonging to this guild.","type":[[["GuildEmojiManager"]]],"meta":{"line":530,"file":"Guild.js","path":"src/structures"}},{"name":"stickers","description":"A manager of the stickers belonging to this guild.","type":[[["GuildStickerManager"]]],"meta":{"line":544,"file":"Guild.js","path":"src/structures"}},{"name":"joinedAt","description":"The time the client user joined the guild.","readonly":true,"type":[[["Date"]]],"meta":{"line":561,"file":"Guild.js","path":"src/structures"}},{"name":"afkChannel","description":"AFK voice channel for this guild.","readonly":true,"nullable":true,"type":[[["VoiceChannel"]]],"meta":{"line":589,"file":"Guild.js","path":"src/structures"}},{"name":"systemChannel","description":"System channel for this guild.","readonly":true,"nullable":true,"type":[[["TextChannel"]]],"meta":{"line":598,"file":"Guild.js","path":"src/structures"}},{"name":"safetyAlertsChannel","description":"Safety alerts channel for this guild","readonly":true,"nullable":true,"type":[[["TextChannel"]]],"meta":{"line":607,"file":"Guild.js","path":"src/structures"}},{"name":"widgetChannel","description":"Widget channel for this guild.","readonly":true,"nullable":true,"type":[[["TextChannel"]],[["NewsChannel"]],[["VoiceChannel"]],[["StageChannel"]],[["ForumChannel"]]],"meta":{"line":616,"file":"Guild.js","path":"src/structures"}},{"name":"rulesChannel","description":"Rules channel for this guild.","readonly":true,"nullable":true,"type":[[["TextChannel"]]],"meta":{"line":625,"file":"Guild.js","path":"src/structures"}},{"name":"publicUpdatesChannel","description":"Public updates channel for this guild.","readonly":true,"nullable":true,"type":[[["TextChannel"]]],"meta":{"line":634,"file":"Guild.js","path":"src/structures"}},{"name":"me","description":"The client user as a GuildMember of this guild.","readonly":true,"nullable":true,"deprecated":"Use {@link GuildMemberManager#me} instead.","type":[[["GuildMember"]]],"meta":{"line":644,"file":"Guild.js","path":"src/structures"}},{"name":"maximumBitrate","description":"The maximum bitrate available for this guild.","readonly":true,"type":[[["number"]]],"meta":{"line":658,"file":"Guild.js","path":"src/structures"}},{"name":"voiceAdapterCreator","description":"The voice state adapter for this guild that can be used with @discordjs/voice to play audio in voice\nand stage channels.","readonly":true,"type":[[["function"]]],"meta":{"line":1673,"file":"Guild.js","path":"src/structures"}},{"name":"splash","description":"The hash of the guild invite splash image","nullable":true,"type":[[["string"]]],"meta":{"line":25,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"banner","description":"The hash of the guild banner","nullable":true,"type":[[["string"]]],"meta":{"line":33,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"description","description":"The description of the guild, if any","nullable":true,"type":[[["string"]]],"meta":{"line":41,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"verificationLevel","description":"The verification level of the guild","type":[[["VerificationLevel"]]],"meta":{"line":49,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"vanityURLCode","description":"The vanity invite code of the guild, if any","nullable":true,"type":[[["string"]]],"meta":{"line":57,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"nsfwLevel","description":"The NSFW level of this guild","type":[[["NSFWLevel"]]],"meta":{"line":65,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"premiumSubscriptionCount","description":"The total number of boosts for this server","nullable":true,"type":[[["number"]]],"meta":{"line":73,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"id","description":"The guild's id","type":[[["Snowflake"]]],"meta":{"line":19,"file":"BaseGuild.js","path":"src/structures"}},{"name":"name","description":"The name of this guild","type":[[["string"]]],"meta":{"line":25,"file":"BaseGuild.js","path":"src/structures"}},{"name":"icon","description":"The icon hash of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":31,"file":"BaseGuild.js","path":"src/structures"}},{"name":"features","description":"An array of features available to this guild","type":[[["Array","<"],["Features",">"]]],"meta":{"line":37,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this guild was created at","readonly":true,"type":[[["number"]]],"meta":{"line":45,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdAt","description":"The time this guild was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":54,"file":"BaseGuild.js","path":"src/structures"}},{"name":"nameAcronym","description":"The acronym that shows up in place of a guild icon","readonly":true,"type":[[["string"]]],"meta":{"line":63,"file":"BaseGuild.js","path":"src/structures"}},{"name":"partnered","description":"Whether this guild is partnered","readonly":true,"type":[[["boolean"]]],"meta":{"line":75,"file":"BaseGuild.js","path":"src/structures"}},{"name":"verified","description":"Whether this guild is verified","readonly":true,"type":[[["boolean"]]],"meta":{"line":84,"file":"BaseGuild.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"discoverySplashURL","description":"The URL to this guild's discovery splash image.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":570,"file":"Guild.js","path":"src/structures"}},{"name":"fetchOwner","description":"Fetches the owner of the guild.\nIf the member object isn't needed, use {@link Guild#ownerId} instead.","params":[{"name":"options","description":"The options for fetching the member","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":580,"file":"Guild.js","path":"src/structures"}},{"name":"mute","description":"Mute a guild","examples":["guild.mute(true, 3600) // mutes the guild for an hour\nguild.mute(true, -1) // mutes the guild forever\nguild.mute(false); // unmutes the guild"],"params":[{"name":"mute","description":"Weather or not you want to mute the guild","type":[[["boolean"]]]},{"name":"time","description":"The amount of time you want to mute the server for in seconds","nullable":true,"type":[[["number"]]]}],"async":true,"returns":{"types":[[["boolean"]]],"description":"true if it worked and false if it didn't"},"meta":{"line":685,"file":"Guild.js","path":"src/structures"}},{"name":"fetchIntegrations","description":"Fetches a collection of integrations to this guild.\nResolves with a collection mapping integrations by their ids.","examples":["// Fetch integrations\nguild.fetchIntegrations()\n .then(integrations => console.log(`Fetched ${integrations.size} integrations`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Collection","<("],["Snowflake","|"],["string","), "],["Integration",">>"]]],"meta":{"line":709,"file":"Guild.js","path":"src/structures"}},{"name":"fetchTemplates","description":"Fetches a collection of templates from this guild.\nResolves with a collection mapping templates by their codes.","async":true,"returns":[[["Promise","<"],["Collection","<"],["string",", "],["GuildTemplate",">>"]]],"meta":{"line":722,"file":"Guild.js","path":"src/structures"}},{"name":"fetchWelcomeScreen","description":"Fetches the welcome screen for this guild.","async":true,"returns":[[["Promise","<"],["WelcomeScreen",">"]]],"meta":{"line":731,"file":"Guild.js","path":"src/structures"}},{"name":"createTemplate","description":"Creates a template for the guild.","params":[{"name":"name","description":"The name for the template","type":[[["string"]]]},{"name":"description","description":"The description for the template","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildTemplate",">"]]],"meta":{"line":742,"file":"Guild.js","path":"src/structures"}},{"name":"fetchPreview","description":"Obtains a guild preview for this guild from Discord.","async":true,"returns":[[["Promise","<"],["GuildPreview",">"]]],"meta":{"line":751,"file":"Guild.js","path":"src/structures"}},{"name":"fetchVanityData","description":"Fetches the vanity URL invite object to this guild.\nResolves with an object containing the vanity URL invite code and the use count.","examples":["// Fetch invite data\nguild.fetchVanityData()\n .then(res => {\n console.log(`Vanity URL: https://discord.gg/${res.code} with ${res.uses} uses`);\n })\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Vanity",">"]]],"meta":{"line":775,"file":"Guild.js","path":"src/structures"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the guild.","examples":["// Fetch webhooks\nguild.fetchWebhooks()\n .then(webhooks => console.log(`Fetched ${webhooks.size} webhooks`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":792,"file":"Guild.js","path":"src/structures"}},{"name":"fetchWidget","description":"Fetches the guild widget data, requires the widget to be enabled.","examples":["// Fetches the guild widget data\nguild.fetchWidget()\n .then(widget => console.log(`The widget shows ${widget.channels.size} channels`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Widget",">"]]],"meta":{"line":810,"file":"Guild.js","path":"src/structures"}},{"name":"fetchWidgetSettings","description":"Fetches the guild widget settings.","examples":["// Fetches the guild widget settings\nguild.fetchWidgetSettings()\n .then(widget => console.log(`The widget is ${widget.enabled ? 'enabled' : 'disabled'}`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["GuildWidgetSettings",">"]]],"meta":{"line":837,"file":"Guild.js","path":"src/structures"}},{"name":"fetchAuditLogs","description":"Fetches audit logs for this guild.","examples":["// Output audit log entries\nguild.fetchAuditLogs()\n .then(audit => console.log(audit.entries.first()))\n .catch(console.error);"],"params":[{"name":"options","description":"Options for fetching audit logs","optional":true,"default":"{}","type":[[["GuildAuditLogsFetchOptions"]]]}],"async":true,"returns":[[["Promise","<"],["GuildAuditLogs",">"]]],"meta":{"line":867,"file":"Guild.js","path":"src/structures"}},{"name":"edit","description":"Updates the guild with new information - e.g. a new name.","examples":["// Set the guild name\nguild.edit({\n name: 'Discord Guild',\n})\n .then(updated => console.log(`New guild name ${updated}`))\n .catch(console.error);"],"params":[{"name":"data","description":"The data to update the guild with","type":[[["GuildEditData"]]]},{"name":"reason","description":"Reason for editing this guild","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":933,"file":"Guild.js","path":"src/structures"}},{"name":"editWelcomeScreen","description":"Updates the guild's welcome screen.","examples":["guild.editWelcomeScreen({\n description: 'Hello World',\n enabled: true,\n welcomeChannels: [\n {\n description: 'foobar',\n channel: '222197033908436994',\n }\n ],\n})"],"params":[{"name":"data","description":"Data to edit the welcome screen with","type":[[["WelcomeScreenEditData"]]]}],"async":true,"returns":[[["Promise","<"],["WelcomeScreen",">"]]],"meta":{"line":1048,"file":"Guild.js","path":"src/structures"}},{"name":"setExplicitContentFilter","description":"Edits the level of the explicit content filter.","params":[{"name":"explicitContentFilter","description":"The new level of the explicit content filter","nullable":true,"type":[[["ExplicitContentFilterLevel"]],[["number"]]]},{"name":"reason","description":"Reason for changing the level of the guild's explicit content filter","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1076,"file":"Guild.js","path":"src/structures"}},{"name":"setDefaultMessageNotifications","description":"Edits the setting of the default message notifications of the guild.","params":[{"name":"defaultMessageNotifications","description":"The new default message notification level of the guild","type":[[["DefaultMessageNotificationLevel"]],[["number"]]]},{"name":"reason","description":"Reason for changing the setting of the default message notifications","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1087,"file":"Guild.js","path":"src/structures"}},{"name":"setSystemChannelFlags","description":"Edits the flags of the default message notifications of the guild.","params":[{"name":"systemChannelFlags","description":"The new flags for the default message notifications","type":[[["SystemChannelFlagsResolvable"]]]},{"name":"reason","description":"Reason for changing the flags of the default message notifications","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1098,"file":"Guild.js","path":"src/structures"}},{"name":"setName","description":"Edits the name of the guild.","examples":["// Edit the guild name\nguild.setName('Discord Guild')\n .then(updated => console.log(`Updated guild name to ${updated.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name of the guild","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1113,"file":"Guild.js","path":"src/structures"}},{"name":"setVerificationLevel","description":"Edits the verification level of the guild.","examples":["// Edit the guild verification level\nguild.setVerificationLevel(1)\n .then(updated => console.log(`Updated guild verification level to ${guild.verificationLevel}`))\n .catch(console.error);"],"params":[{"name":"verificationLevel","description":"The new verification level of the guild","type":[[["VerificationLevel"]],[["number"]]]},{"name":"reason","description":"Reason for changing the guild's verification level","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1128,"file":"Guild.js","path":"src/structures"}},{"name":"setAFKChannel","description":"Edits the AFK channel of the guild.","examples":["// Edit the guild AFK channel\nguild.setAFKChannel(channel)\n .then(updated => console.log(`Updated guild AFK channel to ${guild.afkChannel.name}`))\n .catch(console.error);"],"params":[{"name":"afkChannel","description":"The new AFK channel","nullable":true,"type":[[["VoiceChannelResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's AFK channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1143,"file":"Guild.js","path":"src/structures"}},{"name":"setSystemChannel","description":"Edits the system channel of the guild.","examples":["// Edit the guild system channel\nguild.setSystemChannel(channel)\n .then(updated => console.log(`Updated guild system channel to ${guild.systemChannel.name}`))\n .catch(console.error);"],"params":[{"name":"systemChannel","description":"The new system channel","nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's system channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1158,"file":"Guild.js","path":"src/structures"}},{"name":"setAFKTimeout","description":"Edits the AFK timeout of the guild.","examples":["// Edit the guild AFK channel\nguild.setAFKTimeout(60)\n .then(updated => console.log(`Updated guild AFK timeout to ${guild.afkTimeout}`))\n .catch(console.error);"],"params":[{"name":"afkTimeout","description":"The time in seconds that a user must be idle to be considered AFK","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the guild's AFK timeout","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1173,"file":"Guild.js","path":"src/structures"}},{"name":"setIcon","description":"Sets a new guild icon.","examples":["// Edit the guild icon\nguild.setIcon('./icon.png')\n .then(updated => console.log('Updated the guild icon'))\n .catch(console.error);"],"params":[{"name":"icon","description":"The new icon of the guild","nullable":true,"type":[[["Base64Resolvable"]],[["BufferResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's icon","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1188,"file":"Guild.js","path":"src/structures"}},{"name":"setOwner","description":"Sets a new owner of the guild.","examples":["// Edit the guild owner\nguild.setOwner(guild.members.cache.first())\n .then(guild => guild.fetchOwner())\n .then(owner => console.log(`Updated the guild owner to ${owner.displayName}`))\n .catch(console.error);"],"params":[{"name":"owner","description":"The new owner of the guild","type":[[["GuildMemberResolvable"]]]},{"name":"reason","description":"Reason for setting the new owner","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1204,"file":"Guild.js","path":"src/structures"}},{"name":"setSplash","description":"Sets a new guild invite splash image.","examples":["// Edit the guild splash\nguild.setSplash('./splash.png')\n .then(updated => console.log('Updated the guild splash'))\n .catch(console.error);"],"params":[{"name":"splash","description":"The new invite splash image of the guild","nullable":true,"type":[[["Base64Resolvable"]],[["BufferResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's invite splash image","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1219,"file":"Guild.js","path":"src/structures"}},{"name":"setDiscoverySplash","description":"Sets a new guild discovery splash image.","examples":["// Edit the guild discovery splash\nguild.setDiscoverySplash('./discoverysplash.png')\n .then(updated => console.log('Updated the guild discovery splash'))\n .catch(console.error);"],"params":[{"name":"discoverySplash","description":"The new discovery splash image of the guild","nullable":true,"type":[[["Base64Resolvable"]],[["BufferResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's discovery splash image","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1234,"file":"Guild.js","path":"src/structures"}},{"name":"setBanner","description":"Sets a new guild's banner.","examples":["guild.setBanner('./banner.png')\n .then(updated => console.log('Updated the guild banner'))\n .catch(console.error);"],"params":[{"name":"banner","description":"The new banner of the guild","nullable":true,"type":[[["Base64Resolvable"]],[["BufferResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's banner","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1248,"file":"Guild.js","path":"src/structures"}},{"name":"setRulesChannel","description":"Edits the rules channel of the guild.","examples":["// Edit the guild rules channel\nguild.setRulesChannel(channel)\n .then(updated => console.log(`Updated guild rules channel to ${guild.rulesChannel.name}`))\n .catch(console.error);"],"params":[{"name":"rulesChannel","description":"The new rules channel","nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's rules channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1263,"file":"Guild.js","path":"src/structures"}},{"name":"setPosition","description":"Change Guild Position (from * to Folder or Home).","examples":["// Move guild to folderID 123456, index 1\nguild.setPosition(1, 'FOLDER', 123456)\n.then(guild => console.log(`Guild moved to folderID ${guild.folder.folderId}`));"],"params":[{"name":"position","description":"Guild Position\n* **WARNING**: Type = `FOLDER`, newPosition is the guild's index in the Folder.","type":[[["number"]]]},{"name":"type","description":"Move to folder or home\n* `FOLDER`: 1\n* `HOME`: 2","type":[[["string"]],[["number"]]]},{"name":"folderID","description":"If you want to move to folder","type":[[["string"]],[["number"]],[["void"]],[["null"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1280,"file":"Guild.js","path":"src/structures"}},{"name":"setPublicUpdatesChannel","description":"Edits the community updates channel of the guild.","examples":["// Edit the guild community updates channel\nguild.setPublicUpdatesChannel(channel)\n .then(updated => console.log(`Updated guild community updates channel to ${guild.publicUpdatesChannel.name}`))\n .catch(console.error);"],"params":[{"name":"publicUpdatesChannel","description":"The new community updates channel","nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's community updates channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1319,"file":"Guild.js","path":"src/structures"}},{"name":"setPreferredLocale","description":"Edits the preferred locale of the guild.","examples":["// Edit the guild preferred locale\nguild.setPreferredLocale('en-US')\n .then(updated => console.log(`Updated guild preferred locale to ${guild.preferredLocale}`))\n .catch(console.error);"],"params":[{"name":"preferredLocale","description":"The new preferred locale of the guild","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild's preferred locale","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1334,"file":"Guild.js","path":"src/structures"}},{"name":"setSafetyAlertsChannel","description":"Edits the safety alerts channel of the guild.","examples":["// Edit the guild safety alerts channel\nguild.setSafetyAlertsChannel(channel)\n .then(updated => console.log(`Updated guild safety alerts channel to ${updated.safetyAlertsChannel.name}`))\n .catch(console.error);"],"params":[{"name":"safetyAlertsChannel","description":"The new safety alerts channel","nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's safety alerts channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1349,"file":"Guild.js","path":"src/structures"}},{"name":"setPremiumProgressBarEnabled","description":"Edits the enabled state of the guild's premium progress bar.","params":[{"name":"enabled","description":"The new enabled state of the guild's premium progress bar","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the state of the guild's premium progress bar","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1359,"file":"Guild.js","path":"src/structures"}},{"name":"setChannelPositions","description":"Batch-updates the guild's channels' positions.\nOnly one channel's parent can be changed at a time.","examples":["guild.setChannelPositions([{ channel: channelId, position: newChannelIndex }])\n .then(guild => console.log(`Updated channel positions for ${guild}`))\n .catch(console.error);"],"deprecated":"Use {@link GuildChannelManager#setPositions} instead","params":[{"name":"channelPositions","description":"Channel positions to update","type":[[["Array","<"],["ChannelPosition",">"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1390,"file":"Guild.js","path":"src/structures"}},{"name":"setRolePositions","description":"Batch-updates the guild's role positions.","examples":["guild.setRolePositions([{ role: roleId, position: updatedRoleIndex }])\n .then(guild => console.log(`Role positions updated for ${guild}`))\n .catch(console.error);"],"deprecated":"Use {@link RoleManager#setPositions} instead","params":[{"name":"rolePositions","description":"Role positions to update","type":[[["Array","<"],["GuildRolePosition",">"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1420,"file":"Guild.js","path":"src/structures"}},{"name":"setWidgetSettings","description":"Edits the guild's widget settings.","params":[{"name":"settings","description":"The widget settings for the guild","type":[[["GuildWidgetSettingsData"]]]},{"name":"reason","description":"Reason for changing the guild's widget settings","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1439,"file":"Guild.js","path":"src/structures"}},{"name":"disableInvites","description":"Sets whether this guild's invites are disabled.","params":[{"name":"disabled","description":"Whether the invites are disabled","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1454,"file":"Guild.js","path":"src/structures"}},{"name":"leave","description":"Leaves the guild.","examples":["// Leave a guild\nguild.leave()\n .then(guild => console.log(`Left the guild ${guild.name}`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1469,"file":"Guild.js","path":"src/structures"}},{"name":"read","description":"Marks the guild as read.","examples":["const guild = client.guilds.fetch('222078108977594368');\nguild.read();"],"async":true,"returns":{"types":[[["Promise","<"],["undefined",">"]]],"description":"nothing :)"},"meta":{"line":1482,"file":"Guild.js","path":"src/structures"}},{"name":"delete","description":"Deletes the guild.","examples":["// Delete a guild\nguild.delete()\n .then(guild => console.log(`Deleted the guild ${guild.name}`))\n .catch(console.error);"],"params":[{"name":"mfaCode","description":"The MFA code for the guild owner","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1496,"file":"Guild.js","path":"src/structures"}},{"name":"equals","description":"Whether this guild equals another guild. It compares all properties, so for most operations\nit is advisable to just compare `guild.id === guild2.id` as it is much faster and is often\nwhat most users need.","params":[{"name":"guild","description":"The guild to compare with","type":[[["Guild"]]]}],"returns":[[["boolean"]]],"meta":{"line":1511,"file":"Guild.js","path":"src/structures"}},{"name":"setCommunity","description":"Set Community Feature.","params":[{"name":"stats","description":"True / False to enable / disable Community Feature","default":true,"type":[[["boolean"]]]},{"name":"publicUpdatesChannel","description":"The community updates channel of the guild","default":"1","type":[[["TextChannelResolvable"]]]},{"name":"rulesChannel","description":"The new rules channel","default":"1","type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for changing the community feature","type":[[["string"]]]}],"async":true,"meta":{"line":1538,"file":"Guild.js","path":"src/structures"}},{"name":"addIntegration","description":"Add Integrations to the guild.","params":[{"name":"applicationId","description":"Application (ID) target","type":[[["Snowflake"]]]}],"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":1576,"file":"Guild.js","path":"src/structures"}},{"name":"addBot","description":"Add Bot to the guild.","params":[{"name":"bot","description":"BotId / ApplicationId","type":[[["UserResolvable"]]]},{"name":"permissions","description":"Permissions","nullable":true,"type":[[["PermissionResolvable"]]]}],"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":1600,"file":"Guild.js","path":"src/structures"}},{"name":"setVanityCode","description":"Set the vanity URL to this guild.\nResolves with an object containing the vanity URL invite code and the use count.","examples":["// Set invite code\nguild.setVanityCode('elysia')\n .then(res => {\n console.log(`Vanity URL: https://discord.gg/${res.code} with ${res.uses} uses`);\n })\n .catch(console.error);"],"params":[{"name":"code","description":"Vanity URL code","optional":true,"default":"''","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Vanity",">"]]],"meta":{"line":1641,"file":"Guild.js","path":"src/structures"}},{"name":"topEmojis","description":"Get the top emojis of this guild.","returns":[[["Promise","<"],["Collection","<"],["number",", "],["GuildEmoji",">>"]]],"meta":{"line":1693,"file":"Guild.js","path":"src/structures"}},{"name":"_sortedRoles","description":"Creates a collection of this guild's roles, sorted by their position and ids.","access":"private","returns":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":1714,"file":"Guild.js","path":"src/structures"}},{"name":"_sortedChannels","description":"Creates a collection of this guild's or a specific category's channels, sorted by their position and ids.","access":"private","params":[{"name":"channel","description":"Category to get the channels of","optional":true,"type":[[["GuildChannel"]]]}],"returns":[[["Collection","<"],["Snowflake",", "],["GuildChannel",">"]]],"meta":{"line":1724,"file":"Guild.js","path":"src/structures"}},{"name":"bannerURL","description":"The URL to this guild's banner.","inherits":"AnonymousGuild#bannerURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":84,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"splashURL","description":"The URL to this guild's invite splash image.","inherits":"AnonymousGuild#splashURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"iconURL","description":"The URL to this guild's icon.","inherits":"BaseGuild#iconURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"BaseGuild.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this guild.","inherits":"BaseGuild#fetch","inherited":true,"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":102,"file":"BaseGuild.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the guild's name instead of the Guild object.","inherits":"BaseGuild#toString","inherited":true,"returns":[[["string"]]],"meta":{"line":111,"file":"BaseGuild.js","path":"src/structures"}}],"meta":{"line":58,"file":"Guild.js","path":"src/structures"}},{"name":"GuildAuditLogs","description":"Audit logs entries are held in this class.","props":[{"name":"webhooks","description":"Cached webhooks","access":"private","type":[[["Collection","<"],["Snowflake",", "],["Webhook",">"]]],"meta":{"line":197,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"integrations","description":"Cached integrations","access":"private","type":[[["Collection","<("],["Snowflake","|"],["string","), "],["Integration",">"]]],"meta":{"line":209,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"applicationCommands","description":"Cached application commands, includes application commands from other applications","access":"private","type":[[["Collection","<"],["Snowflake",", "],["ApplicationCommand",">"]]],"meta":{"line":221,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"autoModerationRules","description":"Cached auto moderation rules.","access":"private","type":[[["Collection","<"],["Snowflake",", "],["AutoModerationRule",">"]]],"meta":{"line":233,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"entries","description":"The entries for this guild's audit logs","type":[[["Collection","<"],["Snowflake",", "],["GuildAuditLogsEntry",">"]]],"meta":{"line":243,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"Targets","description":"Key mirror of all available audit log targets.","scope":"static","type":[[["Object","<"],["string",", "],["string",">"]]],"meta":{"line":36,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"Actions","description":"All available actions keyed under their names to their numeric values.","scope":"static","type":[[["Object","<"],["string",", "],["number",">"]]],"meta":{"line":122,"file":"GuildAuditLogs.js","path":"src/structures"}}],"methods":[{"name":"build","description":"Handles possible promises for entry targets.","scope":"static","async":true,"returns":[[["Promise","<"],["GuildAuditLogs",">"]]],"meta":{"line":254,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"targetType","description":"Finds the target type from the entry action.","scope":"static","params":[{"name":"target","description":"The action target","type":[[["AuditLogAction"]]]}],"returns":[[["AuditLogTargetType"]]],"meta":{"line":288,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"actionType","description":"Finds the action type from the entry action.","scope":"static","params":[{"name":"action","description":"The action target","type":[[["AuditLogAction"]]]}],"returns":[[["AuditLogActionType"]]],"meta":{"line":321,"file":"GuildAuditLogs.js","path":"src/structures"}}],"meta":{"line":188,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"GuildAuditLogsEntry","description":"Audit logs entry.","props":[{"name":"targetType","description":"The target type of this entry","type":[[["AuditLogTargetType"]]],"meta":{"line":413,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"actionType","description":"The action type of this entry","type":[[["AuditLogActionType"]]],"meta":{"line":419,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"action","description":"Specific action type of this entry in its string presentation","type":[[["AuditLogAction"]]],"meta":{"line":425,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"reason","description":"The reason of this entry","nullable":true,"type":[[["string"]]],"meta":{"line":431,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"executorId","description":"The id of the user that executed this entry","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":437,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"executor","description":"The user that executed this entry","nullable":true,"type":[[["User"]]],"meta":{"line":443,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"changes","description":"Specific property changes","type":[[["Array","<"],["AuditLogChange",">"]]],"meta":{"line":461,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"id","description":"The entry's id","type":[[["Snowflake"]]],"meta":{"line":467,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"extra","description":"Any extra data from the entry","nullable":true,"type":[[["Object"]],[["Role"]],[["GuildMember"]]],"meta":{"line":473,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"targetId","description":"The id of the target of this entry","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":561,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"target","description":"The target of this entry","nullable":true,"type":[[["AuditLogEntryTarget"]]],"meta":{"line":567,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this entry was created at","readonly":true,"type":[[["number"]]],"meta":{"line":712,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"createdAt","description":"The time this entry was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":721,"file":"GuildAuditLogs.js","path":"src/structures"}}],"meta":{"line":406,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"GuildBan","description":"Represents a ban in a guild on Discord.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild in which the ban is","type":[[["Guild"]]],"meta":{"line":17,"file":"GuildBan.js","path":"src/structures"}},{"name":"user","description":"The user this ban applies to","type":[[["User"]]],"meta":{"line":28,"file":"GuildBan.js","path":"src/structures"}},{"name":"reason","description":"The reason for the ban","nullable":true,"type":[[["string"]]],"meta":{"line":36,"file":"GuildBan.js","path":"src/structures"}},{"name":"partial","description":"Whether this GuildBan is partial. If the reason is not provided the value is null","readonly":true,"type":[[["boolean"]]],"meta":{"line":45,"file":"GuildBan.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"fetch","description":"Fetches this GuildBan.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["GuildBan",">"]]],"meta":{"line":54,"file":"GuildBan.js","path":"src/structures"}}],"meta":{"line":9,"file":"GuildBan.js","path":"src/structures"}},{"name":"GuildBoost","description":"Represents a guild boost in a guild on Discord.","extends":[[["Base"]]],"props":[{"name":"id","description":"The id of the guild boost","type":[[["Snowflake"]]],"meta":{"line":21,"file":"GuildBoost.js","path":"src/structures"}},{"name":"subscriptionId","description":"The id of the subscription","type":[[["Snowflake"]]],"meta":{"line":28,"file":"GuildBoost.js","path":"src/structures"}},{"name":"premiumGuildSubscriptionId","description":"The premium guild subscription id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":35,"file":"GuildBoost.js","path":"src/structures"}},{"name":"guildId","description":"Guild id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":40,"file":"GuildBoost.js","path":"src/structures"}},{"name":"ended","description":"Ended ???","nullable":true,"type":[[["boolean"]]],"meta":{"line":45,"file":"GuildBoost.js","path":"src/structures"}},{"name":"canceled","description":"Whether the subscription is canceled","type":[[["boolean"]]],"meta":{"line":52,"file":"GuildBoost.js","path":"src/structures"}},{"name":"cooldownEndsAt","description":"The cooldown end date","type":[[["Date"]]],"meta":{"line":59,"file":"GuildBoost.js","path":"src/structures"}},{"name":"guilld","description":"The guild of the boost","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":67,"file":"GuildBoost.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"unsubscribe","description":"Cancel the boost","async":true,"returns":[[["Promise","<"],["GuildBoost",">"]]],"meta":{"line":75,"file":"GuildBoost.js","path":"src/structures"}},{"name":"subscribe","description":"Use the boost","params":[{"name":"guild","description":"The guild to use the boost on","type":[[["GuildResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["GuildBoost",">"]]],"meta":{"line":91,"file":"GuildBoost.js","path":"src/structures"}}],"meta":{"line":9,"file":"GuildBoost.js","path":"src/structures"}},{"name":"GuildChannel","description":"Represents a guild channel from any of the following:\n- {@link TextChannel}\n- {@link VoiceChannel}\n- {@link CategoryChannel}\n- {@link NewsChannel}\n- {@link StoreChannel}\n- {@link StageChannel}\n- {@link ForumChannel}","extends":[[["Channel"]]],"abstract":true,"props":[{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":274,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":22,"file":"GuildChannel.js","path":"src/structures"}},{"name":"GuildEmoji","description":"Represents a custom emoji.","extends":[[["BaseGuildEmoji"]]],"props":[{"name":"author","description":"The user who created this emoji","nullable":true,"type":[[["User"]]],"meta":{"line":20,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"_roles","description":"Array of role ids this emoji is active for","access":"private","type":[[["Array","<"],["Snowflake",">"]]],"meta":{"line":22,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"guild","description":"The guild this emoji is part of","type":[[["Guild"]]],"meta":{"line":33,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"deletable","description":"Whether the emoji is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":57,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"roles","description":"A manager for roles this emoji is active for.","readonly":true,"type":[[["GuildEmojiRoleManager"]]],"meta":{"line":67,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"requiresColons","description":"Whether or not this emoji requires colons surrounding it","nullable":true,"type":[[["boolean"]]],"meta":{"line":35,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"managed","description":"Whether this emoji is managed by an external service","nullable":true,"type":[[["boolean"]]],"meta":{"line":43,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"available","description":"Whether this emoji is available","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"animated","description":"Whether or not the emoji is animated","nullable":true,"type":[[["boolean"]]],"meta":{"line":34,"file":"Emoji.js","path":"src/structures"}},{"name":"name","description":"The emoji's name","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Emoji.js","path":"src/structures"}},{"name":"id","description":"The emoji's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Emoji.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":54,"file":"Emoji.js","path":"src/structures"}},{"name":"identifier","description":"The identifier of this emoji, used for message reactions","readonly":true,"type":[[["string"]]],"meta":{"line":84,"file":"Emoji.js","path":"src/structures"}},{"name":"url","description":"The URL to the emoji file if it's a custom emoji","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":94,"file":"Emoji.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":103,"file":"Emoji.js","path":"src/structures"}},{"name":"createdAt","description":"The time the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":112,"file":"Emoji.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"fetchAuthor","description":"Fetches the author for this emoji","returns":[[["Promise","<"],["User",">"]]],"meta":{"line":75,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"edit","description":"Edits the emoji.","examples":["// Edit an emoji\nemoji.edit({ name: 'newemoji' })\n .then(e => console.log(`Edited emoji ${e}`))\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the emoji","type":[[["GuildEmojiEditData"]]]},{"name":"reason","description":"Reason for editing this emoji","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":97,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"setName","description":"Sets the name of the emoji.","params":[{"name":"name","description":"The new name for the emoji","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the emoji's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":120,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"delete","description":"Deletes the emoji.","params":[{"name":"reason","description":"Reason for deleting the emoji","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":129,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"equals","description":"Whether this emoji is the same as another one.","params":[{"name":"other","description":"The emoji to compare it to","type":[[["GuildEmoji"]],[["APIEmoji"]]]}],"returns":[[["boolean"]]],"meta":{"line":139,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the text required to form a graphical emoji on Discord\ninstead of the Emoji object.","inherits":"Emoji#toString","inherited":true,"examples":["// Send a custom emoji from a guild:\nconst emoji = guild.emojis.cache.first();\nmsg.channel.send(`Hello! ${emoji}`);","// Send the emoji used in a reaction to the channel the reaction is part of\nreaction.message.channel.send(`The emoji used was: ${reaction.emoji}`);"],"returns":[[["string"]]],"meta":{"line":128,"file":"Emoji.js","path":"src/structures"}}],"meta":{"line":12,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"GuildFolder","description":"Guild Folder.","abstract":true,"props":[{"name":"id","description":"The guild folder's id","type":[[["Snowflake"]]],"meta":{"line":20,"file":"GuildFolder.js","path":"src/structures"}},{"name":"name","description":"The guild folder's name","type":[[["string"]]],"meta":{"line":28,"file":"GuildFolder.js","path":"src/structures"}},{"name":"color","description":"The base 10 color of the folder","type":[[["number"]]],"meta":{"line":36,"file":"GuildFolder.js","path":"src/structures"}},{"name":"guild_ids","description":"The guild folder's guild ids","type":[[["Array","<"],["Snowflake",">"]]],"meta":{"line":44,"file":"GuildFolder.js","path":"src/structures"}},{"name":"hexColor","description":"The hexadecimal version of the folder color, with a leading hashtag","readonly":true,"type":[[["string"]]],"meta":{"line":52,"file":"GuildFolder.js","path":"src/structures"}},{"name":"guilds","description":"Guilds in the folder","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Guild",">"]]],"meta":{"line":61,"file":"GuildFolder.js","path":"src/structures"}}],"meta":{"line":9,"file":"GuildFolder.js","path":"src/structures"}},{"name":"GuildMember","description":"Represents a member of a guild on Discord.","extends":[[["Base"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"guild","description":"The guild that this member is part of","type":[[["Guild"]]],"meta":{"line":34,"file":"GuildMember.js","path":"src/structures"}},{"name":"joinedTimestamp","description":"The timestamp the member joined the guild at","nullable":true,"type":[[["number"]]],"meta":{"line":40,"file":"GuildMember.js","path":"src/structures"}},{"name":"premiumSinceTimestamp","description":"The last timestamp this member started boosting the guild","nullable":true,"type":[[["number"]]],"meta":{"line":46,"file":"GuildMember.js","path":"src/structures"}},{"name":"nickname","description":"The nickname of this member, if they have one","nullable":true,"type":[[["string"]]],"meta":{"line":52,"file":"GuildMember.js","path":"src/structures"}},{"name":"pending","description":"Whether this member has yet to pass the guild's membership gate","type":[[["boolean"]]],"meta":{"line":58,"file":"GuildMember.js","path":"src/structures"}},{"name":"communicationDisabledUntilTimestamp","description":"The timestamp this member's timeout will be removed","nullable":true,"type":[[["number"]]],"meta":{"line":64,"file":"GuildMember.js","path":"src/structures"}},{"name":"_roles","description":"The role ids of the member","access":"private","type":[[["Array","<"],["Snowflake",">"]]],"meta":{"line":71,"file":"GuildMember.js","path":"src/structures"}},{"name":"user","description":"The user that this guild member instance represents","nullable":true,"type":[[["User"]]],"meta":{"line":81,"file":"GuildMember.js","path":"src/structures"}},{"name":"avatar","description":"The guild member's avatar hash","nullable":true,"type":[[["string"]]],"meta":{"line":90,"file":"GuildMember.js","path":"src/structures"}},{"name":"flags","description":"The flags of this member","type":[[["Readonly","<"],["GuildMemberFlags",">"]]],"meta":{"line":111,"file":"GuildMember.js","path":"src/structures"}},{"name":"accentColor","description":"The member's accent color\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["number"]]],"meta":{"line":124,"file":"GuildMember.js","path":"src/structures"}},{"name":"banner","description":"The member's banner hash\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":132,"file":"GuildMember.js","path":"src/structures"}},{"name":"bio","description":"The member's biography (About me)\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":140,"file":"GuildMember.js","path":"src/structures"}},{"name":"themeColors","description":"The member's theme colors (Profile theme) [Primary, Accent]\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["Array","<"],["number",">"]]],"meta":{"line":148,"file":"GuildMember.js","path":"src/structures"}},{"name":"hexThemeColor","description":"The hexadecimal version of the user theme color, with a leading hash [Primary, Accent]\nThe user must be force fetched for this property to be present or be updated","readonly":true,"nullable":true,"type":[[["Array","<"],["string",">"]]],"meta":{"line":158,"file":"GuildMember.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":173,"file":"GuildMember.js","path":"src/structures"}},{"name":"partial","description":"Whether this GuildMember is a partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":203,"file":"GuildMember.js","path":"src/structures"}},{"name":"roles","description":"A manager for the roles belonging to this member","readonly":true,"type":[[["GuildMemberRoleManager"]]],"meta":{"line":212,"file":"GuildMember.js","path":"src/structures"}},{"name":"voice","description":"The voice state of this member","readonly":true,"type":[[["VoiceState"]]],"meta":{"line":221,"file":"GuildMember.js","path":"src/structures"}},{"name":"joinedAt","description":"The time this member joined the guild","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":265,"file":"GuildMember.js","path":"src/structures"}},{"name":"communicationDisabledUntil","description":"The time this member's timeout will be removed","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":274,"file":"GuildMember.js","path":"src/structures"}},{"name":"premiumSince","description":"The last time this member started boosting the guild","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":283,"file":"GuildMember.js","path":"src/structures"}},{"name":"presence","description":"The presence of this guild member","readonly":true,"nullable":true,"type":[[["Presence"]]],"meta":{"line":292,"file":"GuildMember.js","path":"src/structures"}},{"name":"displayColor","description":"The displayed color of this member in base 10","readonly":true,"type":[[["number"]]],"meta":{"line":301,"file":"GuildMember.js","path":"src/structures"}},{"name":"displayHexColor","description":"The displayed color of this member in hexadecimal","readonly":true,"type":[[["string"]]],"meta":{"line":310,"file":"GuildMember.js","path":"src/structures"}},{"name":"id","description":"The member's id","readonly":true,"type":[[["Snowflake"]]],"meta":{"line":319,"file":"GuildMember.js","path":"src/structures"}},{"name":"displayName","description":"The nickname of this member, or their user display name if they don't have one","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":328,"file":"GuildMember.js","path":"src/structures"}},{"name":"permissions","description":"The overall set of permissions for this member, taking only roles and owner status into account","readonly":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":337,"file":"GuildMember.js","path":"src/structures"}},{"name":"manageable","description":"Whether the client user is above this user in the hierarchy, according to role position and guild ownership.\nThis is a prerequisite for many moderative actions.","readonly":true,"type":[[["boolean"]]],"meta":{"line":348,"file":"GuildMember.js","path":"src/structures"}},{"name":"kickable","description":"Whether this member is kickable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":361,"file":"GuildMember.js","path":"src/structures"}},{"name":"bannable","description":"Whether this member is bannable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":370,"file":"GuildMember.js","path":"src/structures"}},{"name":"moderatable","description":"Whether this member is moderatable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":379,"file":"GuildMember.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"avatarURL","description":"A link to the member's guild avatar.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":230,"file":"GuildMember.js","path":"src/structures"}},{"name":"bannerURL","description":"A link to the user's banner.\nThis method will throw an error if called before the user is force fetched Profile.\nSee {@link GuildMember#banner} for more info","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":242,"file":"GuildMember.js","path":"src/structures"}},{"name":"displayAvatarURL","description":"A link to the member's guild avatar if they have one.\nOtherwise, a link to their {@link User#displayAvatarURL} will be returned.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":[[["string"]]],"meta":{"line":256,"file":"GuildMember.js","path":"src/structures"}},{"name":"isCommunicationDisabled","description":"Whether this member is currently timed out","returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildMember.js","path":"src/structures"}},{"name":"permissionsIn","description":"Returns `channel.permissionsFor(guildMember)`. Returns permissions for a member in a guild channel,\ntaking into account roles and permission overwrites.","params":[{"name":"channel","description":"The guild channel to use as context","type":[[["GuildChannelResolvable"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":401,"file":"GuildMember.js","path":"src/structures"}},{"name":"edit","description":"Edits this member.","params":[{"name":"data","description":"The data to edit the member with","type":[[["GuildMemberEditData"]]]},{"name":"reason","description":"Reason for editing this user","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":413,"file":"GuildMember.js","path":"src/structures"}},{"name":"setNickname","description":"Sets the nickname for this member.","examples":["// Set a nickname for a guild member\nguildMember.setNickname('cool nickname', 'Needed a new nickname')\n .then(member => console.log(`Set nickname of ${member.user.username}`))\n .catch(console.error);","// Remove a nickname for a guild member\nguildMember.setNickname(null, 'No nicknames allowed!')\n .then(member => console.log(`Removed nickname for ${member.user.username}`))\n .catch(console.error);"],"params":[{"name":"nick","description":"The nickname for the guild member, or `null` if you want to reset their nickname","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for setting the nickname","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":433,"file":"GuildMember.js","path":"src/structures"}},{"name":"setFlags","description":"Sets the flags for this member.","params":[{"name":"flags","description":"The flags to set","type":[[["GuildMemberFlagsResolvable"]]]},{"name":"reason","description":"Reason for setting the flags","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":443,"file":"GuildMember.js","path":"src/structures"}},{"name":"setAvatar","description":"Sets the guild avatar of the logged in client.","params":[{"name":"avatar","description":"The new avatar","nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":452,"file":"GuildMember.js","path":"src/structures"}},{"name":"setBanner","description":"Sets the guild banner of the logged in client.","params":[{"name":"banner","description":"The new banner","nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":467,"file":"GuildMember.js","path":"src/structures"}},{"name":"setAboutMe","description":"Set Guild About me","params":[{"name":"bio","description":"Bio to set","default":null,"type":[[["string"]],[["null"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":482,"file":"GuildMember.js","path":"src/structures"}},{"name":"setThemeColors","description":"Change Theme color","params":[{"name":"primary","description":"The primary color of the user's profile","type":[[["ColorResolvable"]]]},{"name":"accent","description":"The accent color of the user's profile","type":[[["ColorResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":498,"file":"GuildMember.js","path":"src/structures"}},{"name":"createDM","description":"Creates a DM channel between the client and this member.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":525,"file":"GuildMember.js","path":"src/structures"}},{"name":"deleteDM","description":"Deletes any DMs with this member.","returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":533,"file":"GuildMember.js","path":"src/structures"}},{"name":"kick","description":"Kicks this member from the guild.","params":[{"name":"reason","description":"Reason for kicking user","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":542,"file":"GuildMember.js","path":"src/structures"}},{"name":"ban","description":"Bans this guild member.","examples":["// Ban a guild member, deleting a week's worth of messages\nguildMember.ban({ deleteMessageSeconds: 60 * 60 * 24 * 7, reason: 'They deserved it' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for the ban","optional":true,"type":[[["BanOptions"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":556,"file":"GuildMember.js","path":"src/structures"}},{"name":"disableCommunicationUntil","description":"Times this guild member out.","examples":["// Time a guild member out for 5 minutes\nguildMember.disableCommunicationUntil(Date.now() + (5 * 60 * 1000), 'They deserved it')\n .then(console.log)\n .catch(console.error);","// Remove the timeout of a guild member\nguildMember.disableCommunicationUntil(null)\n .then(member => console.log(`Removed timeout for ${member.displayName}`))\n .catch(console.error);"],"params":[{"name":"communicationDisabledUntil","description":"The date or timestamp\nfor the member's communication to be disabled until. Provide `null` to remove the timeout.","type":[[["DateResolvable"]],[["null"]]]},{"name":"reason","description":"The reason for this timeout.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":577,"file":"GuildMember.js","path":"src/structures"}},{"name":"timeout","description":"Times this guild member out.","examples":["// Time a guild member out for 5 minutes\nguildMember.timeout(5 * 60 * 1000, 'They deserved it')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"timeout","description":"The time in milliseconds\nfor the member's communication to be disabled until. Provide `null` to remove the timeout.","type":[[["number"]],[["null"]]]},{"name":"reason","description":"The reason for this timeout.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":593,"file":"GuildMember.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this GuildMember.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":602,"file":"GuildMember.js","path":"src/structures"}},{"name":"equals","description":"Whether this guild member equals another guild member. It compares all properties, so for most\ncomparison it is advisable to just compare `member.id === member2.id` as it is significantly faster\nand is often what most users need.","params":[{"name":"member","description":"The member to compare with","type":[[["GuildMember"]]]}],"returns":[[["boolean"]]],"meta":{"line":613,"file":"GuildMember.js","path":"src/structures"}},{"name":"getProfile","description":"Get profile guildMember","returns":[[["Promise","<"],["User",">"]]],"meta":{"line":636,"file":"GuildMember.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the user's mention instead of the GuildMember object.","examples":["// Logs: Hello from <@123456789012345678>!\nconsole.log(`Hello from ${member}!`);"],"returns":[[["string"]]],"meta":{"line":647,"file":"GuildMember.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this user.","implements":["TextBasedChannel#send"],"examples":["// Send a direct message\nguildMember.send('Hello!')\n .then(message => console.log(`Sent message: ${message.content} to ${guildMember.displayName}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":664,"file":"GuildMember.js","path":"src/structures"}}],"meta":{"line":26,"file":"GuildMember.js","path":"src/structures"}},{"name":"GuildPreview","description":"Represents the data about the guild any bot can preview, connected to the specified guild.","extends":[[["Base"]]],"props":[{"name":"id","description":"The id of this guild","type":[[["string"]]],"meta":{"line":27,"file":"GuildPreview.js","path":"src/structures"}},{"name":"name","description":"The name of this guild","type":[[["string"]]],"meta":{"line":34,"file":"GuildPreview.js","path":"src/structures"}},{"name":"icon","description":"The icon of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":42,"file":"GuildPreview.js","path":"src/structures"}},{"name":"splash","description":"The splash icon of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":50,"file":"GuildPreview.js","path":"src/structures"}},{"name":"discoverySplash","description":"The discovery splash icon of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":58,"file":"GuildPreview.js","path":"src/structures"}},{"name":"features","description":"An array of enabled guild features","type":[[["Array","<"],["Features",">"]]],"meta":{"line":66,"file":"GuildPreview.js","path":"src/structures"}},{"name":"approximateMemberCount","description":"The approximate count of members in this guild","type":[[["number"]]],"meta":{"line":74,"file":"GuildPreview.js","path":"src/structures"}},{"name":"approximatePresenceCount","description":"The approximate count of online members in this guild","type":[[["number"]]],"meta":{"line":82,"file":"GuildPreview.js","path":"src/structures"}},{"name":"description","description":"The description for this guild","nullable":true,"type":[[["string"]]],"meta":{"line":90,"file":"GuildPreview.js","path":"src/structures"}},{"name":"emojis","description":"Collection of emojis belonging to this guild","type":[[["Collection","<"],["Snowflake",", "],["GuildPreviewEmoji",">"]]],"meta":{"line":100,"file":"GuildPreview.js","path":"src/structures"}},{"name":"stickers","description":"Collection of stickers belonging to this guild","type":[[["Collection","<"],["Snowflake",", "],["Sticker",">"]]],"meta":{"line":112,"file":"GuildPreview.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this guild was created at","readonly":true,"type":[[["number"]]],"meta":{"line":122,"file":"GuildPreview.js","path":"src/structures"}},{"name":"createdAt","description":"The time this guild was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":131,"file":"GuildPreview.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"splashURL","description":"The URL to this guild's splash.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":140,"file":"GuildPreview.js","path":"src/structures"}},{"name":"discoverySplashURL","description":"The URL to this guild's discovery splash.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":149,"file":"GuildPreview.js","path":"src/structures"}},{"name":"iconURL","description":"The URL to this guild's icon.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":158,"file":"GuildPreview.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this guild.","async":true,"returns":[[["Promise","<"],["GuildPreview",">"]]],"meta":{"line":166,"file":"GuildPreview.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the guild's name instead of the Guild object.","examples":["// Logs: Hello from My Guild!\nconsole.log(`Hello from ${previewGuild}!`);"],"returns":[[["string"]]],"meta":{"line":179,"file":"GuildPreview.js","path":"src/structures"}}],"meta":{"line":13,"file":"GuildPreview.js","path":"src/structures"}},{"name":"GuildPreviewEmoji","description":"Represents an instance of an emoji belonging to a public guild obtained through Discord's preview endpoint.","extends":[[["BaseGuildEmoji"]]],"props":[{"name":"guild","description":"The public guild this emoji is part of","type":[[["GuildPreview"]]],"meta":{"line":10,"file":"GuildPreviewEmoji.js","path":"src/structures"}},{"name":"roles","description":"The roles this emoji is active for","type":[[["Array","<"],["Snowflake",">"]]],"meta":{"line":23,"file":"GuildPreviewEmoji.js","path":"src/structures"}},{"name":"requiresColons","description":"Whether or not this emoji requires colons surrounding it","nullable":true,"type":[[["boolean"]]],"meta":{"line":35,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"managed","description":"Whether this emoji is managed by an external service","nullable":true,"type":[[["boolean"]]],"meta":{"line":43,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"available","description":"Whether this emoji is available","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"animated","description":"Whether or not the emoji is animated","nullable":true,"type":[[["boolean"]]],"meta":{"line":34,"file":"Emoji.js","path":"src/structures"}},{"name":"name","description":"The emoji's name","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Emoji.js","path":"src/structures"}},{"name":"id","description":"The emoji's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Emoji.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":54,"file":"Emoji.js","path":"src/structures"}},{"name":"identifier","description":"The identifier of this emoji, used for message reactions","readonly":true,"type":[[["string"]]],"meta":{"line":84,"file":"Emoji.js","path":"src/structures"}},{"name":"url","description":"The URL to the emoji file if it's a custom emoji","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":94,"file":"Emoji.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":103,"file":"Emoji.js","path":"src/structures"}},{"name":"createdAt","description":"The time the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":112,"file":"Emoji.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the text required to form a graphical emoji on Discord\ninstead of the Emoji object.","inherits":"Emoji#toString","inherited":true,"examples":["// Send a custom emoji from a guild:\nconst emoji = guild.emojis.cache.first();\nmsg.channel.send(`Hello! ${emoji}`);","// Send the emoji used in a reaction to the channel the reaction is part of\nreaction.message.channel.send(`The emoji used was: ${reaction.emoji}`);"],"returns":[[["string"]]],"meta":{"line":128,"file":"Emoji.js","path":"src/structures"}}],"meta":{"line":9,"file":"GuildPreviewEmoji.js","path":"src/structures"}},{"name":"GuildScheduledEvent","description":"Represents a scheduled event in a {@link Guild}.","extends":[[["Base"]]],"props":[{"name":"id","description":"The id of the guild scheduled event","type":[[["Snowflake"]]],"meta":{"line":25,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this guild scheduled event belongs to","type":[[["Snowflake"]]],"meta":{"line":31,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"channelId","description":"The channel id in which the scheduled event will be hosted, or `null` if entity type is `EXTERNAL`","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":42,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"creatorId","description":"The id of the user that created this guild scheduled event","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"name","description":"The name of the guild scheduled event","type":[[["string"]]],"meta":{"line":61,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"description","description":"The description of the guild scheduled event","nullable":true,"type":[[["string"]]],"meta":{"line":68,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"scheduledStartTimestamp","description":"The timestamp the guild scheduled event will start at\nThis can be potentially `null` only when it's an {@link AuditLogEntryTarget}","nullable":true,"type":[[["number"]]],"meta":{"line":78,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"scheduledEndTimestamp","description":"The timestamp the guild scheduled event will end at,\nor `null` if the event does not have a scheduled time to end","nullable":true,"type":[[["number"]]],"meta":{"line":85,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"privacyLevel","description":"The privacy level of the guild scheduled event","type":[[["PrivacyLevel"]]],"meta":{"line":91,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"status","description":"The status of the guild scheduled event","type":[[["GuildScheduledEventStatus"]]],"meta":{"line":97,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"entityType","description":"The type of hosting entity associated with the scheduled event","type":[[["GuildScheduledEventEntityType"]]],"meta":{"line":103,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"entityId","description":"The id of the hosting entity associated with the scheduled event","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":110,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"userCount","description":"The number of users who are subscribed to this guild scheduled event","nullable":true,"type":[[["number"]]],"meta":{"line":120,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"creator","description":"The user that created this guild scheduled event","nullable":true,"type":[[["User"]]],"meta":{"line":130,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"entityMetadata","description":"Additional metadata","nullable":true,"type":[[["GuildScheduledEventEntityMetadata"]]],"meta":{"line":150,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"image","description":"The cover image hash for this scheduled event","nullable":true,"type":[[["string"]]],"meta":{"line":165,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the guild scheduled event was created at","readonly":true,"type":[[["number"]]],"meta":{"line":185,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"createdAt","description":"The time the guild scheduled event was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":194,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"scheduledStartAt","description":"The time the guild scheduled event will start at","readonly":true,"type":[[["Date"]]],"meta":{"line":203,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"scheduledEndAt","description":"The time the guild scheduled event will end at,\nor `null` if the event does not have a scheduled time to end","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":213,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"channel","description":"The channel associated with this scheduled event","readonly":true,"nullable":true,"type":[[["VoiceChannel"]],[["StageChannel"]]],"meta":{"line":222,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"guild","description":"The guild this scheduled event belongs to","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":231,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"url","description":"The URL to the guild scheduled event","readonly":true,"type":[[["string"]]],"meta":{"line":240,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"coverImageURL","description":"The URL of this scheduled event's cover image","params":[{"name":"options","description":"Options for image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":176,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"createInviteURL","description":"Creates an invite URL to this guild scheduled event.","params":[{"name":"options","description":"The options to create the invite","optional":true,"type":[[["CreateGuildScheduledEventInviteURLOptions"]]]}],"async":true,"returns":[[["Promise","<"],["string",">"]]],"meta":{"line":256,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"edit","description":"Edits this guild scheduled event.","examples":["// Edit a guild scheduled event\nguildScheduledEvent.edit({ name: 'Party' })\n .then(guildScheduledEvent => console.log(guildScheduledEvent))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to edit the guild scheduled event","type":[[["GuildScheduledEventEditOptions"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":277,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"delete","description":"Deletes this guild scheduled event.","examples":["// Delete a guild scheduled event\nguildScheduledEvent.delete()\n .then(guildScheduledEvent => console.log(guildScheduledEvent))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":290,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild scheduled event.","examples":["// Set name of a guild scheduled event\nguildScheduledEvent.setName('Birthday Party')\n .then(guildScheduledEvent => console.log(`Set the name to: ${guildScheduledEvent.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name of the guild scheduled event","type":[[["string"]]]},{"name":"reason","description":"The reason for changing the name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":306,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"setScheduledStartTime","description":"Sets a new time to schedule the event at.","examples":["// Set start time of a guild scheduled event\nguildScheduledEvent.setScheduledStartTime('2022-09-24T00:00:00+05:30')\n .then(guildScheduledEvent => console.log(`Set the start time to: ${guildScheduledEvent.scheduledStartTime}`))\n .catch(console.error);"],"params":[{"name":"scheduledStartTime","description":"The time to schedule the event at","type":[[["DateResolvable"]]]},{"name":"reason","description":"The reason for changing the scheduled start time","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":321,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"setScheduledEndTime","description":"Sets a new time to end the event at.","examples":["// Set end time of a guild scheduled event\nguildScheduledEvent.setScheduledEndTime('2022-09-25T00:00:00+05:30')\n .then(guildScheduledEvent => console.log(`Set the end time to: ${guildScheduledEvent.scheduledEndTime}`))\n .catch(console.error);"],"params":[{"name":"scheduledEndTime","description":"The time to end the event at","type":[[["DateResolvable"]]]},{"name":"reason","description":"The reason for changing the scheduled end time","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":337,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"setDescription","description":"Sets the new description of the guild scheduled event.","examples":["// Set description of a guild scheduled event\nguildScheduledEvent.setDescription('A virtual birthday party')\n .then(guildScheduledEvent => console.log(`Set the description to: ${guildScheduledEvent.description}`))\n .catch(console.error);"],"params":[{"name":"description","description":"The description of the guild scheduled event","type":[[["string"]]]},{"name":"reason","description":"The reason for changing the description","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":352,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"setStatus","description":"Sets the new status of the guild scheduled event.\nIf you're working with TypeScript, use this method in conjunction with status type-guards\nlike {@link GuildScheduledEvent#isScheduled} to get only valid status as suggestion","examples":["// Set status of a guild scheduled event\nguildScheduledEvent.setStatus('ACTIVE')\n .then(guildScheduledEvent => console.log(`Set the status to: ${guildScheduledEvent.status}`))\n .catch(console.error);"],"params":[{"name":"status","description":"The status of the guild scheduled event","type":[[["GuildScheduledEventStatus"]],[["number"]]]},{"name":"reason","description":"The reason for changing the status","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":369,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"setLocation","description":"Sets the new location of the guild scheduled event.","examples":["// Set location of a guild scheduled event\nguildScheduledEvent.setLocation('Earth')\n .then(guildScheduledEvent => console.log(`Set the location to: ${guildScheduledEvent.entityMetadata.location}`))\n .catch(console.error);"],"params":[{"name":"location","description":"The location of the guild scheduled event","type":[[["string"]]]},{"name":"reason","description":"The reason for changing the location","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":384,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"fetchSubscribers","description":"Fetches subscribers of this guild scheduled event.","params":[{"name":"options","description":"Options for fetching the subscribers","optional":true,"type":[[["FetchGuildScheduledEventSubscribersOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["GuildScheduledEventUser",">>"]]],"meta":{"line":393,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically concatenates the event's URL instead of the object.","examples":["// Logs: Event: https://discord.com/events/412345678901234567/499876543211234567\nconsole.log(`Event: ${guildScheduledEvent}`);"],"returns":[[["string"]]],"meta":{"line":404,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"isActive","description":"Indicates whether this guild scheduled event has an `ACTIVE` status.","returns":[[["boolean"]]],"meta":{"line":412,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"isCanceled","description":"Indicates whether this guild scheduled event has a `CANCELED` status.","returns":[[["boolean"]]],"meta":{"line":420,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"isCompleted","description":"Indicates whether this guild scheduled event has a `COMPLETED` status.","returns":[[["boolean"]]],"meta":{"line":428,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"isScheduled","description":"Indicates whether this guild scheduled event has a `SCHEDULED` status.","returns":[[["boolean"]]],"meta":{"line":436,"file":"GuildScheduledEvent.js","path":"src/structures"}}],"meta":{"line":17,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"GuildTemplate","description":"Represents the template for a guild.","extends":[[["Base"]]],"props":[{"name":"code","description":"The unique code of this template","type":[[["string"]]],"meta":{"line":24,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"name","description":"The name of this template","type":[[["string"]]],"meta":{"line":32,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"description","description":"The description of this template","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"usageCount","description":"The amount of times this template has been used","type":[[["number"]]],"meta":{"line":48,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"creatorId","description":"The id of the user that created this template","type":[[["Snowflake"]]],"meta":{"line":56,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"creator","description":"The user that created this template","type":[[["User"]]],"meta":{"line":64,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"createdAt","description":"The time when this template was created at","type":[[["Date"]]],"meta":{"line":72,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"updatedAt","description":"The time when this template was last synced to the guild","type":[[["Date"]]],"meta":{"line":80,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild that this template belongs to","type":[[["Snowflake"]]],"meta":{"line":88,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"serializedGuild","description":"The data of the guild that this template would create","type":[[["APIGuild"]]],"meta":{"line":96,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"unSynced","description":"Whether this template has unsynced changes","nullable":true,"type":[[["boolean"]]],"meta":{"line":103,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp of when this template was created at","readonly":true,"type":[[["number"]]],"meta":{"line":187,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"updatedTimestamp","description":"The timestamp of when this template was last synced to the guild","readonly":true,"type":[[["number"]]],"meta":{"line":196,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"guild","description":"The guild that this template belongs to","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":205,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"url","description":"The URL of this template","readonly":true,"type":[[["string"]]],"meta":{"line":214,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}},{"name":"GUILD_TEMPLATES_PATTERN","description":"Regular expression that globally matches guild template links","scope":"static","type":[[["RegExp"]]],"meta":{"line":234,"file":"GuildTemplate.js","path":"src/structures"}}],"methods":[{"name":"createGuild","description":"Creates a guild based on this template.\nThis is only available to bots in fewer than 10 guilds.","params":[{"name":"name","description":"The name of the guild","type":[[["string"]]]},{"name":"icon","description":"The icon for the guild","optional":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":115,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"edit","description":"Updates the metadata of this template.","params":[{"name":"options","description":"Options for editing the template","optional":true,"type":[[["EditGuildTemplateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["GuildTemplate",">"]]],"meta":{"line":159,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"delete","description":"Deletes this template.","async":true,"returns":[[["Promise","<"],["GuildTemplate",">"]]],"meta":{"line":168,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"sync","description":"Syncs this template to the current state of the guild.","async":true,"returns":[[["Promise","<"],["GuildTemplate",">"]]],"meta":{"line":177,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the template's code instead of the template object.","examples":["// Logs: Template: FKvmczH2HyUf\nconsole.log(`Template: ${guildTemplate}!`);"],"returns":[[["string"]]],"meta":{"line":225,"file":"GuildTemplate.js","path":"src/structures"}}],"meta":{"line":12,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"Integration","description":"Represents a guild integration.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild this integration belongs to","type":[[["Guild"]]],"meta":{"line":34,"file":"Integration.js","path":"src/structures"}},{"name":"id","description":"The integration id","type":[[["Snowflake"]],[["string"]]],"meta":{"line":40,"file":"Integration.js","path":"src/structures"}},{"name":"name","description":"The integration name","type":[[["string"]]],"meta":{"line":46,"file":"Integration.js","path":"src/structures"}},{"name":"type","description":"The integration type","type":[[["IntegrationType"]]],"meta":{"line":52,"file":"Integration.js","path":"src/structures"}},{"name":"enabled","description":"Whether this integration is enabled","type":[[["boolean"]]],"meta":{"line":58,"file":"Integration.js","path":"src/structures"}},{"name":"syncing","description":"Whether this integration is syncing","nullable":true,"type":[[["boolean"]]],"meta":{"line":64,"file":"Integration.js","path":"src/structures"}},{"name":"role","description":"The role that this integration uses for subscribers","nullable":true,"type":[[["Role"]]],"meta":{"line":70,"file":"Integration.js","path":"src/structures"}},{"name":"enableEmoticons","description":"Whether emoticons should be synced for this integration (twitch only currently)","nullable":true,"type":[[["boolean"]]],"meta":{"line":77,"file":"Integration.js","path":"src/structures"}},{"name":"user","description":"The user for this integration","nullable":true,"type":[[["User"]]],"meta":{"line":87,"file":"Integration.js","path":"src/structures"}},{"name":"account","description":"The account integration information","type":[[["IntegrationAccount"]]],"meta":{"line":96,"file":"Integration.js","path":"src/structures"}},{"name":"syncedAt","description":"The last time this integration was last synced","nullable":true,"type":[[["number"]]],"meta":{"line":102,"file":"Integration.js","path":"src/structures"}},{"name":"subscriberCount","description":"How many subscribers this integration has","nullable":true,"type":[[["number"]]],"meta":{"line":109,"file":"Integration.js","path":"src/structures"}},{"name":"revoked","description":"Whether this integration has been revoked","nullable":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Integration.js","path":"src/structures"}},{"name":"roles","description":"All roles that are managed by this integration","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":132,"file":"Integration.js","path":"src/structures"}},{"name":"expireBehavior","description":"The behavior of expiring subscribers","nullable":true,"type":[[["number"]]],"meta":{"line":143,"file":"Integration.js","path":"src/structures"}},{"name":"expireGracePeriod","description":"The grace period before expiring subscribers","nullable":true,"type":[[["number"]]],"meta":{"line":151,"file":"Integration.js","path":"src/structures"}},{"name":"application","description":"The application for this integration","nullable":true,"type":[[["IntegrationApplication"]]],"meta":{"line":162,"file":"Integration.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"delete","description":"Deletes this integration.","params":[{"name":"reason","description":"Reason for deleting this integration","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Integration",">"]]],"meta":{"line":174,"file":"Integration.js","path":"src/structures"}}],"meta":{"line":26,"file":"Integration.js","path":"src/structures"}},{"name":"IntegrationApplication","description":"Represents an Integration's OAuth2 Application.","extends":[[["Application"]]],"props":[{"name":"bot","description":"The bot user for this application","nullable":true,"type":[[["User"]]],"meta":{"line":18,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"termsOfServiceURL","description":"The URL of the application's terms of service","nullable":true,"type":[[["string"]]],"meta":{"line":28,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"privacyPolicyURL","description":"The URL of the application's privacy policy","nullable":true,"type":[[["string"]]],"meta":{"line":38,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"rpcOrigins","description":"The Array of RPC origin URLs","type":[[["Array","<"],["string",">"]]],"meta":{"line":48,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"summary","description":"The application's summary","nullable":true,"deprecated":"This property is no longer being sent by the API.","type":[[["string"]]],"meta":{"line":59,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"hook","description":"Whether the application can be default hooked by the client","nullable":true,"type":[[["boolean"]]],"meta":{"line":69,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"cover","description":"The hash of the application's cover image","nullable":true,"type":[[["string"]]],"meta":{"line":79,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"verifyKey","description":"The hex-encoded key for verification in interactions and the GameSDK's GetTicket","nullable":true,"type":[[["string"]]],"meta":{"line":89,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"id","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":29,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"name","description":"The name of the application","nullable":true,"type":[[["string"]]],"meta":{"line":36,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"description","description":"The application's description","nullable":true,"type":[[["string"]]],"meta":{"line":46,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"icon","description":"The application's icon hash","nullable":true,"type":[[["string"]]],"meta":{"line":56,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"roleConnectionsVerificationURL","description":"This application's role connection verification entry point URL","nullable":true,"type":[[["string"]]],"meta":{"line":66,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"createdTimestamp","description":"The timestamp the application was created at","readonly":true,"type":[[["number"]]],"meta":{"line":77,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"createdAt","description":"The time the application was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":86,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"invite","description":"Invites this application to a guild / server","inherits":"Application#invite","inherited":true,"params":[{"name":"guild_id","description":"The id of the guild that you want to invite the bot to","type":[[["Snowflake"]]]},{"name":"permissions","description":"The permissions for the bot in number form (the default is 8 / Administrator)","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"captcha","description":"The captcha key to add","optional":true,"default":null,"type":[[["string"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"nothing :)"},"meta":{"line":97,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"iconURL","description":"A link to the application's icon.","inherits":"Application#iconURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":127,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"coverURL","description":"A link to this application's cover image.","inherits":"Application#coverURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":137,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"fetchAssets","description":"Gets the application's rich presence assets.","inherits":"Application#fetchAssets","inherited":true,"deprecated":"This will be removed in the next major as it is unsupported functionality.","async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationAsset",">>"]]],"meta":{"line":155,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the application's name instead of the\nApplication object.","inherits":"Application#toString","inherited":true,"examples":["// Logs: Application name: My App\nconsole.log(`Application name: ${application}`);"],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":181,"file":"Application.js","path":"src/structures/interfaces"}}],"meta":{"line":9,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"Interaction","description":"Represents an interaction.","extends":[[["Base"]]],"props":[{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":12,"file":"Interaction.js","path":"src/structures"}},{"name":"InteractionCollector","description":"Collects interactions.\nWill automatically stop if the message ({@link Client#event:messageDelete messageDelete} or\n{@link Client#event:messageDeleteBulk messageDeleteBulk}),\nchannel ({@link Client#event:channelDelete channelDelete}), or\nguild ({@link Client#event:guildDelete guildDelete}) is deleted.\nInteraction collectors that do not specify `time` or `idle` may be prone to always running.\nEnsure your interaction collectors end via either of these options or manual cancellation.","extends":[[["Collector"]]],"construct":{"name":"InteractionCollector","params":[{"name":"client","description":"The client on which to collect interactions","type":[[["Client"]]]},{"name":"options","description":"The options to apply to this collector","optional":true,"default":"{}","type":[[["InteractionCollectorOptions"]]]}]},"props":[{"name":"messageId","description":"The message from which to collect interactions, if provided","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":42,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"channelId","description":"The channel from which to collect interactions, if provided","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":48,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"guildId","description":"The guild from which to collect interactions, if provided","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":57,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"interactionType","description":"The type of interaction to collect","nullable":true,"type":[[["InteractionType"]]],"meta":{"line":67,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"componentType","description":"The type of component to collect","nullable":true,"type":[[["MessageComponentType"]]],"meta":{"line":76,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"users","description":"The users that have interacted with this collector","type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":85,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"total","description":"The total number of interactions collected","type":[[["number"]]],"meta":{"line":91,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"endReason","description":"The reason this collector has ended with, or null if it hasn't ended yet","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":192,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this Collector","readonly":true,"type":[[["Client"]]],"meta":{"line":35,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"filter","description":"The filter applied to this collector","type":[[["CollectorFilter"]]],"meta":{"line":48,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"options","description":"The options of this collector","type":[[["CollectorOptions"]]],"meta":{"line":54,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"collected","description":"The items collected by this collector","type":[[["Collection"]]],"meta":{"line":60,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"ended","description":"Whether this collector has finished collecting","type":[[["boolean"]]],"meta":{"line":66,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_timeout","description":"Timeout for cleanup","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":73,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_idletimeout","description":"Timeout for cleanup due to inactivity","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":80,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"next","description":"Returns a promise that resolves with the next collected element;\nrejects with collected elements if the collector finishes without receiving a next element","readonly":true,"type":[[["Promise"]]],"meta":{"line":148,"file":"Collector.js","path":"src/structures/interfaces"}}],"methods":[{"name":"collect","description":"Handles an incoming interaction for possible collection.","access":"private","params":[{"name":"interaction","description":"The interaction to possibly collect","type":[[["Interaction"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":142,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"dispose","description":"Handles an interaction for possible disposal.","params":[{"name":"interaction","description":"The interaction that could be disposed of","type":[[["Interaction"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":162,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"empty","description":"Empties this interaction collector.","meta":{"line":180,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"_handleMessageDeletion","description":"Handles checking if the message has been deleted, and if so, stops the collector with the reason 'messageDelete'.","access":"private","params":[{"name":"message","description":"The message that was deleted","type":[[["Message"]]]}],"returns":[[["void"]]],"meta":{"line":205,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"_handleChannelDeletion","description":"Handles checking if the channel has been deleted, and if so, stops the collector with the reason 'channelDelete'.","access":"private","params":[{"name":"channel","description":"The channel that was deleted","type":[[["GuildChannel"]]]}],"returns":[[["void"]]],"meta":{"line":217,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"_handleThreadDeletion","description":"Handles checking if the thread has been deleted, and if so, stops the collector with the reason 'threadDelete'.","access":"private","params":[{"name":"thread","description":"The thread that was deleted","type":[[["ThreadChannel"]]]}],"returns":[[["void"]]],"meta":{"line":229,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"_handleGuildDeletion","description":"Handles checking if the guild has been deleted, and if so, stops the collector with the reason 'guildDelete'.","access":"private","params":[{"name":"guild","description":"The guild that was deleted","type":[[["Guild"]]]}],"returns":[[["void"]]],"meta":{"line":241,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"handleCollect","description":"Call this to handle an event as a collectable element. Accepts any event data as parameters.","inherits":"Collector#handleCollect","inherited":true,"emits":["Collector#event:collect"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":99,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"handleDispose","description":"Call this to remove an element from the collection. Accepts any event data as parameters.","inherits":"Collector#handleDispose","inherited":true,"emits":["Collector#event:dispose"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":126,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"stop","description":"Stops this collector and emits the `end` event.","inherits":"Collector#stop","inherited":true,"emits":["Collector#event:end"],"params":[{"name":"reason","description":"The reason this collector is ending","optional":true,"default":"'user'","type":[[["string"]]]}],"meta":{"line":180,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"resetTimer","description":"Resets the collector's timeout and idle timer.","inherits":"Collector#resetTimer","inherited":true,"params":[{"name":"options","description":"Options for resetting","optional":true,"type":[[["CollectorResetTimerOptions"]]]}],"meta":{"line":213,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"checkEnd","description":"Checks whether the collector should end, and if so, ends it.","inherits":"Collector#checkEnd","inherited":true,"returns":{"types":[[["boolean"]]],"description":"Whether the collector ended or not"},"meta":{"line":228,"file":"Collector.js","path":"src/structures/interfaces"}}],"events":[{"name":"collect","description":"Emitted whenever an interaction is collected.","params":[{"name":"interaction","description":"The interaction that was collected","type":[[["Interaction"]]]}],"meta":{"line":143,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"dispose","description":"Emitted whenever an interaction is disposed of.","params":[{"name":"interaction","description":"The interaction that was disposed of","type":[[["Interaction"]]]}],"meta":{"line":163,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"end","description":"Emitted when the collector is finished collecting.","params":[{"name":"collected","description":"The elements collected by the collector","type":[[["Collection"]]]},{"name":"reason","description":"The reason the collector ended","type":[[["string"]]]}],"meta":{"line":193,"file":"Collector.js","path":"src/structures/interfaces"}}],"meta":{"line":30,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"InteractionResponse","description":"Represents a interaction on Discord.","extends":[[["Base"]]],"props":[{"name":"channelId","description":"The id of the channel the interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":19,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the interaction was sent in, if any","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":25,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"sendData","description":"The interaction data was sent in","type":[[["Object"]]],"meta":{"line":31,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"id","description":"The interaction response's ID","type":[[["Snowflake"]]],"meta":{"line":41,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"nonce","description":"The interaction response's nonce","type":[[["Snowflake"]]],"meta":{"line":48,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction response was created at","readonly":true,"type":[[["number"]]],"meta":{"line":56,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction response was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":65,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"channel","description":"The channel that the interaction was sent in","readonly":true,"type":[[["TextBasedChannels"]]],"meta":{"line":74,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"guild","description":"The guild the inteaaction was sent in (if in a guild channel)","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":83,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"awaitModal","description":"Get Modal send from interaction","params":[{"name":"time","description":"Time to wait for modal","type":[[["number"]]]}],"returns":[[["Modal"]]],"meta":{"line":92,"file":"InteractionResponse.js","path":"src/structures"}}],"meta":{"line":12,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"InteractionWebhook","description":"Represents a webhook for an Interaction","implements":[[["Webhook"]]],"construct":{"name":"InteractionWebhook","params":[{"name":"client","description":"The instantiating client","type":[[["Client"]]]},{"name":"id","description":"The application's id","type":[[["Snowflake"]]]},{"name":"token","description":"The interaction's token","type":[[["string"]]]}]},"props":[{"name":"client","description":"The client that instantiated the interaction webhook","readonly":true,"type":[[["Client"]]],"meta":{"line":16,"file":"InteractionWebhook.js","path":"src/structures"}},{"name":"id","description":"The webhook's id","type":[[["Snowflake"]]],"meta":{"line":55,"file":"Webhook.js","path":"src/structures"}},{"name":"url","description":"The URL of this webhook","readonly":true,"type":[[["string"]]],"meta":{"line":412,"file":"Webhook.js","path":"src/structures"}}],"methods":[{"name":"send","description":"Sends a message with this webhook.","implements":["Webhook#send"],"params":[{"name":"options","description":"The content for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":34,"file":"InteractionWebhook.js","path":"src/structures"}},{"name":"fetchMessage","description":"Gets a message that was sent by this webhook.","implements":["Webhook#fetchMessage"],"params":[{"name":"message","description":"The id of the message to fetch","type":[[["Snowflake"]],[["original","'"]]]},{"name":"cacheOrOptions","description":"The options to provide to fetch the message.\nA **deprecated** boolean may be passed instead to specify whether to cache the message.","optional":true,"default":"{}","type":[[["WebhookFetchMessageOptions"]],[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"description":"Returns the raw message data if the webhook was instantiated as a\n{@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned"},"meta":{"line":286,"file":"Webhook.js","path":"src/structures"}},{"name":"editMessage","description":"Edits a message that was sent by this webhook.","implements":["Webhook#editMessage"],"params":[{"name":"message","description":"The message to edit","type":[[["MessageResolvable"]],[["original","'"]]]},{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["WebhookEditMessageOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"description":"Returns the raw message data if the webhook was instantiated as a\n{@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned"},"meta":{"line":322,"file":"Webhook.js","path":"src/structures"}},{"name":"deleteMessage","description":"Delete a message that was sent by this webhook.","implements":["Webhook#deleteMessage"],"params":[{"name":"message","description":"The message to delete","type":[[["MessageResolvable"]],[["original","'"]]]},{"name":"threadId","description":"The id of the thread this message belongs to","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":374,"file":"Webhook.js","path":"src/structures"}}],"meta":{"line":9,"file":"InteractionWebhook.js","path":"src/structures"}},{"name":"Application","description":"Represents an OAuth2 Application.","extends":[[["Base"]]],"abstract":true,"props":[{"name":"id","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":29,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"name","description":"The name of the application","nullable":true,"type":[[["string"]]],"meta":{"line":36,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"description","description":"The application's description","nullable":true,"type":[[["string"]]],"meta":{"line":46,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"icon","description":"The application's icon hash","nullable":true,"type":[[["string"]]],"meta":{"line":56,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"roleConnectionsVerificationURL","description":"This application's role connection verification entry point URL","nullable":true,"type":[[["string"]]],"meta":{"line":66,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"createdTimestamp","description":"The timestamp the application was created at","readonly":true,"type":[[["number"]]],"meta":{"line":77,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"createdAt","description":"The time the application was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":86,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"invite","description":"Invites this application to a guild / server","params":[{"name":"guild_id","description":"The id of the guild that you want to invite the bot to","type":[[["Snowflake"]]]},{"name":"permissions","description":"The permissions for the bot in number form (the default is 8 / Administrator)","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"captcha","description":"The captcha key to add","optional":true,"default":null,"type":[[["string"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"nothing :)"},"meta":{"line":97,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"iconURL","description":"A link to the application's icon.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":127,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"coverURL","description":"A link to this application's cover image.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":137,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"fetchAssets","description":"Gets the application's rich presence assets.","deprecated":"This will be removed in the next major as it is unsupported functionality.","async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationAsset",">>"]]],"meta":{"line":155,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the application's name instead of the\nApplication object.","examples":["// Logs: Application name: My App\nconsole.log(`Application name: ${application}`);"],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":181,"file":"Application.js","path":"src/structures/interfaces"}}],"meta":{"line":18,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"Collector","description":"Abstract class for defining a new Collector.","extends":[[["EventEmitter"]]],"abstract":true,"props":[{"name":"client","description":"The client that instantiated this Collector","readonly":true,"type":[[["Client"]]],"meta":{"line":35,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"filter","description":"The filter applied to this collector","type":[[["CollectorFilter"]]],"meta":{"line":48,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"options","description":"The options of this collector","type":[[["CollectorOptions"]]],"meta":{"line":54,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"collected","description":"The items collected by this collector","type":[[["Collection"]]],"meta":{"line":60,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"ended","description":"Whether this collector has finished collecting","type":[[["boolean"]]],"meta":{"line":66,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_timeout","description":"Timeout for cleanup","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":73,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_idletimeout","description":"Timeout for cleanup due to inactivity","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":80,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"next","description":"Returns a promise that resolves with the next collected element;\nrejects with collected elements if the collector finishes without receiving a next element","readonly":true,"type":[[["Promise"]]],"meta":{"line":148,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"endReason","description":"The reason this collector has ended with, or null if it hasn't ended yet","readonly":true,"nullable":true,"abstract":true,"type":[[["string"]]],"meta":{"line":276,"file":"Collector.js","path":"src/structures/interfaces"}}],"methods":[{"name":"handleCollect","description":"Call this to handle an event as a collectable element. Accepts any event data as parameters.","emits":["Collector#event:collect"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":99,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"handleDispose","description":"Call this to remove an element from the collection. Accepts any event data as parameters.","emits":["Collector#event:dispose"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":126,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"stop","description":"Stops this collector and emits the `end` event.","emits":["Collector#event:end"],"params":[{"name":"reason","description":"The reason this collector is ending","optional":true,"default":"'user'","type":[[["string"]]]}],"meta":{"line":180,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"resetTimer","description":"Resets the collector's timeout and idle timer.","params":[{"name":"options","description":"Options for resetting","optional":true,"type":[[["CollectorResetTimerOptions"]]]}],"meta":{"line":213,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"checkEnd","description":"Checks whether the collector should end, and if so, ends it.","returns":{"types":[[["boolean"]]],"description":"Whether the collector ended or not"},"meta":{"line":228,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"collect","description":"Handles incoming events from the `handleCollect` function. Returns null if the event should not\nbe collected, or returns an object describing the data that should be stored.","see":["Collector#handleCollect"],"abstract":true,"params":[{"name":"args","description":"Any args the event listener emits","variable":true,"type":[["*"]]}],"returns":{"types":[["*"],[["Promise",""]]],"description":"Data to insert into collection, if any","nullable":true},"meta":{"line":286,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"dispose","description":"Handles incoming events from the `handleDispose`. Returns null if the event should not\nbe disposed, or returns the key that should be removed.","see":["Collector#handleDispose"],"abstract":true,"params":[{"name":"args","description":"Any args the event listener emits","variable":true,"type":[["*"]]}],"returns":{"types":[["*"]],"description":"Key to remove from the collection, if any","nullable":true},"meta":{"line":296,"file":"Collector.js","path":"src/structures/interfaces"}}],"events":[{"name":"collect","description":"Emitted whenever an element is collected.","params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"meta":{"line":105,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"dispose","description":"Emitted whenever an element is disposed of.","params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"meta":{"line":133,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"end","description":"Emitted when the collector is finished collecting.","params":[{"name":"collected","description":"The elements collected by the collector","type":[[["Collection"]]]},{"name":"reason","description":"The reason the collector ended","type":[[["string"]]]}],"meta":{"line":193,"file":"Collector.js","path":"src/structures/interfaces"}}],"meta":{"line":31,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"Invite","description":"Represents an invitation to a guild channel.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild the invite is for including welcome screen data if present","nullable":true,"type":[[["Guild"]],[["InviteGuild"]]],"meta":{"line":30,"file":"Invite.js","path":"src/structures"}},{"name":"code","description":"The code for this invite","type":[[["string"]]],"meta":{"line":40,"file":"Invite.js","path":"src/structures"}},{"name":"presenceCount","description":"The approximate number of online members of the guild this invite is for\nThis is only available when the invite was fetched through {@link Client#fetchInvite}.","nullable":true,"type":[[["number"]]],"meta":{"line":49,"file":"Invite.js","path":"src/structures"}},{"name":"memberCount","description":"The approximate total number of members of the guild this invite is for\nThis is only available when the invite was fetched through {@link Client#fetchInvite}.","nullable":true,"type":[[["number"]]],"meta":{"line":60,"file":"Invite.js","path":"src/structures"}},{"name":"temporary","description":"Whether or not this invite only grants temporary membership\nThis is only available when the invite was fetched through {@link GuildInviteManager#fetch}\nor created through {@link GuildInviteManager#create}.","nullable":true,"type":[[["boolean"]]],"meta":{"line":72,"file":"Invite.js","path":"src/structures"}},{"name":"maxAge","description":"The maximum age of the invite, in seconds, 0 if never expires\nThis is only available when the invite was fetched through {@link GuildInviteManager#fetch}\nor created through {@link GuildInviteManager#create}.","nullable":true,"type":[[["number"]]],"meta":{"line":84,"file":"Invite.js","path":"src/structures"}},{"name":"uses","description":"How many times this invite has been used\nThis is only available when the invite was fetched through {@link GuildInviteManager#fetch}\nor created through {@link GuildInviteManager#create}.","nullable":true,"type":[[["number"]]],"meta":{"line":96,"file":"Invite.js","path":"src/structures"}},{"name":"maxUses","description":"The maximum uses of this invite\nThis is only available when the invite was fetched through {@link GuildInviteManager#fetch}\nor created through {@link GuildInviteManager#create}.","nullable":true,"type":[[["number"]]],"meta":{"line":108,"file":"Invite.js","path":"src/structures"}},{"name":"inviterId","description":"The user's id who created this invite","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":118,"file":"Invite.js","path":"src/structures"}},{"name":"inviter","description":"The user who created this invite","nullable":true,"type":[[["User"]]],"meta":{"line":129,"file":"Invite.js","path":"src/structures"}},{"name":"targetUser","description":"The user whose stream to display for this voice channel stream invite","nullable":true,"type":[[["User"]]],"meta":{"line":140,"file":"Invite.js","path":"src/structures"}},{"name":"targetApplication","description":"The embedded application to open for this voice channel embedded application invite","nullable":true,"type":[[["IntegrationApplication"]]],"meta":{"line":150,"file":"Invite.js","path":"src/structures"}},{"name":"targetType","description":"The target type","nullable":true,"type":[[["TargetType"]]],"meta":{"line":168,"file":"Invite.js","path":"src/structures"}},{"name":"channelId","description":"The channel's id this invite is for","type":[[["Snowflake"]]],"meta":{"line":178,"file":"Invite.js","path":"src/structures"}},{"name":"channel","description":"The channel this invite is for","type":[[["Channel"]]],"meta":{"line":187,"file":"Invite.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this invite was created at","nullable":true,"type":[[["number"]]],"meta":{"line":196,"file":"Invite.js","path":"src/structures"}},{"name":"stageInstance","description":"The stage instance data if there is a public {@link StageInstance} in the stage channel this invite is for","nullable":true,"type":[[["InviteStageInstance"]]],"meta":{"line":212,"file":"Invite.js","path":"src/structures"}},{"name":"guildScheduledEvent","description":"The guild scheduled event data if there is a {@link GuildScheduledEvent} in the channel this invite is for","nullable":true,"type":[[["GuildScheduledEvent"]]],"meta":{"line":222,"file":"Invite.js","path":"src/structures"}},{"name":"createdAt","description":"The time the invite was created at","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":233,"file":"Invite.js","path":"src/structures"}},{"name":"deletable","description":"Whether the invite is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":242,"file":"Invite.js","path":"src/structures"}},{"name":"expiresTimestamp","description":"The timestamp the invite will expire at","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":257,"file":"Invite.js","path":"src/structures"}},{"name":"expiresAt","description":"The time the invite will expire at","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":269,"file":"Invite.js","path":"src/structures"}},{"name":"url","description":"The URL to the invite","readonly":true,"type":[[["string"]]],"meta":{"line":279,"file":"Invite.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}},{"name":"INVITES_PATTERN","description":"Regular expression that globally matches Discord invite links","scope":"static","type":[[["RegExp"]]],"meta":{"line":373,"file":"Invite.js","path":"src/structures"}}],"methods":[{"name":"delete","description":"Deletes this invite.","params":[{"name":"reason","description":"Reason for deleting this invite","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":288,"file":"Invite.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically concatenates the invite's URL instead of the object.","examples":["// Logs: Invite: https://discord.gg/A1b2C3\nconsole.log(`Invite: ${invite}`);"],"returns":[[["string"]]],"meta":{"line":300,"file":"Invite.js","path":"src/structures"}},{"name":"acceptInvite","description":"Join this Guild using this invite.","examples":["await client.fetchInvite('code').then(async invite => {\n await invite.acceptInvite();\n});"],"params":[{"name":"autoVerify","description":"Whether to automatically verify member","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":330,"file":"Invite.js","path":"src/structures"}}],"meta":{"line":18,"file":"Invite.js","path":"src/structures"}},{"name":"InviteGuild","description":"Represents a guild received from an invite, includes welcome screen data if available.","extends":[[["AnonymousGuild"]]],"props":[{"name":"welcomeScreen","description":"The welcome screen for this invite guild","nullable":true,"type":[[["WelcomeScreen"]]],"meta":{"line":18,"file":"InviteGuild.js","path":"src/structures"}},{"name":"splash","description":"The hash of the guild invite splash image","nullable":true,"type":[[["string"]]],"meta":{"line":25,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"banner","description":"The hash of the guild banner","nullable":true,"type":[[["string"]]],"meta":{"line":33,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"description","description":"The description of the guild, if any","nullable":true,"type":[[["string"]]],"meta":{"line":41,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"verificationLevel","description":"The verification level of the guild","type":[[["VerificationLevel"]]],"meta":{"line":49,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"vanityURLCode","description":"The vanity invite code of the guild, if any","nullable":true,"type":[[["string"]]],"meta":{"line":57,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"nsfwLevel","description":"The NSFW level of this guild","type":[[["NSFWLevel"]]],"meta":{"line":65,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"premiumSubscriptionCount","description":"The total number of boosts for this server","nullable":true,"type":[[["number"]]],"meta":{"line":73,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"id","description":"The guild's id","type":[[["Snowflake"]]],"meta":{"line":19,"file":"BaseGuild.js","path":"src/structures"}},{"name":"name","description":"The name of this guild","type":[[["string"]]],"meta":{"line":25,"file":"BaseGuild.js","path":"src/structures"}},{"name":"icon","description":"The icon hash of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":31,"file":"BaseGuild.js","path":"src/structures"}},{"name":"features","description":"An array of features available to this guild","type":[[["Array","<"],["Features",">"]]],"meta":{"line":37,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this guild was created at","readonly":true,"type":[[["number"]]],"meta":{"line":45,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdAt","description":"The time this guild was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":54,"file":"BaseGuild.js","path":"src/structures"}},{"name":"nameAcronym","description":"The acronym that shows up in place of a guild icon","readonly":true,"type":[[["string"]]],"meta":{"line":63,"file":"BaseGuild.js","path":"src/structures"}},{"name":"partnered","description":"Whether this guild is partnered","readonly":true,"type":[[["boolean"]]],"meta":{"line":75,"file":"BaseGuild.js","path":"src/structures"}},{"name":"verified","description":"Whether this guild is verified","readonly":true,"type":[[["boolean"]]],"meta":{"line":84,"file":"BaseGuild.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"bannerURL","description":"The URL to this guild's banner.","inherits":"AnonymousGuild#bannerURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":84,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"splashURL","description":"The URL to this guild's invite splash image.","inherits":"AnonymousGuild#splashURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"iconURL","description":"The URL to this guild's icon.","inherits":"BaseGuild#iconURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"BaseGuild.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this guild.","inherits":"BaseGuild#fetch","inherited":true,"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":102,"file":"BaseGuild.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the guild's name instead of the Guild object.","inherits":"BaseGuild#toString","inherited":true,"returns":[[["string"]]],"meta":{"line":111,"file":"BaseGuild.js","path":"src/structures"}}],"meta":{"line":10,"file":"InviteGuild.js","path":"src/structures"}},{"name":"InviteStageInstance","description":"Represents the data about a public {@link StageInstance} in an {@link Invite}.","extends":[[["Base"]]],"props":[{"name":"channelId","description":"The id of the stage channel this invite is for","type":[[["Snowflake"]]],"meta":{"line":18,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"guildId","description":"The stage channel's guild id","type":[[["Snowflake"]]],"meta":{"line":24,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"members","description":"The members speaking in the stage channel","type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":30,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"topic","description":"The topic of the stage instance","type":[[["string"]]],"meta":{"line":41,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"participantCount","description":"The number of users in the stage channel","type":[[["number"]]],"meta":{"line":49,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"speakerCount","description":"The number of users speaking in the stage channel","type":[[["number"]]],"meta":{"line":57,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"channel","description":"The stage channel this invite is for","readonly":true,"nullable":true,"type":[[["StageChannel"]]],"meta":{"line":72,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"guild","description":"The guild of the stage channel this invite is for","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":81,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"meta":{"line":10,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"Message","description":"Represents a message on Discord.","extends":[[["Base"]]],"props":[{"name":"channelId","description":"The id of the channel the message was sent in","type":[[["Snowflake"]]],"meta":{"line":45,"file":"Message.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the message was sent in, if any","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":51,"file":"Message.js","path":"src/structures"}},{"name":"id","description":"The message's id","type":[[["Snowflake"]]],"meta":{"line":61,"file":"Message.js","path":"src/structures"}},{"name":"position","description":"A generally increasing integer (there may be gaps or duplicates) that represents\nthe approximate position of the message in a thread.","nullable":true,"type":[[["number"]]],"meta":{"line":69,"file":"Message.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the message was sent at","type":[[["number"]]],"meta":{"line":78,"file":"Message.js","path":"src/structures"}},{"name":"type","description":"The type of the message","nullable":true,"type":[[["MessageType"]]],"meta":{"line":85,"file":"Message.js","path":"src/structures"}},{"name":"system","description":"Whether or not this message was sent by Discord, not actually a user (e.g. pin notifications)","nullable":true,"type":[[["boolean"]]],"meta":{"line":91,"file":"Message.js","path":"src/structures"}},{"name":"content","description":"The content of the message","nullable":true,"type":[[["string"]]],"meta":{"line":102,"file":"Message.js","path":"src/structures"}},{"name":"author","description":"The author of the message","nullable":true,"type":[[["User"]]],"meta":{"line":112,"file":"Message.js","path":"src/structures"}},{"name":"pinned","description":"Whether or not this message is pinned","nullable":true,"type":[[["boolean"]]],"meta":{"line":122,"file":"Message.js","path":"src/structures"}},{"name":"tts","description":"Whether or not the message was Text-To-Speech","nullable":true,"type":[[["boolean"]]],"meta":{"line":132,"file":"Message.js","path":"src/structures"}},{"name":"nonce","description":"A random number or string used for checking message delivery\nThis is only received after the message was sent successfully, and\nlost if re-fetched","nullable":true,"type":[[["string"]]],"meta":{"line":144,"file":"Message.js","path":"src/structures"}},{"name":"embeds","description":"A list of embeds in the message - e.g. YouTube Player","type":[[["Array","<"],["MessageEmbed",">"]]],"meta":{"line":154,"file":"Message.js","path":"src/structures"}},{"name":"components","description":"A list of MessageActionRows in the message","type":[[["Array","<"],["MessageActionRow",">"]]],"meta":{"line":164,"file":"Message.js","path":"src/structures"}},{"name":"attachments","description":"A collection of attachments in the message - e.g. Pictures - mapped by their ids","type":[[["Collection","<"],["Snowflake",", "],["MessageAttachment",">"]]],"meta":{"line":174,"file":"Message.js","path":"src/structures"}},{"name":"stickers","description":"A collection of stickers in the message","type":[[["Collection","<"],["Snowflake",", "],["Sticker",">"]]],"meta":{"line":189,"file":"Message.js","path":"src/structures"}},{"name":"editedTimestamp","description":"The timestamp the message was last edited at (if applicable)","nullable":true,"type":[[["number"]]],"meta":{"line":202,"file":"Message.js","path":"src/structures"}},{"name":"reactions","description":"A manager of the reactions belonging to this message","type":[[["ReactionManager"]]],"meta":{"line":212,"file":"Message.js","path":"src/structures"}},{"name":"mentions","description":"All valid mentions that the message contains","type":[[["MessageMentions"]]],"meta":{"line":227,"file":"Message.js","path":"src/structures"}},{"name":"webhookId","description":"The id of the webhook that sent the message, if applicable","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":251,"file":"Message.js","path":"src/structures"}},{"name":"groupActivityApplication","description":"Supplemental application information for group activities","nullable":true,"type":[[["ClientApplication"]]],"meta":{"line":261,"file":"Message.js","path":"src/structures"}},{"name":"applicationId","description":"The id of the application of the interaction that sent this message, if any","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":271,"file":"Message.js","path":"src/structures"}},{"name":"activity","description":"Group activity","nullable":true,"type":[[["MessageActivity"]]],"meta":{"line":281,"file":"Message.js","path":"src/structures"}},{"name":"flags","description":"Flags that are applied to the message","type":[[["Readonly","<"],["MessageFlags",">"]]],"meta":{"line":304,"file":"Message.js","path":"src/structures"}},{"name":"reference","description":"Message reference data","nullable":true,"type":[[["MessageReference"]]],"meta":{"line":329,"file":"Message.js","path":"src/structures"}},{"name":"interaction","description":"Partial data of the interaction that this message is a reply to","nullable":true,"type":[[["MessageInteraction"]]],"meta":{"line":357,"file":"Message.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":373,"file":"Message.js","path":"src/structures"}},{"name":"channel","description":"The channel that the message was sent in","readonly":true,"type":[[["TextBasedChannels"]]],"meta":{"line":403,"file":"Message.js","path":"src/structures"}},{"name":"partial","description":"Whether or not this message is a partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":412,"file":"Message.js","path":"src/structures"}},{"name":"member","description":"Represents the author of the message as a guild member.\nOnly available if the message comes from a guild where the author is still a member","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":422,"file":"Message.js","path":"src/structures"}},{"name":"createdAt","description":"The time the message was sent at","readonly":true,"type":[[["Date"]]],"meta":{"line":431,"file":"Message.js","path":"src/structures"}},{"name":"editedAt","description":"The time the message was last edited at (if applicable)","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":440,"file":"Message.js","path":"src/structures"}},{"name":"guild","description":"The guild the message was sent in (if in a guild channel)","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":449,"file":"Message.js","path":"src/structures"}},{"name":"hasThread","description":"Whether this message has a thread associated with it","readonly":true,"type":[[["boolean"]]],"meta":{"line":458,"file":"Message.js","path":"src/structures"}},{"name":"thread","description":"The thread started by this message\nThis property is not suitable for checking whether a message has a thread,\nuse {@link Message#hasThread} instead.","readonly":true,"nullable":true,"type":[[["ThreadChannel"]]],"meta":{"line":469,"file":"Message.js","path":"src/structures"}},{"name":"url","description":"The URL to jump to this message","readonly":true,"type":[[["string"]]],"meta":{"line":478,"file":"Message.js","path":"src/structures"}},{"name":"cleanContent","description":"The message contents with all mentions replaced by the equivalent text.\nIf mentions cannot be resolved to a name, the relevant mention in the message content will not be converted.","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":488,"file":"Message.js","path":"src/structures"}},{"name":"editable","description":"Whether the message is editable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":600,"file":"Message.js","path":"src/structures"}},{"name":"deletable","description":"Whether the message is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":623,"file":"Message.js","path":"src/structures"}},{"name":"bulkDeletable","description":"Whether the message is bulk deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":655,"file":"Message.js","path":"src/structures"}},{"name":"pinnable","description":"Whether the message is pinnable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":671,"file":"Message.js","path":"src/structures"}},{"name":"crosspostable","description":"Whether the message is crosspostable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":700,"file":"Message.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"createReactionCollector","description":"Creates a reaction collector.","examples":["// Create a reaction collector\nconst filter = (reaction, user) => reaction.emoji.name === '👌' && user.id === 'someId';\nconst collector = message.createReactionCollector({ filter, time: 15_000 });\ncollector.on('collect', r => console.log(`Collected ${r.emoji.name}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["ReactionCollectorOptions"]]]}],"returns":[[["ReactionCollector"]]],"meta":{"line":504,"file":"Message.js","path":"src/structures"}},{"name":"awaitReactions","description":"Similar to createReactionCollector but in promise form.\nResolves with a collection of reactions that pass the specified filter.","examples":["// Create a reaction collector\nconst filter = (reaction, user) => reaction.emoji.name === '👌' && user.id === 'someId'\nmessage.awaitReactions({ filter, time: 15_000 })\n .then(collected => console.log(`Collected ${collected.size} reactions`))\n .catch(console.error);"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitReactionsOptions"]]]}],"returns":[[["Promise","<"],["Collection","<("],["string","|"],["Snowflake","), "],["MessageReaction",">>"]]],"meta":{"line":526,"file":"Message.js","path":"src/structures"}},{"name":"createMessageComponentCollector","description":"Creates a message component interaction collector.","examples":["// Create a message component interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = message.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":555,"file":"Message.js","path":"src/structures"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nmessage.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":583,"file":"Message.js","path":"src/structures"}},{"name":"fetchReference","description":"Fetches the Message this crosspost/reply/pin-add references, if available to the client","async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":686,"file":"Message.js","path":"src/structures"}},{"name":"edit","description":"Edits the content of the message.","examples":["// Update the content of a message\nmessage.edit('This is my new content!')\n .then(msg => console.log(`Updated the content of a message to ${msg.content}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageEditOptions"]]]}],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":739,"file":"Message.js","path":"src/structures"}},{"name":"crosspost","description":"Publishes a message in an announcement channel to all channels following it.","examples":["// Crosspost a message\nif (message.channel.type === 'GUILD_NEWS') {\n message.crosspost()\n .then(() => console.log('Crossposted message'))\n .catch(console.error);\n}"],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":755,"file":"Message.js","path":"src/structures"}},{"name":"pin","description":"Pins this message to the channel's pinned messages.","examples":["// Pin a message\nmessage.pin()\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"reason","description":"Reason for pinning","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":770,"file":"Message.js","path":"src/structures"}},{"name":"unpin","description":"Unpins this message from the channel's pinned messages.","examples":["// Unpin a message\nmessage.unpin()\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"reason","description":"Reason for unpinning","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":786,"file":"Message.js","path":"src/structures"}},{"name":"react","description":"Adds a reaction to the message.","examples":["// React to a message with a unicode emoji\nmessage.react('🤔')\n .then(console.log)\n .catch(console.error);","// React to a message with a custom emoji\nmessage.react(message.guild.emojis.cache.get('123456789012345678'))\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"emoji","description":"The emoji to react with","type":[[["EmojiIdentifierResolvable"]]]},{"name":"burst","description":"Super Reactions (Discord Nitro only)","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["MessageReaction",">"]]],"meta":{"line":808,"file":"Message.js","path":"src/structures"}},{"name":"delete","description":"Deletes the message.","examples":["// Delete a message\nmessage.delete()\n .then(msg => console.log(`Deleted message from ${msg.author.username}`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":833,"file":"Message.js","path":"src/structures"}},{"name":"reply","description":"Send an inline reply to this message.","examples":["// Reply to a message\nmessage.reply('This is a reply!')\n .then(() => console.log(`Replied to message \"${message.content}\"`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["ReplyMessageOptions"]]]}],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":857,"file":"Message.js","path":"src/structures"}},{"name":"startThread","description":"Create a new public thread from this message","see":["GuildTextThreadManager#create"],"params":[{"name":"options","description":"Options for starting a thread on this message","optional":true,"type":[[["StartThreadOptions"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":902,"file":"Message.js","path":"src/structures"}},{"name":"fetch","description":"Fetch this message.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":916,"file":"Message.js","path":"src/structures"}},{"name":"fetchWebhook","description":"Fetches the webhook used to create this message.","returns":[[["Promise",""]]],"meta":{"line":925,"file":"Message.js","path":"src/structures"}},{"name":"suppressEmbeds","description":"Suppresses or unsuppresses embeds on a message.","params":[{"name":"suppress","description":"If the embeds should be suppressed or not","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":936,"file":"Message.js","path":"src/structures"}},{"name":"removeAttachments","description":"Removes the attachments from this message.","returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":952,"file":"Message.js","path":"src/structures"}},{"name":"resolveComponent","description":"Resolves a component by a custom id.","params":[{"name":"customId","description":"The custom id to resolve against","type":[[["string"]]]}],"returns":{"types":[[["MessageActionRowComponent"]]],"nullable":true},"meta":{"line":961,"file":"Message.js","path":"src/structures"}},{"name":"equals","description":"Used mainly internally. Whether two messages are identical in properties. If you want to compare messages\nwithout checking all the properties, use `message.id === message2.id`, which is much more efficient. This\nmethod allows you to see if there are differences in content, embeds, attachments, nonce and tts properties.","params":[{"name":"message","description":"The message to compare it to","type":[[["Message"]]]},{"name":"rawData","description":"Raw data passed through the WebSocket about this message","type":[[["APIMessage"]]]}],"returns":[[["boolean"]]],"meta":{"line":973,"file":"Message.js","path":"src/structures"}},{"name":"inGuild","description":"Whether this message is from a guild.","returns":[[["boolean"]]],"meta":{"line":1001,"file":"Message.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically concatenates the message's content instead of the object.","examples":["// Logs: Message: This is a message!\nconsole.log(`Message: ${message}`);"],"returns":[[["string"]]],"meta":{"line":1012,"file":"Message.js","path":"src/structures"}},{"name":"markUnread","description":"Marks the message as unread.","async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":1032,"file":"Message.js","path":"src/structures"}},{"name":"markRead","description":"Marks the message as read.","async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":1052,"file":"Message.js","path":"src/structures"}},{"name":"clickButton","description":"Click specific button or automatically click first button if no button is specified.","examples":["client.on('messageCreate', async message => {\n if (message.components.length) {\n // Find first button and click it\n await message.clickButton();\n // Click with button ID\n await message.clickButton('button-id');\n // Click with button location\n await message.clickButton({ row: 0, col: 0 });\n // Click with class MessageButton\n const button = message.components[0].components[0];\n await message.clickButton(button);\n // Click with class MessageButton (2)\n button.click(message);\n }\n});"],"params":[{"name":"button","description":"Button ID","type":[[["MessageButton"]],[["MessageButtonLocation"]],[["string"]]]}],"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":1088,"file":"Message.js","path":"src/structures"}},{"name":"selectMenu","description":"Select specific menu or First Menu","examples":["client.on('messageCreate', async message => {\n if (message.components.length) {\n // Row\n await message.selectMenu(1, [message.channel]); // row 1, type: Channel, multi: false\n // Id\n await message.selectMenu('menu-id', ['uid1', client.user, message.member]); // MenuId, type: User, multi: true\n // First Menu\n await message.selectMenu(['role-id']); // First Menu, type: role, multi: false\n // class MessageSelectMenu\n const menu = message.components[0].components[0];\n await message.selectMenu(menu, ['option1', 'option2']);\n // MessageSelectMenu (2)\n menu.select(message, ['option1', 'option2']);\n }\n});"],"params":[{"name":"menuID","description":"MenuId / MessageSelectMenu / Row of Menu / Array of Values (first menu)","type":[[["MessageSelectMenu"]],[["string"]],[["number"]],[["Array","<"],["any",">"]]]},{"name":"options","description":"Array of Values","type":[[["Array","<"],["any",">"]]]}],"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":1123,"file":"Message.js","path":"src/structures"}},{"name":"contextMenu","description":"Send context Menu v2","params":[{"name":"botId","description":"Bot id","type":[[["Snowflake"]]]},{"name":"commandName","description":"Command name in Context Menu","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":1159,"file":"Message.js","path":"src/structures"}}],"meta":{"line":37,"file":"Message.js","path":"src/structures"}},{"name":"MessageActionRow","description":"Represents an action row containing message components.","extends":[[["BaseMessageComponent"]]],"construct":{"name":"MessageActionRow","params":[{"name":"data","description":"MessageActionRow to clone or raw data","optional":true,"default":"{}","type":[[["MessageActionRow"]],[["MessageActionRowOptions"]]]},{"name":"client","description":"The client constructing this MessageActionRow, if provided","optional":true,"default":null,"type":[[["Client"]]]}]},"props":[{"name":"components","description":"The components in this action row","type":[[["Array","<"],["MessageActionRowComponent",">"]]],"meta":{"line":51,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"type","description":"The type of this component","nullable":true,"type":[[["MessageComponentType"]]],"meta":{"line":52,"file":"BaseMessageComponent.js","path":"src/structures"}}],"methods":[{"name":"addComponents","description":"Adds components to the action row.","params":[{"name":"components","description":"The components to add","variable":true,"type":[[["Array","<"],["MessageActionRowComponentResolvable",">"]]]}],"returns":[[["MessageActionRow"]]],"meta":{"line":59,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"setComponents","description":"Sets the components of the action row.","params":[{"name":"components","description":"The components to set","variable":true,"type":[[["Array","<"],["MessageActionRowComponentResolvable",">"]]]}],"returns":[[["MessageActionRow"]]],"meta":{"line":69,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"spliceComponents","description":"Removes, replaces, and inserts components in the action row.","params":[{"name":"index","description":"The index to start at","type":[[["number"]]]},{"name":"deleteCount","description":"The number of components to remove","type":[[["number"]]]},{"name":"components","description":"The replacing components","optional":true,"variable":true,"type":[[["Array","<"],["MessageActionRowComponentResolvable",">"]]]}],"returns":[[["MessageActionRow"]]],"meta":{"line":81,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"toJSON","description":"Transforms the action row to a plain object.","returns":{"types":[[["APIMessageComponent"]]],"description":"The raw data of this action row"},"meta":{"line":90,"file":"MessageActionRow.js","path":"src/structures"}}],"meta":{"line":10,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"MessageAttachment","description":"Represents an attachment in a message.","construct":{"name":"MessageAttachment","params":[{"name":"attachment","description":"The file","type":[[["BufferResolvable"]],[["Stream"]]]},{"name":"name","description":"The name of the file, if any","optional":true,"default":null,"type":[[["string"]]]},{"name":"data","description":"Extra data","optional":true,"type":[[["APIAttachment"]]]}]},"props":[{"name":"name","description":"The name of this attachment","nullable":true,"type":[[["string"]]],"meta":{"line":21,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"id","description":"The attachment's id","type":[[["Snowflake"]]],"meta":{"line":80,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"size","description":"The size of this attachment in bytes","type":[[["number"]]],"meta":{"line":87,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"url","description":"The URL to this attachment","type":[[["string"]]],"meta":{"line":95,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"proxyURL","description":"The Proxy URL to this attachment","type":[[["string"]]],"meta":{"line":103,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"height","description":"The height of this attachment (if an image or video)","nullable":true,"type":[[["number"]]],"meta":{"line":111,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"width","description":"The width of this attachment (if an image or video)","nullable":true,"type":[[["number"]]],"meta":{"line":121,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"contentType","description":"The media type of this attachment","nullable":true,"type":[[["string"]]],"meta":{"line":131,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"description","description":"The description (alt text) of this attachment","nullable":true,"type":[[["string"]]],"meta":{"line":141,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether this attachment is ephemeral","type":[[["boolean"]]],"meta":{"line":150,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"duration","description":"The duration of this attachment in seconds\nThis will only be available if the attachment is an audio file.","nullable":true,"type":[[["number"]]],"meta":{"line":158,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"waveform","description":"The base64 encoded byte array representing a sampled waveform\nThis will only be available if the attachment is an audio file.","nullable":true,"type":[[["string"]]],"meta":{"line":169,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"flags","description":"The flags of this attachment","type":[[["Readonly","<"],["AttachmentFlags",">"]]],"meta":{"line":179,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"spoiler","description":"Whether or not this attachment has been marked as a spoiler","readonly":true,"type":[[["boolean"]]],"meta":{"line":190,"file":"MessageAttachment.js","path":"src/structures"}}],"methods":[{"name":"setDescription","description":"Sets the description of this attachment.","params":[{"name":"description","description":"The description of the file","type":[[["string"]]]}],"returns":{"types":[[["MessageAttachment"]]],"description":"This attachment"},"meta":{"line":30,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"setFile","description":"Sets the file of this attachment.","params":[{"name":"attachment","description":"The file","type":[[["BufferResolvable"]],[["Stream"]]]},{"name":"name","description":"The name of the file, if any","optional":true,"default":null,"type":[[["string"]]]}],"returns":{"types":[[["MessageAttachment"]]],"description":"This attachment"},"meta":{"line":41,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"setName","description":"Sets the name of this attachment.","params":[{"name":"name","description":"The name of the file","type":[[["string"]]]}],"returns":{"types":[[["MessageAttachment"]]],"description":"This attachment"},"meta":{"line":52,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"setSpoiler","description":"Sets whether this attachment is a spoiler","params":[{"name":"spoiler","description":"Whether the attachment should be marked as a spoiler","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["MessageAttachment"]]],"description":"This attachment"},"meta":{"line":62,"file":"MessageAttachment.js","path":"src/structures"}}],"meta":{"line":9,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"MessageButton","description":"Represents a button message component.","extends":[[["BaseMessageComponent"]]],"construct":{"name":"MessageButton","params":[{"name":"data","description":"MessageButton to clone or raw data","optional":true,"default":"{}","type":[[["MessageButton"]],[["MessageButtonOptions"]]]}]},"props":[{"name":"label","description":"The text to be displayed on this button","nullable":true,"type":[[["string"]]],"meta":{"line":41,"file":"MessageButton.js","path":"src/structures"}},{"name":"customId","description":"A unique string to be sent in the interaction when clicked","nullable":true,"type":[[["string"]]],"meta":{"line":47,"file":"MessageButton.js","path":"src/structures"}},{"name":"style","description":"The style of this button","nullable":true,"type":[[["MessageButtonStyle"]]],"meta":{"line":53,"file":"MessageButton.js","path":"src/structures"}},{"name":"emoji","description":"Emoji for this button","nullable":true,"type":[[["RawEmoji"]]],"meta":{"line":59,"file":"MessageButton.js","path":"src/structures"}},{"name":"url","description":"The URL this button links to, if it is a Link style button","nullable":true,"type":[[["string"]]],"meta":{"line":65,"file":"MessageButton.js","path":"src/structures"}},{"name":"disabled","description":"Whether this button is currently disabled","type":[[["boolean"]]],"meta":{"line":71,"file":"MessageButton.js","path":"src/structures"}},{"name":"type","description":"The type of this component","nullable":true,"type":[[["MessageComponentType"]]],"meta":{"line":52,"file":"BaseMessageComponent.js","path":"src/structures"}}],"methods":[{"name":"setCustomId","description":"Sets the custom id for this button","params":[{"name":"customId","description":"A unique string to be sent in the interaction when clicked","type":[[["string"]]]}],"returns":[[["MessageButton"]]],"meta":{"line":79,"file":"MessageButton.js","path":"src/structures"}},{"name":"setDisabled","description":"Sets the interactive status of the button","params":[{"name":"disabled","description":"Whether this button should be disabled","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["MessageButton"]]],"meta":{"line":89,"file":"MessageButton.js","path":"src/structures"}},{"name":"setEmoji","description":"Set the emoji of this button","params":[{"name":"emoji","description":"The emoji to be displayed on this button","type":[[["EmojiIdentifierResolvable"]]]}],"returns":[[["MessageButton"]]],"meta":{"line":99,"file":"MessageButton.js","path":"src/structures"}},{"name":"setLabel","description":"Sets the label of this button","params":[{"name":"label","description":"The text to be displayed on this button","type":[[["string"]]]}],"returns":[[["MessageButton"]]],"meta":{"line":109,"file":"MessageButton.js","path":"src/structures"}},{"name":"setStyle","description":"Sets the style of this button","params":[{"name":"style","description":"The style of this button","type":[[["MessageButtonStyleResolvable"]]]}],"returns":[[["MessageButton"]]],"meta":{"line":119,"file":"MessageButton.js","path":"src/structures"}},{"name":"setURL","description":"Sets the URL of this button.\nMessageButton#style must be LINK when setting a URL","params":[{"name":"url","description":"The URL of this button","type":[[["string"]]]}],"returns":[[["MessageButton"]]],"meta":{"line":130,"file":"MessageButton.js","path":"src/structures"}},{"name":"toJSON","description":"Transforms the button to a plain object.","returns":{"types":[[["APIMessageButton"]]],"description":"The raw data of this button"},"meta":{"line":139,"file":"MessageButton.js","path":"src/structures"}},{"name":"click","description":"Click the button","params":[{"name":"message","description":"Discord Message","type":[[["Message"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":173,"file":"MessageButton.js","path":"src/structures"}},{"name":"resolveStyle","description":"Resolves the style of a button","scope":"static","access":"private","params":[{"name":"style","description":"The style to resolve","type":[[["MessageButtonStyleResolvable"]]]}],"returns":[[["MessageButtonStyle"]]],"meta":{"line":164,"file":"MessageButton.js","path":"src/structures"}}],"meta":{"line":16,"file":"MessageButton.js","path":"src/structures"}},{"name":"MessageCollector","description":"Collects messages on a channel.\nWill automatically stop if the channel ({@link Client#event:channelDelete channelDelete}),\nthread ({@link Client#event:threadDelete threadDelete}), or\nguild ({@link Client#event:guildDelete guildDelete}) is deleted.","extends":[[["Collector"]]],"construct":{"name":"MessageCollector","params":[{"name":"channel","description":"The channel","type":[[["TextBasedChannels"]]]},{"name":"options","description":"The options to be applied to this collector","type":[[["MessageCollectorOptions"]]]}]},"props":[{"name":"channel","description":"The channel","type":[[["TextBasedChannels"]]],"meta":{"line":32,"file":"MessageCollector.js","path":"src/structures"}},{"name":"received","description":"Total number of messages that were received in the channel during message collection","type":[[["number"]]],"meta":{"line":38,"file":"MessageCollector.js","path":"src/structures"}},{"name":"endReason","description":"The reason this collector has ended with, or null if it hasn't ended yet","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":103,"file":"MessageCollector.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this Collector","readonly":true,"type":[[["Client"]]],"meta":{"line":35,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"filter","description":"The filter applied to this collector","type":[[["CollectorFilter"]]],"meta":{"line":48,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"options","description":"The options of this collector","type":[[["CollectorOptions"]]],"meta":{"line":54,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"collected","description":"The items collected by this collector","type":[[["Collection"]]],"meta":{"line":60,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"ended","description":"Whether this collector has finished collecting","type":[[["boolean"]]],"meta":{"line":66,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_timeout","description":"Timeout for cleanup","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":73,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_idletimeout","description":"Timeout for cleanup due to inactivity","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":80,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"next","description":"Returns a promise that resolves with the next collected element;\nrejects with collected elements if the collector finishes without receiving a next element","readonly":true,"type":[[["Promise"]]],"meta":{"line":148,"file":"Collector.js","path":"src/structures/interfaces"}}],"methods":[{"name":"collect","description":"Handles a message for possible collection.","access":"private","params":[{"name":"message","description":"The message that could be collected","type":[[["Message"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":73,"file":"MessageCollector.js","path":"src/structures"}},{"name":"dispose","description":"Handles a message for possible disposal.","params":[{"name":"message","description":"The message that could be disposed of","type":[[["Message"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":89,"file":"MessageCollector.js","path":"src/structures"}},{"name":"_handleChannelDeletion","description":"Handles checking if the channel has been deleted, and if so, stops the collector with the reason 'channelDelete'.","access":"private","params":[{"name":"channel","description":"The channel that was deleted","type":[[["GuildChannel"]]]}],"returns":[[["void"]]],"meta":{"line":115,"file":"MessageCollector.js","path":"src/structures"}},{"name":"_handleThreadDeletion","description":"Handles checking if the thread has been deleted, and if so, stops the collector with the reason 'threadDelete'.","access":"private","params":[{"name":"thread","description":"The thread that was deleted","type":[[["ThreadChannel"]]]}],"returns":[[["void"]]],"meta":{"line":127,"file":"MessageCollector.js","path":"src/structures"}},{"name":"_handleGuildDeletion","description":"Handles checking if the guild has been deleted, and if so, stops the collector with the reason 'guildDelete'.","access":"private","params":[{"name":"guild","description":"The guild that was deleted","type":[[["Guild"]]]}],"returns":[[["void"]]],"meta":{"line":139,"file":"MessageCollector.js","path":"src/structures"}},{"name":"handleCollect","description":"Call this to handle an event as a collectable element. Accepts any event data as parameters.","inherits":"Collector#handleCollect","inherited":true,"emits":["Collector#event:collect"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":99,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"handleDispose","description":"Call this to remove an element from the collection. Accepts any event data as parameters.","inherits":"Collector#handleDispose","inherited":true,"emits":["Collector#event:dispose"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":126,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"stop","description":"Stops this collector and emits the `end` event.","inherits":"Collector#stop","inherited":true,"emits":["Collector#event:end"],"params":[{"name":"reason","description":"The reason this collector is ending","optional":true,"default":"'user'","type":[[["string"]]]}],"meta":{"line":180,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"resetTimer","description":"Resets the collector's timeout and idle timer.","inherits":"Collector#resetTimer","inherited":true,"params":[{"name":"options","description":"Options for resetting","optional":true,"type":[[["CollectorResetTimerOptions"]]]}],"meta":{"line":213,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"checkEnd","description":"Checks whether the collector should end, and if so, ends it.","inherits":"Collector#checkEnd","inherited":true,"returns":{"types":[[["boolean"]]],"description":"Whether the collector ended or not"},"meta":{"line":228,"file":"Collector.js","path":"src/structures/interfaces"}}],"events":[{"name":"collect","description":"Emitted whenever a message is collected.","params":[{"name":"message","description":"The message that was collected","type":[[["Message"]]]}],"meta":{"line":74,"file":"MessageCollector.js","path":"src/structures"}},{"name":"dispose","description":"Emitted whenever a message is disposed of.","params":[{"name":"message","description":"The message that was disposed of","type":[[["Message"]]]}],"meta":{"line":90,"file":"MessageCollector.js","path":"src/structures"}},{"name":"end","description":"Emitted when the collector is finished collecting.","params":[{"name":"collected","description":"The elements collected by the collector","type":[[["Collection"]]]},{"name":"reason","description":"The reason the collector ended","type":[[["string"]]]}],"meta":{"line":193,"file":"Collector.js","path":"src/structures/interfaces"}}],"meta":{"line":19,"file":"MessageCollector.js","path":"src/structures"}},{"name":"MessageComponentInteraction","description":"Represents a message component interaction.","extends":[[["Interaction"]]],"implements":[[["InteractionResponses"]]],"props":[{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":17,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"message","description":"The message to which the component was attached","type":[[["Message"]],[["APIMessage"]]],"meta":{"line":27,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"customId","description":"The custom id of the component which was interacted with","type":[[["string"]]],"meta":{"line":33,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"componentType","description":"The type of component which was interacted with","type":[[["string"]]],"meta":{"line":39,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":45,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":57,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":63,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"component","description":"The component which was interacted with","readonly":true,"type":[[["MessageActionRowComponent"]],[["APIMessageActionRowComponent"]]],"meta":{"line":78,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}},{"name":"resolveType","description":"Resolves the type of a MessageComponent","scope":"static","access":"private","params":[{"name":"type","description":"The type to resolve","type":[[["MessageComponentTypeResolvable"]]]}],"returns":[[["MessageComponentType"]]],"meta":{"line":90,"file":"MessageComponentInteraction.js","path":"src/structures"}}],"meta":{"line":13,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"MessageContextMenuInteraction","description":"Represents a message context menu interaction.","extends":[[["ContextMenuInteraction"]]],"props":[{"name":"targetMessage","description":"The message this interaction was sent from","readonly":true,"type":[[["Message"]],[["APIMessage"]]],"meta":{"line":15,"file":"MessageContextMenuInteraction.js","path":"src/structures"}},{"name":"options","description":"The target of the interaction, parsed into options","type":[[["CommandInteractionOptionResolver"]]],"meta":{"line":18,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"targetId","description":"The id of the target of the interaction","type":[[["Snowflake"]]],"meta":{"line":28,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"targetType","description":"The type of the target of the interaction; either USER or MESSAGE","type":[[["ApplicationCommandType"]]],"meta":{"line":34,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":20,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandId","description":"The invoked application command's id","type":[[["Snowflake"]]],"meta":{"line":30,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandName","description":"The invoked application command's name","type":[[["string"]]],"meta":{"line":36,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":42,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":48,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":54,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":60,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"command","description":"The invoked application command, if it was fetched before","nullable":true,"type":[[["ApplicationCommand"]]],"meta":{"line":67,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"resolveContextMenuOptions","description":"Resolves and transforms options received from the API for a context menu interaction.","access":"private","inherits":"ContextMenuInteraction#resolveContextMenuOptions","inherited":true,"params":[{"name":"data","description":"The interaction data","type":[[["APIApplicationCommandInteractionData"]]]}],"returns":[[["Array","<"],["CommandInteractionOption",">"]]],"meta":{"line":43,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"transformResolved","description":"Transforms the resolved received from the API.","access":"private","inherits":"BaseCommandInteraction#transformResolved","inherited":true,"params":[{"name":"resolved","description":"The received resolved objects","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionResolvedData"]]],"meta":{"line":89,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"transformOption","description":"Transforms an option received from the API.","access":"private","inherits":"BaseCommandInteraction#transformOption","inherited":true,"params":[{"name":"option","description":"The received option","type":[[["APIApplicationCommandOption"]]]},{"name":"resolved","description":"The resolved interaction data","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionOption"]]],"meta":{"line":162,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"BaseCommandInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"BaseCommandInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"BaseCommandInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"BaseCommandInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"BaseCommandInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"BaseCommandInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"BaseCommandInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseCommandInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":9,"file":"MessageContextMenuInteraction.js","path":"src/structures"}},{"name":"MessageEmbed","description":"Represents an embed in a message (image/video preview, rich embed, etc.)","construct":{"name":"MessageEmbed","params":[{"name":"data","description":"MessageEmbed to clone or raw embed data","optional":true,"default":"{}","type":[[["MessageEmbed"]],[["MessageEmbedOptions"]],[["APIEmbed"]]]}]},"props":[{"name":"type","description":"The type of this embed, either:\n* `rich` - a generic embed rendered from embed attributes\n* `image` - an image embed\n* `video` - a video embed\n* `gifv` - an animated gif image embed rendered as a video embed\n* `article` - an article embed\n* `link` - a link embed","see":["{@link https://discord.com/developers/docs/resources/channel#embed-object-embed-types}"],"deprecated":true,"type":[[["string"]]],"meta":{"line":61,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"title","description":"The title of this embed","nullable":true,"type":[[["string"]]],"meta":{"line":67,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"description","description":"The description of this embed","nullable":true,"type":[[["string"]]],"meta":{"line":73,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"url","description":"The URL of this embed","nullable":true,"type":[[["string"]]],"meta":{"line":79,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"color","description":"The color of this embed","nullable":true,"type":[[["number"]]],"meta":{"line":85,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"timestamp","description":"The timestamp of this embed","nullable":true,"type":[[["number"]]],"meta":{"line":91,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"fields","description":"The fields of this embed","type":[[["Array","<"],["EmbedField",">"]]],"meta":{"line":105,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"thumbnail","description":"The thumbnail of this embed (if there is one)","nullable":true,"type":[[["MessageEmbedThumbnail"]]],"meta":{"line":123,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"image","description":"The image of this embed, if there is one","nullable":true,"type":[[["MessageEmbedImage"]]],"meta":{"line":145,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"video","description":"The video of this embed (if there is one)","readonly":true,"nullable":true,"type":[[["MessageEmbedVideo"]]],"meta":{"line":168,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"author","description":"The author of this embed (if there is one)","nullable":true,"type":[[["MessageEmbedAuthor"]]],"meta":{"line":190,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"provider","description":"The provider of this embed (if there is one)","nullable":true,"type":[[["MessageEmbedProvider"]]],"meta":{"line":210,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"footer","description":"The footer of this embed","nullable":true,"type":[[["MessageEmbedFooter"]]],"meta":{"line":229,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"createdAt","description":"The date displayed on this embed","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":243,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"hexColor","description":"The hexadecimal version of the embed color, with a leading hash","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":252,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"length","description":"The accumulated length for the embed title, description, fields, footer text, and author name","readonly":true,"type":[[["number"]]],"meta":{"line":261,"file":"MessageEmbed.js","path":"src/structures"}}],"methods":[{"name":"equals","description":"Checks if this embed is equal to another one by comparing every single one of their properties.","params":[{"name":"embed","description":"The embed to compare with","type":[[["MessageEmbed"]],[["APIEmbed"]]]}],"returns":[[["boolean"]]],"meta":{"line":278,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"_fieldEquals","description":"Compares two given embed fields to see if they are equal","access":"private","params":[{"name":"field","description":"The first field to compare","type":[[["EmbedFieldData"]]]},{"name":"other","description":"The second field to compare","type":[[["EmbedFieldData"]]]}],"returns":[[["boolean"]]],"meta":{"line":308,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"addField","description":"Adds a field to the embed (max 25).","deprecated":"This method is a wrapper for {@link MessageEmbed#addFields}. Use that instead.","params":[{"name":"name","description":"The name of this field","type":[[["string"]]]},{"name":"value","description":"The value of this field","type":[[["string"]]]},{"name":"inline","description":"If this field will be displayed inline","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":320,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"addFields","description":"Adds fields to the embed (max 25).","params":[{"name":"fields","description":"The fields to add","variable":true,"type":[[["EmbedFieldData"]],[["Array","<"],["EmbedFieldData",">"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":338,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"spliceFields","description":"Removes, replaces, and inserts fields in the embed (max 25).","params":[{"name":"index","description":"The index to start at","type":[[["number"]]]},{"name":"deleteCount","description":"The number of fields to remove","type":[[["number"]]]},{"name":"fields","description":"The replacing field objects","optional":true,"variable":true,"type":[[["EmbedFieldData"]],[["Array","<"],["EmbedFieldData",">"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":350,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setFields","description":"Sets the embed's fields (max 25).","params":[{"name":"fields","description":"The fields to set","variable":true,"type":[[["EmbedFieldData"]],[["Array","<"],["EmbedFieldData",">"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":360,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setAuthor","description":"Sets the author of this embed.","params":[{"name":"options","description":"The options to provide for the author.\nProvide `null` to remove the author data.","type":[[["string"]],[["EmbedAuthorData"]],[["null"]]]},{"name":"deprecatedIconURL","description":"The icon URL of this author.\nThis parameter is **deprecated**. Use the `options` parameter instead.","optional":true,"type":[[["string"]]]},{"name":"deprecatedURL","description":"The URL of this author.\nThis parameter is **deprecated**. Use the `options` parameter instead.","optional":true,"type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":383,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setColor","description":"Sets the color of this embed.","params":[{"name":"color","description":"The color of the embed","type":[[["ColorResolvable"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":412,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setDescription","description":"Sets the description of this embed.","params":[{"name":"description","description":"The description","type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":422,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setFooter","description":"Sets the footer of this embed.","params":[{"name":"options","description":"The options to provide for the footer.\nProvide `null` to remove the footer data.","type":[[["string"]],[["EmbedFooterData"]],[["null"]]]},{"name":"deprecatedIconURL","description":"The icon URL of this footer.\nThis parameter is **deprecated**. Use the `options` parameter instead.","optional":true,"type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":442,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setImage","description":"Sets the image of this embed.","params":[{"name":"url","description":"The URL of the image","type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":471,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setThumbnail","description":"Sets the thumbnail of this embed.","params":[{"name":"url","description":"The URL of the thumbnail","type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":481,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setTimestamp","description":"Sets the timestamp of this embed.","params":[{"name":"timestamp","description":"The timestamp or date.\nIf `null` then the timestamp will be unset (i.e. when editing an existing {@link MessageEmbed})","optional":true,"default":"Date.now()","type":[[["Date"]],[["number"]],[["null"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":492,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setTitle","description":"Sets the title of this embed.","params":[{"name":"title","description":"The title","type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":503,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setURL","description":"Sets the URL of this embed.","params":[{"name":"url","description":"The URL","type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":513,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"toJSON","description":"Transforms the embed to a plain object.","returns":{"types":[[["APIEmbed"]]],"description":"The raw data of this embed"},"meta":{"line":522,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"normalizeField","description":"Normalizes field input and verifies strings.","scope":"static","params":[{"name":"name","description":"The name of the field","type":[[["string"]]]},{"name":"value","description":"The value of the field","type":[[["string"]]]},{"name":"inline","description":"Set the field to display inline","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["EmbedField"]]],"meta":{"line":552,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"normalizeFields","description":"Normalizes field input and resolves strings.","scope":"static","params":[{"name":"fields","description":"Fields to normalize","variable":true,"type":[[["EmbedFieldData"]],[["Array","<"],["EmbedFieldData",">"]]]}],"returns":[[["Array","<"],["EmbedField",">"]]],"meta":{"line":572,"file":"MessageEmbed.js","path":"src/structures"}}],"meta":{"line":16,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageMentions","description":"Keeps track of mentions in a {@link Message}.","props":[{"name":"everyone","description":"Whether `@everyone` or `@here` were mentioned","type":[[["boolean"]]],"meta":{"line":38,"file":"MessageMentions.js","path":"src/structures"}},{"name":"users","description":"Any users that were mentioned\nOrder as received from the API, not as they appear in the message content","type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":47,"file":"MessageMentions.js","path":"src/structures"}},{"name":"roles","description":"Any roles that were mentioned\nOrder as received from the API, not as they appear in the message content","type":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":68,"file":"MessageMentions.js","path":"src/structures"}},{"name":"_members","description":"Cached members for {@link MessageMentions#members}","access":"private","nullable":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":87,"file":"MessageMentions.js","path":"src/structures"}},{"name":"_channels","description":"Cached channels for {@link MessageMentions#channels}","access":"private","nullable":true,"type":[[["Collection","<"],["Snowflake",", "],["Channel",">"]]],"meta":{"line":94,"file":"MessageMentions.js","path":"src/structures"}},{"name":"_parsedUsers","description":"Cached users for {@link MessageMentions#parsedUsers}","access":"private","nullable":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":101,"file":"MessageMentions.js","path":"src/structures"}},{"name":"crosspostedChannels","description":"A collection of crossposted channels\nOrder as received from the API, not as they appear in the message content","type":[[["Collection","<"],["Snowflake",", "],["CrosspostedChannel",">"]]],"meta":{"line":119,"file":"MessageMentions.js","path":"src/structures"}},{"name":"repliedUser","description":"The author of the message that this message is a reply to","nullable":true,"type":[[["User"]]],"meta":{"line":141,"file":"MessageMentions.js","path":"src/structures"}},{"name":"members","description":"Any members that were mentioned (only in {@link Guild}s)\nOrder as received from the API, not as they appear in the message content","readonly":true,"nullable":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":150,"file":"MessageMentions.js","path":"src/structures"}},{"name":"channels","description":"Any channels that were mentioned\nOrder as they appear first in the message content","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Channel",">"]]],"meta":{"line":167,"file":"MessageMentions.js","path":"src/structures"}},{"name":"parsedUsers","description":"Any user mentions that were included in the message content\nOrder as they appear first in the message content","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":184,"file":"MessageMentions.js","path":"src/structures"}},{"name":"EVERYONE_PATTERN","description":"Regular expression that globally matches `@everyone` and `@here`","scope":"static","type":[[["RegExp"]]],"meta":{"line":252,"file":"MessageMentions.js","path":"src/structures"}},{"name":"USERS_PATTERN","description":"Regular expression that globally matches user mentions like `<@81440962496172032>`","scope":"static","type":[[["RegExp"]]],"meta":{"line":258,"file":"MessageMentions.js","path":"src/structures"}},{"name":"ROLES_PATTERN","description":"Regular expression that globally matches role mentions like `<@&297577916114403338>`","scope":"static","type":[[["RegExp"]]],"meta":{"line":264,"file":"MessageMentions.js","path":"src/structures"}},{"name":"CHANNELS_PATTERN","description":"Regular expression that globally matches channel mentions like `<#222079895583457280>`","scope":"static","type":[[["RegExp"]]],"meta":{"line":270,"file":"MessageMentions.js","path":"src/structures"}}],"methods":[{"name":"has","description":"Checks if a user, guild member, thread member, role, or channel is mentioned.\nTakes into account user mentions, role mentions, channel mentions,\nreplied user mention, and `@everyone`/`@here` mentions.","params":[{"name":"data","description":"The User/Role/Channel to check for","type":[[["UserResolvable"]],[["RoleResolvable"]],[["ChannelResolvable"]]]},{"name":"options","description":"The options for the check","optional":true,"type":[[["MessageMentionsHasOptions"]]]}],"returns":[[["boolean"]]],"meta":{"line":212,"file":"MessageMentions.js","path":"src/structures"}}],"meta":{"line":10,"file":"MessageMentions.js","path":"src/structures"}},{"name":"MessagePayload","description":"Represents a message to be sent to the API.","construct":{"name":"MessagePayload","params":[{"name":"target","description":"The target for this message to be sent to","type":[[["MessageTarget"]]]},{"name":"options","description":"Options passed in from send","type":[[["MessageOptions"]],[["WebhookMessageOptions"]]]}]},"props":[{"name":"target","description":"The target for this message to be sent to","type":[[["MessageTarget"]]],"meta":{"line":26,"file":"MessagePayload.js","path":"src/structures"}},{"name":"options","description":"Options passed in from send","type":[[["MessageOptions"]],[["WebhookMessageOptions"]]],"meta":{"line":32,"file":"MessagePayload.js","path":"src/structures"}},{"name":"data","description":"Data sendable to the API","nullable":true,"type":[[["APIMessage"]]],"meta":{"line":38,"file":"MessagePayload.js","path":"src/structures"}},{"name":"files","description":"Files sendable to the API","nullable":true,"type":[[["Array","<"],["MessageFile",">"]]],"meta":{"line":52,"file":"MessagePayload.js","path":"src/structures"}},{"name":"usingNewAttachmentAPI","description":"Whether or not using new API to upload files","readonly":true,"type":[[["boolean"]]],"meta":{"line":60,"file":"MessagePayload.js","path":"src/structures"}},{"name":"isWebhook","description":"Whether or not the target is a {@link Webhook} or a {@link WebhookClient}","readonly":true,"type":[[["boolean"]]],"meta":{"line":69,"file":"MessagePayload.js","path":"src/structures"}},{"name":"isUser","description":"Whether or not the target is a {@link User}","readonly":true,"type":[[["boolean"]]],"meta":{"line":80,"file":"MessagePayload.js","path":"src/structures"}},{"name":"isMessage","description":"Whether or not the target is a {@link Message}","readonly":true,"type":[[["boolean"]]],"meta":{"line":91,"file":"MessagePayload.js","path":"src/structures"}},{"name":"isMessageManager","description":"Whether or not the target is a {@link MessageManager}","readonly":true,"type":[[["boolean"]]],"meta":{"line":101,"file":"MessagePayload.js","path":"src/structures"}},{"name":"isInteraction","description":"Whether or not the target is an {@link Interaction} or an {@link InteractionWebhook}","readonly":true,"type":[[["boolean"]]],"meta":{"line":111,"file":"MessagePayload.js","path":"src/structures"}}],"methods":[{"name":"makeContent","description":"Makes the content of this message.","returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":121,"file":"MessagePayload.js","path":"src/structures"}},{"name":"resolveData","description":"Resolves data.","async":true,"returns":[[["MessagePayload"]]],"meta":{"line":136,"file":"MessagePayload.js","path":"src/structures"}},{"name":"resolveFiles","description":"Resolves files.","async":true,"returns":[[["Promise","<"],["MessagePayload",">"]]],"meta":{"line":283,"file":"MessagePayload.js","path":"src/structures"}},{"name":"resolveFile","description":"Resolves a single file into an object sendable to the API.","scope":"static","params":[{"name":"fileLike","description":"Something that could be resolved to a file","type":[[["BufferResolvable"]],[["Stream"]],[["FileOptions"]],[["MessageAttachment"]]]}],"async":true,"returns":[[["Promise","<"],["MessageFile",">"]]],"meta":{"line":295,"file":"MessagePayload.js","path":"src/structures"}},{"name":"create","description":"Creates a {@link MessagePayload} from user-level arguments.","scope":"static","params":[{"name":"target","description":"Target to send to","type":[[["MessageTarget"]]]},{"name":"options","description":"Options or content to use","type":[[["string"]],[["MessageOptions"]],[["WebhookMessageOptions"]]]},{"name":"extra","description":"Extra options to add onto specified options","optional":true,"default":"{}","type":[[["MessageOptions"]],[["WebhookMessageOptions"]]]}],"returns":[[["MessagePayload"]]],"meta":{"line":339,"file":"MessagePayload.js","path":"src/structures"}}],"meta":{"line":16,"file":"MessagePayload.js","path":"src/structures"}},{"name":"MessageReaction","description":"Represents a reaction to a message.","props":[{"name":"client","description":"The client that instantiated this message reaction","readonly":true,"type":[[["Client"]]],"meta":{"line":13,"file":"MessageReaction.js","path":"src/structures"}},{"name":"message","description":"The message that this reaction refers to","type":[[["Message"]]],"meta":{"line":25,"file":"MessageReaction.js","path":"src/structures"}},{"name":"me","description":"Whether the client has given this reaction","type":[[["boolean"]]],"meta":{"line":31,"file":"MessageReaction.js","path":"src/structures"}},{"name":"isBurst","description":"Super reaction","type":[[["boolean"]]],"meta":{"line":37,"file":"MessageReaction.js","path":"src/structures"}},{"name":"users","description":"A manager of the users that have given this reaction","type":[[["ReactionUserManager"]]],"meta":{"line":43,"file":"MessageReaction.js","path":"src/structures"}},{"name":"count","description":"The number of people that have given the same reaction","nullable":true,"type":[[["number"]]],"meta":{"line":56,"file":"MessageReaction.js","path":"src/structures"}},{"name":"burstCount","description":"The number of people that have given the same super reaction","nullable":true,"type":[[["number"]]],"meta":{"line":64,"file":"MessageReaction.js","path":"src/structures"}},{"name":"burstColors","description":"HEX colors used for super reaction","type":[[["Array","<"],["string",">"]]],"meta":{"line":72,"file":"MessageReaction.js","path":"src/structures"}},{"name":"countDetails","description":"The reaction count details object contains information about super and normal reaction counts.","nullable":true,"type":[[["ReactionCountDetailsData"]]],"meta":{"line":87,"file":"MessageReaction.js","path":"src/structures"}},{"name":"emoji","description":"The emoji of this reaction. Either a {@link GuildEmoji} object for known custom emojis, or a {@link ReactionEmoji}\nobject which has fewer properties. Whatever the prototype of the emoji, it will still have\n`name`, `id`, `identifier` and `toString()`","readonly":true,"type":[[["GuildEmoji"]],[["ReactionEmoji"]]],"meta":{"line":114,"file":"MessageReaction.js","path":"src/structures"}},{"name":"partial","description":"Whether or not this reaction is a partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":133,"file":"MessageReaction.js","path":"src/structures"}}],"methods":[{"name":"remove","description":"Removes all users from this reaction.","async":true,"returns":[[["Promise","<"],["MessageReaction",">"]]],"meta":{"line":98,"file":"MessageReaction.js","path":"src/structures"}},{"name":"fetch","description":"Fetch this reaction.","async":true,"returns":[[["Promise","<"],["MessageReaction",">"]]],"meta":{"line":141,"file":"MessageReaction.js","path":"src/structures"}}],"meta":{"line":11,"file":"MessageReaction.js","path":"src/structures"}},{"name":"MessageSelectMenu","description":"Represents a select menu message component","extends":[[["BaseMessageComponent"]]],"construct":{"name":"MessageSelectMenu","params":[{"name":"data","description":"MessageSelectMenu to clone or raw data","optional":true,"default":"{}","type":[[["MessageSelectMenu"]],[["MessageSelectMenuOptions"]]]}]},"props":[{"name":"customId","description":"A unique string to be sent in the interaction when clicked","nullable":true,"type":[[["string"]]],"meta":{"line":64,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"placeholder","description":"Custom placeholder text to display when nothing is selected","nullable":true,"type":[[["string"]]],"meta":{"line":70,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"minValues","description":"The minimum number of selections required","nullable":true,"type":[[["number"]]],"meta":{"line":76,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"maxValues","description":"The maximum number of selections allowed","nullable":true,"type":[[["number"]]],"meta":{"line":82,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"options","description":"Options for the STRING_SELECT menu","type":[[["Array","<"],["MessageSelectOption",">"]]],"meta":{"line":88,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"disabled","description":"Whether this select menu is currently disabled","type":[[["boolean"]]],"meta":{"line":94,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"channelTypes","description":"Channels that are possible to select in CHANNEL_SELECT menu","type":[[["Array","<"],["ChannelType",">"]]],"meta":{"line":100,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"type","description":"The type of this component","nullable":true,"type":[[["MessageComponentType"]]],"meta":{"line":52,"file":"BaseMessageComponent.js","path":"src/structures"}}],"methods":[{"name":"addChannelTypes","description":"Adds the channel types to the select menu","params":[{"name":"channelTypes","description":"Added channel types","variable":true,"type":[[["Array","<"],["ChannelType",">"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":111,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"setChannelTypes","description":"Sets the channel types of the select menu","params":[{"name":"channelTypes","description":"An array of new channel types","variable":true,"type":[[["Array","<"],["ChannelType",">"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":126,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"setCustomId","description":"Sets the custom id of this select menu","params":[{"name":"customId","description":"A unique string to be sent in the interaction when clicked","type":[[["string"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":141,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"setDisabled","description":"Sets the interactive status of the select menu","params":[{"name":"disabled","description":"Whether this select menu should be disabled","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":151,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"setMaxValues","description":"Sets the maximum number of selections allowed for this select menu","params":[{"name":"maxValues","description":"Number of selections to be allowed","type":[[["number"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":161,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"setMinValues","description":"Sets the minimum number of selections required for this select menu\nThis will default the maxValues to the number of options, unless manually set","params":[{"name":"minValues","description":"Number of selections to be required","type":[[["number"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":172,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"setPlaceholder","description":"Sets the placeholder of this select menu","params":[{"name":"placeholder","description":"Custom placeholder text to display when nothing is selected","type":[[["string"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":182,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"setType","description":"Sets the type of the select menu","params":[{"name":"type","description":"Type of the select menu","type":[[["SelectMenuComponentType"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":192,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"addOptions","description":"Adds options to the select menu.","params":[{"name":"options","description":"The options to add","variable":true,"type":[[["MessageSelectOptionData"]],[["Array","<"],["MessageSelectOptionData",">"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":203,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"setOptions","description":"Sets the options of the select menu.","params":[{"name":"options","description":"The options to set","variable":true,"type":[[["MessageSelectOptionData"]],[["Array","<"],["MessageSelectOptionData",">"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":213,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"spliceOptions","description":"Removes, replaces, and inserts options in the select menu.","params":[{"name":"index","description":"The index to start at","type":[[["number"]]]},{"name":"deleteCount","description":"The number of options to remove","type":[[["number"]]]},{"name":"options","description":"The replacing option objects","optional":true,"variable":true,"type":[[["MessageSelectOptionData"]],[["Array","<"],["MessageSelectOptionData",">"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":225,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"toJSON","description":"Transforms the select menu into a plain object","returns":{"types":[[["APIMessageSelectMenu"]]],"description":"The raw data of this select menu"},"meta":{"line":234,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"select","description":"Mesage select menu","params":[{"name":"message","description":"The message this select menu is for","type":[[["Message"]]]},{"name":"values","description":"The values of the select menu","type":[[["Array","<"],["any",">"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":279,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"normalizeOption","description":"Normalizes option input and resolves strings and emojis.","scope":"static","params":[{"name":"option","description":"The select menu option to normalize","type":[[["MessageSelectOptionData"]]]}],"returns":[[["MessageSelectOption"]]],"meta":{"line":252,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"normalizeOptions","description":"Normalizes option input and resolves strings and emojis.","scope":"static","params":[{"name":"options","description":"The select menu options to normalize","variable":true,"type":[[["MessageSelectOptionData"]],[["Array","<"],["MessageSelectOptionData",">"]]]}],"returns":[[["Array","<"],["MessageSelectOption",">"]]],"meta":{"line":268,"file":"MessageSelectMenu.js","path":"src/structures"}}],"meta":{"line":20,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"Modal","description":"Represents a modal (form) to be shown in response to an interaction","construct":{"name":"Modal","params":[{"name":"data","description":"Modal to clone or raw data","type":[[["Modal"]],[["ModalOptions"]]]},{"name":"client","description":"The client constructing this Modal, if provided","default":null,"type":[[["Client"]]]}]},"props":[{"name":"components","description":"A list of MessageActionRows in the modal","type":[[["Array","<"],["MessageActionRow",">"]]],"meta":{"line":30,"file":"Modal.js","path":"src/structures"}},{"name":"customId","description":"A unique string to be sent in the interaction when submitted","nullable":true,"type":[[["string"]]],"meta":{"line":36,"file":"Modal.js","path":"src/structures"}},{"name":"title","description":"The title to be displayed on this modal","nullable":true,"type":[[["string"]]],"meta":{"line":42,"file":"Modal.js","path":"src/structures"}},{"name":"nonce","description":"Timestamp (Discord epoch) of when this modal was created","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":48,"file":"Modal.js","path":"src/structures"}},{"name":"id","description":"ID slash / button / menu when modal is displayed","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":54,"file":"Modal.js","path":"src/structures"}},{"name":"application","description":"Application sending the modal","nullable":true,"type":[[["Object"]]],"meta":{"line":60,"file":"Modal.js","path":"src/structures"}},{"name":"sendFromInteraction","description":"Get Interaction Response","readonly":true,"nullable":true,"type":[[["InteractionResponse"]]],"meta":{"line":75,"file":"Modal.js","path":"src/structures"}}],"methods":[{"name":"addComponents","description":"Adds components to the modal.","params":[{"name":"components","description":"The components to add","variable":true,"type":[[["Array","<"],["MessageActionRowResolvable",">"]]]}],"returns":[[["Modal"]]],"meta":{"line":91,"file":"Modal.js","path":"src/structures"}},{"name":"setComponents","description":"Sets the components of the modal.","params":[{"name":"components","description":"The components to set","variable":true,"type":[[["Array","<"],["MessageActionRowResolvable",">"]]]}],"returns":[[["Modal"]]],"meta":{"line":101,"file":"Modal.js","path":"src/structures"}},{"name":"setCustomId","description":"Sets the custom id for this modal","params":[{"name":"customId","description":"A unique string to be sent in the interaction when submitted","type":[[["string"]]]}],"returns":[[["Modal"]]],"meta":{"line":111,"file":"Modal.js","path":"src/structures"}},{"name":"spliceComponents","description":"Removes, replaces, and inserts components in the modal.","params":[{"name":"index","description":"The index to start at","type":[[["number"]]]},{"name":"deleteCount","description":"The number of components to remove","type":[[["number"]]]},{"name":"components","description":"The replacing components","optional":true,"variable":true,"type":[[["Array","<"],["MessageActionRowResolvable",">"]]]}],"returns":[[["Modal"]]],"meta":{"line":123,"file":"Modal.js","path":"src/structures"}},{"name":"setTitle","description":"Sets the title of this modal","params":[{"name":"title","description":"The title to be displayed on this modal","type":[[["string"]]]}],"returns":[[["Modal"]]],"meta":{"line":133,"file":"Modal.js","path":"src/structures"}},{"name":"reply","description":"Reply to this modal with data. (Event only)","examples":["client.on('interactionModalCreate', modal => {\n// 1.\n modal.reply({\n data: [\n {\n customId: 'code',\n value: '1+1'\n }, {\n customId: 'message',\n value: 'hello'\n }\n ],\n channel: 'id', // optional\n guild: 'id', // optional\n })\n// or 2.\nmodal.components[0].components[0].setValue('1+1');\nmodal.components[1].components[0].setValue('hello');\nmodal.reply();\n})"],"params":[{"name":"data","description":"Data to send with the modal","type":[[["ModalReplyData"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":186,"file":"Modal.js","path":"src/structures"}}],"meta":{"line":12,"file":"Modal.js","path":"src/structures"}},{"name":"ModalSubmitFieldsResolver","description":"A resolver for modal submit interaction text inputs.","props":[{"name":"components","description":"The components within the modal","type":[[["Array","<"],["PartialModalActionRow",">"]]],"meta":{"line":15,"file":"ModalSubmitFieldsResolver.js","path":"src/structures"}},{"name":"_fields","description":"The extracted fields from the modal","access":"private","type":[[["Array","<"],["PartialInputTextData",">"]]],"meta":{"line":23,"file":"ModalSubmitFieldsResolver.js","path":"src/structures"}}],"methods":[{"name":"getField","description":"Gets a field given a custom id from a component","params":[{"name":"customId","description":"The custom id of the component","type":[[["string"]]]}],"returns":{"types":[[["PartialInputTextData"]]],"nullable":true},"meta":{"line":32,"file":"ModalSubmitFieldsResolver.js","path":"src/structures"}},{"name":"getTextInputValue","description":"Gets the value of a text input component given a custom id","params":[{"name":"customId","description":"The custom id of the text input component","type":[[["string"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":43,"file":"ModalSubmitFieldsResolver.js","path":"src/structures"}}],"meta":{"line":9,"file":"ModalSubmitFieldsResolver.js","path":"src/structures"}},{"name":"ModalSubmitInteraction","description":"Represents a modal submit interaction.","extends":[[["Interaction"]]],"implements":[[["InteractionResponses"]]],"props":[{"name":"customId","description":"The custom id of the modal.","type":[[["string"]]],"meta":{"line":22,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"components","description":"The inputs within the modal","type":[[["Array","<"],["PartialModalActionRow",">"]]],"meta":{"line":41,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"message","description":"The message associated with this interaction","type":[[["Message"]],[["APIMessage"]],[["null"]]],"meta":{"line":51,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"fields","description":"The fields within the modal","type":[[["ModalSubmitFieldsResolver"]]],"meta":{"line":57,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":63,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":69,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":75,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":81,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"isFromMessage","description":"Whether this is from a {@link MessageComponentInteraction}.","returns":[[["boolean"]]],"meta":{"line":101,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"deferReply","description":"Defers the reply to this interaction.","implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}},{"name":"transformComponent","description":"Transforms component data to discord.js-compatible data","scope":"static","params":[{"name":"rawComponent","description":"The data to transform","type":[["*"]]}],"returns":[[["Array","<"],["PartialTextInputData",">"]]],"meta":{"line":89,"file":"ModalSubmitInteraction.js","path":"src/structures"}}],"meta":{"line":14,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"NewsChannel","description":"Represents a guild news channel on Discord.","extends":[[["BaseGuildTextChannel"]]],"props":[{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":22,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":28,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"threads","description":"A manager of the threads belonging to this channel","type":[[["GuildTextThreadManager"]]],"meta":{"line":34,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":40,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"topic","description":"The topic of the text channel","nullable":true,"type":[[["string"]]],"meta":{"line":53,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in the channel, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":65,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastPinTimestamp","description":"The timestamp when the last pinned message was pinned, if there was one","nullable":true,"type":[[["number"]]],"meta":{"line":73,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"defaultAutoArchiveDuration","description":"The default auto archive duration for newly created threads in this channel","nullable":true,"type":[[["number"]]],"meta":{"line":81,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"defaultThreadRateLimitPerUser","description":"The initial rate limit per user (slowmode) to set on newly created threads in a channel.","nullable":true,"type":[[["number"]]],"meta":{"line":89,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinAt","description":"The date when the last pinned message was pinned, if there was one","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":68,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":274,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"addFollower","description":"Adds the target to this channel's followers.\nIf you need the created webhook id, use {@link GuildChannelManager#addFollower}.","examples":["if (channel.type === 'GUILD_NEWS') {\n channel.addFollower('222197033908436994', 'Important announcements')\n .then(() => console.log('Added follower'))\n .catch(console.error);\n}"],"params":[{"name":"channel","description":"The channel where the webhook should be created","type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for creating the webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["NewsChannel",">"]]],"meta":{"line":24,"file":"NewsChannel.js","path":"src/structures"}},{"name":"setDefaultAutoArchiveDuration","description":"Sets the default auto archive duration for all newly created threads in this channel.","inherits":"BaseGuildTextChannel#setDefaultAutoArchiveDuration","inherited":true,"params":[{"name":"defaultAutoArchiveDuration","description":"The new default auto archive duration","type":[[["ThreadAutoArchiveDuration"]]]},{"name":"reason","description":"Reason for changing the channel's default auto archive duration","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["TextChannel",">"]]],"meta":{"line":105,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"setType","description":"Sets the type of this channel (only conversion between text and news is supported)","inherits":"BaseGuildTextChannel#setType","inherited":true,"params":[{"name":"type","description":"The new channel type","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the channel's type","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":115,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"setTopic","description":"Sets a new topic for the guild channel.","inherits":"BaseGuildTextChannel#setTopic","inherited":true,"examples":["// Set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.error);"],"params":[{"name":"topic","description":"The new topic for the guild channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's topic","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":130,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"createInvite","description":"Creates an invite to this guild channel.","inherits":"BaseGuildTextChannel#createInvite","inherited":true,"examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":168,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","inherits":"BaseGuildTextChannel#fetchInvites","inherited":true,"params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":178,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","inherits":"BaseGuildTextChannel#send","inherited":true,"implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","inherits":"BaseGuildTextChannel#sendTyping","inherited":true,"implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","inherits":"BaseGuildTextChannel#createMessageCollector","inherited":true,"implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","inherits":"BaseGuildTextChannel#awaitMessages","inherited":true,"implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","inherits":"BaseGuildTextChannel#createMessageComponentCollector","inherited":true,"implements":["TextBasedChannel#createMessageComponentCollector"],"examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseGuildTextChannel#awaitMessageComponent","inherited":true,"implements":["TextBasedChannel#awaitMessageComponent"],"examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"bulkDelete","description":"Bulk deletes given messages that are newer than two weeks.","inherits":"BaseGuildTextChannel#bulkDelete","inherited":true,"implements":["TextBasedChannel#bulkDelete"],"examples":["// Bulk delete messages\nchannel.bulkDelete(5)\n .then(messages => console.log(`Bulk deleted ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"messages","description":"Messages or number of messages to delete","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]],[["Array","<"],["MessageResolvable",">"]],[["number"]]]},{"name":"filterOld","description":"Filter messages to remove those which are older than two weeks automatically","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Collection","<"],["Snowflake",", ("],["Message","|"],["undefined",")>>"]]],"description":"Returns the deleted messages"},"meta":{"line":319,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","inherits":"BaseGuildTextChannel#fetchWebhooks","inherited":true,"implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":368,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","inherits":"BaseGuildTextChannel#createWebhook","inherited":true,"implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":393,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","inherits":"BaseGuildTextChannel#setRateLimitPerUser","inherited":true,"implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":403,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","inherits":"BaseGuildTextChannel#setNSFW","inherited":true,"implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":413,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"searchInteraction","description":"Search Slash Command (return raw data)","inherits":"BaseGuildTextChannel#searchInteraction","inherited":true,"implements":["TextBasedChannel#searchInteraction"],"params":[{"name":"applicationId","description":"Application ID","type":[[["Snowflake"]]]},{"name":"type","description":"Command Type","default":"CHAT_INPUT","nullable":true,"type":[[["ApplicationCommandType"]]]}],"returns":[[["Object"]]],"meta":{"line":423,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendSlash","description":"Send Slash to this channel","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/SlashCommand.md}"],"inherits":"BaseGuildTextChannel#sendSlash","inherited":true,"implements":["TextBasedChannel#sendSlash"],"examples":["// Send a basic slash\nchannel.sendSlash('botid', 'ping')\n .then(console.log)\n .catch(console.error);","// Send a remote file\nchannel.sendSlash('botid', 'emoji upload', 'https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048', 'test')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"bot","description":"Bot user (BotID, not applicationID)","type":[[["UserResolvable"]]]},{"name":"commandString","description":"Command name (and sub / group formats)","type":[[["string"]]]},{"name":"args","description":"Command arguments","variable":true,"type":[[["any"]],[["Array","<"],["any",">"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":463,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":10,"file":"NewsChannel.js","path":"src/structures"}},{"name":"OAuth2Guild","description":"A partial guild received when using {@link GuildManager#fetch} to fetch multiple guilds.","extends":[[["BaseGuild"]]],"props":[{"name":"owner","description":"Whether the client user is the owner of the guild","type":[[["boolean"]]],"meta":{"line":18,"file":"OAuth2Guild.js","path":"src/structures"}},{"name":"permissions","description":"The permissions that the client user has in this guild","type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":24,"file":"OAuth2Guild.js","path":"src/structures"}},{"name":"id","description":"The guild's id","type":[[["Snowflake"]]],"meta":{"line":19,"file":"BaseGuild.js","path":"src/structures"}},{"name":"name","description":"The name of this guild","type":[[["string"]]],"meta":{"line":25,"file":"BaseGuild.js","path":"src/structures"}},{"name":"icon","description":"The icon hash of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":31,"file":"BaseGuild.js","path":"src/structures"}},{"name":"features","description":"An array of features available to this guild","type":[[["Array","<"],["Features",">"]]],"meta":{"line":37,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this guild was created at","readonly":true,"type":[[["number"]]],"meta":{"line":45,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdAt","description":"The time this guild was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":54,"file":"BaseGuild.js","path":"src/structures"}},{"name":"nameAcronym","description":"The acronym that shows up in place of a guild icon","readonly":true,"type":[[["string"]]],"meta":{"line":63,"file":"BaseGuild.js","path":"src/structures"}},{"name":"partnered","description":"Whether this guild is partnered","readonly":true,"type":[[["boolean"]]],"meta":{"line":75,"file":"BaseGuild.js","path":"src/structures"}},{"name":"verified","description":"Whether this guild is verified","readonly":true,"type":[[["boolean"]]],"meta":{"line":84,"file":"BaseGuild.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"iconURL","description":"The URL to this guild's icon.","inherits":"BaseGuild#iconURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"BaseGuild.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this guild.","inherits":"BaseGuild#fetch","inherited":true,"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":102,"file":"BaseGuild.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the guild's name instead of the Guild object.","inherits":"BaseGuild#toString","inherited":true,"returns":[[["string"]]],"meta":{"line":111,"file":"BaseGuild.js","path":"src/structures"}}],"meta":{"line":10,"file":"OAuth2Guild.js","path":"src/structures"}},{"name":"PartialGroupDMChannel","description":"Represents a Partial Group DM Channel on Discord.","extends":[[["Channel"]]],"props":[{"name":"name","description":"The name of this Group DM Channel","nullable":true,"type":[[["string"]]],"meta":{"line":28,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"icon","description":"The hash of the channel icon","nullable":true,"type":[[["string"]]],"meta":{"line":34,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"messages","description":"Messages data","type":[[["Collection"]]],"meta":{"line":40,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"Last Message ID","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"lastPinTimestamp","description":"Last Pin Timestamp","type":[[["UnixTimestamp"]]],"meta":{"line":52,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"ownerId","description":"Owner ID","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":58,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"invites","description":"Invites fetch","type":[[["Collection","<"],["string",", "],["Invite",">"]]],"meta":{"line":64,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"recipients","description":"The recipients of this Group DM Channel.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":76,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"owner","description":"The owner of this Group DM Channel","readonly":true,"nullable":true,"type":[[["User"]]],"meta":{"line":88,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"voiceUsers","description":"The user in this voice-based channel","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":390,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"voiceConnection","description":"Get connection to current call","readonly":true,"nullable":true,"type":[[["VoiceConnection"]]],"meta":{"line":404,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"shard","description":"Get current shard","readonly":true,"type":[[["WebSocketShard"]]],"meta":{"line":416,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"voiceAdapterCreator","description":"The voice state adapter for this client that can be used with @discordjs/voice to play audio in DM / Group DM channels.","readonly":true,"nullable":true,"type":[[["function"]]],"meta":{"line":424,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"_patch","access":"private","params":[{"name":"data","description":"Channel Data","type":[[["Object"]]]}],"meta":{"line":97,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"edit","description":"Edit channel data","access":"private","params":[{"name":"data","description":"name, icon owner","type":[[["Object"]]]}],"async":true,"returns":[[["Promise","<"],["undefined",">"]]],"meta":{"line":126,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"iconURL","description":"The URL to this channel's icon.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":147,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"addMember","description":"Adds a user to this Group DM Channel.","params":[{"name":"user","description":"User to add to the group","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["PartialGroupDMChannel",">"]]],"meta":{"line":156,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"removeMember","description":"Removes a user from this Group DM Channel.","params":[{"name":"user","description":"User to remove from the group","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["PartialGroupDMChannel",">"]]],"meta":{"line":174,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"setName","description":"Renames this Group DM Channel.","params":[{"name":"name","description":"Name of the channel","nullable":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["PartialGroupDMChannel",">"]]],"meta":{"line":194,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"setIcon","description":"Sets the icon of this Group DM Channel.","params":[{"name":"icon","description":"Icon of the channel","nullable":true,"type":[[["Base64Resolvable"]],[["BufferResolvable"]]]}],"returns":[[["Promise","<"],["PartialGroupDMChannel",">"]]],"meta":{"line":203,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"setOwner","description":"Changes the owner of this Group DM Channel.","params":[{"name":"user","description":"User to transfer ownership to","type":[[["UserResolvable"]]]}],"returns":[[["Promise","<"],["PartialGroupDMChannel",">"]]],"meta":{"line":212,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"getInvite","description":"Gets the invite for this Group DM Channel.","async":true,"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":230,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"fetchInvite","description":"Get all the invites for this Group DM Channel.","params":[{"name":"force","description":"Using API to fetch invites or cache","default":false,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":246,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"removeInvite","description":"Delete invites from this Group DM Channel.","params":[{"name":"invite","description":"Invite to add to the channel","type":[[["Invite"]]]}],"async":true,"returns":[[["Promise","<"],["PartialGroupDMChannel",">"]]],"meta":{"line":261,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"delete","description":"Leave this Group DM Channel.","examples":["// Delete the channel\nchannel.delete()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"slient","description":"Leave without notifying other members","default":false,"nullable":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":283,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"call","description":"Call this Group DMChannel. Return discordjs/voice VoiceConnection","params":[{"name":"options","description":"Options for the call","type":[[["CallOptions"]]]}],"returns":[[["Promise","<"],["VoiceConnection",">"]]],"meta":{"line":316,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"ring","description":"Ring the user's phone / PC (call)","params":[{"name":"recipients","description":"Array of recipients","type":[[["Array","<"],["UserResolvable",">"]]]}],"returns":[[["Promise","<"],["any",">"]]],"meta":{"line":363,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"sync","description":"Sync VoiceState of this Group DMChannel.","returns":[[["undefined"]]],"meta":{"line":377,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":17,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"PermissionOverwrites","description":"Represents a permission overwrite for a role or member in a guild channel.","extends":[[["Base"]]],"props":[{"name":"channel","description":"The GuildChannel this overwrite is for","readonly":true,"type":[[["GuildChannel"]]],"meta":{"line":17,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"id","description":"The overwrite's id, either a {@link User} or a {@link Role} id","type":[[["Snowflake"]]],"meta":{"line":33,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"type","description":"The type of this overwrite","type":[[["OverwriteType"]]],"meta":{"line":40,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"deny","description":"The permissions that are denied for the user or role.","type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":48,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"allow","description":"The permissions that are allowed for the user or role.","type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":56,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"edit","description":"Edits this Permission Overwrite.","examples":["// Update permission overwrites\npermissionOverwrites.edit({\n SEND_MESSAGES: false\n})\n .then(channel => console.log(channel.permissionOverwrites.get(message.author.id)))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the update","type":[[["PermissionOverwriteOptions"]]]},{"name":"reason","description":"Reason for creating/editing this overwrite","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["PermissionOverwrites",">"]]],"meta":{"line":73,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"delete","description":"Deletes this Permission Overwrite.","params":[{"name":"reason","description":"Reason for deleting this overwrite","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["PermissionOverwrites",">"]]],"meta":{"line":83,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"resolveOverwriteOptions","description":"Resolves bitfield permissions overwrites from an object.","scope":"static","params":[{"name":"options","description":"The options for the update","type":[[["PermissionOverwriteOptions"]]]},{"name":"initialPermissions","description":"The initial permissions","type":[[["ResolvedOverwriteOptions"]]]}],"returns":[[["ResolvedOverwriteOptions"]]],"meta":{"line":121,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"resolve","description":"Resolves an overwrite into {@link RawOverwriteData}.","scope":"static","params":[{"name":"overwrite","description":"The overwrite-like data to resolve","type":[[["OverwriteResolvable"]]]},{"name":"guild","description":"The guild to resolve from","optional":true,"type":[[["Guild"]]]}],"returns":[[["RawOverwriteData"]]],"meta":{"line":172,"file":"PermissionOverwrites.js","path":"src/structures"}}],"meta":{"line":13,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"Presence","description":"Represents a user's presence.","extends":[[["Base"]]],"props":[{"name":"userId","description":"The presence's user id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Presence.js","path":"src/structures"}},{"name":"guild","description":"The guild this presence is in","nullable":true,"type":[[["Guild"]]],"meta":{"line":57,"file":"Presence.js","path":"src/structures"}},{"name":"user","description":"The user of this presence","readonly":true,"nullable":true,"type":[[["User"]]],"meta":{"line":67,"file":"Presence.js","path":"src/structures"}},{"name":"member","description":"The member of this presence","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":76,"file":"Presence.js","path":"src/structures"}},{"name":"status","description":"The status of this presence","type":[[["PresenceStatus"]]],"meta":{"line":86,"file":"Presence.js","path":"src/structures"}},{"name":"activities","description":"The activities of this presence","type":[[["Array","<"],["Activity",">"]]],"meta":{"line":96,"file":"Presence.js","path":"src/structures"}},{"name":"clientStatus","description":"The devices this presence is on","nullable":true,"type":[[["Object"]]],"props":[{"name":"web","description":"The current presence in the web application","nullable":true,"type":[[["ClientPresenceStatus"]]]},{"name":"mobile","description":"The current presence in the mobile application","nullable":true,"type":[[["ClientPresenceStatus"]]]},{"name":"desktop","description":"The current presence in the desktop application","nullable":true,"type":[[["ClientPresenceStatus"]]]}],"meta":{"line":121,"file":"Presence.js","path":"src/structures"}},{"name":"lastModified","description":"The timestamp this presence was last updated","type":[[["number"]]],"meta":{"line":131,"file":"Presence.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"equals","description":"Whether this presence is equal to another.","params":[{"name":"presence","description":"The presence to compare with","type":[[["Presence"]]]}],"returns":[[["boolean"]]],"meta":{"line":148,"file":"Presence.js","path":"src/structures"}}],"meta":{"line":43,"file":"Presence.js","path":"src/structures"}},{"name":"Activity","description":"Represents an activity that is part of a user's presence.","props":[{"name":"presence","description":"The presence of the Activity","readonly":true,"type":[[["Presence"]]],"meta":{"line":179,"file":"Presence.js","path":"src/structures"}},{"name":"id","description":"The activity's id","type":[[["string"]]],"meta":{"line":191,"file":"Presence.js","path":"src/structures"}},{"name":"name","description":"The activity's name","type":[[["string"]]],"meta":{"line":197,"file":"Presence.js","path":"src/structures"}},{"name":"type","description":"The activity status's type","type":[[["ActivityType"]]],"meta":{"line":203,"file":"Presence.js","path":"src/structures"}},{"name":"url","description":"If the activity is being streamed, a link to the stream","nullable":true,"type":[[["string"]]],"meta":{"line":209,"file":"Presence.js","path":"src/structures"}},{"name":"details","description":"Details about the activity","nullable":true,"type":[[["string"]]],"meta":{"line":215,"file":"Presence.js","path":"src/structures"}},{"name":"state","description":"State of the activity","nullable":true,"type":[[["string"]]],"meta":{"line":221,"file":"Presence.js","path":"src/structures"}},{"name":"applicationId","description":"The id of the application associated with this activity","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":227,"file":"Presence.js","path":"src/structures"}},{"name":"timestamps","description":"Timestamps for the activity","nullable":true,"type":[[["ActivityTimestamps"]]],"meta":{"line":240,"file":"Presence.js","path":"src/structures"}},{"name":"syncId","description":"The Spotify song's id","nullable":true,"type":[[["string"]]],"meta":{"line":251,"file":"Presence.js","path":"src/structures"}},{"name":"platform","description":"The platform the game is being played on","nullable":true,"type":[[["ActivityPlatform"]]],"meta":{"line":257,"file":"Presence.js","path":"src/structures"}},{"name":"party","description":"Party of the activity","nullable":true,"type":[[["ActivityParty"]]],"meta":{"line":270,"file":"Presence.js","path":"src/structures"}},{"name":"assets","description":"Assets for rich presence","nullable":true,"type":[[["RichPresenceAssets"]]],"meta":{"line":276,"file":"Presence.js","path":"src/structures"}},{"name":"flags","description":"Flags that describe the activity","type":[[["Readonly","<"],["ActivityFlags",">"]]],"meta":{"line":282,"file":"Presence.js","path":"src/structures"}},{"name":"emoji","description":"Emoji for a custom activity","nullable":true,"type":[[["Emoji"]]],"meta":{"line":288,"file":"Presence.js","path":"src/structures"}},{"name":"sessionId","description":"The game's or Spotify session's id","nullable":true,"type":[[["string"]]],"meta":{"line":294,"file":"Presence.js","path":"src/structures"}},{"name":"buttons","description":"The labels of the buttons of this rich presence","type":[[["Array","<"],["string",">"]]],"meta":{"line":300,"file":"Presence.js","path":"src/structures"}},{"name":"createdTimestamp","description":"Creation date of the activity","type":[[["number"]]],"meta":{"line":306,"file":"Presence.js","path":"src/structures"}},{"name":"createdAt","description":"The time the activity was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":333,"file":"Presence.js","path":"src/structures"}}],"methods":[{"name":"equals","description":"Whether this activity is equal to another activity.","params":[{"name":"activity","description":"The activity to compare with","type":[[["Activity"]]]}],"returns":[[["boolean"]]],"meta":{"line":314,"file":"Presence.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the activities' name instead of the Activity object.","returns":[[["string"]]],"meta":{"line":341,"file":"Presence.js","path":"src/structures"}}],"meta":{"line":177,"file":"Presence.js","path":"src/structures"}},{"name":"RichPresenceAssets","description":"Assets for a rich presence","props":[{"name":"activity","description":"The activity of the RichPresenceAssets","readonly":true,"type":[[["Activity"]]],"meta":{"line":355,"file":"Presence.js","path":"src/structures"}},{"name":"largeText","description":"Hover text for the large image","nullable":true,"type":[[["string"]]],"meta":{"line":367,"file":"Presence.js","path":"src/structures"}},{"name":"smallText","description":"Hover text for the small image","nullable":true,"type":[[["string"]]],"meta":{"line":373,"file":"Presence.js","path":"src/structures"}},{"name":"largeImage","description":"The large image asset's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":379,"file":"Presence.js","path":"src/structures"}},{"name":"smallImage","description":"The small image asset's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":385,"file":"Presence.js","path":"src/structures"}}],"methods":[{"name":"smallImageURL","description":"Gets the URL of the small image asset","params":[{"name":"options","description":"Options for the image URL","optional":true,"type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":393,"file":"Presence.js","path":"src/structures"}},{"name":"largeImageURL","description":"Gets the URL of the large image asset","params":[{"name":"options","description":"Options for the image URL","optional":true,"type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":416,"file":"Presence.js","path":"src/structures"}}],"meta":{"line":353,"file":"Presence.js","path":"src/structures"}},{"name":"ReactionCollector","description":"Collects reactions on messages.\nWill automatically stop if the message ({@link Client#event:messageDelete messageDelete} or\n{@link Client#event:messageDeleteBulk messageDeleteBulk}),\nchannel ({@link Client#event:channelDelete channelDelete}),\nthread ({@link Client#event:threadDelete threadDelete}), or\nguild ({@link Client#event:guildDelete guildDelete}) is deleted.","extends":[[["Collector"]]],"construct":{"name":"ReactionCollector","params":[{"name":"message","description":"The message upon which to collect reactions","type":[[["Message"]]]},{"name":"options","description":"The options to apply to this collector","optional":true,"default":"{}","type":[[["ReactionCollectorOptions"]]]}]},"props":[{"name":"message","description":"The message upon which to collect reactions","type":[[["Message"]]],"meta":{"line":35,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"users","description":"The users that have reacted to this message","type":[[["Collection"]]],"meta":{"line":41,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"total","description":"The total number of reactions collected","type":[[["number"]]],"meta":{"line":47,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"endReason","description":"The reason this collector has ended with, or null if it hasn't ended yet","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":164,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this Collector","readonly":true,"type":[[["Client"]]],"meta":{"line":35,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"filter","description":"The filter applied to this collector","type":[[["CollectorFilter"]]],"meta":{"line":48,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"options","description":"The options of this collector","type":[[["CollectorOptions"]]],"meta":{"line":54,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"collected","description":"The items collected by this collector","type":[[["Collection"]]],"meta":{"line":60,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"ended","description":"Whether this collector has finished collecting","type":[[["boolean"]]],"meta":{"line":66,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_timeout","description":"Timeout for cleanup","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":73,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_idletimeout","description":"Timeout for cleanup due to inactivity","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":80,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"next","description":"Returns a promise that resolves with the next collected element;\nrejects with collected elements if the collector finishes without receiving a next element","readonly":true,"type":[[["Promise"]]],"meta":{"line":148,"file":"Collector.js","path":"src/structures/interfaces"}}],"methods":[{"name":"collect","description":"Handles an incoming reaction for possible collection.","access":"private","params":[{"name":"reaction","description":"The reaction to possibly collect","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that added the reaction","type":[[["User"]]]}],"returns":{"types":[[["Snowflake"]],[["string"]]],"nullable":true},"meta":{"line":110,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"dispose","description":"Handles a reaction deletion for possible disposal.","params":[{"name":"reaction","description":"The reaction to possibly dispose of","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that removed the reaction","type":[[["User"]]]}],"returns":{"types":[[["Snowflake"]],[["string"]]],"nullable":true},"meta":{"line":128,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"empty","description":"Empties this reaction collector.","meta":{"line":152,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"_handleMessageDeletion","description":"Handles checking if the message has been deleted, and if so, stops the collector with the reason 'messageDelete'.","access":"private","params":[{"name":"message","description":"The message that was deleted","type":[[["Message"]]]}],"returns":[[["void"]]],"meta":{"line":177,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"_handleChannelDeletion","description":"Handles checking if the channel has been deleted, and if so, stops the collector with the reason 'channelDelete'.","access":"private","params":[{"name":"channel","description":"The channel that was deleted","type":[[["GuildChannel"]]]}],"returns":[[["void"]]],"meta":{"line":189,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"_handleThreadDeletion","description":"Handles checking if the thread has been deleted, and if so, stops the collector with the reason 'threadDelete'.","access":"private","params":[{"name":"thread","description":"The thread that was deleted","type":[[["ThreadChannel"]]]}],"returns":[[["void"]]],"meta":{"line":201,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"_handleGuildDeletion","description":"Handles checking if the guild has been deleted, and if so, stops the collector with the reason 'guildDelete'.","access":"private","params":[{"name":"guild","description":"The guild that was deleted","type":[[["Guild"]]]}],"returns":[[["void"]]],"meta":{"line":213,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"handleCollect","description":"Call this to handle an event as a collectable element. Accepts any event data as parameters.","inherits":"Collector#handleCollect","inherited":true,"emits":["Collector#event:collect"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":99,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"handleDispose","description":"Call this to remove an element from the collection. Accepts any event data as parameters.","inherits":"Collector#handleDispose","inherited":true,"emits":["Collector#event:dispose"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":126,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"stop","description":"Stops this collector and emits the `end` event.","inherits":"Collector#stop","inherited":true,"emits":["Collector#event:end"],"params":[{"name":"reason","description":"The reason this collector is ending","optional":true,"default":"'user'","type":[[["string"]]]}],"meta":{"line":180,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"resetTimer","description":"Resets the collector's timeout and idle timer.","inherits":"Collector#resetTimer","inherited":true,"params":[{"name":"options","description":"Options for resetting","optional":true,"type":[[["CollectorResetTimerOptions"]]]}],"meta":{"line":213,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"checkEnd","description":"Checks whether the collector should end, and if so, ends it.","inherits":"Collector#checkEnd","inherited":true,"returns":{"types":[[["boolean"]]],"description":"Whether the collector ended or not"},"meta":{"line":228,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"key","description":"Gets the collector key for a reaction.","scope":"static","params":[{"name":"reaction","description":"The message reaction to get the key for","type":[[["MessageReaction"]]]}],"returns":[[["Snowflake"]],[["string"]]],"meta":{"line":224,"file":"ReactionCollector.js","path":"src/structures"}}],"events":[{"name":"create","description":"Emitted whenever a reaction is newly created on a message. Will emit only when a new reaction is\nadded to the message, as opposed to {@link Collector#collect} which will\nbe emitted even when a reaction has already been added to the message.","params":[{"name":"reaction","description":"The reaction that was added","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that added the reaction","type":[[["User"]]]}],"meta":{"line":82,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"collect","description":"Emitted whenever a reaction is collected.","params":[{"name":"reaction","description":"The reaction that was collected","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that added the reaction","type":[[["User"]]]}],"meta":{"line":111,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"dispose","description":"Emitted when the reaction had all the users removed and the `dispose` option is set to true.","params":[{"name":"reaction","description":"The reaction that was disposed of","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that removed the reaction","type":[[["User"]]]}],"meta":{"line":129,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"remove","description":"Emitted when the reaction had one user removed and the `dispose` option is set to true.","params":[{"name":"reaction","description":"The reaction that was removed","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that removed the reaction","type":[[["User"]]]}],"meta":{"line":137,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"end","description":"Emitted when the collector is finished collecting.","params":[{"name":"collected","description":"The elements collected by the collector","type":[[["Collection"]]]},{"name":"reason","description":"The reason the collector ended","type":[[["string"]]]}],"meta":{"line":193,"file":"Collector.js","path":"src/structures/interfaces"}}],"meta":{"line":23,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"ReactionEmoji","description":"Represents a limited emoji set used for both custom and unicode emojis. Custom emojis\nwill use this class opposed to the Emoji class when the client doesn't know enough\ninformation about them.","extends":[[["Emoji"]]],"props":[{"name":"reaction","description":"The message reaction this emoji refers to","type":[[["MessageReaction"]]],"meta":{"line":19,"file":"ReactionEmoji.js","path":"src/structures"}},{"name":"animated","description":"Whether or not the emoji is animated","nullable":true,"type":[[["boolean"]]],"meta":{"line":34,"file":"Emoji.js","path":"src/structures"}},{"name":"name","description":"The emoji's name","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Emoji.js","path":"src/structures"}},{"name":"id","description":"The emoji's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Emoji.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":54,"file":"Emoji.js","path":"src/structures"}},{"name":"identifier","description":"The identifier of this emoji, used for message reactions","readonly":true,"type":[[["string"]]],"meta":{"line":84,"file":"Emoji.js","path":"src/structures"}},{"name":"url","description":"The URL to the emoji file if it's a custom emoji","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":94,"file":"Emoji.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":103,"file":"Emoji.js","path":"src/structures"}},{"name":"createdAt","description":"The time the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":112,"file":"Emoji.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the text required to form a graphical emoji on Discord\ninstead of the Emoji object.","inherits":"Emoji#toString","inherited":true,"examples":["// Send a custom emoji from a guild:\nconst emoji = guild.emojis.cache.first();\nmsg.channel.send(`Hello! ${emoji}`);","// Send the emoji used in a reaction to the channel the reaction is part of\nreaction.message.channel.send(`The emoji used was: ${reaction.emoji}`);"],"returns":[[["string"]]],"meta":{"line":128,"file":"Emoji.js","path":"src/structures"}}],"meta":{"line":12,"file":"ReactionEmoji.js","path":"src/structures"}},{"name":"CustomStatus","construct":{"name":"CustomStatus","params":[{"name":"data","description":"CustomStatus to clone or raw data","optional":true,"default":"{}","type":[[["CustomStatus"]],[["CustomStatusOptions"]]]},{"name":"presence","description":"The presence this activity is part of","optional":true,"type":[[["Presence"]]]}]},"props":[{"name":"emoji","description":"The emoji to be displayed","nullable":true,"type":[[["EmojiIdentifierResolvable"]]],"meta":{"line":36,"file":"RichPresence.js","path":"src/structures"}},{"name":"state","description":"The state to be displayed","nullable":true,"type":[[["string"]]],"meta":{"line":42,"file":"RichPresence.js","path":"src/structures"}}],"methods":[{"name":"setup","description":"Sets the status from a JSON object","access":"private","params":[{"name":"data","description":"CustomStatus to clone or raw data","type":[[["CustomStatus"]],[["CustomStatusOptions"]]]}],"meta":{"line":50,"file":"RichPresence.js","path":"src/structures"}},{"name":"setEmoji","description":"Set the emoji of this activity","params":[{"name":"emoji","description":"The emoji to be displayed","type":[[["EmojiIdentifierResolvable"]]]}],"returns":[[["CustomStatus"]]],"meta":{"line":59,"file":"RichPresence.js","path":"src/structures"}},{"name":"setState","description":"Set state of this activity","params":[{"name":"state","description":"The state to be displayed","type":[[["string"]],[["null"]]]}],"returns":[[["CustomStatus"]]],"meta":{"line":68,"file":"RichPresence.js","path":"src/structures"}},{"name":"toJSON","description":"Returns an object that can be used to set the status","returns":[[["CustomStatus"]]],"meta":{"line":78,"file":"RichPresence.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the activities' name instead of the Activity object.","returns":[[["string"]]],"meta":{"line":92,"file":"RichPresence.js","path":"src/structures"}}],"meta":{"line":29,"file":"RichPresence.js","path":"src/structures"}},{"name":"RichPresence","construct":{"name":"RichPresence","params":[{"name":"client","description":"Discord client","optional":true,"type":[[["Client"]]]},{"name":"data","description":"RichPresence to clone or raw data","optional":true,"default":"{}","type":[[["RichPresence"]]]},{"name":"IPC","description":"Whether to use IPC (RPC for Discord Apps)","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"presence","description":"The presence this activity is part of","optional":true,"type":[[["Presence"]]]}]},"props":[{"name":"name","description":"The activity's name","type":[[["string"]]],"meta":{"line":115,"file":"RichPresence.js","path":"src/structures"}},{"name":"type","description":"The activity status's type","type":[[["ActivityType"]]],"meta":{"line":120,"file":"RichPresence.js","path":"src/structures"}},{"name":"url","description":"If the activity is being streamed, a link to the stream","nullable":true,"type":[[["string"]]],"meta":{"line":125,"file":"RichPresence.js","path":"src/structures"}},{"name":"application_id","description":"The id of the application associated with this activity","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":130,"file":"RichPresence.js","path":"src/structures"}},{"name":"state","description":"State of the activity","nullable":true,"type":[[["string"]]],"meta":{"line":135,"file":"RichPresence.js","path":"src/structures"}},{"name":"details","description":"Details about the activity","nullable":true,"type":[[["string"]]],"meta":{"line":140,"file":"RichPresence.js","path":"src/structures"}},{"name":"party","description":"Party of the activity","nullable":true,"type":[[["ActivityParty"]]],"meta":{"line":145,"file":"RichPresence.js","path":"src/structures"}},{"name":"timestamps","description":"Timestamps for the activity","nullable":true,"type":[[["ActivityTimestamps"]]],"meta":{"line":150,"file":"RichPresence.js","path":"src/structures"}},{"name":"assets","description":"Assets for rich presence","nullable":true,"type":[[["RichPresenceAssets"]]],"meta":{"line":155,"file":"RichPresence.js","path":"src/structures"}},{"name":"buttons","description":"The labels of the buttons of this rich presence","type":[[["Array","<"],["string",">"]]],"meta":{"line":160,"file":"RichPresence.js","path":"src/structures"}}],"methods":[{"name":"setup","description":"Sets the status from a JSON object","access":"private","params":[{"name":"data","description":"data","type":[[["RichPresence"]]]}],"meta":{"line":171,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAssetsLargeImage","description":"Set the large image of this activity","params":[{"name":"image","description":"The large image asset's id","nullable":true,"type":[[["any"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":191,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAssetsSmallImage","description":"Set the small image of this activity","params":[{"name":"image","description":"The small image asset's id","nullable":true,"type":[[["any"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":228,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAssetsLargeText","description":"Hover text for the large image","params":[{"name":"text","description":"Assets text","type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":265,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAssetsSmallText","description":"Hover text for the small image","params":[{"name":"text","description":"Assets text","type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":275,"file":"RichPresence.js","path":"src/structures"}},{"name":"setName","description":"Set the name of the activity","params":[{"name":"name","description":"The activity's name","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":285,"file":"RichPresence.js","path":"src/structures"}},{"name":"setURL","description":"If the activity is being streamed, a link to the stream","params":[{"name":"url","description":"URL of the stream","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":294,"file":"RichPresence.js","path":"src/structures"}},{"name":"setType","description":"The activity status's type","params":[{"name":"type","description":"The type of activity","nullable":true,"type":[[["ActivityTypes"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":305,"file":"RichPresence.js","path":"src/structures"}},{"name":"setApplicationId","description":"Set the application id of this activity","params":[{"name":"id","description":"Bot's id","nullable":true,"type":[[["Snowflake"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":316,"file":"RichPresence.js","path":"src/structures"}},{"name":"setState","description":"Set the state of the activity","params":[{"name":"state","description":"The state of the activity","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":325,"file":"RichPresence.js","path":"src/structures"}},{"name":"setDetails","description":"Set the details of the activity","params":[{"name":"details","description":"The details of the activity","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":334,"file":"RichPresence.js","path":"src/structures"}},{"name":"setParty","description":"Set the party of this activity","params":[{"name":"party","description":"The party to be displayed","nullable":true,"type":[[["RichParty"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":349,"file":"RichPresence.js","path":"src/structures"}},{"name":"setStartTimestamp","description":"Sets the start timestamp of the activity","params":[{"name":"timestamp","description":"The timestamp of the start of the activity","nullable":true,"type":[[["number"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":369,"file":"RichPresence.js","path":"src/structures"}},{"name":"setEndTimestamp","description":"Sets the end timestamp of the activity","params":[{"name":"timestamp","description":"The timestamp of the end of the activity","nullable":true,"type":[[["number"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":379,"file":"RichPresence.js","path":"src/structures"}},{"name":"setButtons","description":"Set the buttons of the rich presence","params":[{"name":"button","description":"A list of buttons to set","variable":true,"nullable":true,"type":[[["RichButton"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":394,"file":"RichPresence.js","path":"src/structures"}},{"name":"addButton","description":"Add a button to the rich presence","params":[{"name":"name","description":"The name of the button","type":[[["string"]]]},{"name":"url","description":"The url of the button","type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":423,"file":"RichPresence.js","path":"src/structures"}},{"name":"toJSON","description":"Convert the rich presence to a JSON object","returns":[[["Object"]]],"meta":{"line":443,"file":"RichPresence.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the activities' name instead of the Activity object.","returns":[[["string"]]],"meta":{"line":547,"file":"RichPresence.js","path":"src/structures"}},{"name":"getUUID","description":"Get random UUID string (Util)","scope":"static","returns":[[["string"]]],"meta":{"line":495,"file":"RichPresence.js","path":"src/structures"}},{"name":"getExternal","description":"Get Assets from a RichPresence (Util)","scope":"static","params":[{"name":"client","description":"Discord Client","type":[[["Client"]]]},{"name":"applicationId","description":"Application id","type":[[["Snowflake"]]]},{"name":"image1","description":"URL image 1 (not from Discord)","type":[[["string"]]]},{"name":"image2","description":"URL image 2 (not from Discord)","type":[[["string"]]]}],"async":true,"returns":[[["Array","<"],["ExternalAssets",">"]]],"meta":{"line":509,"file":"RichPresence.js","path":"src/structures"}}],"meta":{"line":108,"file":"RichPresence.js","path":"src/structures"}},{"name":"SpotifyRPC","extends":[[["RichPresence"]]],"construct":{"name":"SpotifyRPC","description":"Create a new RichPresence (Spotify style)","params":[{"name":"client","description":"Discord Client","type":[[["Client"]]]},{"name":"options","description":"Options for the Spotify RPC","type":[[["SpotifyRPC"]]]},{"name":"presence","description":"Presence","type":[[["Presence"]]]}]},"props":[{"name":"sync_id","description":"The Spotify song's id","nullable":true,"type":[[["string"]]],"meta":{"line":588,"file":"RichPresence.js","path":"src/structures"}},{"name":"id","description":"The activity's id","type":[[["string"]]],"meta":{"line":593,"file":"RichPresence.js","path":"src/structures"}},{"name":"flags","description":"Flags that describe the activity","type":[[["ActivityFlags"]]],"meta":{"line":598,"file":"RichPresence.js","path":"src/structures"}},{"name":"metadata","description":"Spotify metadata","type":[[["SpotifyMetadata"]]],"meta":{"line":610,"file":"RichPresence.js","path":"src/structures"}},{"name":"name","description":"The activity's name","type":[[["string"]]],"meta":{"line":115,"file":"RichPresence.js","path":"src/structures"}},{"name":"type","description":"The activity status's type","type":[[["ActivityType"]]],"meta":{"line":120,"file":"RichPresence.js","path":"src/structures"}},{"name":"url","description":"If the activity is being streamed, a link to the stream","nullable":true,"type":[[["string"]]],"meta":{"line":125,"file":"RichPresence.js","path":"src/structures"}},{"name":"application_id","description":"The id of the application associated with this activity","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":130,"file":"RichPresence.js","path":"src/structures"}},{"name":"state","description":"State of the activity","nullable":true,"type":[[["string"]]],"meta":{"line":135,"file":"RichPresence.js","path":"src/structures"}},{"name":"details","description":"Details about the activity","nullable":true,"type":[[["string"]]],"meta":{"line":140,"file":"RichPresence.js","path":"src/structures"}},{"name":"party","description":"Party of the activity","nullable":true,"type":[[["ActivityParty"]]],"meta":{"line":145,"file":"RichPresence.js","path":"src/structures"}},{"name":"timestamps","description":"Timestamps for the activity","nullable":true,"type":[[["ActivityTimestamps"]]],"meta":{"line":150,"file":"RichPresence.js","path":"src/structures"}},{"name":"assets","description":"Assets for rich presence","nullable":true,"type":[[["RichPresenceAssets"]]],"meta":{"line":155,"file":"RichPresence.js","path":"src/structures"}},{"name":"buttons","description":"The labels of the buttons of this rich presence","type":[[["Array","<"],["string",">"]]],"meta":{"line":160,"file":"RichPresence.js","path":"src/structures"}}],"methods":[{"name":"setup","description":"Sets the status from a JSON object","access":"private","params":[{"name":"options","description":"data","type":[[["SpotifyRPC"]]]}],"meta":{"line":576,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAssetsLargeImage","description":"Set the large image of this activity","params":[{"name":"image","description":"Spotify song's image ID","nullable":true,"type":[[["string"]]]}],"returns":[[["SpotifyRPC"]]],"meta":{"line":622,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAssetsSmallImage","description":"Set the small image of this activity","params":[{"name":"image","description":"Spotify song's image ID","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":633,"file":"RichPresence.js","path":"src/structures"}},{"name":"setSongId","description":"Set Spotify song id to sync with","params":[{"name":"id","description":"Song id","type":[[["string"]]]}],"returns":[[["SpotifyRPC"]]],"meta":{"line":644,"file":"RichPresence.js","path":"src/structures"}},{"name":"addArtistId","description":"Add the artist id","params":[{"name":"id","description":"Artist id","type":[[["string"]]]}],"returns":[[["SpotifyRPC"]]],"meta":{"line":654,"file":"RichPresence.js","path":"src/structures"}},{"name":"setArtistIds","description":"Set the artist ids","params":[{"name":"ids","description":"Artist ids","variable":true,"type":[[["string"]],[["Array","<"],["string",">"]]]}],"returns":[[["SpotifyRPC"]]],"meta":{"line":665,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAlbumId","description":"Set the album id","params":[{"name":"id","description":"Album id","type":[[["string"]]]}],"returns":[[["SpotifyRPC"]]],"meta":{"line":680,"file":"RichPresence.js","path":"src/structures"}},{"name":"toJSON","description":"Convert the rich presence to a JSON object","returns":[[["SpotifyRPC"]]],"meta":{"line":690,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAssetsLargeText","description":"Hover text for the large image","inherits":"RichPresence#setAssetsLargeText","inherited":true,"params":[{"name":"text","description":"Assets text","type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":265,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAssetsSmallText","description":"Hover text for the small image","inherits":"RichPresence#setAssetsSmallText","inherited":true,"params":[{"name":"text","description":"Assets text","type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":275,"file":"RichPresence.js","path":"src/structures"}},{"name":"setName","description":"Set the name of the activity","inherits":"RichPresence#setName","inherited":true,"params":[{"name":"name","description":"The activity's name","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":285,"file":"RichPresence.js","path":"src/structures"}},{"name":"setURL","description":"If the activity is being streamed, a link to the stream","inherits":"RichPresence#setURL","inherited":true,"params":[{"name":"url","description":"URL of the stream","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":294,"file":"RichPresence.js","path":"src/structures"}},{"name":"setType","description":"The activity status's type","inherits":"RichPresence#setType","inherited":true,"params":[{"name":"type","description":"The type of activity","nullable":true,"type":[[["ActivityTypes"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":305,"file":"RichPresence.js","path":"src/structures"}},{"name":"setApplicationId","description":"Set the application id of this activity","inherits":"RichPresence#setApplicationId","inherited":true,"params":[{"name":"id","description":"Bot's id","nullable":true,"type":[[["Snowflake"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":316,"file":"RichPresence.js","path":"src/structures"}},{"name":"setState","description":"Set the state of the activity","inherits":"RichPresence#setState","inherited":true,"params":[{"name":"state","description":"The state of the activity","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":325,"file":"RichPresence.js","path":"src/structures"}},{"name":"setDetails","description":"Set the details of the activity","inherits":"RichPresence#setDetails","inherited":true,"params":[{"name":"details","description":"The details of the activity","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":334,"file":"RichPresence.js","path":"src/structures"}},{"name":"setParty","description":"Set the party of this activity","inherits":"RichPresence#setParty","inherited":true,"params":[{"name":"party","description":"The party to be displayed","nullable":true,"type":[[["RichParty"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":349,"file":"RichPresence.js","path":"src/structures"}},{"name":"setStartTimestamp","description":"Sets the start timestamp of the activity","inherits":"RichPresence#setStartTimestamp","inherited":true,"params":[{"name":"timestamp","description":"The timestamp of the start of the activity","nullable":true,"type":[[["number"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":369,"file":"RichPresence.js","path":"src/structures"}},{"name":"setEndTimestamp","description":"Sets the end timestamp of the activity","inherits":"RichPresence#setEndTimestamp","inherited":true,"params":[{"name":"timestamp","description":"The timestamp of the end of the activity","nullable":true,"type":[[["number"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":379,"file":"RichPresence.js","path":"src/structures"}},{"name":"setButtons","description":"Set the buttons of the rich presence","inherits":"RichPresence#setButtons","inherited":true,"params":[{"name":"button","description":"A list of buttons to set","variable":true,"nullable":true,"type":[[["RichButton"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":394,"file":"RichPresence.js","path":"src/structures"}},{"name":"addButton","description":"Add a button to the rich presence","inherits":"RichPresence#addButton","inherited":true,"params":[{"name":"name","description":"The name of the button","type":[[["string"]]]},{"name":"url","description":"The url of the button","type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":423,"file":"RichPresence.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the activities' name instead of the Activity object.","inherits":"RichPresence#toString","inherited":true,"returns":[[["string"]]],"meta":{"line":547,"file":"RichPresence.js","path":"src/structures"}}],"meta":{"line":559,"file":"RichPresence.js","path":"src/structures"}},{"name":"Role","description":"Represents a role on Discord.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild that the role belongs to","type":[[["Guild"]]],"meta":{"line":32,"file":"Role.js","path":"src/structures"}},{"name":"icon","description":"The icon hash of the role","nullable":true,"type":[[["string"]]],"meta":{"line":38,"file":"Role.js","path":"src/structures"}},{"name":"unicodeEmoji","description":"The unicode emoji for the role","nullable":true,"type":[[["string"]]],"meta":{"line":44,"file":"Role.js","path":"src/structures"}},{"name":"id","description":"The role's id (unique to the guild it is part of)","type":[[["Snowflake"]]],"meta":{"line":54,"file":"Role.js","path":"src/structures"}},{"name":"name","description":"The name of the role","type":[[["string"]]],"meta":{"line":60,"file":"Role.js","path":"src/structures"}},{"name":"color","description":"The base 10 color of the role","type":[[["number"]]],"meta":{"line":68,"file":"Role.js","path":"src/structures"}},{"name":"hoist","description":"If true, users that are part of this role will appear in a separate category in the users list","type":[[["boolean"]]],"meta":{"line":76,"file":"Role.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the role from the API","type":[[["number"]]],"meta":{"line":84,"file":"Role.js","path":"src/structures"}},{"name":"permissions","description":"The permissions of the role","type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":92,"file":"Role.js","path":"src/structures"}},{"name":"managed","description":"Whether or not the role is managed by an external service","type":[[["boolean"]]],"meta":{"line":100,"file":"Role.js","path":"src/structures"}},{"name":"mentionable","description":"Whether or not the role can be mentioned by anyone","type":[[["boolean"]]],"meta":{"line":108,"file":"Role.js","path":"src/structures"}},{"name":"tags","description":"The tags this role has","nullable":true,"type":[[["Object"]]],"props":[{"name":"botId","description":"The id of the bot this role belongs to","optional":true,"type":[[["Snowflake"]]]},{"name":"integrationId","description":"The id of the integration this role belongs to","optional":true,"type":[[["Snowflake"]],[["string"]]]},{"name":"premiumSubscriberRole","description":"Whether this is the guild's premium subscription role","optional":true,"type":[[["true"]]]},{"name":"subscriptionListingId","description":"The id of this role's subscription SKU and listing","optional":true,"type":[[["Snowflake"]]]},{"name":"availableForPurchase","description":"Whether this role is available for purchase","optional":true,"type":[[["true"]]]},{"name":"guildConnections","description":"Whether this role is a guild's linked role","optional":true,"type":[[["true"]]]}],"meta":{"line":125,"file":"Role.js","path":"src/structures"}},{"name":"flags","description":"The flags of this role","type":[[["Readonly","<"],["RoleFlags",">"]]],"meta":{"line":152,"file":"Role.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the role was created at","readonly":true,"type":[[["number"]]],"meta":{"line":163,"file":"Role.js","path":"src/structures"}},{"name":"createdAt","description":"The time the role was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":172,"file":"Role.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the role has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":181,"file":"Role.js","path":"src/structures"}},{"name":"hexColor","description":"The hexadecimal version of the role color, with a leading hashtag","readonly":true,"type":[[["string"]]],"meta":{"line":211,"file":"Role.js","path":"src/structures"}},{"name":"members","description":"The cached guild members that have this role","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":220,"file":"Role.js","path":"src/structures"}},{"name":"editable","description":"Whether the role is editable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":229,"file":"Role.js","path":"src/structures"}},{"name":"position","description":"The position of the role in the role manager","readonly":true,"type":[[["number"]]],"meta":{"line":241,"file":"Role.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"comparePositionTo","description":"Compares this role's position to another role's.","examples":["// Compare the position of a role to another\nconst roleCompare = role.comparePositionTo(otherRole);\nif (roleCompare >= 1) console.log(`${role.name} is higher than ${otherRole.name}`);"],"params":[{"name":"role","description":"Role to compare to this one","type":[[["RoleResolvable"]]]}],"returns":{"types":[[["number"]]],"description":"Negative number if this role's position is lower (other role's is higher),\npositive number if this one is higher (other's is lower), 0 if equal"},"meta":{"line":261,"file":"Role.js","path":"src/structures"}},{"name":"edit","description":"Edits the role.","examples":["// Edit a role\nrole.edit({ name: 'new role' })\n .then(updated => console.log(`Edited role name to ${updated.name}`))\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the role","type":[[["RoleData"]]]},{"name":"reason","description":"Reason for editing this role","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":291,"file":"Role.js","path":"src/structures"}},{"name":"permissionsIn","description":"Returns `channel.permissionsFor(role)`. Returns permissions for a role in a guild channel,\ntaking into account permission overwrites.","params":[{"name":"channel","description":"The guild channel to use as context","type":[[["GuildChannel"]],[["Snowflake"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":302,"file":"Role.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the role.","examples":["// Set the name of the role\nrole.setName('new role')\n .then(updated => console.log(`Updated role name to ${updated.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name of the role","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the role's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":319,"file":"Role.js","path":"src/structures"}},{"name":"setColor","description":"Sets a new color for the role.","examples":["// Set the color of a role\nrole.setColor('#FF0000')\n .then(updated => console.log(`Set color of role to ${updated.color}`))\n .catch(console.error);"],"params":[{"name":"color","description":"The color of the role","type":[[["ColorResolvable"]]]},{"name":"reason","description":"Reason for changing the role's color","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":334,"file":"Role.js","path":"src/structures"}},{"name":"setHoist","description":"Sets whether or not the role should be hoisted.","examples":["// Set the hoist of the role\nrole.setHoist(true)\n .then(updated => console.log(`Role hoisted: ${updated.hoist}`))\n .catch(console.error);"],"params":[{"name":"hoist","description":"Whether or not to hoist the role","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for setting whether or not the role should be hoisted","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":349,"file":"Role.js","path":"src/structures"}},{"name":"setPermissions","description":"Sets the permissions of the role.","examples":["// Set the permissions of the role\nrole.setPermissions([Permissions.FLAGS.KICK_MEMBERS, Permissions.FLAGS.BAN_MEMBERS])\n .then(updated => console.log(`Updated permissions to ${updated.permissions.bitfield}`))\n .catch(console.error);","// Remove all permissions from a role\nrole.setPermissions(0n)\n .then(updated => console.log(`Updated permissions to ${updated.permissions.bitfield}`))\n .catch(console.error);"],"params":[{"name":"permissions","description":"The permissions of the role","type":[[["PermissionResolvable"]]]},{"name":"reason","description":"Reason for changing the role's permissions","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":369,"file":"Role.js","path":"src/structures"}},{"name":"setMentionable","description":"Sets whether this role is mentionable.","examples":["// Make the role mentionable\nrole.setMentionable(true)\n .then(updated => console.log(`Role updated ${updated.name}`))\n .catch(console.error);"],"params":[{"name":"mentionable","description":"Whether this role should be mentionable","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for setting whether or not this role should be mentionable","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":384,"file":"Role.js","path":"src/structures"}},{"name":"setIcon","description":"Sets a new icon for the role.","params":[{"name":"icon","description":"The icon for the role\nThe `EmojiResolvable` should belong to the same guild as the role.\nIf not, pass the emoji's URL directly","nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]],[["EmojiResolvable"]]]},{"name":"reason","description":"Reason for changing the role's icon","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":396,"file":"Role.js","path":"src/structures"}},{"name":"setUnicodeEmoji","description":"Sets a new unicode emoji for the role.","examples":["// Set a new unicode emoji for the role\nrole.setUnicodeEmoji('🤖')\n .then(updated => console.log(`Set unicode emoji for the role to ${updated.unicodeEmoji}`))\n .catch(console.error);"],"params":[{"name":"unicodeEmoji","description":"The new unicode emoji for the role","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the role's unicode emoji","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":411,"file":"Role.js","path":"src/structures"}},{"name":"setPosition","description":"Sets the new position of the role.","examples":["// Set the position of the role\nrole.setPosition(1)\n .then(updated => console.log(`Role position: ${updated.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the role","type":[[["number"]]]},{"name":"options","description":"Options for setting the position","optional":true,"type":[[["SetRolePositionOptions"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":433,"file":"Role.js","path":"src/structures"}},{"name":"delete","description":"Deletes the role.","examples":["// Delete a role\nrole.delete('The role needed to go')\n .then(deleted => console.log(`Deleted role ${deleted.name}`))\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this role","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":447,"file":"Role.js","path":"src/structures"}},{"name":"iconURL","description":"A link to the role's icon","params":[{"name":"options","description":"Options for the image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":457,"file":"Role.js","path":"src/structures"}},{"name":"equals","description":"Whether this role equals another role. It compares all properties, so for most operations\nit is advisable to just compare `role.id === role2.id` as it is much faster and is often\nwhat most users need.","params":[{"name":"role","description":"Role to compare with","type":[[["Role"]]]}],"returns":[[["boolean"]]],"meta":{"line":469,"file":"Role.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the role's mention instead of the Role object.","examples":["// Logs: Role: <@&123456789012345678>\nconsole.log(`Role: ${role}`);"],"returns":[[["string"]]],"meta":{"line":491,"file":"Role.js","path":"src/structures"}},{"name":"comparePositions","description":"Compares the positions of two roles.","scope":"static","deprecated":"Use {@link RoleManager#comparePositions} instead.","params":[{"name":"role1","description":"First role to compare","type":[[["Role"]]]},{"name":"role2","description":"Second role to compare","type":[[["Role"]]]}],"returns":{"types":[[["number"]]],"description":"Negative number if the first role's position is lower (second role's is higher),\npositive number if the first's is higher (second's is lower), 0 if equal"},"meta":{"line":511,"file":"Role.js","path":"src/structures"}}],"meta":{"line":24,"file":"Role.js","path":"src/structures"}},{"name":"SelectMenuInteraction","description":"Represents any select menu interaction.","extends":[[["MessageComponentInteraction"]]],"props":[{"name":"values","description":"The values selected, if the component which was interacted with was a select menu","type":[[["Array","<"],["string",">"]]],"meta":{"line":19,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":17,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"message","description":"The message to which the component was attached","type":[[["Message"]],[["APIMessage"]]],"meta":{"line":27,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"customId","description":"The custom id of the component which was interacted with","type":[[["string"]]],"meta":{"line":33,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"componentType","description":"The type of component which was interacted with","type":[[["string"]]],"meta":{"line":39,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":45,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":57,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":63,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"component","description":"The component which was interacted with","readonly":true,"type":[[["MessageActionRowComponent"]],[["APIMessageActionRowComponent"]]],"meta":{"line":78,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"MessageComponentInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"MessageComponentInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"MessageComponentInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"MessageComponentInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"MessageComponentInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"MessageComponentInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","inherits":"MessageComponentInteraction#deferUpdate","inherited":true,"implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","inherits":"MessageComponentInteraction#update","inherited":true,"implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"MessageComponentInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"MessageComponentInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":11,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"ChannelSelectInteraction","description":"Represents a CHANNEL_SELECT interaction.","extends":[[["SelectMenuInteraction"]]],"props":[{"name":"channels","description":"Collection of the selected channels","type":[[["Collection","<"],["Snowflake",", ("],["Channel","|"],["APIChannel",")>"]]],"meta":{"line":39,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"values","description":"The values selected, if the component which was interacted with was a select menu","type":[[["Array","<"],["string",">"]]],"meta":{"line":19,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":17,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"message","description":"The message to which the component was attached","type":[[["Message"]],[["APIMessage"]]],"meta":{"line":27,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"customId","description":"The custom id of the component which was interacted with","type":[[["string"]]],"meta":{"line":33,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"componentType","description":"The type of component which was interacted with","type":[[["string"]]],"meta":{"line":39,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":45,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":57,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":63,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"component","description":"The component which was interacted with","readonly":true,"type":[[["MessageActionRowComponent"]],[["APIMessageActionRowComponent"]]],"meta":{"line":78,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"MessageComponentInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"MessageComponentInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"MessageComponentInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"MessageComponentInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"MessageComponentInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"MessageComponentInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","inherits":"MessageComponentInteraction#deferUpdate","inherited":true,"implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","inherits":"MessageComponentInteraction#update","inherited":true,"implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"MessageComponentInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"MessageComponentInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":29,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"RoleSelectInteraction","description":"Represents a ROLE_SELECT interaction.","extends":[[["SelectMenuInteraction"]]],"props":[{"name":"roles","description":"Collection of the selected roles","type":[[["Collection","<"],["Snowflake",", ("],["Role","|"],["APIRole",")>"]]],"meta":{"line":62,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"values","description":"The values selected, if the component which was interacted with was a select menu","type":[[["Array","<"],["string",">"]]],"meta":{"line":19,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":17,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"message","description":"The message to which the component was attached","type":[[["Message"]],[["APIMessage"]]],"meta":{"line":27,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"customId","description":"The custom id of the component which was interacted with","type":[[["string"]]],"meta":{"line":33,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"componentType","description":"The type of component which was interacted with","type":[[["string"]]],"meta":{"line":39,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":45,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":57,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":63,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"component","description":"The component which was interacted with","readonly":true,"type":[[["MessageActionRowComponent"]],[["APIMessageActionRowComponent"]]],"meta":{"line":78,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"MessageComponentInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"MessageComponentInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"MessageComponentInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"MessageComponentInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"MessageComponentInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"MessageComponentInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","inherits":"MessageComponentInteraction#deferUpdate","inherited":true,"implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","inherits":"MessageComponentInteraction#update","inherited":true,"implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"MessageComponentInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"MessageComponentInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":52,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"UserSelectInteraction","description":"Represents a USER_SELECT interaction.","extends":[[["SelectMenuInteraction"]]],"props":[{"name":"users","description":"Collection of the selected users","type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":85,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"members","description":"Collection of the selected members","type":[[["Collection","<"],["Snowflake",", ("],["GuildMember","|"],["APIGuildMember",")>"]]],"meta":{"line":95,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"values","description":"The values selected, if the component which was interacted with was a select menu","type":[[["Array","<"],["string",">"]]],"meta":{"line":19,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":17,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"message","description":"The message to which the component was attached","type":[[["Message"]],[["APIMessage"]]],"meta":{"line":27,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"customId","description":"The custom id of the component which was interacted with","type":[[["string"]]],"meta":{"line":33,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"componentType","description":"The type of component which was interacted with","type":[[["string"]]],"meta":{"line":39,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":45,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":57,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":63,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"component","description":"The component which was interacted with","readonly":true,"type":[[["MessageActionRowComponent"]],[["APIMessageActionRowComponent"]]],"meta":{"line":78,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"MessageComponentInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"MessageComponentInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"MessageComponentInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"MessageComponentInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"MessageComponentInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"MessageComponentInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","inherits":"MessageComponentInteraction#deferUpdate","inherited":true,"implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","inherits":"MessageComponentInteraction#update","inherited":true,"implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"MessageComponentInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"MessageComponentInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":75,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"MentionableSelectInteraction","description":"Represents a MENTIONABLE_SELECT interaction.","extends":[[["SelectMenuInteraction"]]],"props":[{"name":"channels","description":"Collection of the selected channels","type":[[["Collection","<"],["Snowflake",", ("],["Channel","|"],["APIChannel",")>"]]],"meta":{"line":125,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"members","description":"Collection of the selected members","type":[[["Collection","<"],["Snowflake",", ("],["GuildMember","|"],["APIGuildMember",")>"]]],"meta":{"line":136,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"roles","description":"Collection of the selected roles","type":[[["Collection","<"],["Snowflake",", ("],["Role","|"],["APIRole",")>"]]],"meta":{"line":152,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"users","description":"Collection of the selected users","type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":163,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"values","description":"The values selected, if the component which was interacted with was a select menu","type":[[["Array","<"],["string",">"]]],"meta":{"line":19,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":17,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"message","description":"The message to which the component was attached","type":[[["Message"]],[["APIMessage"]]],"meta":{"line":27,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"customId","description":"The custom id of the component which was interacted with","type":[[["string"]]],"meta":{"line":33,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"componentType","description":"The type of component which was interacted with","type":[[["string"]]],"meta":{"line":39,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":45,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":57,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":63,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"component","description":"The component which was interacted with","readonly":true,"type":[[["MessageActionRowComponent"]],[["APIMessageActionRowComponent"]]],"meta":{"line":78,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"MessageComponentInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"MessageComponentInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"MessageComponentInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"MessageComponentInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"MessageComponentInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"MessageComponentInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","inherits":"MessageComponentInteraction#deferUpdate","inherited":true,"implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","inherits":"MessageComponentInteraction#update","inherited":true,"implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"MessageComponentInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"MessageComponentInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":114,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"Session","description":"Represents a Client OAuth2 Application Team.","extends":[[["Base"]]],"props":[{"name":"id","description":"The session hash id","type":[[["string"]]],"meta":{"line":28,"file":"Session.js","path":"src/structures"}},{"name":"clientInfo","description":"The client info","type":[[["SessionClientInfo"]]],"meta":{"line":38,"file":"Session.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the client was last used at.","readonly":true,"type":[[["number"]]],"meta":{"line":47,"file":"Session.js","path":"src/structures"}},{"name":"createdAt","description":"The time the client was last used at.","readonly":true,"type":[[["Date"]]],"meta":{"line":56,"file":"Session.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"logout","description":"Logout the client (remote).","params":[{"name":"mfaCode","description":"MFA code (if 2FA is enabled)","type":[[["string"]],[["null"]]]}],"returns":[[["Promise","<"],["undefined",">"]]],"meta":{"line":65,"file":"Session.js","path":"src/structures"}}],"meta":{"line":16,"file":"Session.js","path":"src/structures"}},{"name":"StageChannel","description":"Represents a guild stage channel on Discord.","extends":[[["BaseGuildVoiceChannel"]]],"props":[{"name":"topic","description":"The topic of the stage channel","nullable":true,"type":[[["string"]]],"meta":{"line":18,"file":"StageChannel.js","path":"src/structures"}},{"name":"stageInstance","description":"The stage instance of this stage channel, if it exists","readonly":true,"nullable":true,"type":[[["StageInstance"]]],"meta":{"line":27,"file":"StageChannel.js","path":"src/structures"}},{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":23,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":29,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":35,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"bitrate","description":"The bitrate of this voice-based channel","type":[[["number"]]],"meta":{"line":48,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"rtcRegion","description":"The RTC region for this voice-based channel. This region is automatically selected if `null`.","nullable":true,"type":[[["string"]]],"meta":{"line":56,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"userLimit","description":"The maximum amount of users allowed in this channel.","type":[[["number"]]],"meta":{"line":64,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"videoQualityMode","description":"The camera video quality mode of the channel.","nullable":true,"type":[[["VideoQualityMode"]]],"meta":{"line":72,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in the channel, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":82,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for this channel in seconds","type":[[["number"]]],"meta":{"line":94,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"members","description":"The members in this voice-based channel","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":107,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"full","description":"Checks if the voice-based channel is full","readonly":true,"type":[[["boolean"]]],"meta":{"line":122,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"joinable","description":"Whether the channel is joinable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":131,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"createStageInstance","description":"Creates a stage instance associated with this stage channel.","params":[{"name":"options","description":"The options to create the stage instance","type":[[["StageInstanceCreateOptions"]]]}],"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":36,"file":"StageChannel.js","path":"src/structures"}},{"name":"setTopic","description":"Sets a new topic for the guild channel.","examples":["// Set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.error);"],"params":[{"name":"topic","description":"The new topic for the guild channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's topic","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":51,"file":"StageChannel.js","path":"src/structures"}},{"name":"createInvite","description":"Creates an invite to this guild channel.","inherits":"BaseGuildVoiceChannel#createInvite","inherited":true,"examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":155,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","inherits":"BaseGuildVoiceChannel#fetchInvites","inherited":true,"params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":165,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setBitrate","description":"Sets the bitrate of the channel.","inherits":"BaseGuildVoiceChannel#setBitrate","inherited":true,"examples":["// Set the bitrate of a voice channel\nvoiceChannel.setBitrate(48_000)\n .then(vc => console.log(`Set bitrate to ${vc.bitrate}bps for ${vc.name}`))\n .catch(console.error);"],"params":[{"name":"bitrate","description":"The new bitrate","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's bitrate","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":180,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setRTCRegion","description":"Sets the RTC region of the channel.","inherits":"BaseGuildVoiceChannel#setRTCRegion","inherited":true,"examples":["// Set the RTC region to sydney\nchannel.setRTCRegion('sydney');","// Remove a fixed region for this channel - let Discord decide automatically\nchannel.setRTCRegion(null, 'We want to let Discord decide.');"],"params":[{"name":"rtcRegion","description":"The new region of the channel. Set to `null` to remove a specific region for the channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"The reason for modifying this region.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["BaseGuildVoiceChannel",">"]]],"meta":{"line":196,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setUserLimit","description":"Sets the user limit of the channel.","inherits":"BaseGuildVoiceChannel#setUserLimit","inherited":true,"examples":["// Set the user limit of a voice channel\nvoiceChannel.setUserLimit(42)\n .then(vc => console.log(`Set user limit to ${vc.userLimit} for ${vc.name}`))\n .catch(console.error);"],"params":[{"name":"userLimit","description":"The new user limit","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the user limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":211,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setVideoQualityMode","description":"Sets the camera video quality mode of the channel.","inherits":"BaseGuildVoiceChannel#setVideoQualityMode","inherited":true,"params":[{"name":"videoQualityMode","description":"The new camera video quality mode.","type":[[["VideoQualityMode"]],[["number"]]]},{"name":"reason","description":"Reason for changing the camera video quality mode.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":221,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","inherits":"BaseGuildVoiceChannel#send","inherited":true,"implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","inherits":"BaseGuildVoiceChannel#sendTyping","inherited":true,"implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","inherits":"BaseGuildVoiceChannel#createMessageCollector","inherited":true,"implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","inherits":"BaseGuildVoiceChannel#awaitMessages","inherited":true,"implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","inherits":"BaseGuildVoiceChannel#createMessageComponentCollector","inherited":true,"implements":["TextBasedChannel#createMessageComponentCollector"],"examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseGuildVoiceChannel#awaitMessageComponent","inherited":true,"implements":["TextBasedChannel#awaitMessageComponent"],"examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"bulkDelete","description":"Bulk deletes given messages that are newer than two weeks.","inherits":"BaseGuildVoiceChannel#bulkDelete","inherited":true,"implements":["TextBasedChannel#bulkDelete"],"examples":["// Bulk delete messages\nchannel.bulkDelete(5)\n .then(messages => console.log(`Bulk deleted ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"messages","description":"Messages or number of messages to delete","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]],[["Array","<"],["MessageResolvable",">"]],[["number"]]]},{"name":"filterOld","description":"Filter messages to remove those which are older than two weeks automatically","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Collection","<"],["Snowflake",", ("],["Message","|"],["undefined",")>>"]]],"description":"Returns the deleted messages"},"meta":{"line":319,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","inherits":"BaseGuildVoiceChannel#fetchWebhooks","inherited":true,"implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":368,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","inherits":"BaseGuildVoiceChannel#createWebhook","inherited":true,"implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":393,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","inherits":"BaseGuildVoiceChannel#setRateLimitPerUser","inherited":true,"implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":403,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","inherits":"BaseGuildVoiceChannel#setNSFW","inherited":true,"implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":413,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":9,"file":"StageChannel.js","path":"src/structures"}},{"name":"StageInstance","description":"Represents a stage instance.","extends":[[["Base"]]],"props":[{"name":"id","description":"The stage instance's id","type":[[["Snowflake"]]],"meta":{"line":28,"file":"StageInstance.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild associated with the stage channel","type":[[["Snowflake"]]],"meta":{"line":39,"file":"StageInstance.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel associated with the stage channel","type":[[["Snowflake"]]],"meta":{"line":47,"file":"StageInstance.js","path":"src/structures"}},{"name":"topic","description":"The topic of the stage instance","type":[[["string"]]],"meta":{"line":55,"file":"StageInstance.js","path":"src/structures"}},{"name":"privacyLevel","description":"The privacy level of the stage instance","type":[[["PrivacyLevel"]]],"meta":{"line":63,"file":"StageInstance.js","path":"src/structures"}},{"name":"discoverableDisabled","description":"Whether or not stage discovery is disabled","nullable":true,"type":[[["boolean"]]],"meta":{"line":71,"file":"StageInstance.js","path":"src/structures"}},{"name":"guildScheduledEventId","description":"The associated guild scheduled event id of this stage instance","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":81,"file":"StageInstance.js","path":"src/structures"}},{"name":"channel","description":"The stage channel associated with this stage instance","readonly":true,"nullable":true,"type":[[["StageChannel"]]],"meta":{"line":92,"file":"StageInstance.js","path":"src/structures"}},{"name":"guildScheduledEvent","description":"The associated guild scheduled event of this stage instance","readonly":true,"nullable":true,"type":[[["GuildScheduledEvent"]]],"meta":{"line":101,"file":"StageInstance.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the stage instance has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":110,"file":"StageInstance.js","path":"src/structures"}},{"name":"guild","description":"The guild this stage instance belongs to","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":140,"file":"StageInstance.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this stage instances was created at","readonly":true,"type":[[["number"]]],"meta":{"line":193,"file":"StageInstance.js","path":"src/structures"}},{"name":"createdAt","description":"The time this stage instance was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":202,"file":"StageInstance.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"edit","description":"Edits this stage instance.","examples":["// Edit a stage instance\nstageInstance.edit({ topic: 'new topic' })\n .then(stageInstance => console.log(stageInstance))\n .catch(console.error)"],"params":[{"name":"options","description":"The options to edit the stage instance","type":[[["StageInstanceEditOptions"]]]}],"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":154,"file":"StageInstance.js","path":"src/structures"}},{"name":"delete","description":"Deletes this stage instance.","examples":["// Delete a stage instance\nstageInstance.delete()\n .then(stageInstance => console.log(stageInstance))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":167,"file":"StageInstance.js","path":"src/structures"}},{"name":"setTopic","description":"Sets the topic of this stage instance.","examples":["// Set topic of a stage instance\nstageInstance.setTopic('new topic')\n .then(stageInstance => console.log(`Set the topic to: ${stageInstance.topic}`))\n .catch(console.error);"],"params":[{"name":"topic","description":"The topic for the stage instance","type":[[["string"]]]}],"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":184,"file":"StageInstance.js","path":"src/structures"}}],"meta":{"line":20,"file":"StageInstance.js","path":"src/structures"}},{"name":"Sticker","description":"Represents a Sticker.","extends":[[["Base"]]],"props":[{"name":"id","description":"The sticker's id","type":[[["Snowflake"]]],"meta":{"line":33,"file":"Sticker.js","path":"src/structures"}},{"name":"description","description":"The description of the sticker","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Sticker.js","path":"src/structures"}},{"name":"type","description":"The type of the sticker","nullable":true,"type":[[["StickerType"]]],"meta":{"line":50,"file":"Sticker.js","path":"src/structures"}},{"name":"format","description":"The format of the sticker","type":[[["StickerFormatType"]]],"meta":{"line":60,"file":"Sticker.js","path":"src/structures"}},{"name":"name","description":"The name of the sticker","type":[[["string"]]],"meta":{"line":68,"file":"Sticker.js","path":"src/structures"}},{"name":"packId","description":"The id of the pack the sticker is from, for standard stickers","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"Sticker.js","path":"src/structures"}},{"name":"tags","description":"An array of tags for the sticker","nullable":true,"type":[[["Array","<"],["string",">"]]],"meta":{"line":86,"file":"Sticker.js","path":"src/structures"}},{"name":"available","description":"Whether or not the guild sticker is available","nullable":true,"type":[[["boolean"]]],"meta":{"line":96,"file":"Sticker.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild that owns this sticker","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":106,"file":"Sticker.js","path":"src/structures"}},{"name":"user","description":"The user that uploaded the guild sticker","nullable":true,"type":[[["User"]]],"meta":{"line":116,"file":"Sticker.js","path":"src/structures"}},{"name":"sortValue","description":"The standard sticker's sort order within its pack","nullable":true,"type":[[["number"]]],"meta":{"line":126,"file":"Sticker.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the sticker was created at","readonly":true,"type":[[["number"]]],"meta":{"line":137,"file":"Sticker.js","path":"src/structures"}},{"name":"createdAt","description":"The time the sticker was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":146,"file":"Sticker.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the sticker has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":155,"file":"Sticker.js","path":"src/structures"}},{"name":"partial","description":"Whether this sticker is partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":185,"file":"Sticker.js","path":"src/structures"}},{"name":"guild","description":"The guild that owns this sticker","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":194,"file":"Sticker.js","path":"src/structures"}},{"name":"url","description":"A link to the sticker\nIf the sticker's format is LOTTIE, it returns the URL of the Lottie JSON file.","type":[[["string"]]],"meta":{"line":203,"file":"Sticker.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"fetch","description":"Fetches this sticker.","async":true,"returns":[[["Promise","<"],["Sticker",">"]]],"meta":{"line":211,"file":"Sticker.js","path":"src/structures"}},{"name":"fetchPack","description":"Fetches the pack this sticker is part of from Discord, if this is a Nitro sticker.","async":true,"returns":[[["Promise",""]]],"meta":{"line":221,"file":"Sticker.js","path":"src/structures"}},{"name":"fetchUser","description":"Fetches the user who uploaded this sticker, if this is a guild sticker.","async":true,"returns":[[["Promise",""]]],"meta":{"line":229,"file":"Sticker.js","path":"src/structures"}},{"name":"edit","description":"Edits the sticker.","examples":["// Update the name of a sticker\nsticker.edit({ name: 'new name' })\n .then(s => console.log(`Updated the name of the sticker to ${s.name}`))\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the sticker","optional":true,"type":[[["GuildStickerEditData"]]]},{"name":"reason","description":"Reason for editing this sticker","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Sticker",">"]]],"meta":{"line":254,"file":"Sticker.js","path":"src/structures"}},{"name":"delete","description":"Deletes the sticker.","examples":["// Delete a message\nsticker.delete()\n .then(s => console.log(`Deleted sticker ${s.name}`))\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this sticker","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Sticker",">"]]],"meta":{"line":268,"file":"Sticker.js","path":"src/structures"}},{"name":"equals","description":"Whether this sticker is the same as another one.","params":[{"name":"other","description":"The sticker to compare it to","type":[[["Sticker"]],[["APISticker"]]]}],"returns":[[["boolean"]]],"meta":{"line":278,"file":"Sticker.js","path":"src/structures"}}],"meta":{"line":21,"file":"Sticker.js","path":"src/structures"}},{"name":"StickerPack","description":"Represents a pack of standard stickers.","extends":[[["Base"]]],"props":[{"name":"id","description":"The Sticker pack's id","type":[[["Snowflake"]]],"meta":{"line":19,"file":"StickerPack.js","path":"src/structures"}},{"name":"stickers","description":"The stickers in the pack","type":[[["Collection","<"],["Snowflake",", "],["Sticker",">"]]],"meta":{"line":25,"file":"StickerPack.js","path":"src/structures"}},{"name":"name","description":"The name of the sticker pack","type":[[["string"]]],"meta":{"line":31,"file":"StickerPack.js","path":"src/structures"}},{"name":"skuId","description":"The id of the pack's SKU","type":[[["Snowflake"]]],"meta":{"line":37,"file":"StickerPack.js","path":"src/structures"}},{"name":"coverStickerId","description":"The id of a sticker in the pack which is shown as the pack's icon","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":43,"file":"StickerPack.js","path":"src/structures"}},{"name":"description","description":"The description of the sticker pack","type":[[["string"]]],"meta":{"line":49,"file":"StickerPack.js","path":"src/structures"}},{"name":"bannerId","description":"The id of the sticker pack's banner image","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":55,"file":"StickerPack.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the sticker was created at","readonly":true,"type":[[["number"]]],"meta":{"line":63,"file":"StickerPack.js","path":"src/structures"}},{"name":"createdAt","description":"The time the sticker was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":72,"file":"StickerPack.js","path":"src/structures"}},{"name":"coverSticker","description":"The sticker which is shown as the pack's icon","readonly":true,"nullable":true,"type":[[["Sticker"]]],"meta":{"line":81,"file":"StickerPack.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"bannerURL","description":"The URL to this sticker pack's banner.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":90,"file":"StickerPack.js","path":"src/structures"}}],"meta":{"line":12,"file":"StickerPack.js","path":"src/structures"}},{"name":"StoreChannel","description":"Represents a guild store channel on Discord.\nStore channels have been removed from Discord. See\n[Self-serve Game Selling Deprecation](https://support-dev.discord.com/hc/en-us/articles/6309018858647)\nfor more information.","extends":[[["GuildChannel"]]],"props":[{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":20,"file":"StoreChannel.js","path":"src/structures"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":274,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"createInvite","description":"Creates an invite to this guild channel.","examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":41,"file":"StoreChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":51,"file":"StoreChannel.js","path":"src/structures"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":12,"file":"StoreChannel.js","path":"src/structures"}},{"name":"Team","description":"Represents a Client OAuth2 Application Team.","extends":[[["Base"]]],"props":[{"name":"id","description":"The Team's id","type":[[["Snowflake"]]],"meta":{"line":25,"file":"Team.js","path":"src/structures"}},{"name":"name","description":"The name of the Team","type":[[["string"]]],"meta":{"line":32,"file":"Team.js","path":"src/structures"}},{"name":"icon","description":"The Team's icon hash","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Team.js","path":"src/structures"}},{"name":"ownerId","description":"The Team's owner id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":50,"file":"Team.js","path":"src/structures"}},{"name":"members","description":"The Team's members","type":[[["Collection","<"],["Snowflake",", "],["TeamMember",">"]]],"meta":{"line":58,"file":"Team.js","path":"src/structures"}},{"name":"owner","description":"The owner of this team","readonly":true,"nullable":true,"type":[[["TeamMember"]]],"meta":{"line":71,"file":"Team.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the team was created at","readonly":true,"type":[[["number"]]],"meta":{"line":80,"file":"Team.js","path":"src/structures"}},{"name":"createdAt","description":"The time the team was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":89,"file":"Team.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"iconURL","description":"A link to the team's icon.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":98,"file":"Team.js","path":"src/structures"}},{"name":"inviteMember","description":"Invite a team member to the team","params":[{"name":"user","description":"The user to invite to the team","type":[[["User"]]]},{"name":"MFACode","description":"The mfa code","type":[[["number"]]]}],"async":true,"returns":[[["Promise","<"],["TeamMember",">"]]],"meta":{"line":109,"file":"Team.js","path":"src/structures"}},{"name":"removeMember","description":"Remove a member from the team","params":[{"name":"userID","description":"The ID of the user you want to remove","type":[[["Snowflake"]]]}],"async":true,"returns":[[["boolean"]]],"meta":{"line":133,"file":"Team.js","path":"src/structures"}},{"name":"delete","description":"Delete this team","params":[{"name":"MFACode","description":"The 2fa code","type":[[["number"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":143,"file":"Team.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the Team's name instead of the\nTeam object.","examples":["// Logs: Team name: My Team\nconsole.log(`Team name: ${team}`);"],"returns":[[["string"]]],"meta":{"line":158,"file":"Team.js","path":"src/structures"}}],"meta":{"line":14,"file":"Team.js","path":"src/structures"}},{"name":"TeamMember","description":"Represents a Client OAuth2 Application Team Member.","extends":[[["Base"]]],"props":[{"name":"team","description":"The Team this member is part of","type":[[["Team"]]],"meta":{"line":18,"file":"TeamMember.js","path":"src/structures"}},{"name":"permissions","description":"The permissions this Team Member has with regard to the team","type":[[["Array","<"],["string",">"]]],"meta":{"line":29,"file":"TeamMember.js","path":"src/structures"}},{"name":"membershipState","description":"The permissions this Team Member has with regard to the team","type":[[["MembershipState"]]],"meta":{"line":37,"file":"TeamMember.js","path":"src/structures"}},{"name":"user","description":"The user for this Team Member","type":[[["User"]]],"meta":{"line":45,"file":"TeamMember.js","path":"src/structures"}},{"name":"id","description":"The Team Member's id","readonly":true,"type":[[["Snowflake"]]],"meta":{"line":54,"file":"TeamMember.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the team member's mention instead of the\nTeamMember object.","examples":["// Logs: Team Member's mention: <@123456789012345678>\nconsole.log(`Team Member's mention: ${teamMember}`);"],"returns":[[["string"]]],"meta":{"line":66,"file":"TeamMember.js","path":"src/structures"}}],"meta":{"line":10,"file":"TeamMember.js","path":"src/structures"}},{"name":"TextChannel","description":"Represents a guild text channel on Discord.","extends":[[["BaseGuildTextChannel"]]],"props":[{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for this channel in seconds","type":[[["number"]]],"meta":{"line":18,"file":"TextChannel.js","path":"src/structures"}},{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":22,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":28,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"threads","description":"A manager of the threads belonging to this channel","type":[[["GuildTextThreadManager"]]],"meta":{"line":34,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":40,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"topic","description":"The topic of the text channel","nullable":true,"type":[[["string"]]],"meta":{"line":53,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in the channel, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":65,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastPinTimestamp","description":"The timestamp when the last pinned message was pinned, if there was one","nullable":true,"type":[[["number"]]],"meta":{"line":73,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"defaultAutoArchiveDuration","description":"The default auto archive duration for newly created threads in this channel","nullable":true,"type":[[["number"]]],"meta":{"line":81,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"defaultThreadRateLimitPerUser","description":"The initial rate limit per user (slowmode) to set on newly created threads in a channel.","nullable":true,"type":[[["number"]]],"meta":{"line":89,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinAt","description":"The date when the last pinned message was pinned, if there was one","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":68,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":274,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["TextChannel",">"]]],"meta":{"line":28,"file":"TextChannel.js","path":"src/structures"}},{"name":"setDefaultAutoArchiveDuration","description":"Sets the default auto archive duration for all newly created threads in this channel.","inherits":"BaseGuildTextChannel#setDefaultAutoArchiveDuration","inherited":true,"params":[{"name":"defaultAutoArchiveDuration","description":"The new default auto archive duration","type":[[["ThreadAutoArchiveDuration"]]]},{"name":"reason","description":"Reason for changing the channel's default auto archive duration","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["TextChannel",">"]]],"meta":{"line":105,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"setType","description":"Sets the type of this channel (only conversion between text and news is supported)","inherits":"BaseGuildTextChannel#setType","inherited":true,"params":[{"name":"type","description":"The new channel type","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the channel's type","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":115,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"setTopic","description":"Sets a new topic for the guild channel.","inherits":"BaseGuildTextChannel#setTopic","inherited":true,"examples":["// Set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.error);"],"params":[{"name":"topic","description":"The new topic for the guild channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's topic","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":130,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"createInvite","description":"Creates an invite to this guild channel.","inherits":"BaseGuildTextChannel#createInvite","inherited":true,"examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":168,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","inherits":"BaseGuildTextChannel#fetchInvites","inherited":true,"params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":178,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","inherits":"BaseGuildTextChannel#send","inherited":true,"implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","inherits":"BaseGuildTextChannel#sendTyping","inherited":true,"implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","inherits":"BaseGuildTextChannel#createMessageCollector","inherited":true,"implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","inherits":"BaseGuildTextChannel#awaitMessages","inherited":true,"implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","inherits":"BaseGuildTextChannel#createMessageComponentCollector","inherited":true,"implements":["TextBasedChannel#createMessageComponentCollector"],"examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseGuildTextChannel#awaitMessageComponent","inherited":true,"implements":["TextBasedChannel#awaitMessageComponent"],"examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"bulkDelete","description":"Bulk deletes given messages that are newer than two weeks.","inherits":"BaseGuildTextChannel#bulkDelete","inherited":true,"implements":["TextBasedChannel#bulkDelete"],"examples":["// Bulk delete messages\nchannel.bulkDelete(5)\n .then(messages => console.log(`Bulk deleted ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"messages","description":"Messages or number of messages to delete","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]],[["Array","<"],["MessageResolvable",">"]],[["number"]]]},{"name":"filterOld","description":"Filter messages to remove those which are older than two weeks automatically","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Collection","<"],["Snowflake",", ("],["Message","|"],["undefined",")>>"]]],"description":"Returns the deleted messages"},"meta":{"line":319,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","inherits":"BaseGuildTextChannel#fetchWebhooks","inherited":true,"implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":368,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","inherits":"BaseGuildTextChannel#createWebhook","inherited":true,"implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":393,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","inherits":"BaseGuildTextChannel#setNSFW","inherited":true,"implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":413,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"searchInteraction","description":"Search Slash Command (return raw data)","inherits":"BaseGuildTextChannel#searchInteraction","inherited":true,"implements":["TextBasedChannel#searchInteraction"],"params":[{"name":"applicationId","description":"Application ID","type":[[["Snowflake"]]]},{"name":"type","description":"Command Type","default":"CHAT_INPUT","nullable":true,"type":[[["ApplicationCommandType"]]]}],"returns":[[["Object"]]],"meta":{"line":423,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendSlash","description":"Send Slash to this channel","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/SlashCommand.md}"],"inherits":"BaseGuildTextChannel#sendSlash","inherited":true,"implements":["TextBasedChannel#sendSlash"],"examples":["// Send a basic slash\nchannel.sendSlash('botid', 'ping')\n .then(console.log)\n .catch(console.error);","// Send a remote file\nchannel.sendSlash('botid', 'emoji upload', 'https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048', 'test')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"bot","description":"Bot user (BotID, not applicationID)","type":[[["UserResolvable"]]]},{"name":"commandString","description":"Command name (and sub / group formats)","type":[[["string"]]]},{"name":"args","description":"Command arguments","variable":true,"type":[[["any"]],[["Array","<"],["any",">"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":463,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":9,"file":"TextChannel.js","path":"src/structures"}},{"name":"TextInputComponent","description":"Represents a text input component in a modal","extends":[[["BaseMessageComponent"]]],"construct":{"name":"TextInputComponent","params":[{"name":"data","description":"TextInputComponent to clone or raw data","optional":true,"default":"{}","type":[[["TextInputComponent"]],[["TextInputComponentOptions"]]]}]},"props":[{"name":"customId","description":"A unique string to be sent in the interaction when submitted","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"label","description":"The text to be displayed above this text input component","nullable":true,"type":[[["string"]]],"meta":{"line":46,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"maxLength","description":"Maximum length of text that can be entered","nullable":true,"type":[[["number"]]],"meta":{"line":52,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"minLength","description":"Minimum length of text required to be entered","nullable":true,"type":[[["string"]]],"meta":{"line":58,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"placeholder","description":"Custom placeholder text to display when no text is entered","nullable":true,"type":[[["string"]]],"meta":{"line":64,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"required","description":"Whether or not this text input component is required","nullable":true,"type":[[["boolean"]]],"meta":{"line":70,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"style","description":"The style of this text input component","nullable":true,"type":[[["TextInputStyle"]]],"meta":{"line":76,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"value","description":"Value of this text input component","nullable":true,"type":[[["string"]]],"meta":{"line":82,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"type","description":"The type of this component","nullable":true,"type":[[["MessageComponentType"]]],"meta":{"line":52,"file":"BaseMessageComponent.js","path":"src/structures"}}],"methods":[{"name":"setCustomId","description":"Sets the custom id of this text input component","params":[{"name":"customId","description":"A unique string to be sent in the interaction when submitted","type":[[["string"]]]}],"returns":[[["TextInputComponent"]]],"meta":{"line":90,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"setLabel","description":"Sets the label of this text input component","params":[{"name":"label","description":"The text to be displayed above this text input component","type":[[["string"]]]}],"returns":[[["TextInputComponent"]]],"meta":{"line":100,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"setRequired","description":"Sets the text input component to be required for modal submission","params":[{"name":"required","description":"Whether this text input component is required","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["TextInputComponent"]]],"meta":{"line":110,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"setMaxLength","description":"Sets the maximum length of text input required in this text input component","params":[{"name":"maxLength","description":"Maximum length of text to be required","type":[[["number"]]]}],"returns":[[["TextInputComponent"]]],"meta":{"line":120,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"setMinLength","description":"Sets the minimum length of text input required in this text input component","params":[{"name":"minLength","description":"Minimum length of text to be required","type":[[["number"]]]}],"returns":[[["TextInputComponent"]]],"meta":{"line":130,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"setPlaceholder","description":"Sets the placeholder of this text input component","params":[{"name":"placeholder","description":"Custom placeholder text to display when no text is entered","type":[[["string"]]]}],"returns":[[["TextInputComponent"]]],"meta":{"line":140,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"setStyle","description":"Sets the style of this text input component","params":[{"name":"style","description":"The style of this text input component","type":[[["TextInputStyleResolvable"]]]}],"returns":[[["TextInputComponent"]]],"meta":{"line":150,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"setValue","description":"Sets the value of this text input component","params":[{"name":"value","description":"Value of this text input component","type":[[["string"]]]}],"returns":[[["TextInputComponent"]]],"meta":{"line":160,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"toJSON","description":"Transforms the text input component into a plain object","returns":{"types":[[["APITextInput"]]],"description":"The raw data of this text input component"},"meta":{"line":169,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"resolveStyle","description":"Resolves the style of a text input component","scope":"static","access":"private","params":[{"name":"style","description":"The style to resolve","type":[[["TextInputStyleResolvable"]]]}],"returns":[[["TextInputStyle"]]],"meta":{"line":196,"file":"TextInputComponent.js","path":"src/structures"}}],"meta":{"line":13,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"ThreadChannel","description":"Represents a thread channel on Discord.","extends":[[["Channel"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"guild","description":"The guild the thread is in","type":[[["Guild"]]],"meta":{"line":26,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":32,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"messages","description":"A manager of the messages sent to this thread","type":[[["MessageManager"]]],"meta":{"line":38,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"members","description":"A manager of the members that are part of this thread","type":[[["ThreadMemberManager"]]],"meta":{"line":44,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":50,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"firstMessage","description":"First message in the thread","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the thread","type":[[["string"]]],"meta":{"line":71,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the parent channel of this thread","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":83,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"locked","description":"Whether the thread is locked","nullable":true,"type":[[["boolean"]]],"meta":{"line":93,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"invitable","description":"Whether members without `MANAGE_THREADS` can invite other members without `MANAGE_THREADS`\nAlways `null` in public threads","nullable":true,"type":[[["boolean"]]],"meta":{"line":100,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"archived","description":"Whether the thread is archived","nullable":true,"type":[[["boolean"]]],"meta":{"line":106,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"autoArchiveDuration","description":"The amount of time (in minutes) after which the thread will automatically archive in case of no recent activity","nullable":true,"type":[[["number"]]],"meta":{"line":112,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"archiveTimestamp","description":"The timestamp when the thread's archive status was last changed\nIf the thread was never archived or unarchived, this is the timestamp at which the thread was\ncreated","nullable":true,"type":[[["number"]]],"meta":{"line":120,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"ownerId","description":"The id of the member who created this thread","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":141,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in this thread, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":151,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"lastPinTimestamp","description":"The timestamp when the last pinned message was pinned, if there was one","nullable":true,"type":[[["number"]]],"meta":{"line":161,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for this thread in seconds","nullable":true,"type":[[["number"]]],"meta":{"line":171,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"messageCount","description":"Threads created before July 1, 2022 may have an inaccurate count.\nIf you need an approximate value higher than that, use `ThreadChannel#messages.cache.size`","nullable":true,"type":[[["number"]]],"meta":{"line":182,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"memberCount","description":"The approximate count of users in this thread\nThis stops counting at 50. If you need an approximate value higher than that, use\n`ThreadChannel#members.cache.size`","nullable":true,"type":[[["number"]]],"meta":{"line":194,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"totalMessageSent","description":"The number of messages ever sent in a thread, similar to {@link ThreadChannel#messageCount} except it\nwill not decrement whenever a message is deleted","nullable":true,"type":[[["number"]]],"meta":{"line":205,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"appliedTags","description":"The tags applied to this thread","type":[[["Array","<"],["Snowflake",">"]]],"meta":{"line":215,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp when this thread was created. This isn't available for threads\ncreated before 2022-01-09","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":230,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"guildMembers","description":"A collection of associated guild member objects of this thread's members","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":239,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"archivedAt","description":"The time at which this thread's archive status was last changed\nIf the thread was never archived or unarchived, this is the time at which the thread was created","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":249,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the thread was created at","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":259,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"parent","description":"The parent channel of this thread","readonly":true,"nullable":true,"type":[[["NewsChannel"]],[["TextChannel"]],[["ForumChannel"]]],"meta":{"line":268,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"joined","description":"Whether the client user is a member of the thread.","readonly":true,"type":[[["boolean"]]],"meta":{"line":498,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"editable","description":"Whether the thread is editable by the client user (name, archived, autoArchiveDuration)","readonly":true,"type":[[["boolean"]]],"meta":{"line":507,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"joinable","description":"Whether the thread is joinable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":518,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the thread is manageable by the client user, for deleting or editing rateLimitPerUser or locked.","readonly":true,"type":[[["boolean"]]],"meta":{"line":534,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the thread is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":551,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"sendable","description":"Whether the client user can send messages in this thread","readonly":true,"type":[[["boolean"]]],"meta":{"line":563,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"unarchivable","description":"Whether the thread is unarchivable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":582,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinAt","description":"The date when the last pinned message was pinned, if there was one","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":68,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"join","description":"Makes the client user join the thread.","async":true,"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":276,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"leave","description":"Makes the client user leave the thread.","async":true,"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":285,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this thread's parent channel, taking overwrites into\naccount.","params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":297,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"fetchOwner","description":"Fetches the owner of this thread. If the thread member object isn't needed,\nuse {@link ThreadChannel#ownerId} instead.","params":[{"name":"options","description":"The options for fetching the member","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise",""]]],"meta":{"line":307,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"fetchStarterMessage","description":"Fetches the message that started this thread, if any.\nThe `Promise` will reject if the original message in a forum post is deleted\nor when the original message in the parent channel is deleted.\nIf you just need the id of that message, use {@link ThreadChannel#id} instead.","params":[{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["null",")>"]]],"meta":{"line":327,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits this thread.","examples":["// Edit a thread\nthread.edit({ name: 'new-thread' })\n .then(editedThread => console.log(editedThread))\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for this thread","type":[[["ThreadEditData"]]]},{"name":"reason","description":"Reason for editing this thread","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":358,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setArchived","description":"Sets whether the thread is archived.","examples":["// Archive the thread\nthread.setArchived(true)\n .then(newThread => console.log(`Thread is now ${newThread.archived ? 'archived' : 'active'}`))\n .catch(console.error);"],"params":[{"name":"archived","description":"Whether the thread is archived","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for archiving or unarchiving","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":390,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setAutoArchiveDuration","description":"Sets the duration after which the thread will automatically archive in case of no recent activity.","examples":["// Set the thread's auto archive time to 1 hour\nthread.setAutoArchiveDuration(60)\n .then(newThread => {\n console.log(`Thread will now archive after ${newThread.autoArchiveDuration} minutes of inactivity`);\n });\n .catch(console.error);"],"params":[{"name":"autoArchiveDuration","description":"The amount of time (in minutes) after which the thread\nshould automatically archive in case of no recent activity","type":[[["ThreadAutoArchiveDuration"]]]},{"name":"reason","description":"Reason for changing the auto archive duration","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":408,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setInvitable","description":"Sets whether members without the `MANAGE_THREADS` permission can invite other members without the\n`MANAGE_THREADS` permission to this thread.","params":[{"name":"invitable","description":"Whether non-moderators can invite non-moderators to this thread","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing invite","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":419,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setLocked","description":"Sets whether the thread can be **unarchived** by anyone with `SEND_MESSAGES` permission.\nWhen a thread is locked only members with `MANAGE_THREADS` can unarchive it.","examples":["// Set the thread to locked\nthread.setLocked(true)\n .then(newThread => console.log(`Thread is now ${newThread.locked ? 'locked' : 'unlocked'}`))\n .catch(console.error);"],"params":[{"name":"locked","description":"Whether the thread is locked","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for locking or unlocking the thread","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":436,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for this thread.","examples":["// Change the thread's name\nthread.setName('not_general')\n .then(newThread => console.log(`Thread's new name is ${newThread.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the thread","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the thread's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":451,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this thread.","implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the thread's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":461,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"pin","description":"Pins this thread from the forum channel.","params":[{"name":"reason","description":"Reason for pinning","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":470,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"unpin","description":"Unpins this thread from the forum channel.","params":[{"name":"reason","description":"Reason for unpinning","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":479,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setAppliedTags","description":"Set the applied tags for this channel (only applicable to forum threads)","params":[{"name":"appliedTags","description":"The tags to set for this channel","type":[[["Array","<"],["Snowflake",">"]]]},{"name":"reason","description":"Reason for changing the thread's applied tags","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":489,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"isPrivate","description":"Whether this thread is a private thread","returns":[[["boolean"]]],"meta":{"line":590,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this thread.","examples":["// Delete the thread\nthread.delete('cleaning out old threads')\n .then(deletedThread => console.log(deletedThread))\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this thread","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":604,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","implements":["TextBasedChannel#createMessageComponentCollector"],"examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","implements":["TextBasedChannel#awaitMessageComponent"],"examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"bulkDelete","description":"Bulk deletes given messages that are newer than two weeks.","implements":["TextBasedChannel#bulkDelete"],"examples":["// Bulk delete messages\nchannel.bulkDelete(5)\n .then(messages => console.log(`Bulk deleted ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"messages","description":"Messages or number of messages to delete","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]],[["Array","<"],["MessageResolvable",">"]],[["number"]]]},{"name":"filterOld","description":"Filter messages to remove those which are older than two weeks automatically","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Collection","<"],["Snowflake",", ("],["Message","|"],["undefined",")>>"]]],"description":"Returns the deleted messages"},"meta":{"line":319,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":18,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"ThreadMember","description":"Represents a Member for a Thread.","extends":[[["Base"]]],"props":[{"name":"thread","description":"The thread that this member is a part of","type":[[["ThreadChannel"]]],"meta":{"line":18,"file":"ThreadMember.js","path":"src/structures"}},{"name":"joinedTimestamp","description":"The timestamp the member last joined the thread at","nullable":true,"type":[[["number"]]],"meta":{"line":24,"file":"ThreadMember.js","path":"src/structures"}},{"name":"id","description":"The id of the thread member","type":[[["Snowflake"]]],"meta":{"line":30,"file":"ThreadMember.js","path":"src/structures"}},{"name":"flags","description":"The flags for this thread member","type":[[["ThreadMemberFlags"]]],"meta":{"line":43,"file":"ThreadMember.js","path":"src/structures"}},{"name":"member","description":"The guild member associated with this thread member.","access":"private","nullable":true,"type":[[["GuildMember"]]],"meta":{"line":52,"file":"ThreadMember.js","path":"src/structures"}},{"name":"guildMember","description":"The guild member associated with this thread member","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":63,"file":"ThreadMember.js","path":"src/structures"}},{"name":"joinedAt","description":"The last time this member joined the thread","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":72,"file":"ThreadMember.js","path":"src/structures"}},{"name":"user","description":"The user associated with this thread member","readonly":true,"nullable":true,"type":[[["User"]]],"meta":{"line":81,"file":"ThreadMember.js","path":"src/structures"}},{"name":"manageable","description":"Whether the client user can manage this thread member","readonly":true,"type":[[["boolean"]]],"meta":{"line":90,"file":"ThreadMember.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"remove","description":"Removes this member from the thread.","params":[{"name":"reason","description":"Reason for removing the member","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["ThreadMember"]]],"meta":{"line":99,"file":"ThreadMember.js","path":"src/structures"}}],"meta":{"line":10,"file":"ThreadMember.js","path":"src/structures"}},{"name":"Typing","description":"Represents a typing state for a user in a channel.","extends":[[["Base"]]],"props":[{"name":"channel","description":"The channel the status is from","type":[[["TextBasedChannels"]]],"meta":{"line":17,"file":"Typing.js","path":"src/structures"}},{"name":"user","description":"The user who is typing","type":[[["User"]]],"meta":{"line":23,"file":"Typing.js","path":"src/structures"}},{"name":"startedTimestamp","description":"The UNIX timestamp in milliseconds the user started typing at","type":[[["number"]]],"meta":{"line":34,"file":"Typing.js","path":"src/structures"}},{"name":"startedAt","description":"The time the user started typing at","readonly":true,"type":[[["Date"]]],"meta":{"line":51,"file":"Typing.js","path":"src/structures"}},{"name":"guild","description":"The guild the status is from","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":60,"file":"Typing.js","path":"src/structures"}},{"name":"member","description":"The member who is typing","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":69,"file":"Typing.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"inGuild","description":"Indicates whether the status is received from a guild.","returns":[[["boolean"]]],"meta":{"line":42,"file":"Typing.js","path":"src/structures"}}],"meta":{"line":9,"file":"Typing.js","path":"src/structures"}},{"name":"User","description":"Represents a user on Discord.","extends":[[["Base"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"id","description":"The user's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"User.js","path":"src/structures"}},{"name":"connectedAccounts","description":"Accounts connected to this user\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["Array","<"],["ConnectionAccount",">"]]],"meta":{"line":49,"file":"User.js","path":"src/structures"}},{"name":"premiumSince","description":"Time that User has nitro (Unix Timestamp)\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["number"]]],"meta":{"line":55,"file":"User.js","path":"src/structures"}},{"name":"premiumGuildSince","description":"Time that User has nitro and boost server (Unix Timestamp)","nullable":true,"type":[[["number"]]],"meta":{"line":60,"file":"User.js","path":"src/structures"}},{"name":"bio","description":"About me (User)\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":66,"file":"User.js","path":"src/structures"}},{"name":"pronouns","description":"Pronouns (User)\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":72,"file":"User.js","path":"src/structures"}},{"name":"application","description":"[Bot] Application","nullable":true,"type":[[["ClientApplication"]]],"meta":{"line":78,"file":"User.js","path":"src/structures"}},{"name":"username","description":"The username of the user","nullable":true,"type":[[["string"]]],"meta":{"line":89,"file":"User.js","path":"src/structures"}},{"name":"globalName","description":"The global name of this user","nullable":true,"type":[[["string"]]],"meta":{"line":99,"file":"User.js","path":"src/structures"}},{"name":"bot","description":"Whether or not the user is a bot","nullable":true,"type":[[["boolean"]]],"meta":{"line":109,"file":"User.js","path":"src/structures"}},{"name":"discriminator","description":"The discriminator of this user\n`'0'`, or a 4-digit stringified number if they're using the legacy username system","nullable":true,"type":[[["string"]]],"meta":{"line":124,"file":"User.js","path":"src/structures"}},{"name":"avatar","description":"The user avatar's hash","nullable":true,"type":[[["string"]]],"meta":{"line":134,"file":"User.js","path":"src/structures"}},{"name":"banner","description":"The user banner's hash\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":145,"file":"User.js","path":"src/structures"}},{"name":"accentColor","description":"The base 10 accent color of the user's banner\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["number"]]],"meta":{"line":156,"file":"User.js","path":"src/structures"}},{"name":"system","description":"Whether the user is an Official Discord System user (part of the urgent message system)","nullable":true,"type":[[["boolean"]]],"meta":{"line":166,"file":"User.js","path":"src/structures"}},{"name":"flags","description":"The flags for this user","nullable":true,"type":[[["UserFlags"]]],"meta":{"line":176,"file":"User.js","path":"src/structures"}},{"name":"botInGuildsCount","description":"Check how many guilds the bot is in (Probably only approximate) (application.fetch() first)","nullable":true,"type":[[["number"]]],"meta":{"line":184,"file":"User.js","path":"src/structures"}},{"name":"avatarDecoration","description":"The user avatar decoration's hash","nullable":true,"type":[[["string"]]],"meta":{"line":192,"file":"User.js","path":"src/structures"}},{"name":"mutualGuilds","description":"This user is on the same servers as Client User\nThe user must be force fetched for this property to be present or be updated","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Guild",">"]]],"meta":{"line":204,"file":"User.js","path":"src/structures"}},{"name":"mutualFriends","description":"Get all mutual friends (Client -> User)","readonly":true,"type":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["User",">>"]]],"meta":{"line":213,"file":"User.js","path":"src/structures"}},{"name":"relationships","description":"Check relationship status (Client -> User)","readonly":true,"type":[[["RelationshipTypes"]]],"meta":{"line":231,"file":"User.js","path":"src/structures"}},{"name":"note","description":"Check note","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":241,"file":"User.js","path":"src/structures"}},{"name":"nickname","description":"Get friend nickname","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":250,"file":"User.js","path":"src/structures"}},{"name":"voice","description":"The voice state of this member","readonly":true,"type":[[["VoiceState"]]],"meta":{"line":259,"file":"User.js","path":"src/structures"}},{"name":"nitroType","description":"Nitro type of the user.","type":[[["NitroType"]]],"meta":{"line":292,"file":"User.js","path":"src/structures"}},{"name":"themeColors","description":"The user's theme colors (Profile theme) [Primary, Accent]\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["Array","<"],["number",">"]]],"meta":{"line":302,"file":"User.js","path":"src/structures"}},{"name":"badges","description":"User badges (Boost, Slash, AutoMod, etc.)","nullable":true,"type":[[["Array","<"],["UserBadge",">"]]],"meta":{"line":336,"file":"User.js","path":"src/structures"}},{"name":"partial","description":"Whether this User is a partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":430,"file":"User.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the user was created at","readonly":true,"type":[[["number"]]],"meta":{"line":439,"file":"User.js","path":"src/structures"}},{"name":"createdAt","description":"The time the user was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":448,"file":"User.js","path":"src/structures"}},{"name":"defaultAvatarURL","description":"A link to the user's default avatar","readonly":true,"type":[[["string"]]],"meta":{"line":477,"file":"User.js","path":"src/structures"}},{"name":"hexAccentColor","description":"The hexadecimal version of the user accent color, with a leading hash\nThe user must be force fetched for this property to be present","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":498,"file":"User.js","path":"src/structures"}},{"name":"hexThemeColor","description":"The hexadecimal version of the user theme color, with a leading hash [Primary, Accent]\nThe user must be force fetched for this property to be present or be updated","readonly":true,"nullable":true,"type":[[["Array","<"],["string",">"]]],"meta":{"line":541,"file":"User.js","path":"src/structures"}},{"name":"tag","description":"The tag of this user\nThis user's username, or their legacy tag (e.g. `hydrabolt#0001`)\nif they're using the legacy username system","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":552,"file":"User.js","path":"src/structures"}},{"name":"displayName","description":"The global name of this user, or their username if they don't have one","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":565,"file":"User.js","path":"src/structures"}},{"name":"dmChannel","description":"The DM between the client's user and this user","readonly":true,"nullable":true,"type":[[["DMChannel"]]],"meta":{"line":574,"file":"User.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"getProfile","description":"Get profile from Discord, if client is in a server with the target.","params":[{"name":"guildId","description":"The guild id to get the profile from","type":[[["Snowflake"]],[["null"]]]}],"async":true,"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":354,"file":"User.js","path":"src/structures"}},{"name":"setFriend","description":"Friends the user [If incoming request]","returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":376,"file":"User.js","path":"src/structures"}},{"name":"setNickname","description":"Changes the nickname of the friend","params":[{"name":"nickname","description":"The nickname to change","nullable":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":386,"file":"User.js","path":"src/structures"}},{"name":"sendFriendRequest","description":"Send Friend Request to the user","returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":395,"file":"User.js","path":"src/structures"}},{"name":"setBlock","description":"Blocks the user","returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":403,"file":"User.js","path":"src/structures"}},{"name":"unBlock","description":"Removes the user from your blocks list","returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":412,"file":"User.js","path":"src/structures"}},{"name":"unFriend","description":"Removes the user from your friends list","returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":421,"file":"User.js","path":"src/structures"}},{"name":"avatarURL","description":"A link to the user's avatar.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":457,"file":"User.js","path":"src/structures"}},{"name":"avatarDecorationURL","description":"A link to the user's avatar decoration.","params":[{"name":"options","description":"Options for the image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":467,"file":"User.js","path":"src/structures"}},{"name":"displayAvatarURL","description":"A link to the user's avatar if they have one.\nOtherwise a link to their default avatar will be returned.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":[[["string"]]],"meta":{"line":488,"file":"User.js","path":"src/structures"}},{"name":"bannerURL","description":"A link to the user's banner.\nThis method will throw an error if called before the user is force fetched.\nSee {@link User#banner} for more info","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":510,"file":"User.js","path":"src/structures"}},{"name":"ring","description":"Ring the user's phone / PC (call)","deprecated":true,"returns":[[["Promise","<"],["any",">"]]],"meta":{"line":523,"file":"User.js","path":"src/structures"}},{"name":"createDM","description":"Creates a DM channel between the client and the user.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":583,"file":"User.js","path":"src/structures"}},{"name":"deleteDM","description":"Deletes a DM channel (if one exists) between the client and the user. Resolves with the channel if successful.","returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":591,"file":"User.js","path":"src/structures"}},{"name":"equals","description":"Checks if the user is equal to another.\nIt compares id, username, discriminator, avatar, banner, accent color, and bot flags.\nIt is recommended to compare equality by using `user.id === user2.id` unless you want to compare all properties.","params":[{"name":"user","description":"User to compare with","type":[[["User"]]]}],"returns":[[["boolean"]]],"meta":{"line":602,"file":"User.js","path":"src/structures"}},{"name":"_equals","description":"Compares the user with an API user object","access":"private","params":[{"name":"user","description":"The API user object to compare","type":[[["APIUser"]]]}],"returns":[[["boolean"]]],"meta":{"line":623,"file":"User.js","path":"src/structures"}},{"name":"fetchFlags","description":"Fetches this user's flags.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["UserFlags",">"]]],"meta":{"line":642,"file":"User.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this user.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":651,"file":"User.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the user's mention instead of the User object.","examples":["// Logs: Hello from <@123456789012345678>!\nconsole.log(`Hello from ${user}!`);"],"returns":[[["string"]]],"meta":{"line":662,"file":"User.js","path":"src/structures"}},{"name":"setNote","description":"Set note to user","params":[{"name":"note","description":"Note to set","default":null,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":687,"file":"User.js","path":"src/structures"}},{"name":"presenceFetch","description":"Get presence (~ v12)","async":true,"returns":[[["Promise","<("],["Presence","|"],["null",")>"]]],"meta":{"line":696,"file":"User.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this user.","implements":["TextBasedChannel#send"],"examples":["// Send a direct message\nuser.send('Hello!')\n .then(message => console.log(`Sent message: ${message.content} to ${user.tag}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":709,"file":"User.js","path":"src/structures"}}],"meta":{"line":19,"file":"User.js","path":"src/structures"}},{"name":"UserContextMenuInteraction","description":"Represents a user context menu interaction.","extends":[[["ContextMenuInteraction"]]],"props":[{"name":"targetUser","description":"The user this interaction was sent from","readonly":true,"type":[[["User"]]],"meta":{"line":15,"file":"UserContextMenuInteraction.js","path":"src/structures"}},{"name":"targetMember","description":"The member this interaction was sent from","readonly":true,"nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":24,"file":"UserContextMenuInteraction.js","path":"src/structures"}},{"name":"options","description":"The target of the interaction, parsed into options","type":[[["CommandInteractionOptionResolver"]]],"meta":{"line":18,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"targetId","description":"The id of the target of the interaction","type":[[["Snowflake"]]],"meta":{"line":28,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"targetType","description":"The type of the target of the interaction; either USER or MESSAGE","type":[[["ApplicationCommandType"]]],"meta":{"line":34,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":20,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandId","description":"The invoked application command's id","type":[[["Snowflake"]]],"meta":{"line":30,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandName","description":"The invoked application command's name","type":[[["string"]]],"meta":{"line":36,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":42,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":48,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":54,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":60,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"command","description":"The invoked application command, if it was fetched before","nullable":true,"type":[[["ApplicationCommand"]]],"meta":{"line":67,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"resolveContextMenuOptions","description":"Resolves and transforms options received from the API for a context menu interaction.","access":"private","inherits":"ContextMenuInteraction#resolveContextMenuOptions","inherited":true,"params":[{"name":"data","description":"The interaction data","type":[[["APIApplicationCommandInteractionData"]]]}],"returns":[[["Array","<"],["CommandInteractionOption",">"]]],"meta":{"line":43,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"transformResolved","description":"Transforms the resolved received from the API.","access":"private","inherits":"BaseCommandInteraction#transformResolved","inherited":true,"params":[{"name":"resolved","description":"The received resolved objects","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionResolvedData"]]],"meta":{"line":89,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"transformOption","description":"Transforms an option received from the API.","access":"private","inherits":"BaseCommandInteraction#transformOption","inherited":true,"params":[{"name":"option","description":"The received option","type":[[["APIApplicationCommandOption"]]]},{"name":"resolved","description":"The resolved interaction data","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionOption"]]],"meta":{"line":162,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"BaseCommandInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"BaseCommandInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"BaseCommandInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"BaseCommandInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"BaseCommandInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"BaseCommandInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"BaseCommandInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseCommandInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":9,"file":"UserContextMenuInteraction.js","path":"src/structures"}},{"name":"VoiceChannel","description":"Represents a guild voice channel on Discord.","extends":[[["BaseGuildVoiceChannel"]]],"props":[{"name":"editable","description":"Whether the channel is editable by the client user","readonly":true,"deprecated":"Use {@link VoiceChannel#manageable} instead","type":[[["boolean"]]],"meta":{"line":20,"file":"VoiceChannel.js","path":"src/structures"}},{"name":"joinable","description":"Whether the channel is joinable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":38,"file":"VoiceChannel.js","path":"src/structures"}},{"name":"speakable","description":"Checks if the client has permission to send audio to the voice channel","readonly":true,"type":[[["boolean"]]],"meta":{"line":49,"file":"VoiceChannel.js","path":"src/structures"}},{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":23,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":29,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":35,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"bitrate","description":"The bitrate of this voice-based channel","type":[[["number"]]],"meta":{"line":48,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"rtcRegion","description":"The RTC region for this voice-based channel. This region is automatically selected if `null`.","nullable":true,"type":[[["string"]]],"meta":{"line":56,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"userLimit","description":"The maximum amount of users allowed in this channel.","type":[[["number"]]],"meta":{"line":64,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"videoQualityMode","description":"The camera video quality mode of the channel.","nullable":true,"type":[[["VideoQualityMode"]]],"meta":{"line":72,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in the channel, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":82,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for this channel in seconds","type":[[["number"]]],"meta":{"line":94,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"members","description":"The members in this voice-based channel","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":107,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"full","description":"Checks if the voice-based channel is full","readonly":true,"type":[[["boolean"]]],"meta":{"line":122,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"createInvite","description":"Creates an invite to this guild channel.","inherits":"BaseGuildVoiceChannel#createInvite","inherited":true,"examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":155,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","inherits":"BaseGuildVoiceChannel#fetchInvites","inherited":true,"params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":165,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setBitrate","description":"Sets the bitrate of the channel.","inherits":"BaseGuildVoiceChannel#setBitrate","inherited":true,"examples":["// Set the bitrate of a voice channel\nvoiceChannel.setBitrate(48_000)\n .then(vc => console.log(`Set bitrate to ${vc.bitrate}bps for ${vc.name}`))\n .catch(console.error);"],"params":[{"name":"bitrate","description":"The new bitrate","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's bitrate","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":180,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setRTCRegion","description":"Sets the RTC region of the channel.","inherits":"BaseGuildVoiceChannel#setRTCRegion","inherited":true,"examples":["// Set the RTC region to sydney\nchannel.setRTCRegion('sydney');","// Remove a fixed region for this channel - let Discord decide automatically\nchannel.setRTCRegion(null, 'We want to let Discord decide.');"],"params":[{"name":"rtcRegion","description":"The new region of the channel. Set to `null` to remove a specific region for the channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"The reason for modifying this region.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["BaseGuildVoiceChannel",">"]]],"meta":{"line":196,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setUserLimit","description":"Sets the user limit of the channel.","inherits":"BaseGuildVoiceChannel#setUserLimit","inherited":true,"examples":["// Set the user limit of a voice channel\nvoiceChannel.setUserLimit(42)\n .then(vc => console.log(`Set user limit to ${vc.userLimit} for ${vc.name}`))\n .catch(console.error);"],"params":[{"name":"userLimit","description":"The new user limit","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the user limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":211,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setVideoQualityMode","description":"Sets the camera video quality mode of the channel.","inherits":"BaseGuildVoiceChannel#setVideoQualityMode","inherited":true,"params":[{"name":"videoQualityMode","description":"The new camera video quality mode.","type":[[["VideoQualityMode"]],[["number"]]]},{"name":"reason","description":"Reason for changing the camera video quality mode.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":221,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","inherits":"BaseGuildVoiceChannel#send","inherited":true,"implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","inherits":"BaseGuildVoiceChannel#sendTyping","inherited":true,"implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","inherits":"BaseGuildVoiceChannel#createMessageCollector","inherited":true,"implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","inherits":"BaseGuildVoiceChannel#awaitMessages","inherited":true,"implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","inherits":"BaseGuildVoiceChannel#createMessageComponentCollector","inherited":true,"implements":["TextBasedChannel#createMessageComponentCollector"],"examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseGuildVoiceChannel#awaitMessageComponent","inherited":true,"implements":["TextBasedChannel#awaitMessageComponent"],"examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"bulkDelete","description":"Bulk deletes given messages that are newer than two weeks.","inherits":"BaseGuildVoiceChannel#bulkDelete","inherited":true,"implements":["TextBasedChannel#bulkDelete"],"examples":["// Bulk delete messages\nchannel.bulkDelete(5)\n .then(messages => console.log(`Bulk deleted ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"messages","description":"Messages or number of messages to delete","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]],[["Array","<"],["MessageResolvable",">"]],[["number"]]]},{"name":"filterOld","description":"Filter messages to remove those which are older than two weeks automatically","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Collection","<"],["Snowflake",", ("],["Message","|"],["undefined",")>>"]]],"description":"Returns the deleted messages"},"meta":{"line":319,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","inherits":"BaseGuildVoiceChannel#fetchWebhooks","inherited":true,"implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":368,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","inherits":"BaseGuildVoiceChannel#createWebhook","inherited":true,"implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":393,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","inherits":"BaseGuildVoiceChannel#setRateLimitPerUser","inherited":true,"implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":403,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","inherits":"BaseGuildVoiceChannel#setNSFW","inherited":true,"implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":413,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":13,"file":"VoiceChannel.js","path":"src/structures"}},{"name":"VoiceRegion","description":"Represents a Discord voice region for guilds.","props":[{"name":"id","description":"The region's id","type":[[["string"]]],"meta":{"line":14,"file":"VoiceRegion.js","path":"src/structures"}},{"name":"name","description":"Name of the region","type":[[["string"]]],"meta":{"line":20,"file":"VoiceRegion.js","path":"src/structures"}},{"name":"vip","description":"Whether the region is VIP-only","deprecated":"This property is no longer being sent by the API.","type":[[["boolean"]]],"meta":{"line":27,"file":"VoiceRegion.js","path":"src/structures"}},{"name":"deprecated","description":"Whether the region is deprecated","type":[[["boolean"]]],"meta":{"line":33,"file":"VoiceRegion.js","path":"src/structures"}},{"name":"optimal","description":"Whether the region is optimal","type":[[["boolean"]]],"meta":{"line":39,"file":"VoiceRegion.js","path":"src/structures"}},{"name":"custom","description":"Whether the region is custom","type":[[["boolean"]]],"meta":{"line":45,"file":"VoiceRegion.js","path":"src/structures"}}],"meta":{"line":8,"file":"VoiceRegion.js","path":"src/structures"}},{"name":"VoiceState","description":"Represents the voice state for a Guild Member.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild of this voice state","type":[[["Guild"]]],"meta":{"line":17,"file":"VoiceState.js","path":"src/structures"}},{"name":"id","description":"The id of the member of this voice state","type":[[["Snowflake"]]],"meta":{"line":22,"file":"VoiceState.js","path":"src/structures"}},{"name":"serverDeaf","description":"Whether this member is deafened server-wide","nullable":true,"type":[[["boolean"]]],"meta":{"line":32,"file":"VoiceState.js","path":"src/structures"}},{"name":"serverMute","description":"Whether this member is muted server-wide","nullable":true,"type":[[["boolean"]]],"meta":{"line":42,"file":"VoiceState.js","path":"src/structures"}},{"name":"selfDeaf","description":"Whether this member is self-deafened","nullable":true,"type":[[["boolean"]]],"meta":{"line":52,"file":"VoiceState.js","path":"src/structures"}},{"name":"selfMute","description":"Whether this member is self-muted","nullable":true,"type":[[["boolean"]]],"meta":{"line":62,"file":"VoiceState.js","path":"src/structures"}},{"name":"selfVideo","description":"Whether this member's camera is enabled","nullable":true,"type":[[["boolean"]]],"meta":{"line":72,"file":"VoiceState.js","path":"src/structures"}},{"name":"sessionId","description":"The session id for this member's connection","nullable":true,"type":[[["string"]]],"meta":{"line":82,"file":"VoiceState.js","path":"src/structures"}},{"name":"streaming","description":"Whether this member is streaming using \"Screen Share\"","type":[[["boolean"]]],"meta":{"line":93,"file":"VoiceState.js","path":"src/structures"}},{"name":"channelId","description":"The {@link VoiceChannel} or {@link StageChannel} id the member is in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":100,"file":"VoiceState.js","path":"src/structures"}},{"name":"suppress","description":"Whether this member is suppressed from speaking. This property is specific to stage channels only.","type":[[["boolean"]]],"meta":{"line":110,"file":"VoiceState.js","path":"src/structures"}},{"name":"requestToSpeakTimestamp","description":"The time at which the member requested to speak. This property is specific to stage channels only.","nullable":true,"type":[[["number"]]],"meta":{"line":118,"file":"VoiceState.js","path":"src/structures"}},{"name":"member","description":"The member that this voice state belongs to","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":131,"file":"VoiceState.js","path":"src/structures"}},{"name":"user","description":"The user that this voice state belongs to","readonly":true,"nullable":true,"type":[[["User"]]],"meta":{"line":141,"file":"VoiceState.js","path":"src/structures"}},{"name":"channel","description":"The channel that the member is connected to","readonly":true,"nullable":true,"type":[[["VoiceChannel"]],[["StageChannel"]]],"meta":{"line":150,"file":"VoiceState.js","path":"src/structures"}},{"name":"deaf","description":"Whether this member is either self-deafened or server-deafened","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":160,"file":"VoiceState.js","path":"src/structures"}},{"name":"mute","description":"Whether this member is either self-muted or server-muted","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":169,"file":"VoiceState.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"setMute","description":"Mutes/unmutes the member of this voice state.","params":[{"name":"mute","description":"Whether or not the member should be muted","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for muting or unmuting","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":179,"file":"VoiceState.js","path":"src/structures"}},{"name":"setDeaf","description":"Deafens/undeafens the member of this voice state.","params":[{"name":"deaf","description":"Whether or not the member should be deafened","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for deafening or undeafening","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":190,"file":"VoiceState.js","path":"src/structures"}},{"name":"disconnect","description":"Disconnects the member from the channel.","params":[{"name":"reason","description":"Reason for disconnecting the member from the channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":200,"file":"VoiceState.js","path":"src/structures"}},{"name":"setChannel","description":"Moves the member to a different channel, or disconnects them from the one they're in.","params":[{"name":"channel","description":"Channel to move the member to, or `null` if you want to\ndisconnect them from voice.","type":[[["GuildVoiceChannelResolvable"]],[["null"]]]},{"name":"reason","description":"Reason for moving member to another channel or disconnecting","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":212,"file":"VoiceState.js","path":"src/structures"}},{"name":"setStatus","description":"Sets the status of the voice channel","examples":["// Setting the status to something\nguild.members.me.voice.setStatus(\"something\")","// Removing the status\nguild.members.me.voice.setStatus(\"\")"],"params":[{"name":"status","description":"The message to set the channel status to","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":228,"file":"VoiceState.js","path":"src/structures"}},{"name":"setRequestToSpeak","description":"Toggles the request to speak in the channel.\nOnly applicable for stage channels and for the client's own voice state.","examples":["// Making the client request to speak in a stage channel (raise its hand)\nguild.members.me.voice.setRequestToSpeak(true);","// Making the client cancel a request to speak\nguild.members.me.voice.setRequestToSpeak(false);"],"params":[{"name":"request","description":"Whether or not the client is requesting to become a speaker.","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":255,"file":"VoiceState.js","path":"src/structures"}},{"name":"setSuppressed","description":"Suppress/unsuppress the user. Only applicable for stage channels.","examples":["// Making the client a speaker\nguild.members.me.voice.setSuppressed(false);","// Making the client an audience member\nguild.members.me.voice.setSuppressed(true);","// Inviting another user to speak\nvoiceState.setSuppressed(false);","// Moving another user to the audience, or cancelling their invite to speak\nvoiceState.setSuppressed(true);"],"params":[{"name":"suppressed","description":"Whether or not the user should be suppressed.","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":287,"file":"VoiceState.js","path":"src/structures"}},{"name":"getPreview","description":"Get URL Image of the user's streaming video (NOT STREAMING !!!)","async":true,"returns":{"types":[[["Promise","<"],["string",">"]]],"description":"URL Image of the user's streaming video"},"meta":{"line":309,"file":"VoiceState.js","path":"src/structures"}},{"name":"postPreview","description":"Post Preview Image to the client user's streaming video","params":[{"name":"base64Image","description":"Base64 URI (data:image/jpeg;base64,data)","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":325,"file":"VoiceState.js","path":"src/structures"}}],"meta":{"line":10,"file":"VoiceState.js","path":"src/structures"}},{"name":"WebEmbed","description":"Send Embedlink to Discord\nNeed to change WebEmbed API server (because heroku is no longer free)","construct":{"name":"WebEmbed","params":[{"name":"data","description":"Raw data","optional":true,"default":"{}","type":[[["WebEmbed"]]]}]},"props":[{"name":"shorten","description":"Shorten the link","nullable":true,"type":[[["boolean"]]],"meta":{"line":50,"file":"WebEmbed.js","path":"src/structures"}},{"name":"hidden","description":"Hidden Embed link","nullable":true,"type":[[["boolean"]]],"meta":{"line":56,"file":"WebEmbed.js","path":"src/structures"}},{"name":"baseURL","description":"Using Custom WebEmbed server ?","see":["https://github.com/aiko-chan-ai/WebEmbed"],"nullable":true,"type":[[["string"]]],"meta":{"line":63,"file":"WebEmbed.js","path":"src/structures"}},{"name":"imageType","description":"Type image of this embed","type":[[["thumbnail"]],[["image"]]],"meta":{"line":74,"file":"WebEmbed.js","path":"src/structures"}},{"name":"title","description":"The title of this embed","nullable":true,"type":[[["string"]]],"meta":{"line":79,"file":"WebEmbed.js","path":"src/structures"}},{"name":"description","description":"The description of this embed","nullable":true,"type":[[["string"]]],"meta":{"line":85,"file":"WebEmbed.js","path":"src/structures"}},{"name":"url","description":"The URL of this embed","nullable":true,"type":[[["string"]]],"meta":{"line":91,"file":"WebEmbed.js","path":"src/structures"}},{"name":"color","description":"The color of this embed","nullable":true,"type":[[["number"]]],"meta":{"line":97,"file":"WebEmbed.js","path":"src/structures"}},{"name":"image","description":"The image of this embed, if there is one","nullable":true,"type":[[["WebEmbedImage"]]],"meta":{"line":112,"file":"WebEmbed.js","path":"src/structures"}},{"name":"thumbnail","description":"The thumbnail of this embed (if there is one)","nullable":true,"type":[[["WebEmbedThumbnail"]]],"meta":{"line":125,"file":"WebEmbed.js","path":"src/structures"}},{"name":"video","description":"The video of this embed (if there is one)","readonly":true,"nullable":true,"type":[[["WebEmbedVideo"]]],"meta":{"line":148,"file":"WebEmbed.js","path":"src/structures"}},{"name":"author","description":"The author of this embed (if there is one)","nullable":true,"type":[[["WebEmbedAuthor"]]],"meta":{"line":168,"file":"WebEmbed.js","path":"src/structures"}},{"name":"provider","description":"The provider of this embed (if there is one)","nullable":true,"type":[[["WebEmbedProvider"]]],"meta":{"line":186,"file":"WebEmbed.js","path":"src/structures"}},{"name":"redirect","description":"Redirect URL","type":[[["string"]]],"meta":{"line":197,"file":"WebEmbed.js","path":"src/structures"}}],"methods":[{"name":"_setup","access":"private","params":[{"name":"data","description":"The data for the embed","type":[[["Object"]]]}],"meta":{"line":69,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setAuthor","description":"Sets the author of this embed.","params":[{"name":"options","description":"The options to provide for the author.\nProvide `null` to remove the author data.","type":[[["string"]],[["EmbedAuthorData"]],[["null"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":211,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setProvider","description":"Sets the provider of this embed.","params":[{"name":"options","description":"The options to provide for the provider.\nProvide `null` to remove the provider data.","type":[[["string"]],[["EmbedProviderData"]],[["null"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":236,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setColor","description":"Sets the color of this embed.","params":[{"name":"color","description":"The color of the embed","type":[[["ColorResolvable"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":254,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setDescription","description":"Sets the description of this embed.","params":[{"name":"description","description":"The description (Limit 350 characters)","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":264,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setImage","description":"Sets the image of this embed.","params":[{"name":"url","description":"The URL of the image","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":274,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setThumbnail","description":"Sets the thumbnail of this embed.","params":[{"name":"url","description":"The URL of the image","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":289,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setVideo","description":"Sets the video of this embed.","params":[{"name":"url","description":"The URL of the video","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":304,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setTitle","description":"Sets the title of this embed.","params":[{"name":"title","description":"The title","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":314,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setURL","description":"Sets the URL of this embed.","params":[{"name":"url","description":"The URL","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":324,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setRedirect","description":"Sets the redirect URL of this embed.","params":[{"name":"url","description":"The URL","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":334,"file":"WebEmbed.js","path":"src/structures"}},{"name":"toMessage","description":"Return Message Content + Embed (if hidden, pls check content length because it has 1000+ length)","async":true,"returns":{"types":[[["string"]]],"description":"Message Content"},"meta":{"line":389,"file":"WebEmbed.js","path":"src/structures"}}],"meta":{"line":13,"file":"WebEmbed.js","path":"src/structures"}},{"name":"Webhook","description":"Represents a webhook.","props":[{"name":"client","description":"The client that instantiated the webhook","readonly":true,"type":[[["Client"]]],"meta":{"line":17,"file":"Webhook.js","path":"src/structures"}},{"name":"name","description":"The name of the webhook","type":[[["string"]]],"meta":{"line":33,"file":"Webhook.js","path":"src/structures"}},{"name":"token","description":"The token for the webhook, unavailable for follower webhooks and webhooks owned by another application.","nullable":true,"type":[[["string"]]],"meta":{"line":36,"file":"Webhook.js","path":"src/structures"}},{"name":"avatar","description":"The avatar for the webhook","nullable":true,"type":[[["string"]]],"meta":{"line":48,"file":"Webhook.js","path":"src/structures"}},{"name":"id","description":"The webhook's id","type":[[["Snowflake"]]],"meta":{"line":55,"file":"Webhook.js","path":"src/structures"}},{"name":"type","description":"The type of the webhook","type":[[["WebhookType"]]],"meta":{"line":62,"file":"Webhook.js","path":"src/structures"}},{"name":"guildId","description":"The guild the webhook belongs to","type":[[["Snowflake"]]],"meta":{"line":70,"file":"Webhook.js","path":"src/structures"}},{"name":"channelId","description":"The channel the webhook belongs to","type":[[["Snowflake"]]],"meta":{"line":78,"file":"Webhook.js","path":"src/structures"}},{"name":"owner","description":"The owner of the webhook","nullable":true,"type":[[["User"]],[["APIUser"]]],"meta":{"line":86,"file":"Webhook.js","path":"src/structures"}},{"name":"sourceGuild","description":"The source guild of the webhook","nullable":true,"type":[[["Guild"]],[["APIGuild"]]],"meta":{"line":96,"file":"Webhook.js","path":"src/structures"}},{"name":"sourceChannel","description":"The source channel of the webhook","nullable":true,"type":[[["NewsChannel"]],[["APIChannel"]]],"meta":{"line":106,"file":"Webhook.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the webhook was created at","readonly":true,"type":[[["number"]]],"meta":{"line":394,"file":"Webhook.js","path":"src/structures"}},{"name":"createdAt","description":"The time the webhook was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":403,"file":"Webhook.js","path":"src/structures"}},{"name":"url","description":"The URL of this webhook","readonly":true,"type":[[["string"]]],"meta":{"line":412,"file":"Webhook.js","path":"src/structures"}}],"methods":[{"name":"send","description":"Sends a message with this webhook.","examples":["// Send a basic message\nwebhook.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a basic message in a thread\nwebhook.send({ content: 'hello!', threadId: '836856309672348295' })\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nwebhook.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nwebhook.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg'\n }]\n})\n .then(console.log)\n .catch(console.error);","// Send an embed with a local image inside\nwebhook.send({\n content: 'This is an embed',\n embeds: [{\n thumbnail: {\n url: 'attachment://file.jpg'\n }\n }],\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["WebhookMessageOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":185,"file":"Webhook.js","path":"src/structures"}},{"name":"sendSlackMessage","description":"Sends a raw slack message with this webhook.","see":["{@link https://api.slack.com/messaging/webhooks}"],"examples":["// Send a slack message\nwebhook.sendSlackMessage({\n 'username': 'Wumpus',\n 'attachments': [{\n 'pretext': 'this looks pretty cool',\n 'color': '#F0F',\n 'footer_icon': 'http://snek.s3.amazonaws.com/topSnek.png',\n 'footer': 'Powered by sneks',\n 'ts': Date.now() / 1_000\n }]\n}).catch(console.error);"],"params":[{"name":"body","description":"The raw body to send","type":[[["Object"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":225,"file":"Webhook.js","path":"src/structures"}},{"name":"edit","description":"Edits this webhook.","params":[{"name":"options","description":"Options for editing the webhook","type":[[["WebhookEditData"]]]},{"name":"reason","description":"Reason for editing the webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Webhook",">"]]],"meta":{"line":252,"file":"Webhook.js","path":"src/structures"}},{"name":"fetchMessage","description":"Gets a message that was sent by this webhook.","params":[{"name":"message","description":"The id of the message to fetch","type":[[["Snowflake"]],[["original","'"]]]},{"name":"cacheOrOptions","description":"The options to provide to fetch the message.\nA **deprecated** boolean may be passed instead to specify whether to cache the message.","optional":true,"default":"{}","type":[[["WebhookFetchMessageOptions"]],[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"description":"Returns the raw message data if the webhook was instantiated as a\n{@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned"},"meta":{"line":286,"file":"Webhook.js","path":"src/structures"}},{"name":"editMessage","description":"Edits a message that was sent by this webhook.","params":[{"name":"message","description":"The message to edit","type":[[["MessageResolvable"]],[["original","'"]]]},{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["WebhookEditMessageOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"description":"Returns the raw message data if the webhook was instantiated as a\n{@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned"},"meta":{"line":322,"file":"Webhook.js","path":"src/structures"}},{"name":"delete","description":"Deletes the webhook.","params":[{"name":"reason","description":"Reason for deleting this webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":364,"file":"Webhook.js","path":"src/structures"}},{"name":"deleteMessage","description":"Delete a message that was sent by this webhook.","params":[{"name":"message","description":"The message to delete","type":[[["MessageResolvable"]],[["original","'"]]]},{"name":"threadId","description":"The id of the thread this message belongs to","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":374,"file":"Webhook.js","path":"src/structures"}},{"name":"avatarURL","description":"A link to the webhook's avatar.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":421,"file":"Webhook.js","path":"src/structures"}},{"name":"isChannelFollower","description":"Whether or not this webhook is a channel follower webhook.","returns":[[["boolean"]]],"meta":{"line":430,"file":"Webhook.js","path":"src/structures"}},{"name":"isIncoming","description":"Whether or not this webhook is an incoming webhook.","returns":[[["boolean"]]],"meta":{"line":438,"file":"Webhook.js","path":"src/structures"}}],"meta":{"line":15,"file":"Webhook.js","path":"src/structures"}},{"name":"WelcomeChannel","description":"Represents a channel link in a guild's welcome screen.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild for this welcome channel","type":[[["Guild"]],[["InviteGuild"]]],"meta":{"line":18,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"description","description":"The description of this welcome channel","type":[[["string"]]],"meta":{"line":24,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"_emoji","description":"The raw emoji data","access":"private","type":[[["Object"]]],"meta":{"line":31,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"channelId","description":"The id of this welcome channel","type":[[["Snowflake"]]],"meta":{"line":40,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"channel","description":"The channel of this welcome channel","nullable":true,"type":[[["TextChannel"]],[["NewsChannel"]],[["StoreChannel"]],[["ForumChannel"]]],"meta":{"line":47,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"emoji","description":"The emoji of this welcome channel","type":[[["GuildEmoji"]],[["Emoji"]]],"meta":{"line":55,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"meta":{"line":10,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"WelcomeScreen","description":"Represents a welcome screen.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild for this welcome screen","type":[[["Guild"]]],"meta":{"line":19,"file":"WelcomeScreen.js","path":"src/structures"}},{"name":"description","description":"The description of this welcome screen","nullable":true,"type":[[["string"]]],"meta":{"line":25,"file":"WelcomeScreen.js","path":"src/structures"}},{"name":"welcomeChannels","description":"Collection of welcome channels belonging to this welcome screen","type":[[["Collection","<"],["Snowflake",", "],["WelcomeChannel",">"]]],"meta":{"line":31,"file":"WelcomeScreen.js","path":"src/structures"}},{"name":"enabled","description":"Whether the welcome screen is enabled on the guild or not","type":[[["boolean"]]],"meta":{"line":43,"file":"WelcomeScreen.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"meta":{"line":11,"file":"WelcomeScreen.js","path":"src/structures"}},{"name":"Widget","description":"Represents a Widget.","extends":[[["Base"]]],"props":[{"name":"id","description":"The id of the guild.","type":[[["Snowflake"]]],"meta":{"line":30,"file":"Widget.js","path":"src/structures"}},{"name":"name","description":"The name of the guild.","type":[[["string"]]],"meta":{"line":37,"file":"Widget.js","path":"src/structures"}},{"name":"instantInvite","description":"The invite of the guild.","nullable":true,"type":[[["string"]]],"meta":{"line":45,"file":"Widget.js","path":"src/structures"}},{"name":"channels","description":"The list of channels in the guild.","type":[[["Collection","<"],["Snowflake",", "],["WidgetChannel",">"]]],"meta":{"line":52,"file":"Widget.js","path":"src/structures"}},{"name":"members","description":"The list of members in the guild.\nThese strings are just arbitrary numbers, they aren't Snowflakes.","type":[[["Collection","<"],["string",", "],["WidgetMember",">"]]],"meta":{"line":62,"file":"Widget.js","path":"src/structures"}},{"name":"presenceCount","description":"The number of members online.","type":[[["number"]]],"meta":{"line":72,"file":"Widget.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"fetch","description":"Update the Widget.","async":true,"returns":[[["Promise","<"],["Widget",">"]]],"meta":{"line":80,"file":"Widget.js","path":"src/structures"}}],"meta":{"line":11,"file":"Widget.js","path":"src/structures"}},{"name":"WidgetMember","description":"Represents a WidgetMember.","extends":[[["Base"]]],"props":[{"name":"id","description":"The id of the user. It's an arbitrary number.","type":[[["string"]]],"meta":{"line":23,"file":"WidgetMember.js","path":"src/structures"}},{"name":"username","description":"The username of the member.","type":[[["string"]]],"meta":{"line":29,"file":"WidgetMember.js","path":"src/structures"}},{"name":"discriminator","description":"The discriminator of the member.","type":[[["string"]]],"meta":{"line":35,"file":"WidgetMember.js","path":"src/structures"}},{"name":"avatar","description":"The avatar of the member.","nullable":true,"type":[[["string"]]],"meta":{"line":41,"file":"WidgetMember.js","path":"src/structures"}},{"name":"status","description":"The status of the member.","type":[[["PresenceStatus"]]],"meta":{"line":47,"file":"WidgetMember.js","path":"src/structures"}},{"name":"deaf","description":"If the member is server deafened","nullable":true,"type":[[["boolean"]]],"meta":{"line":53,"file":"WidgetMember.js","path":"src/structures"}},{"name":"mute","description":"If the member is server muted","nullable":true,"type":[[["boolean"]]],"meta":{"line":59,"file":"WidgetMember.js","path":"src/structures"}},{"name":"selfDeaf","description":"If the member is self deafened","nullable":true,"type":[[["boolean"]]],"meta":{"line":65,"file":"WidgetMember.js","path":"src/structures"}},{"name":"selfMute","description":"If the member is self muted","nullable":true,"type":[[["boolean"]]],"meta":{"line":71,"file":"WidgetMember.js","path":"src/structures"}},{"name":"suppress","description":"If the member is suppressed","nullable":true,"type":[[["boolean"]]],"meta":{"line":77,"file":"WidgetMember.js","path":"src/structures"}},{"name":"channelId","description":"The id of the voice channel the member is in, if any","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":83,"file":"WidgetMember.js","path":"src/structures"}},{"name":"avatarURL","description":"The avatar URL of the member.","type":[[["string"]]],"meta":{"line":89,"file":"WidgetMember.js","path":"src/structures"}},{"name":"activity","description":"The activity of the member.","nullable":true,"type":[[["WidgetActivity"]]],"meta":{"line":95,"file":"WidgetMember.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"meta":{"line":9,"file":"WidgetMember.js","path":"src/structures"}},{"name":"ActivityFlags","description":"Data structure that makes it easy to interact with an {@link Activity#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"ActivityFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric activity flags. All available properties:\n* `INSTANCE`\n* `JOIN`\n* `SPECTATE`\n* `JOIN_REQUEST`\n* `SYNC`\n* `PLAY`\n* `PARTY_PRIVACY_FRIENDS`\n* `PARTY_PRIVACY_VOICE_CHANNEL`\n* `EMBEDDED`","see":["{@link https://discord.com/developers/docs/topics/gateway-events#activity-object-activity-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":32,"file":"ActivityFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"ActivityFlags.js","path":"src/util"}},{"name":"ApplicationFlags","description":"Data structure that makes it easy to interact with a {@link ClientApplication#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"ApplicationFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]]],"meta":{"line":18,"file":"ApplicationFlags.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric application flags. All available properties:\n* `EMBEDDED_RELEASED`\n* `MANAGED_EMOJI`\n* `GROUP_DM_CREATE`\n* `RPC_PRIVATE_BETA`\n* `APPLICATION_AUTO_MODERATION_RULE_CREATE_BADGE`\n* `ALLOW_ASSETS`\n* `ALLOW_ACTIVITY_ACTION_SPECTATE`\n* `ALLOW_ACTIVITY_ACTION_JOIN_REQUEST`\n* `RPC_HAS_CONNECTED`\n* `GATEWAY_PRESENCE`\n* `GATEWAY_PRESENCE_LIMITED`\n* `GATEWAY_GUILD_MEMBERS`\n* `GATEWAY_GUILD_MEMBERS_LIMITED`\n* `VERIFICATION_PENDING_GUILD_LIMIT`\n* `EMBEDDED`\n* `GATEWAY_MESSAGE_CONTENT`\n* `GATEWAY_MESSAGE_CONTENT_LIMITED`\n* `EMBEDDED_FIRST_PARTY`\n* `APPLICATION_COMMAND_BADGE`\n* `ACTIVE`\n* `IFRAME_MODAL`","see":["{@link https://discord.com/developers/docs/resources/application#application-object-application-flags}","{@link https://flags.lewistehminerz.dev/}"],"scope":"static","type":[[["Object"]]],"meta":{"line":51,"file":"ApplicationFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"ApplicationFlags.js","path":"src/util"}},{"name":"AttachmentFlags","description":"Data structure that makes it easy to interact with an {@link GuildMember#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"AttachmentFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric guild member flags. All available properties:\n* `IS_REMIX`","see":["{@link https://discord.com/developers/docs/resources/channel#attachment-object-attachment-structure-attachment-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":25,"file":"AttachmentFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"AttachmentFlags.js","path":"src/util"}},{"name":"BitField","description":"Data structure that makes it easy to interact with a bitfield.","construct":{"name":"BitField","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":"this.constructor.defaultBit","type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric bitfield flags.\nDefined in extension classes","scope":"static","abstract":true,"type":[[["Object"]]],"meta":{"line":162,"file":"BitField.js","path":"src/util"}},{"name":"defaultBit","scope":"static","access":"private","type":[[["number"]],[["bigint"]]],"meta":{"line":168,"file":"BitField.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}},{"name":"resolve","description":"Resolves bitfields to their numeric form.","scope":"static","params":[{"name":"bit","description":"bit(s) to resolve","optional":true,"type":[[["BitFieldResolvable"]]]}],"returns":[[["number"]],[["bigint"]]],"meta":{"line":143,"file":"BitField.js","path":"src/util"}}],"meta":{"line":8,"file":"BitField.js","path":"src/util"}},{"name":"ChannelFlags","description":"Data structure that makes it easy to interact with a {@link Channel#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"ChannelFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]]],"meta":{"line":30,"file":"ChannelFlags.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric guild channel flags. All available properties:\n* `PINNED`\n* `REQUIRE_TAG`","see":["{@link https://discord.com/developers/docs/resources/channel#channel-object-channel-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":18,"file":"ChannelFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"ChannelFlags.js","path":"src/util"}},{"name":"DataResolver","description":"The DataResolver identifies different objects and tries to resolve a specific piece of information from them.","access":"private","methods":[{"name":"resolveCode","description":"Resolves the string to a code based on the passed regex.","scope":"static","params":[{"name":"data","description":"The string to resolve","type":[[["string"]]]},{"name":"regex","description":"The RegExp used to extract the code","type":[[["RegExp"]]]}],"returns":[[["string"]]],"meta":{"line":36,"file":"DataResolver.js","path":"src/util"}},{"name":"resolveInviteCode","description":"Resolves InviteResolvable to an invite code.","scope":"static","params":[{"name":"data","description":"The invite resolvable to resolve","type":[[["InviteResolvable"]]]}],"returns":[[["string"]]],"meta":{"line":45,"file":"DataResolver.js","path":"src/util"}},{"name":"resolveGuildTemplateCode","description":"Resolves GuildTemplateResolvable to a template code.","scope":"static","params":[{"name":"data","description":"The template resolvable to resolve","type":[[["GuildTemplateResolvable"]]]}],"returns":[[["string"]]],"meta":{"line":54,"file":"DataResolver.js","path":"src/util"}},{"name":"resolveImage","description":"Resolves a Base64Resolvable, a string, or a BufferResolvable to a Base 64 image.","scope":"static","params":[{"name":"image","description":"The image to be resolved","type":[[["BufferResolvable"]],[["Base64Resolvable"]]]}],"async":true,"returns":[[["Promise",""]]],"meta":{"line":64,"file":"DataResolver.js","path":"src/util"}},{"name":"resolveBase64","description":"Resolves a Base64Resolvable to a Base 64 image.","scope":"static","params":[{"name":"data","description":"The base 64 resolvable you want to resolve","type":[[["Base64Resolvable"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":85,"file":"DataResolver.js","path":"src/util"}},{"name":"resolveFile","description":"Resolves a BufferResolvable to a Buffer or a Stream.","scope":"static","params":[{"name":"resource","description":"The buffer or stream resolvable to resolve","type":[[["BufferResolvable"]],[["Stream"]]]}],"async":true,"returns":[[["Promise","<("],["Buffer","|"],["Stream",")>"]]],"meta":{"line":109,"file":"DataResolver.js","path":"src/util"}},{"name":"resolveFileAsBuffer","description":"Resolves a BufferResolvable to a Buffer.","scope":"static","params":[{"name":"resource","description":"The buffer or stream resolvable to resolve","type":[[["BufferResolvable"]],[["Stream"]]]}],"async":true,"returns":[[["Promise","<"],["Buffer",">"]]],"meta":{"line":135,"file":"DataResolver.js","path":"src/util"}}],"meta":{"line":15,"file":"DataResolver.js","path":"src/util"}},{"name":"Formatters","description":"Contains various Discord-specific functions for formatting messages.","props":[{"name":"TimestampStyles","description":"The message formatting timestamp\n[styles](https://discord.com/developers/docs/reference#message-formatting-timestamp-styles) supported by Discord.","scope":"static","type":[[["Object","<"],["string",", "],["TimestampStylesString",">"]]],"meta":{"line":194,"file":"Formatters.js","path":"src/util"}}],"methods":[{"name":"blockQuote","description":"Formats the content into a block quote. This needs to be at the start of the line for Discord to format it.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":29,"file":"Formatters.js","path":"src/util"}},{"name":"bold","description":"Formats the content into bold text.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":38,"file":"Formatters.js","path":"src/util"}},{"name":"channelMention","description":"Formats a channel id into a channel mention.","scope":"static","params":[{"name":"channelId","description":"The channel id to format.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":47,"file":"Formatters.js","path":"src/util"}},{"name":"chatInputApplicationCommandMention","description":"Formats an application command name, subcommand group name, subcommand name, and ID\ninto an application command mention","scope":"static","params":[{"name":"commandName","description":"The name of the application command","type":[[["string"]]]},{"name":"subcommandGroupOrSubOrId","description":"The subcommand group name, subcommand name, or application command id","type":[[["string"]],[["Snowflake"]]]},{"name":"subcommandNameOrId","description":"The subcommand name or application command id","optional":true,"nullable":true,"type":[[["string"]],[["Snowflake"]]]},{"name":"commandId","description":"The id of the application command","optional":true,"nullable":true,"type":[[["Snowflake"]]]}],"returns":[[["string"]]],"meta":{"line":56,"file":"Formatters.js","path":"src/util"}},{"name":"codeBlock","description":"Wraps the content inside a code block with an optional language.","scope":"static","params":[{"name":"contentOrLanguage","description":"The language to use, content if a second parameter isn't provided.","type":[[["string"]]]},{"name":"content","description":"The content to wrap.","optional":true,"type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":71,"file":"Formatters.js","path":"src/util"}},{"name":"formatEmoji","description":"Formats an emoji id into a fully qualified emoji identifier","scope":"static","params":[{"name":"emojiId","description":"The emoji id to format.","type":[[["string"]]]},{"name":"animated","description":"Whether the emoji is animated or not. Defaults to `false`","optional":true,"type":[[["boolean"]]]}],"returns":[[["string"]]],"meta":{"line":81,"file":"Formatters.js","path":"src/util"}},{"name":"hideLinkEmbed","description":"Wraps the URL into `<>`, which stops it from embedding.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":91,"file":"Formatters.js","path":"src/util"}},{"name":"hyperlink","description":"Formats the content and the URL into a masked URL with an optional title.","scope":"static","params":[{"name":"content","description":"The content to display.","type":[[["string"]]]},{"name":"url","description":"The URL the content links to.","type":[[["string"]]]},{"name":"title","description":"The title shown when hovering on the masked link.","optional":true,"type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":100,"file":"Formatters.js","path":"src/util"}},{"name":"inlineCode","description":"Wraps the content inside \\`backticks\\`, which formats it as inline code.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":111,"file":"Formatters.js","path":"src/util"}},{"name":"italic","description":"Formats the content into italic text.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":120,"file":"Formatters.js","path":"src/util"}},{"name":"quote","description":"Formats the content into a quote. This needs to be at the start of the line for Discord to format it.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":129,"file":"Formatters.js","path":"src/util"}},{"name":"roleMention","description":"Formats a role id into a role mention.","scope":"static","params":[{"name":"roleId","description":"The role id to format.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":138,"file":"Formatters.js","path":"src/util"}},{"name":"spoiler","description":"Formats the content into spoiler text.","scope":"static","params":[{"name":"content","description":"The content to spoiler.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":147,"file":"Formatters.js","path":"src/util"}},{"name":"strikethrough","description":"Formats the content into strike-through text.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":156,"file":"Formatters.js","path":"src/util"}},{"name":"time","description":"Formats a date into a short date-time string.","scope":"static","params":[{"name":"date","description":"The date to format.","optional":true,"type":[[["number"]],[["Date"]]]},{"name":"style","description":"The style to use.","optional":true,"type":[[["TimestampStylesString"]]]}],"returns":[[["string"]]],"meta":{"line":165,"file":"Formatters.js","path":"src/util"}},{"name":"underscore","description":"Formats the content into underscored text.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":196,"file":"Formatters.js","path":"src/util"}},{"name":"userMention","description":"Formats a user id into a user mention.","scope":"static","params":[{"name":"userId","description":"The user id to format.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":205,"file":"Formatters.js","path":"src/util"}}],"meta":{"line":27,"file":"Formatters.js","path":"src/util"}},{"name":"GuildMemberFlags","description":"Data structure that makes it easy to interact with an {@link GuildMember#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"GuildMemberFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric guild member flags. All available properties:\n* `DID_REJOIN`\n* `COMPLETED_ONBOARDING`\n* `BYPASSES_VERIFICATION`\n* `STARTED_ONBOARDING`","see":["{@link https://discord.com/developers/docs/resources/guild#guild-member-object-guild-member-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":27,"file":"GuildMemberFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"GuildMemberFlags.js","path":"src/util"}},{"name":"Intents","description":"Data structure that makes it easy to calculate intents.","extends":[[["BitField"]]],"construct":{"name":"Intents","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["IntentsResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric WebSocket intents. All available properties:\n* `GUILDS`\n* `GUILD_MEMBERS`\n* `GUILD_BANS`\n* `GUILD_EMOJIS_AND_STICKERS`\n* `GUILD_INTEGRATIONS`\n* `GUILD_WEBHOOKS`\n* `GUILD_INVITES`\n* `GUILD_VOICE_STATES`\n* `GUILD_PRESENCES`\n* `GUILD_MESSAGES`\n* `GUILD_MESSAGE_REACTIONS`\n* `GUILD_MESSAGE_TYPING`\n* `DIRECT_MESSAGES`\n* `DIRECT_MESSAGE_REACTIONS`\n* `DIRECT_MESSAGE_TYPING`\n* `MESSAGE_CONTENT`\n* `GUILD_SCHEDULED_EVENTS`\n* `AUTO_MODERATION_CONFIGURATION`\n* `AUTO_MODERATION_EXECUTION`","see":["{@link https://discord.com/developers/docs/topics/gateway#list-of-intents}"],"scope":"static","type":[[["Object"]]],"meta":{"line":50,"file":"Intents.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":8,"file":"Intents.js","path":"src/util"}},{"name":"LimitedCollection","description":"A Collection which holds a max amount of entries and sweeps periodically.","extends":[[["Collection"]]],"construct":{"name":"LimitedCollection","params":[{"name":"options","description":"Options for constructing the Collection.","optional":true,"default":"{}","type":[[["LimitedCollectionOptions"]]]},{"name":"iterable","description":"Optional entries passed to the Map constructor.","optional":true,"default":null,"type":[[["Iterable"]]]}]},"props":[{"name":"maxSize","description":"The max size of the Collection.","type":[[["number"]]],"meta":{"line":63,"file":"LimitedCollection.js","path":"src/util"}},{"name":"keepOverLimit","description":"A function called to check if an entry should be kept when the Collection is at max size.","nullable":true,"type":[[["function"]]],"meta":{"line":69,"file":"LimitedCollection.js","path":"src/util"}},{"name":"sweepFilter","description":"A function called every sweep interval that returns a function passed to `sweep`.","nullable":true,"deprecated":"in favor of {@link Client#sweepers}","type":[[["SweepFilter"]]],"meta":{"line":76,"file":"LimitedCollection.js","path":"src/util"}},{"name":"interval","description":"The id of the interval being used to sweep.","nullable":true,"deprecated":"in favor of {@link Client#sweepers}","type":[[["Timeout"]]],"meta":{"line":83,"file":"LimitedCollection.js","path":"src/util"}}],"methods":[{"name":"filterByLifetime","description":"Create a sweepFilter function that uses a lifetime to determine sweepability.","scope":"static","deprecated":"Use {@link Sweepers.filterByLifetime} instead","params":[{"name":"options","description":"The options used to generate the filter function","optional":true,"default":"{}","type":[[["LifetimeFilterOptions"]]]}],"returns":[[["SweepFilter"]]],"meta":{"line":114,"file":"LimitedCollection.js","path":"src/util"}}],"meta":{"line":37,"file":"LimitedCollection.js","path":"src/util"}},{"name":"MessageFlags","description":"Data structure that makes it easy to interact with a {@link Message#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"MessageFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]]],"meta":{"line":18,"file":"MessageFlags.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric message flags. All available properties:\n* `CROSSPOSTED`\n* `IS_CROSSPOST`\n* `SUPPRESS_EMBEDS`\n* `SOURCE_MESSAGE_DELETED`\n* `URGENT`\n* `HAS_THREAD`\n* `EPHEMERAL`\n* `LOADING`\n* `FAILED_TO_MENTION_SOME_ROLES_IN_THREAD`\n* `SUPPRESS_NOTIFICATIONS`\n* `IS_VOICE_MESSAGE`","see":["{@link https://discord.com/developers/docs/resources/channel#message-object-message-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":40,"file":"MessageFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"MessageFlags.js","path":"src/util"}},{"name":"Options","description":"Contains various utilities for client options.","props":[{"name":"defaultMakeCacheSettings","description":"The default settings passed to {@link ClientOptions.makeCache}.\nThe caches that this changes are:\n* `MessageManager` - Limit to 200 messages\n* `ChannelManager` - Sweep archived threads\n* `GuildChannelManager` - Sweep archived threads\n* `ThreadManager` - Sweep archived threads\nIf you want to keep default behavior and add on top of it you can use this object and add on to it, e.g.\n`makeCache: Options.cacheWithLimits({ ...Options.defaultMakeCacheSettings, ReactionManager: 0 })`","scope":"static","type":[[["Object","<"],["string",", ("],["LimitedCollectionOptions","|"],["number",")>"]]],"meta":{"line":328,"file":"Options.js","path":"src/util"}},{"name":"defaultSweeperSettings","description":"The default settings passed to {@link ClientOptions.sweepers}.\nThe sweepers that this changes are:\n* `threads` - Sweep archived threads every hour, removing those archived more than 4 hours ago\nIf you want to keep default behavior and add on top of it you can use this object and add on to it, e.g.\n`sweepers: { ...Options.defaultSweeperSettings, messages: { interval: 300, lifetime: 600 } }`","scope":"static","type":[[["SweeperOptions"]]],"meta":{"line":357,"file":"Options.js","path":"src/util"}}],"methods":[{"name":"createDefault","description":"The default client options.","scope":"static","returns":[[["ClientOptions"]]],"meta":{"line":159,"file":"Options.js","path":"src/util"}},{"name":"cacheWithLimits","description":"Create a cache factory using predefined settings to sweep or limit.","scope":"static","examples":["// Store up to 200 messages per channel and discard archived threads if they were archived more than 4 hours ago.\n// Note archived threads will remain in the guild and client caches with these settings\nOptions.cacheWithLimits({\n MessageManager: 200,\n ThreadManager: {\n sweepInterval: 3600,\n sweepFilter: LimitedCollection.filterByLifetime({\n getComparisonTimestamp: e => e.archiveTimestamp,\n excludeFromSweep: e => !e.archived,\n }),\n },\n });","// Sweep messages every 5 minutes, removing messages that have not been edited or created in the last 30 minutes\nOptions.cacheWithLimits({\n // Keep default thread sweeping behavior\n ...Options.defaultMakeCacheSettings,\n // Override MessageManager\n MessageManager: {\n sweepInterval: 300,\n sweepFilter: LimitedCollection.filterByLifetime({\n lifetime: 1800,\n getComparisonTimestamp: e => e.editedTimestamp ?? e.createdTimestamp,\n })\n }\n});"],"params":[{"name":"settings","description":"Settings passed to the relevant constructor.\nIf no setting is provided for a manager, it uses Collection.\nIf a number is provided for a manager, it uses that number as the max size for a LimitedCollection.\nIf LimitedCollectionOptions are provided for a manager, it uses those settings to form a LimitedCollection.","optional":true,"default":"{}","type":[[["Object","<"],["string",", ("],["LimitedCollectionOptions","|"],["number",")>"]]]}],"returns":[[["CacheFactory"]]],"meta":{"line":277,"file":"Options.js","path":"src/util"}},{"name":"cacheEverything","description":"Create a cache factory that always caches everything.","scope":"static","returns":[[["CacheFactory"]]],"meta":{"line":312,"file":"Options.js","path":"src/util"}}],"meta":{"line":154,"file":"Options.js","path":"src/util"}},{"name":"Permissions","description":"Data structure that makes it easy to interact with a permission bitfield. All {@link GuildMember}s have a set of\npermissions in their guild, and each channel in the guild may also have {@link PermissionOverwrites} for the member\nthat override their default permissions.","extends":[[["BitField"]]],"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["bigint"]]],"meta":{"line":12,"file":"Permissions.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric permission flags. All available properties:\n* `CREATE_INSTANT_INVITE` (create invitations to the guild)\n* `KICK_MEMBERS`\n* `BAN_MEMBERS`\n* `ADMINISTRATOR` (implicitly has *all* permissions, and bypasses all channel overwrites)\n* `MANAGE_CHANNELS` (edit and reorder channels)\n* `MANAGE_GUILD` (edit the guild information, region, etc.)\n* `ADD_REACTIONS` (add new reactions to messages)\n* `VIEW_AUDIT_LOG`\n* `PRIORITY_SPEAKER`\n* `STREAM`\n* `VIEW_CHANNEL`\n* `SEND_MESSAGES`\n* `SEND_TTS_MESSAGES`\n* `MANAGE_MESSAGES` (delete messages and reactions)\n* `EMBED_LINKS` (links posted will have a preview embedded)\n* `ATTACH_FILES`\n* `READ_MESSAGE_HISTORY` (view messages that were posted prior to opening Discord)\n* `MENTION_EVERYONE`\n* `USE_EXTERNAL_EMOJIS` (use emojis from different guilds)\n* `VIEW_GUILD_INSIGHTS`\n* `CONNECT` (connect to a voice channel)\n* `SPEAK` (speak in a voice channel)\n* `MUTE_MEMBERS` (mute members across all voice channels)\n* `DEAFEN_MEMBERS` (deafen members across all voice channels)\n* `MOVE_MEMBERS` (move members between voice channels)\n* `USE_VAD` (use voice activity detection)\n* `CHANGE_NICKNAME`\n* `MANAGE_NICKNAMES` (change other members' nicknames)\n* `MANAGE_ROLES`\n* `MANAGE_WEBHOOKS`\n* `MANAGE_EMOJIS_AND_STICKERS`\n* `USE_APPLICATION_COMMANDS`\n* `REQUEST_TO_SPEAK`\n* `MANAGE_EVENTS`\n* `MANAGE_THREADS`\n* `USE_PUBLIC_THREADS` (deprecated)\n* `CREATE_PUBLIC_THREADS`\n* `USE_PRIVATE_THREADS` (deprecated)\n* `CREATE_PRIVATE_THREADS`\n* `USE_EXTERNAL_STICKERS` (use stickers from different guilds)\n* `SEND_MESSAGES_IN_THREADS`\n* `START_EMBEDDED_ACTIVITIES`\n* `MODERATE_MEMBERS`\n* `VIEW_CREATOR_MONETIZATION_ANALYTICS`\n* `USE_SOUNDBOARD`","see":["{@link https://discord.com/developers/docs/topics/permissions#permissions-bitwise-permission-flags}"],"scope":"static","type":[[["Object","<"],["string",", "],["bigint",">"]]],"meta":{"line":116,"file":"Permissions.js","path":"src/util"}},{"name":"ALL","description":"Bitfield representing every permission combined","scope":"static","type":[[["bigint"]]],"meta":{"line":170,"file":"Permissions.js","path":"src/util"}},{"name":"DEFAULT","description":"Bitfield representing the default permissions for users","scope":"static","type":[[["bigint"]]],"meta":{"line":176,"file":"Permissions.js","path":"src/util"}},{"name":"STAGE_MODERATOR","description":"Bitfield representing the permissions required for moderators of stage channels","scope":"static","type":[[["bigint"]]],"meta":{"line":182,"file":"Permissions.js","path":"src/util"}}],"methods":[{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"checkAdmin","description":"Whether to allow the administrator permission to override","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":33,"file":"Permissions.js","path":"src/util"}},{"name":"any","description":"Checks whether the bitfield has a permission, or any of multiple permissions.","params":[{"name":"permission","description":"Permission(s) to check for","type":[[["PermissionResolvable"]]]},{"name":"checkAdmin","description":"Whether to allow the administrator permission to override","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"Permissions.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a permission, or multiple permissions.","params":[{"name":"permission","description":"Permission(s) to check for","type":[[["PermissionResolvable"]]]},{"name":"checkAdmin","description":"Whether to allow the administrator permission to override","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["boolean"]]],"meta":{"line":53,"file":"Permissions.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the permissions available.","returns":[[["Array","<"],["string",">"]]],"meta":{"line":61,"file":"Permissions.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}}],"meta":{"line":11,"file":"Permissions.js","path":"src/util"}},{"name":"PremiumUsageFlags","description":"Data structure that makes it easy to interact with an {@link PremiumUsageFlags#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"PremiumUsageFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric the Discord premium usage flags. All available properties:\n* `PREMIUM_DISCRIMINATOR`\n* `ANIMATED_AVATAR`\n* `PROFILE_BANNER`","scope":"static","type":[[["Object"]]],"meta":{"line":25,"file":"PremiumUsageFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"PremiumUsageFlags.js","path":"src/util"}},{"name":"PurchasedFlags","description":"Data structure that makes it easy to interact with an {@link PurchasedFlags#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"PurchasedFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric the Discord purchased flags. All available properties:\n* `NITRO_CLASSIC`\n* `NITRO`\n* `GUILD_BOOST`","scope":"static","type":[[["Object"]]],"meta":{"line":25,"file":"PurchasedFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"PurchasedFlags.js","path":"src/util"}},{"name":"DiscordAuthWebsocket","description":"Discord Auth QR (Discord.RemoteAuth will be removed in the future, v13.9.0 release)","extends":[[["EventEmitter"]]],"abstract":true,"construct":{"name":"DiscordAuthWebsocket","description":"Creates a new DiscordAuthWebsocket instance.","params":[{"name":"options","description":"Options","nullable":true,"type":[[["DiscordAuthWebsocketOptions"]]]}]},"props":[{"name":"ws","description":"WebSocket","nullable":true,"type":[[["WebSocket"]]],"meta":{"line":74,"file":"RemoteAuth.js","path":"src/util"}},{"name":"heartbeatInterval","description":"Heartbeat Interval","nullable":true,"type":[[["number"]]],"meta":{"line":79,"file":"RemoteAuth.js","path":"src/util"}},{"name":"user","description":"User (Scan QR Code)","nullable":true,"type":[[["Object"]]],"meta":{"line":86,"file":"RemoteAuth.js","path":"src/util"}},{"name":"token","description":"Temporary Token (Scan QR Code)","nullable":true,"type":[[["string"]]],"meta":{"line":91,"file":"RemoteAuth.js","path":"src/util"}},{"name":"realToken","description":"Real Token (Login)","nullable":true,"type":[[["string"]]],"meta":{"line":96,"file":"RemoteAuth.js","path":"src/util"}},{"name":"fingerprint","description":"Fingerprint (QR Code)","nullable":true,"type":[[["string"]]],"meta":{"line":101,"file":"RemoteAuth.js","path":"src/util"}},{"name":"captchaCache","description":"Captcha Cache","nullable":true,"type":[[["Captcha"]]],"meta":{"line":132,"file":"RemoteAuth.js","path":"src/util"}},{"name":"exprireTime","description":"Get expire time","readonly":true,"type":[[["string"]]],"meta":{"line":143,"file":"RemoteAuth.js","path":"src/util"}},{"name":"options","description":"Options","nullable":true,"type":[[["DiscordAuthWebsocketOptions"]]],"meta":{"line":151,"file":"RemoteAuth.js","path":"src/util"}}],"methods":[{"name":"captchaSolver","description":"Captcha Handler","params":[{"name":"data","description":"hcaptcha data","type":[[["Captcha"]]]}],"returns":{"types":[[["Promise","<"],["string",">"]]],"description":"Captcha token"},"meta":{"line":110,"file":"RemoteAuth.js","path":"src/util"}},{"name":"connect","description":"Connect to DiscordAuthWebsocket.","params":[{"name":"client","description":"Using only for auto login.","nullable":true,"type":[[["Client"]]]}],"returns":[[["undefined"]]],"meta":{"line":387,"file":"RemoteAuth.js","path":"src/util"}},{"name":"destroy","description":"Disconnect from DiscordAuthWebsocket.","returns":[[["undefined"]]],"meta":{"line":395,"file":"RemoteAuth.js","path":"src/util"}},{"name":"generateQR","description":"Generate QR code for user to scan (Terminal)","returns":[[["undefined"]]],"meta":{"line":410,"file":"RemoteAuth.js","path":"src/util"}}],"events":[{"name":"cancel","description":"Emitted whenever a user cancels the login process.","params":[{"name":"user","description":"User (Raw)","type":[[["object"]]]}],"meta":{"line":222,"file":"RemoteAuth.js","path":"src/util"}},{"name":"success","description":"Emitted whenever a token is created. (Fake token)","params":[{"name":"user","description":"Discord User","type":[[["object"]]]},{"name":"token","description":"Discord Token (Fake)","type":[[["string"]]]}],"meta":{"line":233,"file":"RemoteAuth.js","path":"src/util"}},{"name":"pending","description":"Emitted whenever a user is scan QR Code.","params":[{"name":"user","description":"Discord User Raw","type":[[["object"]]]}],"meta":{"line":354,"file":"RemoteAuth.js","path":"src/util"}},{"name":"ready","description":"Emitted whenever a url is created.","params":[{"name":"fingerprint","description":"Fingerprint","type":[[["string"]]]},{"name":"url","description":"DiscordAuthWebsocket","type":[[["string"]]]}],"meta":{"line":366,"file":"RemoteAuth.js","path":"src/util"}},{"name":"closed","description":"Emitted whenever a connection is closed.","params":[{"name":"loginState","description":"Login state","type":[[["boolean"]]]}],"meta":{"line":398,"file":"RemoteAuth.js","path":"src/util"}},{"name":"finish","description":"Emitted whenever a real token is found.","params":[{"name":"user","description":"User","type":[[["object"]]]},{"name":"token","description":"Real token","type":[[["string"]]]}],"meta":{"line":474,"file":"RemoteAuth.js","path":"src/util"}}],"meta":{"line":63,"file":"RemoteAuth.js","path":"src/util"}},{"name":"RoleFlags","description":"Data structure that makes it easy to interact with an {@link GuildMember#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"RoleFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric guild member flags. All available properties:\n* `IN_PROMPT`","see":["{@link https://discord.com/developers/docs/topics/permissions#role-object-role-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":24,"file":"RoleFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"RoleFlags.js","path":"src/util"}},{"name":"SnowflakeUtil","description":"A container for useful snowflake-related methods.","props":[{"name":"EPOCH","description":"Discord's epoch value (2015-01-01T00:00:00.000Z).","scope":"static","readonly":true,"type":[[["number"]]],"meta":{"line":87,"file":"SnowflakeUtil.js","path":"src/util"}}],"methods":[{"name":"generate","description":"Generates a Discord snowflake.\nThis hardcodes the worker's id as 1 and the process's id as 0.","scope":"static","params":[{"name":"timestamp","description":"Timestamp or date of the snowflake to generate","optional":true,"default":"Date.now()","type":[[["number"]],[["Date"]]]}],"returns":{"types":[[["Snowflake"]]],"description":"The generated snowflake"},"meta":{"line":30,"file":"SnowflakeUtil.js","path":"src/util"}},{"name":"deconstruct","description":"Deconstructs a Discord snowflake.","scope":"static","params":[{"name":"snowflake","description":"Snowflake to deconstruct","type":[[["Snowflake"]]]}],"returns":[[["DeconstructedSnowflake"]]],"meta":{"line":59,"file":"SnowflakeUtil.js","path":"src/util"}},{"name":"timestampFrom","description":"Retrieves the timestamp field's value from a Discord snowflake.","scope":"static","params":[{"name":"snowflake","description":"Snowflake to get the timestamp value from","type":[[["Snowflake"]]]}],"returns":[[["number"]]],"meta":{"line":78,"file":"SnowflakeUtil.js","path":"src/util"}}],"meta":{"line":10,"file":"SnowflakeUtil.js","path":"src/util"}},{"name":"Sweepers","description":"A container for all cache sweeping intervals and their associated sweep methods.","props":[{"name":"options","description":"The options the sweepers were instantiated with","type":[[["SweeperOptions"]]],"meta":{"line":30,"file":"Sweepers.js","path":"src/util"}},{"name":"intervals","description":"A record of interval timeout that is used to sweep the indicated items, or null if not being swept","type":[[["Object","<"],["SweeperKey",", ?"],["Timeout",">"]]],"meta":{"line":36,"file":"Sweepers.js","path":"src/util"}}],"methods":[{"name":"sweepApplicationCommands","description":"Sweeps all guild and global application commands and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which commands will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of commands that were removed from the caches"},"meta":{"line":68,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepAutoModerationRules","description":"Sweeps all auto moderation rules and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine\nwhich auto moderation rules will be removed from the caches","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of auto moderation rules that were removed from the caches"},"meta":{"line":86,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepBans","description":"Sweeps all guild bans and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which bans will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of bans that were removed from the caches"},"meta":{"line":95,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepEmojis","description":"Sweeps all guild emojis and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which emojis will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of emojis that were removed from the caches"},"meta":{"line":104,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepInvites","description":"Sweeps all guild invites and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which invites will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of invites that were removed from the caches"},"meta":{"line":113,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepGuildMembers","description":"Sweeps all guild members and removes the ones which are indicated by the filter.\nIt is highly recommended to keep the client guild member cached","params":[{"name":"filter","description":"The function used to determine which guild members will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of guild members that were removed from the caches"},"meta":{"line":123,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepMessages","description":"Sweeps all text-based channels' messages and removes the ones which are indicated by the filter.","examples":["// Remove all messages older than 1800 seconds from the messages cache\nconst amount = sweepers.sweepMessages(\n Sweepers.filterByLifetime({\n lifetime: 1800,\n getComparisonTimestamp: m => m.editedTimestamp ?? m.createdTimestamp,\n })(),\n);\nconsole.log(`Successfully removed ${amount} messages from the cache.`);"],"params":[{"name":"filter","description":"The function used to determine which messages will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of messages that were removed from the caches"},"meta":{"line":141,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepPresences","description":"Sweeps all presences and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which presences will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of presences that were removed from the caches"},"meta":{"line":163,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepReactions","description":"Sweeps all message reactions and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which reactions will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of reactions that were removed from the caches"},"meta":{"line":172,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepStageInstances","description":"Sweeps all guild stage instances and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which stage instances will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of stage instances that were removed from the caches"},"meta":{"line":201,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepStickers","description":"Sweeps all guild stickers and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which stickers will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of stickers that were removed from the caches"},"meta":{"line":210,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepThreadMembers","description":"Sweeps all thread members and removes the ones which are indicated by the filter.\nIt is highly recommended to keep the client thread member cached","params":[{"name":"filter","description":"The function used to determine which thread members will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of thread members that were removed from the caches"},"meta":{"line":220,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepThreads","description":"Sweeps all threads and removes the ones which are indicated by the filter.","examples":["// Remove all threads archived greater than 1 day ago from all the channel caches\nconst amount = sweepers.sweepThreads(\n Sweepers.filterByLifetime({\n getComparisonTimestamp: t => t.archivedTimestamp,\n excludeFromSweep: t => !t.archived,\n })(),\n);\nconsole.log(`Successfully removed ${amount} threads from the cache.`);"],"params":[{"name":"filter","description":"The function used to determine which threads will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"filter Amount of threads that were removed from the caches"},"meta":{"line":250,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepUsers","description":"Sweeps all users and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which users will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of users that were removed from the caches"},"meta":{"line":272,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepVoiceStates","description":"Sweeps all guild voice states and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which voice states will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of voice states that were removed from the caches"},"meta":{"line":289,"file":"Sweepers.js","path":"src/util"}},{"name":"destroy","description":"Cancels all sweeping intervals","returns":[[["void"]]],"meta":{"line":297,"file":"Sweepers.js","path":"src/util"}},{"name":"_sweepGuildDirectProp","description":"Sweep a direct sub property of all guilds","access":"private","params":[{"name":"key","description":"The name of the property","type":[[["string"]]]},{"name":"filter","description":"Filter function passed to sweep","type":[[["function"]]]},{"name":"eventOptions","description":"Options for the Client event emitted here","optional":true,"default":"{}","type":[[["SweepEventOptions"]]]}],"returns":{"types":[[["Object"]]],"description":"Object containing the number of guilds swept and the number of items swept"},"meta":{"line":401,"file":"Sweepers.js","path":"src/util"}},{"name":"_validateProperties","description":"Validates a set of properties","access":"private","params":[{"name":"key","description":"Key of the options object to check","type":[[["string"]]]}],"meta":{"line":428,"file":"Sweepers.js","path":"src/util"}},{"name":"_initInterval","description":"Initialize an interval for sweeping","access":"private","params":[{"name":"intervalKey","description":"The name of the property that stores the interval for this sweeper","type":[[["string"]]]},{"name":"sweepKey","description":"The name of the function that sweeps the desired caches","type":[[["string"]]]},{"name":"opts","description":"Validated options for a sweep","type":[[["Object"]]]}],"meta":{"line":455,"file":"Sweepers.js","path":"src/util"}},{"name":"filterByLifetime","description":"Create a sweepFilter function that uses a lifetime to determine sweepability.","scope":"static","params":[{"name":"options","description":"The options used to generate the filter function","optional":true,"default":"{}","type":[[["LifetimeFilterOptions"]]]}],"returns":[[["GlobalSweepFilter"]]],"meta":{"line":319,"file":"Sweepers.js","path":"src/util"}},{"name":"archivedThreadSweepFilter","description":"Creates a sweep filter that sweeps archived threads","scope":"static","params":[{"name":"lifetime","description":"How long a thread has to be archived to be valid for sweeping","optional":true,"default":14400,"type":[[["number"]]]}],"returns":[[["GlobalSweepFilter"]]],"meta":{"line":353,"file":"Sweepers.js","path":"src/util"}},{"name":"expiredInviteSweepFilter","description":"Creates a sweep filter that sweeps expired invites","scope":"static","params":[{"name":"lifetime","description":"How long ago an invite has to have expired to be valid for sweeping","optional":true,"default":14400,"type":[[["number"]]]}],"returns":[[["GlobalSweepFilter"]]],"meta":{"line":366,"file":"Sweepers.js","path":"src/util"}},{"name":"outdatedMessageSweepFilter","description":"Creates a sweep filter that sweeps outdated messages (edits taken into account)","scope":"static","params":[{"name":"lifetime","description":"How long ago a message has to have been sent or edited to be valid for sweeping","optional":true,"default":3600,"type":[[["number"]]]}],"returns":[[["GlobalSweepFilter"]]],"meta":{"line":378,"file":"Sweepers.js","path":"src/util"}}],"meta":{"line":17,"file":"Sweepers.js","path":"src/util"}},{"name":"SystemChannelFlags","description":"Data structure that makes it easy to interact with a {@link Guild#systemChannelFlags} bitfield.\nNote that all event message types are enabled by default,\nand by setting their corresponding flags you are disabling them","extends":[[["BitField"]]],"construct":{"name":"SystemChannelFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["SystemChannelFlagsResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]]],"meta":{"line":20,"file":"SystemChannelFlags.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric system channel flags. All available properties:\n* `SUPPRESS_JOIN_NOTIFICATIONS` (Suppress member join notifications)\n* `SUPPRESS_PREMIUM_SUBSCRIPTIONS` (Suppress server boost notifications)\n* `SUPPRESS_GUILD_REMINDER_NOTIFICATIONS` (Suppress server setup tips)\n* `SUPPRESS_JOIN_NOTIFICATION_REPLIES` (Hide member join sticker reply buttons)\n* `SUPPRESS_ROLE_SUBSCRIPTION_PURCHASE_NOTIFICATIONS` (Suppress role subscription purchase and renewal notifications)\n* `SUPPRESS_ROLE_SUBSCRIPTION_PURCHASE_NOTIFICATION_REPLIES` (HHide role subscription sticker reply buttons)","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-system-channel-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":46,"file":"SystemChannelFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":11,"file":"SystemChannelFlags.js","path":"src/util"}},{"name":"ThreadMemberFlags","description":"Data structure that makes it easy to interact with a {@link ThreadMember#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"ThreadMemberFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]]],"meta":{"line":18,"file":"ThreadMemberFlags.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric thread member flags. There are currently no bitflags relevant to bots for this.","scope":"static","type":[[["Object","<"],["string",", "],["number",">"]]],"meta":{"line":28,"file":"ThreadMemberFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"ThreadMemberFlags.js","path":"src/util"}},{"name":"UserFlags","description":"Data structure that makes it easy to interact with a {@link User#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"UserFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]]],"meta":{"line":17,"file":"UserFlags.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric user flags. All available properties:\n* `DISCORD_EMPLOYEE`\n* `PARTNERED_SERVER_OWNER`\n* `HYPESQUAD_EVENTS`\n* `BUGHUNTER_LEVEL_1`\n* `MFA_SMS`\n* `PREMIUM_PROMO_DISMISSED`\n* `HOUSE_BRAVERY`\n* `HOUSE_BRILLIANCE`\n* `HOUSE_BALANCE`\n* `EARLY_SUPPORTER`\n* `TEAM_USER`\n* `INTERNAL_APPLICATION`\n* `SYSTEM`\n* `HAS_UNREAD_URGENT_MESSAGES`\n* `BUGHUNTER_LEVEL_2`\n* `UNDERAGE_DELETED`\n* `VERIFIED_BOT`\n* `EARLY_VERIFIED_BOT_DEVELOPER`\n* `DISCORD_CERTIFIED_MODERATOR`\n* `BOT_HTTP_INTERACTIONS`\n* `SPAMMER`\n* `DISABLE_PREMIUM`\n* `ACTIVE_DEVELOPER`\n* `HIGH_GLOBAL_RATE_LIMIT`\n* `DELETED`\n* `DISABLED_SUSPICIOUS_ACTIVITY`\n* `SELF_DELETED`\n* `PREMIUM_DISCRIMINATOR`\n* `USED_DESKTOP_CLIENT`\n* `USED_WEB_CLIENT`\n* `USED_MOBILE_CLIENT`\n* `DISABLED`\n* `VERIFIED_EMAIL`\n* `QUARANTINED`\n* `COLLABORATOR`\n* `RESTRICTED_COLLABORATOR`","see":["{@link https://discord.com/developers/docs/resources/user#user-object-user-flags}","{@link https://github.com/LewisTehMinerz/discord-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":65,"file":"UserFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":8,"file":"UserFlags.js","path":"src/util"}},{"name":"Util","description":"Contains various general-purpose utility methods.","methods":[{"name":"flatten","description":"Flatten an object. Any properties that are collections will get converted to an array of keys.","scope":"static","params":[{"name":"obj","description":"The object to flatten.","type":[[["Object"]]]},{"name":"props","description":"Specific properties to include/exclude.","optional":true,"variable":true,"type":[[["Object","<"],["string",", ("],["boolean","|"],["string",")>"]]]}],"returns":[[["Object"]]],"meta":{"line":29,"file":"Util.js","path":"src/util"}},{"name":"splitMessage","description":"Splits a string into multiple chunks at a designated character that do not exceed a specific length.","scope":"static","deprecated":"This will be removed in the next major version.","params":[{"name":"text","description":"Content to split","type":[[["string"]]]},{"name":"options","description":"Options controlling the behavior of the split","optional":true,"type":[[["SplitOptions"]]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":85,"file":"Util.js","path":"src/util"}},{"name":"escapeMarkdown","description":"Escapes any Discord-flavour markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]},{"name":"options","description":"Options for escaping the markdown","optional":true,"default":"{}","type":[[["EscapeMarkdownOptions"]]]}],"returns":[[["string"]]],"meta":{"line":147,"file":"Util.js","path":"src/util"}},{"name":"escapeCodeBlock","description":"Escapes code block markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":228,"file":"Util.js","path":"src/util"}},{"name":"escapeInlineCode","description":"Escapes inline code markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":236,"file":"Util.js","path":"src/util"}},{"name":"escapeItalic","description":"Escapes italic markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":244,"file":"Util.js","path":"src/util"}},{"name":"escapeBold","description":"Escapes bold markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":261,"file":"Util.js","path":"src/util"}},{"name":"escapeUnderline","description":"Escapes underline markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":273,"file":"Util.js","path":"src/util"}},{"name":"escapeStrikethrough","description":"Escapes strikethrough markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":285,"file":"Util.js","path":"src/util"}},{"name":"escapeSpoiler","description":"Escapes spoiler markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":293,"file":"Util.js","path":"src/util"}},{"name":"escapeEscape","description":"Escapes escape characters in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":301,"file":"Util.js","path":"src/util"}},{"name":"escapeHeading","description":"Escapes heading characters in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":309,"file":"Util.js","path":"src/util"}},{"name":"escapeBulletedList","description":"Escapes bulleted list characters in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":317,"file":"Util.js","path":"src/util"}},{"name":"escapeNumberedList","description":"Escapes numbered list characters in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":325,"file":"Util.js","path":"src/util"}},{"name":"escapeMaskedLink","description":"Escapes masked link characters in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":333,"file":"Util.js","path":"src/util"}},{"name":"parseEmoji","description":"Parses emoji info out of a string. The string must be one of:\n* A UTF-8 emoji (no id)\n* A URL-encoded UTF-8 emoji (no id)\n* A Discord custom emoji (`<:name:id>` or ``)","scope":"static","access":"private","params":[{"name":"text","description":"Emoji string to parse","type":[[["string"]]]}],"returns":{"types":[[["APIEmoji"]]],"description":"Object with `animated`, `name`, and `id` properties"},"meta":{"line":346,"file":"Util.js","path":"src/util"}},{"name":"resolvePartialEmoji","description":"Resolves a partial emoji object from an {@link EmojiIdentifierResolvable}, without checking a Client.","scope":"static","access":"private","params":[{"name":"emoji","description":"Emoji identifier to resolve","type":[[["EmojiIdentifierResolvable"]]]}],"returns":{"types":[[["RawEmoji"]]],"nullable":true},"meta":{"line":359,"file":"Util.js","path":"src/util"}},{"name":"cloneObject","description":"Shallow-copies an object with its class/prototype intact.","scope":"static","access":"private","params":[{"name":"obj","description":"Object to clone","type":[[["Object"]]]}],"returns":[[["Object"]]],"meta":{"line":373,"file":"Util.js","path":"src/util"}},{"name":"mergeDefault","description":"Sets default properties on an object that aren't already specified.","scope":"static","access":"private","params":[{"name":"def","description":"Default properties","type":[[["Object"]]]},{"name":"given","description":"Object to assign defaults to","type":[[["Object"]]]}],"returns":[[["Object"]]],"meta":{"line":384,"file":"Util.js","path":"src/util"}},{"name":"makeError","description":"Makes an Error from a plain info object.","scope":"static","access":"private","params":[{"name":"obj","description":"Error info","type":[[["MakeErrorOptions"]]]}],"returns":[[["Error"]]],"meta":{"line":411,"file":"Util.js","path":"src/util"}},{"name":"makePlainError","description":"Makes a plain error info object from an Error.","scope":"static","access":"private","params":[{"name":"err","description":"Error to get info from","type":[[["Error"]]]}],"returns":[[["MakeErrorOptions"]]],"meta":{"line":424,"file":"Util.js","path":"src/util"}},{"name":"moveElementInArray","description":"Moves an element in an array *in place*.","scope":"static","access":"private","params":[{"name":"array","description":"Array to modify","type":[[["Array","<"],["*",">"]]]},{"name":"element","description":"Element to move","type":[["*"]]},{"name":"newIndex","description":"Index or offset to move the element to","type":[[["number"]]]},{"name":"offset","description":"Move the element by an offset amount rather than to a set index","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["number"]]],"meta":{"line":441,"file":"Util.js","path":"src/util"}},{"name":"verifyString","description":"Verifies the provided data is a string, otherwise throws provided error.","scope":"static","params":[{"name":"data","description":"The string resolvable to resolve","type":[[["string"]]]},{"name":"error","description":"The Error constructor to instantiate. Defaults to Error","optional":true,"type":[[["function"]]]},{"name":"errorMessage","description":"The error message to throw with. Defaults to \"Expected string, got instead.\"","optional":true,"type":[[["string"]]]},{"name":"allowEmpty","description":"Whether an empty string should be allowed","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["string"]]],"meta":{"line":459,"file":"Util.js","path":"src/util"}},{"name":"resolveColor","description":"Resolves a ColorResolvable into a color number.","scope":"static","params":[{"name":"color","description":"Color to resolve","type":[[["ColorResolvable"]]]}],"returns":{"types":[[["number"]]],"description":"A color"},"meta":{"line":483,"file":"Util.js","path":"src/util"}},{"name":"discordSort","description":"Sorts by Discord's position and id.","scope":"static","params":[{"name":"collection","description":"Collection of objects to sort","type":[[["Collection"]]]}],"returns":[[["Collection"]]],"meta":{"line":503,"file":"Util.js","path":"src/util"}},{"name":"setPosition","description":"Sets the position of a Channel or Role.","scope":"static","access":"private","params":[{"name":"item","description":"Object to set the position of","type":[[["Channel"]],[["Role"]]]},{"name":"position","description":"New position for the object","type":[[["number"]]]},{"name":"relative","description":"Whether `position` is relative to its current position","type":[[["boolean"]]]},{"name":"sorted","description":"A collection of the objects sorted properly","type":[[["Collection","<"],["string",", ("],["Channel","|"],["Role",")>"]]]},{"name":"route","description":"Route to call PATCH on","type":[[["APIRouter"]]]},{"name":"reason","description":"Reason for the change","optional":true,"type":[[["string"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Array","<"],["Channel",">|"],["Array","<"],["Role",">)>"]]],"description":"Updated item list, with `id` and `position` properties"},"meta":{"line":523,"file":"Util.js","path":"src/util"}},{"name":"basename","description":"Alternative to Node's `path.basename`, removing query string after the extension if it exists.","scope":"static","access":"private","params":[{"name":"path","description":"Path to get the basename of","type":[[["string"]]]},{"name":"ext","description":"File extension to remove","optional":true,"type":[[["string"]]]}],"returns":{"types":[[["string"]]],"description":"Basename of the path"},"meta":{"line":538,"file":"Util.js","path":"src/util"}},{"name":"removeMentions","description":"Breaks user, role and everyone/here mentions by adding a zero width space after every @ character","scope":"static","deprecated":"Use {@link BaseMessageOptions#allowedMentions} instead.","params":[{"name":"str","description":"The string to sanitize","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":549,"file":"Util.js","path":"src/util"}},{"name":"cleanContent","description":"The content to have all mentions replaced by the equivalent text.\nWhen {@link Util.removeMentions} is removed, this method will no longer sanitize mentions.\nUse {@link BaseMessageOptions#allowedMentions} instead to prevent mentions when sending a message.","scope":"static","params":[{"name":"str","description":"The string to be converted","type":[[["string"]]]},{"name":"channel","description":"The channel the string was sent in","type":[[["TextBasedChannels"]]]}],"returns":[[["string"]]],"meta":{"line":574,"file":"Util.js","path":"src/util"}},{"name":"cleanCodeBlockContent","description":"The content to put in a code block with all code block fences replaced by the equivalent backticks.","scope":"static","params":[{"name":"text","description":"The string to be converted","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":608,"file":"Util.js","path":"src/util"}},{"name":"archivedThreadSweepFilter","description":"Creates a sweep filter that sweeps archived threads","scope":"static","deprecated":"When not using with `makeCache` use `Sweepers.archivedThreadSweepFilter` instead","params":[{"name":"lifetime","description":"How long a thread has to be archived to be valid for sweeping","optional":true,"default":14400,"type":[[["number"]]]}],"returns":[[["SweepFilter"]]],"meta":{"line":618,"file":"Util.js","path":"src/util"}},{"name":"resolveAutoArchiveMaxLimit","description":"Resolves the maximum time a guild's thread channels should automatically archive in case of no recent activity.","scope":"static","deprecated":true,"returns":[[["number"]]],"meta":{"line":629,"file":"Util.js","path":"src/util"}},{"name":"lazy","description":"Lazily evaluates a callback function (yea it's v14 :yay:)","scope":"static","examples":["const User = lazy(() => require('./User'));\nconst user = new (User())(client, data);"],"params":[{"name":"cb","description":"The callback to lazily evaluate","type":[[["function"]]]}],"returns":[[["function"]]],"meta":{"line":641,"file":"Util.js","path":"src/util"}},{"name":"transformAPIGuildForumTag","description":"Transforms an API guild forum tag to camel-cased guild forum tag.","scope":"static","params":[{"name":"tag","description":"The tag to transform","type":[[["APIGuildForumTag"]]]}],"returns":[[["GuildForumTag"]]],"meta":{"line":652,"file":"Util.js","path":"src/util"}},{"name":"transformGuildForumTag","description":"Transforms a camel-cased guild forum tag to an API guild forum tag.","scope":"static","params":[{"name":"tag","description":"The tag to transform","type":[[["GuildForumTag"]]]}],"returns":[[["APIGuildForumTag"]]],"meta":{"line":673,"file":"Util.js","path":"src/util"}},{"name":"transformAPIGuildDefaultReaction","description":"Transforms an API guild forum default reaction object to a\ncamel-cased guild forum default reaction object.","scope":"static","params":[{"name":"defaultReaction","description":"The default reaction to transform","type":[[["APIGuildForumDefaultReactionEmoji"]]]}],"returns":[[["DefaultReactionEmoji"]]],"meta":{"line":690,"file":"Util.js","path":"src/util"}},{"name":"transformGuildDefaultReaction","description":"Transforms a camel-cased guild forum default reaction object to an\nAPI guild forum default reaction object.","scope":"static","params":[{"name":"defaultReaction","description":"The default reaction to transform","type":[[["DefaultReactionEmoji"]]]}],"returns":[[["APIGuildForumDefaultReactionEmoji"]]],"meta":{"line":704,"file":"Util.js","path":"src/util"}},{"name":"getSortableGroupTypes","description":"Gets an array of the channel types that can be moved in the channel group. For example, a GuildText channel would\nreturn an array containing the types that can be ordered within the text channels (always at the top), and a voice\nchannel would return an array containing the types that can be ordered within the voice channels (always at the\nbottom).","scope":"static","params":[{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]]}],"returns":[[["Array","<"],["ChannelType",">"]]],"meta":{"line":763,"file":"Util.js","path":"src/util"}},{"name":"calculateUserDefaultAvatarIndex","description":"Calculates the default avatar index for a given user id.","scope":"static","params":[{"name":"userId","description":"The user id to calculate the default avatar index for","type":[[["Snowflake"]]]}],"returns":[[["number"]]],"meta":{"line":784,"file":"Util.js","path":"src/util"}}],"meta":{"line":22,"file":"Util.js","path":"src/util"}}],"interfaces":[{"name":"InteractionResponses","description":"Interface for classes that support shared interaction response types.","methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}}],"meta":{"line":14,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"TextBasedChannel","description":"Interface for classes that have text-channel-like features.","props":[{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":33,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":39,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastMessageId","description":"The channel's last message id, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":45,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinTimestamp","description":"The timestamp when the last pinned message was pinned, if there was one","nullable":true,"type":[[["number"]]],"meta":{"line":51,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinAt","description":"The date when the last pinned message was pinned, if there was one","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":68,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}}],"methods":[{"name":"send","description":"Sends a message to this channel.","examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"bulkDelete","description":"Bulk deletes given messages that are newer than two weeks.","examples":["// Bulk delete messages\nchannel.bulkDelete(5)\n .then(messages => console.log(`Bulk deleted ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"messages","description":"Messages or number of messages to delete","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]],[["Array","<"],["MessageResolvable",">"]],[["number"]]]},{"name":"filterOld","description":"Filter messages to remove those which are older than two weeks automatically","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Collection","<"],["Snowflake",", ("],["Message","|"],["undefined",")>>"]]],"description":"Returns the deleted messages"},"meta":{"line":319,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":368,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":393,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":403,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":413,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"searchInteraction","description":"Search Slash Command (return raw data)","params":[{"name":"applicationId","description":"Application ID","type":[[["Snowflake"]]]},{"name":"type","description":"Command Type","default":"CHAT_INPUT","nullable":true,"type":[[["ApplicationCommandType"]]]}],"returns":[[["Object"]]],"meta":{"line":423,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendSlash","description":"Send Slash to this channel","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/SlashCommand.md}"],"examples":["// Send a basic slash\nchannel.sendSlash('botid', 'ping')\n .then(console.log)\n .catch(console.error);","// Send a remote file\nchannel.sendSlash('botid', 'emoji upload', 'https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048', 'test')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"bot","description":"Bot user (BotID, not applicationID)","type":[[["UserResolvable"]]]},{"name":"commandString","description":"Command name (and sub / group formats)","type":[[["string"]]]},{"name":"args","description":"Command arguments","variable":true,"type":[[["any"]],[["Array","<"],["any",">"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":463,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}}],"meta":{"line":27,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}}],"typedefs":[{"name":"ApplicationCommandPermissionsUpdateData","description":"The data received in the {@link Client#event:applicationCommandPermissionsUpdate} event","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the command or global entity that was updated","type":[[["Snowflake"]]]},{"name":"guildId","description":"The id of the guild in which permissions were updated","type":[[["Snowflake"]]]},{"name":"applicationId","description":"The id of the application that owns the command or entity being updated","type":[[["Snowflake"]]]},{"name":"permissions","description":"The updated permissions","type":[[["Array","<"],["ApplicationCommandPermissions",">"]]]}],"meta":{"line":6,"file":"ApplicationCommandPermissionsUpdate.js","path":"src/client/actions"}},{"name":"ClientFetchInviteOptions","description":"Options used when fetching an invite from Discord.","type":[[["Object"]]],"props":[{"name":"guildScheduledEventId","description":"The id of the guild scheduled event to include with\nthe invite","optional":true,"type":[[["Snowflake"]]]}],"meta":{"line":564,"file":"Client.js","path":"src/client"}},{"name":"InviteGenerationOptions","description":"Options for {@link Client#generateInvite}.","type":[[["Object"]]],"props":[{"name":"scopes","description":"Scopes that should be requested","type":[[["Array","<"],["InviteScope",">"]]]},{"name":"permissions","description":"Permissions to request","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"guild","description":"Guild to preselect","optional":true,"type":[[["GuildResolvable"]]]},{"name":"disableGuildSelect","description":"Whether to disable the guild selection","optional":true,"type":[[["boolean"]]]}],"meta":{"line":784,"file":"Client.js","path":"src/client"}},{"name":"OAuth2AuthorizeOptions","type":[[["Object"]]],"props":[{"name":"guild_id","description":"Guild ID","optional":true,"type":[[["string"]]]},{"name":"permissions","description":"Permissions","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"authorize","description":"Whether to authorize or not","optional":true,"type":[[["boolean"]]]},{"name":"code","description":"2FA Code","optional":true,"type":[[["string"]]]},{"name":"webhook_channel_id","description":"Webhook Channel ID","optional":true,"type":[[["string"]]]}],"meta":{"line":899,"file":"Client.js","path":"src/client"}},{"name":"WebhookClientData","description":"The data for the webhook client containing either an id and token or just a URL","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the webhook","optional":true,"type":[[["Snowflake"]]]},{"name":"token","description":"The token of the webhook","optional":true,"type":[[["string"]]]},{"name":"url","description":"The full URL for the webhook client","optional":true,"type":[[["string"]]]}],"meta":{"line":13,"file":"WebhookClient.js","path":"src/client"}},{"name":"AutocompleteResponseChoice","type":[[["object"]]],"props":[{"name":"name","description":"The name of the choice","type":[[["string"]]]},{"name":"value","description":"The value of the choice","type":[[["string"]]]}],"meta":{"line":6,"file":"APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE.js","path":"src/client/websocket/handlers"}},{"name":"AutocompleteResponse","type":[[["object"]]],"props":[{"name":"nonce","description":"Snowflake of the data","optional":true,"type":[[["Snowflake"]]]},{"name":"choices","description":"Array of choices","optional":true,"type":[[["Array","<"],["AutocompleteResponseChoice",">"]]]}],"meta":{"line":11,"file":"APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE.js","path":"src/client/websocket/handlers"}},{"name":"GuildMembersChunk","description":"Represents the properties of a guild members chunk","type":[[["Object"]]],"props":[{"name":"index","description":"Index of the received chunk","type":[[["number"]]]},{"name":"count","description":"Number of chunks the client should receive","type":[[["number"]]]},{"name":"nonce","description":"Nonce for this chunk","nullable":true,"type":[[["string"]]]},{"name":"notFound","description":"An array of whatever could not be found\nwhen using {@link Opcodes.REQUEST_GUILD_MEMBERS}","type":[[["Array","<"],["*",">"]]]}],"meta":{"line":16,"file":"GUILD_MEMBERS_CHUNK.js","path":"src/client/websocket/handlers"}},{"name":"InteractionResponseBody","type":[[["Object"]]],"props":[{"name":"id","description":"Interaction ID","type":[[["Snowflake"]]]},{"name":"nonce","description":"nonce in POST /interactions","type":[[["Snowflake"]]]}],"meta":{"line":4,"file":"INTERACTION_CREATE.js","path":"src/client/websocket/handlers"}},{"name":"ApplicationCommandResolvable","description":"Data that resolves to give an ApplicationCommand object. This can be:\n* An ApplicationCommand object\n* A Snowflake","type":[[["ApplicationCommand"]],[["Snowflake"]]],"meta":{"line":51,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"ApplicationCommandDataResolvable","description":"Data that resolves to the data of an ApplicationCommand","type":[[["ApplicationCommandDataResolvable"]],[["SlashCommandBuilder"]],[["ContextMenuCommandBuilder"]]],"meta":{"line":59,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"BaseFetchOptions","description":"Options used to fetch data from Discord","type":[[["Object"]]],"props":[{"name":"cache","description":"Whether to cache the fetched data if it wasn't already","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":65,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"FetchApplicationCommandOptions","description":"Options used to fetch Application Commands from Discord","type":[[["BaseFetchOptions"]]],"props":[{"name":"guildId","description":"The guild's id to fetch commands for, for when the guild is not cached","optional":true,"type":[[["Snowflake"]]]},{"name":"locale","description":"The locale to use when fetching this command","optional":true,"type":[[["LocaleString"]]]},{"name":"withLocalizations","description":"Whether to fetch all localization data","optional":true,"type":[[["boolean"]]]}],"meta":{"line":72,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"ApplicationCommandPermissionData","description":"Data for setting the permissions of an application command.","type":[[["Object"]]],"props":[{"name":"id","description":"The role or user's id","type":[[["Snowflake"]]]},{"name":"type","description":"Whether this permission is for a role or a user","type":[[["ApplicationCommandPermissionType"]],[["number"]]]},{"name":"permission","description":"Whether the role or user has the permission to use this command","type":[[["boolean"]]]}],"meta":{"line":58,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"ApplicationCommandPermissions","description":"The object returned when fetching permissions for an application command.","type":[[["Object"]]],"props":[{"name":"id","description":"The role or user's id","type":[[["Snowflake"]]]},{"name":"type","description":"Whether this permission is for a role or a user","type":[[["ApplicationCommandPermissionType"]]]},{"name":"permission","description":"Whether the role or user has the permission to use this command","type":[[["boolean"]]]}],"meta":{"line":66,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"BaseApplicationCommandPermissionsOptions","description":"Options for managing permissions for one or more Application Commands\nWhen passing these options to a manager where `guildId` is `null`,\n`guild` is a required parameter","type":[[["Object"]]],"props":[{"name":"guild","description":"The guild to modify / check permissions for\nIgnored when the manager has a non-null `guildId` property","optional":true,"type":[[["GuildResolvable"]]]},{"name":"command","description":"The command to modify / check permissions for\nIgnored when the manager has a non-null `commandId` property","optional":true,"type":[[["ApplicationCommandResolvable"]]]}],"meta":{"line":74,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"GuildApplicationCommandPermissionData","description":"Data used for overwriting the permissions for all application commands in a guild.","type":[[["Object"]]],"props":[{"name":"id","description":"The command's id","type":[[["Snowflake"]]]},{"name":"permissions","description":"The permissions for this command","type":[[["Array","<"],["ApplicationCommandPermissionData",">"]]]}],"meta":{"line":118,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"SetApplicationCommandPermissionsOptions","description":"Options used to set permissions for one or more Application Commands in a guild\nOne of `command` AND `permissions`, OR `fullPermissions` is required.\n`fullPermissions` is not a valid option when passing to a manager where `commandId` is non-null","type":[[["BaseApplicationCommandPermissionsOptions"]]],"props":[{"name":"permissions","description":"The new permissions for the command","optional":true,"type":[[["Array","<"],["ApplicationCommandPermissionData",">"]]]},{"name":"fullPermissions","description":"The new permissions for all commands\nin a guild When this parameter is set, `permissions` and `command` are ignored","optional":true,"type":[[["Array","<"],["GuildApplicationCommandPermissionData",">"]]]}],"meta":{"line":125,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"AddApplicationCommandPermissionsOptions","description":"Options used to add permissions to a command\nThe `command` parameter is not optional when the managers `commandId` is `null`","type":[[["BaseApplicationCommandPermissionsOptions"]]],"props":[{"name":"permissions","description":"The permissions to add to the command","type":[[["Array","<"],["ApplicationCommandPermissionData",">"]]]}],"meta":{"line":205,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"RemoveApplicationCommandPermissionsOptions","description":"Options used to remove permissions from a command\nThe `command` parameter is not optional when the managers `commandId` is `null`","type":[[["BaseApplicationCommandPermissionsOptions"]]],"props":[{"name":"users","description":"The user(s) to remove from the command permissions\nOne of `users` or `roles` is required","optional":true,"type":[[["UserResolvable"]],[["Array","<"],["UserResolvable",">"]]]},{"name":"roles","description":"The role(s) to remove from the command permissions\nOne of `users` or `roles` is required","optional":true,"type":[[["RoleResolvable"]],[["Array","<"],["RoleResolvable",">"]]]}],"meta":{"line":253,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"HasApplicationCommandPermissionsOptions","description":"Options used to check the existence of permissions on a command\nThe `command` parameter is not optional when the managers `commandId` is `null`","type":[[["BaseApplicationCommandPermissionsOptions"]]],"props":[{"name":"permissionId","description":"The user or role to check if a permission exists for\non this command.","type":[[["UserResolvable"]],[["RoleResolvable"]]]}],"meta":{"line":338,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"AutoModerationTriggerMetadataOptions","description":"Options used to set the trigger metadata of an auto moderation rule.","type":[[["Object"]]],"props":[{"name":"keywordFilter","description":"The substrings that will be searched for in the content","optional":true,"type":[[["Array","<"],["string",">"]]]},{"name":"regexPatterns","description":"The regular expression patterns which will be matched against the content\nOnly Rust-flavored regular expressions are supported.","optional":true,"type":[[["Array","<"],["string",">"]]]},{"name":"presets","description":"The internally pre-defined wordsets which will be searched for in the content","optional":true,"type":[[["Array","<"],["AutoModerationRuleKeywordPresetType",">"]]]},{"name":"allowList","description":"The substrings that will be exempt from triggering\n{@link AutoModerationRuleTriggerType.KEYWORD} and {@link AutoModerationRuleTriggerType.KEYWORD_PRESET}","optional":true,"type":[[["Array","<"],["string",">"]]]},{"name":"mentionTotalLimit","description":"The total number of role & user mentions allowed per message","optional":true,"nullable":true,"type":[[["number"]]]},{"name":"mentionRaidProtectionEnabled","description":"Whether to automatically detect mention raids","optional":true,"type":[[["boolean"]]]}],"meta":{"line":50,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"AutoModerationActionOptions","description":"Options used to set the actions of an auto moderation rule.","type":[[["Object"]]],"props":[{"name":"type","description":"The type of this auto moderation rule action","type":[[["AutoModerationActionType"]]]},{"name":"metadata","description":"Additional metadata needed during execution\nThis property is required if using a `type` of\n{@link AutoModerationActionType.SEND_ALERT_MESSAGE} or {@link AutoModerationActionType.TIMEOUT}.","optional":true,"type":[[["AutoModerationActionMetadataOptions"]]]}],"meta":{"line":64,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"AutoModerationActionMetadataOptions","description":"Options used to set the metadata of an auto moderation rule action.","type":[[["Object"]]],"props":[{"name":"channel","description":"The channel to which content will be logged","optional":true,"type":[[["GuildTextChannelResolvable"]],[["ThreadChannel"]]]},{"name":"durationSeconds","description":"The timeout duration in seconds","optional":true,"type":[[["number"]]]},{"name":"customMessage","description":"The custom message that is shown whenever a message is blocked","optional":true,"type":[[["string"]]]}],"meta":{"line":73,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"AutoModerationRuleCreateOptions","description":"Options used to create an auto moderation rule.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the auto moderation rule","type":[[["string"]]]},{"name":"eventType","description":"The event type of the auto moderation rule","type":[[["AutoModerationRuleEventType"]]]},{"name":"triggerType","description":"The trigger type of the auto moderation rule","type":[[["AutoModerationRuleTriggerType"]]]},{"name":"triggerMetadata","description":"The trigger metadata of the auto moderation rule\nThis property is required if the following `triggerType`s are used:\n* {@link AutoModerationRuleTriggerType.KEYWORD KEYWORD}\n* {@link AutoModerationRuleTriggerType.KEYWORD_PRESET KEYWORD_PRESET}\n* {@link AutoModerationRuleTriggerType.MENTION_SPAM MENTION_SPAM}\n","optional":true,"type":[[["AutoModerationTriggerMetadataOptions"]]]},{"name":"actions","description":"The actions that will execute when the auto moderation rule is triggered","type":[[["Array","<"],["AutoModerationActionOptions",">"]]]},{"name":"enabled","description":"Whether the auto moderation rule should be enabled","optional":true,"type":[[["boolean"]]]},{"name":"exemptRoles","description":"The roles that should not be affected by the auto moderation rule","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"exemptChannels","description":"The channels that should not be affected by the auto moderation rule","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["GuildChannel","|"],["ThreadChannel",")>"]],[["Array","<"],["GuildChannelResolvable",">"]]]},{"name":"reason","description":"The reason for creating the auto moderation rule","optional":true,"type":[[["string"]]]}],"meta":{"line":81,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"AutoModerationRuleEditOptions","description":"Options used to edit an auto moderation rule.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the auto moderation rule","optional":true,"type":[[["string"]]]},{"name":"eventType","description":"The event type of the auto moderation rule","optional":true,"type":[[["AutoModerationRuleEventType"]]]},{"name":"triggerMetadata","description":"The trigger metadata of the auto moderation rule","optional":true,"type":[[["AutoModerationTriggerMetadataOptions"]]]},{"name":"actions","description":"The actions that will execute when the auto moderation rule is triggered","optional":true,"type":[[["Array","<"],["AutoModerationActionOptions",">"]]]},{"name":"enabled","description":"Whether the auto moderation rule should be enabled","optional":true,"type":[[["boolean"]]]},{"name":"exemptRoles","description":"The roles that should not be affected by the auto moderation rule","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"exemptChannels","description":"The channels that should not be affected by the auto moderation rule","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["GuildChannel","|"],["ThreadChannel",")>"]],[["Array","<"],["GuildChannelResolvable",">"]]]},{"name":"reason","description":"The reason for creating the auto moderation rule","optional":true,"type":[[["string"]]]}],"meta":{"line":152,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"AutoModerationRuleResolvable","description":"Data that can be resolved to give an AutoModerationRule object. This can be:\n* An AutoModerationRule\n* A Snowflake","type":[[["AutoModerationRule"]],[["Snowflake"]]],"meta":{"line":215,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"FetchAutoModerationRuleOptions","description":"Options used to fetch a single auto moderation rule from a guild.","type":[[["BaseFetchOptions"]]],"props":[{"name":"autoModerationRule","description":"The auto moderation rule to fetch","type":[[["AutoModerationRuleResolvable"]]]}],"meta":{"line":222,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"FetchAutoModerationRulesOptions","description":"Options used to fetch all auto moderation rules from a guild.","type":[[["Object"]]],"props":[{"name":"cache","description":"Whether to cache the fetched auto moderation rules","optional":true,"type":[[["boolean"]]]}],"meta":{"line":228,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"EmojiResolvable","description":"Data that can be resolved into a GuildEmoji object. This can be:\n* A Snowflake\n* A GuildEmoji object\n* A ReactionEmoji object","type":[[["Snowflake"]],[["GuildEmoji"]],[["ReactionEmoji"]]],"meta":{"line":23,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"EmojiIdentifierResolvable","description":"Data that can be resolved to give an emoji identifier. This can be:\n* An EmojiResolvable\n* The ``, `<:name:id>`, `a:name:id` or `name:id` emoji identifier string of an emoji\n* The Unicode representation of an emoji","type":[[["string"]],[["EmojiResolvable"]]],"meta":{"line":51,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"ChannelResolvable","description":"Data that can be resolved to give a Channel object. This can be:\n* A Channel object\n* A Snowflake","type":[[["Channel"]],[["Snowflake"]]],"meta":{"line":66,"file":"ChannelManager.js","path":"src/managers"}},{"name":"FetchChannelOptions","description":"Options for fetching a channel from Discord","type":[[["BaseFetchOptions"]]],"props":[{"name":"allowUnknownGuild","description":"Allows the channel to be returned even if the guild is not in cache,\nit will not be cached. Many of the properties and methods on the returned channel will throw errors","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":91,"file":"ChannelManager.js","path":"src/managers"}},{"name":"CustomStatusOption","description":"CustomStatus Object","type":[[["Object"]]],"props":[{"name":"text","description":"Text to set","type":[[["string"]],[["null"]]]},{"name":"status","description":"The status to set: 'online', 'idle', 'dnd', 'invisible' or null.","type":[[["string"]],[["null"]]]},{"name":"emoji","description":"UnicodeEmoji, DiscordEmoji, or null.","type":[[["EmojiResolvable"]],[["null"]]]},{"name":"expires","description":"The number of seconds until the status expires, or null.","type":[[["number"]],[["null"]]]}],"meta":{"line":267,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"GuildBanResolvable","description":"Data that resolves to give a GuildBan object. This can be:\n* A GuildBan object\n* A User resolvable","type":[[["GuildBan"]],[["UserResolvable"]]],"meta":{"line":37,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"FetchBanOptions","description":"Options used to fetch a single ban from a guild.","type":[[["BaseFetchOptions"]]],"props":[{"name":"user","description":"The ban to fetch","type":[[["UserResolvable"]]]}],"meta":{"line":53,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"FetchBansOptions","description":"Options used to fetch multiple bans from a guild.","type":[[["Object"]]],"props":[{"name":"limit","description":"The maximum number of bans to return","optional":true,"type":[[["number"]]]},{"name":"before","description":"Consider only bans before this id","optional":true,"type":[[["Snowflake"]]]},{"name":"after","description":"Consider only bans after this id","optional":true,"type":[[["Snowflake"]]]},{"name":"cache","description":"Whether to cache the fetched bans","optional":true,"type":[[["boolean"]]]}],"meta":{"line":59,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"BanOptions","description":"Options used to ban a user from a guild.","type":[[["Object"]]],"props":[{"name":"days","description":"Number of days of messages to delete, must be between 0 and 7, inclusive\nThis property is deprecated. Use `deleteMessageSeconds` instead.","optional":true,"default":0,"type":[[["number"]]]},{"name":"deleteMessageSeconds","description":"Number of seconds of messages to delete,\nmust be between 0 and 604800 (7 days), inclusive","optional":true,"default":0,"type":[[["number"]]]},{"name":"reason","description":"The reason for the ban","optional":true,"type":[[["string"]]]}],"meta":{"line":128,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"GuildChannelResolvable","description":"Data that can be resolved to give a Guild Channel object. This can be:\n* A GuildChannel object\n* A ThreadChannel object\n* A Snowflake","type":[[["GuildChannel"]],[["ThreadChannel"]],[["Snowflake"]]],"meta":{"line":79,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"GuildChannelCreateOptions","description":"Options used to create a new channel in a guild.","type":[[["CategoryCreateChannelOptions"]]],"props":[{"name":"parent","description":"Parent of the new channel","optional":true,"type":[[["CategoryChannelResolvable"]]]}],"meta":{"line":107,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"ChannelData","description":"The data for a guild channel.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the channel","optional":true,"type":[[["string"]]]},{"name":"type","description":"The type of the channel (only conversion between text and news is supported)","optional":true,"type":[[["ChannelType"]]]},{"name":"position","description":"The position of the channel","optional":true,"type":[[["number"]]]},{"name":"topic","description":"The topic of the text channel","optional":true,"type":[[["string"]]]},{"name":"nsfw","description":"Whether the channel is NSFW","optional":true,"type":[[["boolean"]]]},{"name":"bitrate","description":"The bitrate of the voice channel","optional":true,"type":[[["number"]]]},{"name":"userLimit","description":"The user limit of the voice channel","optional":true,"type":[[["number"]]]},{"name":"parent","description":"The parent of the channel","optional":true,"nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"lockPermissions","description":"Lock the permissions of the channel to what the parent's permissions are","optional":true,"type":[[["boolean"]]]},{"name":"permissionOverwrites","description":"Permission overwrites for the channel","optional":true,"type":[[["Array","<"],["OverwriteResolvable",">"]],[["Collection","<"],["Snowflake",", "],["OverwriteResolvable",">"]]]},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for the channel in seconds","optional":true,"type":[[["number"]]]},{"name":"defaultAutoArchiveDuration","description":"The default auto archive duration for all new threads in this channel","optional":true,"type":[[["ThreadAutoArchiveDuration"]]]},{"name":"rtcRegion","description":"The RTC region of the channel","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"videoQualityMode","description":"The camera video quality mode of the channel","optional":true,"type":[[["VideoQualityMode"]],[["number"]]]},{"name":"flags","description":"The flags to set on the channel","optional":true,"type":[[["ChannelFlagsResolvable"]]]},{"name":"availableTags","description":"The tags to set as available in a forum channel","optional":true,"type":[[["Array","<"],["GuildForumTagData",">"]]]},{"name":"defaultReactionEmoji","description":"The emoji to set as the default reaction emoji","optional":true,"nullable":true,"type":[[["DefaultReactionEmoji"]]]},{"name":"defaultThreadRateLimitPerUser","description":"The rate limit per user (slowmode) to set on forum posts","optional":true,"type":[[["number"]]]},{"name":"defaultSortOrder","description":"The default sort order mode to set on the channel","optional":true,"nullable":true,"type":[[["SortOrderType"]]]}],"meta":{"line":251,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"CategoryChannelResolvable","description":"Data that can be resolved to give a Category Channel object. This can be:\n* A CategoryChannel object\n* A Snowflake","type":[[["CategoryChannel"]],[["Snowflake"]]],"meta":{"line":1363,"file":"Guild.js","path":"src/structures"}},{"name":"ChannelPosition","description":"The data needed for updating a channel's position.","type":[[["Object"]]],"props":[{"name":"channel","description":"Channel to update","type":[[["GuildChannel"]],[["Snowflake"]]]},{"name":"position","description":"New position for the channel","optional":true,"type":[[["number"]]]},{"name":"parent","description":"Parent channel for this channel","optional":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"lockPermissions","description":"If the overwrites should be locked to the parents overwrites","optional":true,"type":[[["boolean"]]]}],"meta":{"line":1370,"file":"Guild.js","path":"src/structures"}},{"name":"GuildEmojiCreateOptions","description":"Options used for creating an emoji in a guild.","type":[[["Object"]]],"props":[{"name":"roles","description":"The roles to limit the emoji to","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"reason","description":"The reason for creating the emoji","optional":true,"type":[[["string"]]]}],"meta":{"line":28,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"GuildForumThreadMessageCreateOptions","type":[[["BaseMessageOptions"]]],"props":[{"name":"stickers","description":"The stickers to send with the message","optional":true,"type":[[["StickerResolvable"]]]},{"name":"flags","description":"The flags to send with the message.\nOnly `SUPPRESS_EMBEDS`, `SUPPRESS_NOTIFICATIONS` and `IS_VOICE_MESSAGE` can be set.","optional":true,"type":[[["BitFieldResolvable"]]]}],"meta":{"line":19,"file":"GuildForumThreadManager.js","path":"src/managers"}},{"name":"GuildForumThreadCreateOptions","description":"Options for creating a thread.","type":[[["StartThreadOptions"]]],"props":[{"name":"message","description":"The message associated with the thread post","type":[[["GuildForumThreadMessageCreateOptions"]],[["MessagePayload"]]]},{"name":"appliedTags","description":"The tags to apply to the thread","optional":true,"type":[[["Array","<"],["Snowflake",">"]]]}],"meta":{"line":26,"file":"GuildForumThreadManager.js","path":"src/managers"}},{"name":"InviteResolvable","description":"Data that can be resolved to give an invite code. This can be:\n* An invite code\n* An invite URL","type":[[["string"]]],"meta":{"line":16,"file":"DataResolver.js","path":"src/util"}},{"name":"GuildInvitableChannelResolvable","description":"Data that can be resolved to a channel that an invite can be created on. This can be:\n* TextChannel\n* VoiceChannel\n* NewsChannel\n* StoreChannel\n* StageChannel\n* Snowflake","type":[[["TextChannel"]],[["VoiceChannel"]],[["NewsChannel"]],[["StoreChannel"]],[["StageChannel"]],[["Snowflake"]]],"meta":{"line":41,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"FetchInviteOptions","description":"Options used to fetch a single invite from a guild.","type":[[["Object"]]],"props":[{"name":"code","description":"The invite to fetch","type":[[["InviteResolvable"]]]},{"name":"cache","description":"Whether or not to cache the fetched invite","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":71,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"FetchInvitesOptions","description":"Options used to fetch all invites from a guild.","type":[[["Object"]]],"props":[{"name":"channelId","description":"The channel to fetch all invites from","optional":true,"type":[[["GuildInvitableChannelResolvable"]]]},{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":79,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"GuildResolvable","description":"Data that resolves to give a Guild object. This can be:\n* A Guild object\n* A GuildChannel object\n* A GuildEmoji object\n* A Role object\n* A Snowflake\n* An Invite object","type":[[["Guild"]],[["GuildChannel"]],[["GuildMember"]],[["GuildEmoji"]],[["Role"]],[["Snowflake"]],[["Invite"]]],"meta":{"line":52,"file":"GuildManager.js","path":"src/managers"}},{"name":"PartialRoleData","description":"Partial data for a Role.","type":[[["Object"]]],"props":[{"name":"id","description":"The role's id, used to set channel overrides,\nthis is a placeholder and will be replaced by the API after consumption","optional":true,"type":[[["Snowflake"]],[["number"]]]},{"name":"name","description":"The name of the role","optional":true,"type":[[["string"]]]},{"name":"color","description":"The color of the role, either a hex string or a base 10 number","optional":true,"type":[[["ColorResolvable"]]]},{"name":"hoist","description":"Whether or not the role should be hoisted","optional":true,"type":[[["boolean"]]]},{"name":"position","description":"The position of the role","optional":true,"type":[[["number"]]]},{"name":"permissions","description":"The permissions of the role","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"mentionable","description":"Whether or not the role should be mentionable","optional":true,"type":[[["boolean"]]]}],"meta":{"line":63,"file":"GuildManager.js","path":"src/managers"}},{"name":"PartialOverwriteData","description":"Partial overwrite data.","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the {@link Role} or {@link User} this overwrite belongs to","type":[[["Snowflake"]],[["number"]]]},{"name":"type","description":"The type of this overwrite","optional":true,"type":[[["OverwriteType"]]]},{"name":"allow","description":"The permissions to allow","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"deny","description":"The permissions to deny","optional":true,"type":[[["PermissionResolvable"]]]}],"meta":{"line":76,"file":"GuildManager.js","path":"src/managers"}},{"name":"PartialChannelData","description":"Partial data for a Channel.","type":[[["Object"]]],"props":[{"name":"id","description":"The channel's id, used to set its parent,\nthis is a placeholder and will be replaced by the API after consumption","optional":true,"type":[[["Snowflake"]],[["number"]]]},{"name":"parentId","description":"The parent id for this channel","optional":true,"type":[[["Snowflake"]],[["number"]]]},{"name":"type","description":"The type of the channel","optional":true,"type":[[["ChannelType"]],[["number"]]]},{"name":"name","description":"The name of the channel","type":[[["string"]]]},{"name":"topic","description":"The topic of the text channel","optional":true,"type":[[["string"]]]},{"name":"nsfw","description":"Whether the channel is NSFW","optional":true,"type":[[["boolean"]]]},{"name":"bitrate","description":"The bitrate of the voice channel","optional":true,"type":[[["number"]]]},{"name":"userLimit","description":"The user limit of the channel","optional":true,"type":[[["number"]]]},{"name":"rtcRegion","description":"The RTC region of the channel","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"videoQualityMode","description":"The camera video quality mode of the channel","optional":true,"type":[[["VideoQualityMode"]],[["number"]]]},{"name":"permissionOverwrites","description":"Overwrites of the channel","optional":true,"type":[[["Array","<"],["PartialOverwriteData",">"]]]},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) of the channel in seconds","optional":true,"type":[[["number"]]]}],"meta":{"line":85,"file":"GuildManager.js","path":"src/managers"}},{"name":"GuildCreateOptions","description":"Options used to create a guild.","type":[[["Object"]]],"props":[{"name":"afkChannelId","description":"The AFK channel's id","optional":true,"type":[[["Snowflake"]],[["number"]]]},{"name":"afkTimeout","description":"The AFK timeout in seconds","optional":true,"type":[[["number"]]]},{"name":"channels","description":"The channels for this guild","optional":true,"default":"[]","type":[[["Array","<"],["PartialChannelData",">"]]]},{"name":"defaultMessageNotifications","description":"The default message notifications\nfor the guild","optional":true,"type":[[["DefaultMessageNotificationLevel"]],[["number"]]]},{"name":"explicitContentFilter","description":"The explicit content filter level for the guild","optional":true,"type":[[["ExplicitContentFilterLevel"]]]},{"name":"icon","description":"The icon for the guild","optional":true,"default":null,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"roles","description":"The roles for this guild,\nthe first element of this array is used to change properties of the guild's everyone role.","optional":true,"default":"[]","type":[[["Array","<"],["PartialRoleData",">"]]]},{"name":"systemChannelId","description":"The system channel's id","optional":true,"type":[[["Snowflake"]],[["number"]]]},{"name":"systemChannelFlags","description":"The flags of the system channel","optional":true,"type":[[["SystemChannelFlagsResolvable"]]]},{"name":"verificationLevel","description":"The verification level for the guild","optional":true,"type":[[["VerificationLevel"]]]}],"meta":{"line":146,"file":"GuildManager.js","path":"src/managers"}},{"name":"FetchGuildOptions","description":"Options used to fetch a single guild.","type":[[["BaseFetchOptions"]]],"props":[{"name":"guild","description":"The guild to fetch","type":[[["GuildResolvable"]]]},{"name":"withCounts","description":"Whether the approximate member and presence counts should be returned","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":266,"file":"GuildManager.js","path":"src/managers"}},{"name":"FetchGuildsOptions","description":"Options used to fetch multiple guilds.","type":[[["Object"]]],"props":[{"name":"before","description":"Get guilds before this guild id","optional":true,"type":[[["Snowflake"]]]},{"name":"after","description":"Get guilds after this guild id","optional":true,"type":[[["Snowflake"]]]},{"name":"limit","description":"Maximum number of guilds to request (1-200)","optional":true,"default":200,"type":[[["number"]]]}],"meta":{"line":273,"file":"GuildManager.js","path":"src/managers"}},{"name":"GuildMemberResolvable","description":"Data that resolves to give a GuildMember object. This can be:\n* A GuildMember object\n* A User resolvable","type":[[["GuildMember"]],[["UserResolvable"]]],"meta":{"line":44,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"AddGuildMemberOptions","description":"Options used to add a user to a guild using OAuth2.","type":[[["Object"]]],"props":[{"name":"accessToken","description":"An OAuth2 access token for the user with the `guilds.join` scope granted to the\nbot's application","type":[[["string"]]]},{"name":"nick","description":"The nickname to give to the member (requires `MANAGE_NICKNAMES`)","optional":true,"type":[[["string"]]]},{"name":"roles","description":"The roles to add to the member\n(requires `MANAGE_ROLES`)","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"mute","description":"Whether the member should be muted (requires `MUTE_MEMBERS`)","optional":true,"type":[[["boolean"]]]},{"name":"deaf","description":"Whether the member should be deafened (requires `DEAFEN_MEMBERS`)","optional":true,"type":[[["boolean"]]]},{"name":"force","description":"Whether to skip the cache check and call the API directly","optional":true,"type":[[["boolean"]]]},{"name":"fetchWhenExisting","description":"Whether to fetch the user if not cached and already a member","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":76,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"FetchMemberOptions","description":"Options used to fetch a single member from a guild.","type":[[["BaseFetchOptions"]]],"props":[{"name":"user","description":"The user to fetch","type":[[["UserResolvable"]]]}],"meta":{"line":140,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"FetchMembersOptions","description":"Options used to fetch multiple members from a guild.","type":[[["Object"]]],"props":[{"name":"user","description":"The user(s) to fetch","type":[[["UserResolvable"]],[["Array","<"],["UserResolvable",">"]]]},{"name":"query","description":"Limit fetch to members with similar usernames","nullable":true,"type":[[["string"]]]},{"name":"limit","description":"Maximum number of members to request","optional":true,"default":0,"type":[[["number"]]]},{"name":"withPresences","description":"Whether or not to include the presences","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"time","description":"Timeout for receipt of members","optional":true,"default":"120e3","type":[[["number"]]]},{"name":"nonce","description":"Nonce for this request (32 characters max - default to base 16 now timestamp)","nullable":true,"type":[[["string"]]]},{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":146,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"GuildSearchMembersOptions","description":"Options used for searching guild members.","type":[[["Object"]]],"props":[{"name":"query","description":"Filter members whose username or nickname start with this query","type":[[["string"]]]},{"name":"limit","description":"Maximum number of members to search","optional":true,"default":1,"type":[[["number"]]]},{"name":"cache","description":"Whether or not to cache the fetched member(s)","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":238,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"GuildListMembersOptions","description":"Options used for listing guild members.","type":[[["Object"]]],"props":[{"name":"after","description":"Limit fetching members to those with an id greater than the supplied id","optional":true,"type":[[["Snowflake"]]]},{"name":"limit","description":"Maximum number of members to list","optional":true,"default":1,"type":[[["number"]]]},{"name":"cache","description":"Whether or not to cache the fetched member(s)","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":256,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"GuildMemberEditData","description":"The data for editing a guild member.","type":[[["Object"]]],"props":[{"name":"nick","description":"The nickname to set for the member","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"roles","description":"The roles or role ids to apply","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"mute","description":"Whether or not the member should be muted","optional":true,"type":[[["boolean"]]]},{"name":"deaf","description":"Whether or not the member should be deafened","optional":true,"type":[[["boolean"]]]},{"name":"channel","description":"Channel to move the member to\n(if they are connected to voice), or `null` if you want to disconnect them from voice","optional":true,"type":[[["GuildVoiceChannelResolvable"]],[["null"]]]},{"name":"communicationDisabledUntil","description":"The date or timestamp\nfor the member's communication to be disabled until. Provide `null` to enable communication again.","optional":true,"type":[[["DateResolvable"]],[["null"]]]},{"name":"flags","description":"The flags to set for the member","optional":true,"type":[[["GuildMemberFlagsResolvable"]]]},{"name":"avatar","description":"The new guild avatar","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"banner","description":"The new guild banner","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"bio","description":"The new guild about me","optional":true,"nullable":true,"type":[[["string"]]]}],"meta":{"line":274,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"GuildPruneMembersOptions","description":"Options used for pruning guild members.\nIt's recommended to set {@link GuildPruneMembersOptions#count options.count}\nto `false` for large guilds.","type":[[["Object"]]],"props":[{"name":"days","description":"Number of days of inactivity required to kick","optional":true,"default":7,"type":[[["number"]]]},{"name":"dry","description":"Get the number of users that will be kicked, without actually kicking them","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"count","description":"Whether or not to return the number of users that have been kicked.","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"roles","description":"Array of roles to bypass the \"...and no roles\" constraint when pruning","optional":true,"type":[[["Array","<"],["RoleResolvable",">"]]]},{"name":"reason","description":"Reason for this prune","optional":true,"type":[[["string"]]]}],"meta":{"line":349,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"BruteforceOptions","description":"Options used to fetch multiple members from a guild.","type":[[["Object"]]],"props":[{"name":"limit","description":"Maximum number of members per request","optional":true,"default":100,"type":[[["number"]]]},{"name":"delay","description":"Timeout for new requests in ms","optional":true,"default":500,"type":[[["number"]]]},{"name":"depth","description":"Permutations length","optional":true,"default":1,"type":[[["number"]]]}],"meta":{"line":474,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"GuildScheduledEventResolvable","description":"Data that resolves to give a GuildScheduledEvent object. This can be:\n* A Snowflake\n* A GuildScheduledEvent object","type":[[["Snowflake"]],[["GuildScheduledEvent"]]],"meta":{"line":31,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"GuildScheduledEventCreateOptions","description":"Options used to create a guild scheduled event.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the guild scheduled event","type":[[["string"]]]},{"name":"scheduledStartTime","description":"The time to schedule the event at","type":[[["DateResolvable"]]]},{"name":"scheduledEndTime","description":"The time to end the event at\nThis is required if `entityType` is 'EXTERNAL'","optional":true,"type":[[["DateResolvable"]]]},{"name":"privacyLevel","description":"The privacy level of the guild scheduled event","type":[[["PrivacyLevel"]],[["number"]]]},{"name":"entityType","description":"The scheduled entity type of the event","type":[[["GuildScheduledEventEntityType"]],[["number"]]]},{"name":"description","description":"The description of the guild scheduled event","optional":true,"type":[[["string"]]]},{"name":"channel","description":"The channel of the guild scheduled event\nThis is required if `entityType` is 'STAGE_INSTANCE' or `VOICE`","optional":true,"type":[[["GuildVoiceChannelResolvable"]]]},{"name":"entityMetadata","description":"The entity metadata of the\nguild scheduled event\nThis is required if `entityType` is 'EXTERNAL'","optional":true,"type":[[["GuildScheduledEventEntityMetadataOptions"]]]},{"name":"image","description":"The cover image of the guild scheduled event","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"reason","description":"The reason for creating the guild scheduled event","optional":true,"type":[[["string"]]]}],"meta":{"line":38,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"GuildScheduledEventEntityMetadataOptions","description":"Options used to set entity metadata of a guild scheduled event.","type":[[["Object"]]],"props":[{"name":"location","description":"The location of the guild scheduled event\nThis is required if `entityType` is 'EXTERNAL'","optional":true,"type":[[["string"]]]}],"meta":{"line":57,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"FetchGuildScheduledEventOptions","description":"Options used to fetch a single guild scheduled event from a guild.","type":[[["BaseFetchOptions"]]],"props":[{"name":"guildScheduledEvent","description":"The guild scheduled event to fetch","type":[[["GuildScheduledEventResolvable"]]]},{"name":"withUserCount","description":"Whether to fetch the number of users subscribed to the scheduled event","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":115,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"FetchGuildScheduledEventsOptions","description":"Options used to fetch multiple guild scheduled events from a guild.","type":[[["Object"]]],"props":[{"name":"cache","description":"Whether or not to cache the fetched guild scheduled events","optional":true,"type":[[["boolean"]]]},{"name":"withUserCount","description":"Whether to fetch the number of users subscribed to each scheduled event\nshould be returned","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":122,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"GuildScheduledEventEditOptions","description":"Options used to edit a guild scheduled event.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the guild scheduled event","optional":true,"type":[[["string"]]]},{"name":"scheduledStartTime","description":"The time to schedule the event at","optional":true,"type":[[["DateResolvable"]]]},{"name":"scheduledEndTime","description":"The time to end the event at","optional":true,"type":[[["DateResolvable"]]]},{"name":"privacyLevel","description":"The privacy level of the guild scheduled event","optional":true,"type":[[["PrivacyLevel"]],[["number"]]]},{"name":"entityType","description":"The scheduled entity type of the event","optional":true,"type":[[["GuildScheduledEventEntityType"]],[["number"]]]},{"name":"description","description":"The description of the guild scheduled event","optional":true,"type":[[["string"]]]},{"name":"channel","description":"The channel of the guild scheduled event","optional":true,"nullable":true,"type":[[["GuildVoiceChannelResolvable"]]]},{"name":"status","description":"The status of the guild scheduled event","optional":true,"type":[[["GuildScheduledEventStatus"]],[["number"]]]},{"name":"entityMetadata","description":"The entity metadata of the\nguild scheduled event\nThis can be modified only if `entityType` of the `GuildScheduledEvent` to be edited is 'EXTERNAL'","optional":true,"type":[[["GuildScheduledEventEntityMetadataOptions"]]]},{"name":"image","description":"The cover image of the guild scheduled event","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"reason","description":"The reason for editing the guild scheduled event","optional":true,"type":[[["string"]]]}],"meta":{"line":165,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"FetchGuildScheduledEventSubscribersOptions","description":"Options used to fetch subscribers of a guild scheduled event","type":[[["Object"]]],"props":[{"name":"limit","description":"The maximum numbers of users to fetch","optional":true,"type":[[["number"]]]},{"name":"withMember","description":"Whether to fetch guild member data of the users","optional":true,"type":[[["boolean"]]]},{"name":"before","description":"Consider only users before this user id","optional":true,"type":[[["Snowflake"]]]},{"name":"after","description":"Consider only users after this user id\nIf both `before` and `after` are provided, only `before` is respected","optional":true,"type":[[["Snowflake"]]]}],"meta":{"line":250,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"GuildScheduledEventUser","description":"Represents a subscriber of a {@link GuildScheduledEvent}","type":[[["Object"]]],"props":[{"name":"guildScheduledEventId","description":"The id of the guild scheduled event which the user subscribed to","type":[[["Snowflake"]]]},{"name":"user","description":"The user that subscribed to the guild scheduled event","type":[[["User"]]]},{"name":"member","description":"The guild member associated with the user, if any","nullable":true,"type":[[["GuildMember"]]]}],"meta":{"line":260,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"GuildStickerCreateOptions","description":"Options for creating a guild sticker.","type":[[["Object"]]],"props":[{"name":"description","description":"The description for the sticker","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for creating the sticker","optional":true,"type":[[["string"]]]}],"meta":{"line":34,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"StickerResolvable","description":"Data that resolves to give a Sticker object. This can be:\n* A Sticker object\n* A Snowflake","type":[[["Sticker"]],[["Snowflake"]]],"meta":{"line":72,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"GuildTextThreadCreateOptions","description":"Options for creating a thread. Only one of `startMessage` or `type` can be defined.","type":[[["StartThreadOptions"]]],"props":[{"name":"startMessage","description":"The message to start a thread from. If this is defined then type\nof thread gets automatically defined and cannot be changed. The provided `type` field will be ignored","optional":true,"type":[[["MessageResolvable"]]]},{"name":"type","description":"The type of thread to create. Defaults to `GUILD_PUBLIC_THREAD` if\ncreated in a {@link TextChannel} When creating threads in a {@link NewsChannel} this is ignored and is always\n`GUILD_NEWS_THREAD`","optional":true,"type":[[["ThreadChannelTypes"]],[["number"]]]},{"name":"invitable","description":"Whether non-moderators can add other non-moderators to the thread\nCan only be set when type will be `GUILD_PRIVATE_THREAD`","optional":true,"type":[[["boolean"]]]},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for the new channel in seconds","optional":true,"type":[[["number"]]]}],"meta":{"line":19,"file":"GuildTextThreadManager.js","path":"src/managers"}},{"name":"ChannelLogsQueryOptions","description":"The parameters to pass in when requesting previous messages from a channel. `around`, `before` and\n`after` are mutually exclusive. All the parameters are optional.","type":[[["Object"]]],"props":[{"name":"limit","description":"Number of messages to acquire","optional":true,"default":50,"type":[[["number"]]]},{"name":"before","description":"The message's id to get the messages that were posted before it","optional":true,"type":[[["Snowflake"]]]},{"name":"after","description":"The message's id to get the messages that were posted after it","optional":true,"type":[[["Snowflake"]]]},{"name":"around","description":"The message's id to get the messages that were posted around it","optional":true,"type":[[["Snowflake"]]]}],"meta":{"line":35,"file":"MessageManager.js","path":"src/managers"}},{"name":"MessageResolvable","description":"Data that can be resolved to a Message object. This can be:\n* A Message\n* A Snowflake","type":[[["Message"]],[["Snowflake"]]],"meta":{"line":91,"file":"MessageManager.js","path":"src/managers"}},{"name":"MessageSearchOptions","type":[[["object"]]],"props":[{"name":"authors","description":"An array of author to filter by","optional":true,"type":[[["Array","<"],["UserResolvable",">"]]]},{"name":"mentions","description":"An array of user (mentioned) to filter by","optional":true,"type":[[["Array","<"],["UserResolvable",">"]]]},{"name":"content","description":"A messageContent to filter by","optional":true,"type":[[["string"]]]},{"name":"maxId","description":"The maximum Message ID to filter by","optional":true,"type":[[["Snowflake"]]]},{"name":"minId","description":"The minimum Message ID to filter by","optional":true,"type":[[["Snowflake"]]]},{"name":"channels","description":"An array of channel to filter by","optional":true,"type":[[["Array","<"],["TextChannelResolvable",">"]]]},{"name":"pinned","description":"Whether to filter by pinned messages","optional":true,"type":[[["boolean"]]]},{"name":"has","description":"Message has: `link`, `embed`, `file`, `video`, `image`, or `sound`","optional":true,"type":[[["Array","<"],["string",">"]]]},{"name":"nsfw","description":"Whether to filter by NSFW channels","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"offset","description":"The number of messages to skip (for pagination, 25 results per page)","optional":true,"default":0,"type":[[["number"]]]},{"name":"limit","description":"The number of messages to fetch\nThe maximum limit allowed is 25.","optional":true,"default":25,"type":[[["number"]]]},{"name":"sortBy","description":"The order to sort by (`timestamp` or `relevance`)","optional":true,"type":[[["string"]]]},{"name":"sortOrder","description":"The order to return results in (`asc` or `desc`)\nThe default sort is timestamp in descending order desc (newest first).","optional":true,"type":[[["string"]]]}],"meta":{"line":274,"file":"MessageManager.js","path":"src/managers"}},{"name":"MessageSearchResult","type":[[["object"]]],"props":[{"name":"messages","description":"A collection of found messages","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]]]},{"name":"total","description":"The total number of messages that match the search criteria","type":[[["number"]]]}],"meta":{"line":293,"file":"MessageManager.js","path":"src/managers"}},{"name":"GuildChannelOverwriteOptions","description":"Extra information about the overwrite","type":[[["Object"]]],"props":[{"name":"reason","description":"Reason for creating/editing this overwrite","optional":true,"type":[[["string"]]]},{"name":"type","description":"The type of overwrite, either `0` for a role or `1` for a member. Use this to bypass\nautomatic resolution of type that results in an error for uncached structure","optional":true,"type":[[["number"]]]}],"meta":{"line":74,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"PresenceResolvable","description":"Data that can be resolved to a Presence object. This can be:\n* A Presence\n* A UserResolvable\n* A Snowflake","type":[[["Presence"]],[["UserResolvable"]],[["Snowflake"]]],"meta":{"line":25,"file":"PresenceManager.js","path":"src/managers"}},{"name":"MessageReactionResolvable","description":"Data that can be resolved to a MessageReaction object. This can be:\n* A MessageReaction\n* A Snowflake\n* The Unicode representation of an emoji","type":[[["MessageReaction"]],[["Snowflake"]]],"meta":{"line":31,"file":"ReactionManager.js","path":"src/managers"}},{"name":"FetchReactionUsersOptions","description":"Options used to fetch users who gave a reaction.","type":[[["Object"]]],"props":[{"name":"limit","description":"The maximum amount of users to fetch, defaults to `100`","optional":true,"default":100,"type":[[["number"]]]},{"name":"after","description":"Limit fetching users to those with an id greater than the supplied id","optional":true,"type":[[["Snowflake"]]]}],"meta":{"line":29,"file":"ReactionUserManager.js","path":"src/managers"}},{"name":"RoleResolvable","description":"Data that can be resolved to a Role object. This can be:\n* A Role\n* A Snowflake","type":[[["Role"]],[["Snowflake"]]],"meta":{"line":76,"file":"RoleManager.js","path":"src/managers"}},{"name":"CreateRoleOptions","description":"Options used to create a new role.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the new role","optional":true,"type":[[["string"]]]},{"name":"color","description":"The data to create the role with","optional":true,"type":[[["ColorResolvable"]]]},{"name":"hoist","description":"Whether or not the new role should be hoisted","optional":true,"type":[[["boolean"]]]},{"name":"permissions","description":"The permissions for the new role","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"position","description":"The position of the new role","optional":true,"type":[[["number"]]]},{"name":"mentionable","description":"Whether or not the new role should be mentionable","optional":true,"type":[[["boolean"]]]},{"name":"icon","description":"The icon for the role\nThe `EmojiResolvable` should belong to the same guild as the role.\nIf not, pass the emoji's URL directly","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]],[["EmojiResolvable"]]]},{"name":"unicodeEmoji","description":"The unicode emoji for the role","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"reason","description":"The reason for creating this role","optional":true,"type":[[["string"]]]}],"meta":{"line":101,"file":"RoleManager.js","path":"src/managers"}},{"name":"GuildRolePosition","description":"The data needed for updating a guild role's position.","type":[[["Object"]]],"props":[{"name":"role","description":"The role's id","type":[[["RoleResolvable"]]]},{"name":"position","description":"The position to update","type":[[["number"]]]}],"meta":{"line":1403,"file":"Guild.js","path":"src/structures"}},{"name":"StageInstanceCreateOptions","description":"Options used to create a stage instance.","type":[[["Object"]]],"props":[{"name":"topic","description":"The topic of the stage instance","type":[[["string"]]]},{"name":"privacyLevel","description":"The privacy level of the stage instance","optional":true,"type":[[["PrivacyLevel"]],[["number"]]]},{"name":"sendStartNotification","description":"Whether to notify `@everyone` that the stage instance has started","optional":true,"type":[[["boolean"]]]},{"name":"guildScheduledEvent","description":"The guild scheduled event associated with the stage instance","optional":true,"type":[[["GuildScheduledEventResolvable"]]]}],"meta":{"line":29,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"StageChannelResolvable","description":"Data that can be resolved to a Stage Channel object. This can be:\n* A StageChannel\n* A Snowflake","type":[[["StageChannel"]],[["Snowflake"]]],"meta":{"line":39,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"StageInstanceEditOptions","description":"Options used to edit an existing stage instance.","type":[[["Object"]]],"props":[{"name":"topic","description":"The new topic of the stage instance","optional":true,"type":[[["string"]]]},{"name":"privacyLevel","description":"The new privacy level of the stage instance","optional":true,"type":[[["PrivacyLevel"]],[["number"]]]}],"meta":{"line":106,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"ThreadChannelResolvable","description":"Data that can be resolved to a Thread Channel object. This can be:\n* A ThreadChannel object\n* A Snowflake","type":[[["ThreadChannel"]],[["Snowflake"]]],"meta":{"line":36,"file":"ThreadManager.js","path":"src/managers"}},{"name":"FetchThreadsOptions","description":"Options for fetching multiple threads.","type":[[["Object"]]],"props":[{"name":"archived","description":"The options used to fetch archived threads","optional":true,"type":[[["FetchArchivedThreadOptions"]]]}],"meta":{"line":61,"file":"ThreadManager.js","path":"src/managers"}},{"name":"DateResolvable","description":"Data that can be resolved to a Date object. This can be:\n* A Date object\n* A number representing a timestamp\n* An [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) string","type":[[["Date"]],[["number"]],[["string"]]],"meta":{"line":90,"file":"ThreadManager.js","path":"src/managers"}},{"name":"FetchArchivedThreadOptions","description":"The options used to fetch archived threads.","type":[[["Object"]]],"props":[{"name":"type","description":"The type of threads to fetch, either `public` or `private`","optional":true,"default":"'public'","type":[[["string"]]]},{"name":"fetchAll","description":"Whether to fetch **all** archived threads when type is `private`.\nRequires `MANAGE_THREADS` if true","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"before","description":"Only return threads that were archived before this Date\nor Snowflake. Must be a {@link ThreadChannelResolvable} when type is `private` and fetchAll is `false`","optional":true,"type":[[["DateResolvable"]],[["ThreadChannelResolvable"]]]},{"name":"limit","description":"Maximum number of threads to return","optional":true,"type":[[["number"]]]}],"meta":{"line":98,"file":"ThreadManager.js","path":"src/managers"}},{"name":"FetchedThreads","description":"The data returned from a thread fetch that returns multiple threads.","type":[[["Object"]]],"props":[{"name":"threads","description":"The threads that were fetched, with any members returned","type":[[["Collection","<"],["Snowflake",", "],["ThreadChannel",">"]]]},{"name":"hasMore","description":"Whether there are potentially additional threads that require a subsequent call","nullable":true,"type":[[["boolean"]]]}],"meta":{"line":109,"file":"ThreadManager.js","path":"src/managers"}},{"name":"FetchChannelThreadsOptions","description":"Discord.js self-bot specific options field for fetching active threads.","type":[[["Object"]]],"props":[{"name":"archived","description":"Whether to fetch archived threads (default is false)","optional":true,"type":[[["boolean"]]]},{"name":"sortBy","description":"The order in which the threads should be fetched in (default is last_message_time)","optional":true,"type":[[["string"]]]},{"name":"sortOrder","description":"How the threads should be ordered (default is desc)","optional":true,"type":[[["string"]]]},{"name":"limit","description":"The maximum number of threads to return (default is 25)","optional":true,"type":[[["number"]]]},{"name":"offset","description":"The number of threads to offset fetching (useful when making multiple fetches) (default is 0)","optional":true,"type":[[["number"]]]}],"meta":{"line":152,"file":"ThreadManager.js","path":"src/managers"}},{"name":"ThreadMemberResolvable","description":"Data that resolves to give a ThreadMember object. This can be:\n* A ThreadMember object\n* A User resolvable","type":[[["ThreadMember"]],[["UserResolvable"]]],"meta":{"line":60,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"FetchThreadMemberOptions","description":"Options used to fetch a thread member.","type":[[["BaseFetchOptions"]]],"props":[{"name":"withMember","description":"Whether to also return the guild member associated with this thread member","optional":true,"type":[[["boolean"]]]}],"meta":{"line":135,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"FetchThreadMembersWithGuildMemberDataOptions","description":"Options used to fetch multiple thread members with guild member data.\nWith `withMember` set to `true`, pagination is enabled.","type":[[["Object"]]],"props":[{"name":"withMember","description":"Whether to also return the guild member data","type":[[["true"]]]},{"name":"after","description":"Consider only thread members after this id","optional":true,"type":[[["Snowflake"]]]},{"name":"limit","description":"The maximum number of thread members to return","optional":true,"type":[[["number"]]]},{"name":"cache","description":"Whether to cache the fetched thread members and guild members","optional":true,"type":[[["boolean"]]]}],"meta":{"line":141,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"FetchThreadMembersWithoutGuildMemberDataOptions","description":"Options used to fetch multiple thread members without guild member data.","type":[[["Object"]]],"props":[{"name":"withMember","description":"Whether to also return the guild member data","optional":true,"type":[[["false"]]]},{"name":"cache","description":"Whether to cache the fetched thread members","optional":true,"type":[[["boolean"]]]}],"meta":{"line":151,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"FetchThreadMembersOptions","description":"Options used to fetch multiple thread members.","type":[[["FetchThreadMembersWithGuildMemberDataOptions"]],[["FetchThreadMembersWithoutGuildMemberDataOptions"]]],"meta":{"line":158,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"UserResolvable","description":"Data that resolves to give a User object. This can be:\n* A User object\n* A Snowflake\n* A Message object (resolves to the message author)\n* A GuildMember object\n* A ThreadMember object","type":[[["User"]],[["Snowflake"]],[["Message"]],[["GuildMember"]],[["ThreadMember"]]],"meta":{"line":25,"file":"UserManager.js","path":"src/managers"}},{"name":"Captcha","type":[[["Object"]]],"props":[{"name":"captcha_key","description":"['message']","type":[[["Array","<"],["string",">"]]]},{"name":"captcha_sitekey","description":"Captcha sitekey (hcaptcha)","type":[[["string"]]]},{"name":"captcha_service","description":"hcaptcha","type":[[["string"]]]},{"name":"captcha_rqdata","optional":true,"type":[[["string"]]]},{"name":"captcha_rqtoken","optional":true,"type":[[["string"]]]}],"meta":{"line":38,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"HTTPErrorData","description":"The HTTP data that was sent to Discord","type":[[["Object"]]],"props":[{"name":"json","description":"The JSON data that was sent","type":[["*"]]},{"name":"files","description":"The files that were sent with this request, if any","type":[[["Array","<"],["HTTPAttachmentData",">"]]]}],"meta":{"line":35,"file":"HTTPError.js","path":"src/rest"}},{"name":"HTTPAttachmentData","description":"The attachment data that is sent to Discord","type":[[["Object"]]],"props":[{"name":"attachment","description":"The source of this attachment data","type":[[["string"]],[["Buffer"]],[["Stream"]]]},{"name":"name","description":"The file name","type":[[["string"]]]},{"name":"file","description":"The file buffer","type":[[["Buffer"]],[["Stream"]]]}],"meta":{"line":42,"file":"HTTPError.js","path":"src/rest"}},{"name":"APIRequest","description":"Represents a request that will or has been made to the Discord API","type":[[["Object"]]],"props":[{"name":"method","description":"The HTTP method used in this request","type":[[["HTTPMethod"]]]},{"name":"path","description":"The full path used to make the request","type":[[["string"]]]},{"name":"route","description":"The API route identifying the rate limit for this request","type":[[["string"]]]},{"name":"options","description":"Additional options for this request","type":[[["Object"]]]},{"name":"retries","description":"The number of times this request has been attempted","type":[[["number"]]]}],"meta":{"line":177,"file":"RequestHandler.js","path":"src/rest"}},{"name":"InvalidRequestWarningData","type":[[["Object"]]],"props":[{"name":"count","description":"Number of invalid requests that have been made in the window","type":[[["number"]]]},{"name":"remainingTime","description":"Time in milliseconds remaining before the count resets","type":[[["number"]]]}],"meta":{"line":291,"file":"RequestHandler.js","path":"src/rest"}},{"name":"ShardRespawnOptions","description":"Options used to respawn a shard.","type":[[["Object"]]],"props":[{"name":"delay","description":"How long to wait between killing the process/worker and\nrestarting it (in milliseconds)","optional":true,"default":500,"type":[[["number"]]]},{"name":"timeout","description":"The amount in milliseconds to wait until the {@link Client}\nhas become ready before resolving (`-1` or `Infinity` for no wait)","optional":true,"default":30000,"type":[[["number"]]]}],"meta":{"line":191,"file":"Shard.js","path":"src/sharding"}},{"name":"ShardingManagerMode","description":"The mode to spawn shards with for a {@link ShardingManager}. Can be either one of:\n* 'process' to use child processes\n* 'worker' to use [Worker threads](https://nodejs.org/api/worker_threads.html)","type":[[["string"]]],"meta":{"line":23,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"ShardingManagerOptions","description":"The options to spawn shards with for a {@link ShardingManager}.","type":[[["Object"]]],"props":[{"name":"totalShards","description":"Number of total shards of all shard managers or \"auto\"","optional":true,"default":"'auto'","type":[[["string"]],[["number"]]]},{"name":"shardList","description":"List of shards to spawn or \"auto\"","optional":true,"default":"'auto'","type":[[["string"]],[["Array","<"],["number",">"]]]},{"name":"mode","description":"Which mode to use for shards","optional":true,"default":"'process'","type":[[["ShardingManagerMode"]]]},{"name":"respawn","description":"Whether shards should automatically respawn upon exiting","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"shardArgs","description":"Arguments to pass to the shard script when spawning\n(only available when mode is set to 'process')","optional":true,"default":"[]","type":[[["Array","<"],["string",">"]]]},{"name":"execArgv","description":"Arguments to pass to the shard script executable when spawning\n(only available when mode is set to 'process')","optional":true,"default":"[]","type":[[["Array","<"],["string",">"]]]},{"name":"token","description":"Token to use for automatic shard count and passing to shards","optional":true,"type":[[["string"]]]}],"meta":{"line":30,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"MultipleShardSpawnOptions","description":"Options used to spawn multiple shards.","type":[[["Object"]]],"props":[{"name":"amount","description":"Number of shards to spawn","optional":true,"default":"this.totalShards","type":[[["number"]],[["string"]]]},{"name":"delay","description":"How long to wait in between spawning each shard (in milliseconds)","optional":true,"default":5500,"type":[[["number"]]]},{"name":"timeout","description":"The amount in milliseconds to wait until the {@link Client} has become ready","optional":true,"default":30000,"type":[[["number"]]]}],"meta":{"line":170,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"BroadcastEvalOptions","description":"Options for {@link ShardingManager#broadcastEval} and {@link ShardClientUtil#broadcastEval}.","type":[[["Object"]]],"props":[{"name":"shard","description":"Shard to run script on, all if undefined","optional":true,"type":[[["number"]]]},{"name":"context","description":"The JSON-serializable values to call the script with","optional":true,"type":[["*"]]}],"meta":{"line":237,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"MultipleShardRespawnOptions","description":"Options used to respawn all shards.","type":[[["Object"]]],"props":[{"name":"shardDelay","description":"How long to wait between shards (in milliseconds)","optional":true,"default":5000,"type":[[["number"]]]},{"name":"respawnDelay","description":"How long to wait between killing a shard's process and restarting it\n(in milliseconds)","optional":true,"default":500,"type":[[["number"]]]},{"name":"timeout","description":"The amount in milliseconds to wait for a shard to become ready before\ncontinuing to another (`-1` or `Infinity` for no wait)","optional":true,"default":30000,"type":[[["number"]]]}],"meta":{"line":292,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"ApplicationCommandData","description":"Data for creating or editing an application command.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the command","type":[[["string"]]]},{"name":"nameLocalizations","description":"The localizations for the command name","optional":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]]},{"name":"description","description":"The description of the command","type":[[["string"]]]},{"name":"descriptionLocalizations","description":"The localizations for the command description","optional":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]]},{"name":"type","description":"The type of the command","optional":true,"type":[[["ApplicationCommandType"]]]},{"name":"options","description":"Options for the command","optional":true,"type":[[["Array","<"],["ApplicationCommandOptionData",">"]]]},{"name":"defaultPermission","description":"Whether the command is enabled by default when the app is added to a guild","optional":true,"type":[[["boolean"]]]},{"name":"defaultMemberPermissions","description":"The bitfield used to determine the default permissions\na member needs in order to run the command","optional":true,"nullable":true,"type":[[["PermissionResolvable"]]]},{"name":"dmPermission","description":"Whether the command is enabled in DMs","optional":true,"type":[[["boolean"]]]}],"meta":{"line":213,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"ApplicationCommandOptionData","description":"An option for an application command or subcommand.\nIn addition to the listed properties, when used as a parameter,\nAPI style `snake_case` properties can be used for compatibility with generators like `@discordjs/builders`.\nNote that providing a value for the `camelCase` counterpart for any `snake_case` property\nwill discard the provided `snake_case` property.","type":[[["Object"]]],"props":[{"name":"type","description":"The type of the option","type":[[["ApplicationCommandOptionType"]],[["number"]]]},{"name":"name","description":"The name of the option","type":[[["string"]]]},{"name":"nameLocalizations","description":"The name localizations for the option","optional":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]]},{"name":"description","description":"The description of the option","type":[[["string"]]]},{"name":"descriptionLocalizations","description":"The description localizations for the option","optional":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]]},{"name":"autocomplete","description":"Whether the option is an autocomplete option","optional":true,"type":[[["boolean"]]]},{"name":"required","description":"Whether the option is required","optional":true,"type":[[["boolean"]]]},{"name":"choices","description":"The choices of the option for the user to pick from","optional":true,"type":[[["Array","<"],["ApplicationCommandOptionChoiceData",">"]]]},{"name":"options","description":"Additional options if this option is a subcommand (group)","optional":true,"type":[[["Array","<"],["ApplicationCommandOptionData",">"]]]},{"name":"channelTypes","description":"When the option type is channel,\nthe allowed types of channels that can be selected","optional":true,"type":[[["Array","<"],["ChannelType",">"]],[["Array","<"],["number",">"]]]},{"name":"minValue","description":"The minimum value for an `INTEGER` or `NUMBER` option","optional":true,"type":[[["number"]]]},{"name":"maxValue","description":"The maximum value for an `INTEGER` or `NUMBER` option","optional":true,"type":[[["number"]]]},{"name":"minLength","description":"The minimum length for a `STRING` option\n(maximum of `6000`)","optional":true,"type":[[["number"]]]},{"name":"maxLength","description":"The maximum length for a `STRING` option\n(maximum of `6000`)","optional":true,"type":[[["number"]]]}],"meta":{"line":228,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"ApplicationCommandOptionChoiceData","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the choice","type":[[["string"]]]},{"name":"nameLocalizations","description":"The localized names for this choice","optional":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]]},{"name":"value","description":"The value of the choice","type":[[["string"]],[["number"]]]}],"meta":{"line":254,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"ApplicationCommandOption","description":"An option for an application command or subcommand.","type":[[["Object"]]],"props":[{"name":"type","description":"The type of the option","type":[[["ApplicationCommandOptionType"]]]},{"name":"name","description":"The name of the option","type":[[["string"]]]},{"name":"nameLocalizations","description":"The localizations for the option name","optional":true,"type":[[["Object","<"],["string",", "],["string",">"]]]},{"name":"nameLocalized","description":"The localized name for this option","optional":true,"type":[[["string"]]]},{"name":"description","description":"The description of the option","type":[[["string"]]]},{"name":"descriptionLocalizations","description":"The localizations for the option description","optional":true,"type":[[["Object","<"],["string",", "],["string",">"]]]},{"name":"descriptionLocalized","description":"The localized description for this option","optional":true,"type":[[["string"]]]},{"name":"required","description":"Whether the option is required","optional":true,"type":[[["boolean"]]]},{"name":"autocomplete","description":"Whether the option is an autocomplete option","optional":true,"type":[[["boolean"]]]},{"name":"choices","description":"The choices of the option for the user to pick from","optional":true,"type":[[["Array","<"],["ApplicationCommandOptionChoice",">"]]]},{"name":"options","description":"Additional options if this option is a subcommand (group)","optional":true,"type":[[["Array","<"],["ApplicationCommandOption",">"]]]},{"name":"channelTypes","description":"When the option type is channel,\nthe allowed types of channels that can be selected","optional":true,"type":[[["Array","<"],["ChannelType",">"]]]},{"name":"minValue","description":"The minimum value for an `INTEGER` or `NUMBER` option","optional":true,"type":[[["number"]]]},{"name":"maxValue","description":"The maximum value for an `INTEGER` or `NUMBER` option","optional":true,"type":[[["number"]]]},{"name":"minLength","description":"The minimum length for a `STRING` option\n(maximum of `6000`)","optional":true,"type":[[["number"]]]},{"name":"maxLength","description":"The maximum length for a `STRING` option\n(maximum of `6000`)","optional":true,"type":[[["number"]]]}],"meta":{"line":520,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"ApplicationCommandOptionChoice","description":"A choice for an application command option.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the choice","type":[[["string"]]]},{"name":"nameLocalized","description":"The localized name of the choice in the provided locale, if any","nullable":true,"type":[[["string"]]]},{"name":"nameLocalizations","description":"The localized names for this choice","optional":true,"nullable":true,"type":[[["Object","<"],["string",", "],["string",">"]]]},{"name":"value","description":"The value of the choice","type":[[["string"]],[["number"]]]}],"meta":{"line":544,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"AutoModerationTriggerMetadata","description":"Additional data used to determine whether an auto moderation rule should be triggered.","type":[[["Object"]]],"props":[{"name":"keywordFilter","description":"The substrings that will be searched for in the content","type":[[["Array","<"],["string",">"]]]},{"name":"regexPatterns","description":"The regular expression patterns which will be matched against the content\nOnly Rust-flavored regular expressions are supported.","type":[[["Array","<"],["string",">"]]]},{"name":"presets","description":"The internally pre-defined wordsets which will be searched for in the content","type":[[["Array","<"],["AutoModerationRuleKeywordPresetType",">"]]]},{"name":"allowList","description":"The substrings that will be exempt from triggering\n{@link AutoModerationRuleTriggerType.KEYWORD} and {@link AutoModerationRuleTriggerType.KEYWORD_PRESET}","type":[[["Array","<"],["string",">"]]]},{"name":"mentionTotalLimit","description":"The total number of role & user mentions allowed per message","nullable":true,"type":[[["number"]]]},{"name":"mentionRaidProtectionEnabled","description":"Whether mention raid protection is enabled","type":[[["boolean"]]]}],"meta":{"line":65,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"AutoModerationAction","description":"An object containing information about an auto moderation rule action.","type":[[["Object"]]],"props":[{"name":"type","description":"The type of this auto moderation rule action","type":[[["AutoModerationActionType"]]]},{"name":"metadata","description":"Additional metadata needed during execution","type":[[["AutoModerationActionMetadata"]]]}],"meta":{"line":94,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"AutoModerationActionMetadata","description":"Additional data used when an auto moderation rule is executed.","type":[[["Object"]]],"props":[{"name":"channelId","description":"The id of the channel to which content will be logged","nullable":true,"type":[[["Snowflake"]]]},{"name":"durationSeconds","description":"The timeout duration in seconds","nullable":true,"type":[[["number"]]]},{"name":"customMessage","description":"The custom message that is shown whenever a message is blocked","nullable":true,"type":[[["string"]]]}],"meta":{"line":101,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"CommandInteractionResolvedData","description":"Represents the resolved data of a received command interaction.","type":[[["Object"]]],"props":[{"name":"users","description":"The resolved users","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]]},{"name":"members","description":"The resolved guild members","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["GuildMember","|"],["APIGuildMember",")>"]]]},{"name":"roles","description":"The resolved roles","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["Role","|"],["APIRole",")>"]]]},{"name":"channels","description":"The resolved channels","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["Channel","|"],["APIChannel",")>"]]]},{"name":"messages","description":"The resolved messages","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["Message","|"],["APIMessage",")>"]]]},{"name":"attachments","description":"The resolved attachments","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["MessageAttachment",">"]]]}],"meta":{"line":72,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"CommandInteractionOption","description":"Represents an option of a received command interaction.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the option","type":[[["string"]]]},{"name":"type","description":"The type of the option","type":[[["ApplicationCommandOptionType"]]]},{"name":"autocomplete","description":"Whether the option is an autocomplete option","optional":true,"type":[[["boolean"]]]},{"name":"value","description":"The value of the option","optional":true,"type":[[["string"]],[["number"]],[["boolean"]]]},{"name":"options","description":"Additional options if this option is a\nsubcommand (group)","optional":true,"type":[[["Array","<"],["CommandInteractionOption",">"]]]},{"name":"user","description":"The resolved user","optional":true,"type":[[["User"]]]},{"name":"member","description":"The resolved member","optional":true,"type":[[["GuildMember"]],[["APIGuildMember"]]]},{"name":"channel","description":"The resolved channel","optional":true,"type":[[["GuildChannel"]],[["ThreadChannel"]],[["APIChannel"]]]},{"name":"role","description":"The resolved role","optional":true,"type":[[["Role"]],[["APIRole"]]]},{"name":"attachment","description":"The resolved attachment","optional":true,"type":[[["MessageAttachment"]]]}],"meta":{"line":139,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"ApplicationResolvable","description":"Data that can be resolved to an Application. This can be:\n* An Application\n* An Activity with associated Application\n* A Snowflake","type":[[["Application"]],[["Snowflake"]]],"meta":{"line":134,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"CreateInviteOptions","description":"Options used to create an invite to a guild channel.","type":[[["Object"]]],"props":[{"name":"temporary","description":"Whether members that joined via the invite should be automatically\nkicked after 24 hours if they have not yet received a role","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"maxAge","description":"How long the invite should last (in seconds, 0 for forever)","optional":true,"default":86400,"type":[[["number"]]]},{"name":"maxUses","description":"Maximum number of uses","optional":true,"default":0,"type":[[["number"]]]},{"name":"unique","description":"Create a unique invite, or use an existing one with similar settings","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"targetUser","description":"The user whose stream to display for this invite,\nrequired if `targetType` is 1, the user must be streaming in the channel","optional":true,"type":[[["UserResolvable"]]]},{"name":"targetApplication","description":"The embedded application to open for this invite,\nrequired if `targetType` is 2, the application must have the `EMBEDDED` flag","optional":true,"type":[[["ApplicationResolvable"]]]},{"name":"targetType","description":"The type of the target for this voice channel invite","optional":true,"type":[[["TargetType"]]]},{"name":"reason","description":"The reason for creating the invite","optional":true,"type":[[["string"]]]}],"meta":{"line":142,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"BaseMessageComponentOptions","description":"Options for a BaseMessageComponent","type":[[["Object"]]],"props":[{"name":"type","description":"The type of this component","type":[[["MessageComponentTypeResolvable"]]]}],"meta":{"line":11,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"MessageComponentOptions","description":"Data that can be resolved into options for a component. This can be:\n* MessageActionRowOptions\n* MessageButtonOptions\n* MessageSelectMenuOptions\n* TextInputComponentOptions","type":[[["MessageActionRowOptions"]],[["MessageButtonOptions"]],[["MessageSelectMenuOptions"]]],"meta":{"line":17,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"MessageComponent","description":"Components that can be sent in a payload. These can be:\n* MessageActionRow\n* MessageButton\n* MessageSelectMenu\n* TextInputComponent","see":["{@link https://discord.com/developers/docs/interactions/message-components#component-object-component-types}"],"type":[[["MessageActionRow"]],[["MessageButton"]],[["MessageSelectMenu"]]],"meta":{"line":26,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"MessageComponentTypeResolvable","description":"Data that can be resolved to a MessageComponentType. This can be:\n* MessageComponentType\n* string\n* number","type":[[["string"]],[["number"]],[["MessageComponentType"]]],"meta":{"line":36,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"CategoryCreateChannelOptions","description":"Options for creating a channel using {@link CategoryChannel#createChannel}.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the new channel","optional":true,"type":[[["string"]]]},{"name":"type","description":"The type of the new channel.","optional":true,"default":"'GUILD_TEXT'","type":[[["ChannelType"]],[["number"]]]},{"name":"position","description":"Position of the new channel","optional":true,"type":[[["number"]]]},{"name":"topic","description":"The topic for the new channel","optional":true,"type":[[["string"]]]},{"name":"nsfw","description":"Whether the new channel is NSFW","optional":true,"type":[[["boolean"]]]},{"name":"bitrate","description":"Bitrate of the new channel in bits (only voice)","optional":true,"type":[[["number"]]]},{"name":"userLimit","description":"Maximum amount of users allowed in the new channel (only voice)","optional":true,"type":[[["number"]]]},{"name":"permissionOverwrites","description":"Permission overwrites of the new channel","optional":true,"type":[[["Array","<"],["OverwriteResolvable",">"]],[["Collection","<"],["Snowflake",", "],["OverwriteResolvable",">"]]]},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for the new channel in seconds","optional":true,"type":[[["number"]]]},{"name":"defaultAutoArchiveDuration","description":"The default auto archive duration for all new threads in this channel","optional":true,"type":[[["ThreadAutoArchiveDuration"]]]},{"name":"rtcRegion","description":"The specific region of the new channel","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"videoQualityMode","description":"The camera video quality mode of the new channel","optional":true,"type":[[["VideoQualityMode"]],[["number"]]]},{"name":"flags","description":"The flags to set on the new channel","optional":true,"type":[[["ChannelFlagsResolvable"]]]},{"name":"availableTags","description":"The tags to set as available in a forum channel","optional":true,"type":[[["Array","<"],["GuildForumTagData",">"]]]},{"name":"defaultReactionEmoji","description":"The emoji to set as the default reaction emoji","optional":true,"nullable":true,"type":[[["DefaultReactionEmoji"]]]},{"name":"defaultThreadRateLimitPerUser","description":"The rate limit per user (slowmode) to set on forum posts","optional":true,"type":[[["number"]]]},{"name":"defaultSortOrder","description":"The default sort order mode to set on the new channel","optional":true,"nullable":true,"type":[[["SortOrderType"]]]},{"name":"defaultThreadRateLimitPerUser","description":"The initial rate limit per user (slowmode)\nto set on newly created threads in a channel.","optional":true,"type":[[["number"]]]},{"name":"reason","description":"Reason for creating the new channel","optional":true,"type":[[["string"]]]}],"meta":{"line":43,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"ClientApplicationInstallParams","type":[[["Object"]]],"props":[{"name":"scopes","description":"The scopes to add the application to the server with","type":[[["Array","<"],["InviteScope",">"]]]},{"name":"permissions","description":"The permissions this bot will request upon joining","type":[[["Readonly","<"],["Permissions",">"]]]}],"meta":{"line":12,"file":"ClientApplication.js","path":"src/structures"}},{"name":"ApplicationRoleConnectionMetadataEditOptions","description":"Data for creating or editing an application role connection metadata.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the metadata field","type":[[["string"]]]},{"name":"nameLocalizations","description":"The name localizations for the metadata field","optional":true,"nullable":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]]},{"name":"description","description":"The description of the metadata field","type":[[["string"]]]},{"name":"descriptionLocalizations","description":"The description localizations for the metadata field","optional":true,"nullable":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]]},{"name":"key","description":"The dictionary key of the metadata field","type":[[["string"]]]},{"name":"type","description":"The type of the metadata field","type":[[["ApplicationRoleConnectionMetadataType"]]]}],"meta":{"line":470,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"ClientUserEditData","description":"Data used to edit the logged in client","type":[[["Object"]]],"props":[{"name":"username","description":"The new username","optional":true,"type":[[["string"]]]},{"name":"avatar","description":"The new avatar","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"banner","description":"The new banner","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"bio","description":"The new bio","optional":true,"nullable":true,"type":[[["string"]]]}],"meta":{"line":142,"file":"ClientUser.js","path":"src/structures"}},{"name":"ActivitiesOptions","description":"Options for setting activities","type":[[["Object"]]],"props":[{"name":"name","description":"Name of the activity","type":[[["string"]]]},{"name":"state","description":"State of the activity","optional":true,"type":[[["string"]]]},{"name":"type","description":"Type of the activity","optional":true,"type":[[["ActivityType"]],[["number"]]]},{"name":"url","description":"Twitch / YouTube stream URL","optional":true,"type":[[["string"]]]}],"meta":{"line":381,"file":"ClientUser.js","path":"src/structures"}},{"name":"PresenceData","description":"Data resembling a raw Discord presence.","type":[[["Object"]]],"props":[{"name":"status","description":"Status of the user","optional":true,"type":[[["PresenceStatusData"]]]},{"name":"afk","description":"Whether the user is AFK","optional":true,"type":[[["boolean"]]]},{"name":"activities","description":"Activity the user is playing","optional":true,"type":[[["Array","<"],["ActivitiesOptions",">"]],[["Array","<"],["CustomStatus",">"]],[["Array","<"],["RichPresence",">"]],[["Array","<"],["SpotifyRPC",">"]]]},{"name":"shardId","description":"Shard id(s) to have the activity set on","optional":true,"type":[[["number"]],[["Array","<"],["number",">"]]]}],"meta":{"line":390,"file":"ClientUser.js","path":"src/structures"}},{"name":"PresenceStatusData","description":"A user's status. Must be one of:\n* `online`\n* `idle`\n* `invisible`\n* `dnd` (do not disturb)","type":[[["string"]]],"meta":{"line":412,"file":"ClientUser.js","path":"src/structures"}},{"name":"ActivityOptions","description":"Options for setting an activity.","type":[[["Object"]]],"props":[{"name":"name","description":"Name of the activity","type":[[["string"]]]},{"name":"url","description":"Twitch / YouTube stream URL","optional":true,"type":[[["string"]]]},{"name":"type","description":"Type of the activity","optional":true,"type":[[["ActivityType"]],[["number"]]]},{"name":"shardId","description":"Shard Id(s) to have the activity set on","optional":true,"type":[[["number"]],[["Array","<"],["number",">"]]]}],"meta":{"line":434,"file":"ClientUser.js","path":"src/structures"}},{"name":"AutocompleteFocusedOption","description":"The full autocomplete option object.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the option","type":[[["string"]]]},{"name":"type","description":"The type of the application command option","type":[[["ApplicationCommandOptionType"]]]},{"name":"value","description":"The value of the option","type":[[["string"]]]},{"name":"focused","description":"Whether this option is currently in focus for autocomplete","type":[[["boolean"]]]}],"meta":{"line":243,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"Tester","type":[[["Object"]]],"props":[{"name":"state","description":"The state of the tester (2: Accepted, 1: Pending)","type":[[["number"]]]},{"name":"user","description":"The user that the tester is","type":[[["User"]]]}],"meta":{"line":174,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"ApplicationAsset","description":"Asset data.","type":[[["Object"]]],"props":[{"name":"id","description":"The asset's id","type":[[["Snowflake"]]]},{"name":"name","description":"The asset's name","type":[[["string"]]]},{"name":"type","description":"The asset's type","type":[[["string"]]]}],"meta":{"line":142,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"ApplicationEditData","description":"The data for editing a application.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the app","optional":true,"type":[[["string"]]]},{"name":"description","description":"The description of the app","optional":true,"type":[[["string"]]]},{"name":"icon","description":"The icon of the app","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"cover","description":"The application's default rich presence invite","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"botPublic","description":"When false only app owner can join the app's bot to guilds","optional":true,"type":[[["boolean"]]]},{"name":"botRequireCodeGrant","description":"When true the app's bot will only join upon completion of the full oauth2 code grant flow","optional":true,"type":[[["boolean"]]]},{"name":"TermsOfService","description":"ToS URL","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"PrivacyPolicy","description":"Privacy policy URL","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"flags","description":"The application's public flags","optional":true,"type":[[["number"]]]},{"name":"redirectURIs","description":"Redirect URIs (OAuth2 only)","optional":true,"type":[[["Array","<"],["string",">"]]]},{"name":"tags","description":"Up to 5 tags describing the content and functionality of the application","optional":true,"type":[[["Array","<"],["string",">"]]]}],"meta":{"line":334,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"RawEmoji","description":"Represents raw emoji data from the API","type":[[["APIEmoji"]]],"props":[{"name":"id","description":"The emoji's id","nullable":true,"type":[[["Snowflake"]]]},{"name":"name","description":"The emoji's name","nullable":true,"type":[[["string"]]]},{"name":"animated","description":"Whether the emoji is animated","nullable":true,"type":[[["boolean"]]]}],"meta":{"line":15,"file":"Emoji.js","path":"src/structures"}},{"name":"GuildForumTagEmoji","type":[[["Object"]]],"props":[{"name":"id","description":"The id of a guild's custom emoji","nullable":true,"type":[[["Snowflake"]]]},{"name":"name","description":"The unicode character of the emoji","nullable":true,"type":[[["string"]]]}],"meta":{"line":10,"file":"ForumChannel.js","path":"src/structures"}},{"name":"GuildForumTag","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the tag","type":[[["Snowflake"]]]},{"name":"name","description":"The name of the tag","type":[[["string"]]]},{"name":"moderated","description":"Whether this tag can only be added to or removed from threads\nby a member with the `ManageThreads` permission","type":[[["boolean"]]]},{"name":"emoji","description":"The emoji of this tag","nullable":true,"type":[[["GuildForumTagEmoji"]]]}],"meta":{"line":16,"file":"ForumChannel.js","path":"src/structures"}},{"name":"GuildForumTagData","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the tag","optional":true,"type":[[["Snowflake"]]]},{"name":"name","description":"The name of the tag","type":[[["string"]]]},{"name":"moderated","description":"Whether this tag can only be added to or removed from threads\nby a member with the `ManageThreads` permission","optional":true,"type":[[["boolean"]]]},{"name":"emoji","description":"The emoji of this tag","optional":true,"nullable":true,"type":[[["GuildForumTagEmoji"]]]}],"meta":{"line":25,"file":"ForumChannel.js","path":"src/structures"}},{"name":"DefaultReactionEmoji","type":[[["Object"]]],"props":[{"name":"id","description":"The id of a guild's custom emoji","nullable":true,"type":[[["Snowflake"]]]},{"name":"name","description":"The unicode character of the emoji","nullable":true,"type":[[["string"]]]}],"meta":{"line":34,"file":"ForumChannel.js","path":"src/structures"}},{"name":"Features","description":"An array of enabled guild features, here are the possible values:\n* ANIMATED_ICON\n* AUTO_MODERATION\n* BANNER\n* CLYDE_ENABLED\n `CLYDE_ENABLED` is now an experimental feature of Discord.\nSee [this](https://rollouts.advaith.io/#2023-03_clyde_ai) for more information.\n* COMMERCE\n* COMMUNITY\n* CREATOR_MONETIZABLE_PROVISIONAL\n* CREATOR_STORE_PAGE\n* DISCOVERABLE\n* FEATURABLE\n* INVITES_DISABLED\n* INVITE_SPLASH\n* MEMBER_VERIFICATION_GATE_ENABLED\n* NEWS\n* PARTNERED\n* PREVIEW_ENABLED\n* VANITY_URL\n* VERIFIED\n* VIP_REGIONS\n* WELCOME_SCREEN_ENABLED\n* TICKETED_EVENTS_ENABLED\n* MONETIZATION_ENABLED\n`MONETIZATION_ENABLED` has been replaced.\nSee [this pull request](https://github.com/discord/discord-api-docs/pull/5724) for more information.\n* MORE_STICKERS\n* THREE_DAY_THREAD_ARCHIVE\n* SEVEN_DAY_THREAD_ARCHIVE\n* RAID_ALERTS_DISABLED\n* PRIVATE_THREADS\n* ROLE_ICONS\n* ROLE_SUBSCRIPTIONS_AVAILABLE_FOR_PURCHASE\n* ROLE_SUBSCRIPTIONS_ENABLED","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-guild-features}"],"type":[[["string"]]],"meta":{"line":226,"file":"Guild.js","path":"src/structures"}},{"name":"Vanity","description":"An object containing information about a guild's vanity invite.","type":[[["Object"]]],"props":[{"name":"code","description":"Vanity invite code","nullable":true,"type":[[["string"]]]},{"name":"uses","description":"How many times this invite has been used","type":[[["number"]]]}],"meta":{"line":756,"file":"Guild.js","path":"src/structures"}},{"name":"GuildWidgetSettings","description":"Data for the Guild Widget Settings object.","type":[[["Object"]]],"props":[{"name":"enabled","description":"Whether the widget is enabled","type":[[["boolean"]]]},{"name":"channel","description":"The widget invite channel","nullable":true,"type":[[["GuildChannel"]]]}],"meta":{"line":814,"file":"Guild.js","path":"src/structures"}},{"name":"GuildWidgetSettingsData","description":"The Guild Widget Settings object.","type":[[["Object"]]],"props":[{"name":"enabled","description":"Whether the widget is enabled","type":[[["boolean"]]]},{"name":"channel","description":"The widget invite channel","nullable":true,"type":[[["GuildChannelResolvable"]]]}],"meta":{"line":821,"file":"Guild.js","path":"src/structures"}},{"name":"GuildAuditLogsFetchOptions","description":"Options used to fetch audit logs.","type":[[["Object"]]],"props":[{"name":"before","description":"Consider only entries before this entry","optional":true,"type":[[["Snowflake"]],[["GuildAuditLogsEntry"]]]},{"name":"after","description":"Consider only entries after this entry","optional":true,"type":[[["Snowflake"]],[["GuildAuditLogsEntry"]]]},{"name":"limit","description":"The number of entries to return","optional":true,"type":[[["number"]]]},{"name":"user","description":"Only return entries for actions made by this user","optional":true,"type":[[["UserResolvable"]]]},{"name":"type","description":"Only return entries for this action type","optional":true,"type":[[["AuditLogAction"]],[["number"]]]}],"meta":{"line":847,"file":"Guild.js","path":"src/structures"}},{"name":"GuildEditData","description":"The data for editing a guild.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the guild","optional":true,"type":[[["string"]]]},{"name":"verificationLevel","description":"The verification level of the guild","optional":true,"nullable":true,"type":[[["VerificationLevel"]],[["number"]]]},{"name":"explicitContentFilter","description":"The level of the explicit content filter","optional":true,"nullable":true,"type":[[["ExplicitContentFilterLevel"]],[["number"]]]},{"name":"afkChannel","description":"The AFK channel of the guild","optional":true,"nullable":true,"type":[[["VoiceChannelResolvable"]]]},{"name":"systemChannel","description":"The system channel of the guild","optional":true,"nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"afkTimeout","description":"The AFK timeout of the guild","optional":true,"type":[[["number"]]]},{"name":"icon","description":"The icon of the guild","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"owner","description":"The owner of the guild","optional":true,"type":[[["GuildMemberResolvable"]]]},{"name":"splash","description":"The invite splash image of the guild","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"discoverySplash","description":"The discovery splash image of the guild","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"banner","description":"The banner of the guild","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"defaultMessageNotifications","description":"The default message notification\nlevel of the guild","optional":true,"nullable":true,"type":[[["DefaultMessageNotificationLevel"]],[["number"]]]},{"name":"systemChannelFlags","description":"The system channel flags of the guild","optional":true,"type":[[["SystemChannelFlagsResolvable"]]]},{"name":"rulesChannel","description":"The rules channel of the guild","optional":true,"nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"publicUpdatesChannel","description":"The community updates channel of the guild","optional":true,"nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"preferredLocale","description":"The preferred locale of the guild","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"safetyAlertsChannel","description":"The safety alerts channel of the guild","optional":true,"nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"premiumProgressBarEnabled","description":"Whether the guild's premium progress bar is enabled","optional":true,"type":[[["boolean"]]]},{"name":"description","description":"The discovery description of the guild","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"features","description":"The features of the guild","optional":true,"type":[[["Array","<"],["Features",">"]]]}],"meta":{"line":880,"file":"Guild.js","path":"src/structures"}},{"name":"TextChannelResolvable","description":"Data that can be resolved to a Text Channel object. This can be:\n* A TextChannel\n* A Snowflake","type":[[["TextChannel"]],[["Snowflake"]]],"meta":{"line":906,"file":"Guild.js","path":"src/structures"}},{"name":"VoiceChannelResolvable","description":"Data that can be resolved to a Voice Channel object. This can be:\n* A VoiceChannel\n* A Snowflake","type":[[["VoiceChannel"]],[["Snowflake"]]],"meta":{"line":913,"file":"Guild.js","path":"src/structures"}},{"name":"WelcomeChannelData","description":"Welcome channel data.","type":[[["Object"]]],"props":[{"name":"description","description":"The description to show for this welcome channel","type":[[["string"]]]},{"name":"channel","description":"The channel to link for this welcome channel","type":[[["TextChannel"]],[["NewsChannel"]],[["StoreChannel"]],[["Snowflake"]]]},{"name":"emoji","description":"The emoji to display for this welcome channel","optional":true,"type":[[["EmojiIdentifierResolvable"]]]}],"meta":{"line":1000,"file":"Guild.js","path":"src/structures"}},{"name":"WelcomeScreenEditData","description":"Welcome screen edit data.","type":[[["Object"]]],"props":[{"name":"enabled","description":"Whether the welcome screen is enabled","optional":true,"type":[[["boolean"]]]},{"name":"description","description":"The description for the welcome screen","optional":true,"type":[[["string"]]]},{"name":"welcomeChannels","description":"The welcome channel data for the welcome screen","optional":true,"type":[[["Array","<"],["WelcomeChannelData",">"]]]}],"meta":{"line":1008,"file":"Guild.js","path":"src/structures"}},{"name":"GuildTextChannelResolvable","description":"Data that can be resolved to a GuildTextChannel object. This can be:\n* A TextChannel\n* A NewsChannel\n* A Snowflake","type":[[["TextChannel"]],[["NewsChannel"]],[["Snowflake"]]],"meta":{"line":1016,"file":"Guild.js","path":"src/structures"}},{"name":"GuildVoiceChannelResolvable","description":"Data that can be resolved to a GuildVoiceChannel object. This can be:\n* A VoiceChannel\n* A StageChannel\n* A Snowflake","type":[[["VoiceChannel"]],[["StageChannel"]],[["Snowflake"]]],"meta":{"line":1024,"file":"Guild.js","path":"src/structures"}},{"name":"AuditLogTargetType","description":"The target type of an entry. Here are the available types:\n* GUILD\n* CHANNEL\n* USER\n* ROLE\n* INVITE\n* WEBHOOK\n* EMOJI\n* MESSAGE\n* INTEGRATION\n* STAGE_INSTANCE\n* STICKER\n* THREAD\n* GUILD_SCHEDULED_EVENT\n* APPLICATION_COMMAND\n* AUTO_MODERATION","type":[[["string"]]],"meta":{"line":16,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"AuditLogAction","description":"The action of an entry. Here are the available actions:\n* ALL: null\n* GUILD_UPDATE: 1\n* CHANNEL_CREATE: 10\n* CHANNEL_UPDATE: 11\n* CHANNEL_DELETE: 12\n* CHANNEL_OVERWRITE_CREATE: 13\n* CHANNEL_OVERWRITE_UPDATE: 14\n* CHANNEL_OVERWRITE_DELETE: 15\n* MEMBER_KICK: 20\n* MEMBER_PRUNE: 21\n* MEMBER_BAN_ADD: 22\n* MEMBER_BAN_REMOVE: 23\n* MEMBER_UPDATE: 24\n* MEMBER_ROLE_UPDATE: 25\n* MEMBER_MOVE: 26\n* MEMBER_DISCONNECT: 27\n* BOT_ADD: 28,\n* ROLE_CREATE: 30\n* ROLE_UPDATE: 31\n* ROLE_DELETE: 32\n* INVITE_CREATE: 40\n* INVITE_UPDATE: 41\n* INVITE_DELETE: 42\n* WEBHOOK_CREATE: 50\n* WEBHOOK_UPDATE: 51\n* WEBHOOK_DELETE: 52\n* EMOJI_CREATE: 60\n* EMOJI_UPDATE: 61\n* EMOJI_DELETE: 62\n* MESSAGE_DELETE: 72\n* MESSAGE_BULK_DELETE: 73\n* MESSAGE_PIN: 74\n* MESSAGE_UNPIN: 75\n* INTEGRATION_CREATE: 80\n* INTEGRATION_UPDATE: 81\n* INTEGRATION_DELETE: 82\n* STAGE_INSTANCE_CREATE: 83\n* STAGE_INSTANCE_UPDATE: 84\n* STAGE_INSTANCE_DELETE: 85\n* STICKER_CREATE: 90\n* STICKER_UPDATE: 91\n* STICKER_DELETE: 92\n* GUILD_SCHEDULED_EVENT_CREATE: 100\n* GUILD_SCHEDULED_EVENT_UPDATE: 101\n* GUILD_SCHEDULED_EVENT_DELETE: 102\n* THREAD_CREATE: 110\n* THREAD_UPDATE: 111\n* THREAD_DELETE: 112\n* APPLICATION_COMMAND_PERMISSION_UPDATE: 121\n* AUTO_MODERATION_RULE_CREATE: 140\n* AUTO_MODERATION_RULE_UPDATE: 141\n* AUTO_MODERATION_RULE_DELETE: 142\n* AUTO_MODERATION_BLOCK_MESSAGE: 143\n* AUTO_MODERATION_FLAG_TO_CHANNEL: 144\n* AUTO_MODERATION_USER_COMMUNICATION_DISABLED: 145","see":["{@link https://discord.com/developers/docs/resources/audit-log#audit-log-entry-object-audit-log-events}"],"type":[[["number"]],[["string"]]],"meta":{"line":61,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"AuditLogEntryTarget","description":"The target of an entry. It can be one of:\n* A guild\n* A channel\n* A user\n* A role\n* An invite\n* A webhook\n* An emoji\n* A message\n* An integration\n* A stage instance\n* A sticker\n* A guild scheduled event\n* A thread\n* An application command\n* An auto moderation rule\n* An object with an id key if target was deleted\n* An object where the keys represent either the new value or the old value","type":[[["Object"]],[["Guild"]],[["Channel"]],[["User"]],[["Role"]],[["Invite"]],[["Webhook"]],[["GuildEmoji"]],[["Message"]],[["Integration"]],[["StageInstance"]],[["Sticker"]],[["GuildScheduledEvent"]],[["ApplicationCommand"]],[["AutoModerationRule"]]],"meta":{"line":260,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"AuditLogActionType","description":"The action type of an entry, e.g. `CREATE`. Here are the available types:\n* CREATE\n* DELETE\n* UPDATE\n* ALL","type":[[["string"]]],"meta":{"line":307,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"AuditLogChange","description":"An entry in the audit log representing a specific change.","type":[[["Object"]]],"props":[{"name":"key","description":"The property that was changed, e.g. `nick` for nickname changes","type":[[["string"]]]},{"name":"old","description":"The old value of the change, e.g. for nicknames, the old nickname","optional":true,"type":[["*"]]},{"name":"new","description":"The new value of the change, e.g. for nicknames, the new nickname","optional":true,"type":[["*"]]}],"meta":{"line":449,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"SetParentOptions","description":"Options used to set the parent of a channel.","type":[[["Object"]]],"props":[{"name":"lockPermissions","description":"Whether to lock the permissions to what the parent's permissions are","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"The reason for modifying the parent of the channel","optional":true,"type":[[["string"]]]}],"meta":{"line":308,"file":"GuildChannel.js","path":"src/structures"}},{"name":"SetChannelPositionOptions","description":"Options used to set the position of a channel.","type":[[["Object"]]],"props":[{"name":"relative","description":"Whether or not to change the position relative to its current value","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"reason","description":"The reason for changing the position","optional":true,"type":[[["string"]]]}],"meta":{"line":336,"file":"GuildChannel.js","path":"src/structures"}},{"name":"GuildChannelCloneOptions","description":"Options used to clone a guild channel.","type":[[["GuildChannelCreateOptions"]]],"props":[{"name":"name","description":"Name of the new channel","optional":true,"default":"this.name","type":[[["string"]]]}],"meta":{"line":358,"file":"GuildChannel.js","path":"src/structures"}},{"name":"GuildEmojiEditData","description":"Data for editing an emoji.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the emoji","optional":true,"type":[[["string"]]]},{"name":"roles","description":"Roles to restrict emoji to","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]}],"meta":{"line":79,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"GuildScheduledEventEntityMetadata","description":"Represents the additional metadata for a {@link GuildScheduledEvent}","see":["{@link https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-entity-metadata}"],"type":[[["Object"]]],"props":[{"name":"location","description":"The location of the guild scheduled event","nullable":true,"type":[[["string"]]]}],"meta":{"line":136,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"CreateGuildScheduledEventInviteURLOptions","description":"Options used to create an invite URL to a {@link GuildScheduledEvent}","type":[[["CreateInviteOptions"]]],"props":[{"name":"channel","description":"The channel to create the invite in.\nThis is required when the `entityType` of `GuildScheduledEvent` is `EXTERNAL`, gets ignored otherwise","optional":true,"type":[[["GuildInvitableChannelResolvable"]]]}],"meta":{"line":244,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"EditGuildTemplateOptions","description":"Options used to edit a guild template.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this template","optional":true,"type":[[["string"]]]},{"name":"description","description":"The description of this template","optional":true,"type":[[["string"]]]}],"meta":{"line":147,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"IntegrationAccount","description":"The information account for an integration","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the account","type":[[["Snowflake"]],[["string"]]]},{"name":"name","description":"The name of the account","type":[[["string"]]]}],"meta":{"line":6,"file":"Integration.js","path":"src/structures"}},{"name":"IntegrationType","description":"The type of an {@link Integration}. This can be:\n* `twitch`\n* `youtube`\n* `discord`\n* `guild_subscription`","type":[[["string"]]],"meta":{"line":13,"file":"Integration.js","path":"src/structures"}},{"name":"Locale","description":"A Discord locale string, possible values are:\n* en-US (English, US)\n* en-GB (English, UK)\n* bg (Bulgarian)\n* zh-CN (Chinese, China)\n* zh-TW (Chinese, Taiwan)\n* hr (Croatian)\n* cs (Czech)\n* da (Danish)\n* nl (Dutch)\n* fi (Finnish)\n* fr (French)\n* de (German)\n* el (Greek)\n* hi (Hindi)\n* hu (Hungarian)\n* it (Italian)\n* ja (Japanese)\n* ko (Korean)\n* lt (Lithuanian)\n* no (Norwegian)\n* pl (Polish)\n* pt-BR (Portuguese, Brazilian)\n* ro (Romanian, Romania)\n* ru (Russian)\n* es-ES (Spanish)\n* sv-SE (Swedish)\n* th (Thai)\n* tr (Turkish)\n* uk (Ukrainian)\n* vi (Vietnamese)","see":["{@link https://discord.com/developers/docs/reference#locales}"],"type":[[["string"]]],"meta":{"line":84,"file":"Interaction.js","path":"src/structures"}},{"name":"InteractionCollectorOptions","type":[[["CollectorOptions"]]],"props":[{"name":"channel","description":"The channel to listen to interactions from","optional":true,"type":[[["TextBasedChannelsResolvable"]]]},{"name":"componentType","description":"The type of component to listen for","optional":true,"type":[[["MessageComponentType"]]]},{"name":"guild","description":"The guild to listen to interactions from","optional":true,"type":[[["GuildResolvable"]]]},{"name":"interactionType","description":"The type of interaction to listen for","optional":true,"type":[[["InteractionType"]]]},{"name":"max","description":"The maximum total amount of interactions to collect","optional":true,"type":[[["number"]]]},{"name":"maxComponents","description":"The maximum number of components to collect","optional":true,"type":[[["number"]]]},{"name":"maxUsers","description":"The maximum number of users to interact","optional":true,"type":[[["number"]]]},{"name":"message","description":"The message to listen to interactions from","optional":true,"type":[[["Message"]],[["APIMessage"]]]}],"meta":{"line":8,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"CollectorFilter","description":"Filter to be applied to the collector.","type":[[["function"]]],"params":[{"name":"args","description":"Any arguments received by the listener","variable":true,"type":[["*"]]},{"name":"collection","description":"The items collected by this collector","type":[[["Collection"]]]}],"returns":[[["boolean"]],[["Promise","<"],["boolean",">"]]],"meta":{"line":9,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"CollectorOptions","description":"Options to be applied to the collector.","type":[[["Object"]]],"props":[{"name":"filter","description":"The filter applied to this collector","optional":true,"type":[[["CollectorFilter"]]]},{"name":"time","description":"How long to run the collector for in milliseconds","optional":true,"type":[[["number"]]]},{"name":"idle","description":"How long to stop the collector after inactivity in milliseconds","optional":true,"type":[[["number"]]]},{"name":"dispose","description":"Whether to dispose data when it's deleted","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":17,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"CollectorResetTimerOptions","description":"Options used to reset the timeout and idle timer of a {@link Collector}.","type":[[["Object"]]],"props":[{"name":"time","description":"How long to run the collector for (in milliseconds)","optional":true,"type":[[["number"]]]},{"name":"idle","description":"How long to wait to stop the collector after inactivity (in milliseconds)","optional":true,"type":[[["number"]]]}],"meta":{"line":202,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"InteractionDeferReplyOptions","description":"Options for deferring the reply to an {@link Interaction}.","type":[[["Object"]]],"props":[{"name":"ephemeral","description":"Whether the reply should be ephemeral","optional":true,"type":[[["boolean"]]]},{"name":"fetchReply","description":"Whether to fetch the reply","optional":true,"type":[[["boolean"]]]}],"meta":{"line":15,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"InteractionDeferUpdateOptions","description":"Options for deferring and updating the reply to a {@link MessageComponentInteraction}.","type":[[["Object"]]],"props":[{"name":"fetchReply","description":"Whether to fetch the reply","optional":true,"type":[[["boolean"]]]}],"meta":{"line":22,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"InteractionReplyOptions","description":"Options for a reply to an {@link Interaction}.","type":[[["BaseMessageOptions"]]],"props":[{"name":"ephemeral","description":"Whether the reply should be ephemeral","optional":true,"type":[[["boolean"]]]},{"name":"fetchReply","description":"Whether to fetch the reply","optional":true,"type":[[["boolean"]]]},{"name":"flags","description":"Which flags to set for the message.\nOnly `SUPPRESS_EMBEDS` and `EPHEMERAL` can be set.","optional":true,"type":[[["MessageFlags"]]]}],"meta":{"line":28,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"InteractionUpdateOptions","description":"Options for updating the message received from a {@link MessageComponentInteraction}.","type":[[["MessageEditOptions"]]],"props":[{"name":"fetchReply","description":"Whether to fetch the reply","optional":true,"type":[[["boolean"]]]}],"meta":{"line":37,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"InteractionEditReplyOptions","description":"Options that can be passed into {@link InteractionResponses#editReply}.","type":[[["WebhookEditMessageOptions"]]],"props":[{"name":"message","description":"The response to edit","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"meta":{"line":131,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"AwaitModalSubmitOptions","description":"An object containing the same properties as CollectorOptions, but a few more:","type":[[["Object"]]],"props":[{"name":"filter","description":"The filter applied to this collector","optional":true,"type":[[["CollectorFilter"]]]},{"name":"time","description":"Time in milliseconds to wait for an interaction before rejecting","type":[[["number"]]]}],"meta":{"line":256,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"BaseMessageOptions","description":"Base options provided when sending.","type":[[["Object"]]],"props":[{"name":"activity","description":"Group activity","optional":true,"type":[[["MessageActivity"]]]},{"name":"tts","description":"Whether or not the message should be spoken aloud","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"nonce","description":"The nonce for the message","optional":true,"default":"''","type":[[["string"]]]},{"name":"content","description":"The content for the message","optional":true,"default":"''","type":[[["string"]]]},{"name":"embeds","description":"The embeds for the message\n(see [here](https://discord.com/developers/docs/resources/channel#embed-object) for more details)","optional":true,"type":[[["Array","<("],["MessageEmbed","|"],["APIEmbed","|"],["WebEmbed",")>"]]]},{"name":"allowedMentions","description":"Which mentions should be parsed from the message content\n(see [here](https://discord.com/developers/docs/resources/channel#allowed-mentions-object) for more details)","optional":true,"type":[[["MessageMentionOptions"]]]},{"name":"files","description":"Files to send with the message","optional":true,"type":[[["Array","<("],["FileOptions","|"],["BufferResolvable","|"],["Array","<"],["MessageAttachment",">)>"]]]},{"name":"components","description":"Action rows containing interactive components for the message (buttons, select menus)","optional":true,"type":[[["Array","<("],["MessageActionRow","|"],["MessageActionRowOptions",")>"]]]},{"name":"attachments","description":"Attachments to send in the message","optional":true,"type":[[["Array","<"],["MessageAttachment",">"]]]},{"name":"usingNewAttachmentAPI","description":"Whether to use the new attachment API (`channels/:id/attachments`)","optional":true,"type":[[["boolean"]]]}],"meta":{"line":72,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"MessageOptions","description":"Options provided when sending or editing a message.","type":[[["BaseMessageOptions"]]],"props":[{"name":"reply","description":"The options for replying to a message","optional":true,"type":[[["ReplyOptions"]]]},{"name":"stickers","description":"Stickers to send in the message","optional":true,"default":"[]","type":[[["Array","<"],["StickerResolvable",">"]]]},{"name":"flags","description":"Which flags to set for the message.\nOnly `SUPPRESS_EMBEDS`, `SUPPRESS_NOTIFICATIONS` and `IS_VOICE_MESSAGE` can be set.","optional":true,"type":[[["MessageFlags"]]]}],"meta":{"line":90,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"MessageMentionOptions","description":"Options provided to control parsing of mentions by Discord","type":[[["Object"]]],"props":[{"name":"parse","description":"Types of mentions to be parsed","optional":true,"type":[[["Array","<"],["MessageMentionTypes",">"]]]},{"name":"users","description":"Snowflakes of Users to be parsed as mentions","optional":true,"type":[[["Array","<"],["Snowflake",">"]]]},{"name":"roles","description":"Snowflakes of Roles to be parsed as mentions","optional":true,"type":[[["Array","<"],["Snowflake",">"]]]},{"name":"repliedUser","description":"Whether the author of the Message being replied to should be pinged","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":99,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"MessageMentionTypes","description":"Types of mentions to enable in MessageMentionOptions.\n- `roles`\n- `users`\n- `everyone`","type":[[["string"]]],"meta":{"line":108,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"FileOptions","type":[[["Object"]]],"props":[{"name":"attachment","description":"File to attach","type":[[["BufferResolvable"]]]},{"name":"name","description":"Filename of the attachment","optional":true,"default":"'file.jpg'","type":[[["string"]]]},{"name":"description","description":"The description of the file","type":[[["string"]]]}],"meta":{"line":116,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"ReplyOptions","description":"Options for sending a message with a reply.","type":[[["Object"]]],"props":[{"name":"messageReference","description":"The message to reply to (must be in the same channel and not system)","type":[[["MessageResolvable"]]]},{"name":"failIfNotExists","description":"Whether to error if the referenced message\ndoes not exist (creates a standard message in this case when false)","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":123,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"AwaitMessagesOptions","description":"An object containing the same properties as CollectorOptions, but a few more:","type":[[["MessageCollectorOptions"]]],"props":[{"name":"errors","description":"Stop/end reasons that cause the promise to reject","optional":true,"type":[[["Array","<"],["string",">"]]]}],"meta":{"line":232,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"ChannelWebhookCreateOptions","description":"Options used to create a {@link Webhook} in a guild text-based channel.","type":[[["Object"]]],"props":[{"name":"avatar","description":"Avatar for the webhook","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"reason","description":"Reason for creating the webhook","optional":true,"type":[[["string"]]]}],"meta":{"line":372,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"TargetType","description":"The type of the invite target:\n* 1: STREAM\n* 2: EMBEDDED_APPLICATION","see":["{@link https://discord.com/developers/docs/resources/invite#invite-object-invite-target-types}"],"type":[[["number"]]],"meta":{"line":155,"file":"Invite.js","path":"src/structures"}},{"name":"MessageReference","description":"Reference data sent in a message that contains ids identifying the referenced message.\nThis can be present in the following types of message:\n* Crossposted messages (IS_CROSSPOST {@link MessageFlags.FLAGS message flag})\n* CHANNEL_FOLLOW_ADD\n* CHANNEL_PINNED_MESSAGE\n* REPLY\n* THREAD_STARTER_MESSAGE","see":["{@link https://discord.com/developers/docs/resources/channel#message-types}"],"type":[[["Object"]]],"props":[{"name":"channelId","description":"The channel's id the message was referenced","type":[[["Snowflake"]]]},{"name":"guildId","description":"The guild's id the message was referenced","nullable":true,"type":[[["Snowflake"]]]},{"name":"messageId","description":"The message's id that was referenced","nullable":true,"type":[[["Snowflake"]]]}],"meta":{"line":309,"file":"Message.js","path":"src/structures"}},{"name":"MessageInteraction","description":"Partial data of the interaction that a message is a reply to","type":[[["Object"]]],"props":[{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]]},{"name":"type","description":"The type of the interaction","type":[[["InteractionType"]]]},{"name":"commandName","description":"The name of the interaction's application command,\nas well as the subcommand and subcommand group, where applicable","type":[[["string"]]]},{"name":"user","description":"The user that invoked the interaction","type":[[["User"]]]}],"meta":{"line":342,"file":"Message.js","path":"src/structures"}},{"name":"AwaitReactionsOptions","description":"An object containing the same properties as CollectorOptions, but a few more:","type":[[["ReactionCollectorOptions"]]],"props":[{"name":"errors","description":"Stop/end reasons that cause the promise to reject","optional":true,"type":[[["Array","<"],["string",">"]]]}],"meta":{"line":508,"file":"Message.js","path":"src/structures"}},{"name":"MessageComponentCollectorOptions","type":[[["CollectorOptions"]]],"props":[{"name":"componentType","description":"The type of component to listen for","optional":true,"type":[[["MessageComponentType"]]]},{"name":"max","description":"The maximum total amount of interactions to collect","optional":true,"type":[[["number"]]]},{"name":"maxComponents","description":"The maximum number of components to collect","optional":true,"type":[[["number"]]]},{"name":"maxUsers","description":"The maximum number of users to interact","optional":true,"type":[[["number"]]]}],"meta":{"line":536,"file":"Message.js","path":"src/structures"}},{"name":"AwaitMessageComponentOptions","description":"An object containing the same properties as CollectorOptions, but a few more:","type":[[["Object"]]],"props":[{"name":"filter","description":"The filter applied to this collector","optional":true,"type":[[["CollectorFilter"]]]},{"name":"time","description":"Time to wait for an interaction before rejecting","optional":true,"type":[[["number"]]]},{"name":"componentType","description":"The type of component interaction to collect","optional":true,"type":[[["MessageComponentType"]]]}],"meta":{"line":563,"file":"Message.js","path":"src/structures"}},{"name":"MessageEditOptions","description":"Options that can be passed into {@link Message#edit}.","type":[[["Object"]]],"props":[{"name":"content","description":"Content to be edited","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"embeds","description":"Embeds to be added/edited","optional":true,"type":[[["Array","<"],["MessageEmbed",">"]],[["Array","<"],["APIEmbed",">"]]]},{"name":"allowedMentions","description":"Which mentions should be parsed from the message content","optional":true,"type":[[["MessageMentionOptions"]]]},{"name":"flags","description":"Which flags to set for the message. Only `SUPPRESS_EMBEDS` can be edited.","optional":true,"type":[[["MessageFlags"]]]},{"name":"attachments","description":"An array of attachments to keep,\nall attachments will be kept if omitted","optional":true,"type":[[["Array","<"],["MessageAttachment",">"]]]},{"name":"files","description":"Files to add to the message","optional":true,"type":[[["Array","<"],["FileOptions",">"]],[["Array","<"],["BufferResolvable",">"]],[["Array","<"],["MessageAttachment",">"]]]},{"name":"components","description":"Action rows containing interactive components for the message (buttons, select menus)","optional":true,"type":[[["Array","<("],["MessageActionRow","|"],["MessageActionRowOptions",")>"]]]}],"meta":{"line":715,"file":"Message.js","path":"src/structures"}},{"name":"ReplyMessageOptions","description":"Options provided when sending a message as an inline reply.","type":[[["BaseMessageOptions"]]],"props":[{"name":"failIfNotExists","description":"Whether to error if the referenced message\ndoes not exist (creates a standard message in this case when false)","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"stickers","description":"Stickers to send in the message","optional":true,"default":"[]","type":[[["Array","<"],["StickerResolvable",">"]]]}],"meta":{"line":839,"file":"Message.js","path":"src/structures"}},{"name":"ThreadAutoArchiveDuration","description":"A number that is allowed to be the duration (in minutes) of inactivity after which a thread is automatically\narchived. This can be:\n* `60` (1 hour)\n* `1440` (1 day)\n* `4320` (3 days)\n* `10080` (7 days)\n* `'MAX'` (7 days)\nThis option is deprecated and will be removed in the next major version.","type":[[["number"]],[["string"]]],"meta":{"line":874,"file":"Message.js","path":"src/structures"}},{"name":"StartThreadOptions","description":"Options for starting a thread on a message.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the new thread","type":[[["string"]]]},{"name":"autoArchiveDuration","description":"The amount of\ntime (in minutes) after which the thread should automatically archive in case of no recent activity","optional":true,"default":"this.channel.defaultAutoArchiveDuration","type":[[["ThreadAutoArchiveDuration"]]]},{"name":"reason","description":"Reason for creating the thread","optional":true,"type":[[["string"]]]},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for the thread in seconds","optional":true,"type":[[["number"]]]}],"meta":{"line":886,"file":"Message.js","path":"src/structures"}},{"name":"MessageButtonLocation","type":[[["Object"]]],"props":[{"name":"row","description":"Index of the row","type":[[["number"]]]},{"name":"col","description":"Index of the column","type":[[["number"]]]}],"meta":{"line":1061,"file":"Message.js","path":"src/structures"}},{"name":"MessageActionRowComponent","description":"Components that can be placed in an action row\n* MessageButton\n* MessageSelectMenu\n* TextInputComponent","type":[[["MessageButton"]],[["MessageSelectMenu"]],[["TextInputComponent"]]],"meta":{"line":11,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"MessageActionRowComponentOptions","description":"Options for components that can be placed in an action row\n* MessageButtonOptions\n* MessageSelectMenuOptions\n* TextInputComponentOptions","type":[[["MessageButtonOptions"]],[["MessageSelectMenuOptions"]],[["TextInputComponentOptions"]]],"meta":{"line":19,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"MessageActionRowComponentResolvable","description":"Data that can be resolved into components that can be placed in an action row\n* MessageActionRowComponent\n* MessageActionRowComponentOptions","type":[[["MessageActionRowComponent"]],[["MessageActionRowComponentOptions"]]],"meta":{"line":27,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"MessageActionRowOptions","type":[[["BaseMessageComponentOptions"]]],"props":[{"name":"components","description":"The components to place in this action row","optional":true,"type":[[["Array","<"],["MessageActionRowComponentResolvable",">"]]]}],"meta":{"line":34,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"MessageButtonOptions","type":[[["BaseMessageComponentOptions"]]],"props":[{"name":"label","description":"The text to be displayed on this button","optional":true,"type":[[["string"]]]},{"name":"customId","description":"A unique string to be sent in the interaction when clicked","optional":true,"type":[[["string"]]]},{"name":"style","description":"The style of this button","optional":true,"type":[[["MessageButtonStyleResolvable"]]]},{"name":"emoji","description":"The emoji to be displayed to the left of the text","optional":true,"type":[[["EmojiIdentifierResolvable"]]]},{"name":"url","description":"Optional URL for link-style buttons","optional":true,"type":[[["string"]]]},{"name":"disabled","description":"Disables the button to prevent interactions","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":17,"file":"MessageButton.js","path":"src/structures"}},{"name":"MessageButtonStyleResolvable","description":"Data that can be resolved to a MessageButtonStyle. This can be\n* MessageButtonStyle\n* number","type":[[["number"]],[["MessageButtonStyle"]]],"meta":{"line":151,"file":"MessageButton.js","path":"src/structures"}},{"name":"MessageCollectorOptions","type":[[["CollectorOptions"]]],"props":[{"name":"max","description":"The maximum amount of messages to collect","type":[[["number"]]]},{"name":"maxProcessed","description":"The maximum amount of messages to process","type":[[["number"]]]}],"meta":{"line":6,"file":"MessageCollector.js","path":"src/structures"}},{"name":"APIMessageActionRowComponent","description":"Raw message components from the API\n* APIMessageButton\n* APIMessageSelectMenu","type":[[["APIMessageButton"]],[["APIMessageSelectMenu"]]],"meta":{"line":66,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"Partial","description":"A `Partial` object is a representation of any existing object.\nThis object contains between 0 and all of the original objects parameters.\nThis is true regardless of whether the parameters are optional in the base object.","type":[[["Object"]]],"meta":{"line":18,"file":"WebEmbed.js","path":"src/structures"}},{"name":"MessageEmbedOptions","description":"Represents the possible options for a MessageEmbed","type":[[["Object"]]],"props":[{"name":"title","description":"The title of this embed","optional":true,"type":[[["string"]]]},{"name":"description","description":"The description of this embed","optional":true,"type":[[["string"]]]},{"name":"url","description":"The URL of this embed","optional":true,"type":[[["string"]]]},{"name":"timestamp","description":"The timestamp of this embed","optional":true,"type":[[["Date"]],[["number"]]]},{"name":"color","description":"The color of this embed","optional":true,"type":[[["ColorResolvable"]]]},{"name":"fields","description":"The fields of this embed","optional":true,"type":[[["Array","<"],["EmbedFieldData",">"]]]},{"name":"author","description":"The author of this embed","optional":true,"type":[[["Partial","<"],["MessageEmbedAuthor",">"]]]},{"name":"thumbnail","description":"The thumbnail of this embed","optional":true,"type":[[["Partial","<"],["MessageEmbedThumbnail",">"]]]},{"name":"image","description":"The image of this embed","optional":true,"type":[[["Partial","<"],["MessageEmbedImage",">"]]]},{"name":"video","description":"The video of this embed","optional":true,"type":[[["Partial","<"],["MessageEmbedVideo",">"]]]},{"name":"footer","description":"The footer of this embed","optional":true,"type":[[["Partial","<"],["MessageEmbedFooter",">"]]]}],"meta":{"line":24,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"EmbedField","description":"Represents a field of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this field","type":[[["string"]]]},{"name":"value","description":"The value of this field","type":[[["string"]]]},{"name":"inline","description":"If this field will be displayed inline","type":[[["boolean"]]]}],"meta":{"line":93,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageEmbedThumbnail","description":"Represents the thumbnail of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"url","description":"URL for this thumbnail","type":[[["string"]]]},{"name":"proxyURL","description":"ProxyURL for this thumbnail","type":[[["string"]]]},{"name":"height","description":"Height of this thumbnail","type":[[["number"]]]},{"name":"width","description":"Width of this thumbnail","type":[[["number"]]]}],"meta":{"line":110,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageEmbedImage","description":"Represents the image of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"url","description":"URL for this image","type":[[["string"]]]},{"name":"proxyURL","description":"ProxyURL for this image","type":[[["string"]]]},{"name":"height","description":"Height of this image","type":[[["number"]]]},{"name":"width","description":"Width of this image","type":[[["number"]]]}],"meta":{"line":132,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageEmbedVideo","description":"Represents the video of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"url","description":"URL of this video","type":[[["string"]]]},{"name":"proxyURL","description":"ProxyURL for this video","type":[[["string"]]]},{"name":"height","description":"Height of this video","type":[[["number"]]]},{"name":"width","description":"Width of this video","type":[[["number"]]]}],"meta":{"line":154,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageEmbedAuthor","description":"Represents the author field of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this author","type":[[["string"]]]},{"name":"url","description":"URL of this author","type":[[["string"]]]},{"name":"iconURL","description":"URL of the icon for this author","type":[[["string"]]]},{"name":"proxyIconURL","description":"Proxied URL of the icon for this author","type":[[["string"]]]}],"meta":{"line":177,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageEmbedProvider","description":"Represents the provider of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this provider","type":[[["string"]]]},{"name":"url","description":"URL of this provider","type":[[["string"]]]}],"meta":{"line":199,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageEmbedFooter","description":"Represents the footer field of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"text","description":"The text of this footer","type":[[["string"]]]},{"name":"iconURL","description":"URL of the icon for this footer","type":[[["string"]]]},{"name":"proxyIconURL","description":"Proxied URL of the icon for this footer","type":[[["string"]]]}],"meta":{"line":217,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"EmbedAuthorData","description":"The options to provide for setting an author for a {@link WebEmbed}.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this author.","type":[[["string"]]]}],"meta":{"line":199,"file":"WebEmbed.js","path":"src/structures"}},{"name":"EmbedFooterData","description":"The options to provide for setting a footer for a {@link MessageEmbed}.","type":[[["Object"]]],"props":[{"name":"text","description":"The text of the footer.","type":[[["string"]]]},{"name":"iconURL","description":"The icon URL of the footer.","optional":true,"type":[[["string"]]]}],"meta":{"line":427,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"EmbedFieldData","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this field","type":[[["string"]]]},{"name":"value","description":"The value of this field","type":[[["string"]]]},{"name":"inline","description":"If this field will be displayed inline","optional":true,"type":[[["boolean"]]]}],"meta":{"line":560,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"CrosspostedChannel","description":"Crossposted channel data.","type":[[["Object"]]],"props":[{"name":"channelId","description":"The mentioned channel's id","type":[[["Snowflake"]]]},{"name":"guildId","description":"The id of the guild that has the channel","type":[[["Snowflake"]]]},{"name":"type","description":"The channel's type","type":[[["ChannelType"]]]},{"name":"name","description":"The channel's name","type":[[["string"]]]}],"meta":{"line":103,"file":"MessageMentions.js","path":"src/structures"}},{"name":"MessageMentionsHasOptions","description":"Options used to check for a mention.","type":[[["Object"]]],"props":[{"name":"ignoreDirect","description":"Whether to ignore direct mentions to the item","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"ignoreRoles","description":"Whether to ignore role mentions to a guild member","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"ignoreRepliedUser","description":"Whether to ignore replied user mention to an user","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"ignoreEveryone","description":"Whether to ignore `@everyone`/`@here` mentions","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":195,"file":"MessageMentions.js","path":"src/structures"}},{"name":"MessageTarget","description":"A target for a message.","type":[[["TextBasedChannels"]],[["DMChannel"]],[["User"]],[["GuildMember"]],[["Webhook"]],[["WebhookClient"]],[["Interaction"]],[["InteractionWebhook"]],[["Message"]],[["MessageManager"]]],"meta":{"line":349,"file":"MessagePayload.js","path":"src/structures"}},{"name":"MessageFile","type":[[["Object"]]],"props":[{"name":"attachment","description":"The original attachment that generated this file","type":[[["Buffer"]],[["string"]],[["Stream"]]]},{"name":"name","description":"The name of this file","type":[[["string"]]]},{"name":"file","description":"The file to be sent to the API","type":[[["Buffer"]],[["Stream"]]]}],"meta":{"line":40,"file":"MessagePayload.js","path":"src/structures"}},{"name":"ReactionCountDetailsData","description":"The reaction count details object contains information about super and normal reaction counts.","type":[[["Object"]]],"props":[{"name":"burst","description":"Count of super reaction","type":[[["number"]]]},{"name":"normal","description":"Count of normal reaction","type":[[["number"]]]}],"meta":{"line":76,"file":"MessageReaction.js","path":"src/structures"}},{"name":"MessageSelectMenuOptions","type":[[["BaseMessageComponentOptions"]]],"props":[{"name":"customId","description":"A unique string to be sent in the interaction when clicked","optional":true,"type":[[["string"]]]},{"name":"placeholder","description":"Custom placeholder text to display when nothing is selected","optional":true,"type":[[["string"]]]},{"name":"minValues","description":"The minimum number of selections required","optional":true,"type":[[["number"]]]},{"name":"maxValues","description":"The maximum number of selections allowed","optional":true,"type":[[["number"]]]},{"name":"options","description":"Options for the select menu","optional":true,"type":[[["Array","<"],["MessageSelectOption",">"]]]},{"name":"disabled","description":"Disables the select menu to prevent interactions","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"channelTypes","description":"List of channel types to include in the ChannelSelect component","optional":true,"type":[[["Array","<"],["ChannelType",">"]]]}],"meta":{"line":21,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"MessageSelectOption","type":[[["Object"]]],"props":[{"name":"label","description":"The text to be displayed on this option","type":[[["string"]]]},{"name":"value","description":"The value to be sent for this option","type":[[["string"]]]},{"name":"description","description":"Optional description to show for this option","nullable":true,"type":[[["string"]]]},{"name":"emoji","description":"Emoji to display for this option","nullable":true,"type":[[["RawEmoji"]]]},{"name":"default","description":"Render this option as the default selection","type":[[["boolean"]]]}],"meta":{"line":32,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"MessageSelectOptionData","type":[[["Object"]]],"props":[{"name":"label","description":"The text to be displayed on this option","type":[[["string"]]]},{"name":"value","description":"The value to be sent for this option","type":[[["string"]]]},{"name":"description","description":"Optional description to show for this option","optional":true,"type":[[["string"]]]},{"name":"emoji","description":"Emoji to display for this option","optional":true,"type":[[["EmojiIdentifierResolvable"]]]},{"name":"default","description":"Render this option as the default selection","optional":true,"type":[[["boolean"]]]}],"meta":{"line":41,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"ModalOptions","type":[[["Object"]]],"props":[{"name":"customId","description":"A unique string to be sent in the interaction when clicked","optional":true,"type":[[["string"]]]},{"name":"title","description":"The title to be displayed on this modal","optional":true,"type":[[["string"]]]},{"name":"components","description":"Action rows containing interactive components for the modal (text input components)","optional":true,"type":[[["Array","<("],["MessageActionRow","|"],["MessageActionRowOptions",")>"]]]}],"meta":{"line":13,"file":"Modal.js","path":"src/structures"}},{"name":"TextInputComponentReplyData","type":[[["Object"]]],"props":[{"name":"customId","description":"TextInputComponent custom id","optional":true,"type":[[["string"]]]},{"name":"value","description":"TextInputComponent value","optional":true,"type":[[["string"]]]}],"meta":{"line":147,"file":"Modal.js","path":"src/structures"}},{"name":"ModalReplyData","type":[[["Object"]]],"props":[{"name":"guild","description":"Guild to send the modal to","optional":true,"nullable":true,"type":[[["GuildResolvable"]]]},{"name":"channel","description":"User to send the modal to","optional":true,"nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"data","description":"Reply data","optional":true,"nullable":true,"type":[[["Array","<"],["TextInputComponentReplyData",">"]]]}],"meta":{"line":153,"file":"Modal.js","path":"src/structures"}},{"name":"PartialTextInputData","type":[[["Object"]]],"props":[{"name":"customId","description":"A unique string to be sent in the interaction when submitted","optional":true,"type":[[["string"]]]},{"name":"type","description":"The type of this component","optional":true,"type":[[["MessageComponentType"]]]},{"name":"value","description":"Value of this text input component","optional":true,"type":[[["string"]]]}],"meta":{"line":24,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"PartialModalActionRow","type":[[["Object"]]],"props":[{"name":"type","description":"The type of this component","optional":true,"type":[[["MessageComponentType"]]]},{"name":"components","description":"Partial text input components","optional":true,"type":[[["Array","<"],["PartialTextInputData",">"]]]}],"meta":{"line":31,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"CallOptions","type":[[["Object"]]],"props":[{"name":"selfDeaf","description":"Whether to deafen yourself","optional":true,"type":[[["boolean"]]]},{"name":"selfMute","description":"Whether to mute yourself","optional":true,"type":[[["boolean"]]]},{"name":"ring","description":"Emit a ringtone","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":303,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"PermissionOverwriteOptions","description":"An object mapping permission flags to `true` (enabled), `null` (unset) or `false` (disabled).\n```js\n{\n 'SEND_MESSAGES': true,\n 'EMBED_LINKS': null,\n 'ATTACH_FILES': false,\n}\n```","type":[[["Object"]]],"meta":{"line":97,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"ResolvedOverwriteOptions","type":[[["Object"]]],"props":[{"name":"allow","description":"The allowed permissions","type":[[["Permissions"]]]},{"name":"deny","description":"The denied permissions","type":[[["Permissions"]]]}],"meta":{"line":109,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"RawOverwriteData","description":"The raw data for a permission overwrite","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the {@link Role} or {@link User} this overwrite belongs to","type":[[["Snowflake"]]]},{"name":"allow","description":"The permissions to allow","type":[[["string"]]]},{"name":"deny","description":"The permissions to deny","type":[[["string"]]]},{"name":"type","description":"The type of this OverwriteData","type":[[["number"]]]}],"meta":{"line":141,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"OverwriteResolvable","description":"Data that can be resolved into {@link RawOverwriteData}. This can be:\n* PermissionOverwrites\n* OverwriteData","type":[[["PermissionOverwrites"]],[["OverwriteData"]]],"meta":{"line":150,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"OverwriteData","description":"Data that can be used for a permission overwrite","type":[[["Object"]]],"props":[{"name":"id","description":"Member or role this overwrite is for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"allow","description":"The permissions to allow","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"deny","description":"The permissions to deny","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"type","description":"The type of this OverwriteData","optional":true,"type":[[["OverwriteType"]]]}],"meta":{"line":157,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"MessageActivity","description":"Activity sent in a message.","type":[[["Object"]]],"props":[{"name":"partyId","description":"Id of the party represented in activity","optional":true,"type":[[["string"]]]},{"name":"type","description":"Type of activity sent","type":[[["MessageActivityType"]]]}],"meta":{"line":10,"file":"Presence.js","path":"src/structures"}},{"name":"PresenceStatus","description":"The status of this presence:\n* **`online`** - user is online\n* **`idle`** - user is AFK\n* **`offline`** - user is offline or invisible\n* **`dnd`** - user is in Do Not Disturb","type":[[["string"]]],"meta":{"line":22,"file":"Presence.js","path":"src/structures"}},{"name":"ClientPresenceStatus","description":"The status of this presence:\n* **`online`** - user is online\n* **`idle`** - user is AFK\n* **`dnd`** - user is in Do Not Disturb","type":[[["string"]]],"meta":{"line":31,"file":"Presence.js","path":"src/structures"}},{"name":"ActivityPlatform","description":"The platform of this activity:\n* **`desktop`**\n* **`samsung`** - playing on Samsung Galaxy\n* **`xbox`** - playing on Xbox Live","type":[[["string"]]],"meta":{"line":166,"file":"Presence.js","path":"src/structures"}},{"name":"ActivityTimestamps","description":"Represents timestamps of an activity","type":[[["Object"]]],"props":[{"name":"start","description":"When the activity started","nullable":true,"type":[[["Date"]]]},{"name":"end","description":"When the activity will end","nullable":true,"type":[[["Date"]]]}],"meta":{"line":229,"file":"Presence.js","path":"src/structures"}},{"name":"ActivityParty","description":"Represents a party of an activity","type":[[["Object"]]],"props":[{"name":"id","description":"The party's id","nullable":true,"type":[[["string"]]]},{"name":"size","description":"Size of the party as `[current, max]`","type":[[["Array","<"],["number",">"]]]}],"meta":{"line":259,"file":"Presence.js","path":"src/structures"}},{"name":"ReactionCollectorOptions","type":[[["CollectorOptions"]]],"props":[{"name":"max","description":"The maximum total amount of reactions to collect","type":[[["number"]]]},{"name":"maxEmojis","description":"The maximum number of emojis to collect","type":[[["number"]]]},{"name":"maxUsers","description":"The maximum number of users to react","type":[[["number"]]]}],"meta":{"line":7,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"CustomStatusOptions","type":[[["Object"]]],"props":[{"name":"state","description":"The state to be displayed","optional":true,"type":[[["string"]]]},{"name":"emoji","description":"The emoji to be displayed","optional":true,"type":[[["EmojiIdentifierResolvable"]]]}],"meta":{"line":19,"file":"RichPresence.js","path":"src/structures"}},{"name":"RichParty","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the party","type":[[["string"]]]},{"name":"max","description":"The maximum number of members in the party","type":[[["number"]]]},{"name":"current","description":"The current number of members in the party","type":[[["number"]]]}],"meta":{"line":338,"file":"RichPresence.js","path":"src/structures"}},{"name":"RichButton","type":[[["object"]]],"props":[{"name":"name","description":"The name of the button","type":[[["string"]]]},{"name":"url","description":"The url of the button","type":[[["string"]]]}],"meta":{"line":384,"file":"RichPresence.js","path":"src/structures"}},{"name":"SpotifyMetadata","type":[[["Object"]]],"props":[{"name":"album_id","description":"Album id","type":[[["string"]]]},{"name":"artist_ids","description":"Artist ids","type":[[["Array","<"],["string",">"]]]}],"meta":{"line":600,"file":"RichPresence.js","path":"src/structures"}},{"name":"ExternalAssets","type":[[["Object"]]],"props":[{"name":"url","description":"Orginal url of the image","nullable":true,"type":[[["string"]]]},{"name":"external_asset_path","description":"Proxy url of the image (Using to RPC)","nullable":true,"type":[[["string"]]]}],"meta":{"line":711,"file":"RichPresence.js","path":"src/structures"}},{"name":"RoleData","description":"The data for a role.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the role","optional":true,"type":[[["string"]]]},{"name":"color","description":"The color of the role, either a hex string or a base 10 number","optional":true,"type":[[["ColorResolvable"]]]},{"name":"hoist","description":"Whether or not the role should be hoisted","optional":true,"type":[[["boolean"]]]},{"name":"position","description":"The position of the role","optional":true,"type":[[["number"]]]},{"name":"permissions","description":"The permissions of the role","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"mentionable","description":"Whether or not the role should be mentionable","optional":true,"type":[[["boolean"]]]},{"name":"icon","description":"The icon for the role\nThe `EmojiResolvable` should belong to the same guild as the role.\nIf not, pass the emoji's URL directly","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]],[["EmojiResolvable"]]]},{"name":"unicodeEmoji","description":"The unicode emoji for the role","optional":true,"nullable":true,"type":[[["string"]]]}],"meta":{"line":265,"file":"Role.js","path":"src/structures"}},{"name":"SetRolePositionOptions","description":"Options used to set the position of a role.","type":[[["Object"]]],"props":[{"name":"relative","description":"Whether to change the position relative to its current value or not","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"reason","description":"The reason for changing the position","optional":true,"type":[[["string"]]]}],"meta":{"line":415,"file":"Role.js","path":"src/structures"}},{"name":"SessionClientInfo","type":[[["Object"]]],"props":[{"name":"location","description":"Location of the client (using IP address)","type":[[["string"]]]},{"name":"platform","description":"Platform of the client","type":[[["string"]]]},{"name":"os","description":"Operating system of the client","type":[[["string"]]]}],"meta":{"line":5,"file":"Session.js","path":"src/structures"}},{"name":"GuildStickerEditData","description":"Data for editing a sticker.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the sticker","optional":true,"type":[[["string"]]]},{"name":"description","description":"The description of the sticker","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"tags","description":"The Discord name of a unicode emoji representing the sticker's expression","optional":true,"type":[[["string"]]]}],"meta":{"line":235,"file":"Sticker.js","path":"src/structures"}},{"name":"TextInputComponentOptions","type":[[["BaseMessageComponentOptions"]]],"props":[{"name":"customId","description":"A unique string to be sent in the interaction when submitted","optional":true,"type":[[["string"]]]},{"name":"label","description":"The text to be displayed above this text input component","optional":true,"type":[[["string"]]]},{"name":"maxLength","description":"Maximum length of text that can be entered","optional":true,"type":[[["number"]]]},{"name":"minLength","description":"Minimum length of text required to be entered","optional":true,"type":[[["number"]]]},{"name":"placeholder","description":"Custom placeholder text to display when no text is entered","optional":true,"type":[[["string"]]]},{"name":"required","description":"Whether or not this text input component is required","optional":true,"type":[[["boolean"]]]},{"name":"style","description":"The style of this text input component","optional":true,"type":[[["TextInputStyleResolvable"]]]},{"name":"value","description":"Value of this text input component","optional":true,"type":[[["string"]]]}],"meta":{"line":14,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"TextInputStyleResolvable","description":"Data that can be resolved to a TextInputStyle. This can be\n* TextInputStyle\n* number","type":[[["number"]],[["TextInputStyle"]]],"meta":{"line":183,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"ThreadEditData","description":"The options used to edit a thread channel","type":[[["Object"]]],"props":[{"name":"name","description":"The new name for the thread","optional":true,"type":[[["string"]]]},{"name":"archived","description":"Whether the thread is archived","optional":true,"type":[[["boolean"]]]},{"name":"autoArchiveDuration","description":"The amount of time (in minutes) after which the thread\nshould automatically archive in case of no recent activity","optional":true,"type":[[["ThreadAutoArchiveDuration"]]]},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for the thread in seconds","optional":true,"type":[[["number"]]]},{"name":"locked","description":"Whether the thread is locked","optional":true,"type":[[["boolean"]]]},{"name":"invitable","description":"Whether non-moderators can add other non-moderators to a thread\nCan only be edited on `GUILD_PRIVATE_THREAD`","optional":true,"type":[[["boolean"]]]},{"name":"appliedTags","description":"The tags to apply to the thread","optional":true,"type":[[["Array","<"],["Snowflake",">"]]]},{"name":"flags","description":"The flags to set on the channel","optional":true,"type":[[["ChannelFlagsResolvable"]]]}],"meta":{"line":332,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"ConnectionAccount","description":"An array of object (connected accounts), containing the following properties:","see":["{@link https://discord.com/developers/docs/resources/user#connection-object}"],"type":[[["Object"]]],"props":[{"name":"type","description":"The account type (twitch, youtube, etc)","type":[[["string"]]]},{"name":"name","description":"The account name","type":[[["string"]]]},{"name":"id","description":"The account id","type":[[["string"]]]},{"name":"verified","description":"Whether the account is verified","type":[[["boolean"]]]}],"meta":{"line":34,"file":"User.js","path":"src/structures"}},{"name":"BadgeIcon","type":[[["function"]]],"returns":[[["string"]]],"meta":{"line":318,"file":"User.js","path":"src/structures"}},{"name":"UserBadge","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the badge","type":[[["string"]]]},{"name":"description","description":"The description of the badge","type":[[["string"]]]},{"name":"icon","description":"The icon hash of the badge","type":[[["string"]]]},{"name":"link","description":"The link of the badge","nullable":true,"type":[[["string"]]]},{"name":"iconURL","description":"The iconURL of the badge","type":[[["BadgeIcon"]]]}],"meta":{"line":323,"file":"User.js","path":"src/structures"}},{"name":"WebEmbedOptions","description":"Represents the possible options for a WebEmbed","type":[[["Object"]]],"props":[{"name":"title","description":"The title of this embed","optional":true,"type":[[["string"]]]},{"name":"description","description":"The description of this embed","optional":true,"type":[[["string"]]]},{"name":"url","description":"The URL of this embed","optional":true,"type":[[["string"]]]},{"name":"color","description":"The color of this embed","optional":true,"type":[[["ColorResolvable"]]]},{"name":"author","description":"The author of this embed","optional":true,"type":[[["Partial","<"],["WebEmbedAuthor",">"]]]},{"name":"thumbnail","description":"The thumbnail of this embed","optional":true,"type":[[["Partial","<"],["WebEmbedThumbnail",">"]]]},{"name":"image","description":"The image of this embed","optional":true,"type":[[["Partial","<"],["WebEmbedImage",">"]]]},{"name":"video","description":"The video of this embed","optional":true,"type":[[["Partial","<"],["WebEmbedVideo",">"]]]},{"name":"footer","description":"The footer of this embed","optional":true,"type":[[["Partial","<"],["WebEmbedFooter",">"]]]},{"name":"provider","description":"The provider of this embed","optional":true,"type":[[["Partial","<"],["WebEmbedProvider",">"]]]},{"name":"redirect","description":"Redirect URL","optional":true,"type":[[["string"]]]}],"meta":{"line":25,"file":"WebEmbed.js","path":"src/structures"}},{"name":"WebEmbedImage","description":"Represents the image of a WebEmbed","type":[[["Object"]]],"props":[{"name":"url","description":"URL for this image","type":[[["string"]]]},{"name":"proxyURL","description":"ProxyURL for this image","type":[[["string"]]]},{"name":"height","description":"Height of this image","type":[[["number"]]]},{"name":"width","description":"Width of this image","type":[[["number"]]]}],"meta":{"line":99,"file":"WebEmbed.js","path":"src/structures"}},{"name":"WebEmbedVideo","description":"Represents the video of a WebEmbed","type":[[["Object"]]],"props":[{"name":"url","description":"URL of this video","type":[[["string"]]]},{"name":"proxyURL","description":"ProxyURL for this video","type":[[["string"]]]},{"name":"height","description":"Height of this video","type":[[["number"]]]},{"name":"width","description":"Width of this video","type":[[["number"]]]}],"meta":{"line":134,"file":"WebEmbed.js","path":"src/structures"}},{"name":"WebEmbedAuthor","description":"Represents the author field of a WebEmbed","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this author","type":[[["string"]]]},{"name":"url","description":"URL of this author","type":[[["string"]]]}],"meta":{"line":157,"file":"WebEmbed.js","path":"src/structures"}},{"name":"WebEmbedProvider","description":"Represents the provider of a WebEmbed","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this provider","type":[[["string"]]]},{"name":"url","description":"URL of this provider","type":[[["string"]]]}],"meta":{"line":175,"file":"WebEmbed.js","path":"src/structures"}},{"name":"EmbedProviderData","description":"The options to provide for setting an provider for a {@link WebEmbed}.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this provider.","type":[[["string"]]]}],"meta":{"line":224,"file":"WebEmbed.js","path":"src/structures"}},{"name":"WebhookMessageOptions","description":"Options that can be passed into send.","type":[[["BaseMessageOptions"]]],"props":[{"name":"username","description":"Username override for the message","optional":true,"default":"this.name","type":[[["string"]]]},{"name":"avatarURL","description":"Avatar URL override for the message","optional":true,"type":[[["string"]]]},{"name":"threadId","description":"The id of the thread in the channel to send to.\nFor interaction webhooks, this property is ignored","optional":true,"type":[[["Snowflake"]]]},{"name":"flags","description":"Which flags to set for the message. Only `SUPPRESS_EMBEDS` can be set.","optional":true,"type":[[["MessageFlags"]]]}],"meta":{"line":112,"file":"Webhook.js","path":"src/structures"}},{"name":"WebhookEditMessageOptions","description":"Options that can be passed into editMessage.","type":[[["Object"]]],"props":[{"name":"embeds","description":"See {@link WebhookMessageOptions#embeds}","optional":true,"type":[[["Array","<"],["MessageEmbed",">"]],[["Array","<"],["APIEmbed",">"]]]},{"name":"content","description":"See {@link BaseMessageOptions#content}","optional":true,"type":[[["string"]]]},{"name":"files","description":"See {@link BaseMessageOptions#files}","optional":true,"type":[[["Array","<"],["FileOptions",">"]],[["Array","<"],["BufferResolvable",">"]],[["Array","<"],["MessageAttachment",">"]]]},{"name":"allowedMentions","description":"See {@link BaseMessageOptions#allowedMentions}","optional":true,"type":[[["MessageMentionOptions"]]]},{"name":"attachments","description":"Attachments to send with the message","optional":true,"type":[[["Array","<"],["MessageAttachment",">"]]]},{"name":"components","description":"Action rows containing interactive components for the message (buttons, select menus)","optional":true,"type":[[["Array","<("],["MessageActionRow","|"],["MessageActionRowOptions",")>"]]]},{"name":"threadId","description":"The id of the thread this message belongs to\nFor interaction webhooks, this property is ignored","optional":true,"type":[[["Snowflake"]]]},{"name":"threadName","description":"Name of the thread to create (only available if webhook is in a forum channel)","optional":true,"type":[[["string"]]]}],"meta":{"line":122,"file":"Webhook.js","path":"src/structures"}},{"name":"WebhookEditData","description":"Options used to edit a {@link Webhook}.","type":[[["Object"]]],"props":[{"name":"name","description":"The new name for the webhook","optional":true,"default":"this.name","type":[[["string"]]]},{"name":"avatar","description":"The new avatar for the webhook","optional":true,"nullable":true,"type":[[["BufferResolvable"]]]},{"name":"channel","description":"The new channel for the webhook","optional":true,"type":[[["GuildTextChannelResolvable"]],[["VoiceChannel"]],[["StageChannel"]],[["ForumChannel"]]]}],"meta":{"line":237,"file":"Webhook.js","path":"src/structures"}},{"name":"WebhookFetchMessageOptions","description":"Options that can be passed into fetchMessage.","type":[[["options"]]],"props":[{"name":"cache","description":"Whether to cache the message.","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"threadId","description":"The id of the thread this message belongs to.\nFor interaction webhooks, this property is ignored","optional":true,"type":[[["Snowflake"]]]}],"meta":{"line":270,"file":"Webhook.js","path":"src/structures"}},{"name":"WidgetChannel","description":"Represents a channel in a Widget","type":[[["Object"]]],"props":[{"name":"id","description":"Id of the channel","type":[[["Snowflake"]]]},{"name":"name","description":"Name of the channel","type":[[["string"]]]},{"name":"position","description":"Position of the channel","type":[[["number"]]]}],"meta":{"line":17,"file":"Widget.js","path":"src/structures"}},{"name":"WidgetActivity","description":"Activity sent in a {@link WidgetMember}.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the activity","type":[[["string"]]]}],"meta":{"line":10,"file":"WidgetMember.js","path":"src/structures"}},{"name":"AttachmentFlagsResolvable","description":"Data that can be resolved to give a guild attachment bitfield. This can be:\n* A string (see {@link AttachmentFlags.FLAGS})\n* A attachment flag\n* An instance of AttachmentFlags\n* An Array of AttachmentFlagsResolvable","type":[[["string"]],[["number"]],[["AttachmentFlags"]],[["Array","<"],["AttachmentFlagsResolvable",">"]]],"meta":{"line":29,"file":"AttachmentFlags.js","path":"src/util"}},{"name":"BitFieldResolvable","description":"Data that can be resolved to give a bitfield. This can be:\n* A bit number (this can be a number literal or a value taken from {@link BitField.FLAGS})\n* A string bit number\n* An instance of BitField\n* An Array of BitFieldResolvable","type":[[["number"]],[["string"]],[["bigint"]],[["BitField"]],[["Array","<"],["BitFieldResolvable",">"]]],"meta":{"line":129,"file":"BitField.js","path":"src/util"}},{"name":"ChannelFlagsResolvable","description":"Data that can be resolved to give a channel flag bitfield. This can be:\n* A string (see {@link ChannelFlags.FLAGS})\n* A channel flag\n* An instance of ChannelFlags\n* An Array of ChannelFlags","type":[[["string"]],[["number"]],[["ChannelFlags"]],[["Array","<"],["ChannelFlagsResolvable",">"]]],"meta":{"line":36,"file":"ChannelFlags.js","path":"src/util"}},{"name":"Constants","description":"Constants that can be used in an enum or object-like way.","type":[[["Object"]]],"props":[{"name":"ActivityTypes","description":"The type of an activity of a users presence.","type":[[["Object","<"],["ActivityType",", "],["number",">"]]]},{"name":"APIErrors","description":"An error encountered while performing an API request.","type":[[["Object","<"],["APIError",", "],["number",">"]]]},{"name":"ApplicationCommandOptionTypes","description":"The type of an {@link ApplicationCommandOption} object.","type":[[["Object","<"],["ApplicationCommandOptionType",", "],["number",">"]]]},{"name":"ApplicationCommandPermissionTypes","description":"The type of an {@link ApplicationCommandPermissions} object.","type":[[["Object","<"],["ApplicationCommandPermissionType",", "],["number",">"]]]},{"name":"ApplicationCommandTypes","description":"The type of an {@link ApplicationCommand} object.","type":[[["Object","<"],["ApplicationCommandType",", "],["number",">"]]]},{"name":"ApplicationRoleConnectionMetadataTypes","description":"The type of an {@link ApplicationRoleConnectionMetadata} object.","type":[[["Object","<"],["ApplicationRoleConnectionMetadataType",", "],["number",">"]]]},{"name":"AutoModerationActionTypes","description":"A type of an action which executes whenever a rule is triggered.","type":[[["Object","<"],["AutoModerationActionType",", "],["number",">"]]]},{"name":"AutoModerationRuleEventTypes","description":"Indicates in what event context\na rule should be checked.","type":[[["Object","<"],["AutoModerationRuleEventType",", "],["number",">"]]]},{"name":"AutoModerationRuleKeywordPresetTypes","description":"The internally pre-defined wordsetswhich will be searched for in content","type":[[["Object","<"],["AutoModerationRuleKeywordPresetType",", "],["number",">"]]]},{"name":"AutoModerationRuleTriggerTypes","description":"Characterizes the type\nof content which can trigger the rule.","type":[[["Object","<"],["AutoModerationRuleTriggerType",", "],["number",">"]]]},{"name":"ChannelTypes","description":"All available channel types.","type":[[["Object","<"],["ChannelType",", "],["number",">"]]]},{"name":"ClientApplicationAssetTypes","description":"The types of an {@link ApplicationAsset} object.","type":[[["ClientApplicationAssetTypes"]]]},{"name":"Colors","description":"An object with regularly used colors.","type":[[["Object","<"],["Color",", "],["number",">"]]]},{"name":"DefaultMessageNotificationLevels","description":"The value set for a guilds default message notifications.","type":[[["Object","<"],["DefaultMessageNotificationLevel",", "],["number",">"]]]},{"name":"Endpoints","description":"Object containing functions that return certain endpoints on the API.","type":[[["Endpoints"]]]},{"name":"Events","description":"The types of events emitted by the Client.","type":[[["Events"]]]},{"name":"ExplicitContentFilterLevels","description":"The value set for the explicit content filter levels for a guild.","type":[[["Object","<"],["ExplicitContentFilterLevel",", "],["number",">"]]]},{"name":"GuildScheduledEventEntityTypes","description":"The entity type of a {@link GuildScheduledEvent} object.","type":[[["Object","<"],["GuildScheduledEventEntityType",", "],["number",">"]]]},{"name":"GuildScheduledEventPrivacyLevels","description":"Privacy level of a {@link GuildScheduledEvent} object.","type":[[["Object","<"],["GuildScheduledEventPrivacyLevel",", "],["number",">"]]]},{"name":"GuildScheduledEventStatuses","description":"The status of a {@link GuildScheduledEvent} object.","type":[[["Object","<"],["GuildScheduledEventStatus",", "],["number",">"]]]},{"name":"IntegrationExpireBehaviors","description":"The behavior of expiring subscribers for Integrations.","type":[[["Object","<"],["IntegrationExpireBehavior",", "],["number",">"]]]},{"name":"InteractionResponseTypes","description":"The type of an interaction response.","type":[[["Object","<"],["InteractionResponseType",", "],["number",">"]]]},{"name":"InteractionTypes","description":"The type of an {@link Interaction} object.","type":[[["Object","<"],["InteractionType",", "],["number",">"]]]},{"name":"InviteScopes","description":"The scopes of an invite.","type":[[["Array","<"],["InviteScope",">"]]]},{"name":"MaxBulkDeletableMessageAge","description":"Max bulk deletable message age (Unavailable to selfbots)","type":[[["number"]]]},{"name":"MembershipStates","description":"The value set for a team members membership state.","type":[[["Object","<"],["MembershipState",", "],["number",">"]]]},{"name":"MessageButtonStyles","description":"The style of a message button.","type":[[["Object","<"],["MessageButtonStyle",", "],["number",">"]]]},{"name":"MessageComponentTypes","description":"The type of a message component.","type":[[["Object","<"],["MessageComponentType",", "],["number",">"]]]},{"name":"MessageTypes","description":"The type of a {@link Message} object.","type":[[["Array","<"],["MessageType",">"]]]},{"name":"SelectMenuComponentTypes","description":"The type of any select menu.","type":[[["Object","<"],["SelectMenuComponentType",", "],["number",">"]]]},{"name":"MFALevels","description":"The required MFA level for a guild.","type":[[["Object","<"],["MFALevel",", "],["number",">"]]]},{"name":"NSFWLevels","description":"NSFW level of a guild.","type":[[["Object","<"],["NSFWLevel",", "],["number",">"]]]},{"name":"Opcodes","description":"The types of Opcodes sent to the Gateway.","type":[[["Opcodes"]]]},{"name":"OverwriteTypes","description":"An overwrite type.","type":[[["Object","<"],["OverwriteType",", "],["number",">"]]]},{"name":"Package","description":"The package.json of the library.","type":[[["Object"]]]},{"name":"PartialTypes","description":"The type of Structure allowed to be a partial.","type":[[["Object","<"],["PartialType",", "],["PartialType",">"]]]},{"name":"PremiumTiers","description":"The premium tier (Server Boost level) of a guild.","type":[[["Object","<"],["PremiumTier",", "],["number",">"]]]},{"name":"PrivacyLevels","description":"Privacy level of a {@link StageInstance} object.","type":[[["Object","<"],["PrivacyLevel",", "],["number",">"]]]},{"name":"ShardEvents","description":"The type of events emitted by a Shard.","type":[[["ShardEvents"]]]},{"name":"Status","description":"The available statuses of the client.","type":[[["Status"]]]},{"name":"StickerFormatTypes","description":"The value set for a stickers format type.","type":[[["Object","<"],["StickerFormatType",", "],["number",">"]]]},{"name":"StickerTypes","description":"The value set for a stickers type.","type":[[["Object","<"],["StickerType",", "],["number",">"]]]},{"name":"SweeperKeys","description":"The name of an item to be swept in Sweepers.","type":[[["Array","<"],["SweeperKey",">"]]]},{"name":"SystemMessageTypes","description":"The types of messages that are `System`.","type":[[["Array","<"],["SystemMessageType",">"]]]},{"name":"TextInputStyles","description":"The style of a text input component.","type":[[["Object","<"],["TextInputStyle",", "],["number",">"]]]},{"name":"ThreadChannelTypes","description":"The type of a {@link ThreadChannel} object.","type":[[["Array","<"],["ThreadChannelTypes",">"]]]},{"name":"UserAgent","description":"The user agent used for requests.","type":[[["string"]]]},{"name":"VerificationLevels","description":"The value set for the verification levels for a guild.","type":[[["Object","<"],["VerificationLevel",", "],["number",">"]]]},{"name":"VideoQualityModes","description":"The camera video quality mode for a {@link VoiceChannel}.","type":[[["Object","<"],["VideoQualityMode",", "],["number",">"]]]},{"name":"WebhookTypes","description":"The value set for a webhooks type.","type":[[["Object","<"],["WebhookType",", "],["number",">"]]]},{"name":"WSCodes","description":"The types of WebSocket error codes.","type":[[["WSCodes"]]]},{"name":"WSEvents","description":"The type of a WebSocket message event.","type":[[["Object","<"],["WSEventType",", "],["WSEventType",">"]]]}],"meta":{"line":1870,"file":"Constants.js","path":"src/util"}},{"name":"MaxBulkDeletableMessageAge","description":"Max bulk deletable message age","type":[[["number"]]],"meta":{"line":11,"file":"Constants.js","path":"src/util"}},{"name":"captchaServices","description":"API captcha solver\n* `2captcha` - 2captcha.com\n* `capmonster` - capmonster.cloud","type":[[["Array","<"],["string",">"]]],"meta":{"line":17,"file":"Constants.js","path":"src/util"}},{"name":"DMScanLevel","description":"Automatically scan and delete direct messages you receive that contain explicit media content.\n* `NOT_SCAN` - Direct messages will not be scanned for explicit content.\n* `NOT_FRIEND` - Scan direct messages from everyone unless they are a friend.\n* `EVERYONE` - Scan direct messages from everyone.","type":[[["string"]]],"meta":{"line":25,"file":"Constants.js","path":"src/util"}},{"name":"stickerAnimationMode","description":"This controls when stickers animate:\n* `ALWAYS` - Always animate.\n* `INTERACTION` - On the desktop client, stickers will animate on hover or focus. On mobile clients, stickers will animate on long-press.\n* `NEVER` - Never animate.","type":[[["string"]]],"meta":{"line":34,"file":"Constants.js","path":"src/util"}},{"name":"NitroType","description":"All available nitro types:\n* `NONE` - None\n* `NITRO_CLASSIC` - Nitro Classic\n* `NITRO_BOOST` - Nitro\n* `NITRO_BASIC` - Nitro Basic\n* `UNKNOWN` - Unknown","see":["{@link https://discord.com/developers/docs/resources/user#user-object-premium-types}"],"type":[[["string"]]],"meta":{"line":43,"file":"Constants.js","path":"src/util"}},{"name":"HypeSquadType","description":"All available HypeSquad types:\n* `LEAVE` - None\n* `HOUSE_BRAVERY` - HypeSquad Bravery\n* `HOUSE_BRILLIANCE` - HypeSquad Brilliance\n* `HOUSE_BALANCE` - HypeSquad Balance","type":[[["string"]]],"meta":{"line":55,"file":"Constants.js","path":"src/util"}},{"name":"localeSetting","description":"All locale codes:\n* `DANISH`\n* `GERMAN`\n* `ENGLISH_UK`\n* `ENGLISH_US`\n* `SPANISH`\n* `FRENCH`\n* `CROATIAN`\n* `ITALIAN`\n* `LITHUANIAN`\n* `HUNGARIAN`\n* `DUTCH`\n* `NORWEGIAN`\n* `POLISH`\n* `BRAZILIAN_PORTUGUESE`\n* `ROMANIA_ROMANIAN`\n* `FINNISH`\n* `SWEDISH`\n* `VIETNAMESE`\n* `TURKISH`\n* `CZECH`\n* `GREEK`\n* `BULGARIAN`\n* `RUSSIAN`\n* `UKRAINIAN`\n* `HINDI`\n* `THAI`\n* `CHINA_CHINESE`\n* `JAPANESE`\n* `TAIWAN_CHINESE`\n* `KOREAN`","see":["{@link https://discord.com/developers/docs/reference#locales}"],"type":[[["Object","<"],["string",", "],["string",">"]]],"meta":{"line":65,"file":"Constants.js","path":"src/util"}},{"name":"WSCodes","description":"The types of WebSocket error codes:\n* 1000: WS_CLOSE_REQUESTED\n* 1011: INTERNAL_ERROR\n* 4004: TOKEN_INVALID\n* 4010: SHARDING_INVALID\n* 4011: SHARDING_REQUIRED\n* 4013: INVALID_INTENTS\n* 4014: DISALLOWED_INTENTS","type":[[["Object","<"],["number",", "],["string",">"]]],"meta":{"line":133,"file":"Constants.js","path":"src/util"}},{"name":"ImageURLOptions","description":"Options for Image URLs.","type":[[["StaticImageURLOptions"]]],"props":[{"name":"dynamic","description":"If true, the format will dynamically change to `gif` for animated avatars.","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":165,"file":"Constants.js","path":"src/util"}},{"name":"StaticImageURLOptions","description":"Options for static Image URLs.","type":[[["Object"]]],"props":[{"name":"format","description":"One of `webp`, `png`, `jpg`, `jpeg`.","optional":true,"default":"'webp'","type":[[["string"]]]},{"name":"size","description":"One of `16`, `32`, `56`, `64`, `96`, `128`, `256`, `300`, `512`, `600`, `1024`, `2048`,\n`4096`","optional":true,"type":[[["number"]]]}],"meta":{"line":171,"file":"Constants.js","path":"src/util"}},{"name":"Endpoints","description":"An object containing functions that return certain endpoints on the API.","see":["{@link https://discord.com/developers/docs/reference#image-formatting-cdn-endpoints}"],"type":[[["Object","<"],["string",", ("],["function","()|"],["string",")>"]]],"meta":{"line":179,"file":"Constants.js","path":"src/util"}},{"name":"Status","description":"The current status of the client. Here are the available statuses:\n* READY: 0\n* CONNECTING: 1\n* RECONNECTING: 2\n* IDLE: 3\n* NEARLY: 4\n* DISCONNECTED: 5\n* WAITING_FOR_GUILDS: 6\n* IDENTIFYING: 7\n* RESUMING: 8","type":[[["Object","<"],["string",", "],["number",">"]]],"meta":{"line":240,"file":"Constants.js","path":"src/util"}},{"name":"Opcodes","description":"The Opcodes sent to the Gateway:\n* DISPATCH: 0\n* HEARTBEAT: 1\n* IDENTIFY: 2\n* STATUS_UPDATE: 3\n* VOICE_STATE_UPDATE: 4\n* VOICE_GUILD_PING: 5\n* RESUME: 6\n* RECONNECT: 7\n* REQUEST_GUILD_MEMBERS: 8\n* INVALID_SESSION: 9\n* HELLO: 10\n* HEARTBEAT_ACK: 11\n* GUILD_SYNC: 12 [Unused]\n* DM_UPDATE: 13 # Send => used to get dm features\n* GUILD_SUBSCRIPTIONS: 14 # Send => discord responds back with GUILD_MEMBER_LIST_UPDATE type SYNC...\n* LOBBY_CONNECT: 15\n* LOBBY_DISCONNECT: 16\n* LOBBY_VOICE_STATE_UPDATE: 17 # Receive\n* STREAM_CREATE: 18\n* STREAM_DELETE: 19\n* STREAM_WATCH: 20\n* STREAM_PING: 21 # Send\n* STREAM_SET_PAUSED: 22\n* LFG_SUBSCRIPTIONS: 23 [Unused]\n* REQUEST_GUILD_APPLICATION_COMMANDS: 24 [Unused]\n* EMBEDDED_ACTIVITY_LAUNCH: 25 => Launch an embedded activity in a voice channel or call.\n* EMBEDDED_ACTIVITY_CLOSE: 26 => Stop an embedded activity.\n* EMBEDDED_ACTIVITY_UPDATE: 27 => Update an embedded activity.\n* REQUEST_FORUM_UNREADS: 28 => Request forum channel unread counts.\n* REMOTE_COMMAND: 29 => Send a remote command to an embedded (Xbox, PlayStation) voice session.\n* GET_DELETED_ENTITY_IDS_NOT_MATCHING_HASH: 30 => Request deleted entity IDs not matching a given hash for a guild.\n* REQUEST_SOUNDBOARD_SOUNDS: 31\n* SPEED_TEST_CREATE: 32 => Create a voice speed test.\n* SPEED_TEST_DELETE: 33 => Delete a voice speed test.\n* REQUEST_LAST_MESSAGES: 34 => \tRequest last messages for a guild's channels.\n* SEARCH_RECENT_MEMBERS: 35 => ~ Opcode 8 (Member Safety)","type":[[["Object","<"],["string",", "],["number",">"]]],"meta":{"line":265,"file":"Constants.js","path":"src/util"}},{"name":"Events","description":"The types of events emitted by the Client:\n* RATE_LIMIT: rateLimit\n* INVALID_REQUEST_WARNING: invalidRequestWarning\n* API_RESPONSE: apiResponse\n* API_REQUEST: apiRequest\n* CLIENT_READY: ready\n* APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE: applicationCommandAutocompleteResponse\n* APPLICATION_COMMAND_CREATE: applicationCommandCreate (deprecated)\n* APPLICATION_COMMAND_DELETE: applicationCommandDelete (deprecated)\n* APPLICATION_COMMAND_UPDATE: applicationCommandUpdate (deprecated)\n* APPLICATION_COMMAND_PERMISSIONS_UPDATE: applicationCommandPermissionsUpdate\n* AUTO_MODERATION_ACTION_EXECUTION: autoModerationActionExecution\n* AUTO_MODERATION_RULE_CREATE: autoModerationRuleCreate\n* AUTO_MODERATION_RULE_DELETE: autoModerationRuleDelete\n* AUTO_MODERATION_RULE_UPDATE: autoModerationRuleUpdate\n* CALL_CREATE: callCreate\n* CALL_DELETE: callDelete\n* CALL_UPDATE: callUpdate\n* GUILD_AVAILABLE: guildAvailable\n* GUILD_CREATE: guildCreate\n* GUILD_DELETE: guildDelete\n* GUILD_UPDATE: guildUpdate\n* GUILD_UNAVAILABLE: guildUnavailable\n* GUILD_MEMBER_ADD: guildMemberAdd\n* GUILD_MEMBER_REMOVE: guildMemberRemove\n* GUILD_MEMBER_UPDATE: guildMemberUpdate\n* GUILD_MEMBER_AVAILABLE: guildMemberAvailable\n* GUILD_MEMBERS_CHUNK: guildMembersChunk\n* GUILD_INTEGRATIONS_UPDATE: guildIntegrationsUpdate\n* GUILD_ROLE_CREATE: roleCreate\n* GUILD_ROLE_DELETE: roleDelete\n* INVITE_CREATE: inviteCreate\n* INVITE_DELETE: inviteDelete\n* GUILD_ROLE_UPDATE: roleUpdate\n* GUILD_EMOJI_CREATE: emojiCreate\n* GUILD_EMOJI_DELETE: emojiDelete\n* GUILD_EMOJI_UPDATE: emojiUpdate\n* GUILD_BAN_ADD: guildBanAdd\n* GUILD_BAN_REMOVE: guildBanRemove\n* CHANNEL_CREATE: channelCreate\n* CHANNEL_DELETE: channelDelete\n* CHANNEL_UPDATE: channelUpdate\n* CHANNEL_PINS_UPDATE: channelPinsUpdate\n* CHANNEL_RECIPIENT_REMOVE: channelRecipientRemove\n* CHANNEL_RECIPIENT_ADD: channelRecipientAdd\n* MESSAGE_ACK: messageAck\n* MESSAGE_CREATE: messageCreate\n* MESSAGE_DELETE: messageDelete\n* MESSAGE_UPDATE: messageUpdate\n* MESSAGE_BULK_DELETE: messageDeleteBulk\n* MESSAGE_REACTION_ADD: messageReactionAdd\n* MESSAGE_REACTION_REMOVE: messageReactionRemove\n* MESSAGE_REACTION_REMOVE_ALL: messageReactionRemoveAll\n* MESSAGE_REACTION_REMOVE_EMOJI: messageReactionRemoveEmoji\n* THREAD_CREATE: threadCreate\n* THREAD_DELETE: threadDelete\n* THREAD_UPDATE: threadUpdate\n* THREAD_LIST_SYNC: threadListSync\n* THREAD_MEMBER_UPDATE: threadMemberUpdate\n* THREAD_MEMBERS_UPDATE: threadMembersUpdate\n* USER_UPDATE: userUpdate\n* PRESENCE_UPDATE: presenceUpdate\n* VOICE_SERVER_UPDATE: voiceServerUpdate\n* VOICE_STATE_UPDATE: voiceStateUpdate\n* TYPING_START: typingStart\n* WEBHOOKS_UPDATE: webhookUpdate\n* INTERACTION_CREATE: interactionCreate\n* ERROR: error\n* WARN: warn\n* DEBUG: debug\n* CACHE_SWEEP: cacheSweep\n* SHARD_DISCONNECT: shardDisconnect\n* SHARD_ERROR: shardError\n* SHARD_RECONNECTING: shardReconnecting\n* SHARD_READY: shardReady\n* SHARD_RESUME: shardResume\n* INVALIDATED: invalidated\n* RAW: raw\n* STAGE_INSTANCE_CREATE: stageInstanceCreate\n* STAGE_INSTANCE_UPDATE: stageInstanceUpdate\n* STAGE_INSTANCE_DELETE: stageInstanceDelete\n* GUILD_STICKER_CREATE: stickerCreate\n* GUILD_STICKER_DELETE: stickerDelete\n* GUILD_STICKER_UPDATE: stickerUpdate\n* GUILD_SCHEDULED_EVENT_CREATE: guildScheduledEventCreate\n* GUILD_SCHEDULED_EVENT_UPDATE: guildScheduledEventUpdate\n* GUILD_SCHEDULED_EVENT_DELETE: guildScheduledEventDelete\n* GUILD_SCHEDULED_EVENT_USER_ADD: guildScheduledEventUserAdd\n* GUILD_SCHEDULED_EVENT_USER_REMOVE: guildScheduledEventUserRemove\n* GUILD_AUDIT_LOG_ENTRY_CREATE: guildAuditLogEntryCreate","type":[[["Object","<"],["string",", "],["string",">"]]],"meta":{"line":344,"file":"Constants.js","path":"src/util"}},{"name":"ShardEvents","description":"The types of events emitted by a Shard:\n* CLOSE: close\n* DESTROYED: destroyed\n* INVALID_SESSION: invalidSession\n* READY: ready\n* RESUMED: resumed\n* ALL_READY: allReady","type":[[["Object","<"],["string",", "],["string",">"]]],"meta":{"line":548,"file":"Constants.js","path":"src/util"}},{"name":"PartialType","description":"The type of Structure allowed to be a partial:\n* USER\n* CHANNEL (only affects DMChannels)\n* GUILD_MEMBER\n* MESSAGE\n* REACTION\n* GUILD_SCHEDULED_EVENT\nPartials require you to put checks in place when handling data. See the \"Partial Structures\" topic on the\n[guide](https://discordjs.guide/popular-topics/partials.html) for more information.","type":[[["string"]]],"meta":{"line":567,"file":"Constants.js","path":"src/util"}},{"name":"WSEventType","description":"The type of a WebSocket message event, e.g. `MESSAGE_CREATE`. Here are the available events:\n* READY\n* RESUMED\n* APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE\n* APPLICATION_COMMAND_CREATE (deprecated)\n* APPLICATION_COMMAND_DELETE (deprecated)\n* APPLICATION_COMMAND_UPDATE (deprecated)\n* APPLICATION_COMMAND_PERMISSIONS_UPDATE\n* AUTO_MODERATION_ACTION_EXECUTION\n* AUTO_MODERATION_RULE_CREATE\n* AUTO_MODERATION_RULE_DELETE\n* AUTO_MODERATION_RULE_UPDATE\n* GUILD_CREATE\n* GUILD_DELETE\n* GUILD_UPDATE\n* INVITE_CREATE\n* INVITE_DELETE\n* GUILD_MEMBER_ADD\n* GUILD_MEMBER_REMOVE\n* GUILD_MEMBER_UPDATE\n* GUILD_MEMBERS_CHUNK\n* GUILD_INTEGRATIONS_UPDATE\n* GUILD_ROLE_CREATE\n* GUILD_ROLE_DELETE\n* GUILD_ROLE_UPDATE\n* GUILD_BAN_ADD\n* GUILD_BAN_REMOVE\n* GUILD_EMOJIS_UPDATE\n* CHANNEL_CREATE\n* CHANNEL_DELETE\n* CHANNEL_UPDATE\n* CHANNEL_PINS_UPDATE\n* MESSAGE_CREATE\n* MESSAGE_DELETE\n* MESSAGE_UPDATE\n* MESSAGE_DELETE_BULK\n* MESSAGE_REACTION_ADD\n* MESSAGE_REACTION_REMOVE\n* MESSAGE_REACTION_REMOVE_ALL\n* MESSAGE_REACTION_REMOVE_EMOJI\n* THREAD_CREATE\n* THREAD_UPDATE\n* THREAD_DELETE\n* THREAD_LIST_SYNC\n* THREAD_MEMBER_UPDATE\n* THREAD_MEMBERS_UPDATE\n* USER_UPDATE\n* PRESENCE_UPDATE\n* TYPING_START\n* VOICE_STATE_UPDATE\n* VOICE_SERVER_UPDATE\n* WEBHOOKS_UPDATE\n* INTERACTION_CREATE\n* STAGE_INSTANCE_CREATE\n* STAGE_INSTANCE_UPDATE\n* STAGE_INSTANCE_DELETE\n* GUILD_STICKERS_UPDATE\n* GUILD_SCHEDULED_EVENT_CREATE\n* GUILD_SCHEDULED_EVENT_UPDATE\n* GUILD_SCHEDULED_EVENT_DELETE\n* GUILD_SCHEDULED_EVENT_USER_ADD\n* GUILD_SCHEDULED_EVENT_USER_REMOVE\n* GUILD_AUDIT_LOG_ENTRY_CREATE","see":["{@link https://discord.com/developers/docs/topics/gateway-events#receive-events}"],"type":[[["string"]]],"meta":{"line":581,"file":"Constants.js","path":"src/util"}},{"name":"InviteScope","description":"A valid scope to request when generating an invite link.\nScopes that require whitelist are not considered valid for this generator\n* `applications.builds.read`: allows reading build data for a users applications\n* `applications.commands`: allows this bot to create commands in the server\n* `applications.entitlements`: allows reading entitlements for a users applications\n* `applications.store.update`: allows reading and updating of store data for a users applications\n* `bot`: makes the bot join the selected guild\n* `connections`: makes the endpoint for getting a users connections available\n* `email`: allows the `/users/@me` endpoint return with an email\n* `identify`: allows the `/users/@me` endpoint without an email\n* `guilds`: makes the `/users/@me/guilds` endpoint available for a user\n* `guilds.join`: allows the bot to join the user to any guild it is in using Guild#addMember\n* `gdm.join`: allows joining the user to a group dm\n* `webhook.incoming`: generates a webhook to a channel","see":["{@link https://discord.com/developers/docs/topics/oauth2#shared-resources-oauth2-scopes}"],"type":[[["string"]]],"meta":{"line":713,"file":"Constants.js","path":"src/util"}},{"name":"IntegrationExpireBehavior","description":"The behavior of expiring subscribers for Integrations. This can be:\n* REMOVE_ROLE\n* KICK","see":["{@link https://discord.com/developers/docs/resources/guild#integration-object-integration-expire-behaviors}"],"type":[[["string"]]],"meta":{"line":747,"file":"Constants.js","path":"src/util"}},{"name":"MessageType","description":"The type of a message, e.g. `DEFAULT`. Here are the available types:\n* DEFAULT\n* RECIPIENT_ADD\n* RECIPIENT_REMOVE\n* CALL\n* CHANNEL_NAME_CHANGE\n* CHANNEL_ICON_CHANGE\n* CHANNEL_PINNED_MESSAGE\n* GUILD_MEMBER_JOIN\n* USER_PREMIUM_GUILD_SUBSCRIPTION\n* USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_1\n* USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_2\n* USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_3\n* CHANNEL_FOLLOW_ADD\n* GUILD_DISCOVERY_DISQUALIFIED\n* GUILD_DISCOVERY_REQUALIFIED\n* GUILD_DISCOVERY_GRACE_PERIOD_INITIAL_WARNING\n* GUILD_DISCOVERY_GRACE_PERIOD_FINAL_WARNING\n* THREAD_CREATED\n* REPLY\n* APPLICATION_COMMAND\n* THREAD_STARTER_MESSAGE\n* GUILD_INVITE_REMINDER\n* CONTEXT_MENU_COMMAND\n* AUTO_MODERATION_ACTION\n* ROLE_SUBSCRIPTION_PURCHASE","see":["{@link https://discord.com/developers/docs/resources/channel#message-object-message-types}"],"type":[[["string"]]],"meta":{"line":756,"file":"Constants.js","path":"src/util"}},{"name":"SweeperKey","description":"The name of an item to be swept in Sweepers\n* `applicationCommands` - both global and guild commands\n* `autoModerationRules`\n* `bans`\n* `emojis`\n* `invites` - accepts the `lifetime` property, using it will sweep based on expires timestamp\n* `guildMembers`\n* `messages` - accepts the `lifetime` property, using it will sweep based on edited or created timestamp\n* `presences`\n* `reactions`\n* `stageInstances`\n* `stickers`\n* `threadMembers`\n* `threads` - accepts the `lifetime` property, using it will sweep archived threads based on archived timestamp\n* `users`\n* `voiceStates`","type":[[["string"]]],"meta":{"line":815,"file":"Constants.js","path":"src/util"}},{"name":"SystemMessageType","description":"The types of messages that are `System`. The available types are `MessageTypes` excluding:\n* DEFAULT\n* REPLY\n* APPLICATION_COMMAND\n* CONTEXT_MENU_COMMAND","type":[[["string"]]],"meta":{"line":852,"file":"Constants.js","path":"src/util"}},{"name":"ActivityType","description":"Bots cannot set a `CUSTOM` activity type, it is only for custom statuses received from users\nThe type of an activity of a user's presence. Here are the available types:\n* PLAYING\n* STREAMING\n* LISTENING\n* WATCHING\n* CUSTOM\n* COMPETING","see":["{@link https://discord.com/developers/docs/game-sdk/activities#data-models-activitytype-enum}"],"type":[[["string"]]],"meta":{"line":864,"file":"Constants.js","path":"src/util"}},{"name":"ChannelType","description":"All available channel types:\n* `GUILD_TEXT` - a guild text channel\n* `DM` - a DM channel\n* `GUILD_VOICE` - a guild voice channel\n* `GROUP_DM` - a group DM channel\n* `GUILD_CATEGORY` - a guild category channel\n* `GUILD_NEWS` - a guild news channel\n* `GUILD_STORE` - a guild store channel\nStore channels are deprecated and will be removed from Discord in March 2022. See\n[Self-serve Game Selling Deprecation](https://support-dev.discord.com/hc/en-us/articles/6309018858647)\nfor more information.\n* `GUILD_NEWS_THREAD` - a guild news channel's public thread channel\n* `GUILD_PUBLIC_THREAD` - a guild text channel's public thread channel\n* `GUILD_PRIVATE_THREAD` - a guild text channel's private thread channel\n* `GUILD_STAGE_VOICE` - a guild stage voice channel\n* `GUILD_DIRECTORY` - the channel in a hub containing guilds\n* `GUILD_FORUM` - a guild channel that only contains threads\n* `UNKNOWN` - a generic channel of unknown type, could be Channel or GuildChannel","see":["{@link https://discord.com/developers/docs/resources/channel#channel-object-channel-types}"],"type":[[["string"]]],"meta":{"line":878,"file":"Constants.js","path":"src/util"}},{"name":"TextBasedChannels","description":"The channels that are text-based.\n* DMChannel\n* TextChannel\n* NewsChannel\n* ThreadChannel\n* VoiceChannel\n* StageChannel","type":[[["DMChannel"]],[["TextChannel"]],[["NewsChannel"]],[["ThreadChannel"]],[["VoiceChannel"]],[["StageChannel"]]],"meta":{"line":918,"file":"Constants.js","path":"src/util"}},{"name":"TextBasedChannelsResolvable","description":"Data that resolves to give a text-based channel. This can be:\n* A text-based channel\n* A snowflake","type":[[["TextBasedChannels"]],[["Snowflake"]]],"meta":{"line":929,"file":"Constants.js","path":"src/util"}},{"name":"TextBasedChannelTypes","description":"The types of channels that are text-based. The available types are:\n* DM\n* GUILD_TEXT\n* GUILD_NEWS\n* GUILD_NEWS_THREAD\n* GUILD_PUBLIC_THREAD\n* GUILD_PRIVATE_THREAD\n* GUILD_VOICE\n* GUILD_STAGE_VOICE","type":[[["string"]]],"meta":{"line":936,"file":"Constants.js","path":"src/util"}},{"name":"ThreadChannelTypes","description":"The types of channels that are threads. The available types are:\n* GUILD_NEWS_THREAD\n* GUILD_PUBLIC_THREAD\n* GUILD_PRIVATE_THREAD","type":[[["string"]]],"meta":{"line":959,"file":"Constants.js","path":"src/util"}},{"name":"VoiceBasedChannelTypes","description":"The types of channels that are voice-based. The available types are:\n* GUILD_VOICE\n* GUILD_STAGE_VOICE","type":[[["string"]]],"meta":{"line":968,"file":"Constants.js","path":"src/util"}},{"name":"ClientApplicationAssetTypes","description":"The types of assets of an application:\n* SMALL: 1\n* BIG: 2","type":[[["Object","<"],["string",", "],["number",">"]]],"meta":{"line":976,"file":"Constants.js","path":"src/util"}},{"name":"Color","description":"A commonly used color:\n* DEFAULT\n* WHITE\n* AQUA\n* GREEN\n* BLUE\n* YELLOW\n* PURPLE\n* LUMINOUS_VIVID_PINK\n* FUCHSIA\n* GOLD\n* ORANGE\n* RED\n* GREY\n* NAVY\n* DARK_AQUA\n* DARK_GREEN\n* DARK_BLUE\n* DARK_PURPLE\n* DARK_VIVID_PINK\n* DARK_GOLD\n* DARK_ORANGE\n* DARK_RED\n* DARK_GREY\n* DARKER_GREY\n* LIGHT_GREY\n* DARK_NAVY\n* BLURPLE\n* GREYPLE\n* DARK_BUT_NOT_BLACK\n* NOT_QUITE_BLACK","type":[[["string"]]],"meta":{"line":987,"file":"Constants.js","path":"src/util"}},{"name":"ExplicitContentFilterLevel","description":"The value set for the explicit content filter levels for a guild:\n* DISABLED\n* MEMBERS_WITHOUT_ROLES\n* ALL_MEMBERS","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-explicit-content-filter-level}"],"type":[[["string"]]],"meta":{"line":1054,"file":"Constants.js","path":"src/util"}},{"name":"VerificationLevel","description":"The value set for the verification levels for a guild:\n* NONE\n* LOW\n* MEDIUM\n* HIGH\n* VERY_HIGH","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-verification-level}"],"type":[[["string"]]],"meta":{"line":1064,"file":"Constants.js","path":"src/util"}},{"name":"APIError","description":"An error encountered while performing an API request. Here are the potential errors:\n* UNKNOWN_ACCOUNT\n* UNKNOWN_APPLICATION\n* UNKNOWN_CHANNEL\n* UNKNOWN_GUILD\n* UNKNOWN_INTEGRATION\n* UNKNOWN_INVITE\n* UNKNOWN_MEMBER\n* UNKNOWN_MESSAGE\n* UNKNOWN_OVERWRITE\n* UNKNOWN_PROVIDER\n* UNKNOWN_ROLE\n* UNKNOWN_TOKEN\n* UNKNOWN_USER\n* UNKNOWN_EMOJI\n* UNKNOWN_WEBHOOK\n* UNKNOWN_WEBHOOK_SERVICE\n* UNKNOWN_SESSION\n* UNKNOWN_BAN\n* UNKNOWN_SKU\n* UNKNOWN_STORE_LISTING\n* UNKNOWN_ENTITLEMENT\n* UNKNOWN_BUILD\n* UNKNOWN_LOBBY\n* UNKNOWN_BRANCH\n* UNKNOWN_STORE_DIRECTORY_LAYOUT\n* UNKNOWN_REDISTRIBUTABLE\n* UNKNOWN_GIFT_CODE\n* UNKNOWN_STREAM\n* UNKNOWN_PREMIUM_SERVER_SUBSCRIBE_COOLDOWN\n* UNKNOWN_GUILD_TEMPLATE\n* UNKNOWN_DISCOVERABLE_SERVER_CATEGORY\n* UNKNOWN_STICKER\n* UNKNOWN_INTERACTION\n* UNKNOWN_APPLICATION_COMMAND\n* UNKNOWN_APPLICATION_COMMAND_PERMISSIONS\n* UNKNOWN_STAGE_INSTANCE\n* UNKNOWN_GUILD_MEMBER_VERIFICATION_FORM\n* UNKNOWN_GUILD_WELCOME_SCREEN\n* UNKNOWN_GUILD_SCHEDULED_EVENT\n* UNKNOWN_GUILD_SCHEDULED_EVENT_USER\n* BOT_PROHIBITED_ENDPOINT\n* BOT_ONLY_ENDPOINT\n* CANNOT_SEND_EXPLICIT_CONTENT\n* NOT_AUTHORIZED\n* SLOWMODE_RATE_LIMIT\n* ACCOUNT_OWNER_ONLY\n* ANNOUNCEMENT_EDIT_LIMIT_EXCEEDED\n* CHANNEL_HIT_WRITE_RATELIMIT\n* SERVER_HIT_WRITE_RATELIMIT\n* CONTENT_NOT_ALLOWED\n* GUILD_PREMIUM_LEVEL_TOO_LOW\n* MAXIMUM_GUILDS\n* MAXIMUM_FRIENDS\n* MAXIMUM_PINS\n* MAXIMUM_RECIPIENTS\n* MAXIMUM_ROLES\n* MAXIMUM_USERNAMES\n* MAXIMUM_WEBHOOKS\n* MAXIMUM_EMOJIS\n* MAXIMUM_REACTIONS\n* MAXIMUM_CHANNELS\n* MAXIMUM_ATTACHMENTS\n* MAXIMUM_INVITES\n* MAXIMUM_ANIMATED_EMOJIS\n* MAXIMUM_SERVER_MEMBERS\n* MAXIMUM_NUMBER_OF_SERVER_CATEGORIES\n* GUILD_ALREADY_HAS_TEMPLATE\n* MAXIMUM_THREAD_PARTICIPANTS\n* MAXIMUM_NON_GUILD_MEMBERS_BANS\n* MAXIMUM_BAN_FETCHES\n* MAXIMUM_NUMBER_OF_UNCOMPLETED_GUILD_SCHEDULED_EVENTS_REACHED\n* MAXIMUM_NUMBER_OF_STICKERS_REACHED\n* MAXIMUM_PRUNE_REQUESTS\n* MAXIMUM_GUILD_WIDGET_SETTINGS_UPDATE\n* UNAUTHORIZED\n* ACCOUNT_VERIFICATION_REQUIRED\n* DIRECT_MESSAGES_TOO_FAST\n* REQUEST_ENTITY_TOO_LARGE\n* FEATURE_TEMPORARILY_DISABLED\n* USER_BANNED\n* TARGET_USER_NOT_CONNECTED_TO_VOICE\n* ALREADY_CROSSPOSTED\n* MISSING_ACCESS\n* INVALID_ACCOUNT_TYPE\n* CANNOT_EXECUTE_ON_DM\n* EMBED_DISABLED\n* CANNOT_EDIT_MESSAGE_BY_OTHER\n* CANNOT_SEND_EMPTY_MESSAGE\n* CANNOT_MESSAGE_USER\n* CANNOT_SEND_MESSAGES_IN_VOICE_CHANNEL\n* CHANNEL_VERIFICATION_LEVEL_TOO_HIGH\n* OAUTH2_APPLICATION_BOT_ABSENT\n* MAXIMUM_OAUTH2_APPLICATIONS\n* INVALID_OAUTH_STATE\n* MISSING_PERMISSIONS\n* INVALID_AUTHENTICATION_TOKEN\n* NOTE_TOO_LONG\n* INVALID_BULK_DELETE_QUANTITY\n* CANNOT_PIN_MESSAGE_IN_OTHER_CHANNEL\n* INVALID_OR_TAKEN_INVITE_CODE\n* CANNOT_EXECUTE_ON_SYSTEM_MESSAGE\n* CANNOT_EXECUTE_ON_CHANNEL_TYPE\n* INVALID_OAUTH_TOKEN\n* MISSING_OAUTH_SCOPE\n* INVALID_WEBHOOK_TOKEN\n* INVALID_ROLE\n* INVALID_RECIPIENTS\n* BULK_DELETE_MESSAGE_TOO_OLD\n* INVALID_FORM_BODY\n* INVITE_ACCEPTED_TO_GUILD_NOT_CONTAINING_BOT\n* INVALID_API_VERSION\n* FILE_UPLOADED_EXCEEDS_MAXIMUM_SIZE\n* INVALID_FILE_UPLOADED\n* GIFT_CODE_CLAIMED\n* CANNOT_SELF_REDEEM_GIFT\n* INVALID_GUILD\n* INVALID_MESSAGE_TYPE\n* PAYMENT_SOURCE_REQUIRED\n* CANNOT_DELETE_COMMUNITY_REQUIRED_CHANNEL\n* INVALID_STICKER_SENT\n* INVALID_OPERATION_ON_ARCHIVED_THREAD\n* INVALID_THREAD_NOTIFICATION_SETTINGS\n* PARAMETER_EARLIER_THAN_CREATION\n* GUILD_NOT_AVAILABLE_IN_LOCATION\n* GUILD_MONETIZATION_REQUIRED\n* INSUFFICIENT_BOOSTS\n* INVALID_JSON\n* TWO_FACTOR_REQUIRED\n* INVALID_TWO_FACTOR_CODE\n* NO_USERS_WITH_DISCORDTAG_EXIST\n* REACTION_BLOCKED\n* RESOURCE_OVERLOADED\n* STAGE_ALREADY_OPEN\n* CANNOT_REPLY_WITHOUT_READ_MESSAGE_HISTORY_PERMISSION\n* MESSAGE_ALREADY_HAS_THREAD\n* THREAD_LOCKED\n* MAXIMUM_ACTIVE_THREADS\n* MAXIMUM_ACTIVE_ANNOUNCEMENT_THREADS\n* INVALID_JSON_FOR_UPLOADED_LOTTIE_FILE\n* UPLOADED_LOTTIES_CANNOT_CONTAIN_RASTERIZED_IMAGES\n* STICKER_MAXIMUM_FRAMERATE_EXCEEDED\n* STICKER_FRAME_COUNT_EXCEEDS_MAXIMUM_OF_1000_FRAMES\n* LOTTIE_ANIMATION_MAXIMUM_DIMENSIONS_EXCEEDED\n* STICKER_FRAME_RATE_IS_TOO_SMALL_OR_TOO_LARGE\n* STICKER_ANIMATION_DURATION_EXCEEDS_MAXIMUM_OF_5_SECONDS\n* CANNOT_UPDATE_A_FINISHED_EVENT\n* FAILED_TO_CREATE_STAGE_NEEDED_FOR_STAGE_EVENT","see":["{@link https://discord.com/developers/docs/topics/opcodes-and-status-codes#json-json-error-codes}","{@link https://gist.github.com/Dziurwa14/de2498e5ee28d2089f095aa037957cbb}"],"type":[[["string"]]],"meta":{"line":1076,"file":"Constants.js","path":"src/util"}},{"name":"DefaultMessageNotificationLevel","description":"The value set for a guild's default message notifications, e.g. `ALL_MESSAGES`. Here are the available types:\n* ALL_MESSAGES\n* ONLY_MENTIONS","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-default-message-notification-level}"],"type":[[["string"]]],"meta":{"line":1434,"file":"Constants.js","path":"src/util"}},{"name":"MembershipState","description":"The value set for a team member's membership state:\n* INVITED\n* ACCEPTED","see":["{@link https://discord.com/developers/docs/topics/teams#data-models-membership-state-enum}"],"type":[[["string"]]],"meta":{"line":1443,"file":"Constants.js","path":"src/util"}},{"name":"WebhookType","description":"The value set for a webhook's type:\n* Incoming\n* Channel Follower\n* Application","see":["{@link https://discord.com/developers/docs/resources/webhook#webhook-object-webhook-types}"],"type":[[["string"]]],"meta":{"line":1452,"file":"Constants.js","path":"src/util"}},{"name":"StickerType","description":"The value set for a sticker's type:\n* STANDARD\n* GUILD","see":["{@link https://discord.com/developers/docs/resources/sticker#sticker-object-sticker-types}"],"type":[[["string"]]],"meta":{"line":1462,"file":"Constants.js","path":"src/util"}},{"name":"StickerFormatType","description":"The value set for a sticker's format type:\n* PNG\n* APNG\n* LOTTIE\n* GIF","see":["{@link https://discord.com/developers/docs/resources/sticker#sticker-object-sticker-format-types}"],"type":[[["string"]]],"meta":{"line":1471,"file":"Constants.js","path":"src/util"}},{"name":"OverwriteType","description":"An overwrite type:\n* role\n* member","see":["{@link https://discord.com/developers/docs/resources/channel#overwrite-object-overwrite-structure}"],"type":[[["string"]]],"meta":{"line":1482,"file":"Constants.js","path":"src/util"}},{"name":"ApplicationCommandType","description":"The type of an {@link ApplicationCommand} object:\n* CHAT_INPUT\n* USER\n* MESSAGE","see":["{@link https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-types}"],"type":[[["string"]]],"meta":{"line":1492,"file":"Constants.js","path":"src/util"}},{"name":"ApplicationCommandOptionType","description":"The type of an {@link ApplicationCommandOption} object:\n* SUB_COMMAND\n* SUB_COMMAND_GROUP\n* STRING\n* INTEGER\n* BOOLEAN\n* USER\n* CHANNEL\n* ROLE\n* MENTIONABLE\n* NUMBER\n* ATTACHMENT","see":["{@link https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-option-type}"],"type":[[["string"]]],"meta":{"line":1502,"file":"Constants.js","path":"src/util"}},{"name":"ApplicationCommandPermissionType","description":"The type of an {@link ApplicationCommandPermissions} object:\n* ROLE\n* USER","see":["{@link https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-application-command-permission-type}"],"type":[[["string"]]],"meta":{"line":1533,"file":"Constants.js","path":"src/util"}},{"name":"ApplicationRoleConnectionMetadataType","description":"Each metadata type offers a comparison operation that allows\nguilds to configure role requirements based on metadata values stored by the bot.\nBots specify a metadata value for each user and guilds specify\nthe required guild's configured value within the guild role settings.\nAll available channel types:\n* INTEGER_LESS_THAN_OR_EQUAL\n* INTEGER_GREATER_THAN_OR_EQUAL\n* INTEGER_EQUAL\n* INTEGER_NOT_EQUAL\n* DATATIME_LESS_THAN_OR_EQUAL\n* DATATIME_GREATER_THAN_OR_EQUAL\n* BOOLEAN_EQUAL\n* BOOLEAN_NOT_EQUAL","see":["{@link https://discord.com/developers/docs/resources/application-role-connection-metadata#application-role-connection-metadata-object-application-role-connection-metadata-type}"],"type":[[["string"]]],"meta":{"line":1542,"file":"Constants.js","path":"src/util"}},{"name":"AutoModerationRuleTriggerType","description":"The type of an {@link AutoModerationRuleTriggerTypes} object:\n* KEYWORD\n* SPAM\n* KEYWORD_PRESET\n* MENTION_SPAM","see":["{@link https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object-trigger-types}"],"type":[[["string"]]],"meta":{"line":1571,"file":"Constants.js","path":"src/util"}},{"name":"AutoModerationRuleKeywordPresetType","description":"The type of an {@link AutoModerationRuleKeywordPresetTypes} object:\n* KEYWORD\n* SPAM\n* KEYWORD_PRESET\n* MENTION_SPAM","see":["{@link https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object-keyword-preset-types}"],"type":[[["string"]]],"meta":{"line":1582,"file":"Constants.js","path":"src/util"}},{"name":"AutoModerationActionType","description":"The type of an {@link AutoModerationActionTypes} object:\n* BLOCK_MESSAGE\n* SEND_ALERT_MESSAGE\n* TIMEOUT","see":["{@link https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-action-object-action-types}"],"type":[[["string"]]],"meta":{"line":1592,"file":"Constants.js","path":"src/util"}},{"name":"AutoModerationRuleEventType","description":"The type of an {@link AutoModerationRuleEventTypes} object:\n* MESSAGE_SEND","see":["{@link https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object-event-types}"],"type":[[["string"]]],"meta":{"line":1602,"file":"Constants.js","path":"src/util"}},{"name":"InteractionType","description":"The type of an {@link Interaction} object:\n* PING\n* APPLICATION_COMMAND\n* MESSAGE_COMPONENT\n* APPLICATION_COMMAND_AUTOCOMPLETE\n* MODAL_SUBMIT","see":["{@link https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-object-interaction-type}"],"type":[[["string"]]],"meta":{"line":1611,"file":"Constants.js","path":"src/util"}},{"name":"InteractionResponseType","description":"The type of an interaction response:\n* PONG\n* CHANNEL_MESSAGE_WITH_SOURCE\n* DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE\n* DEFERRED_MESSAGE_UPDATE\n* UPDATE_MESSAGE\n* APPLICATION_COMMAND_AUTOCOMPLETE_RESULT\n* MODAL","see":["{@link https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-response-object-interaction-callback-type}"],"type":[[["string"]]],"meta":{"line":1630,"file":"Constants.js","path":"src/util"}},{"name":"MessageComponentType","description":"The type of a message component\n* ACTION_ROW\n* BUTTON\n* TEXT_INPUT\n* STRING_SELECT\n* USER_SELECT\n* ROLE_SELECT\n* MENTIONABLE_SELECT\n* CHANNEL_SELECT\n* SELECT_MENU (deprecated)","see":["{@link https://discord.com/developers/docs/interactions/message-components#component-object-component-types}"],"type":[[["string"]]],"meta":{"line":1655,"file":"Constants.js","path":"src/util"}},{"name":"SelectMenuComponentType","description":"The types of components that are select menus. The available types are:\n* SELECT_MENU (deprecated)\n* STRING_MENU\n* USER_SELECT\n* ROLE_SELECT\n* MENTIONABLE_SELECT\n* CHANNEL_SELECT","see":["{@link https://discord.com/developers/docs/interactions/message-components#component-object-component-types}"],"type":[[["string"]]],"meta":{"line":1687,"file":"Constants.js","path":"src/util"}},{"name":"MessageButtonStyle","description":"The style of a message button\n* PRIMARY\n* SECONDARY\n* SUCCESS\n* DANGER\n* LINK","see":["{@link https://discord.com/developers/docs/interactions/message-components#button-object-button-styles}"],"type":[[["string"]]],"meta":{"line":1712,"file":"Constants.js","path":"src/util"}},{"name":"MFALevel","description":"The required MFA level for a guild\n* NONE\n* ELEVATED","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-mfa-level}"],"type":[[["string"]]],"meta":{"line":1724,"file":"Constants.js","path":"src/util"}},{"name":"NSFWLevel","description":"NSFW level of a Guild:\n* DEFAULT\n* EXPLICIT\n* SAFE\n* AGE_RESTRICTED","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-guild-nsfw-level}"],"type":[[["string"]]],"meta":{"line":1733,"file":"Constants.js","path":"src/util"}},{"name":"PrivacyLevel","description":"Privacy level of a {@link StageInstance} object:\n* PUBLIC\n* GUILD_ONLY","see":["{@link https://discord.com/developers/docs/resources/stage-instance#stage-instance-object-privacy-level}"],"type":[[["string"]]],"meta":{"line":1744,"file":"Constants.js","path":"src/util"}},{"name":"TextInputStyle","description":"The style of a text input component\n* SHORT\n* PARAGRAPH","see":["{@link https://discord.com/developers/docs/interactions/message-components#text-inputs-text-input-styles}"],"type":[[["string"]]],"meta":{"line":1753,"file":"Constants.js","path":"src/util"}},{"name":"GuildScheduledEventPrivacyLevel","description":"Privacy level of a {@link GuildScheduledEvent} object:\n* GUILD_ONLY","see":["{@link https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-privacy-level}"],"type":[[["string"]]],"meta":{"line":1762,"file":"Constants.js","path":"src/util"}},{"name":"RelationshipTypes","description":"Relationship Enums:\n* 0: NONE\n* 1: FRIEND\n* 2: BLOCKED\n* 3: PENDING_INCOMING\n* 4: PENDING_OUTGOING\n* 5: IMPLICIT","see":["{@link https://luna.gitlab.io/discord-unofficial-docs/relationships.html}"],"type":[[["string"]]],"meta":{"line":1770,"file":"Constants.js","path":"src/util"}},{"name":"PremiumTier","description":"The premium tier (Server Boost level) of a guild:\n* NONE\n* TIER_1\n* TIER_2\n* TIER_3","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-premium-tier}"],"type":[[["string"]]],"meta":{"line":1791,"file":"Constants.js","path":"src/util"}},{"name":"GuildScheduledEventStatus","description":"The status of a {@link GuildScheduledEvent}:\n* SCHEDULED\n* ACTIVE\n* COMPLETED\n* CANCELED","see":["{@link https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-status}"],"type":[[["string"]]],"meta":{"line":1802,"file":"Constants.js","path":"src/util"}},{"name":"GuildScheduledEventEntityType","description":"The entity type of a {@link GuildScheduledEvent}:\n* NONE\n* STAGE_INSTANCE\n* VOICE\n* EXTERNAL","see":["{@link https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-entity-types}"],"type":[[["string"]]],"meta":{"line":1813,"file":"Constants.js","path":"src/util"}},{"name":"VideoQualityMode","description":"The camera video quality mode of a {@link VoiceChannel}:\n* AUTO\n* FULL","see":["{@link https://discord.com/developers/docs/resources/channel#channel-object-video-quality-modes}"],"type":[[["string"]]],"meta":{"line":1824,"file":"Constants.js","path":"src/util"}},{"name":"SortOrderType","description":"Sort {@link ForumChannel} posts by ?\n* LATEST_ACTIVITY\n* CREATION_DATE","see":["{@link https://discord.com/developers/docs/resources/channel/#channel-object-sort-order-types}"],"type":[[["string"]]],"meta":{"line":1833,"file":"Constants.js","path":"src/util"}},{"name":"ForumLayoutType","description":"The default forum layout to set on the {@link ForumChannel}\n* NOT_SET\n* LIST_VIEW\n* GALLERY_VIEW","see":["{@link https://discord.com/developers/docs/resources/channel/#channel-object-forum-layout-types}"],"type":[[["string"]]],"meta":{"line":1842,"file":"Constants.js","path":"src/util"}},{"name":"GuildTemplateResolvable","description":"Data that can be resolved to give a template code. This can be:\n* A template code\n* A template URL","type":[[["string"]]],"meta":{"line":23,"file":"DataResolver.js","path":"src/util"}},{"name":"Base64Resolvable","description":"Data that resolves to give a Base64 string, typically for image uploading. This can be:\n* A Buffer\n* A base64 string","type":[[["Buffer"]],[["string"]]],"meta":{"line":73,"file":"DataResolver.js","path":"src/util"}},{"name":"BufferResolvable","description":"Data that can be resolved to give a Buffer. This can be:\n* A Buffer\n* The path to a local file\n* A URL When provided a URL, discord.js will fetch the URL internally in order to create a Buffer.\nThis can pose a security risk when the URL has not been sanitized","type":[[["string"]],[["Buffer"]]],"meta":{"line":90,"file":"DataResolver.js","path":"src/util"}},{"name":"TimestampStylesString","description":"A message formatting timestamp style, as defined in\n[here](https://discord.com/developers/docs/reference#message-formatting-timestamp-styles).\n* `t` Short time format, consisting of hours and minutes, e.g. 16:20.\n* `T` Long time format, consisting of hours, minutes, and seconds, e.g. 16:20:30.\n* `d` Short date format, consisting of day, month, and year, e.g. 20/04/2021.\n* `D` Long date format, consisting of day, month, and year, e.g. 20 April 2021.\n* `f` Short date-time format, consisting of short date and short time formats, e.g. 20 April 2021 16:20.\n* `F` Long date-time format, consisting of long date and short time formats, e.g. Tuesday, 20 April 2021 16:20.\n* `R` Relative time format, consisting of a relative duration format, e.g. 2 months ago.","type":[[["string"]]],"meta":{"line":175,"file":"Formatters.js","path":"src/util"}},{"name":"GuildMemberFlagsResolvable","description":"Data that can be resolved to give a guild member flag bitfield. This can be:\n* A string (see {@link GuildMemberFlags.FLAGS})\n* A guild member flag\n* An instance of GuildMemberFlags\n* An Array of GuildMemberFlagsResolvable","type":[[["string"]],[["number"]],[["GuildMemberFlags"]],[["Array","<"],["GuildMemberFlagsResolvable",">"]]],"meta":{"line":34,"file":"GuildMemberFlags.js","path":"src/util"}},{"name":"IntentsResolvable","description":"Data that can be resolved to give a permission number. This can be:\n* A string (see {@link Intents.FLAGS})\n* An intents flag\n* An instance of Intents\n* An array of IntentsResolvable","type":[[["string"]],[["number"]],[["Intents"]],[["Array","<"],["IntentsResolvable",">"]]],"meta":{"line":17,"file":"Intents.js","path":"src/util"}},{"name":"SweepFilter","type":[[["function"]]],"params":[{"name":"collection","description":"The collection being swept","type":[[["LimitedCollection"]]]}],"returns":{"types":[[["function"]],[["null"]]],"description":"Return `null` to skip sweeping, otherwise a function passed to `sweep()`,\nSee {@link [Collection#sweep](https://discord.js.org/docs/packages/collection/stable/Collection:Class?scrollTo=sweep)}\nfor the definition of this function."},"meta":{"line":9,"file":"LimitedCollection.js","path":"src/util"}},{"name":"LimitedCollectionOptions","description":"Options for defining the behavior of a LimitedCollection","type":[[["Object"]]],"props":[{"name":"maxSize","description":"The maximum size of the Collection","optional":true,"default":"Infinity","nullable":true,"type":[[["number"]]]},{"name":"keepOverLimit","description":"A function, which is passed the value and key of an entry, ran to decide\nto keep an entry past the maximum size","optional":true,"default":null,"nullable":true,"type":[[["function"]]]},{"name":"sweepFilter","description":"DEPRECATED: There is no direct alternative to this,\nhowever most of its purpose is fulfilled by {@link Client#sweepers}\nA function ran every `sweepInterval` to determine how to sweep","optional":true,"default":null,"nullable":true,"type":[[["SweepFilter"]]]},{"name":"sweepInterval","description":"DEPRECATED: There is no direct alternative to this,\nhowever most of its purpose is fulfilled by {@link Client#sweepers}\nHow frequently, in seconds, to sweep the collection.","optional":true,"default":0,"nullable":true,"type":[[["number"]]]}],"meta":{"line":17,"file":"LimitedCollection.js","path":"src/util"}},{"name":"RateLimitData","description":"Rate limit data","type":[[["Object"]]],"props":[{"name":"timeout","description":"Time until this rate limit ends, in milliseconds","type":[[["number"]]]},{"name":"limit","description":"The maximum amount of requests of this endpoint","type":[[["number"]]]},{"name":"method","description":"The HTTP method of this request","type":[[["string"]]]},{"name":"path","description":"The path of the request relative to the HTTP endpoint","type":[[["string"]]]},{"name":"route","description":"The route of the request relative to the HTTP endpoint","type":[[["string"]]]},{"name":"global","description":"Whether this is a global rate limit","type":[[["boolean"]]]}],"meta":{"line":6,"file":"Options.js","path":"src/util"}},{"name":"RateLimitQueueFilter","description":"Whether this rate limit should throw an Error","type":[[["function"]]],"params":[{"name":"rateLimitData","description":"The data of this rate limit","type":[[["RateLimitData"]]]}],"returns":[[["boolean"]],[["Promise","<"],["boolean",">"]]],"meta":{"line":17,"file":"Options.js","path":"src/util"}},{"name":"CacheFactory","type":[[["function"]]],"params":[{"name":"manager","description":"The manager class the cache is being requested from.","type":[[["function"]]]},{"name":"holds","description":"The class that the cache will hold.","type":[[["function"]]]}],"returns":{"types":[[["Collection"]]],"description":"A Collection used to store the cache of the manager."},"meta":{"line":24,"file":"Options.js","path":"src/util"}},{"name":"ClientOptions","description":"Options for a client.","type":[[["Object"]]],"props":[{"name":"shards","description":"The shard's id to run, or an array of shard ids. If not specified,\nthe client will spawn {@link ClientOptions#shardCount} shards. If set to `auto`, it will fetch the\nrecommended amount of shards from Discord and spawn that amount","optional":true,"type":[[["number"]],[["Array","<"],["number",">"]],[["string"]]]},{"name":"closeTimeout","description":"The amount of time in milliseconds to wait for the close frame to be received\nfrom the WebSocket. Don't have this too high/low. Its best to have it between 2_000-6_000 ms.","optional":true,"default":5000,"type":[[["number"]]]},{"name":"checkUpdate","description":"Display module update information on the screen","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"syncStatus","description":"Sync state with Discord Client","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"patchVoice","description":"Automatically patch @discordjs/voice module (support for call)","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"captchaService","description":"Captcha service to use for solving captcha {@link captchaServices}","optional":true,"default":null,"type":[[["string"]]]},{"name":"captchaKey","description":"Captcha service key","optional":true,"default":null,"type":[[["string"]]]},{"name":"captchaRetryLimit","description":"Captcha retry limit","optional":true,"default":3,"type":[[["string"]]]},{"name":"captchaWithProxy","description":"Whether to use proxy for captcha solving","optional":true,"default":false,"type":[[["string"]]]},{"name":"password","description":"Your Discord account password","optional":true,"default":null,"type":[[["string"]]]},{"name":"usingNewAttachmentAPI","description":"Use new attachment API","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"interactionTimeout","description":"The amount of time in milliseconds to wait for an interaction response, before rejecting","optional":true,"default":15000,"type":[[["string"]]]},{"name":"autoRedeemNitro","description":"Automaticlly redeems nitro codes ","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"proxy","description":"Proxy to use for the WebSocket + REST connection (proxy-agent uri type) {@link https://www.npmjs.com/package/proxy-agent}.","optional":true,"type":[[["string"]]]},{"name":"DMSync","description":"Automatically synchronize call status (DM and group) at startup (event synchronization) [Warning: May cause rate limit to gateway)","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"shardCount","description":"The total amount of shards used by all processes of this bot\n(e.g. recommended shard count, shard count of the ShardingManager)","optional":true,"default":1,"type":[[["number"]]]},{"name":"makeCache","description":"Function to create a cache.\nYou can use your own function, or the {@link Options} class to customize the Collection used for the cache.\nOverriding the cache used in `GuildManager`, `ChannelManager`, `GuildChannelManager`, `RoleManager`,\nand `PermissionOverwriteManager` is unsupported and **will** break functionality","optional":true,"type":[[["CacheFactory"]]]},{"name":"messageCacheLifetime","description":"DEPRECATED: Pass `lifetime` to `sweepers.messages` instead.\nHow long a message should stay in the cache until it is considered sweepable (in seconds, 0 for forever)","optional":true,"default":0,"type":[[["number"]]]},{"name":"messageSweepInterval","description":"DEPRECATED: Pass `interval` to `sweepers.messages` instead.\nHow frequently to remove messages from the cache that are older than the message cache lifetime\n(in seconds, 0 for never)","optional":true,"default":0,"type":[[["number"]]]},{"name":"allowedMentions","description":"Default value for {@link MessageOptions#allowedMentions}","optional":true,"type":[[["MessageMentionOptions"]]]},{"name":"invalidRequestWarningInterval","description":"The number of invalid REST requests (those that return\n401, 403, or 429) in a 10 minute window between emitted warnings (0 for no warnings). That is, if set to 500,\nwarnings will be emitted at invalid request number 500, 1000, 1500, and so on.","optional":true,"default":0,"type":[[["number"]]]},{"name":"partials","description":"Structures allowed to be partial. This means events can be emitted even when\nthey're missing all the data for a particular structure. See the \"Partial Structures\" topic on the\n[guide](https://discordjs.guide/popular-topics/partials.html) for some\nimportant usage information, as partials require you to put checks in place when handling data.","optional":true,"default":"['USER', 'CHANNEL', 'GUILD_MEMBER', 'MESSAGE', 'REACTION', 'GUILD_SCHEDULED_EVENT']","type":[[["Array","<"],["PartialType",">"]]]},{"name":"restWsBridgeTimeout","description":"Maximum time permitted between REST responses and their\ncorresponding WebSocket events","optional":true,"default":5000,"type":[[["number"]]]},{"name":"restTimeOffset","description":"Extra time in milliseconds to wait before continuing to make REST\nrequests (higher values will reduce rate-limiting errors on bad connections)","optional":true,"default":500,"type":[[["number"]]]},{"name":"restRequestTimeout","description":"Time to wait before cancelling a REST request, in milliseconds","optional":true,"default":15000,"type":[[["number"]]]},{"name":"restSweepInterval","description":"How frequently to delete inactive request buckets, in seconds\n(or 0 for never)","optional":true,"default":60,"type":[[["number"]]]},{"name":"restGlobalRateLimit","description":"How many requests to allow sending per second (0 for unlimited, 50 for\nthe standard global limit used by Discord)","optional":true,"default":0,"type":[[["number"]]]},{"name":"rejectOnRateLimit","description":"Decides how rate limits and pre-emptive throttles\nshould be handled. If this option is an array containing the prefix of the request route (e.g. /channels to match any\nroute starting with /channels, such as /channels/222197033908436994/messages) or a function returning true, a\n{@link RateLimitError} will be thrown. Otherwise the request will be queued for later","optional":true,"type":[[["Array","<"],["string",">"]],[["RateLimitQueueFilter"]]]},{"name":"retryLimit","description":"How many times to retry on 5XX errors\n(Infinity for an indefinite amount of retries)","optional":true,"default":1,"type":[[["number"]]]},{"name":"failIfNotExists","description":"Default value for {@link ReplyMessageOptions#failIfNotExists}","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"userAgentSuffix","description":"An array of additional bot info to be appended to the end of the required\n[User Agent](https://discord.com/developers/docs/reference#user-agent) header","optional":true,"type":[[["Array","<"],["string",">"]]]},{"name":"presence","description":"Presence data to use upon login","optional":true,"default":"{}","type":[[["PresenceData"]]]},{"name":"intents","description":"Intents to enable for this connection (but not using)","optional":true,"default":131071,"type":[[["IntentsResolvable"]]]},{"name":"waitGuildTimeout","description":"Time in milliseconds that Clients with the GUILDS intent should wait for","optional":true,"default":15000,"type":[[["number"]]]},{"name":"messageCreateEventGuildTimeout","description":"Time in milliseconds that Clients to register for messages with each guild\nmissing guilds to be received before starting the bot. If not specified, the default is 100 milliseconds.","optional":true,"default":100,"type":[[["number"]]]},{"name":"sweepers","description":"Options for cache sweeping","optional":true,"default":"{}","type":[[["SweeperOptions"]]]},{"name":"ws","description":"Options for the WebSocket","optional":true,"type":[[["WebsocketOptions"]]]},{"name":"http","description":"HTTP options","optional":true,"type":[[["HTTPOptions"]]]},{"name":"captchaSolver","description":"Function to solve a captcha (custom)","optional":true,"type":[[["CustomCaptchaSolver"]]]}],"meta":{"line":31,"file":"Options.js","path":"src/util"}},{"name":"CustomCaptchaSolver","description":"Function to solve a captcha","type":[[["function"]]],"params":[{"name":"captcha","description":"The captcha to solve","type":[[["Captcha"]]]},{"name":"userAgent","description":"The user agent to use for the request","type":[[["string"]]]}],"returns":{"types":[[["Promise","<"],["string",">"]]],"description":"hcaptcha token"},"meta":{"line":100,"file":"Options.js","path":"src/util"}},{"name":"SweeperOptions","description":"Options for {@link Sweepers} defining the behavior of cache sweeping","type":[[["Object","<"],["SweeperKey",", "],["SweepOptions",">"]]],"meta":{"line":108,"file":"Options.js","path":"src/util"}},{"name":"SweepOptions","description":"Options for sweeping a single type of item from cache","type":[[["Object"]]],"props":[{"name":"interval","description":"The interval (in seconds) at which to perform sweeping of the item","type":[[["number"]]]},{"name":"lifetime","description":"How long an item should stay in cache until it is considered sweepable.\nThis property is only valid for the `invites`, `messages`, and `threads` keys. The `filter` property\nis mutually exclusive to this property and takes priority","optional":true,"type":[[["number"]]]},{"name":"filter","description":"The function used to determine the function passed to the sweep method\nThis property is optional when the key is `invites`, `messages`, or `threads` and `lifetime` is set","type":[[["GlobalSweepFilter"]]]}],"meta":{"line":113,"file":"Options.js","path":"src/util"}},{"name":"WebsocketOptions","description":"WebSocket options (these are left as snake_case to match the API)","type":[[["Object"]]],"props":[{"name":"compress","description":"Whether to compress data sent on the connection","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"properties","description":"Properties to identify the client with","optional":true,"type":[[["WebSocketProperties"]]]}],"meta":{"line":124,"file":"Options.js","path":"src/util"}},{"name":"AgentOptions","description":"HTTPS Agent options.","see":["{@link https://nodejs.org/api/https.html#https_class_https_agent}","{@link https://nodejs.org/api/http.html#http_new_agent_options}"],"type":[[["Object"]]],"meta":{"line":131,"file":"Options.js","path":"src/util"}},{"name":"HTTPOptions","description":"HTTP options","type":[[["Object"]]],"props":[{"name":"version","description":"API version to use","optional":true,"default":9,"type":[[["number"]]]},{"name":"agent","description":"HTTPS Agent options","optional":true,"default":"{}","type":[[["AgentOptions"]]]},{"name":"api","description":"Base URL of the API","optional":true,"default":"'https://discord.com/api'","type":[[["string"]]]},{"name":"cdn","description":"Base URL of the CDN","optional":true,"default":"'https://cdn.discordapp.com'","type":[[["string"]]]},{"name":"invite","description":"Base URL of invites","optional":true,"default":"'https://discord.gg'","type":[[["string"]]]},{"name":"template","description":"Base URL of templates","optional":true,"default":"'https://discord.new'","type":[[["string"]]]},{"name":"headers","description":"Additional headers to send for all API requests","optional":true,"type":[[["Object"]]]},{"name":"scheduledEvent","description":"Base URL of guild scheduled events","optional":true,"default":"'https://discord.com/events'","type":[[["string"]]]}],"meta":{"line":138,"file":"Options.js","path":"src/util"}},{"name":"PermissionResolvable","description":"Data that can be resolved to give a permission number. This can be:\n* A string (see {@link Permissions.FLAGS})\n* A permission number\n* An instance of Permissions\n* An Array of PermissionResolvable","type":[[["string"]],[["bigint"]],[["Permissions"]],[["Array","<"],["PermissionResolvable",">"]]],"meta":{"line":18,"file":"Permissions.js","path":"src/util"}},{"name":"DiscordAuthWebsocketOptions","type":[[["Object"]]],"props":[{"name":"debug","description":"Log debug info","optional":true,"default":false,"nullable":true,"type":[[["boolean"]]]},{"name":"hiddenLog","description":"Hide log ?","optional":true,"default":false,"nullable":true,"type":[[["boolean"]]]},{"name":"autoLogin","description":"Automatically login (DiscordJS.Client Login) ?","optional":true,"default":false,"nullable":true,"type":[[["boolean"]]]},{"name":"failIfError","description":"Throw error ?","optional":true,"default":true,"nullable":true,"type":[[["boolean"]]]},{"name":"generateQR","description":"Create QR Code ?","optional":true,"default":true,"nullable":true,"type":[[["boolean"]]]},{"name":"apiVersion","description":"API Version","optional":true,"default":9,"nullable":true,"type":[[["number"]]]},{"name":"userAgent","description":"User Agent","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"wsProperties","description":"Web Socket Properties","optional":true,"nullable":true,"type":[[["Object","<"],["string",", "],["string",">"]]]}],"meta":{"line":46,"file":"RemoteAuth.js","path":"src/util"}},{"name":"RoleFlagsResolvable","description":"Data that can be resolved to give a role flag bitfield. This can be:\n* A string (see {@link RoleFlags.FLAGS})\n* A role flag\n* An instance of RoleFlags\n* An Array of RoleFlagsResolvable","type":[[["string"]],[["number"]],[["RoleFlags"]],[["Array","<"],["RoleFlagsResolvable",">"]]],"meta":{"line":28,"file":"RoleFlags.js","path":"src/util"}},{"name":"Snowflake","description":"A {@link https://developer.twitter.com/en/docs/twitter-ids Twitter snowflake},\nexcept the epoch is 2015-01-01T00:00:00.000Z.\n\nIf we have a snowflake '266241948824764416' we can represent it as binary:\n```\n64 22 17 12 0\n 000000111011000111100001101001000101000000 00001 00000 000000000000\n number of milliseconds since Discord epoch worker pid increment\n```","type":[[["string"]]],"meta":{"line":11,"file":"SnowflakeUtil.js","path":"src/util"}},{"name":"DeconstructedSnowflake","description":"A deconstructed snowflake.","type":[[["Object"]]],"props":[{"name":"timestamp","description":"Timestamp the snowflake was created","type":[[["number"]]]},{"name":"date","description":"Date the snowflake was created","type":[[["Date"]]]},{"name":"workerId","description":"The worker's id in the snowflake","type":[[["number"]]]},{"name":"processId","description":"The process's id in the snowflake","type":[[["number"]]]},{"name":"increment","description":"Increment in the snowflake","type":[[["number"]]]},{"name":"binary","description":"Binary representation of the snowflake","type":[[["string"]]]}],"meta":{"line":43,"file":"SnowflakeUtil.js","path":"src/util"}},{"name":"GlobalSweepFilter","type":[[["function"]]],"returns":{"types":[[["function"]],[["null"]]],"description":"Return `null` to skip sweeping, otherwise a function passed to `sweep()`,\nSee {@link [Collection#sweep](https://discord.js.org/docs/packages/collection/stable/Collection:Class?scrollTo=sweep)}\nfor the definition of this function."},"meta":{"line":7,"file":"Sweepers.js","path":"src/util"}},{"name":"LifetimeFilterOptions","description":"Options for generating a filter function based on lifetime","type":[[["Object"]]],"props":[{"name":"lifetime","description":"How long, in seconds, an entry should stay in the collection\nbefore it is considered sweepable.","optional":true,"default":14400,"type":[[["number"]]]},{"name":"getComparisonTimestamp","description":"A function that takes an entry, key,\nand the collection and returns a timestamp to compare against in order to determine the lifetime of the entry.","optional":true,"default":"e => e?.createdTimestamp","type":[[["function"]]]},{"name":"excludeFromSweep","description":"A function that takes an entry, key, and the collection\nand returns a boolean, `true` when the entry should not be checked for sweepability.","optional":true,"default":"() => false","type":[[["function"]]]}],"meta":{"line":303,"file":"Sweepers.js","path":"src/util"}},{"name":"SweepEventOptions","description":"Configuration options for emitting the cache sweep client event","access":"private","type":[[["Object"]]],"props":[{"name":"emit","description":"Whether to emit the client event in this method","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"outputName","description":"A name to output in the client event if it should differ from the key","optional":true,"type":[[["string"]]]}],"meta":{"line":385,"file":"Sweepers.js","path":"src/util"}},{"name":"SystemChannelFlagsResolvable","description":"Data that can be resolved to give a system channel flag bitfield. This can be:\n* A string (see {@link SystemChannelFlags.FLAGS})\n* A system channel flag\n* An instance of SystemChannelFlags\n* An Array of SystemChannelFlagsResolvable","type":[[["string"]],[["number"]],[["SystemChannelFlags"]],[["Array","<"],["SystemChannelFlagsResolvable",">"]]],"meta":{"line":26,"file":"SystemChannelFlags.js","path":"src/util"}},{"name":"SplitOptions","description":"Options for splitting a message.","type":[[["Object"]]],"props":[{"name":"maxLength","description":"Maximum character length per message piece","optional":true,"default":2000,"type":[[["number"]]]},{"name":"char","description":"Character(s) or Regex(es) to split the message with,\nan array can be used to split multiple times","optional":true,"default":"'\\n'","type":[[["string"]],[["Array","<"],["string",">"]],[["RegExp"]],[["Array","<"],["RegExp",">"]]]},{"name":"prepend","description":"Text to prepend to every piece except the first","optional":true,"default":"''","type":[[["string"]]]},{"name":"append","description":"Text to append to every piece except the last","optional":true,"default":"''","type":[[["string"]]]}],"meta":{"line":68,"file":"Util.js","path":"src/util"}},{"name":"EscapeMarkdownOptions","description":"Options used to escape markdown.","type":[[["Object"]]],"props":[{"name":"codeBlock","description":"Whether to escape code blocks","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"inlineCode","description":"Whether to escape inline code","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"bold","description":"Whether to escape bolds","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"italic","description":"Whether to escape italics","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"underline","description":"Whether to escape underlines","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"strikethrough","description":"Whether to escape strikethroughs","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"spoiler","description":"Whether to escape spoilers","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"codeBlockContent","description":"Whether to escape text inside code blocks","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"inlineCodeContent","description":"Whether to escape text inside inline code","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"escape","description":"Whether to escape escape characters","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"heading","description":"Whether to escape headings","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"bulletedList","description":"Whether to escape bulleted lists","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"numberedList","description":"Whether to escape numbered lists","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"maskedLink","description":"Whether to escape masked links","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":123,"file":"Util.js","path":"src/util"}},{"name":"MakeErrorOptions","description":"Options used to make an error object.","type":[[["Object"]]],"props":[{"name":"name","description":"Error type","type":[[["string"]]]},{"name":"message","description":"Message for the error","type":[[["string"]]]},{"name":"stack","description":"Stack for the error","type":[[["string"]]]}],"meta":{"line":397,"file":"Util.js","path":"src/util"}},{"name":"ColorResolvable","description":"Can be a number, hex string, a {@link Color}, or an RGB array like:\n```js\n[255, 0, 255] // purple\n```","type":[[["string"]],[["Color"]],[["number"]],[["Array","<"],["number",">"]]],"meta":{"line":470,"file":"Util.js","path":"src/util"}}],"externals":[{"name":"Collection","see":["{@link https://discord.js.org/docs/packages/collection/stable/Collection:Class}"],"meta":{"line":1098,"file":"Client.js","path":"src/client"}},{"name":"VoiceConnection","see":["{@link https://discord.js.org/#/docs/voice/main/class/VoiceConnection}"],"meta":{"line":294,"file":"Client.js","path":"src/client"}},{"name":"Inflate","see":["{@link https://www.npmjs.com/package/zlib-sync}"],"meta":{"line":122,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"CloseEvent","see":["{@link https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent}"],"meta":{"line":354,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"ErrorEvent","see":["{@link https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent}"],"meta":{"line":359,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"MessageEvent","see":["{@link https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent}"],"meta":{"line":364,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"SlashCommandBuilder","see":["{@link https://discord.js.org/docs/packages/builders/stable/SlashCommandBuilder:Class}"],"meta":{"line":259,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"ContextMenuCommandBuilder","see":["{@link https://discord.js.org/docs/packages/builders/stable/ContextMenuCommandBuilder:Class}"],"meta":{"line":264,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"APIApplicationCommandPermissions","see":["{@link https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-application-command-permissions-structure}"],"meta":{"line":422,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"APIError","see":["{@link https://discord.com/developers/docs/reference#error-messages}"],"meta":{"line":100,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"HTTPMethod","see":["{@link https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods}"],"meta":{"line":422,"file":"RequestHandler.js","path":"src/rest"}},{"name":"Response","see":["{@link https://developer.mozilla.org/en-US/docs/Web/API/Response}"],"meta":{"line":427,"file":"RequestHandler.js","path":"src/rest"}},{"name":"APIApplicationCommand","see":["{@link https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-structure}"],"meta":{"line":1022,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"APIApplicationCommandOption","see":["{@link https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-option-structure}"],"meta":{"line":1027,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"APIInteractionDataResolved","see":["{@link https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-object-resolved-data-structure}"],"meta":{"line":208,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"APIChannel","see":["{@link https://discord.com/developers/docs/resources/channel#channel-object}"],"meta":{"line":268,"file":"Channel.js","path":"src/structures"}},{"name":"APIPresence","see":["{@link https://discord.com/developers/docs/rich-presence/how-to#updating-presence-update-presence-payload-fields}"],"meta":{"line":89,"file":"ClientPresence.js","path":"src/structures"}},{"name":"APIEmoji","see":["{@link https://discord.com/developers/docs/resources/emoji#emoji-object}"],"meta":{"line":145,"file":"Emoji.js","path":"src/structures"}},{"name":"APIGuild","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object}"],"meta":{"line":1741,"file":"Guild.js","path":"src/structures"}},{"name":"APIGuildMember","see":["{@link https://discord.com/developers/docs/resources/guild#guild-member-object}"],"meta":{"line":683,"file":"GuildMember.js","path":"src/structures"}},{"name":"APIMessageComponent","see":["{@link https://discord.com/developers/docs/interactions/message-components#component-object}"],"meta":{"line":100,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"APIAttachment","see":["{@link https://discord.com/developers/docs/resources/channel#attachment-object}"],"meta":{"line":201,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"APIMessageSelectMenu","see":["{@link https://discord.com/developers/docs/interactions/message-components#select-menu-object}"],"meta":{"line":112,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"APIMessageButton","see":["{@link https://discord.com/developers/docs/interactions/message-components#button-object}"],"meta":{"line":117,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"APIEmbed","see":["{@link https://discord.com/developers/docs/resources/channel#embed-object}"],"meta":{"line":583,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"APIMessage","see":["{@link https://discord.com/developers/docs/resources/channel#message-object}"],"meta":{"line":355,"file":"MessagePayload.js","path":"src/structures"}},{"name":"MessageActivityType","see":["{@link https://discord-api-types.dev/api/discord-api-types-v9/enum/MessageActivityType}"],"meta":{"line":17,"file":"Presence.js","path":"src/structures"}},{"name":"APIRole","see":["{@link https://discord.com/developers/docs/topics/permissions#role-object}"],"meta":{"line":528,"file":"Role.js","path":"src/structures"}},{"name":"APISticker","see":["{@link https://discord.com/developers/docs/resources/sticker#sticker-object}"],"meta":{"line":307,"file":"Sticker.js","path":"src/structures"}},{"name":"APIUser","see":["{@link https://discord.com/developers/docs/resources/user#user-object}"],"meta":{"line":727,"file":"User.js","path":"src/structures"}},{"name":"Stream","see":["{@link https://nodejs.org/api/stream.html}"],"meta":{"line":99,"file":"DataResolver.js","path":"src/util"}}]} \ No newline at end of file diff --git a/package.json b/package.json index 0eebab3..c1be08a 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "discordapp" ], "author": "aiko-chan-ai", - "license": "GNU General Public License v3.0", + "license": "Apache-2.0", "bugs": { "url": "https://github.com/aiko-chan-ai/discord.js-selfbot-v13/issues" }, @@ -97,4 +97,4 @@ "tslint": "^6.1.3", "typescript": "^4.9.5" } -} +} \ No newline at end of file From 1600403cfa61a5ac01fdf05e752ca46eee962584 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sat, 6 Jan 2024 09:05:07 +0700 Subject: [PATCH 02/60] Update ActionsManager.js --- src/client/actions/ActionsManager.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/client/actions/ActionsManager.js b/src/client/actions/ActionsManager.js index b1ea501..5594fdd 100644 --- a/src/client/actions/ActionsManager.js +++ b/src/client/actions/ActionsManager.js @@ -3,6 +3,7 @@ class ActionsManager { constructor(client) { this.client = client; + // These symbols represent fully built data that we inject at times when calling actions manually. // Action#getUser for example, will return the injected data (which is assumed to be a built structure) // instead of trying to make it from provided data From 1e5f755aa355a4f9cbf984c2af7c6477fb9e748b Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sat, 6 Jan 2024 09:06:38 +0700 Subject: [PATCH 03/60] Update Sweepers.js --- src/util/Sweepers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/util/Sweepers.js b/src/util/Sweepers.js index 79cefa7..76848c5 100644 --- a/src/util/Sweepers.js +++ b/src/util/Sweepers.js @@ -7,7 +7,7 @@ const { TypeError } = require('../errors/DJSError.js'); /** * @typedef {Function} GlobalSweepFilter * @returns {Function|null} Return `null` to skip sweeping, otherwise a function passed to `sweep()`, - * See {@link [Collection#sweep](https://discord.js.org/docs/packages/collection/stable/Collection:Class?scrollTo=sweep)} + * See {@link [Collection#sweep](https://discord.js.org/docs/packages/collection/stable/Collection:Class#sweep)} * for the definition of this function. */ From 5f0506e19cad026252ac3119c04f857906e7a0f4 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sat, 6 Jan 2024 09:06:47 +0700 Subject: [PATCH 04/60] Update Permissions.js --- src/util/Permissions.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/util/Permissions.js b/src/util/Permissions.js index 4ec12b6..cc3cc1a 100644 --- a/src/util/Permissions.js +++ b/src/util/Permissions.js @@ -110,6 +110,7 @@ class Permissions extends BitField { * * `MODERATE_MEMBERS` * * `VIEW_CREATOR_MONETIZATION_ANALYTICS` * * `USE_SOUNDBOARD` + * * `SEND_VOICE_MESSAGES` * @type {Object} * @see {@link https://discord.com/developers/docs/topics/permissions#permissions-bitwise-permission-flags} */ From b05e611875b05ac5d068b00aa529bd8199bf5c3b Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sat, 6 Jan 2024 09:06:59 +0700 Subject: [PATCH 05/60] Update LimitedCollection.js --- src/util/LimitedCollection.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/util/LimitedCollection.js b/src/util/LimitedCollection.js index 9848299..956639d 100644 --- a/src/util/LimitedCollection.js +++ b/src/util/LimitedCollection.js @@ -10,7 +10,7 @@ const { TypeError } = require('../errors/DJSError.js'); * @typedef {Function} SweepFilter * @param {LimitedCollection} collection The collection being swept * @returns {Function|null} Return `null` to skip sweeping, otherwise a function passed to `sweep()`, - * See {@link [Collection#sweep](https://discord.js.org/docs/packages/collection/stable/Collection:Class?scrollTo=sweep)} + * See {@link [Collection#sweep](https://discord.js.org/docs/packages/collection/stable/Collection:Class#sweep)} * for the definition of this function. */ From a0c7752ed28451a5b2927c56a608b54f379fd7d7 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sat, 6 Jan 2024 09:07:09 +0700 Subject: [PATCH 06/60] Update Formatters.js --- src/util/Formatters.js | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/util/Formatters.js b/src/util/Formatters.js index 1b5f518..439a517 100644 --- a/src/util/Formatters.js +++ b/src/util/Formatters.js @@ -18,7 +18,6 @@ const { TimestampStyles, underscore, userMention, - chatInputApplicationCommandMention, } = require('@discordjs/builders'); /** @@ -66,7 +65,22 @@ Formatters.channelMention = channelMention; * @returns {string} * @static */ -Formatters.chatInputApplicationCommandMention = chatInputApplicationCommandMention; +Formatters.chatInputApplicationCommandMention = function chatInputApplicationCommandMention( + commandName, + subcommandGroupOrSubOrId, + subcommandNameOrId, + commandId, +) { + if (typeof commandId !== 'undefined') { + return ``; + } + + if (typeof subcommandNameOrId !== 'undefined') { + return ``; + } + + return ``; +}; /** * Wraps the content inside a code block with an optional language. From 54dd3332370a2bacaed541831cf8a9fdbed4bc16 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sat, 6 Jan 2024 09:07:42 +0700 Subject: [PATCH 07/60] break: remove arRPC --- src/util/arRPC/index.js | 229 -------------------- src/util/arRPC/process/detectable.json | 1 - src/util/arRPC/process/index.js | 102 --------- src/util/arRPC/process/native/index.js | 5 - src/util/arRPC/process/native/linux.js | 37 ---- src/util/arRPC/process/native/win32.js | 25 --- src/util/arRPC/transports/ipc.js | 281 ------------------------- src/util/arRPC/transports/websocket.js | 128 ----------- 8 files changed, 808 deletions(-) delete mode 100644 src/util/arRPC/index.js delete mode 100644 src/util/arRPC/process/detectable.json delete mode 100644 src/util/arRPC/process/index.js delete mode 100644 src/util/arRPC/process/native/index.js delete mode 100644 src/util/arRPC/process/native/linux.js delete mode 100644 src/util/arRPC/process/native/win32.js delete mode 100644 src/util/arRPC/transports/ipc.js delete mode 100644 src/util/arRPC/transports/websocket.js diff --git a/src/util/arRPC/index.js b/src/util/arRPC/index.js deleted file mode 100644 index 19c8e95..00000000 --- a/src/util/arRPC/index.js +++ /dev/null @@ -1,229 +0,0 @@ -'use strict'; - -const { EventEmitter } = require('node:events'); -const ProcessServer = require('./process/index.js'); -const IPCServer = require('./transports/ipc.js'); -const WSServer = require('./transports/websocket.js'); -const { RichPresence } = require('../../structures/RichPresence.js'); -const { NitroType } = require('../Constants.js'); - -// eslint-disable-next-line no-useless-escape -const checkUrl = url => /^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$/.test(url); - -let socketId = 0; -module.exports = class RPCServer extends EventEmitter { - constructor(client, debug = false) { - super(); - Object.defineProperty(this, 'client', { value: client }); - return (async () => { - this.debug = debug; - this.onConnection = this.onConnection.bind(this); - this.onMessage = this.onMessage.bind(this); - this.onClose = this.onClose.bind(this); - - const handlers = { - connection: this.onConnection, - message: this.onMessage, - close: this.onClose, - }; - - this.ipc = await new IPCServer(handlers, this.debug); - this.ws = await new WSServer(handlers, this.debug); - this.process = await new ProcessServer(handlers, this.debug); - - return this; - })(); - } - - onConnection(socket) { - socket.send({ - cmd: 'DISPATCH', - evt: 'READY', - - data: { - v: 1, - // Needed otherwise some stuff errors out parsing json strictly - user: { - // Mock user data using arRPC app/bot - id: this.client?.user?.id ?? '1045800378228281345', - username: this.client?.user?.username ?? 'arRPC', - discriminator: this.client?.user?.discriminator ?? '0000', - avatar: this.client?.user?.avatar, - flags: this.client?.user?.flags?.bitfield ?? 0, - premium_type: this.client?.user?.nitroType ? NitroType[this.client?.user?.nitroType] : 0, - }, - config: { - api_endpoint: '//discord.com/api', - cdn_host: 'cdn.discordapp.com', - environment: 'production', - }, - }, - }); - - socket.socketId = socketId++; - - this.emit('connection', socket); - } - - onClose(socket) { - this.emit('activity', { - activity: null, - pid: socket.lastPid, - socketId: socket.socketId.toString(), - }); - - this.emit('close', socket); - } - - async onMessage(socket, { cmd, args, nonce }) { - this.emit('message', { socket, cmd, args, nonce }); - - switch (cmd) { - case 'SET_ACTIVITY': - if (!socket.clientInfo || !socket.clientAssets) { - // https://discord.com/api/v9/oauth2/applications/:id/rpc - socket.clientInfo = await this.client.api.oauth2.applications(socket.clientId).rpc.get(); - socket.clientAssets = await this.client.api.oauth2.applications(socket.clientId).assets.get(); - } - // eslint-disable-next-line no-case-declarations - const { activity, pid } = args; // Translate given parameters into what discord dispatch expects - - if (!activity) { - return this.emit('activity', { - activity: null, - pid, - socketId: socket.socketId.toString(), - }); - } - // eslint-disable-next-line no-case-declarations - const { buttons, timestamps, instance, assets } = activity; - - socket.lastPid = pid ?? socket.lastPid; - - // eslint-disable-next-line no-case-declarations - const metadata = {}; - // eslint-disable-next-line no-case-declarations - const extra = {}; - if (buttons) { - // Map buttons into expected metadata - metadata.button_urls = buttons.map(x => x.url); - extra.buttons = buttons.map(x => x.label); - } - - if (assets?.large_image) { - if (checkUrl(assets.large_image)) { - assets.large_image = assets.large_image - .replace('https://cdn.discordapp.com/', 'mp:') - .replace('http://cdn.discordapp.com/', 'mp:') - .replace('https://media.discordapp.net/', 'mp:') - .replace('http://media.discordapp.net/', 'mp:'); - if (!assets.large_image.startsWith('mp:')) { - // Fetch - const data = await RichPresence.getExternal(this.client, socket.clientId, assets.large_image); - assets.large_image = data[0].external_asset_path; - } - } - if (/^[0-9]{17,19}$/.test(assets.large_image)) { - // ID Assets - } - if ( - assets.large_image.startsWith('mp:') || - assets.large_image.startsWith('youtube:') || - assets.large_image.startsWith('spotify:') - ) { - // Image - } - if (assets.large_image.startsWith('external/')) { - assets.large_image = `mp:${assets.large_image}`; - } else { - const l = socket.clientAssets.find(o => o.name == assets.large_image); - if (l) assets.large_image = l.id; - } - } - - if (assets?.small_image) { - if (checkUrl(assets.small_image)) { - assets.small_image = assets.small_image - .replace('https://cdn.discordapp.com/', 'mp:') - .replace('http://cdn.discordapp.com/', 'mp:') - .replace('https://media.discordapp.net/', 'mp:') - .replace('http://media.discordapp.net/', 'mp:'); - if (!assets.small_image.startsWith('mp:')) { - // Fetch - const data = await RichPresence.getExternal(this.client, socket.clientId, assets.small_image); - assets.small_image = data[0].external_asset_path; - } - } - if (/^[0-9]{17,19}$/.test(assets.small_image)) { - // ID Assets - } - if ( - assets.small_image.startsWith('mp:') || - assets.small_image.startsWith('youtube:') || - assets.small_image.startsWith('spotify:') - ) { - // Image - } - if (assets.small_image.startsWith('external/')) { - assets.small_image = `mp:${assets.small_image}`; - } else { - const l = socket.clientAssets.find(o => o.name == assets.small_image); - if (l) assets.small_image = l.id; - } - } - - if (timestamps) { - for (const x in timestamps) { - // Translate s -> ms timestamps - if (Date.now().toString().length - timestamps[x].toString().length > 2) { - timestamps[x] = Math.floor(1000 * timestamps[x]); - } - } - } - - this.emit('activity', { - activity: { - application_id: socket.clientId, - type: 0, - name: socket.clientInfo.name, - metadata, - assets, - flags: instance ? 1 << 0 : 0, - ...activity, - ...extra, - }, - pid, - socketId: socket.socketId.toString(), - }); - - socket.send?.({ - cmd, - data: null, - evt: null, - nonce, - }); - - break; - - case 'GUILD_TEMPLATE_BROWSER': - case 'INVITE_BROWSER': - // eslint-disable-next-line no-case-declarations - const { code } = args; - socket.send({ - cmd, - data: { - code, - }, - nonce, - }); - - this.emit(cmd === 'INVITE_BROWSER' ? 'invite' : 'guild-template', code); - break; - - case 'DEEP_LINK': - this.emit('link', args.params); - break; - } - return 0; - } -}; diff --git a/src/util/arRPC/process/detectable.json b/src/util/arRPC/process/detectable.json deleted file mode 100644 index 4b23cba..00000000 --- a/src/util/arRPC/process/detectable.json +++ /dev/null @@ -1 +0,0 @@ -[{"bot_public": false, "bot_require_code_grant": true, "cover_image": "4f0361f7957490d61da116ef6f5ae07e", "description": "Cut-throat multiplayer running game that pits 4 players against each other, locally and/or online. Run, jump, swing around, and use devious weapons and pick-ups to knock opponents off-screen! One of the most competitive games you'll ever play.", "developers": [{"id": "521816574047420417", "name": "DoubleDutch Games"}], "executables": [{"is_launcher": false, "name": "speedrunners.exe", "os": "win32"}], "flags": 0, "guild_id": "233680583853604864", "hook": true, "icon": "cb48279ea90e86fb4f71c709d3236395", "id": "259392830932254721", "name": "SpeedRunners", "publishers": [{"id": "521816524952961034", "name": "tinyBuild"}], "rpc_origins": ["http://discord.speedrunners.doubledutchgames.com"], "splash": "94e91cac9509fee1eb80a69b9503878a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "207140", "sku": "207140"}], "type": 1, "verify_key": "541b46756f2ce27781ea996053ea1b27472c10ec5be830335da3f6e8ec583e20"}, {"bot_public": false, "bot_require_code_grant": false, "cover_image": "31b5f007c81f25b28fabb0a7f3afee1b", "description": "Official Move Or Die Discord bot!", "developers": [{"id": "521816560051159042", "name": "Those Awesome Guys"}], "executables": [{"is_launcher": false, "name": "move or die/love/win/love.exe", "os": "win32"}, {"is_launcher": false, "name": "move or die/love/osx32/love.app/contents/macos/love", "os": "darwin"}, {"is_launcher": false, "name": "move or die/love/linux32/love", "os": "linux"}], "flags": 524288, "guild_id": "190909213436936193", "hook": true, "icon": "a2f62440ab2e5e6a9971b4c170551841", "id": "343232907390746625", "name": "Move or Die", "primary_sku_id": "491699415904550923", "publishers": [{"id": "521816560051159042", "name": "Those Awesome Guys"}], "slug": "move-or-die", "splash": "03f12f7e2982f66bb6f038c67374200c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "323850", "sku": "323850"}, {"distributor": "discord", "id": "491699415904550923", "sku": "491699415904550923"}], "type": 1, "verify_key": "698c5d0859abb686be1f8a19e0e7634d8471e33817650f9fb29076de227bca90"}, {"cover_image": "6cdb4aa7c56e6b92f226888ebfe32a17", "description": "Holodrive is a super fast-paced collectable 2D multiplayer shooter. Create your robot, customize it and jetpack your way to victory!", "developers": [{"id": "521816558562181147", "name": "BitCake Studio"}], "executables": [{"is_launcher": false, "name": "holodrive.exe", "os": "win32"}], "flags": 0, "guild_id": "104787628976549888", "hook": true, "icon": "24fd930bd5f53b79270da42770676087", "id": "346729383693778944", "name": "Holodrive", "publishers": [{"id": "521816558562181147", "name": "BitCake Studio"}], "splash": "5b8a5da9d946e0ba4c7c7c6e6486e4d5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "370770", "sku": "370770"}], "type": 1, "verify_key": "ac15417a22830cb5db3d0f45ff738cc34897638d254c08884ffd020f945a0fad"}, {"cover_image": "9d413ebc826fc7389496668d1abd2506", "description": "GRIP - return of the Combat Racer!", "developers": [{"id": "521816573485514764", "name": "Caged Element"}], "executables": [{"is_launcher": false, "name": "win64/grip-win64-shipping.exe", "os": "win32"}], "flags": 0, "guild_id": "265503325775069184", "hook": true, "icon": "f524b8d55abf434d91148917f6b1ded6", "id": "348146938681622538", "name": "GRIP", "splash": "9767329c1db56ac3aee9044f6ddb98a8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "396900", "sku": "396900"}], "type": 1, "verify_key": "c3484586f19ce66bc0dbb38ef1197abb9274b93fa64ab66191dc77c0b3b2f5e2"}, {"cover_image": "30e50d475a085e4ba167a9a8741e3a23", "description": "Hellion is a first person multiplayer space survival game. It is a fusion of survival and space simulation genres that pits players against the deadly environment and one another. Survive the hard vacuum, extreme temperatures, deadly radiation and scavenge for basic resources like air, water, and other items necessary for survival.", "developers": [{"id": "521816721603035156", "name": "Zero Gravity Entertainment"}], "executables": [{"is_launcher": false, "name": "hellion.exe", "os": "win32"}], "flags": 0, "guild_id": "283927435030822914", "hook": true, "icon": "de17672f52c4bf0534f312c8c77ecaf4", "id": "349114016968474626", "name": "Hellion", "publishers": [{"id": "521816721603035156", "name": "Zero Gravity Entertainment"}], "splash": "dbdd0eb305217ba6b7885165099227f6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "588210", "sku": "588210"}], "type": 1, "verify_key": "3d562a6d50d74679ac72e24803ffea40347d49dba7b6412f5fca874329a99e57"}, {"aliases": ["Divinity - Original Sin 2", "Divinity Original Sin 2"], "cover_image": "0fa583149b3927add1aad7cb2337b953", "description": "Divinity: Original Sin 2 is a CRPG developed by Larian Studios. Setting: The world needs a new Divinity. Choose your origin. Gather your party. Master deep, tactical combat. Up to four players with drop-in/drop-out co-op. Only one becomes a God.", "developers": [{"id": "521816603671920661", "name": "Larian Studios"}], "executables": [{"is_launcher": false, "name": "divinity original sin 2/bin/eocapp.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6c018443f2c3067bf660d8b55ff9eb20", "id": "349134787773988865", "name": "Divinity Original Sin 2", "publishers": [{"id": "521816670969397268", "name": "Arrakis Software"}], "splash": "f79ab1b78f2fe375f7566f6b6e200ca2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "435150", "sku": "435150"}], "type": 1, "verify_key": "450d45712bad368a553c702402720ae46ce640e35717fc9c6ec18753f0dd73f1"}, {"cover_image": "b3de09c6c10ca5ab66e2194d79f69d65", "description": "Foxhole Description", "developers": [{"id": "521816637481943060", "name": "Clapfoot"}], "executables": [{"is_launcher": false, "name": "war-win64-shipping.exe", "os": "win32"}], "flags": 0, "guild_id": "203512636556574720", "hook": true, "icon": "c75f0c7134eae454ddcfa8c4f46950fa", "id": "349947310375043074", "name": "Foxhole", "publishers": [{"id": "521816637481943060", "name": "Clapfoot"}], "splash": "e2d0790389db1ec362866f83f1165baf", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "505460", "sku": "505460"}], "type": 1, "verify_key": "b012e6a2d12cd38549430aa953b90b711a0481f493fac0d311a4a5c5abf6fc93"}, {"cover_image": "19066ede6adf3092b9ed7ff60a076d70", "description": "You're a survivor in the zombie infested ruins of society, and must work with your friends and forge alliances to remain among the living.", "developers": [{"id": "521816643970531338", "name": "Nelson Sexton"}], "executables": [{"is_launcher": false, "name": "unturned_be.exe", "os": "win32"}, {"is_launcher": false, "name": "unturned.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "266de3427e85602adbff1012d93f4e1f", "id": "351821143981817856", "name": "Unturned", "overlay": true, "overlay_compatibility_hook": true, "splash": "0c3af979982934ae4c9473873e385c95", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "304930", "sku": "304930"}], "type": 1, "verify_key": "d0a96f9b5150ed219299fae77bed704b49f3d241fe29b3a5ca30e0ef3ce3835e"}, {"aliases": ["Battlerite "], "cover_image": "9eac24c05b9303526731b7fa6125260a", "description": "", "developers": [{"id": "521816546499362828", "name": "Stunlock Studios"}], "executables": [{"is_launcher": false, "name": "battlerite.exe", "os": "win32"}], "flags": 0, "guild_id": "489948029739335690", "hook": true, "icon": "f040ba4ff443a12dcfe4ab2a6759c235", "id": "352378924317147156", "name": "Battlerite", "overlay": true, "publishers": [{"id": "521816546499362828", "name": "Stunlock Studios"}], "splash": "512d2a91a4ef1ca9cb8c7ffd099f7503", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "504370", "sku": "504370"}], "type": 1, "verify_key": "5e19f2033a64bfbc43cbd9918f74349c464d7aaeeaa18192b21320645696bfa5"}, {"aliases": ["League of Legends (TW)"], "description": "League of Legends is a fast-paced, competitive online game that blends the speed and intensity of an RTS with RPG elements. Two teams of powerful champions, each with a unique design and playstyle, battle head-to-head across multiple battlefields and game modes.", "developers": [{"id": "521816780168232960", "name": "Riot Games"}], "executables": [{"is_launcher": false, "name": "garenaloltw/gamedata/apps/loltw/lol.exe", "os": "win32"}, {"is_launcher": false, "name": "lollauncher.app", "os": "darwin"}, {"is_launcher": true, "name": "leagueclientux.exe", "os": "win32"}, {"is_launcher": false, "name": "league of legends.exe", "os": "win32"}, {"is_launcher": false, "name": "garenalolth/gamedata/apps/lolth/lolex.exe", "os": "win32"}], "flags": 0, "guild_id": "417825368062558219", "hook": true, "icon": "5a15a24a3931880801709a32accd0a1d", "id": "356869127241072640", "name": "League of Legends", "overlay": true, "publishers": [{"id": "521816780168232960", "name": "Riot Games"}, {"id": "521816780168232961", "name": "Riot Games, Inc"}], "splash": "9915146539e20aceff096bd4e856aab3", "summary": "", "type": 1, "verify_key": "c0ced86fd10d46be85cb9cfe84157c9c0bf2400f89ad29061758b29b9779d2d9"}, {"aliases": ["PUBG"], "description": "Led by the modder behind the Battle Royale mods for the ArmA series, PlayerUnknown's Battlegrounds is a shooter that pits 100 players in a large empty location where they must scavenge for weapons and fight to the death.", "developers": [{"id": "521816684407947267", "name": "Bluehole Studio"}], "executables": [{"is_launcher": false, "name": "tslgame_be.exe", "os": "win32"}, {"is_launcher": false, "name": "tslgame.exe", "os": "win32"}], "flags": 0, "guild_id": "207018395139309569", "hook": true, "icon": "d8cd6c5b1fe5b64ad2e0f660238eb43e", "id": "356873622985506820", "name": "PLAYERUNKNOWN'S BATTLEGROUNDS", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816684407947265", "name": "Bluehole, Inc."}, {"id": "521816684407947266", "name": "PUBG Corporation"}, {"id": "521816684407947267", "name": "Bluehole Studio"}], "splash": "75621361e5ffb56d789b973b5e575b22", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "578080", "sku": "578080"}], "type": 1, "verify_key": "8c42503ece8b4b528c7efdb1c340eff7df60973cf18f68692c3550dd569c1f57"}, {"aliases": ["Counter-Strike Global Offensive"], "description": "", "developers": [{"id": "521816507102003200", "name": "Valve"}], "executables": [{"is_launcher": false, "name": "csgo.exe", "os": "win32"}, {"is_launcher": false, "name": "csgo_osx64", "os": "darwin"}, {"is_launcher": false, "name": "csgo_linux64", "os": "linux"}], "flags": 0, "guild_id": "196409711577268225", "hook": true, "icon": "782a3bb612c6f1b3f7deed554935f361", "id": "356875057940791296", "name": "Counter-Strike: Global Offensive", "overlay": true, "publishers": [{"id": "521816507102003200", "name": "Valve"}, {"id": "521816530393104394", "name": "Valve Corporation"}], "splash": "84096ee7cf9b0b4c8b08f373f2312576", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "730", "sku": "730"}], "type": 1, "verify_key": "7baad1340e886320ec14c916f51b093d447bdb69d62a284b88f71729f92e4ce7"}, {"description": "Overwatch 2 is a free-to-play, team-based action game set in the optimistic future, where every match is the ultimate 5v5 battlefield brawl.", "developers": [{"id": "521816523430428673", "name": "Blizzard Entertainment"}], "executables": [{"is_launcher": false, "name": "overwatch.exe", "os": "win32"}], "flags": 0, "guild_id": "94882524378968064", "hook": true, "icon": "d20f9f39f2eec584dcdbc7b206786124", "id": "356875221078245376", "name": "Overwatch 2", "overlay": true, "publishers": [{"id": "521816523430428673", "name": "Blizzard Entertainment"}], "splash": "ac088243bc713c37297073d7d12c453a", "summary": "", "third_party_skus": [{"distributor": "battlenet", "id": "Pro", "sku": "Pro"}, {"distributor": "battlenet", "id": null, "sku": null}], "type": 1, "verify_key": "fd60416794717e7531f4f22061f2a16ee87a71a3036fd7b6d8d37364c723ca9d"}, {"aliases": ["Minecraft Windows 10 Edition"], "description": "A procedurally-generated game of world exploration, resource harvesting, and freeform construction. It supports local and online multiplayer, and is regularly updated with new content and features.", "developers": [{"id": "521816527918333966", "name": "Mojang AB"}], "executables": [{"arguments": "net.minecraft.client.main.Main", "is_launcher": false, "name": ">java", "os": "darwin"}, {"arguments": "net.minecraft.client.main.Main", "is_launcher": false, "name": ">javaw.exe", "os": "win32"}, {"is_launcher": false, "name": "minecraft/runtime/jre-x64/1.8.0_25/bin/javaw.exe", "os": "win32"}, {"is_launcher": false, "name": "minecraft.windows.exe", "os": "win32"}], "flags": 0, "guild_id": "302094807046684672", "hook": true, "icon": "166fbad351ecdd02d11a3b464748f66b", "id": "356875570916753438", "name": "Minecraft", "publishers": [{"id": "521816527918333965", "name": "Mojang"}, {"id": "521816527918333966", "name": "Mojang AB"}], "summary": "", "type": 1, "verify_key": "9738b62c8fc186016d31c15dcd645eb481d6f28378ebd759f79f057b133d583f"}, {"aliases": ["World of Warcraft\u2122"], "description": "World of Warcraft is an MMORPG that takes place in Blizzard Entertainment's Warcraft universe; at its peak, it boasted a player base of over 12.5 million subscribers, making it the most popular MMO of all time.", "developers": [{"id": "521816523430428673", "name": "Blizzard Entertainment"}], "executables": [{"is_launcher": false, "name": "_beta_/wow-64.exe", "os": "win32"}, {"is_launcher": false, "name": "_ptr_/wow.exe", "os": "win32"}, {"is_launcher": false, "name": "_ptr_/wow-64.exe", "os": "win32"}, {"is_launcher": false, "name": "_retail_/wow.exe", "os": "win32"}, {"is_launcher": false, "name": "world of warcraft.app", "os": "darwin"}, {"is_launcher": false, "name": "_beta_/wow.exe", "os": "win32"}, {"is_launcher": false, "name": "_retail_/wow-64.exe", "os": "win32"}], "flags": 0, "guild_id": "113103747126747136", "hook": true, "icon": "fc92f820c44e72085dc6205e5e746850", "id": "356875762940379136", "name": "World of Warcraft", "overlay": true, "publishers": [{"id": "521816523430428673", "name": "Blizzard Entertainment"}], "splash": "a04bfb0f10a2a531447e713a9e2443f0", "summary": "", "third_party_skus": [{"distributor": "battlenet", "id": null, "sku": null}, {"distributor": "battlenet", "id": "WoW", "sku": "WoW"}], "type": 1, "verify_key": "fab1671f200efba924715de7fc3f6e2c418bb24a2b06ee6bd0b3cd4c8d5b67e0"}, {"description": "A Free-to-Play collectible card game by Blizzard Entertainment set in the Warcraft universe.", "developers": [{"id": "521816523430428673", "name": "Blizzard Entertainment"}], "executables": [{"is_launcher": false, "name": "hearthstone.exe", "os": "win32"}, {"is_launcher": false, "name": "hearthstone.app", "os": "darwin"}], "flags": 0, "guild_id": "127167843383902209", "hook": true, "icon": "584d496943e719a759906563442d2a87", "id": "356875890958925834", "name": "Hearthstone", "overlay": true, "publishers": [{"id": "521816523430428673", "name": "Blizzard Entertainment"}], "splash": "d48d8206d9cb89c8a31b461e3c64ff8b", "summary": "", "third_party_skus": [{"distributor": "battlenet", "id": null, "sku": null}], "type": 1, "verify_key": "aac6886d706860b76378d82a4ed3c038648ddddd3942b141bf111f60a7231e40"}, {"aliases": ["DOTA 2"], "description": "The official free-to-play sequel to the Warcraft III custom scenario that originally popularized the Multiplayer Online Battle Arena sub-genre.", "developers": [{"id": "521816530393104394", "name": "Valve Corporation"}], "executables": [{"is_launcher": false, "name": "dota_osx.app", "os": "darwin"}, {"is_launcher": false, "name": "dota2.exe", "os": "win32"}], "flags": 0, "guild_id": "74287487459004416", "hook": true, "icon": "6b4b3fa4c83555d3008de69d33a60588", "id": "356875988589740042", "name": "Dota 2", "overlay": true, "publishers": [{"id": "521816507102003200", "name": "Valve"}, {"id": "521816530393104394", "name": "Valve Corporation"}], "splash": "b97e78635ec0fb2b79d19736e74ad2d2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "570", "sku": "570"}], "type": 1, "verify_key": "ba1abb8e9e75cd7c992d69408bc5907850fd4ab1d47da40875318ab4dc192c25"}, {"description": "", "developers": [{"id": "521816560537567261", "name": "Rockstar North"}], "executables": [{"is_launcher": false, "name": "gta5.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "069d9f4871b5ebd2f62bd342ce6ba77f", "id": "356876176465199104", "name": "Grand Theft Auto V", "overlay": true, "primary_sku_id": "491748506516717599", "publishers": [{"id": "521816560537567257", "name": "Rockstar Games"}, {"id": "521816560537567261", "name": "Rockstar North"}], "slug": "grand-theft-auto-v", "splash": "6063707ba43224ee22f9de7bf0339aa1", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "491748506516717599", "sku": "491748506516717599"}, {"distributor": "steam", "id": "271590", "sku": "271590"}], "type": 1, "verify_key": "cad0fdcbcab042cb436c3a66f0647376c5fbae4d1120a349bc6b5807f4cdb642"}, {"aliases": ["Tom Clancy's Rainbow Six? Siege"], "description": "A first-person tactical shooter developed by Ubisoft Montreal Studios. In this installment of the Rainbow Six series, some players are focused on assault where as others are defense-oriented.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "rainbowsixgame.exe", "os": "win32"}, {"is_launcher": false, "name": "rainbowsix_be.exe", "os": "win32"}, {"is_launcher": false, "name": "rainbowsix.exe", "os": "win32"}], "flags": 0, "guild_id": "253581140072464384", "hook": true, "icon": "554af7ef210877b5f04fd1b727a3746e", "id": "356876590342340608", "name": "Tom Clancy's Rainbow Six Siege", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816654095843331", "name": "Ubisoft Montreal"}, {"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "028fe9a1748d259872a0dfa49eb818f2", "summary": "", "third_party_skus": [{"distributor": "uplay", "id": "635", "sku": "635"}, {"distributor": "steam", "id": "359550", "sku": "359550"}], "type": 1, "verify_key": "e789af8b6c60e822fe7840efce3e9d832f08d1a7db7eb80ad36a282b95326813"}, {"description": "The sequel to Supersonic Acrobatic Rocket-Powered Battle-Cars, Rocket League is the second vehicular sports-action game developed by Psyonix.", "developers": [{"id": "521816547430236211", "name": "Psyonix Studios"}], "executables": [{"is_launcher": false, "name": "rocketleague.exe", "os": "win32"}], "flags": 0, "guild_id": "152517096104919042", "hook": true, "icon": "a74899a5190c48a3e6ce9f8d2eaff348", "id": "356877880938070016", "name": "Rocket League", "overlay": true, "publishers": [{"id": "521816547430236211", "name": "Psyonix Studios"}, {"id": "521816547430236229", "name": "Psyonix, Inc."}], "splash": "39a82b92cc95af7a11d024fec8540d28", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "252950", "sku": "252950"}], "type": 1, "verify_key": "b96ea74324e2833bb715a7d8aa9908d7962bca7acb408e97533bf5f4374f4e89"}, {"description": "Heroes from Warcraft, StarCraft, Diablo, Overwatch, and other universes are summoned to the Nexus for five-on-five combat in Blizzard's take on the MOBA genre.", "developers": [{"id": "521816523430428673", "name": "Blizzard Entertainment"}], "executables": [{"is_launcher": false, "name": "heroes.app", "os": "darwin"}, {"is_launcher": false, "name": "heroesofthestorm.exe", "os": "win32"}, {"is_launcher": false, "name": "heroes of the storm.exe", "os": "win32"}, {"is_launcher": false, "name": "heroesofthestorm_x64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7b3bc9037909ab14917accca8c6fb8c1", "id": "356878860190613504", "name": "Heroes of the Storm", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816523430428673", "name": "Blizzard Entertainment"}], "splash": "69958c0fcb8ce236cbad894d316afa01", "summary": "", "third_party_skus": [{"distributor": "battlenet", "id": null, "sku": null}], "type": 1, "verify_key": "c5ef2a161a92671c28523fd393713d04032541429fb5cb1aba7096dcdf77735d"}, {"description": "Build stuff. Destroy stuff. Spawn so many dominoes that the server crashes with a \"no free edicts\" error. Such is life in Garry's Mod.", "developers": [{"id": "521816535304503316", "name": "Facepunch Studios"}], "executables": [{"arguments": "-game garrysmod", "is_launcher": false, "name": "garrysmod/hl2.exe", "os": "win32"}, {"arguments": "-game garrysmod", "is_launcher": false, "name": "hl2.exe", "os": "win32"}, {"arguments": "-game garrysmod", "is_launcher": false, "name": ">hl2_osx", "os": "darwin"}, {"arguments": "-game garrysmod", "is_launcher": false, "name": ">hl2.exe", "os": "win32"}], "flags": 0, "guild_id": "565105920414318602", "hook": true, "icon": "ade1008d735a1a134693b15ce02d79a8", "id": "356879032584896512", "name": "Garry's Mod", "overlay": true, "publishers": [{"id": "521816535304503316", "name": "Facepunch Studios"}], "splash": "df179a691e75ad59389974454187e7fe", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "4000", "sku": "4000"}], "type": 1, "verify_key": "57b3c88891e96d67ddb9b44c4416f95737948242c70136ba4b14f3ecb8459dde"}, {"description": "Originally a separate PVP mode of the open-world survival-horror shooter now known as \"Just Survive\", H1Z1 pits upwards to 150 players in a large empty island to scavenge for gear and fight to the death. It was later made free-to-play.", "developers": [{"id": "521816500974256130", "name": "Daybreak Games"}], "executables": [{"is_launcher": false, "name": "h1z1 king of the kill/h1z1.exe", "os": "win32"}], "flags": 0, "guild_id": "225995698494111745", "hook": true, "icon": "055abe4b445fdf29d47562ea28cf9478", "id": "356881342321000448", "name": "H1Z1: King of the Kill", "publishers": [{"id": "521816717291421726", "name": "Daybreak Game Company"}, {"id": "521816500974256130", "name": "Daybreak Games"}], "splash": "595405692aa306885249dd80bf4a805d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "433850", "sku": "433850"}], "type": 1, "verify_key": "22d9164d593b42740ab9606c883a2e9746bdb144eea0ad3dabc6013e424e5525"}, {"description": "A multiplayer first-person survival game set in a world populated by dinosaurs.", "developers": [{"id": "521816690540019737", "name": "Studio Wildcard"}], "executables": [{"is_launcher": false, "name": "shootergame.exe", "os": "win32"}, {"is_launcher": false, "name": "shootergame_be.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "99016e1224cc0bb19604048f07bc937a", "id": "356887282982191114", "name": "ARK: Survival Evolved", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816690540019737", "name": "Studio Wildcard"}], "splash": "67be84bd214e91241cdba7c41e0ac9b8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "346110", "sku": "346110"}], "type": 1, "verify_key": "0f8bb65e8f50a9368d66aab0a217d7ee975cca3b200f8e76770a70a9755fb781"}, {"description": "Path of Exile is a free-to-play PC online action Role-Playing Game set in a dark fantasy world.", "developers": [{"id": "521816576010223623", "name": "Grinding Gear Games"}], "executables": [{"is_launcher": false, "name": "pathofexile_x64.exe", "os": "win32"}, {"is_launcher": false, "name": "pathofexile.exe", "os": "win32"}, {"is_launcher": false, "name": "pathofexilesteam.exe", "os": "win32"}, {"is_launcher": false, "name": "pathofexile_x64steam.exe", "os": "win32"}], "flags": 0, "guild_id": "174993814845521922", "hook": true, "icon": "1f162572c3123655e42c615b18074ff3", "id": "356888453796986880", "name": "Path of Exile", "overlay": true, "publishers": [{"id": "521816576010223623", "name": "Grinding Gear Games"}], "splash": "6eb27b0dcff2889ab250106a8035fde4", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "238960", "sku": "238960"}], "type": 1, "verify_key": "20467c2e1502c04a3c2d887fb9a3d6836148b66b95dd56d90212ea0156498e50"}, {"description": "The long-awaited sequel to the class-based first-person shooter Team Fortress Classic sports a unique cartoony visual style, more accessible gameplay, and a very large amount of updates and new features since its original release.", "developers": [{"id": "521816530393104394", "name": "Valve Corporation"}], "executables": [{"arguments": "-game tf", "is_launcher": false, "name": ">hl2_osx", "os": "darwin"}, {"arguments": "-game tf", "is_launcher": false, "name": ">hl2.exe", "os": "win32"}, {"arguments": "-game tf", "is_launcher": false, "name": "hl2tf.exe", "os": "win32"}], "flags": 0, "guild_id": "132349439506382848", "hook": true, "icon": "dfc652a5b75879148779dc2865270f87", "id": "356888577310851072", "name": "Team Fortress 2", "overlay": true, "publishers": [{"id": "521816507102003200", "name": "Valve"}, {"id": "521816530393104394", "name": "Valve Corporation"}], "splash": "a109376e705e71ab44e7d2d966cecc35", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "440", "sku": "440"}], "type": 1, "verify_key": "d71f5732225b9c63d63515af12ea23a774c734840ee2f625b8bdf84966bef919"}, {"aliases": ["Rust"], "cover_image": "a5fcb17e0be802587ad64fa14a3578de", "description": "From the makers of Garry's Mod, Rust is a multiplayer survival game with combat elements.", "executables": [{"is_launcher": false, "name": "rust.exe", "os": "win32"}, {"is_launcher": false, "name": "rustclient.exe", "os": "win32"}], "flags": 0, "guild_id": "560127830160048128", "hook": true, "icon": "9ab7e18473429b016307b867e6c924a4", "id": "356888738724446208", "name": "Rust", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816535304503316", "name": "Facepunch Studios"}, {"id": "521816535304503316", "name": "Facepunch Studios"}], "splash": "edfdddb7a7270c154bcbda5477e2ba59", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "252490", "sku": "252490"}], "type": 1, "verify_key": "af3ab45d3cdf8a4552d522b6d79a1cff75142a29da5f4a73411b91099fa5f9dc"}, {"description": "World of Tanks is a free-to-play (F2P) massively multiplayer online (MMO) team based action game featuring WWII era tank combat.", "developers": [{"id": "521816588601786401", "name": "Wargaming.net"}], "executables": [{"is_launcher": false, "name": "worldoftanks.exe", "os": "win32"}], "flags": 0, "guild_id": "502101454253981697", "hook": true, "icon": "b8c3c5e2bb400a1154bad072f139f592", "id": "356888961353908224", "name": "World of Tanks", "publishers": [{"id": "521816588601786401", "name": "Wargaming.net"}], "splash": "b125c7b6bd1ea27c2cef8b50b09c8c19", "summary": "", "type": 1, "verify_key": "9122ace842b0bc80b0b66bc3361cf255724431b011c5cf4b6d816a6ae2959dc3"}, {"aliases": ["FINAL FANTASY XIV - A Realm Reborn"], "description": "Stormblood is the second expansion to Final Fantasy XIV", "developers": [{"id": "521816526920351761", "name": "Square Enix"}], "executables": [{"is_launcher": false, "name": "ffxiv.exe", "os": "win32"}, {"is_launcher": false, "name": "final fantasy xiv.app", "os": "darwin"}, {"is_launcher": false, "name": "ffxiv_dx11.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8fbbc6725f295195c8dd4f390ccd8611", "id": "356889262362329098", "name": "FINAL FANTASY XIV", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816526920351761", "name": "Square Enix"}], "splash": "c99384f8b68bf43672bdb79d0a3833ea", "summary": "", "type": 1, "verify_key": "d8a9e36c73ab90b257f3694b1778f63b391142f9980b71b4adade1a6fd433faa"}, {"description": "Control a cube, and avoid the pointy obstacles by listening and jumping on the rhythm of the soundtrack.", "developers": [{"id": "521816525410402310", "name": "RobTop Games"}], "executables": [{"is_launcher": false, "name": "geometrydash.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "67f35d9429ee338d6f2824163c1b773d", "id": "356942674672091136", "name": "Geometry Dash", "publishers": [{"id": "521816525410402310", "name": "RobTop Games"}], "splash": "cb3735ab8d02aa2ecd78ede3f06aee1e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "322170", "sku": "322170"}], "type": 1, "verify_key": "348ba614216bc8f76254ce108d9012b20ed1783b2dd30ceedbff936002c5802e"}, {"description": "An Atari 2600 game where players controls a dolphin who must use echolocation to avoid obstacles and escape from a pursuing octopus.", "developers": [{"id": "521816501544550404", "name": "Activision"}], "executables": [{"is_launcher": false, "name": "dolphin.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e797f6823e872ab5e283f460c92c5049", "id": "356943187589201930", "name": "Dolphin", "publishers": [{"id": "521816501544550404", "name": "Activision"}], "summary": "", "type": 1, "verify_key": "e3f5698bc88a0866846fccc109409e57f5430a53ec54540b45a9bf46b04abd00"}, {"description": "The first major 2D entry into the world of \"open world\" sandbox action-adventure games, Terraria is inspired by 16-bit platformers and allows players to mine for ores, craft new equipment, and fight monstrous bosses in a large procedurally-generated world.", "developers": [{"id": "521816746974248961", "name": "Re-Logic"}], "executables": [{"is_launcher": false, "name": "terraria.bin.x86", "os": "linux"}, {"is_launcher": false, "name": "terraria.app", "os": "darwin"}, {"is_launcher": false, "name": "terraria.exe", "os": "win32"}], "flags": 0, "guild_id": "251072485095636994", "hook": true, "icon": "4c3c185abc0dfb4cb1ec5612de4d7366", "id": "356943499456937984", "name": "Terraria", "publishers": [{"id": "521816570520141824", "name": "505 Games"}], "splash": "b41510892fcefd0b5e4037ebaf7ae1ec", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "105600", "sku": "105600"}], "type": 1, "verify_key": "37e057d38f0a27d6163bd0a604ec8cceeab80a1ad461f0d51e38713be7f83290"}, {"description": "Brawlhalla is an 8-player, 2D fighting game featuring warriors from throughout history.", "developers": [{"id": "521816681681518594", "name": "Blue Mammoth Games"}], "executables": [{"is_launcher": false, "name": "brawlhalla.app", "os": "darwin"}, {"is_launcher": false, "name": "brawlhalla.exe", "os": "win32"}], "flags": 0, "guild_id": "118778495085182976", "hook": true, "icon": "635721ef4940b790623761863e13afb0", "id": "356944273133928458", "name": "Brawlhalla", "overlay": true, "publishers": [{"id": "521816681681518593", "name": "Xaviant LLC"}], "splash": "5f69a75ff4a835e2edb7d97eba43d050", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "291550", "sku": "291550"}], "type": 1, "verify_key": "3f0c14f9d726907d8678392354970acdeb87dfd339235d5a3fb9973e107fb9d8"}, {"description": "Starbreeze's Overkill is developing a new co-op focused game set in the Walking Dead universe.", "developers": [{"id": "521816586101850132", "name": "Overkill Software"}], "executables": [{"is_launcher": false, "name": "walkingdead101.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e6b31c5081e792d1529b3dbac4b72363", "id": "356953358952562688", "name": "The Walking Dead", "publishers": [{"id": "521816570520141825", "name": "Starbreeze Studios AB"}], "splash": "74846420f50c35daa41b4875a90ad399", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "207610", "sku": "207610"}], "type": 1, "verify_key": "6be514fcdbcc8dac78c2f98f166592e79c462eff226b868be443b75d937cec28"}, {"description": "An official throwback to the early-'90s Sega Genesis roots of the Sonic the Hedgehog series from some notable creators of the series's fanwork.", "developers": [{"id": "521816607941459971", "name": "Headcannon"}], "executables": [{"is_launcher": false, "name": "sonicmania.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "57fa3cfa98a6d58d691ed1ea3b75da89", "id": "356953520278339584", "name": "Sonic Mania", "publishers": [{"id": "521816507676885010", "name": "Sega"}], "splash": "8915e1138913ee47bd9eed3acf6bc9d9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "584400", "sku": "584400"}], "type": 1, "verify_key": "cda57bcccaa9be7b561664f28c9ab19bbb803d9afd7c7acc41744d2196f3b97f"}, {"description": "Online multiplayer minigolf game from Blacklight Interactive.", "developers": [{"id": "521816715760500736", "name": "Blacklight Interactive "}], "executables": [{"is_launcher": false, "name": "golf with your friends.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ec82a2f6545fdda0d64ea71a02fbee42", "id": "356954034701205504", "name": "Golf With Your Friends", "splash": "1cdc1a7625d66dc230334e597a751efe", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "431240", "sku": "431240"}], "type": 1, "verify_key": "9493130963ceea7ed19329cca4f15990f17a0d3bbbba9a526fede9c363c0b7f7"}, {"description": "Cities: Skylines is a city-building simulation heavily inspired by the SimCity franchise.", "developers": [{"id": "521816650840801280", "name": "Colossal Order"}], "executables": [{"is_launcher": false, "name": "cities.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3b5eed7a9364591c629fcf47bd4a18f7", "id": "356954111901433856", "name": "Cities: Skylines", "overlay": true, "publishers": [{"id": "521816521249521702", "name": "Paradox Interactive AB"}], "splash": "82c90cc04d2d541a4df3e089bd0cbb18", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "255710", "sku": "255710"}], "type": 1, "verify_key": "2aa556fa0b80c68cd7c7d4ad43599929d3c88d11359e90be376cb4d37fd14bd9"}, {"description": "Arma 3 is the third core game in the simulation and modern combat Arma franchise developed by Bohemia Interactive.", "developers": [{"id": "521816510172233760", "name": "Bohemia Interactive Studio"}], "executables": [{"is_launcher": false, "name": "arma3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2b3ffe0bf5e1f0bfcfaee8daf3d99a0f", "id": "356954176338788352", "name": "Arma 3", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816510172233760", "name": "Bohemia Interactive Studio"}], "splash": "63b8aba29d08e9eab65420ffaadff2a2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "107410", "sku": "107410"}], "type": 1, "verify_key": "7d1bd631e777974b7448afaffb5d74347e5e5331a0fc4a66cbe6ecd48c38cf1e"}, {"description": "In the sequel to Valve's cooperative zombie shooter, a new team of four ragtag survivors must work together to survive the apocalypse, facing new Infected threats as they fight their way across the Southern United States.", "developers": [{"id": "521816530393104394", "name": "Valve Corporation"}], "executables": [{"arguments": "-game left4dead2", "is_launcher": false, "name": "left4dead2.exe", "os": "win32"}, {"arguments": "-game left4dead2", "is_launcher": false, "name": ">hl2_osx", "os": "darwin"}, {"arguments": "-game left4dead2", "is_launcher": false, "name": "left 4 dead 2/left4dead2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0a542ebb0544c5427f24deb3c67fcc99", "id": "356954277803065354", "name": "Left 4 Dead 2", "overlay": true, "publishers": [{"id": "521816530393104394", "name": "Valve Corporation"}], "splash": "6f327596a069605fbea022abc3a9666e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "550", "sku": "550"}], "type": 1, "verify_key": "6a784b1b11afee2b2e869e40c72b260ee3d5db1f6e114a7d0f95f3abd8aa3ec3"}, {"aliases": ["Project64 1.6", "Project64 version 2.3.2.202"], "description": "", "executables": [{"is_launcher": false, "name": "project64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "cd334cb5029fe8e280c80fb63eb59f0a", "id": "357606193918771210", "name": "Project 64", "publishers": [{"id": "521816571581038633", "name": "Project64"}], "summary": "", "type": 1, "verify_key": "ce5be37a0f7b5d191fae3136a10b45d3802d86b6d2038bf28d785f2bdfa39cae"}, {"aliases": ["Old School RuneScape", "RuneScape 3", "RuneScape Launcher 2.2.4"], "description": "RuneScape is a popular browser based MMORPG with large amounts of content for both free-to-play and pay-to-play users.", "developers": [{"id": "521816499950714881", "name": "Jagex Ltd."}], "executables": [{"is_launcher": false, "name": "runescape.app", "os": "darwin"}, {"is_launcher": false, "name": "swiftkit-rs.exe", "os": "win32"}, {"is_launcher": false, "name": "osbuddy64.exe", "os": "win32"}, {"is_launcher": false, "name": "osbuddy.exe", "os": "win32"}, {"is_launcher": false, "name": "jagexcache/jagexlauncher/bin/jagexlauncher.exe", "os": "win32"}, {"is_launcher": false, "name": "runescape.exe", "os": "win32"}], "flags": 0, "guild_id": "303835144073248770", "hook": true, "icon": "337ce51307d4580001d1ab60706dda8a", "id": "357606832899883008", "name": "RuneScape", "publishers": [{"id": "521816499950714881", "name": "Jagex Ltd."}], "splash": "96854ff580d60286a9009e55dbea9cc2", "summary": "", "type": 1, "verify_key": "5b8193ed96035d044f205f1a7ea4c6cecdef90672505b856c1bca4a211c26d8b"}, {"description": "Four survivors try to escape a variety of haunted locales, but a supernatural being that feeds on their hope sends a serial murderer to hunt them down in this asymmetrical multiplayer survival-horror game.", "developers": [{"id": "521816611036856323", "name": "Behaviour Interactive"}], "executables": [{"is_launcher": false, "name": "deadbydaylight-win64-shipping.exe", "os": "win32"}, {"is_launcher": false, "name": "deadbydaylight.exe", "os": "win32"}], "flags": 0, "guild_id": "153566829380370432", "hook": true, "icon": "64e7623c9af49f2e7dc7048df16b1013", "id": "357607133254254632", "name": "Dead by Daylight", "overlay": true, "publishers": [{"id": "521816570520141825", "name": "Starbreeze Studios AB"}, {"id": "521816611036856324", "name": "Behaviour Digital Inc."}], "splash": "21f6220ac81c817f2228e4e856b61d23", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "381210", "sku": "381210"}], "type": 1, "verify_key": "f48c74c2e85fb890b82a26ad061487c4df86cdedda1f768dc817eb00ee5783e7"}, {"description": "War Thunder is a free-to-play air combat game set in the World War II and Korean War eras. Naval and land battles are planned additions.", "developers": [{"id": "521816505688522752", "name": "Gaijin Entertainment"}], "executables": [{"is_launcher": false, "name": "aces.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b23dfa191e3f3aa8142572110a99723f", "id": "357607478105604096", "name": "War Thunder", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816505688522752", "name": "Gaijin Entertainment"}], "splash": "04d71799c6c65c202262a7335f039264", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "236390", "sku": "236390"}], "type": 1, "verify_key": "ed5af666992678458c1f7e0984ba8c42317ae667220e8332854d7b44f384cd4e"}, {"bot_public": true, "bot_require_code_grant": false, "description": "", "developers": [{"id": "521816588601786401", "name": "Wargaming.net"}], "executables": [{"is_launcher": false, "name": "worldofwarships.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "10c02ab739f2737544f488f776010a18", "id": "357607617046249482", "name": "World of Warships", "primary_sku_id": "486916469645508649", "publishers": [{"id": "521816588601786401", "name": "Wargaming.net"}], "slug": "world-of-warships", "splash": "1e46e8261f79f2ef61cb4abf47127ac5", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "486916469645508649", "sku": "486916469645508649"}], "type": 1, "verify_key": "48f258d59429e22367145685069dc135c2cb5925624ba39a9457385f3bbdf7fa"}, {"cover_image": "fbe9ccde48bec8794893f4ed039d230b", "description": "", "developers": [{"id": "521816757548351499", "name": "Counterplay Games Inc. "}], "executables": [{"is_launcher": false, "name": "duelyst.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "74338e0db00366abe92fb202fc37d70c", "id": "357706468843061258", "name": "Duelyst", "overlay": true, "overlay_compatibility_hook": true, "splash": "f07b66b3c5d81ba1c31c7278f0b22c1e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "291410", "sku": "291410"}], "type": 1, "verify_key": "a546fd6c73000c5b2a5a0d923e05f4bcad3ab3dce366c9fd26b38292b3eaaeb8"}, {"aliases": ["Battlefield\u2122 1"], "description": "The long-running Battlefield series goes even further back in time in the 15th installment, this time to the first World War.", "developers": [{"id": "521816575481872391", "name": "DICE"}], "executables": [{"is_launcher": false, "name": "bf1.exe", "os": "win32"}], "flags": 0, "guild_id": "345116687747645440", "hook": true, "icon": "ac762f535a430d026be3de847326d34d", "id": "358417041981571082", "name": "Battlefield 1", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816538202767363", "name": "EA Games"}], "splash": "ecef22acb800f922ea73ec24b45e733a", "summary": "", "third_party_skus": [{"distributor": "origin", "id": null, "sku": null}], "type": 1, "verify_key": "3b341852b37faf79a5e06851502c0396f1199820a7c47fdaf1088a37b42f7b02"}, {"description": "An enhanced remake of the original Binding of Isaac that features expanded gameplay, pixel art visuals, and a variety of other new additions - including full controller support and local asymmetric co-op.", "developers": [{"id": "521816770160492564", "name": "Nicalis, Inc."}], "executables": [{"is_launcher": false, "name": "the binding of isaac rebirth.app", "os": "darwin"}, {"is_launcher": false, "name": "isaac-ng.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1a139909cb5344dee95688dfedf728d8", "id": "358420454764969994", "name": "The Binding of Isaac: Rebirth", "overlay": true, "publishers": [{"id": "521816770160492564", "name": "Nicalis, Inc."}], "splash": "8f4c6a58ab9bb909df9b42cee8934dff", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "250900", "sku": "250900"}], "type": 1, "verify_key": "79da3763c499aeac8a7bcccf8292f036cb914b1fc84c07e62ba024c619db1da9"}, {"description": "A sandbox action MMORPG.", "developers": [{"id": "521816521731735571", "name": "Pearl Abyss"}], "executables": [{"is_launcher": false, "name": "blackdesert32.exe", "os": "win32"}, {"is_launcher": false, "name": "blackdesert64.exe", "os": "win32"}], "flags": 0, "guild_id": "541916986624704523", "hook": true, "icon": "112e60c67a42d9d8f6c9e1f3c60e843b", "id": "358420844491440148", "name": "Black Desert Online", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816777550725130", "name": "Daum"}], "splash": "b344950b7913945d25a948692b70299a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "582660", "sku": "582660"}], "type": 1, "verify_key": "c7a26992de635e93a75705d937036d7f27643eaa6c1bfe2b641777e3c4499c97"}, {"description": "Black Squad is a free-to-play, military-themed First Person Shooter developed by NS Studio.", "developers": [{"id": "521816503465803782", "name": "NS Studio"}], "executables": [{"is_launcher": false, "name": "steam/steamapps/common/black squad/binaries/win32/steamlauncher.exe", "os": "win32"}], "flags": 0, "guild_id": "390350568020901889", "hook": true, "icon": "379c06993764b759e5392021385a4844", "id": "358421399670358026", "name": "Black Squad", "publishers": [{"id": "521816503465803779", "name": "Neowiz Games"}], "splash": "a7ac918232441eb3172b87843f6ac1de", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "550650", "sku": "550650"}], "type": 1, "verify_key": "b61d3c4d79ba31dda73b30f335942d676b1763f7a4a80c5cb2d795a98f533827"}, {"description": "Hiveswap: Act 1 is a point-and-click adventure game", "developers": [{"id": "521816601230704649", "name": "What Pumpkin Games"}], "executables": [{"is_launcher": false, "name": "hiveswap-act1.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0d4a3bac5860ff3bd85c9c5a42962c58", "id": "358421573071536128", "name": "HIVESWAP: ACT 1", "publishers": [{"id": "521816601230704649", "name": "What Pumpkin Games"}], "splash": "88c2d1467889b86a642ad150e10dc294", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "623940", "sku": "623940"}], "type": 1, "verify_key": "bf36426d81a7bc8149169afe56f4c0d648bf9fc74b29b8395d6efe0015eb249a"}, {"description": "The next entry in the series of WWII wargames from Paradox Interactive.", "developers": [{"id": "521816507676885007", "name": "Paradox Development Studio"}], "executables": [{"is_launcher": false, "name": "hoi4.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e59f973dc9129362bd86656a9feda266", "id": "358421669603311616", "name": "Hearts of Iron IV", "publishers": [{"id": "521816521249521702", "name": "Paradox Interactive AB"}], "splash": "185ff33b31468763b4caa6c757b72eed", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "394360", "sku": "394360"}], "type": 1, "verify_key": "88b204682b9c00420f6045eccf38a272f937acad0212065c74122da56d53992b"}, {"aliases": ["Monaco: What's Yours Is Mine"], "cover_image": "475b33ada0cae66c77b5ea3d64255250", "description": "", "executables": [{"is_launcher": false, "name": "monaco.exe", "os": "win32"}], "flags": 0, "guild_id": "99240110486192128", "hook": true, "icon": "5d6a28659e629816992a3c86864e7a2c", "id": "358421725139959808", "name": "Monaco", "primary_sku_id": "491665417933291551", "publishers": [{"id": "521816531324370965", "name": "Pocketwatch Games"}], "slug": "monaco", "splash": "5253c177a9d7f16dc56838a27a592430", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "113020", "sku": "113020"}, {"distributor": "discord", "id": "491665417933291551", "sku": "491665417933291551"}], "type": 1, "verify_key": "5b9dc2baf929d9c12951429a5100032d65e37df0f1f2a570ee7f8b2dd69f9ea1"}, {"description": "Blade & Soul is a MMORPG currently in development by NCsoft's Team Bloodlust development team. The characters in this oriental style game are designed by the well-known illustrator Hyung-tae Kim.", "developers": [{"id": "521816560051159044", "name": "NCsoft Corporation"}], "executables": [{"is_launcher": false, "name": "playbns.exe", "os": "win32"}, {"is_launcher": false, "name": "bns/bin64/client.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9ebe9e2c7d50ca718872325ca658ea93", "id": "358421781398421514", "name": "Blade & Soul", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816560051159044", "name": "NCsoft Corporation"}], "splash": "bc6a19b0f5aa224a44315225a8c31798", "summary": "", "type": 1, "verify_key": "4ecfef1871e8d90c7a1c0830c070e8e44b30bf82281c16a92ab0e786c78ca5bc"}, {"description": "Civilization V brings brand new gameplay elements to this beloved franchise, while maintaining the \"just one more turn\" mentality.", "developers": [{"id": "521816573485514765", "name": "Firaxis Games"}], "executables": [{"is_launcher": false, "name": "civilizationv_dx11.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "400745bb5fa75f3f8d0fbc29d04e4c7c", "id": "358421904601776138", "name": "Sid Meier's Civilization V", "publishers": [{"id": "521816504392482816", "name": "2K Games"}], "splash": "03747e5ad53a03209cbbb6ab7a462f99", "summary": "", "type": 1, "verify_key": "0f6ae2822d19a0ee4979fab717aa8b6fb70e4a38688ca7d8ff0cd309c0eaf64b"}, {"description": "A free-to-play MOBA game from the developers of Global Agenda and Tribes Ascend. Smite is played entirely in third person and every spell and attack is a skillshot.", "developers": [{"id": "521816544939081737", "name": "Hi-Rez Studios"}], "executables": [{"is_launcher": false, "name": "smiteeac.exe", "os": "win32"}, {"is_launcher": false, "name": "smite.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d47e191eb893a1d6377264e11f1e901b", "id": "358422012990849024", "name": "SMITE", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816544939081737", "name": "Hi-Rez Studios"}], "splash": "5aad57fbc1c49285bc0138bef5724445", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "386360", "sku": "386360"}], "type": 1, "verify_key": "1870ee9580fef840e65ed3680df9f6f405b3befa95679263335374f5b2422ed2"}, {"description": "A game about building factories on an alien planet.", "developers": [{"id": "521816596633747476", "name": "Wube Software LTD."}], "executables": [{"is_launcher": false, "name": "factorio.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7624a1d91d9828ed2f2dc3510bbe09e6", "id": "358422126602223616", "name": "Factorio", "overlay": true, "publishers": [{"id": "521816596633747476", "name": "Wube Software LTD."}], "splash": "a71908f78434ddbaa78e7adb7a849749", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "427520", "sku": "427520"}], "type": 1, "verify_key": "4ccbae94b9a4bf1fda67eb0cff0387a7a9f7c85d1042e9980ca883751532133c"}, {"aliases": ["Diablo 3", "\ub514\uc544\ube14\ub85c III"], "description": "Diablo III returns to the world of Sanctuary twenty years after the events of Diablo II with a new generation of heroes that must defeat the demonic threat from Hell.", "developers": [{"id": "521816523430428673", "name": "Blizzard Entertainment"}], "executables": [{"is_launcher": false, "name": "diablo iii.exe", "os": "win32"}, {"is_launcher": false, "name": "diablo iii.app", "os": "darwin"}, {"is_launcher": false, "name": "diablo iii64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ea12a992732b0b6d521b109b88e60b9b", "id": "358425751197974528", "name": "Diablo III", "overlay": true, "publishers": [{"id": "521816523430428673", "name": "Blizzard Entertainment"}], "splash": "3ceef15c08000c6c0272dc22a29616cb", "summary": "", "third_party_skus": [{"distributor": "battlenet", "id": "D3", "sku": "D3"}, {"distributor": "battlenet", "id": null, "sku": null}], "type": 1, "verify_key": "81dbd2d08e257433cb2fc8548c1dd63e0a02fbfd4a59059c1c0a4af5b62766b0"}, {"aliases": ["Starcraft 2", "Starcraft II"], "description": "Legacy of the Void is the third and final part of the StarCraft II trilogy, coming in the form of a standalone game. It follows the blueprint of the other two parts of StarCraft II but this time focuses on the Protoss and the mysterious Xel'Naga.", "developers": [{"id": "521816523430428673", "name": "Blizzard Entertainment"}], "executables": [{"is_launcher": false, "name": "starcraft ii.exe", "os": "win32"}, {"is_launcher": false, "name": "sc2_x64.exe", "os": "win32"}, {"is_launcher": false, "name": "sc2.exe", "os": "win32"}, {"is_launcher": false, "name": "sc2.app", "os": "darwin"}], "flags": 0, "hook": true, "icon": "ba12a43bee663d2a3b06a583bc80f4bf", "id": "358425800766128128", "name": "StarCraft II", "overlay": true, "publishers": [{"id": "521816523430428673", "name": "Blizzard Entertainment"}], "splash": "2f601ba4ace801789be0643a9656235d", "summary": "", "third_party_skus": [{"distributor": "battlenet", "id": null, "sku": null}], "type": 1, "verify_key": "706d56212b9bfce2dc0a88981f0da478ac14d0425a71e517da8fe893a3b69584"}, {"aliases": ["Skyrim", "Skyrim - Legendary Edition"], "description": "The fifth installment in Bethesda's Elder Scrolls franchise is set in the eponymous province of Skyrim, where the ancient threat of dragons, led by the sinister Alduin, is rising again to threaten all mortal races. Only the player, as the prophesied hero the Dovahkiin, can save the world from destruction.", "developers": [{"id": "521816519768932355", "name": "Bethesda Game Studios"}], "executables": [{"is_launcher": false, "name": "tesv.exe", "os": "win32"}, {"is_launcher": false, "name": "skyrimlauncher.exe", "os": "win32"}, {"is_launcher": false, "name": "tesv_original.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "05e8f8b49eb61bb6f4a97c77c1d7fbdb", "id": "359507724196773888", "name": "The Elder Scrolls V: Skyrim", "overlay": true, "publishers": [{"id": "521816519768932355", "name": "Bethesda Game Studios"}, {"id": "521816500508819469", "name": "Bethesda Softworks"}, {"id": "521816519768932352", "name": "R.G. Mechanics, spider91"}], "splash": "60a0e606e903fd1558362715097a209c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "72850", "sku": "72850"}], "type": 1, "verify_key": "8efa516de35e00419474d1a86175fdc20438b1ab0737ff0b3c2257d97f38eb05"}, {"description": "An online-only open-world shooter-RPG from Ubisoft Massive set in a chaotic New York City that is wrought by disease.", "developers": [{"id": "521816652745277460", "name": "Massive Entertainment"}], "executables": [{"is_launcher": false, "name": "the division.exe", "os": "win32"}, {"is_launcher": false, "name": "thedivision.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "854257feadef4301745c0cb6fa51c15f", "id": "359507798930751488", "name": "Tom Clancy's The Division", "publishers": [{"id": "521816652745277460", "name": "Massive Entertainment"}, {"id": "521816510730338325", "name": "Ubisoft"}, {"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "f3641809fa1d5945f375d1616a3848d7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "365590", "sku": "365590"}, {"distributor": "uplay", "id": null, "sku": null}, {"distributor": "uplay", "id": "568", "sku": "568"}], "type": 1, "verify_key": "648f1237b760c59ade92f5844dbf6a73dd34212e7f3c47e8ae728d6d927f5bd9"}, {"description": "Don't Starve Together is the standalone multiplayer expansion of the uncompromising survival game Don't Starve.", "developers": [{"id": "521816520817639454", "name": "Klei Entertainment Inc."}], "executables": [{"is_launcher": false, "name": "don't starve together/bin/dontstarve_steam.exe", "os": "win32"}, {"is_launcher": false, "name": "don't starve together/bin/dontstarve.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b509a5d03676eace70e0a91a8a4dca89", "id": "359508004078616586", "name": "Don't Starve Together", "publishers": [{"id": "521816520817639454", "name": "Klei Entertainment Inc."}], "splash": "625ae74a0f68982ef8a6e756a351be55", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "322330", "sku": "322330"}], "type": 1, "verify_key": "1845a44a84745bef229bebaa88519428d226c1e3ce47751754e86ff865d8bb79"}, {"description": "An online multiplayer artillery game that pits players against each other in team or free-for-all matches with a huge variety of weapons.", "developers": [{"id": "521816702753701900", "name": "kChamp Games"}], "executables": [{"is_launcher": false, "name": "shellshocklive.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "dba76e615a24e2ac9c4309efda06be95", "id": "359508342571401216", "name": "ShellShock Live", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "326460", "sku": "326460"}], "type": 1, "verify_key": "c7c76be13595be0cb7afdcddf1e7f6aa69625888db79acde9946606cdf6641cc"}, {"description": "A sandbox space game focused on fun and building.", "developers": [{"id": "521816518409977856", "name": "Keen Software House"}], "executables": [{"is_launcher": false, "name": "spaceengineers.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "50367e015ab2e9edeecd1b013ce15ae9", "id": "359508404034600990", "name": "Space Engineers", "overlay": true, "publishers": [{"id": "521816518409977856", "name": "Keen Software House"}], "splash": "9c1bfa5cc71bcabe7d26d8342a71a3d2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "244850", "sku": "244850"}], "type": 1, "verify_key": "31d7ba97349349fb93d735c2d8b4b151ddd61c749e6244a150ae079b7082c903"}, {"description": "Travel across Europe as a trucker delivering cargo in a variety of trucks.", "developers": [{"id": "521816662261891072", "name": "SCS Software"}], "executables": [{"is_launcher": false, "name": "eurotrucks2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "46bfdfc58e4eacbfde29b2461e118e78", "id": "359508713658253318", "name": "Euro Truck Simulator 2", "overlay": true, "publishers": [{"id": "521816662261891072", "name": "SCS Software"}], "splash": "2a901aa3dc38e84d9cc46f7b5f712ff8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "227300", "sku": "227300"}], "type": 1, "verify_key": "495bddf835a15af54a9616e9f1f1798897e3a1d1e8f7576fed0134468e00d3f4"}, {"description": "Portal 2 is the sequel to the acclaimed first-person puzzle game, carrying forward its love of mind-bending problems and its reckless disregard for the space-time continuum.", "developers": [{"id": "521816530393104394", "name": "Valve Corporation"}], "executables": [{"is_launcher": false, "name": "portal2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "80c416fd6e0d3104e5eab72f9077d72d", "id": "359508941782122496", "name": "Portal 2", "overlay": true, "publishers": [{"id": "521816530393104394", "name": "Valve Corporation"}], "splash": "53dac0d5521cdf069da1d513e5b66725", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "620", "sku": "620"}], "type": 1, "verify_key": "5fece293fbdaa787ec1699cb8628930025db02bd01401e7dffbbd7bad29d8f7c"}, {"aliases": ["The Sims\u2122 4"], "description": "The fourth installment of the main Sims franchise, revamping the series's customization features while improving the Sims' automations and emotions.", "developers": [{"id": "521816577876951044", "name": "Maxis Software"}], "executables": [{"is_launcher": false, "name": "ts4.exe", "os": "win32"}, {"is_launcher": false, "name": "ts4_x64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "912bd1dd19dfd2ef3b0191985f942a40", "id": "359509007423242240", "name": "The Sims 4", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "splash": "4bf8d6cfe112edc9295cb7e8d93db7a6", "summary": "", "third_party_skus": [{"distributor": "origin", "id": null, "sku": null}], "type": 1, "verify_key": "2adf36e8ef4669fbab319d256c59b165369fd04bfa791b55998170ff969e8f6f"}, {"description": "Set 40 years after the events of Black Ops II, the twelfth installment of the Call of Duty series brings advanced robotics and biotic augmentations to the clandestine operations of the Black Ops storyline.", "developers": [{"id": "521816646768263168", "name": "Treyarch"}], "executables": [{"is_launcher": false, "name": "blackops3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "dc4ae5b7f541c947e78926b8a55b8ce3", "id": "359509332490059776", "name": "Call of Duty: Black Ops III", "overlay": true, "publishers": [{"id": "521816501544550404", "name": "Activision"}], "splash": "c38f8822fa7d54eb12acd546c8f1d22f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "311210", "sku": "311210"}], "type": 1, "verify_key": "e240dd9d6f9dc31f6bc5d4e66e328c19e3d3e7788bda7c88a577fc5e05d953df"}, {"description": "An open-ended country-life RPG in which players can manage their own farm and interact with the surrounding community.", "developers": [{"id": "521816735792234518", "name": "ConcernedApe"}], "executables": [{"is_launcher": false, "name": "stardew valley.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1e84012079d438b46bbb3c3bf2a409bb", "id": "359509387670192128", "name": "Stardew Valley", "publishers": [{"id": "521816578342387713", "name": "Chucklefish Games"}], "splash": "81ff372fbd0557b8908331db0ae94524", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "413150", "sku": "413150"}], "type": 1, "verify_key": "e2fc42fb59441bf78107a7a8f3177985d0eb9a09377bb3719db765b3e1614c9c"}, {"aliases": ["DARK SOULS\u2122 III", "Dark Souls III"], "description": "This game melds elements from all previous Souls games and concludes the Dark Souls trilogy.", "developers": [{"id": "521816537653444611", "name": "FromSoftware, Inc."}], "executables": [{"is_launcher": false, "name": "darksoulsiii.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4ae400e61d27c2b0b86fd1c15f4eb8d7", "id": "359509500199436288", "name": "DARK SOULS III", "publishers": [{"id": "521816537653444610", "name": "Bandai Namco Entertainment"}], "splash": "a7585b790f6ee93fcf167e861e4c9518", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "374320", "sku": "374320"}], "type": 1, "verify_key": "1042b821cd12f37517fe090154dcecdd379e7bb84907982d52a4aa01e49e425d"}, {"description": "Counter-Strike gets reborn with a shiny new game engine in this 2004 remake.", "developers": [{"id": "521816530393104394", "name": "Valve Corporation"}], "executables": [{"is_launcher": false, "name": "counter-strike source/hl2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1d96939bfd19562b3b3934689dd047ba", "id": "359509666876751872", "name": "Counter-Strike: Source", "publishers": [{"id": "521816530393104394", "name": "Valve Corporation"}], "splash": "1b401f28bc59a3b01fdd26a57374e75c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "240", "sku": "240"}], "type": 1, "verify_key": "f6d71a9cc4ad8c7339c6300b6ac9da0cdd0bc1f6410c9e7c53b8325dec866b5e"}, {"description": "The Fallout series continues in a post-apocalyptic Boston, Massachusetts.", "developers": [{"id": "521816519768932355", "name": "Bethesda Game Studios"}], "executables": [{"is_launcher": false, "name": "fallout4.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6c903026d4fc97559ba48ecf9cc4dc04", "id": "359509759642042378", "name": "Fallout 4", "publishers": [{"id": "521816500508819469", "name": "Bethesda Softworks"}], "splash": "82fd3394dedb4e6ae8178f0dee40dfb6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "377160", "sku": "377160"}], "type": 1, "verify_key": "705e9838771d290d765b3f4019e90a3d00f20972522986d8a58e2f6448698a52"}, {"aliases": ["Fallout New Vegas"], "description": "The post-apocalyptic Fallout universe expands into Nevada in this new title in the franchise. As a courier once left for dead by a mysterious man in a striped suit, the player must now set out to find his assailant and uncover the secrets of the enigmatic ruler of New Vegas.", "developers": [{"id": "521816588169510930", "name": "Obsidian Entertainment"}], "executables": [{"is_launcher": false, "name": "falloutnv.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2bef57e1f17a1e8b2959a1ed91494474", "id": "359509858728542208", "name": "Fallout: New Vegas", "overlay": true, "publishers": [{"id": "521816588169510930", "name": "Obsidian Entertainment"}, {"id": "521816500508819469", "name": "Bethesda Softworks"}], "splash": "546c030342e549513b41476218b5164e", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "22380", "sku": "22380"}], "type": 1, "verify_key": "ea2293cc42a8b9218522400ea86f247bfc759405212574063ded6b96abbb8956"}, {"description": "The worlds first side-scrolling massively multiplayer online role-playing game", "developers": [{"id": "521816758462578698", "name": "Wizet"}], "executables": [{"is_launcher": false, "name": "maplestory.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d92a0da6cbe1561b98e9f9146600b219", "id": "359510095811444736", "name": "MapleStory", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816511610880011", "name": "Nexon Corporation"}], "summary": "", "type": 1, "verify_key": "2a0f6a864c85973065a54f1be133b2b2717938181813253499a4f86dc16c2a13"}, {"aliases": ["The Witcher 3", "The Witcher 3: Wild Hunt - Game of the Year Edition"], "description": "CD Projekt RED's third Witcher combines the series' non-linear storytelling with a sprawling open world that concludes the saga of Geralt of Rivia.", "developers": [{"id": "521816536210604032", "name": "CD Projekt RED Sp. z o.o."}], "executables": [{"is_launcher": false, "name": "witcher3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e62d3b1c9f547792347121cac397fd9c", "id": "359510249486417920", "name": "The Witcher 3: Wild Hunt", "overlay": true, "publishers": [{"id": "521816536210604032", "name": "CD Projekt RED Sp. z o.o."}, {"id": "521816596172505088", "name": "CD PROJEKT RED"}], "splash": "98063feaceb2847e8435496bbda26135", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "292030", "sku": "292030"}], "type": 1, "verify_key": "79a2e846a6368402ba57069a4db66610c7bf2a10453f161be046d30713c3adec"}, {"description": "Several years after the Black Mesa disaster, Gordon Freeman awakens from stasis to aid a resistance movement against the Combine, a collective of trans-dimensional aliens that have conquered Earth.", "developers": [{"id": "521816530393104394", "name": "Valve Corporation"}], "executables": [{"arguments": "-game hl2", "is_launcher": false, "name": ">hl2_osx", "os": "darwin"}, {"arguments": "-game hl2", "is_launcher": false, "name": "hl2hl2.exe", "os": "win32"}, {"arguments": "-game hl2", "is_launcher": false, "name": ">hl2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "45ac0bc7f739607366bca0b4dc4c7918", "id": "359510373361254400", "name": "Half-Life 2", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "splash": "464116a6d262e1725f69b88d1488111b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "220", "sku": "220"}], "type": 1, "verify_key": "8e64966f19487376d8aa1e162b577a6a244cec7130a8c7fd569e62d59839dfe3"}, {"aliases": ["Battlefield 4\u2122", "Battlefield 4\u2122 (64 bit)", "Battlefiled 4 CTE"], "description": "DICE's popular multiplayer-focused shooter series continues, making its debut appearance on the PS4 and Xbox One.", "developers": [{"id": "521816575481872391", "name": "DICE"}], "executables": [{"is_launcher": false, "name": "bf4cte.exe", "os": "win32"}, {"is_launcher": false, "name": "bf4.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8005e11a14d7227f73c68a7aff4820ba", "id": "359510680459673610", "name": "Battlefield 4", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "splash": "fb656971e2723fa24ab1ca2f2da9e60c", "summary": "", "third_party_skus": [{"distributor": "origin", "id": null, "sku": null}], "type": 1, "verify_key": "3424866d2d722ce092ee1a734c5ea72f5fee6c9430866b1b38eeed75d2f14811"}, {"description": "The aliens have won and the remnants of XCOM must strike to take back the Earth in this sequel to Firaxis' 2012 reboot.", "developers": [{"id": "521816573485514765", "name": "Firaxis Games"}], "executables": [{"is_launcher": false, "name": "xcom2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "15dbcc8b7d43ac5a038e1b42b550c300", "id": "359510740878491658", "name": "XCOM 2", "publishers": [{"id": "521816504392482816", "name": "2K Games"}], "splash": "d2689ebf34061062f9fbe7eb0caf602c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "268500", "sku": "268500"}], "type": 1, "verify_key": "90d3dd02d08596ecdc4574e39088c92fb973b01f3e5c73d42f0ce2c09aebc35c"}, {"description": "Guild Wars 2 is an online RPG developed by ArenaNet, and continues the subscriptionless business model of the original Guild Wars. The game is set about 250 years after the events of its predecessor in a world devastated by the ancient elder dragons resurfacing after millennia of slumber.", "developers": [{"id": "521816722752405504", "name": "ArenaNet, Inc."}], "executables": [{"is_launcher": false, "name": "gw2-64.exe", "os": "win32"}, {"is_launcher": false, "name": "gw2.app", "os": "darwin"}, {"is_launcher": false, "name": "guild wars 2 64-bit.app", "os": "darwin"}, {"is_launcher": false, "name": "gw2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c6b0ba8fefae6de81551dfe60c26dce9", "id": "359511228445491200", "name": "Guild Wars 2", "overlay": true, "publishers": [{"id": "521816560051159044", "name": "NCsoft Corporation"}], "splash": "3c4890db52c991c2d14d32328dc1bca3", "summary": "", "type": 1, "verify_key": "f1050585072e6ca54a175c73d60bfa67bec3b064db77aeff8f0e94b40baa9575"}, {"aliases": ["The Elder Scrolls V Skyrim Special Edition"], "description": "", "executables": [{"is_launcher": false, "name": "skse64_loader.exe", "os": "win32"}, {"is_launcher": false, "name": "skyrimselauncher.exe", "os": "win32"}, {"is_launcher": false, "name": "skyrimse.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "19c00372c4c1402e68128a542062f2e2", "id": "359801269008859136", "name": "The Elder Scrolls V: Skyrim Special Edition", "publishers": [{"id": "521816519768932355", "name": "Bethesda Game Studios"}], "splash": "60a0e606e903fd1558362715097a209c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "489830", "sku": "489830"}], "type": 1, "verify_key": "72f6fe08f00adf9fc80b405c19f018f998a99d28d04e01820e712316ae1d13c6"}, {"aliases": ["Tooth & Tail"], "bot_public": true, "bot_require_code_grant": false, "cover_image": "4084ed34b591aee1bd257306e671d9a9", "description": "Lead the revolution with an army of flamethrowing Boars, mustard gas-lobbing Skunks, and paratrooper-puking Owls. Tooth and Tail is a Real-Time-Strategy game featuring Single Player, Online Competitive Play, Split Screen, Replays, and more. Build a base, lead your army, eat your enemies!", "developers": [{"id": "521816531324370965", "name": "Pocketwatch Games"}], "executables": [{"is_launcher": false, "name": "toothandtail.exe", "os": "win32"}], "flags": 0, "guild_id": "99240110486192128", "hook": true, "icon": "4df1e485e3e436321073b020f2632675", "id": "360541292578471937", "name": "Tooth and Tail", "overlay": true, "primary_sku_id": "491666405100617728", "publishers": [{"id": "521816531324370965", "name": "Pocketwatch Games"}], "slug": "tooth-and-tail", "splash": "f4cab3cf5d48c707782f4091f15bc4ac", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "286000", "sku": "286000"}, {"distributor": "discord", "id": "491666405100617728", "sku": "491666405100617728"}], "type": 1, "verify_key": "a5cbd230af66eb5a54a68678fc907526d461dc996ec695317312d3765389850f"}, {"description": "Deep within the abandoned halls of Mount Massive Asylum, amateur journalist Miles Upshur sets out to find a good story, and instead finds an evil presence.", "developers": [{"id": "521816563972571136", "name": "Red Barrels"}], "executables": [{"is_launcher": false, "name": "olgame.exe", "os": "win32"}, {"is_launcher": false, "name": "outlast.app", "os": "darwin"}], "flags": 0, "hook": true, "icon": "4a380b03f9cf59e42afe80e36f40cbba", "id": "363408634568376320", "name": "Outlast", "publishers": [{"id": "521816563972571136", "name": "Red Barrels"}], "splash": "25f174dbeec72035fd40f9673605ac6a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "238320", "sku": "238320"}], "type": 1, "verify_key": "7767ba8fe5140ecab0c8157859e9b831b5845f130acf5619159b620046950df7"}, {"description": "Depth is a multiplayer game which blends heart pounding tension and visceral action in a dark aquatic world.", "developers": [{"id": "521816801995390978", "name": "Digital Confectioners"}], "executables": [{"is_launcher": false, "name": "depthgame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "791f19be2642d00e2b78b58f5436d3a5", "id": "363408709495291934", "name": "Depth", "publishers": [{"id": "521816801995390978", "name": "Digital Confectioners"}], "splash": "a7bf13ab1c64b409175ae9f445ff70a6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "274940", "sku": "274940"}], "type": 1, "verify_key": "1f7be1e790156882ed2fd663788b8f28408441da51020190038fe488929bc27a"}, {"description": "A physics-based sandbox game that allows players to set up and play an endless variety of tabletop games. Along with numerous built-in games and DLC game packs (of actual licensed tabletop games), the game allows players to use custom boards, cards, miniatures, dice, and other objects from the Steam Workshop. Or they could make a mess and flip the whole table.", "developers": [{"id": "521816651306631169", "name": "Berserk Games"}], "executables": [{"is_launcher": false, "name": "tabletop simulator.exe", "os": "win32"}], "flags": 0, "guild_id": "342471570955960324", "hook": true, "icon": "8f6d26ef7c9aa8de296db5858d85223c", "id": "363408834095742976", "name": "Tabletop Simulator", "overlay": true, "publishers": [{"id": "521816651306631169", "name": "Berserk Games"}], "splash": "ed7fcaa9718d1e4c8b5e06483f7e8d0e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "286160", "sku": "286160"}], "type": 1, "verify_key": "f218f478d99dc30edd9d352ac267a1f82cfc0af5cafe09950e9c35211360f3ad"}, {"description": "A sci-fi grand strategy game set in a procedurally generated universe from the creators of Crusader Kings and Europa Universalis.", "developers": [{"id": "521816507676885007", "name": "Paradox Development Studio"}], "executables": [{"is_launcher": false, "name": "stellaris.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a7b347a29279465267bf10fb0f6b5b1b", "id": "363408909962182683", "name": "Stellaris", "publishers": [{"id": "521816521249521702", "name": "Paradox Interactive AB"}], "splash": "cad26f8069541be2863bc3ec479330a1", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "281990", "sku": "281990"}], "type": 1, "verify_key": "d9bbff8d1d99fcaff9f53f76cb706847d2b1a3119497548330d17a36dfdcf7c7"}, {"description": "Trove is a voxel based game from Trion Worlds, creators of Rift and Defiance.", "developers": [{"id": "521816577876951040", "name": "Trion Worlds"}], "executables": [{"is_launcher": false, "name": "trove.exe", "os": "win32"}, {"is_launcher": false, "name": "trove/glyphclientapp.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "720ef95d4fb508aca22b006a3e369fd2", "id": "363409000399634432", "name": "Trove", "publishers": [{"id": "521816577876951040", "name": "Trion Worlds"}], "splash": "83d70644971d4c4a719ac34415f8d5fe", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "304050", "sku": "304050"}], "type": 1, "verify_key": "f693f2603c28986ab3929722f073766a50edb9b02e5e722011046eb2fcb083e0"}, {"description": "Two to eight players punch, kick, and throw each other to be the last one standing in this physics-based brawler.", "developers": [{"id": "521816745099395083", "name": "Boneloaf"}], "executables": [{"is_launcher": false, "name": "gang beasts.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "25f58de774770f6d83e64e839cd69a0d", "id": "363409129643180032", "name": "Gang Beasts", "publishers": [{"id": "521816745099395082", "name": "Double Fine Presents"}], "splash": "6966d8e71e56bba9bd7832549f474aea", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "285900", "sku": "285900"}], "type": 1, "verify_key": "b2aa0319c42385c429dece884f780638d68d62edd1ea5e7c9b6798da9f077e82"}, {"description": "Gather resources and build defenses in this first-person open-world survival horror game from indie studio Endnight Games.", "developers": [{"id": "521816538664402946", "name": "Endnight Games"}], "executables": [{"is_launcher": false, "name": "theforest.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d757f03369c68943d76d6252f47a4813", "id": "363409179668512788", "name": "The Forest", "publishers": [{"id": "521816538664402946", "name": "Endnight Games"}], "splash": "dc5a7ac04c4863b3d67ba2b2f3ccd097", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "242760", "sku": "242760"}], "type": 1, "verify_key": "f6847aef38c2ff939a9023f53f3a593cc7dbbe490338858de1181517f9481f77"}, {"description": "Insurgency (originally Insurgency 2) is a multiplayer-focused first-person shooter with a focus on realism. It is based on the hit Half-Life mod of the same name.", "developers": [{"id": "521816505688522756", "name": "New World Interactive"}], "executables": [{"is_launcher": false, "name": "insurgency_be.exe", "os": "win32"}, {"is_launcher": false, "name": "insurgency.exe", "os": "win32"}], "flags": 0, "guild_id": "464728263248576522", "hook": true, "icon": "813573fe2d3c0131a45129479c47dd8b", "id": "363409205740175360", "name": "Insurgency", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816505688522756", "name": "New World Interactive"}], "splash": "16aed21cf40394c17fb113b19872bab7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "222880", "sku": "222880"}], "type": 1, "verify_key": "01566fb6549b7f1e3fe75bb3201dcd64e9c5031954a9d33a2ba3c0c43d25e691"}, {"aliases": ["Europa Universalis 4"], "description": "The newest game in Paradox Interactive's grand strategy franchise, focusing on Europe in the Age of Discovery.", "developers": [{"id": "521816507676885007", "name": "Paradox Development Studio"}], "executables": [{"is_launcher": false, "name": "eu4.app", "os": "darwin"}, {"is_launcher": false, "name": "eu4.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "79893ca103b029442f0ef3938aac5696", "id": "363409417632481280", "name": "Europa Universalis IV", "overlay": true, "publishers": [{"id": "521816507676885007", "name": "Paradox Development Studio"}, {"id": "521816521249521702", "name": "Paradox Interactive AB"}], "splash": "f9130f06c8df39666e6b6611106f1b40", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "236850", "sku": "236850"}], "type": 1, "verify_key": "f6fb8434eec54cd642c7d380903db1a5ea6f97e31db88a5e83a47ff2f1fd9695"}, {"description": "A browser-based multiplayer strategy game based on the Salem witch trials, and inspired by party games like Mafia. 7 to 15 players are randomly and secretly divided into factions, and must determine each other's identities or prevent others from finding their own.", "developers": [{"id": "521816751621668884", "name": "BlankMediaGames LLC"}], "executables": [{"is_launcher": false, "name": "townofsalem.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "85c83ed23382980dcddc46bdb8748c1a", "id": "363409453699170304", "name": "Town of Salem", "splash": "a6742e64ecf24efb9fa9d5d797dc8582", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "334230", "sku": "334230"}], "type": 1, "verify_key": "573472cc3d220758b92e02385b1963d036c20fc1b0121c474a8a5a61751cb129"}, {"description": "Robocraft is a competitive multiplayer shooter in which players build their own robots and pit them against each other. Crates earned after each match contain parts that can be used in future builds.", "developers": [{"id": "521816790599335989", "name": "Freejam"}], "executables": [{"is_launcher": false, "name": "robocraftclient.exe", "os": "win32"}, {"is_launcher": false, "name": "robocraft.exe", "os": "win32"}], "flags": 0, "guild_id": "194767680849313792", "hook": true, "icon": "8e67203ca773e07253d6254818cf4749", "id": "363409532480913408", "name": "Robocraft", "overlay": true, "publishers": [{"id": "521816790599335989", "name": "Freejam"}], "splash": "aeb2e92af3061ec0c12fb74c41a162dd", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "301520", "sku": "301520"}], "type": 1, "verify_key": "a9c1dd42d56630f8d88d293d7058f1179d915d203972592b75e79c8925fab585"}, {"description": "Golf It! is a multiplayer Minigolf game with a multiplayer Editor.", "developers": [{"id": "521816806176980994", "name": "Perfuse Entertainment"}], "executables": [{"is_launcher": false, "name": "golfit-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8e7525be642175127627a6b9d03f9e2d", "id": "363409575321403402", "name": "Golf It!", "splash": "afda5a5980333a68e688527cbb6e05d2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "571740", "sku": "571740"}], "type": 1, "verify_key": "ba0cfea5674bc108087f7561c81891c58164d4b4b7953846a1d66af03b58ce5d"}, {"description": "A popular mobile collectible card game now also on PC.", "developers": [{"id": "521816528895737856", "name": "Cygames, Inc."}], "executables": [{"is_launcher": false, "name": "shadowverse.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "748e96fabbfc42013d1806fe220f891d", "id": "363409615620407316", "name": "Shadowverse", "publishers": [{"id": "521816528895737856", "name": "Cygames, Inc."}], "splash": "d72314c7581c59293066459ed7baf8cf", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "453480", "sku": "453480"}], "type": 1, "verify_key": "6ee784f97ba25886290820169f26c9432bbde09a226b559c6749fca4684db476"}, {"aliases": ["7 Days To Die"], "description": "7 Days to Die is a voxel-based, open world sandbox survival game.", "developers": [{"id": "521816615025901569", "name": "The Fun Pimps"}], "executables": [{"is_launcher": false, "name": "7daystodie_eac.exe", "os": "win32"}, {"is_launcher": false, "name": "7daystodie.exe", "os": "win32"}], "flags": 0, "guild_id": "209425237467463681", "hook": true, "icon": "975c0d5b07565875e4a30786e3d2e2e5", "id": "363409643973771264", "name": "7 Days to Die", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816615025901568", "name": "Telltale Publishing"}], "splash": "bf8c81db7593a64576d4861a7316aec7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "251570", "sku": "251570"}], "type": 1, "verify_key": "99aa1c362dcd2606c5819d67a0f980c0fd781e51496c8c6f6f67d16ce62292b1"}, {"description": "The direct sequel to Tripwire's earlier wave-based horror FPS, Killing Floor 2 brings the fighting to the continental Europe with new heroes, monsters, and weapons.", "developers": [{"id": "521816653646790671", "name": "Tripwire Interactive, LLC"}], "executables": [{"is_launcher": false, "name": "kfgame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1741b6e80208428074900d6dde0bbf9c", "id": "363409749175173120", "name": "Killing Floor 2", "publishers": [{"id": "521816644432166915", "name": "Tripwire Interactive"}, {"id": "521816653646790671", "name": "Tripwire Interactive, LLC"}], "splash": "1195a1b42c2b3cfbbd3c522f9814423c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "232090", "sku": "232090"}], "type": 1, "verify_key": "bee57bc4f6ad7b0f918d1c4ad5c100f7e80f4fabb95f8f293bf91af4c5eb4940"}, {"aliases": ["Starcraft"], "description": "StarCraft has been called the greatest real-time strategy game ever and it's certainly one of the most critically acclaimed. StarCraft features three powerful, yet balanced races: the Terrans, the Zerg, and the Protoss. You play as each race fights to the death for the fate of the universe.", "developers": [{"id": "521816523430428673", "name": "Blizzard Entertainment"}], "executables": [{"is_launcher": false, "name": "starcraft.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "efc4c8eb5688c64647be477d7468d13d", "id": "363409793119158272", "name": "StarCraft", "overlay": true, "publishers": [{"id": "521816523430428673", "name": "Blizzard Entertainment"}], "splash": "97daa5da944a194a82515b3c5138307b", "summary": "", "third_party_skus": [{"distributor": "battlenet", "id": null, "sku": null}], "type": 1, "verify_key": "9799d2e7a32e0101a4aa1277ae4de52b31c83671be3144a021da26db4bb46688"}, {"description": "A quirky role-playing game that takes place in a secret subterranean world of monsters and gives players the choice to either kill or spare their enemies.", "developers": [{"id": "521816499950714883", "name": "tobyfox"}], "executables": [{"is_launcher": false, "name": "undertale.exe", "os": "win32"}, {"is_launcher": false, "name": "undertale.app", "os": "darwin"}], "flags": 0, "hook": true, "icon": "99ec17659fe44ba31ab007b85fd2454c", "id": "363409849859571722", "name": "Undertale", "publishers": [{"id": "521816499950714883", "name": "tobyfox"}], "splash": "96685ba071cba83859bcc56970698729", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "391540", "sku": "391540"}], "type": 1, "verify_key": "a3718f4fb514684a0cbf756a16f80e36034bf8aed3cf5bc2fc0b2cb24c381cf0"}, {"cover_image": "243bbdb04525192c279c7f468ae0b1be", "description": "", "developers": [{"id": "521816520267923479", "name": "Landon Podbielski"}], "executables": [{"is_launcher": false, "name": "duckgame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1674e99d96799d387de6ed0cf9eccbc5", "id": "363410951518552064", "name": "Duck Game", "overlay": true, "primary_sku_id": "363410951518552064", "publishers": [{"id": "521816520267923475", "name": "Adult Swim Games"}], "slug": "duck-game", "splash": "e407243daef3971783f915db3f4066fc", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "363410951518552064", "sku": "363410951518552064"}, {"distributor": "steam", "id": "312530", "sku": "312530"}], "type": 1, "verify_key": "a910a9144479bdaf162d2ee8473140f0e72b10b7953ea25c85e227c4c52daa2a"}, {"description": "Work together or die alone! Fight to restore peace to London or tear it down for profit in the most challenging team based shooter around.", "developers": [{"id": "521816500508819467", "name": "Splash Damage, Ltd"}], "executables": [{"is_launcher": false, "name": "shootergame-win32-shipping.exe", "os": "win32"}], "flags": 0, "guild_id": "122446271804997634", "hook": true, "icon": "1c25db97bff54f1010d19fa5a0a2bbb0", "id": "363411048713420800", "name": "Dirty Bomb", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816500508819466", "name": "WarChest"}], "splash": "6dfb00e7e5915cc3f91fc6fdc9cd106d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "333930", "sku": "333930"}], "type": 1, "verify_key": "d91d42d580623df765f5f74d6c8737659864cb3f67e3b546a6e87ce182e4f6aa"}, {"description": "", "executables": [{"is_launcher": false, "name": "businesstour.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "894c9ee48d5a771054190bc9da2f78cb", "id": "363411278527594516", "name": "Business Tour - Online Multiplayer Board Game", "splash": "5f9470890b52cca46cb2e95686fa35d8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "397900", "sku": "397900"}], "type": 1, "verify_key": "7b4a217f231cd2dcf8da184a9aabd294f3353a65df1bc1e01cd27f380c703138"}, {"description": "A vault management simulator from Bethesda, set in the Fallout universe.", "developers": [{"id": "521816519768932355", "name": "Bethesda Game Studios"}], "executables": [{"is_launcher": false, "name": "falloutshelter.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b0e4f86de99628334cdfc9643eba843d", "id": "363411364552638464", "name": "Fallout Shelter", "publishers": [{"id": "521816500508819469", "name": "Bethesda Softworks"}], "splash": "2de90d528466f5580700fd41890b871f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "588430", "sku": "588430"}], "type": 1, "verify_key": "43937c99cee595871b4832e62533eb9fbee6f98c10d550657d6f28a0d6405259"}, {"description": "A vividly coloured and light-hearted game about building a ranch of slime creatures on another planet.", "developers": [{"id": "521816656021028865", "name": "Monomi Park"}], "executables": [{"is_launcher": false, "name": "slimerancher.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8effb3065a77b0b306fde7cd0d842ece", "id": "363411395854991400", "name": "Slime Rancher", "publishers": [{"id": "521816656021028865", "name": "Monomi Park"}], "splash": "12b97cdcee158e9e0b991e4bf58dfbb0", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "433340", "sku": "433340"}], "type": 1, "verify_key": "96350e0379035db4b735a78bba330358e8e18d3e8ff7bc066dcfa1545404bf49"}, {"description": "Last Man Standing", "developers": [{"id": "521816716293046277", "name": "Free Reign Entertainment"}], "executables": [{"is_launcher": false, "name": "lms.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0f5d25c5960c9e734e6adced21f4883f", "id": "363411421553360896", "name": "Last Man Standing", "publishers": [{"id": "521816716293046277", "name": "Free Reign Entertainment"}], "splash": "be4bb04701b0aba0a2d725d37ce96a06", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "506540", "sku": "506540"}], "type": 1, "verify_key": "56cc6e587f0a8a30cc898f3d71d81e31f4d926c1070fa5f4c78597626ff7604d"}, {"aliases": ["Titanfall\u2122 2"], "description": "The sequel to Respawn's sci-fi mech-filled first-person shooter, Titanfall 2 adds a deep single-player campaign and revamped multiplayer.", "developers": [{"id": "521816569601458178", "name": "Respawn Entertainment"}], "executables": [{"is_launcher": false, "name": "titanfall2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a2b5108bc074543b2f76d1def74e5399", "id": "363411468441354240", "name": "Titanfall 2", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "splash": "4eeddd382c0af2d06548bf9c894ae41f", "summary": "", "type": 1, "verify_key": "06bff0b238aa7634ef6b6f38a13f3c4a76e5a7bbe40d7006e43cad220b85c7e4"}, {"aliases": ["STAR WARS Battlefront", "STAR WARS\u2122 Battlefront\u2122", "Star Wars Battlefront"], "description": "The reboot to the Battlefront games of the PS2/Xbox era. Developed by DICE and published by EA.", "developers": [{"id": "521816575481872391", "name": "DICE"}], "executables": [{"is_launcher": false, "name": "starwarsbattlefront.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "212e99543b2547fe7501267a42dc84cc", "id": "363412167934083072", "name": "STAR WARS\u2122 Battlefront\u2122", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "summary": "", "third_party_skus": [{"distributor": "origin", "id": null, "sku": null}], "type": 1, "verify_key": "fe9df6145a8db8bd9f434939858490b87f9f20a97e59af38a488707326cc99bf"}, {"description": "Warband is a stand-alone expansion for Mount and Blade. It serves an improved and expanded re-release of the original Mount and Blade, a medieval open world RPG by Taleworlds.", "developers": [{"id": "521816586101850136", "name": "Taleworlds"}], "executables": [{"is_launcher": false, "name": "mountblade warband/binkplay.exe", "os": "win32"}, {"is_launcher": false, "name": "mountblade warband/mb_warband.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "bf9835d3663bfe8a0c70860ee0340689", "id": "363412302998929418", "name": "Mount & Blade: Warband", "publishers": [{"id": "521816521249521702", "name": "Paradox Interactive AB"}], "splash": "afab500c88e606201cce959f54875912", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "48700", "sku": "48700"}], "type": 1, "verify_key": "cdb477033b169a8eaa2c4d7f75c9bba4dc54358768c467b387137a3c2fa1fc2e"}, {"aliases": ["STAR WARS\u2122: The Old Republic\u2122", "Star Wars: The Old Republic"], "description": "Star Wars: The Old Republic is a massively-multiplayer role-playing game set 300 years after the events of BioWare's Knights of the Old Republic series, but still approximately 3,600 years before the events of the films.", "developers": [{"id": "521816589570408449", "name": "BioWare"}], "executables": [{"is_launcher": false, "name": "swtor.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7825036225acf6b03f8a4fde81372c88", "id": "363412489599188992", "name": "STAR WARS: The Old Republic", "overlay": true, "publishers": [{"id": "521816538202767363", "name": "EA Games"}], "splash": "16ea91b6f8d86bf4aea6997bd4e9d019", "summary": "", "type": 1, "verify_key": "2bb7877d68b5fb763b797cc2a0d0bb815c4bda22e668fc3b5ca7c8faaabe33ef"}, {"aliases": ["Planetside 2"], "description": "PlanetSide 2 is the sequel to the 2003 MMOFPS PlanetSide from Sony Online Entertainment which remains one of the most notable and successful games in the genre.", "developers": [{"id": "521816500974256130", "name": "Daybreak Games"}], "executables": [{"is_launcher": false, "name": "planetside2_x64.exe", "os": "win32"}, {"is_launcher": false, "name": "planetside2_x86.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "dbf4eb4c8b31033dd269c35a8ba3544d", "id": "363412528308682752", "name": "PlanetSide 2", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816500974256130", "name": "Daybreak Games"}], "splash": "8bcd765463c02e3d1d312c5d934f9762", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "218230", "sku": "218230"}], "type": 1, "verify_key": "d6b019d08dc5d42d1758ff73e0f4d31fdd87ca10d608a195d2c8d29443875a27"}, {"description": "A Free-to-Play Idle RPG where damage is determined by how fast the mouse button is clicked.", "developers": [{"id": "521816644432166912", "name": "Playsaurus"}], "executables": [{"is_launcher": false, "name": "clicker heroes.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "895a224cef0fa0d2fe2a2aa6508a6eb8", "id": "363412660680785940", "name": "Clicker Heroes", "overlay": true, "publishers": [{"id": "521816643970531344", "name": "Reality Squared Games"}], "splash": "aa7138b4a7883f55f3832ca2d648e4e8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "363970", "sku": "363970"}], "type": 1, "verify_key": "5fe6e78d4164039680936a4a6b10f1f1e89323d6b44eea9cd2c13560e11f338a"}, {"description": "", "developers": [{"id": "521816518871220235", "name": "Double Fine Productions, Inc."}], "executables": [{"is_launcher": false, "name": "psychonauts.exe", "os": "win32"}], "flags": 0, "guild_id": "357444624178216961", "hook": true, "icon": "c480bb1ecfa5d08bb1b0ef9e2fe24774", "id": "363412675650125825", "name": "Psychonauts", "primary_sku_id": "491721925824086046", "publishers": [{"id": "521816518871220235", "name": "Double Fine Productions, Inc."}], "slug": "psychonauts", "splash": "290ac0ad27fdd1434697954974934c58", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "491721925824086046", "sku": "491721925824086046"}, {"distributor": "steam", "id": "3830", "sku": "3830"}], "type": 1, "verify_key": "39ef43b9d97eabec2a0d2c6c892b784b2db3348d00d974d469cfeee3359e1edd"}, {"description": "The latest truck driving simulator in development by SCS Software.", "developers": [{"id": "521816662261891072", "name": "SCS Software"}], "executables": [{"is_launcher": false, "name": "amtrucks.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "18b2fbfa74a3968c6f69af0f7533105c", "id": "363412692083671040", "name": "American Truck Simulator", "publishers": [{"id": "521816662261891072", "name": "SCS Software"}], "splash": "7bbfcffd2639aa212334af1e1c1cc43e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "270880", "sku": "270880"}], "type": 1, "verify_key": "6f1a98657f5614bc673e3d5cd794034e95ea5700ccf59d9d083333d92e976bbe"}, {"description": "Treyarch takes the famous series back sixty years, with the first Call of Duty game set in the Pacific Theatre, against the Imperial Japanese in World War II.", "developers": [{"id": "521816646768263168", "name": "Treyarch"}], "executables": [{"is_launcher": false, "name": "codwaw.exe", "os": "win32"}, {"is_launcher": false, "name": "codwawmp.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a2136149e172fcd57aec7cb76d42e0de", "id": "363412728888557568", "name": "Call of Duty: World at War", "publishers": [{"id": "521816501544550404", "name": "Activision"}, {"id": "521816646768263168", "name": "Treyarch"}], "splash": "dd4156e920e8d25e80987daab25a442f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "10090", "sku": "10090"}], "type": 1, "verify_key": "97751f3d11646017359a138abcb75471c597d8d2b58ad8f0cf28ea5bd68bce4a"}, {"description": "A post-apocalyptic massively multiplayer online car combat game.", "developers": [{"id": "521816790083567631", "name": "Targem Games"}], "executables": [{"is_launcher": false, "name": "crossout-d3d9.exe", "os": "win32"}, {"is_launcher": false, "name": "crossout.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "86657c66b007c140372b22ce084270a8", "id": "363412799117852672", "name": "Crossout", "publishers": [{"id": "521816505688522752", "name": "Gaijin Entertainment"}], "splash": "f1986f1002e6076d6aa922d33b5ca907", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "386180", "sku": "386180"}], "type": 1, "verify_key": "f1cb18685c959dc3c22d2bdefdf2d0a2352010fe2af9b86e417d2a813eef29b4"}, {"description": "Created by Ankama Game, Dofus is a 2D MMORPG using a turn based battle system and features 15 unique classes. The game has a charming artistic aesthetic instead of a realistic 3D world.", "developers": [{"id": "521816751038791693", "name": "Ankama Games"}], "executables": [{"is_launcher": false, "name": "dofus.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2183ef1fecfff1a569e6fb01a766e300", "id": "363412841862266880", "name": "Dofus", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816751038791693", "name": "Ankama Games"}], "splash": "3ce228309dc4caefe3f65419ca7689de", "summary": "", "type": 1, "verify_key": "4f41c2db9a5ef3bf46209085421268ee385bffac54f427722528e9e54c8ea8af"}, {"description": "An Xbox Indie game that allows players to take the stage or participate in lauding or loathing those up in front of the brick wall.", "developers": [{"id": "521816608931446836", "name": "Lighthouse Games Studio"}], "executables": [{"is_launcher": false, "name": "comedy night.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d25b701133e1a4280994cf664de34a10", "id": "363413176605212682", "name": "Comedy Night", "publishers": [{"id": "521816608931446836", "name": "Lighthouse Games Studio"}], "splash": "d0fd898ff0821edc3872184061fae4ca", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "665360", "sku": "665360"}], "type": 1, "verify_key": "4d6302d63e08d28421d162f64f469460ff8c504d3a09dfdcb3019abb7a841c9b"}, {"description": "A top-down indie shooter with procedural level generation.", "developers": [{"id": "521816643245047840", "name": "Dodge Roll"}], "executables": [{"is_launcher": false, "name": "enter the gungeon/etg.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "18599bc8cb90200d35ab13d1cea8d870", "id": "363413202090065920", "name": "Enter the Gungeon", "publishers": [{"id": "521816510730338331", "name": "Devolver Digital"}], "splash": "305fa8ee283ef22f54648fdede4e371c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "311690", "sku": "311690"}], "type": 1, "verify_key": "7a7bfe7c708ec3c5d9145986e8ec185561b5abd53b13c17cac37b9af3a121cb8"}, {"description": "The fourth entry in the Elite franchise, from the series' co-creator David Braben and Frontier Developments.", "developers": [{"id": "521816604175106063", "name": "Frontier Developments Ltd."}], "executables": [{"is_launcher": false, "name": "elitedangerous32.exe", "os": "win32"}, {"is_launcher": false, "name": "elitedangerous64.exe", "os": "win32"}, {"is_launcher": false, "name": "elitedangerous.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7b1ce02a57ca981585cee935d42a304f", "id": "363413225578037248", "name": "Elite Dangerous", "publishers": [{"id": "521816604175106059", "name": "Frontier Developments"}, {"id": "521816604175106063", "name": "Frontier Developments Ltd."}], "splash": "d4dacda40ee7ca50bf9f488bae5498fa", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "359320", "sku": "359320"}], "type": 1, "verify_key": "c7a5b187b395bc02d87afd3d784a36b0e8a8d060bb8013b02688b0f92f358b17"}, {"description": "Wizard101 is a card-based fantasy MMO developed by KingIsle Entertainment.", "developers": [{"id": "521816498541428768", "name": "KingsIsle Entertainment"}], "executables": [{"is_launcher": false, "name": "wizard101.exe", "os": "win32"}, {"is_launcher": false, "name": "wizardgraphicalclient.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "559db46c522e2f7df3fa52766b22dadb", "id": "363413310474813450", "name": "Wizard101", "overlay": true, "publishers": [{"id": "521816498541428766", "name": "GameForge"}], "splash": "5003a939f33b47bd0fd70e2ad4c53a5a", "summary": "", "type": 1, "verify_key": "6040de7eec67f727a70695e98038dd61cbc773ba9aa3e8c203c355d1fbaa2575"}, {"description": "An incremental game where players start with setting up a lemonade stand and end up with managing oil companies.", "developers": [{"id": "521816534881009686", "name": "Hyper Hippo Productions Ltd."}], "executables": [{"is_launcher": false, "name": "adventure-capitalist.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6be1313e91da74d981ef33504794b959", "id": "363413365667921930", "name": "AdVenture Capitalist", "publishers": [{"id": "521816534881009686", "name": "Hyper Hippo Productions Ltd."}], "splash": "d6980d913b797319bd84893289e990b0", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "346900", "sku": "346900"}], "type": 1, "verify_key": "0b2b60bbda7b0106976b3dc491d1b5d1bebf5af30d49f4732cdcef5ee101a36f"}, {"aliases": ["Age of Empires II", "Age of Empires II: The Conquerors"], "description": "", "executables": [{"is_launcher": false, "name": "aok hd.exe", "os": "win32"}, {"is_launcher": false, "name": "age2_x1.exe", "os": "win32"}, {"is_launcher": false, "name": "empires2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "672573bb07f96ecc1739457d13291455", "id": "363413389021675530", "name": "Age of Empires II: HD Edition", "overlay": true, "publishers": [{"id": "521816624546709505", "name": "Hidden Path Entertainment, Ensemble Studios"}, {"id": "521816624546709506", "name": "Skybox Labs"}], "splash": "303332a0f6cb428d0b5ac6e2ebeec332", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "221380", "sku": "221380"}], "type": 1, "verify_key": "43533f99e5ba4de6c6edc96edacd6b9de97c1a7791d2013a2a61e0a57244e9da"}, {"description": "EVE Online is a loosely structured science fiction MMORPG published by CCP Games in which players take on the role of a spaceship pilot exploring a colonized galaxy.", "developers": [{"id": "521816690066194452", "name": "CCP Games"}], "executables": [{"is_launcher": false, "name": "exefile.exe", "os": "win32"}, {"is_launcher": true, "name": "evelauncher.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1bd1fbaca4e7da18204128cbbd0c865e", "id": "363413402300710912", "name": "EVE Online", "publishers": [{"id": "521816690066194452", "name": "CCP Games"}], "splash": "438743d6d835324263c71f0d3d69d483", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "8500", "sku": "8500"}], "type": 1, "verify_key": "20eaa74433ff77cf1d899d4788b5903c73765252ba4a70f10f937c747bd153a2"}, {"description": "An open-world space mercenary roguelite from the developer of Gunpoint.", "developers": [{"id": "521816591604908032", "name": "Suspicious Developments"}], "executables": [{"is_launcher": false, "name": "heat_signature.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2b0bd16070cc0447eb16a40a2bc73c41", "id": "363413452976553984", "name": "Heat Signature", "publishers": [{"id": "521816591604908032", "name": "Suspicious Developments"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "268130", "sku": "268130"}], "type": 1, "verify_key": "cd5decbb1566a24a8123cffe8aba2ab014da66c6069e54b91cac266b296325a2"}, {"description": "RimWorld is a colony-building game about a crash-landed space crew and their fight for survival.", "developers": [{"id": "521816586101850128", "name": "Ludeon Studios"}], "executables": [{"is_launcher": false, "name": "rimworldwin.exe", "os": "win32"}, {"is_launcher": false, "name": "rimworld914win.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "861d3eae85e0c0536588aeef94d9d5b8", "id": "363413465584500737", "name": "RimWorld", "overlay": true, "splash": "e63c84d492e993dddd8dcff1fb6f8843", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "294100", "sku": "294100"}], "type": 1, "verify_key": "47b2c3a8e68fe35152b79f83027bc6e451b90028db79470993efb714935dc8a6"}, {"description": "War Thunder is a free-to-play air combat game set in the World War II and Korean War eras. Naval and land battles are planned additions.", "developers": [{"id": "521816505688522752", "name": "Gaijin Entertainment"}], "executables": [{"is_launcher": false, "name": "aces.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c368f4a8eb1e14c98da713133a04587a", "id": "363413661567680522", "name": "WarThunder", "publishers": [{"id": "521816505688522752", "name": "Gaijin Entertainment"}], "summary": "", "type": 1, "verify_key": "f8d8702112c99dfc937140d6eedbaae9665968ac16d2260e8424c1ca8be2189b"}, {"description": "Rivals of Aether is an indie fighting game set in a vast world featuring a unique roster of elementally themed characters.", "developers": [{"id": "521816554212687884", "name": "Dan Fornace"}], "executables": [{"is_launcher": false, "name": "rivalsofaether.exe", "os": "win32"}], "flags": 0, "guild_id": "63722835520004096", "hook": true, "icon": "b205ccca202ab6b8f35dc2474bba0d53", "id": "363413717267906560", "name": "Rivals of Aether", "splash": "639d7e43ce85025200a12d49b2847b3d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "383980", "sku": "383980"}], "type": 1, "verify_key": "5722fb5712a6b25bf902743e5bde6ded58bb2ac48b4c7d841a4453bfaed57f50"}, {"description": "Car sim developed by BeamNG.", "executables": [{"is_launcher": false, "name": "beamng.drive.x64.exe", "os": "win32"}, {"is_launcher": false, "name": "beamng.drive.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7cdf03d0914abf557c372f81182b4039", "id": "363413743335374859", "name": "BeamNG.drive", "splash": "1e6f52750013a9088823845a235826d5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "284160", "sku": "284160"}], "type": 1, "verify_key": "16c1ade05dfd39c395b7362843ec55164e8885043a3e91b1776feb0ae468349b"}, {"aliases": ["Subnautica-FullRelease"], "description": "", "developers": [{"id": "521816602728071191", "name": "Unknown Worlds"}], "executables": [{"is_launcher": false, "name": "subnautica.exe", "os": "win32"}], "flags": 0, "guild_id": "85342800492634112", "hook": true, "icon": "658213af4ac66a18d0783d00bcc60916", "id": "363413811518242816", "name": "Subnautica", "primary_sku_id": "489926636943441932", "publishers": [{"id": "521816602728071191", "name": "Unknown Worlds"}], "slug": "subnautica", "splash": "a5d4e0abcb94fbf51c42410475998999", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "489926636943441932", "sku": "489926636943441932"}, {"distributor": "steam", "id": "264710", "sku": "264710"}], "type": 1, "verify_key": "b0f359dd02e604f32893d81fe4993a87c2d00b563a9a05f28815d29d26a24fbc"}, {"description": "The 6th mainline entry in the acclaimed 4X series.", "developers": [{"id": "521816573485514765", "name": "Firaxis Games"}], "executables": [{"is_launcher": false, "name": "civilizationvi.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "898cdf97668109199473d5cdc160fa98", "id": "363413834301571072", "name": "Sid Meier's Civilization VI", "publishers": [{"id": "521816504392482816", "name": "2K Games"}], "splash": "8eda4b54761775a6a4759a26811d66de", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "289070", "sku": "289070"}], "type": 1, "verify_key": "5cf236ee517a3e89e8573959bd8f241401833ead808ca9f88bb5d00d09bfc8f9"}, {"description": "An MMORPG set in the world of Nirn, focusing on the familiar continent of Tamriel, taking place a thousand years before The Elder Scrolls: Skyrim.", "developers": [{"id": "521816740712415232", "name": "ZeniMax Online Studios"}], "executables": [{"is_launcher": false, "name": "game/client/eso.exe", "os": "win32"}, {"is_launcher": false, "name": "game/client/eso64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "008b72e1eee966e10a5962413daa582f", "id": "363413894602948608", "name": "The Elder Scrolls Online", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816500508819469", "name": "Bethesda Softworks"}], "splash": "50b9a85cda85c1670d8e6b4950e291d2", "summary": "", "type": 1, "verify_key": "fb0ee845a95ec71b7f3954173e17e2e32c4f8e96281d20ee5ed3014cf4175f7a"}, {"description": "In a world with health regeneration and cover-based systems, one of the longest-running first-person shooter series returns to its brutal, fast-paced roots.", "developers": [{"id": "521816563024920606", "name": "id Software"}], "executables": [{"is_launcher": false, "name": "doomx64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "564123ba75d83acd12f0223690599072", "id": "363413961967927306", "name": "DOOM", "publishers": [{"id": "521816500508819469", "name": "Bethesda Softworks"}], "splash": "e8820e949e526abe39d7b3df42a1949a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "379720", "sku": "379720"}], "type": 1, "verify_key": "2030d8049ecaa5b681c5de940625542f102cef5472e5d21d9e79c4911c61d86c"}, {"description": "", "developers": [{"id": "521816498017271829", "name": "Subset Games"}], "executables": [{"is_launcher": false, "name": "ftlgame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6bb701757ad6232284893750cb3c5d08", "id": "363414030188150801", "name": "FTL: Faster Than Light", "overlay": true, "primary_sku_id": "489914768048783390", "publishers": [{"id": "521816498017271829", "name": "Subset Games"}], "slug": "ftl-faster-than-light", "splash": "8606b26658527ed811aebf152cd77b3b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "212680", "sku": "212680"}, {"distributor": "discord", "id": "489914768048783390", "sku": "489914768048783390"}], "type": 1, "verify_key": "c38cd3c80334c89e661470e2b5185f9a2313d8f119771525b81889edbb4fb9a0"}, {"description": "A free-to-play, online 8-bit MMORPG hack-n-slash that brings you back to when RPGs were simpler, if there ever was a time.", "developers": [{"id": "521816556175491085", "name": "Wild Shadow Studios"}], "executables": [{"is_launcher": false, "name": "realm of the mad god.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a58ffd0d82109694dab00e2bcf736962", "id": "363414084542005258", "name": "Realm of the Mad God", "publishers": [{"id": "521816556175491085", "name": "Wild Shadow Studios"}], "splash": "c93739c5cc2c38313436ee4b899c548c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "200210", "sku": "200210"}], "type": 1, "verify_key": "76afdd3b9d8e1bea8760ec4f1799484872cff61072c9cc682d91c8331dcb80f4"}, {"description": "Battle a dictator's forces in a fictional Mediterranean archipelago in this follow-up to the popular series from Avalanche Studios and Square-Enix.", "developers": [{"id": "521816537192202241", "name": "Avalanche Studios"}], "executables": [{"is_launcher": false, "name": "justcause3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4cb59a8aa3a737f7bf6ecd8f725d6cbc", "id": "363414140502671360", "name": "Just Cause 3", "overlay": true, "publishers": [{"id": "521816526920351761", "name": "Square Enix"}], "splash": "365b82183ba19efe7359c6fa46f24f53", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "225540", "sku": "225540"}], "type": 1, "verify_key": "4a0d8c79bba9bbf28b01ed39cf5bc746b854d57aa3ed6051bece613a6873cc15"}, {"description": "A first-person puzzle game developed by Valve and graduates of DigiPen, Portal forces a human test subject to run a gauntlet of grueling spatial experiments administered by a malfunctioning, psychotic artificial intelligence named GLaDOS.", "developers": [{"id": "521816530393104394", "name": "Valve Corporation"}], "executables": [{"is_launcher": false, "name": "hl2p.exe", "os": "win32"}, {"is_launcher": false, "name": "portal/hl2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "142643e3f81e8932fa94d5ac7aef697a", "id": "363414173457186826", "name": "Portal", "publishers": [{"id": "521816530393104394", "name": "Valve Corporation"}], "splash": "28816ac7dc002572cc4b668f31c9324a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "400", "sku": "400"}], "type": 1, "verify_key": "c568331eea476cc3744bcdae44f4dac8e2e0fe8f921551be2d03c237ceb13006"}, {"bot_public": true, "bot_require_code_grant": false, "cover_image": "de26aee95bcf5e550f6db127576730b7", "description": "", "developers": [{"id": "521816765186048036", "name": "Motion Twin"}], "executables": [{"is_launcher": false, "name": "deadcells.exe", "os": "win32"}], "flags": 0, "guild_id": "329403875117236225", "hook": true, "icon": "409bdf22e789337764b144046d887bbb", "id": "363414360422612992", "name": "Dead Cells", "primary_sku_id": "451550535720501248", "publishers": [{"id": "521816765186048036", "name": "Motion Twin"}], "slug": "dead-cells", "splash": "9c60428570b5f5185d7995129e95c05c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "588650", "sku": "588650"}, {"distributor": "discord", "id": "451550535720501248", "sku": "451550535720501248"}], "type": 1, "verify_key": "3426f3582992b6a9aa681622b4812104ef2d63e72d5e5459925ad8fb78b6fbf8"}, {"description": "EA's association football game for 2016 runs on the Frostbite engine.", "developers": [{"id": "521816499950714880", "name": "EA Canada"}], "executables": [{"is_launcher": false, "name": "fifa17.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "49e4688b9201deeebc0286c14d652bab", "id": "363414398129274890", "name": "FIFA 17", "overlay": true, "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "summary": "", "third_party_skus": [{"distributor": "origin", "id": null, "sku": null}], "type": 1, "verify_key": "6bd4c34f7900de8621085b01fe8fe31872c6d9c0787982c21edb3d58ad008478"}, {"description": "A second time-traveling romp through the DragonBall series.", "developers": [{"id": "521816600723324929", "name": "Dimps Corporation"}], "executables": [{"is_launcher": false, "name": "dbxv2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "11289c3dfeabc6209c2ec030598854c7", "id": "363414443129831444", "name": "DRAGON BALL XENOVERSE 2", "publishers": [{"id": "521816537653444610", "name": "Bandai Namco Entertainment"}], "splash": "8a90c94363e9f72a9150450d9e09c84a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "454650", "sku": "454650"}], "type": 1, "verify_key": "6c57c6bb75626c81042b73aac5f58dae35268ec56176b6f7b3a0ad5807258d6b"}, {"aliases": ["Friday the 13th"], "description": "Take control of classic horror icon Jason Voorhees and stalk up to seven other players (as camp counselors trying to survive the night) in this asymmetrical-multiplayer survival horror game.", "developers": [{"id": "521816560051159041", "name": "Illfonic"}], "executables": [{"is_launcher": false, "name": "summercamp.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2a654eea2d72d75904e892e5a9b36c6f", "id": "363414482615271434", "name": "Friday the 13th: The Game", "publishers": [{"id": "521816560051159040", "name": "Gun Media"}], "splash": "05b69cd265bcd3b483d78329c6a38527", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "438740", "sku": "438740"}], "type": 1, "verify_key": "946956ce6cb8941411f52fd8d50313d3a894a4b6cc1096f238d3085fbd67be8c"}, {"description": "The latest game announced by acclaimed indie developer, Introversion Software, in which players will \"build and manage a maximum security prison.\" It is current available on Steam and through the developer's website.", "developers": [{"id": "521816530397298691", "name": "Introversion Software Limited"}], "executables": [{"is_launcher": false, "name": "prison architect.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e8291d74af2a2c8c9827077589b05170", "id": "363414635812093962", "name": "Prison Architect", "overlay": true, "publishers": [{"id": "521816530397298691", "name": "Introversion Software Limited"}], "splash": "9f5c8be11c67fb8a342f73fbe7b956b5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "233450", "sku": "233450"}], "type": 1, "verify_key": "95e6248d42a2edf5a74cf68d6e286c161092d1a5e36abb9064c31a8b8e326d54"}, {"description": "Tekken 7 is the final chapter of the Mishima family's storyline.", "developers": [{"id": "521816537653444610", "name": "Bandai Namco Entertainment"}], "executables": [{"is_launcher": false, "name": "tekkengame-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "05bcfb4ccf8af3b5d1c2156257bff953", "id": "363414667797725184", "name": "TEKKEN 7", "publishers": [{"id": "521816537653444610", "name": "Bandai Namco Entertainment"}], "splash": "84e1b8a37dd365f95da6b50c75b5bff2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "389730", "sku": "389730"}], "type": 1, "verify_key": "5de21a425885721df209956aaa62a7394589ba93ff7dd17fd3aae4f393ae71c9"}, {"description": "Sequel to The Escapists", "developers": [{"id": "521816571103019015", "name": "Team17 Software Limited"}], "executables": [{"is_launcher": false, "name": "theescapists2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6eec4921b9e48e532bdcd6838674da5a", "id": "363414712186306560", "name": "The Escapists 2", "publishers": [{"id": "521816571103019015", "name": "Team17 Software Limited"}], "splash": "5c3a512ca58c4c20aa90b94bca997341", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "641990", "sku": "641990"}], "type": 1, "verify_key": "48c43f3db61796d88acae059ec7fa7187a307478f3a0a2ff622e38ae8a1323b7"}, {"description": "The sequel to Paradox Interactive's Crusader Kings is a grand strategy game that focuses mostly on the dynasties of medieval Europe. Games begin as early as 769 and can span until 1453. Expansions have expanded the game's scope to include the Middle East, India and the Eurasian Steppe.", "developers": [{"id": "521816521249521702", "name": "Paradox Interactive AB"}], "executables": [{"is_launcher": false, "name": "ck2game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d61dc98937afec90eefad2733e2d75ae", "id": "363414742661988352", "name": "Crusader Kings II", "overlay": true, "publishers": [{"id": "521816521249521702", "name": "Paradox Interactive AB"}], "splash": "30c2b61138de0d293e6f486088176f0d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "203770", "sku": "203770"}], "type": 1, "verify_key": "3cd66c26c2c646d8010cd171be908bc9e93cad6069fc981b5e5f55c5a78ea6b4"}, {"description": "", "executables": [{"is_launcher": false, "name": "microtransaction_simulator/microsimulator.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "43e13f5d6992103fe993fd717d8e3530", "id": "363414852410015744", "name": "Microtransaction Simulator", "splash": "27064abbbb8bb6046c092410b82067be", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "689090", "sku": "689090"}], "type": 1, "verify_key": "c15754ec8255d35643471d62b83ac848c60be0062399d4ca5a510bbe36558dad"}, {"aliases": ["Middle-earth\u2122: Shadow of Mordor\u2122"], "description": "An open-world action-adventure game by Monolith, set between the events of The Hobbit and The Lord of the Rings.", "developers": [{"id": "521816711532511245", "name": "Monolith Productions, Inc."}], "executables": [{"is_launcher": false, "name": "shadowofmordor.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "dbd6ac3bb97b9cdbb4946b383cdc69fa", "id": "363424997080956928", "name": "Middle-earth: Shadow of Mordor", "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "splash": "2f7ceaf0b7c9c2b47e57c12ef7d38524", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "241930", "sku": "241930"}], "type": 1, "verify_key": "20dd7c213fa04f760e7bb19735c37617d4404694e4b9f011248ba1a6d84610f5"}, {"aliases": ["Metal Gear Online 3", "Metal Gear Solid V: The Phantom Pain"], "description": "The seventh entry in the Metal Gear Solid series recounts the adventures of Punished 'Venom' Snake, as he wakes up from a nine-year coma in 1984 to rebuild his mercenary paradise.", "developers": [{"id": "521816572088811558", "name": "Kojima Productions"}], "executables": [{"is_launcher": false, "name": "mgsvtpp.exe", "os": "win32"}, {"is_launcher": false, "name": "mgsvmgo.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a8d4bf90e06d6f78b278de54f4174d65", "id": "363425113879609344", "name": "METAL GEAR SOLID V: THE PHANTOM PAIN", "publishers": [{"id": "521816513074692111", "name": "Konami"}, {"id": "521816738807939112", "name": "Konami Digital Entertainment"}], "splash": "e4dc09c5e238c00d3a140ce0fe3f240a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "287700", "sku": "287700"}], "type": 1, "verify_key": "a78d5b434561cf8baedb056a79cb7472f68b2f76001779865829b3ff3f21815b"}, {"description": "An idle game using the Dungeons & Dragons license.", "developers": [{"id": "521816570029146115", "name": "Codename Entertainment"}], "executables": [{"is_launcher": false, "name": "idledragons.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a9ab6c72aad7cae13c18ea1a664900c0", "id": "363425133274333214", "name": "Idle Champions of the Forgotten Realms", "publishers": [{"id": "521816570029146115", "name": "Codename Entertainment"}], "splash": "e48f7f204341f6fbae9d322534a8cd69", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "627690", "sku": "627690"}], "type": 1, "verify_key": "d03a78aafc374ca99f8209e4adaaf52fd111acaba611c6c05e82b2d1b5c30848"}, {"description": "HuniePop is a dating sim featuring puzzles and RPG-like systems.", "developers": [{"id": "521816734374559755", "name": "HuniePot"}], "executables": [{"is_launcher": false, "name": "huniepop.exe", "os": "win32"}, {"is_launcher": false, "name": "huniepop.app", "os": "darwin"}], "flags": 0, "hook": true, "icon": "7b10572839d1bcbb017d5bce629e3ae1", "id": "363425169051615262", "name": "HuniePop", "publishers": [{"id": "521816734374559755", "name": "HuniePot"}], "splash": "afde26d45b4adaf6a85431f8bf3897c2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "339800", "sku": "339800"}], "type": 1, "verify_key": "6e826558d59e74e7c0f95f60841ae5c7c1963d86b99502a84cb6d530a4ac746a"}, {"description": "Ultimate Chicken Horse is a party platformer for up to four people where the players place platforms, traps and hazards and try to make the level too difficult for their friends, but easy enough for them.", "developers": [{"id": "521816638438375481", "name": "Clever Endeavour"}], "executables": [{"is_launcher": false, "name": "ultimatechickenhorse.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7db6f7d5c3baf9c00fd32c57110c693a", "id": "363425213905371146", "name": "Ultimate Chicken Horse", "publishers": [{"id": "521816638438375481", "name": "Clever Endeavour"}], "splash": "c4272abfb021268a47d99705b47e237a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "386940", "sku": "386940"}], "type": 1, "verify_key": "071ba0783c29d26d7aa2ce96e96ec04b835a531c110140de1449912ec8de206d"}, {"aliases": ["NieR:Automata\u2122"], "description": "NieR: Automata is an action RPG developed by PlatinumGames.", "developers": [{"id": "521816725793275924", "name": "PlatinumGames"}], "executables": [{"is_launcher": false, "name": "nierautomata.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c4f1f98afe3450bd507ad887d99d8376", "id": "363425276300099584", "name": "NieR:Automata", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}], "splash": "0d985a6e98a616c27df0b459aea6ca91", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "524220", "sku": "524220"}], "type": 1, "verify_key": "636ab5d71659de8bbb202bc86836781a6c31d1c7a54ff4c1b3e3dd8254b1a4da"}, {"aliases": ["DARK SOULS\u2122 II: Scholar of the First Sin"], "description": "A remastered release of Dark Souls II, featuring a graphical upgrade, increased online player limit, remixed locations for items and enemies, and includes all of the previously released DLC.", "developers": [{"id": "521816537653444611", "name": "FromSoftware, Inc."}], "executables": [{"is_launcher": false, "name": "darksoulsii.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c8498421d6d1b9163e3d0b77d9b734ba", "id": "363426741269692416", "name": "DARK SOULS II: Scholar of the First Sin", "publishers": [{"id": "521816537653444609", "name": "FromSoftware, Inc"}, {"id": "521816537653444610", "name": "Bandai Namco Entertainment"}], "splash": "a1dfd3ac27487ad01bf08c166266c430", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "335300", "sku": "335300"}], "type": 1, "verify_key": "d5449a315734bed22bb5ee9ff5975885eecbf53c018e527f2ce3845587b9b4bb"}, {"description": "Total War: Warhammer II", "developers": [{"id": "521816720503996437", "name": "The Creative Assembly"}], "executables": [{"is_launcher": false, "name": "warhammer2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "570fe95e5a25980e596d1aadae5ddf2a", "id": "363426802640617482", "name": "Total War: WARHAMMER II", "publishers": [{"id": "521816507676885010", "name": "Sega"}], "splash": "8c67136a450ef83a6383f7ab64c1d829", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "594570", "sku": "594570"}], "type": 1, "verify_key": "edb26f94d759141016057c0bce34f2e6717b5c6d7d455686b277e4ba48c35951"}, {"description": "Take control of fierce female warriors in a 1940s dark Deco world in this stylish indie fighting game developed by (and for) hardcore fighting game enthusiasts.", "developers": [{"id": "521816603210285067", "name": "Reverge Labs, LLC"}], "executables": [{"is_launcher": false, "name": "skullgirls.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fab1e8e55b89bfb779790b4a54507ca0", "id": "363426862363574272", "name": "Skullgirls", "publishers": [{"id": "521816603210285066", "name": "Autumn Games"}], "splash": "06e97c876b8ba05cc904d662384914d3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "245170", "sku": "245170"}], "type": 1, "verify_key": "babc8f489545360e818b4d513726e83c4bdaa5ced2fd80bc5d27d5574419637a"}, {"description": "The newest game in the Farming Simulator franchise for consoles and the PC.", "developers": [{"id": "521816627767934979", "name": "GIANTS Software GmbH"}], "executables": [{"is_launcher": false, "name": "farmingsimulator2017game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "61bed87d2da8e32dd8f24423a9e83323", "id": "363426921612181504", "name": "Farming Simulator 17", "publishers": [{"id": "521816537192202247", "name": "Focus Home Interactive"}], "splash": "c43aefe5587517cbdffc8212aff48a33", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "447020", "sku": "447020"}], "type": 1, "verify_key": "98c6f07f98e1a4bca8ad3f733e8f5844d0b522ebf24b32394e745bc7b99783d6"}, {"aliases": ["100% Orange Juice"], "description": "A combination of board game and deck building that has players battling for stars and collecting cards.", "developers": [{"id": "521816753341333506", "name": "Orange_Juice"}], "executables": [{"is_launcher": false, "name": "100orange.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d433683ac90381899745caba0834f19d", "id": "363427044333191169", "name": "100% Orange Juice", "publishers": [{"id": "521816581924192296", "name": "Fruitbat Factory"}], "splash": "85dc99a1287342a4afc219a001554499", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "282800", "sku": "282800"}], "type": 1, "verify_key": "d004607e98bcb1cdf8ad7fe95a461250f221f87428577477ce3b11450f658acb"}, {"description": "Enter the dungeons of dance and fight enemies to the beat of the music.", "developers": [{"id": "521816661138079764", "name": "Brace Yourself Games"}], "executables": [{"is_launcher": false, "name": "necrodancer.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "118c8e810263a44719bb030bc589d7cc", "id": "363427101346627584", "name": "Crypt of the NecroDancer", "publishers": [{"id": "521816661138079764", "name": "Brace Yourself Games"}], "splash": "0b06817f453c91c7ea4bdb46b3ec760c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "247080", "sku": "247080"}], "type": 1, "verify_key": "3248d7d09d91f6eba8c98767aeac7828b00ad6f6c6d2a0334be2181ea40cb4a4"}, {"aliases": ["Call of Duty: Black Ops II - Multiplayer"], "description": "The Black Ops storyline continues, switching the past Cold War from the game's predecessor to future 2025, as a new Cold War between U.S.A. and China flares up due to the actions of one vengeful drug-runner.", "developers": [{"id": "521816646768263168", "name": "Treyarch"}], "executables": [{"is_launcher": false, "name": "t6sp.exe", "os": "win32"}, {"is_launcher": false, "name": "t6zm.exe", "os": "win32"}, {"is_launcher": false, "name": "t6mp.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0d320e70ad7c00bf2273ecaa1547b69a", "id": "363427270024626176", "name": "Call of Duty: Black Ops II", "publishers": [{"id": "521816501544550404", "name": "Activision"}, {"id": "521816646768263168", "name": "Treyarch"}], "splash": "b30778fa934ddc3c70c9afa7052cd624", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "202970", "sku": "202970"}, {"distributor": "steam", "id": "202990", "sku": "202990"}], "type": 1, "verify_key": "4892f1a6cb145b80a91759cc3f8449a228eb92e8e046c07de9664a6739d9a801"}, {"aliases": ["Sonic Adventure\u2122 2"], "description": "Sonic Adventure 2 is a 2001 sequel to Sonic Adventure. It marks the debut appearance of Shadow the Hedgehog and Rouge the Bat, and is the first ever Sonic title where Dr. Eggman is playable.", "developers": [{"id": "521816507676885013", "name": "Sonic Team"}], "executables": [{"is_launcher": false, "name": "sonic2app.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ccc56c1ac57a2e8883d36ca00563620a", "id": "363427419249442816", "name": "Sonic Adventure 2", "publishers": [{"id": "521816507676885010", "name": "Sega"}], "splash": "b0cfe7aabd3c43201ab584c74153acee", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "213610", "sku": "213610"}], "type": 1, "verify_key": "be018374f4787beafbf399a07fa6c1461b480b2fe4fa9ef402454e49b7f4ceda"}, {"aliases": ["Bloons TD Battles"], "cover_image": "cef0c4fce7b5fd37c59f847f17d7f78e", "description": "Go head to head with other players in a Bloon-popping battle for victory. From the creators of best-selling Bloons TD 5, this all new Battles game is specially designed for multiplayer combat, featuring the ability to control Bloons directly and send them charging past your opponent's defenses.", "developers": [{"id": "521816733728768032", "name": "Ninja Kiwi"}], "executables": [{"is_launcher": false, "name": "battles-win.exe", "os": "win32"}, {"is_launcher": false, "name": "bloons td battles/battles-win.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "cef0c4fce7b5fd37c59f847f17d7f78e", "id": "363427491995713536", "name": "Bloons TD Battles", "privacy_policy_url": "https://ninjakiwi.com/privacy", "publishers": [{"id": "521816733728768032", "name": "Ninja Kiwi"}], "splash": "9006d618e5cf97f6249be44e2941b3b8", "summary": "", "terms_of_service_url": "https://ninjakiwi.com/terms", "third_party_skus": [{"distributor": "steam", "id": null, "sku": null}, {"distributor": "steam", "id": "444640", "sku": "444640"}], "type": 1, "verify_key": "6e22266bba1b4ab5927f8424764508f65d823924a7613381fe9befbc842b2d6b"}, {"description": "After the Empress is killed, her most loyal bodyguard, Corvo, becomes the prime suspect, and must track down those who murdered his charge and betrayed him in order to enact his bloody revenge.", "developers": [{"id": "521816500974256128", "name": "Arkane Studios SA"}], "executables": [{"is_launcher": false, "name": "dishonored.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0a824ee9240367a5c30a707931b802cd", "id": "363427574707257354", "name": "Dishonored", "publishers": [{"id": "521816500508819469", "name": "Bethesda Softworks"}], "splash": "19617d00216b85cb88169c944047f541", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "205100", "sku": "205100"}], "type": 1, "verify_key": "1a94253faccfade56dd626bc0ff25862339092cf078cb648f816cdccb3dced73"}, {"description": "Sven Co-Op was originally a half-life mod allowing players to play through the Half-Life campaign and a selection of custom maps cooperatively. On July 16th, 2013 it was announced that it would be coming to Steam with Valve's blessing as a stand alone game.", "executables": [{"is_launcher": false, "name": "svencoop.exe", "os": "win32"}], "flags": 0, "guild_id": "170051548284583937", "hook": true, "icon": "8c3a3bcf6fdbbc99bf830fb934a1ac04", "id": "363427674309263360", "name": "Sven Co-op", "splash": "dfc813614965b0ce655851f0c2eecb9f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "225840", "sku": "225840"}], "type": 1, "verify_key": "2a36b97579520407119c5814d46a78eb4c32f8eb30ea3d09102edb27543ccb40"}, {"description": "A unique take on an MMO that combines customization of a condo, character customization, several minigames, and a plaza that has many activities on its own.", "developers": [{"id": "521816750296137753", "name": "PixelTail Games"}], "executables": [{"is_launcher": false, "name": "tower-win64-shipping.exe", "os": "win32"}], "flags": 0, "guild_id": "93925271886897152", "hook": true, "icon": "acb798a7428c6daedbacae59df61f4dd", "id": "363427800088313856", "name": "Tower Unite", "splash": "e996826ff1b343ecaa9e2b1904ca13fd", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "394690", "sku": "394690"}], "type": 1, "verify_key": "fb1a995a123425158c5b76c059a3b00c5f9f35c654115f113baadf67e305e77e"}, {"description": "Dying Light is a first-person, open world game set in a zombie apocalypse. The player character is able to free-run to get around the environment quickly.", "developers": [{"id": "521816637956161558", "name": "Techland Sp. z o.o."}], "executables": [{"is_launcher": false, "name": "dyinglightgame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e9465677c4f03394da82e8107ab73d70", "id": "363427839137153024", "name": "Dying Light", "overlay": true, "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "splash": "d83e6e087f91f562c7c72f9730d753f2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "239140", "sku": "239140"}], "type": 1, "verify_key": "790861051bcc0404b88b93c44e40115a1580bb4024f86138e4fab1fd8213d890"}, {"aliases": ["Chivalry: Medieval"], "description": "Chivalry: Medieval Warfare is a first-person, multiplayer-only, hack-and-slash sequel to the Age of Chivalry mod for Half-Life 2.", "developers": [{"id": "521816579797811201", "name": "Torn Banner Studios"}], "executables": [{"is_launcher": false, "name": "cmw.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "02d679f3b1ea099e3f8d018ba5690586", "id": "363427969324023808", "name": "Chivalry: Medieval Warfare", "publishers": [{"id": "521816579797811201", "name": "Torn Banner Studios"}], "splash": "879ec52b22474f16a8ead754c57641b2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "219640", "sku": "219640"}], "type": 1, "verify_key": "bb94ecd55ae6c83ea149b942dc8f536c0bdd13c26e769c401f72ba6b0b04e3d5"}, {"description": "Squad is a modern military First Person Shooter for PC that focuses on teamwork oriented gameplay and large scale combined arms warfare, it is a spiritual sequel to the Project Reality modification for Battlefield 2.", "developers": [{"id": "524755167288098837", "name": "Offworld Industries"}], "executables": [{"is_launcher": false, "name": "squad.exe", "os": "win32"}], "flags": 0, "guild_id": "91294111071469568", "hook": true, "icon": "76ca41d78c15257bb3caf98a8e8ed28b", "id": "363428011980357632", "name": "Squad", "overlay": true, "overlay_compatibility_hook": true, "splash": "f1d8df60cfe5894ebc0debf06cfad288", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "393380", "sku": "393380"}], "type": 1, "verify_key": "0aaf8cf0d263d1276480f8652d6d3c9ce0178f148857a6b34fa0af124c11c37a"}, {"aliases": ["ASTRONEER Early Access", "Astroneer"], "description": "Build and survive on procedural planets in this space exploration game from indie developer System Era Softworks.", "developers": [{"id": "521816613981388827", "name": "System Era Softworks"}], "executables": [{"is_launcher": false, "name": "astro-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d6d51621df8d0a7ea07e0fea9d450560", "id": "363428060604792832", "name": "ASTRONEER", "publishers": [{"id": "521816613981388827", "name": "System Era Softworks"}], "splash": "94f0b4bf9fb462e3ec1222d71718d95a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "361420", "sku": "361420"}], "type": 1, "verify_key": "b82e530649b9d24e3f683a92aacd3328ab2013c9982b5b8fd6473f119dcbc7a3"}, {"description": "Creativerse is a sandbox voxel adventure game. It features an RPG crafting system, layered biomes and is persistently online.", "developers": [{"id": "521816506171129880", "name": "Playful Corp"}], "executables": [{"is_launcher": false, "name": "creativerse.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "dd87838fb60ae8e22edc551134aa66e5", "id": "363428103919239168", "name": "Creativerse", "publishers": [{"id": "521816506171129880", "name": "Playful Corp"}], "splash": "b5a87069debd59fb399fc67df872a301", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "280790", "sku": "280790"}], "type": 1, "verify_key": "47c5108604e62bd60d05717eec54180ae22f4da46859d1016d90e2442159a5de"}, {"description": "The first game in the Oddworld series. Players control an alien slave named Abe on a quest to free his fellow Mudokons from the clutches of Molluck, the ruthless boss of RuptureFarms.", "developers": [{"id": "521816747477827596", "name": "Oddworld Inhabitants"}], "executables": [{"is_launcher": false, "name": "oddworld abes oddysee/abewin.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "122036797795a60e825236d2c6a15a2e", "id": "363428220617621504", "name": "Oddworld: Abe's Oddysee", "publishers": [{"id": "521816543777128455", "name": "GT Interactive Software Corp."}], "splash": "9990985dc8dfd5784e1f1b019dd4a9d2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "15700", "sku": "15700"}], "type": 1, "verify_key": "daeb6d60bedc2a054f89d6861ca6c12cba000e1e48537cb98835f8506b2b3f19"}, {"aliases": ["Tom Clancy's Ghost Recon: Wildlands", "Tom Clancy's Ghost Recon? Wildlands", "Tom Clancy's Ghost Recon\u00ae Wildlands", "Tom Clancys Ghost Recon: Wildlands", "Tom Clancys Ghost Recon\u00ae Wildlands"], "description": "Take on South American drug cartels in the latest entry in the Ghost Recon franchise.", "developers": [{"id": "521816562068488195", "name": "Ubisoft Paris Studios"}], "executables": [{"is_launcher": false, "name": "grw.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8c73cf21bcb37c15d80857282160bcb2", "id": "363428336749379604", "name": "Tom Clancy's Ghost Recon Wildlands", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}, {"id": "521816562068488193", "name": "Ubisoft Paris"}, {"id": "521816510730338325", "name": "Ubisoft"}], "splash": "cdd66601783148aabc565198a60b6c17", "summary": "", "third_party_skus": [{"distributor": "uplay", "id": "1771", "sku": "1771"}, {"distributor": "steam", "id": "460930", "sku": "460930"}], "type": 1, "verify_key": "12d5564e9fff0e41d69a794eb28e700669b542465c4fb5b3e16bb1fc97e2faf6"}, {"aliases": ["Warhammer End Times Vermintide"], "description": "Mixing the grimdark fantasy world of Warhammer with the co-operative horde-slaying gameplay of the Left 4 Dead series, Vermintide pits a ragtag group of heroes against an endless army of the underground-dwelling Skaven.", "developers": [{"id": "521816633392627715", "name": "Fatshark AB"}], "executables": [{"is_launcher": false, "name": "vermintide.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "268103c03c514cef692527189ab31054", "id": "363429268577058816", "name": "Warhammer: End Times - Vermintide", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816633392627715", "name": "Fatshark AB"}], "splash": "dfd5b9b9241f4f475f956ada2cbefb97", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "235540", "sku": "235540"}], "type": 1, "verify_key": "56c61f162d67c6aec7d0a2f609f2d5245c4d5a7c2ce08005272e322cefd9420b"}, {"description": "Players are shipwrecked on a mysterious island and then forced to partake in deadly \"performances\" for the entertainment of a crowd of cats.", "developers": [{"id": "521816647678558213", "name": "The Behemoth"}], "executables": [{"is_launcher": false, "name": "battleblocktheater.exe", "os": "win32"}], "flags": 0, "guild_id": "195951483789901835", "hook": true, "icon": "0460513c2fa63f260453130ad62bd4a8", "id": "363429294778744832", "name": "BattleBlock Theater", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}], "splash": "583d3c9486c5824592c3663f980aeae3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "238460", "sku": "238460"}], "type": 1, "verify_key": "01a40e2562d5940dc7d9174e43dda83ad8e0e645d13d512d8ef718143f22f452"}, {"description": "When hordes of failed super-soldiers (the zombie-like \"specimens\") break out of the labs of Horzine Biotech, it's up to London's finest to put them down in this cooperative survival horror wave-based first-person shooter.", "developers": [{"id": "521816653646790671", "name": "Tripwire Interactive, LLC"}], "executables": [{"is_launcher": false, "name": "killingfloor.exe", "os": "win32"}], "flags": 0, "guild_id": "120305629175742464", "hook": true, "icon": "cc041209037d96765ef15edd958ed183", "id": "363429388156403712", "name": "Killing Floor", "publishers": [{"id": "521816653646790671", "name": "Tripwire Interactive, LLC"}], "splash": "6f87ff07440c46d5dd85291bd55655ee", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "1250", "sku": "1250"}], "type": 1, "verify_key": "d8a04b9cd0d4e3a70cca8096c89a05807252cbccd060c8d54d78e127f1697772"}, {"aliases": ["Kerbal Space Programme"], "description": "Players create their own rockets from a variety of parts and then attempt to launch them into space.", "developers": [{"id": "521816581433589784", "name": "Squad"}], "executables": [{"is_launcher": false, "name": "ksp_x64.exe", "os": "win32"}, {"is_launcher": false, "name": "ksp.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "740c9d93b022699c2cf55af48a076734", "id": "363429406376722442", "name": "Kerbal Space Program", "overlay": true, "publishers": [{"id": "521816581433589784", "name": "Squad"}], "splash": "b6bc3a8371222b0a3fe046f4178396d5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "220200", "sku": "220200"}], "type": 1, "verify_key": "4595e72e74dd98ac059160042b2ef8f55adaba87be5d75b9222420ab5fca6c61"}, {"description": "A follow up to 2013's Tomb Raider reboot. After the events of the previous game, Lara spends one year searching to explain what she saw. Her quest to explain immortality leads her to Siberia, home of a mythical city known as Kitezh.", "developers": [{"id": "521816535753555988", "name": "Crystal Dynamics, Inc."}], "executables": [{"is_launcher": false, "name": "rottr.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "780a603fe5499627dec19339d2f8c280", "id": "363429423728427008", "name": "Rise of the Tomb Raider", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}], "splash": "af221d527613743e0eacc23ae7de4285", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "391220", "sku": "391220"}], "type": 1, "verify_key": "8987e2a113214572232bb5d97da4f74243a19a52f7a01f1df1d1ec7e542c91f4"}, {"description": "Grab three other knights and storm enemy forces in this downloadable beat-em-up for the Xbox 360, PlayStation 3, and PC, complete with smoothly-drawn graphics and action RPG elements.", "developers": [{"id": "521816647678558213", "name": "The Behemoth"}], "executables": [{"is_launcher": false, "name": "castlecrashers/castle.exe", "os": "win32"}], "flags": 0, "guild_id": "195951483789901835", "hook": true, "icon": "46906f3362efc605b1235a0174b16a6d", "id": "363429462076817408", "name": "Castle Crashers", "publishers": [{"id": "521816647678558213", "name": "The Behemoth"}], "splash": "edf323e18302d944392a2baea2c76f19", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "204360", "sku": "204360"}], "type": 1, "verify_key": "6ecb4b579154782e581866c931ac03cab07c66afbaedafe22d70a57f4963a483"}, {"description": "Infestation: The New Z is an official reedition of Infestation: Survivor Stories, a zombie-apocalypse survival MMO PvP game. As its predecessor, it is set in Colorado and California with huge maps where players fight each other while trying to survive the zombie apocalypse.", "executables": [{"is_launcher": false, "name": "thenewz.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6f5c25ea059aa39cc6929c1c6f769dbc", "id": "363429491034554368", "name": "Infestation: The New Z", "publishers": [{"id": "521816717786218511", "name": "Fredaikis AB"}], "splash": "afc95d5871f1df438c2f9530038e0b16", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "555570", "sku": "555570"}], "type": 1, "verify_key": "c5c4b3f4da7a5ec195cdda8ddba55bedcae219c312233e4bfb936b501689b07a"}, {"description": "From Torn Banner Studios, creators of Chivalry: Medieval Warfare, Mirage: Arcane Warfare is a magic and melee-focused multiplayer FPS. Expected to release in 2016", "developers": [{"id": "521816579797811201", "name": "Torn Banner Studios"}], "executables": [{"is_launcher": false, "name": "tbl-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "10062841145856ac4fc73e922820f98c", "id": "363429532377677824", "name": "Mirage: Arcane Warfare", "publishers": [{"id": "521816579797811201", "name": "Torn Banner Studios"}], "splash": "51befdf220f9df3c3abace8593b04d51", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "368420", "sku": "368420"}], "type": 1, "verify_key": "385bf15e57cf2bd17a5561172e62de2d20b18de1e0f494f76028bfe8fc43a14a"}, {"description": "Fistful of Frags is a multiplayer wild-west themed modification for Half Life 2. The game features various guns from the time period. The game has gone through Steam Greenlight and as of May 9, 2014, has become a standalone product on Steam.", "developers": [{"id": "521816702753701899", "name": "Fistful of Frags Team"}], "executables": [{"is_launcher": false, "name": "fistful of frags/sdk/hl2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "61e7b86e196a9028bda2490317093f88", "id": "363429654540845056", "name": "Fistful of Frags", "splash": "77bbcc8cbe17b4a0bb14106fe683c52d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "265630", "sku": "265630"}], "type": 1, "verify_key": "62ea6859d69b46dd666daed68e72db50f69e262d9958ba30c353a65163ab0005"}, {"aliases": ["STAR WARS Battlefront II", "STAR WARS\u2122 Battlefront\u2122 II", "Star Wars Battlefront II"], "description": "EA's second Star Wars Battlefront features cross-era characters and locations from the original, prequel and sequel Star Wars movie trilogies. It also includes multiplayer character classes and a story-driven single-player campaign.", "developers": [{"id": "521816575481872391", "name": "DICE"}, {"id": "521816761948045361", "name": "Criterion Games"}], "executables": [{"is_launcher": false, "name": "starwarsbattlefrontii.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "980bbb4bf6cd9f7d2f087d9bc24a6f7b", "id": "363429717698936852", "name": "STAR WARS\u2122 Battlefront\u2122 II", "overlay": true, "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "splash": "db08c8f9d50580b90cc879702824b6ab", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "6060", "sku": "6060"}], "type": 1, "verify_key": "284ffd1c7e483e7fda172ce0246d6dfbb9b9bc79efdf5b4f79afe7dccdba3acb"}, {"description": "A 2D co-op shooter-platformer focused on boss battles. It is known for its unique art style, which imitates the more surreal cartoons of the 1930s.", "developers": [{"id": "521816621271220236", "name": "Studio MDHR"}], "executables": [{"is_launcher": false, "name": "cuphead.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e473174ecd2bf29d56541591ed2d8c31", "id": "363430002181668864", "name": "Cuphead", "publishers": [{"id": "521816621271220236", "name": "Studio MDHR"}], "splash": "a2e3cc78276e76c5b36d7187a93d5b1e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "268910", "sku": "268910"}], "type": 1, "verify_key": "443f6529e1200e5b970a0e78a65130ab7660856fbc8573817109125e4a757e48"}, {"description": "The Naruto series jumps to eighth generation consoles with the fourth sequential installment of the Ultimate Ninja Storm series.", "developers": [{"id": "521816579797811203", "name": "CyberConnect2 Co., Ltd."}], "executables": [{"is_launcher": false, "name": "nsuns4.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a2a5bf84a9fc4b4c88a9f1c0e043c5c0", "id": "363430045970071552", "name": "NARUTO SHIPPUDEN: Ultimate Ninja STORM 4", "publishers": [{"id": "521816537653444610", "name": "Bandai Namco Entertainment"}], "splash": "44e81aebf2522ae8e6dbb795c9d4a913", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "349040", "sku": "349040"}], "type": 1, "verify_key": "512c0d386d3616544a72f38dca9f9a9cf0fb7fd9e3ce17e0b44f9971c581426a"}, {"description": "TERA: The Exiled Realm of Arborea is a free-to-play, action-style MMORPG, developed by Bluehole Studios in South Korea using Unreal Engine 3. It was localized for English audiences by En Masse Entertainment of Seattle.", "developers": [{"id": "521816684407947267", "name": "Bluehole Studio"}], "executables": [{"is_launcher": false, "name": "tera.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "52a86dba4ccc0581fbb35aab2eade6c1", "id": "363430088521547786", "name": "TERA", "publishers": [{"id": "521816616028078094", "name": "En Masse Entertainment"}], "splash": "0d8d58dd019739d7e901e8bbe5991f8c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "323370", "sku": "323370"}], "type": 1, "verify_key": "4c1b3b002e514e77745547dfc92fe3e90cf8243e250a3559753c46c94c085102"}, {"description": "", "developers": [{"id": "521816541323329560", "name": "Deep Silver Volition, Inc."}], "executables": [{"is_launcher": false, "name": "saintsrowiv.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3d60d96bf3cfdd3c8c697ea87fb2224a", "id": "363430103306338304", "name": "Saints Row IV", "primary_sku_id": "471029343934742568", "publishers": [{"id": "521816524403638274", "name": "Deep Silver"}], "slug": "saints-row-iv", "splash": "665c83e804e4342188d43e5a641c0677", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "206420", "sku": "206420"}, {"distributor": "discord", "id": "471029343934742568", "sku": "471029343934742568"}], "type": 1, "verify_key": "83be95678829c85bcc3b01fe9e7373f2c21a09b2ea93b1bf6d07ac5aa7b3c8eb"}, {"description": "Absolver is an online multiplayer combat game where players are placed behind the mask of a Prospect under control of the Guides, the new rulers of the fallen Adal Empire, who will determine your worth in joining their elite corps of Absolvers.", "developers": [{"id": "521816744659124244", "name": "Sloclap"}], "executables": [{"is_launcher": false, "name": "absolver-win64-shipping.exe", "os": "win32"}], "flags": 0, "guild_id": "284619971735322624", "hook": true, "icon": "e3c14f9a6f3a8a756fba91f9bdb72f1d", "id": "363430239134547978", "name": "Absolver", "publishers": [{"id": "521816510730338331", "name": "Devolver Digital"}], "splash": "dfe7fece821b15ad21a60548c8ddaa10", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "473690", "sku": "473690"}], "type": 1, "verify_key": "fd1438db7d9487aacc219f9f7b29f496b0b3dc97ef23a300b891a6c4c16e593b"}, {"description": "Creative Assembly's strategy series takes on Games Workshop's WARHAMMER.", "developers": [{"id": "521816720503996437", "name": "The Creative Assembly"}], "executables": [{"is_launcher": false, "name": "total war warhammer/launcher/launcher.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8c837f452be593bc3aa5d6268a272136", "id": "363430260810973194", "name": "Total War: WARHAMMER", "publishers": [{"id": "521816507676885010", "name": "Sega"}], "splash": "b894a4f7a02de11d153fc31357bb51fa", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "364360", "sku": "364360"}], "type": 1, "verify_key": "045d4aa8b2c16a250f15be3df9ab0fb153fc40235e139b94598c67c6105fd0de"}, {"description": "A building game about a stranded mechanic on a farming moon.", "developers": [{"id": "521816623552921604", "name": "Axolot Games"}], "executables": [{"is_launcher": false, "name": "scrapmechanic.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "19d8dfabfa59721d295b43fe5b287688", "id": "363430304746176512", "name": "Scrap Mechanic", "publishers": [{"id": "521816623552921604", "name": "Axolot Games"}], "splash": "97eb9d2bf77aeccab04bd477d7a19a5d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "387990", "sku": "387990"}], "type": 1, "verify_key": "86aa89f1f4eff327facfb3b858ce61beb1c43405b6264594a2968b9ea40f1540"}, {"description": "A space colony simulation from Klei Entertainment.", "developers": [{"id": "521816520817639454", "name": "Klei Entertainment Inc."}], "executables": [{"is_launcher": false, "name": "oxygennotincluded.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1037d19e54f972bed70089c065ff4664", "id": "363430471322828800", "name": "Oxygen Not Included", "publishers": [{"id": "521816520817639454", "name": "Klei Entertainment Inc."}], "splash": "2c9a9cdcac194a2e4d35a09805df12d0", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "457140", "sku": "457140"}], "type": 1, "verify_key": "080bf4fc0a2c324925c722da97bd0c551bd1a1fd5eb9aba8bdc9f7c1f44677cc"}, {"description": "Take on the role of Gordon Freeman as he escapes the disastrous aftermath of an experiment gone wrong in the Black Mesa Research Facility.", "developers": [{"id": "521816530393104394", "name": "Valve Corporation"}], "executables": [{"is_launcher": false, "name": "hl.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "16fa1dfcd0282e4d13c97c928f163b7d", "id": "363430548028522496", "name": "Half-Life", "publishers": [{"id": "521816549666062336", "name": "Sierra"}], "splash": "149210e7069943518df545565dbb8f7f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "70", "sku": "70"}], "type": 1, "verify_key": "88edcb0fe3c3e00d20fe7b574dabac9e83582ec72282449914d8d64174f72fdc"}, {"description": "A procedurally generated roguelike action game developed by Vlambeer. After creating a prototype called Wasteland Kings for Mojam 2, Vlambeer took the prototype and renamed it Nuclear Throne.", "developers": [{"id": "521816521249521688", "name": "Vlambeer"}], "executables": [{"is_launcher": false, "name": "nuclearthrone.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b3253f21eccdf354cba8bc08c2447e38", "id": "363430560942653440", "name": "Nuclear Throne", "publishers": [{"id": "521816521249521688", "name": "Vlambeer"}], "splash": "7bdc3e8a1f66edb91711a0e636364604", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "242680", "sku": "242680"}], "type": 1, "verify_key": "785d7825ba2d7aff3c15fa88b516d5762de277eb918b28bba65cbae873906fa2"}, {"description": "A free co-operative zombie survival experience which started out as a Half-Life 2 mod that eventually turned to its own stand-alone game.", "developers": [{"id": "521816785197203457", "name": "No More Room in Hell Team"}], "executables": [{"is_launcher": false, "name": "no more room in hell/sdk/hl2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "307b48a4afd2b8274c3c9e49bdee2d91", "id": "363430673694064640", "name": "No More Room in Hell", "publishers": [{"id": "521816785197203456", "name": "Lever Games "}], "splash": "9e5b6ad751b8b6534d42896cfe9cfe0f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "224260", "sku": "224260"}], "type": 1, "verify_key": "292fc2dfd5076b7fd6021b372964f0b52dadef5784602add39c718c751650e6a"}, {"aliases": ["The Sims(TM) 3"], "description": "Electronic Arts follows up to the hugely successful Sims 2 with an improved character creation system, an open neighborhood, and a greater focus on character development.", "developers": [{"id": "521816577876951044", "name": "Maxis Software"}], "executables": [{"is_launcher": false, "name": "ts3.exe", "os": "win32"}, {"is_launcher": false, "name": "ts3w.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5c7304472b823a78aecef84f80c0e772", "id": "363430739456425994", "name": "The Sims 3", "publishers": [{"id": "521816757548351498", "name": "The Sims Studio"}, {"id": "521816499464306692", "name": "Electronic Arts"}], "splash": "52ca976e3e685088f20af52fac6ae14a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "47890", "sku": "47890"}], "type": 1, "verify_key": "3c91bb53a208c39b7b747a3e2b35e1a8881a88615f5348a080e3f1c99978ac6e"}, {"aliases": ["Divinity - Original Sin"], "description": "Divinity: Original Sin is a top-down turn-based RPG developed by Larian Studios. It introduces new elements to the franchise, such as co-op gameplay and decision-making as well as a more interactive world.", "developers": [{"id": "521816603671920661", "name": "Larian Studios"}], "executables": [{"is_launcher": false, "name": "divinity original sin/bin/eocapp.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "494b73dae737e317700a00b5616b43cd", "id": "363430797257998356", "name": "Divinity: Original Sin Enhanced Edition", "publishers": [{"id": "521816603671920661", "name": "Larian Studios"}], "splash": "ec70308e0ab81784453c52861b72312e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "373420", "sku": "373420"}], "type": 1, "verify_key": "44c31130d69e0540316f557e3b64a3403563a641510a3f6d77e1192ff1d39fab"}, {"description": "Ravenfield is a singleplayer battlefield style game. It started out as an experiment with ragdolls and AI, and will remain a slightly experimental, for-fun game project.", "developers": [{"id": "521816648278212629", "name": "SteelRaven7"}], "executables": [{"is_launcher": false, "name": "ravenfield.exe", "os": "win32"}], "flags": 0, "guild_id": "246612905762619393", "hook": true, "icon": "9f2335fcafc051439d2618d8f56c2e14", "id": "363430881811234816", "name": "Ravenfield", "publishers": [{"id": "521816648278212629", "name": "SteelRaven7"}], "splash": "a408689f86446963d5f650c18e6f54d8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "636480", "sku": "636480"}], "type": 1, "verify_key": "d29b55c7a8c510923a56665671361051394a1ad9a222e2ac615036cc4de080d3"}, {"aliases": ["Life Is Strange", "Life is Strange\u2122"], "description": "An episodic adventure game based around time manipulation from Remember Me developers DONTNOD.", "developers": [{"id": "521816549057626131", "name": "DONTNOD Entertainment"}], "executables": [{"is_launcher": false, "name": "lifeisstrange.exe", "os": "win32"}], "flags": 0, "guild_id": "375619532435357701", "hook": true, "icon": "c4514b77e998b3d60f3533096afc7676", "id": "363430904867192832", "name": "Life is Strange", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}], "splash": "ab545940b11665d47dc85cc511468c5a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "319630", "sku": "319630"}], "type": 1, "verify_key": "8fcd04e93430a8e5f0d8fead0d7ddb09fc716fed333ce023851d3be1892c42bd"}, {"description": "", "developers": [{"id": "521816745686859776", "name": "Team Cherry"}], "executables": [{"is_launcher": false, "name": "hollow_knight.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "17f9795eddb4cb1ec72a4154245206d0", "id": "363431029484027904", "name": "Hollow Knight", "primary_sku_id": "474762737331732495", "publishers": [{"id": "521816745686859776", "name": "Team Cherry"}], "slug": "hollow-knight", "splash": "a2a790eb5754e91c9520b9a9780d3996", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "367520", "sku": "367520"}, {"distributor": "discord", "id": "474762737331732495", "sku": "474762737331732495"}], "type": 1, "verify_key": "702c5dfba45a6749d4ced8a990c914a4e91c1c32fcc9e29bdc5659088ad8f534"}, {"aliases": ["Saints Row the Third"], "description": "", "developers": [{"id": "521816541323329560", "name": "Deep Silver Volition, Inc."}], "executables": [{"is_launcher": false, "name": "saintsrowthethird_dx11.exe", "os": "win32"}, {"is_launcher": false, "name": "saintsrowthethird.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fde7183e3ddd8e0ff9c5a9350d56846c", "id": "363431107527704576", "name": "Saints Row: The Third", "primary_sku_id": "471028853888909312", "publishers": [{"id": "521816550596935692", "name": "THQ"}], "slug": "saints-row-the-third", "splash": "b398528e79fece8fb8dfc2150919b81a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "55230", "sku": "55230"}, {"distributor": "discord", "id": "471028853888909312", "sku": "471028853888909312"}], "type": 1, "verify_key": "5f1ddeccc00586448867f210962c169773cd54ced8c3ef1a22d2e2ba469ded96"}, {"description": "A theme park simulator from Frontier Developments, the creators of Roller Coaster Tycoon 3.", "developers": [{"id": "521816604175106063", "name": "Frontier Developments Ltd."}], "executables": [{"is_launcher": false, "name": "planetcoaster.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9d44d6126d44f0f6490870ff87e08ed2", "id": "363431197960962049", "name": "Planet Coaster", "publishers": [{"id": "521816604175106063", "name": "Frontier Developments Ltd."}], "splash": "7c612e8a421f16c4d4ec8b2a35bfacea", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "493340", "sku": "493340"}], "type": 1, "verify_key": "ec933911b64a1d59f78042f8821a7cdc53fe941d2be81d547201b55d1d45f7d4"}, {"description": "Set fifteen years after the end of the first game, Dishonored 2 allows players to continue the story as either original protagonist Corvo Attano or his daughter and apprentice, the now-deposed Empress Emily Kaldwin.", "developers": [{"id": "521816500974256128", "name": "Arkane Studios SA"}], "executables": [{"is_launcher": false, "name": "dishonored2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "48baef37dbbb52d7a56c551be070397f", "id": "363431216000532480", "name": "Dishonored 2", "publishers": [{"id": "521816500508819469", "name": "Bethesda Softworks"}], "splash": "ad4909a4b673367082f0d1facee51f02", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "403640", "sku": "403640"}], "type": 1, "verify_key": "0312c0672924c0a38a151c54a2f3859f8bd64fbf80bd24a2e2fa81c70eedec5e"}, {"description": "Stay alive by leaping from moving truck to moving truck in this breakneck 3D platformer.", "developers": [{"id": "521816737738653727", "name": "Landfall Games"}], "executables": [{"is_launcher": false, "name": "clustertruck.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "06ee1c6884ee5113d30c31074cda32b3", "id": "363431307629559808", "name": "Clustertruck", "publishers": [{"id": "521816524952961034", "name": "tinyBuild"}], "splash": "75787d9cba10bdbdbda467413382359f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "397950", "sku": "397950"}], "type": 1, "verify_key": "287144164e534f7b2171eb737d99b46eb72a3e3b12b56ef1682e2ec0db24c4b8"}, {"description": "Click on cute girls.", "developers": [{"id": "521816603671920663", "name": "Sad Panda Studios"}], "executables": [{"is_launcher": false, "name": "crushcrush.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "189a8107521edcf2e5d06cd74cb63046", "id": "363431341599096842", "name": "Crush Crush", "splash": "2557b170eb62878253669109d1fc909b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "459820", "sku": "459820"}], "type": 1, "verify_key": "da9f3cc823d097b2950d9fdbb3145fcbb8f0b84d200dfe0686b05062b618132d"}, {"aliases": ["Battlefield 3: Venice Unleashed", "Battlefield 3\u2122"], "description": "Battlefield 3 is DICE's third numerical installment in the Battlefield franchise. It features a single player and co-operative campaign, as well as an extensive multiplayer component.", "developers": [{"id": "521816575481872391", "name": "DICE"}], "executables": [{"is_launcher": false, "name": "bf3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "42d68cfbeda061e6a8e9a998cba5d6c9", "id": "363431403469144064", "name": "Battlefield 3", "overlay": true, "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "splash": "b64002f7cc8e503f7c1f871b9f862468", "summary": "", "third_party_skus": [{"distributor": "origin", "id": null, "sku": null}], "type": 1, "verify_key": "2c92cb4520e904452df3fd20b3f8dfea55f928cf2c92fdd1cf0b536c0d3810ca"}, {"description": "World War 2 Online: Battleground Europe is a Massively Multiplayer Online Game (MMOG) that features first person perspective for all units. Weapons behave realistically and are based on their real life capabilities. Battles take place on land, in the air and on the sea.", "developers": [{"id": "521816756440924161", "name": "Cornered Rat Software"}], "executables": [{"is_launcher": false, "name": "wwiionline/ww2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2e0e32655a450ed85afb9d492decc210", "id": "363431447119527956", "name": "World War II Online", "publishers": [{"id": "521816756440924160", "name": "Matrix Games"}], "splash": "bc428e6ac2efaab4c05f25f2be523973", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "251950", "sku": "251950"}], "type": 1, "verify_key": "08e5a6d735939f6055dd8e65fa37ef7f21b13db00d583120dd353db5d1ca9fcd"}, {"description": "Take command of the Russian forces and out-think the Nazis all the way to Berlin.", "developers": [{"id": "521816593798397970", "name": "Relic Entertainment"}], "executables": [{"is_launcher": false, "name": "reliccoh2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d70edd0349d6a4b5a30ce3e6171539af", "id": "363431541336047616", "name": "Company of Heroes 2", "overlay": true, "publishers": [{"id": "521816507676885010", "name": "Sega"}], "splash": "d71e66c92958b0cac007bbdcc0da15b3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "231430", "sku": "231430"}], "type": 1, "verify_key": "d668f2e38a2468b28fe23b3c0d0ff4fb4cf4a49ecedc1ca50b9da91c83f63c6f"}, {"description": "Realm Grinder", "executables": [{"is_launcher": false, "name": "realmgrinderdesktop.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "04410c8845f4630d91b57e46c907757f", "id": "363431556301193216", "name": "Realm Grinder", "splash": "8b1cbde320b99fe3b36c91e2fde26a3d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "610080", "sku": "610080"}], "type": 1, "verify_key": "9e990ed3e30dec3cedc4482f6c431182c81ed41d07f7a4b697cf5cd45960df9d"}, {"aliases": ["Project Cars"], "description": "Project CARS (short for Community Assisted Racing Simulator) is a community funded racing simulator developed by Slightly Mad Studios, the developer of the Need for Speed: Shift series.", "developers": [{"id": "521816652745277463", "name": "Slightly Mad Studios"}], "executables": [{"is_launcher": false, "name": "pcars64.exe", "os": "win32"}, {"is_launcher": false, "name": "pcars.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "05ee81affd6196ff255981c1a90b6e99", "id": "363431703504748544", "name": "Project CARS", "publishers": [{"id": "521816652745277463", "name": "Slightly Mad Studios"}], "splash": "680d9ad9fc8b40de6d66c470e0979c16", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "234630", "sku": "234630"}], "type": 1, "verify_key": "aa2e5103469fa6153a5776826589ce1aeb08574527a18872bd27dd63e6fdfcc0"}, {"description": "", "executables": [{"is_launcher": false, "name": "half_life_caged/hl.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "062a07b757fdea1ee2d131fcd1740a5d", "id": "363431787214536704", "name": "Half-Life: C.A.G.E.D.", "splash": "411c502d6fcafb9e41a3b29b0ac70ce0", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "679990", "sku": "679990"}], "type": 1, "verify_key": "a57cfee65f130ca2db8c3b37395dca01fbb5fead07c1a8600f289ac0377230c0"}, {"description": "The fourth instalment of the series (Guitar Hero: Rock the 80's being the 3rd) that single handedly revitalized the music-game genre, Guitar Hero III retains the core gameplay of its predecessors while delivering a more challenging experience.", "developers": [{"id": "521816545433878550", "name": "Neversoft Entertainment"}], "executables": [{"is_launcher": false, "name": "gh3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "91cebfba3545dfd91ec47863d1af2e73", "id": "363431817312731136", "name": "Guitar Hero III: Legends of Rock", "publishers": [{"id": "521816501544550404", "name": "Activision"}], "splash": "27287148cb9d869aa9a9dcde35b6262b", "summary": "", "type": 1, "verify_key": "a777aed12260a394d881b7f9f220c62c685b8690a4ed680a5107ed5e27da9249"}, {"aliases": ["Roblox"], "description": "Roblox is a free Massive Multiplayer Online Game, where you play in user-created worlds with blocks and physics.", "developers": [{"id": "521816731715502090", "name": "Roblox Corporation"}], "executables": [{"is_launcher": false, "name": "robloxplayerbeta.exe", "os": "win32"}, {"is_launcher": false, "name": "roblox.exe", "os": "win32"}], "flags": 0, "guild_id": "150074202727251969", "hook": true, "icon": "f2b60e350a2097289b3b0b877495e55f", "id": "363445589247131668", "name": "Roblox", "publishers": [{"id": "521816731715502090", "name": "Roblox Corporation"}], "splash": "e970e33dd647f87dc87f4dc4b28f4627", "summary": "", "type": 1, "verify_key": "80a23c75a38f156e1fd650fd046334916a91e69470f9efae2703186e53958cd4"}, {"description": "The follow-up to Vice City takes the Grand Theft Auto series' free-roaming violence into 1992 and the fictional state of San Andreas as several criminal gangs wage war for control of the streets.", "developers": [{"id": "521816560537567261", "name": "Rockstar North"}], "executables": [{"is_launcher": false, "name": "gta_sa.exe", "os": "win32"}, {"is_launcher": false, "name": "gta-sa.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "58c222207d90c346aa4590a1d8de0a2f", "id": "363447565905166336", "name": "Grand Theft Auto San Andreas", "publishers": [{"id": "521816560537567257", "name": "Rockstar Games"}], "splash": "99195e630e7865c4332d2584d03d5876", "summary": "", "type": 1, "verify_key": "f8c569de43d485e8d0faf06140331b8c36af115cde07739be985629a1cc3314b"}, {"cover_image": "7b898b8292930802987a0b36199bd01a", "description": "", "developers": [{"id": "521816586101850132", "name": "Overkill Software"}], "executables": [{"is_launcher": false, "name": "payday2_win32_release.exe", "os": "win32"}], "flags": 0, "guild_id": "233510815645302785", "hook": true, "icon": "ee8b5591bed0d4a2664ca334c0d4d2b9", "id": "364785249202208768", "name": "PAYDAY 2", "overlay": true, "publishers": [{"id": "521816570520141824", "name": "505 Games"}], "splash": "3a1f6e0e4d36f8226f14a7a0e4ead272", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "218620", "sku": "218620"}], "type": 1, "verify_key": "1b6ad6e65fb4da2eb7b680197dbcecf0b96dd3ab6c95415cdac3e261845bb43b"}, {"cover_image": "d78f6bf948d8744eaed92baf9bc167f2", "description": "Ballistic Overkill description", "developers": [{"id": "521816767941836800", "name": "Aquiris Game Studio"}], "executables": [{"is_launcher": false, "name": "ballisticoverkill.exe", "os": "win32"}], "flags": 0, "guild_id": "210846554917961730", "hook": true, "icon": "4a85261c527b1002b26050a3710073b0", "id": "365200071941292033", "name": "Ballistic Overkill", "publishers": [{"id": "521816767941836800", "name": "Aquiris Game Studio"}], "splash": "1bb9d6747a03862ac42d660df9d00239", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "296300", "sku": "296300"}], "type": 1, "verify_key": "9f94612b82b3463ce6ccfcc8c904c7b6fb815db0b04f2861d367ff7ceec19910"}, {"aliases": ["Call of Duty: WWII", "Call of Duty: WWII - Multiplayer"], "cover_image": "4bbaaf201df6fb21d396e9f2403210c6", "description": "Call of Duty\u00ae: WWII by Activision Publishing, Inc.", "developers": [{"id": "521816559505637394", "name": "Sledgehammer Games"}], "executables": [{"is_launcher": false, "name": "call of duty wwii/s2_mp64_ship.exe", "os": "win32"}, {"is_launcher": false, "name": "call of duty wwii/s2_sp64_ship.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3a98c27c15aa01b85576509c7038990c", "id": "365569601993572352", "name": "Call of Duty\u00ae: WWII", "publishers": [{"id": "521816501544550404", "name": "Activision"}, {"id": "521816559505637394", "name": "Sledgehammer Games"}], "splash": "87ca1917cfbfa6cd85326c68671b9287", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "476600", "sku": "476600"}, {"distributor": "steam", "id": "696790", "sku": "696790"}, {"distributor": "steam", "id": "476620", "sku": "476620"}], "type": 1, "verify_key": "f8403ff1e9b8fe3afd532a4a3ec588316410f7a6e0899c2149329619e8d0ed78"}, {"cover_image": "b76db81b683527961ee1432c24a02774", "description": "click the circles! to the beat!", "developers": [{"id": "521816554212687883", "name": "Dean Herbert"}], "executables": [{"is_launcher": false, "name": "osu!.app", "os": "darwin"}, {"is_launcher": false, "name": "osu!.exe", "os": "win32"}], "flags": 0, "guild_id": "188630481301012481", "hook": true, "icon": "ea86f6c52576847a7cb81f1c1faa18a3", "id": "367827983903490050", "name": "osu!", "overlay": true, "primary_sku_id": "367827983903490050", "publishers": [{"id": "521816554212687882", "name": "ppy Pty Ltd"}], "slug": "osu", "splash": "8029278a3fab0e30108bd335f26ab8a0", "summary": "", "type": 1, "verify_key": "abc0dcbf6dbb4d449ad89da9bdec270a12b8a427099ef2609be2d3fdae150b29"}, {"description": "The full-fledged follow-up to Destiny, streamlining much of the previous game's mechanics while featuring larger worlds and new abilities.", "developers": [{"id": "521816529453449247", "name": "Bungie"}], "executables": [{"is_launcher": false, "name": "destiny2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "79744dd00a9bd47c06fa1078e6c705fe", "id": "372438022647578634", "name": "Destiny 2", "publishers": [{"id": "521816529453449247", "name": "Bungie"}], "splash": "2d646423539ce9fa89f06a5c1ae8cfcc", "summary": "", "third_party_skus": [{"distributor": "battlenet", "id": null, "sku": null}], "type": 1, "verify_key": "794b1c4bb1b74e20dd619d1980b3ce15d02c344582c1ca95afb895322af824fc"}, {"description": "", "developers": [{"id": "521816509673242635", "name": "Runic Games"}], "executables": [{"is_launcher": false, "name": "hob.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5b49e6e578e73d674b432c31db0f8027", "id": "372440317493903380", "name": "Hob", "primary_sku_id": "491747177518071818", "publishers": [{"id": "521816509673242635", "name": "Runic Games"}], "slug": "hob", "splash": "a3475a84262ab066f46b6233fbfc7d5f", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "491747177518071818", "sku": "491747177518071818"}, {"distributor": "steam", "id": "404680", "sku": "404680"}], "type": 1, "verify_key": "e6d49c5e67f90272e18f70fb223f9bd5dde33a09f1e29267b85430b302fcc62d"}, {"description": "A critically acclaimed role-playing game developed by Black Isle Studios and Tim Cain in 1997, Fallout established itself as a prominent post-apocalyptic universe with a dark sense of humor.", "developers": [{"id": "521816563456802817", "name": "Black Isle Studios"}], "executables": [{"is_launcher": false, "name": "falloutw.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e61f946aecd1f5d1948e60697cbf7d08", "id": "372825995084038144", "name": "Fallout", "publishers": [{"id": "521816563024920612", "name": "Interplay Entertainment Corp."}], "splash": "53550094790ca172ceac3a624c6fd3e7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "38400", "sku": "38400"}], "type": 1, "verify_key": "92060987d905bbb1609352ae0ff2f1fe99d5ef943da1b11b71d911abe9c46097"}, {"aliases": ["Middle-earth\u2122: Shadow of War\u2122"], "description": "", "developers": [{"id": "521816711532511245", "name": "Monolith Productions, Inc."}], "executables": [{"is_launcher": false, "name": "shadowofwar.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "68f4685213d45ed2a0f380ccb027eb93", "id": "372826898465685519", "name": "Middle-earth: Shadow of War", "primary_sku_id": "496464146553110540", "publishers": [{"id": "521816707132555287", "name": "Monolith Productions"}, {"id": "521816499464306690", "name": "WB Games"}], "slug": "middle-earth-shadow-of-war", "splash": "8b2bb826535bcc3b16dffad61357bc4f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "356190", "sku": "356190"}, {"distributor": "discord", "id": "496464146553110540", "sku": "496464146553110540"}], "type": 1, "verify_key": "796d93e88000ed7e3a30765dd7fd557ab018b3bb6d113e4451fade11cf430c71"}, {"cover_image": "43ee6a5a76785337d380b9d6f45ce31c", "description": "Descenders Discord App", "developers": [{"id": "521816688073637898", "name": "RageSquid"}], "executables": [{"is_launcher": false, "name": "descenders.exe", "os": "win32"}], "flags": 0, "guild_id": "336514640202956800", "hook": true, "icon": "a4e443ee63b2a247a413da82ace6dbdf", "id": "375540160571637760", "name": "Descenders", "primary_sku_id": "489420695454089217", "publishers": [{"id": "521816652745277461", "name": "No More Robots"}], "slug": "descenders", "splash": "a1f005782e332c925c4c3fee4bf25295", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "489420695454089217", "sku": "489420695454089217"}, {"distributor": "steam", "id": "681280", "sku": "681280"}], "type": 1, "verify_key": "c8595b05bd749284d3ec2f8efe28b5f0fcd35ae8075179126fac9af7d0dc63c0"}, {"description": "Outnumbered and outgunned by high-tech Nazi forces, B.J. Blazkowicz returns to fight for an underground resistance movement in an alternate-historical 1960 where the Nazis won World War II and achieved global dominance.", "developers": [{"id": "521816549666062338", "name": "MachineGames"}], "executables": [{"is_launcher": false, "name": "wolfneworder_x64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "171b5e8a353328351345dd6f77c84027", "id": "376171871873400832", "name": "Wolfenstein: The New Order", "publishers": [{"id": "521816500508819469", "name": "Bethesda Softworks"}], "splash": "35b8040dc89e64a386113430e713c10c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "201810", "sku": "201810"}], "type": 1, "verify_key": "b81b08e81048d19268a67470bb1e0891a9d4f7e647ac4086d75930eaf2be0e02"}, {"description": "Day of Infamy is a tactical WW2 shooter from the creators of Insurgency.", "developers": [{"id": "521816505688522756", "name": "New World Interactive"}], "executables": [{"is_launcher": false, "name": "dayofinfamy_be.exe", "os": "win32"}, {"is_launcher": false, "name": "dayofinfamy.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "93bdbcbb329e92c1a8449e13b1c1cd05", "id": "376180187806695462", "name": "Day of Infamy", "publishers": [{"id": "521816505688522756", "name": "New World Interactive"}], "splash": "5c72d0711b3e8bcc35d1b539046772d3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "447820", "sku": "447820"}], "type": 1, "verify_key": "b3bd2131d5f23172a4e6996f9e8dbf1b3483a583bf7b498414e9ef1ef92efd54"}, {"description": "", "developers": [{"id": "521816555093229580", "name": "Automaton"}], "executables": [{"is_launcher": false, "name": "deceit.exe", "os": "win32"}], "flags": 0, "guild_id": "234674175699058699", "hook": true, "icon": "2c76bb6a1f55bc9a3b70890c27c390e2", "id": "376180386801123358", "name": "Deceit", "publishers": [{"id": "521816555093229580", "name": "Automaton"}], "splash": "a7651c13637e529c971b6071ef461a23", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "466240", "sku": "466240"}], "type": 1, "verify_key": "5c29d14b1ee64f9fb024c3f046a55f25c5f7a8df3c5f5df88d78dfef57136e40"}, {"aliases": ["DarkestDungeon"], "description": "A dungeon crawler that seeks to weigh the psychological effects of delving into hellish monster abodes, not just the damage to HP. Team chemistry means more than just skill synergy.", "developers": [{"id": "521816606901534720", "name": "Red Hook Studios"}], "executables": [{"is_launcher": false, "name": "darkest.exe", "os": "win32"}], "flags": 0, "guild_id": "430455493358649355", "hook": true, "icon": "5cc0dece8f3a151b90a9feb5b95613fa", "id": "376180518749995028", "name": "Darkest Dungeon", "overlay": true, "publishers": [{"id": "521816606901534720", "name": "Red Hook Studios"}], "splash": "6ffd32f00bacaa079e8c461252db8b90", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "262060", "sku": "262060"}], "type": 1, "verify_key": "a663f934ef6cdbf8576f3708587d03df6374b98a04895ffccb472dcd2a8dcb74"}, {"description": "\"Bendy and the Ink Machine\" is a first person puzzle action horror game that begins in the far days past of animation and ends in a very dark future.", "developers": [{"id": "521816555584225282", "name": "TheMeatly Games"}], "executables": [{"is_launcher": false, "name": "batim.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "bc3b317c8531e09e20038b7f0808b27e", "id": "376180724291731472", "name": "Bendy and the Ink Machine", "publishers": [{"id": "521816555584225282", "name": "TheMeatly Games"}], "splash": "139e3ae77dd4f2088556880f43769af4", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "622650", "sku": "622650"}], "type": 1, "verify_key": "3e7435028cbf7b31bb02919918b9eccbb5accee0bf2780a1d5471960df48ede5"}, {"aliases": ["A Hat in Time"], "description": "A third-person 3D platformer developed by Gears For Breakfast.", "developers": [{"id": "521816804323098627", "name": "Gears for Breakfast"}], "executables": [{"is_launcher": false, "name": "hatintimegame.exe", "os": "win32"}], "flags": 0, "guild_id": "329729477930123265", "hook": true, "icon": "bc078584af9b1f3fa29b981d55ba30b7", "id": "376180889010307072", "name": "A Hat in Time", "publishers": [{"id": "521816804323098627", "name": "Gears for Breakfast"}], "splash": "d231b54266384dca60ddeaf529cb0be9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "253230", "sku": "253230"}], "type": 1, "verify_key": "ce0075f12f4ff89869c7f32ac64f62e33a6abb88a1aba778479deffaff8d4734"}, {"description": "Besiege is a physics based building game in which you construct medieval siege engines and lay waste to immense fortresses and peaceful hamlets.", "developers": [{"id": "521816660584169473", "name": "Spiderling Studios"}], "executables": [{"is_launcher": false, "name": "besiege.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "bdf508d4e0c809944dc6c29f4f82698f", "id": "376181155868966912", "name": "Besiege", "publishers": [{"id": "521816660584169473", "name": "Spiderling Studios"}], "splash": "4129ed095c9f7bbe59a26c35499f22f8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "346010", "sku": "346010"}], "type": 1, "verify_key": "ad72c5d4cd4d514654f0a9d386f67c639f5a1bfc07fcabd70aed7e507d5ee6cc"}, {"description": "A prequel to the initial Life is Strange game, focused on Chloe's life.", "developers": [{"id": "521816589570408448", "name": "Deck Nine Games"}], "executables": [{"is_launcher": false, "name": "life is strange - before the storm.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fffa2c776730fd66be3af1755ceaeafe", "id": "376181248596508672", "name": "Life is Strange: Before the Storm", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}], "splash": "6e7822a8038d56c686d13efa5beba060", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "554620", "sku": "554620"}], "type": 1, "verify_key": "ab9feee4074b125d483d1efb2ea80ecfa457db73aec4e60ad8de0be974f78228"}, {"description": "Cartoony free to play real time strategy game for PlayStation platforms.", "developers": [{"id": "521816525410402313", "name": "Valkyrie Entertainment"}], "executables": [{"is_launcher": false, "name": "guns up.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c46583a8d85c05ad0e2c5bc4ae8dd64d", "id": "376181312890863616", "name": "GUNS UP!", "publishers": [{"id": "521816525410402312", "name": "Sony Interactive Entertainment America"}], "splash": "1ec232a9a707627281fc5fa8f355d481", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "446150", "sku": "446150"}], "type": 1, "verify_key": "ba68249f0711d6899ce8cc13efa08024367e22b8757956b06ca82d54dcace611"}, {"bot_public": false, "bot_require_code_grant": false, "cover_image": "7635391528d2dfb957bad37e2558f9eb", "description": "A hide-and-seek shooter in the dark where light is your enemy, as 4 players compete in a deathmatch to be the best!", "developers": [{"id": "570456043440570378", "name": "Mild Beast"}], "flags": 0, "guild_id": "378297822728028161", "hook": true, "icon": "7635391528d2dfb957bad37e2558f9eb", "id": "379732021385232385", "name": "AT SUNDOWN: SitD", "primary_sku_id": "487031053454802946", "publishers": [{"id": "521816509111336966", "name": "Versus Evil"}], "slug": "at-sundown-sitd", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "487031053454802946", "sku": "487031053454802946"}], "type": 1, "verify_key": "63fd304841798954601774b07bec8bc9b617de71d2d11b640c3a9da97ea7b5b8"}, {"bot_public": true, "bot_require_code_grant": false, "cover_image": "17bae2c6f31fcebbbac09b7a569fc0b9", "description": "Warframe Dev", "flags": 0, "hook": true, "icon": null, "id": "383379166323539969", "name": "Warframe Dev", "primary_sku_id": "499621146094862346", "slug": "warframe-dev", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "499621146094862346", "sku": "499621146094862346"}], "type": 1, "verify_key": "4d1ac6f06c9957028b00772a49b8616740c7d3ba8918088fef1a4794bc2c5b31"}, {"aliases": ["H1Z1 LaunchPad", "H1Z1 Launcher"], "description": "Originally a separate PVP mode of the open-world survival-horror shooter now known as \"Just Survive\", H1Z1 pits upwards to 150 players in a large empty island to scavenge for gear and fight to the death. It was later made free-to-play.", "developers": [{"id": "521816500974256130", "name": "Daybreak Games"}], "executables": [{"is_launcher": false, "name": "h1z1/h1z1_be.exe", "os": "win32"}, {"is_launcher": false, "name": "h1z1/h1z1.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b09790c0ec1826b9f45ab8d00a467a1e", "id": "385537545276096522", "name": "H1Z1", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816717291421726", "name": "Daybreak Game Company"}, {"id": "521816500974256130", "name": "Daybreak Games"}], "splash": "1453c838e2d55cf3e9a896ae212eb214", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "433850", "sku": "433850"}], "type": 1, "verify_key": "23606bf307cf949784cec088e54c5600872ae9c58dacde6feb4a628389b1c370"}, {"description": "A Yu-Gi-Oh! trading card game that uses mostly traditional rules, but games are made to end more quickly.", "developers": [{"id": "521816513074692111", "name": "Konami"}], "executables": [{"is_launcher": false, "name": "yu-gi-oh! duel links/dlpc.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "058411edfa95229c6adb7d56d9d1e8ce", "id": "385537699366305792", "name": "Yu-Gi-Oh! Duel Links", "publishers": [{"id": "521816513074692111", "name": "Konami"}, {"id": "521816738807939112", "name": "Konami Digital Entertainment"}], "splash": "7de504c72487d0c5ce6ba7aff9979417", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "601510", "sku": "601510"}], "type": 1, "verify_key": "66d01579158147c8e04d7935969a9a26df1276e41983a012bd54e08e6e8ff9fa"}, {"description": "The 2017-18 FIFA game is presented by Cristiano Ronaldo.", "developers": [{"id": "521816499950714880", "name": "EA Canada"}], "executables": [{"is_launcher": false, "name": "fifa18.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "44158e013cb0382a3dc6cdb39c4c17b7", "id": "385537854320934922", "name": "FIFA 18", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}, {"id": "521816538202767363", "name": "EA Games"}], "summary": "", "third_party_skus": [{"distributor": "origin", "id": null, "sku": null}], "type": 1, "verify_key": "16226f9f669a0a177a1ced8067cc73af7f04ea2020c807b1bdc82a28f7b10c74"}, {"description": "Coffee Stain Studios' sequel to Sanctum. First-person tower defense in space, now on consoles.", "developers": [{"id": "521816595153158147", "name": "Coffee Stain Studios"}], "executables": [{"is_launcher": false, "name": "sanctumgame-win32-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7251bf5330014ca4eb46d3a5ced3a237", "id": "385537957806866432", "name": "Sanctum 2", "publishers": [{"id": "521816595153158147", "name": "Coffee Stain Studios"}], "splash": "653be3fc2bf2baee070d0a70094efe10", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "210770", "sku": "210770"}], "type": 1, "verify_key": "3f8bb0c9b204a50a2fe3941f86f0c725b050ca5a37490e0f3a662db7375d4ce1"}, {"description": "A third-person, physics-based puzzle game set within surreal dreamscapes.", "developers": [{"id": "521816552501411879", "name": "No Brakes Games"}], "executables": [{"is_launcher": false, "name": "human.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "48823134f097206949116832d82dfb28", "id": "385538103831429120", "name": "Human: Fall Flat", "publishers": [{"id": "521816552501411877", "name": "Curve Digital Entertainment"}, {"id": "521816552501411879", "name": "No Brakes Games"}], "splash": "0b385438b7e10da626821749ce76c42d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "477160", "sku": "477160"}], "type": 1, "verify_key": "dde32da12bcc94476637002204db9af48200c1a2bda35c1288d70402b13c0388"}, {"aliases": ["Watch_Dogs"], "description": "A third-person open-world game from Ubisoft, set in a dark alternate version of the US where corporations track and catalog all online behavior over a vast data network. A vigilante group called the Watch_Dogs hacks into this data, using it to hunt criminals.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "watch_dogs.exe", "os": "win32"}], "flags": 0, "guild_id": "90157169906819072", "hook": true, "icon": "f3c6259b041643a611a5ad668d9b697e", "id": "385538279090683924", "name": "Watch Dogs", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "75a497f7e289c27702027a208d0babad", "summary": "", "third_party_skus": [{"distributor": "uplay", "id": "274", "sku": "274"}], "type": 1, "verify_key": "f86eaa47a9d031f39bfa26c32c5bb53f52ad53c12e6a5f906be74922973a3bc3"}, {"aliases": ["Assassin's Creed: Origins", "Assassins Creed Origins"], "description": "After a two-year hiatus, the Assassin's Creed series returns by going to ancient Egypt.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "acorigins.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "841763b6a50ddd5dfbaa482932442e8d", "id": "385538388419280896", "name": "Assassin's Creed Origins", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}, {"id": "521816510730338325", "name": "Ubisoft"}], "splash": "e8829ad35f8527704c7e1dc968e32aef", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "582160", "sku": "582160"}, {"distributor": "uplay", "id": "3539", "sku": "3539"}], "type": 1, "verify_key": "645303180d0171718c42c4eb4a2bae3430b840e0bde217ad184647ae370d5698"}, {"description": "Counter-Strike 2D is a freeware, top-down, 2D version of the popular Counter-Strike games.", "developers": [{"id": "521816716293046273", "name": "Unreal Software"}], "executables": [{"is_launcher": false, "name": "cs2d.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9daed670e5f514926bd53029ffd7923b", "id": "385538625221165056", "name": "CS2D", "publishers": [{"id": "521816716293046273", "name": "Unreal Software"}], "splash": "5b1c629140366015c69afe03be328c51", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "666220", "sku": "666220"}], "type": 1, "verify_key": "762f56a0ed27915283eff8661e0d521344bbc54bb8353343fdddd2b0589f0998"}, {"description": "BJ's back in America.", "developers": [{"id": "521816549666062338", "name": "MachineGames"}], "executables": [{"is_launcher": false, "name": "newcolossus_x64vk.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4c211769cf59a88924ec40fc64fe04f1", "id": "385538682184269834", "name": "Wolfenstein II: The New Colossus", "publishers": [{"id": "521816500508819469", "name": "Bethesda Softworks"}], "splash": "3d7275129192941c25f58690ea3b661c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "612880", "sku": "612880"}], "type": 1, "verify_key": "56dd638c6520335d7f7fca9c24161af78cf090133dcd4f62c77ce1b9675e723f"}, {"description": "Beginning as a mod for ArmA II, the online zombie survival shooter DayZ is now a standalone game. It is currently in alpha, but is available as an Early Access game on Steam.", "developers": [{"id": "521816510172233760", "name": "Bohemia Interactive Studio"}], "executables": [{"is_launcher": false, "name": "dayz.exe", "os": "win32"}, {"is_launcher": false, "name": "dayz_x64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "cff0c274f3a4cf2c1280dab58268ce9d", "id": "385538724592746496", "name": "DayZ", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816510172233760", "name": "Bohemia Interactive Studio"}], "splash": "c94c6673d3bf8514f3f6a25b9e925c77", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "221100", "sku": "221100"}], "type": 1, "verify_key": "1e14bc1362f2655462c8fc120293a1a3576458a1864811332a4f5afc487074f2"}, {"aliases": ["Br\u00fctal Legend"], "description": "", "developers": [{"id": "521816518871220235", "name": "Double Fine Productions, Inc."}], "executables": [{"is_launcher": false, "name": "brutallegend.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8e046b53fec886afa586d92fc1538e70", "id": "385538840162467860", "name": "Brutal Legend", "primary_sku_id": "491308957164634116", "publishers": [{"id": "521816518871220235", "name": "Double Fine Productions, Inc."}], "slug": "brutal-legend", "splash": "6be9c4f3702b60646e93c217eece0104", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "225260", "sku": "225260"}, {"distributor": "discord", "id": "491308957164634116", "sku": "491308957164634116"}], "type": 1, "verify_key": "169463577ec07fcdcb4f1cde9c4a2ceca34ea17094fe388531aa7b8f46c2306d"}, {"description": "Zombidle", "executables": [{"is_launcher": false, "name": "zombidle.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "88973394f9d689f5f3ab566f864779fb", "id": "387375748262002710", "name": "Zombidle", "splash": "950f308ab3b35f2e730c43060c0f4d9d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "612020", "sku": "612020"}], "type": 1, "verify_key": "06d4aa9ce0f9e03e530a68f3433ce5518dbece8d89c0b10068345dc5ce20ce7b"}, {"description": "A new Shadowrun CRPG by Harebrained Schemes partially funded through Kickstarter.", "developers": [{"id": "521816521249521698", "name": "Harebrained Schemes"}], "executables": [{"is_launcher": false, "name": "srhk.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ff9aa1bbc83effac4815483f3305e08a", "id": "387376045269057564", "name": "Shadowrun: Hong Kong", "publishers": [{"id": "521816521249521698", "name": "Harebrained Schemes"}], "splash": "4615e01a3b9b0c799207ddfd098eb00d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "346940", "sku": "346940"}], "type": 1, "verify_key": "0a629527f631942a4e631a7bdcab4ed15d083c931fe7024644498ff27c370f62"}, {"description": "64-player multiplayer Vietnam War FPS developed by Antimatter Games and Tripwire Interactive.", "developers": [{"id": "521816653646790671", "name": "Tripwire Interactive, LLC"}], "executables": [{"is_launcher": false, "name": "vngame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "597ca0f397f33a1363eb8d5145a4b602", "id": "387402304158040074", "name": "Rising Storm 2: Vietnam", "publishers": [{"id": "521816653646790671", "name": "Tripwire Interactive, LLC"}, {"id": "521816715248533524", "name": "Antimatter Games"}], "splash": "1672622854c30fe554b982a621876320", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "418460", "sku": "418460"}], "type": 1, "verify_key": "92bd83799274072d89996162f9824bc324aee6aa8fb8e9ab922b3da78ca32e1c"}, {"description": "A third-person, squad-based, tactical game that recounts humanity's first contact with aliens during the Cold War in the 1960s, and the subsequent founding of the XCOM organization.", "developers": [{"id": "521816696345067520", "name": "2K Marin"}], "executables": [{"is_launcher": false, "name": "thebureau.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "891baf3ef733d816b4d3fd65d45084bf", "id": "387402716965634066", "name": "The Bureau: XCOM Declassified", "publishers": [{"id": "521816696345067520", "name": "2K Marin"}, {"id": "521816504392482816", "name": "2K Games"}], "splash": "e5fc9793b6ff96b97df6b0d7b0a3eed3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "65930", "sku": "65930"}], "type": 1, "verify_key": "64db33bc10e17dd7d6133d73be4fe0ccca2d4150db2129f3ed98757cca4bcccc"}, {"aliases": ["Elsword"], "description": "Elsword is a free-to-Play 2D action side-scrolling MMORPG. The game is designed to make the players feel that they are part of their own manga.", "developers": [{"id": "521816726317432850", "name": "KOG Studios"}], "executables": [{"is_launcher": false, "name": "data/x2.exe", "os": "win32"}, {"is_launcher": false, "name": "elsword.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c1e602d7c0ff6c284a17829a9e98e1e8", "id": "387402920238383122", "name": "Elsword", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816726317432847", "name": "Kill3rCombo"}, {"id": "572588407914758154", "name": "KOG"}], "splash": "c8b320c4bdd7d7505d794c568c11e4a0", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "237310", "sku": "237310"}], "type": 1, "verify_key": "d85d255c0b00e104a9ab52fa8d30e4092542594f125968e5f6bd9435789345e0"}, {"aliases": ["Total War: ROME 2"], "description": "The sequel to Rome: Total War, Total War: Rome II promises gameplay improvements to the series as well as making empire management more streamlined and approachable for newcomers.", "developers": [{"id": "521816720503996437", "name": "The Creative Assembly"}], "executables": [{"is_launcher": false, "name": "rome2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "99a08d9d0e937a9342ca7dd971430140", "id": "387403734080159763", "name": "Total War: Rome 2", "overlay": true, "publishers": [{"id": "521816507676885010", "name": "Sega"}], "splash": "397d2b06d320130e425b851c377f7fe7", "summary": "", "type": 1, "verify_key": "47520d7946e8013eb28503ec586f31f1779e96331938a7bcf546613624d4c57e"}, {"description": "Freddy Fazbear\u2019s Pizzeria Simulator starts as a pizza slinging retro-themed game, but something more lurks beneath the surface.", "developers": [{"id": "521816617118728203", "name": "Scottgames"}], "executables": [{"is_launcher": false, "name": "freddy fazbear's pizzeria simulator/pizzeria simulator.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d02b0db97edd80a1fe051bc71549eccf", "id": "389964632527339534", "name": "Freddy Fazbear's Pizzeria Simulator", "publishers": [{"id": "521816617118728203", "name": "Scottgames"}, {"id": "521816617118728205", "name": "Scott Cawthon"}], "splash": "6434f02c2954d524c82fb172a13683f5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "738060", "sku": "738060"}], "type": 1, "verify_key": "dd0332ae1936d247cf2526b59992877b319718e0c9ae99065e34bf8a91bb563a"}, {"description": "A high-difficulty climbing game inspired by Sexy Hiking.", "developers": [{"id": "521816565541240837", "name": "Bennett Foddy"}], "executables": [{"is_launcher": false, "name": "gettingoverit.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f61d2ad31d598449d3cb9aaaa4035f2c", "id": "389968138688659466", "name": "Getting Over It with Bennett Foddy", "publishers": [{"id": "521816565541240837", "name": "Bennett Foddy"}], "splash": "b78551e2f9cdc808b6e17a7f1076a1f9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "240720", "sku": "240720"}], "type": 1, "verify_key": "762ac1187eb92fa8d9bbf6b3ab70be8c53675215f3e71480b768d2049e55fbe8"}, {"aliases": ["Guns of Icarus - Online"], "description": "A multiplayer, PVP focused follow-up to Muse Games' Guns of Icarus.", "developers": [{"id": "521816608445038603", "name": "Muse Games"}], "executables": [{"is_launcher": false, "name": "gunsoficarusonline.app", "os": "darwin"}, {"is_launcher": false, "name": "gunsoficarusonline.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "56b5c75edc1e27c056febccd706881e8", "id": "390293569832878098", "name": "Guns of Icarus Online", "publishers": [{"id": "521816608445038603", "name": "Muse Games"}], "splash": "cf02dfa0c1b9ab22c0ba6ee0eefd7524", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "209080", "sku": "209080"}], "type": 1, "verify_key": "b9de0de7bf08234fff03140173424593f39454afcd67fa264d14d7904fe51528"}, {"description": "", "executables": [{"is_launcher": false, "name": "gunsoficarusonline.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "194108a95425cd9f52e56c13222fbadd", "id": "390293932199772160", "name": "Guns of Icarus Alliance", "publishers": [{"id": "521816608445038603", "name": "Muse Games"}], "splash": "c8ec7a7beedbe56595ad36f313479e39", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "608800", "sku": "608800"}], "type": 1, "verify_key": "a8bb9eabe9d6eb634edbd3ab59df772bbeb854484384ca6889e08292d06aac8a"}, {"description": "", "executables": [{"is_launcher": false, "name": "zombidle.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "88973394f9d689f5f3ab566f864779fb", "id": "393178973129015328", "name": "Zombidle: REMONSTERED", "publishers": [{"id": "521816566007070778", "name": "Berzerk Studio"}], "splash": "950f308ab3b35f2e730c43060c0f4d9d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "612020", "sku": "612020"}], "type": 1, "verify_key": "382f10738bdf4b2d5972f8d20414e3459dc6b0c3dac8c836f36f8f53af959d75"}, {"description": "Guns N\u2019 Boxes is a top-down multiplayer shooter from LightArrow Games. It is currently available on Steam Early Access.", "developers": [{"id": "521816755988070410", "name": "Krealit"}], "executables": [{"is_launcher": false, "name": "gunsnboxes.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "febf8b97c4f09b673dfe8f41a00e5b8f", "id": "393511930838515742", "name": "Guns N' Boxes", "publishers": [{"id": "521816755988070410", "name": "Krealit"}], "splash": "d8b488f691f6d9f70c4c667c4bb66515", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "483850", "sku": "483850"}], "type": 1, "verify_key": "5ae744983ce8238dd8de989c4f15570008f8bbd5adc55f65a625f9bb26ca25ce"}, {"description": "A VR program that integrates body tracking to place users into virtual multiplayer environments. Within these worlds players can play games, chat, and create their own content.", "developers": [{"id": "521816695397023748", "name": "VRChat Inc."}], "executables": [{"is_launcher": false, "name": "vrchat.exe", "os": "win32"}], "flags": 0, "guild_id": "189511567539306508", "hook": true, "icon": "a87dfe64fa914769f1c6cf37daa0a3d1", "id": "398632010442211348", "name": "VRChat", "publishers": [{"id": "521816695397023748", "name": "VRChat Inc."}], "splash": "a93eb36a39f180dcab448a053c3bfee9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "438100", "sku": "438100"}], "type": 1, "verify_key": "eddf058033f59ef2e91ffff19401d040943a83971aad036a295767cd51afaa82"}, {"description": "Red Crucible\u00ae: Firestorm", "executables": [{"is_launcher": false, "name": "red crucible firestorm/red crucible.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c40327a9683308bf95155b2405f09b98", "id": "403373728290963478", "name": "Red Crucible: Firestorm", "publishers": [{"id": "521816584612872202", "name": "Rocketeer Games Studio, LLC "}], "splash": "68a31c8a6a1014e6436e8787d96b901f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "298240", "sku": "298240"}], "type": 1, "verify_key": "7afd6991e156ce61df31d55bb26d0bc94192f490a31e07115cd1df0beb400e52"}, {"aliases": ["Assassin's Creed IV: Black Flag"], "description": "The sixth main installment of the Assassin's Creed franchise, set in the Caribbean during the age of piracy in the early 18th century. Players explore the memories of Edward Kenway, a charismatic pirate (turned reckless Assassin) and the grandfather of Connor Kenway, the protagonist of Assassin's Creed III.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "ac4bfmp.exe", "os": "win32"}, {"is_launcher": false, "name": "ac4bfsp.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "819cbb69413fa210eeaa71b53b197e24", "id": "406637677199360030", "name": "Assassin's Creed IV Black Flag", "publishers": [{"id": "521816654095843331", "name": "Ubisoft Montreal"}, {"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "3c986431a4ec920b797c4c5d078dc4aa", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "242050", "sku": "242050"}, {"distributor": "uplay", "id": "273", "sku": "273"}], "type": 1, "verify_key": "6ea092aff209a18afad9582819f10db19ee0acd07119c7f7784ebc40ca075c5d"}, {"aliases": ["Escape From Tarkov"], "description": "A first person shooter RPG/MMO that takes place in a fictional city in Russia.", "developers": [{"id": "521816646244106251", "name": "Battlestate Games"}], "executables": [{"is_launcher": false, "name": "escapefromtarkov.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1e5e0defac5328c442fbd425f2079b69", "id": "406637848297472017", "name": "Escape from Tarkov", "overlay": true, "publishers": [{"id": "521816646244106251", "name": "Battlestate Games"}], "summary": "", "type": 1, "verify_key": "9e6983cd4b1394af1a45165e4f8ca7178916b3c004783ea6911db4e412c568d4"}, {"description": "Multiplayer horror game about SCP Foundation.", "executables": [{"is_launcher": false, "name": "scpsl.exe", "os": "win32"}], "flags": 0, "guild_id": "330432627649544202", "hook": true, "icon": "96313b633f547a53114c00dc18fab445", "id": "406637935417622558", "name": "SCP: Secret Laboratory", "publishers": [{"id": "521816561640800267", "name": "Hubert Moszka"}], "splash": "93631ba47628401047e950da00dd151a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "700330", "sku": "700330"}], "type": 1, "verify_key": "87c39b9d20280420a819ffc3bc933fb1605974ed134fa451f4aba03a23d8401e"}, {"description": "A steampunk base-building survival strategy game.", "developers": [{"id": "521816657581309954", "name": "Numantian Games"}], "executables": [{"is_launcher": false, "name": "theyarebillions.exe", "os": "win32"}], "flags": 0, "guild_id": "380472883605929984", "hook": true, "icon": "5f997a9771d7d9050fca73b4b2a80318", "id": "406638043894775819", "name": "They Are Billions", "publishers": [{"id": "521816657581309954", "name": "Numantian Games"}], "splash": "f5c1b98e64404d26f5ef4258a5d08faf", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "644930", "sku": "644930"}], "type": 1, "verify_key": "252b4447b84f9446c27ad09376c608be4bcd5d150046970938a15354c8d914d9"}, {"aliases": ["TheLongDark"], "description": "A first person survival adventure simulation set in a post-disaster environment in the Northern American wilderness. Developed by Hinterland Studios Inc.", "developers": [{"id": "521816693094481940", "name": "Hinterland Studio Inc."}], "executables": [{"is_launcher": false, "name": "tld.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b36cc3aaabc698b8b10753f86567c365", "id": "406638150857785344", "name": "The Long Dark", "publishers": [{"id": "521816693094481940", "name": "Hinterland Studio Inc."}], "splash": "b4aed33e890000ddcc43af6f686d4e62", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "305620", "sku": "305620"}], "type": 1, "verify_key": "2d30cff30127d44106e9c5887e35d1a21883f753622bd9f9ffa035c9c8b22d33"}, {"aliases": ["Pokemon Trading Card Game Online"], "description": "Pok\u00e9mon Trading Card Game Online is a downloadable/tablet card game with online multiplayer which replicates the physical trading card game.", "developers": [{"id": "521816740712415233", "name": "The Pok\u00e9mon Company"}], "executables": [{"is_launcher": false, "name": "pokemon trading card game online.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e55aad5da922feb0daedf9ff6123d7df", "id": "406638244835622912", "name": "Pok\u00e9mon Trading Card Game Online", "overlay": true, "publishers": [{"id": "521816740712415233", "name": "The Pok\u00e9mon Company"}, {"id": "521816741156880398", "name": "The Pok\u00e9mon Company International"}], "splash": "d7be5ad94329e4a04f5e8fc70875d6cf", "summary": "", "type": 1, "verify_key": "254cb0cafa5d44ece170b0c00b59e536d3e33f8800ecfea1efb49f968acf2025"}, {"description": "", "executables": [{"is_launcher": false, "name": "kingdom.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "84304927ea679093ca509c1f65705557", "id": "406638362196312074", "name": "Kingdom: Classic", "primary_sku_id": "471030015958581279", "publishers": [{"id": "521816607941459968", "name": "Noio"}], "slug": "kingdom-classic", "splash": "e5572235b60713b40916bd19082b2914", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "368230", "sku": "368230"}, {"distributor": "discord", "id": "471030015958581279", "sku": "471030015958581279"}], "type": 1, "verify_key": "493c76cdb5abaf3ce2fb56368a46d57587e28012ad0dacb3a98d86e6b201d6bb"}, {"description": "A roguelike exploration/survival game from the creators of Shank and Mark of the Ninja.", "developers": [{"id": "521816520817639454", "name": "Klei Entertainment Inc."}], "executables": [{"is_launcher": false, "name": "dontstarve_steam.exe", "os": "win32"}, {"is_launcher": false, "name": "dontstarve.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9e5c7ffdfa5b3c0b14e1b18cb73e966d", "id": "406643893007024149", "name": "Don't Starve", "publishers": [{"id": "521816520817639454", "name": "Klei Entertainment Inc."}, {"id": "521816687612395520", "name": "Klei Entertainment"}], "splash": "68e1de56ea2255252eb788210e819475", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "219740", "sku": "219740"}], "type": 1, "verify_key": "9a4cbebb490b6f56e70a9f8e9615d06fd9341ff227220c604658f438e5d69ee3"}, {"aliases": ["GWENT: The Witcher Card Game "], "description": "Choose from several factions from The Witcher universe and do battle in a card game of bluff and wits.", "developers": [{"id": "521816536210604032", "name": "CD Projekt RED Sp. z o.o."}], "executables": [{"is_launcher": false, "name": "gwent.exe", "os": "win32"}], "flags": 0, "guild_id": "410769243270021141", "hook": true, "icon": "7231a4b6d217042db23249d172fa4f27", "id": "406643974183452681", "name": "GWENT: The Witcher Card Game ", "overlay": true, "publishers": [{"id": "521816536210604032", "name": "CD Projekt RED Sp. z o.o."}], "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}], "type": 1, "verify_key": "178e84d5240c161c269fee6e11591bd2b26d134d6ce859ea89a12234c7b0f33c"}, {"description": "Last Santa Standing is a Christmas-themed PvP arena fighting game by Doborog Games. You take on the roll of one of many Santas looking to win a battle royale style match and grab the Christmas Dinner prize.", "executables": [{"is_launcher": false, "name": "long live santa.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "dba293cb3b4113a14fee08e7b461a7b1", "id": "406644036963663890", "name": "Long Live Santa!", "publishers": [{"id": "521816652262670339", "name": "Doborog Games"}], "splash": "a33a175e47ec6d377d89f16cf96866b9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "763410", "sku": "763410"}], "type": 1, "verify_key": "392f8a0a85753d5b791ece0715c861d18910dd5abdcc345ae5c2979fa4a71c52"}, {"bot_public": true, "bot_require_code_grant": false, "cover_image": "76749088d71479056503609cbb654c2f", "description": " We fused card games and roguelikes together to make the best single player deckbuilder we could. Craft a unique deck, encounter bizarre creatures, discover relics of immense power, and Slay the Spire! ", "developers": [{"id": "521816713294118913", "name": "Mega Crit"}], "executables": [{"is_launcher": false, "name": "slaythespire.exe", "os": "win32"}], "flags": 0, "guild_id": "309399445785673728", "hook": true, "icon": "5c9cdfe6a46f49ee5f2a3c134d62902b", "id": "406644123832156160", "name": "Slay the Spire", "primary_sku_id": "489493235924992012", "publishers": [{"id": "521816713294118912", "name": "Mega Crit Games"}], "slug": "slay-the-spire", "splash": "2fa1b09d03906ba688fa2ec78862bf78", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "646570", "sku": "646570"}, {"distributor": "discord", "id": "489493235924992012", "sku": "489493235924992012"}], "type": 1, "verify_key": "e0ad1c79cd30137a1810168270beb3cd4f64a546cabc40200e3e4dca717ef875"}, {"description": "Kingdoms and Castles is a medieval city/feudal management game.", "developers": [{"id": "521816502983196701", "name": "Lion Shield, LLC"}], "executables": [{"is_launcher": false, "name": "kingdomsandcastles.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "051d8da66eb0f66a5461d7e4fa48ecbd", "id": "406645058599780368", "name": "Kingdoms and Castles", "publishers": [{"id": "521816502983196701", "name": "Lion Shield, LLC"}], "splash": "80bc54fce810fb086a5426df69e8955a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "569480", "sku": "569480"}], "type": 1, "verify_key": "c2eb2e6e0681bc2c5e0b57f62ee619918c5d3194fee9679190db780eea3337b1"}, {"description": "", "developers": [{"id": "521816589570408450", "name": "Shiro Games"}], "executables": [{"is_launcher": false, "name": "northgard.exe", "os": "win32"}], "flags": 0, "guild_id": "225335295128633345", "hook": true, "icon": "70855ad4d57e25039b17e354ead80733", "id": "406645134445248530", "name": "Northgard", "primary_sku_id": "471237512711634944", "publishers": [{"id": "521816589570408450", "name": "Shiro Games"}], "rpc_origins": [], "slug": "northgard", "splash": "c5ec370ef4b8e6540b4d917fd31632a7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "466560", "sku": "466560"}, {"distributor": "discord", "id": "471237512711634944", "sku": "471237512711634944"}], "type": 1, "verify_key": "f98d9501853e4dde6d2ab7e9cc2015d7bfea3a04fa90b407cb687fe18d4b962e"}, {"description": "A ridiculously violent platform shooter game about being action heroes from the '80s, '90s and 00's.", "developers": [{"id": "521816734374559754", "name": "Free Lives"}], "executables": [{"is_launcher": false, "name": "broforce_beta.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "08d5f5ff9e49e720f75179afb3ab35ed", "id": "406645260987662366", "name": "Broforce", "publishers": [{"id": "521816734374559754", "name": "Free Lives"}, {"id": "521816510730338331", "name": "Devolver Digital"}], "splash": "efb1620b706e6769f3fb82afca3434b9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "274190", "sku": "274190"}], "type": 1, "verify_key": "abca54c64e40f5aacc39fedc1286ed44f2ef32864781d7314b43f6d191ee1302"}, {"description": "", "executables": [{"is_launcher": false, "name": "crossfire br/crossfire.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ce7928bb1cf8eb6cf335de11a96b1890", "id": "406645350506561547", "name": "CrossFire BR", "publishers": [{"id": "521816791249322006", "name": "Z8Games.com"}], "summary": "", "type": 1, "verify_key": "bd6aac96310be6be7a87530e5a2678c9165fef3fc28adc6b0665e73b8e06c133"}, {"aliases": ["Neverwinter Online"], "description": "A free-to-play MMORPG inspired by R.A. Salvatore's Neverwinter Saga book trilogy.", "developers": [{"id": "521816694352510976", "name": "Cryptic Studios"}], "executables": [{"is_launcher": false, "name": "neverwinter/live/gameclient.exe", "os": "win32"}, {"is_launcher": false, "name": "neverwinter.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "26f3f28e76a22a6373382eb09ba0980a", "id": "406645401437863936", "name": "Neverwinter", "publishers": [{"id": "521816509673242636", "name": "Perfect World Entertainment"}, {"id": "521816694352510976", "name": "Cryptic Studios"}], "splash": "039303b7b717c5a51a90101f21b67939", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "109600", "sku": "109600"}], "type": 1, "verify_key": "be22c04a4e1bf17e4d14038c205155953596c3f391db20bccf508ef165e583a0"}, {"description": "Tibia is an MMORPG created in 1997 by developer CipSoft GmbH. At present, more than 250,000 users play the game regularly.", "developers": [{"id": "521816613364957195", "name": "CipSoft GmbH"}], "executables": [{"is_launcher": false, "name": "tibia/bin/client.exe", "os": "win32"}, {"is_launcher": false, "name": "tibia.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f3698e7b1a0d6eb986e31b9a267cc43d", "id": "406645450863804416", "name": "Tibia", "publishers": [{"id": "521816613364957195", "name": "CipSoft GmbH"}], "splash": "800e416065444539528e30b2df55c53e", "summary": "", "type": 1, "verify_key": "5f06200c9e064cef69d3e804a20b8a7c6b4b96d3825b8faecacb82609b25ff56"}, {"description": "A graphical adventure game about Cold War-era immigration control, where players take the role of an immigration inspector who must control the flow of people entering a fictional Soviet-style nation. Glory to Arstotzka!", "developers": [{"id": "521816540853698567", "name": "Lucas Pope"}], "executables": [{"is_launcher": false, "name": "papersplease.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5e9b51cea5580613aa0eb1844b03b8d8", "id": "406645580375392256", "name": "Papers, Please", "publishers": [{"id": "521816540853698566", "name": "3909"}], "splash": "e7d60c282ba122d61fba1b59a98cedac", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "239030", "sku": "239030"}], "type": 1, "verify_key": "4cec977b5c357cdc9523e6ae8c9d465fb63aaceaa32b52abd19df8b8e9f24dea"}, {"aliases": ["CLOSERS", "Closers Dimension Conflict"], "description": "Closers online is a sidescroll RPG game with 80 fps support and MOBA mode.", "developers": [{"id": "521816784161079296", "name": "Naddic Games"}], "executables": [{"is_launcher": false, "name": "closers/cw.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c77a02ccd7f91f37c6b42302f41637a1", "id": "406645631864537088", "name": "Closers", "overlay": true, "publishers": [{"id": "521816616028078094", "name": "En Masse Entertainment"}, {"id": "521816783670476802", "name": "Naddic"}, {"id": "521816784161079296", "name": "Naddic Games"}], "splash": "b9bd513f3a5382a4b1d9ad08f4af2a88", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "215830", "sku": "215830"}], "type": 1, "verify_key": "fd3dd7ede298882746bb1f8d0158cecce433d4b702d65064574ca53343a2bd1c"}, {"description": "Simulate the development and progression of an alien species as it evolves from a single-celled organism to a sapient level, rises up through various stages of civilization, and eventually becomes a space-faring species.", "developers": [{"id": "521816577876951044", "name": "Maxis Software"}], "executables": [{"is_launcher": false, "name": "sporeapp.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a0409b90258f89c88a8fd521ea2612b2", "id": "406645798680657920", "name": "Spore", "publishers": [{"id": "521816767484395521", "name": "Maxis\u2122"}, {"id": "521816499464306692", "name": "Electronic Arts"}], "splash": "af76aa65b1c3ef5e2d2effd11df6b584", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "17390", "sku": "17390"}], "type": 1, "verify_key": "bd781790e143afc10a257cd890a39c3608712e50aa7ea16ab4c73315522c73d6"}, {"aliases": ["Plague Inc."], "description": "A rebuilt version of the popular mobile game for PC/Mac/Xbox One with new features including 3D graphics, multiplayer, and content sharing.", "developers": [{"id": "521816584076132352", "name": "Ndemic Creations"}], "executables": [{"is_launcher": false, "name": "plagueincevolved.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "62cc3a957e12ef559385ae541c32d93a", "id": "406645878980476928", "name": "Plague Inc: Evolved", "publishers": [{"id": "521816584076132352", "name": "Ndemic Creations"}], "splash": "2e4cfcf9282df03926e2d9bebe621074", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "246620", "sku": "246620"}], "type": 1, "verify_key": "2e4cb02d1c70671f5249f16fc99b92143a2f824c7e1e26ade63cdf2cb502315f"}, {"aliases": ["Borderlands: the Pre-Sequel"], "description": "The third Borderlands game, set between the events of Borderlands and Borderlands 2, follows a quartet of familiar faces as they work to bring Handsome Jack into power through misadventures on Elpis, the moon of Pandora.", "developers": [{"id": "521816749830701057", "name": "2K Australia"}], "executables": [{"is_launcher": false, "name": "borderlandspresequel.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "693a7c1ecd60cd1c07f0330b14b37f4a", "id": "406645950782636041", "name": "Borderlands: The Pre-Sequel", "publishers": [{"id": "521816504392482816", "name": "2K Games"}, {"id": "521816749830701057", "name": "2K Australia"}], "splash": "39a0b4cd615b7f59175ba234a7f2f595", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "261640", "sku": "261640"}], "type": 1, "verify_key": "eb259f1500fc383b65d9d04cd2a5ec9d435c9ee441f3d59aabb92c2416e6156d"}, {"description": "A top-down action combat game with an 80s aesthetic, a brutal style, and a thoughtful, slightly surreal philosophy underlying the story about the nature of violence.", "developers": [{"id": "521816558092156948", "name": "Dennaton"}], "executables": [{"is_launcher": false, "name": "hotlinemiami.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "aaeea0b0de4890eab40bb1d548cfe84e", "id": "406646037571436544", "name": "Hotline Miami", "publishers": [{"id": "521816557656080391", "name": "Dennaton Games"}, {"id": "521816510730338331", "name": "Devolver Digital"}], "splash": "4f0efef561ce35d9debee571cb55a4fa", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "219150", "sku": "219150"}], "type": 1, "verify_key": "40616dd3389c854fac27a0396f26364e93b4c8449875b325434efedfdb4fcc02"}, {"description": "By the year 2027, the North Koreans have managed to unify Korea, annex Japan, and also invade the western half of the United States. As an American rebel fighter, it is the player's duty to help push the NPA out of the United States and end the citizens' suffering.", "developers": [{"id": "521816604640542740", "name": "Kaos Studios"}], "executables": [{"is_launcher": false, "name": "homefront.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a344b4d20fd11ef81a524b2b7e9e2e50", "id": "406646102297804826", "name": "Homefront", "publishers": [{"id": "521816550596935692", "name": "THQ"}], "splash": "763fd4c32a6372cf869c897d11c09b52", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "55100", "sku": "55100"}], "type": 1, "verify_key": "74dc3dac8c12d32d3c71793ae92c538edbc2a66ef424152ed6bc50fa6554f0cd"}, {"description": "An open world hunting game.", "developers": [{"id": "521816747477827597", "name": "Expansive Worlds"}], "executables": [{"is_launcher": false, "name": "thehuntercotw_f.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "42e141fe13263c491a1fbea6b093f820", "id": "406646161563189258", "name": "theHunter\u2122: Call of the Wild", "publishers": [{"id": "521816537192202241", "name": "Avalanche Studios"}], "splash": "4c5aa88f5d25fcd7eba6bd0dbd9c06c1", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "518790", "sku": "518790"}], "type": 1, "verify_key": "f09201e0798b0c3ad9c91e9280afb5fa6e9e7900ab472da53a18c74a743f4700"}, {"aliases": ["Tomb Raider (2013)"], "description": "A young and inexperienced Lara Croft is shipwrecked on a mysterious island in this reboot of the beloved action adventure franchise, which departs from the mood of prior games in the series.", "developers": [{"id": "521816535753555988", "name": "Crystal Dynamics, Inc."}], "executables": [{"is_launcher": false, "name": "tombraider.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "27f4b5bae47a19b3d8f43ce5bb0c01ee", "id": "406646264093212682", "name": "Tomb Raider", "publishers": [{"id": "521816639512248330", "name": "Crystal Dynamics"}, {"id": "521816526920351761", "name": "Square Enix"}], "splash": "71c9073ae150324c04b6536b253985bb", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "203160", "sku": "203160"}], "type": 1, "verify_key": "2b2e2c1423b983918f8e7d0b3919d54a23914de843ea9f4ef57e5387c0a3c9b1"}, {"description": "A twisted twin-stick shooter from one of the designers of Super Meat Boy. Players take control of Isaac, a young boy who delves deep into the dungeons of his basement as he is hunted by his deranged mother.", "executables": [{"is_launcher": false, "name": "isaac.exe", "os": "win32"}, {"is_launcher": false, "name": "binding_of_isaac.exe", "os": "win32"}, {"is_launcher": false, "name": "isaac.app", "os": "darwin"}], "flags": 0, "hook": true, "icon": "5af50fe6f076262e1e1d4ffa9d0e328b", "id": "406646308309434378", "name": "The Binding of Isaac", "publishers": [{"id": "521816769640529961", "name": "Edmund McMillen and Florian Himsl"}, {"id": "521816561216913411", "name": "Headup Games"}], "splash": "bc92ff0967e27521251300c821f17b95", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "113200", "sku": "113200"}], "type": 1, "verify_key": "d3c63012e616da375cc91599ff7453ef8bce63957a1d2277e754f61bd05e7104"}, {"description": "We Were Here", "executables": [{"is_launcher": false, "name": "we were here.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ff3b46c20910effad46996016db91fab", "id": "406646387875250186", "name": "We Were Here", "publishers": [{"id": "521816654095843328", "name": "Total Mayhem Games"}], "splash": "87ccfc29e444471ef50f08326d75b9c3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "582500", "sku": "582500"}], "type": 1, "verify_key": "74c45c119ae3f55de40e3d98ddfc0f2ef6b76d6632e22d40cc40fb42a066393b"}, {"description": "", "developers": [{"id": "521816628980219914", "name": "11 Bit Studios"}], "executables": [{"is_launcher": false, "name": "this war of mine.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "91cc029df9f1daa655a169a4f9e5d56e", "id": "406646471098892298", "name": "This War of Mine", "primary_sku_id": "491745335803117586", "publishers": [{"id": "521816628980219914", "name": "11 Bit Studios"}], "slug": "this-war-of-mine", "splash": "08ef78a6b0c255cbe93bf315ef95674c", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "491745335803117586", "sku": "491745335803117586"}, {"distributor": "steam", "id": "282070", "sku": "282070"}], "type": 1, "verify_key": "36e8e30a52139268ae773c08ac7f4e5eaa8f82a54ca09e8091a0dac8628de0a4"}, {"description": "The sequel to Dennaton's hit 2D action game moves the neon murder from the '80s to a '90s setting, and concludes the series.", "developers": [{"id": "521816558092156948", "name": "Dennaton"}], "executables": [{"is_launcher": false, "name": "hotlinemiami2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "25a0eeae48e2851129b3c7ddff837772", "id": "406646550731816960", "name": "Hotline Miami 2: Wrong Number", "publishers": [{"id": "521816557656080391", "name": "Dennaton Games"}, {"id": "521816510730338331", "name": "Devolver Digital"}], "splash": "521d183fcb44a5bafb2f49c2fbb013f5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "274170", "sku": "274170"}], "type": 1, "verify_key": "29b70368cd1fea24cbcc1c5ad33d77049685034520241059b95e2542e75c76f9"}, {"description": "A side scrolling beat 'em up where players control northern British warriors as they defends their tribe from the marching Roman horde.", "developers": [{"id": "521816610097594396", "name": "Fully Illustrated"}], "executables": [{"is_launcher": false, "name": "wulverblade.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2725539da1fecd3dc87f7fa7ebcd5167", "id": "410909667334684672", "name": "Wulverblade", "publishers": [{"id": "521816610097594395", "name": "Darkwind Media Ltd."}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "587180", "sku": "587180"}], "type": 1, "verify_key": "cddb2eb7c21209ec1bb61f38efd6973182156bc5d016b81696274057bd955d1b"}, {"description": "Hand Simulator", "executables": [{"is_launcher": false, "name": "hand simulator.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "73512cc3fee923d0e4c4e2c15843ce7f", "id": "418232964783144980", "name": "Hand Simulator", "publishers": [{"id": "521816572994519040", "name": "HFM Games"}], "splash": "2f2762f1b1b20f9c62c63571a55312b4", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "657200", "sku": "657200"}], "type": 1, "verify_key": "a29c110a1614a66223ebb411f624684d0b6963256bfd2eb56420a85fa1ddfaee"}, {"aliases": ["Kingdom Come Deliverance", "KingdomComeDeliverance"], "description": "A medieval open world RPG focused on period-accurate fighting and technique.", "developers": [{"id": "521816526362247169", "name": "Warhorse studios"}], "executables": [{"is_launcher": false, "name": "kingdomcome.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6f44f4ef9d68a338ef8f6d43bdd889f6", "id": "419267878014025728", "name": "Kingdom Come: Deliverance", "publishers": [{"id": "521816524403638274", "name": "Deep Silver"}], "splash": "0efbedd8db86c9b9ab4ff9e1a26f55b6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "379430", "sku": "379430"}], "type": 1, "verify_key": "9cea58c0f8202606924957335efed036c0e3e535d7f41299a5623393302f6ec4"}, {"description": "From the developers of the Guilty Gear Xrd series of fighting games comes a more traditional tag-team fighting game adaptation of the Dragon Ball manga and anime.", "developers": [{"id": "521816536743149599", "name": "Arc System Works Co., Ltd."}], "executables": [{"is_launcher": false, "name": "dbfighterz.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b735bf3f548f4e4dbc697d2a76ab5f3d", "id": "419268865667629056", "name": "DRAGON BALL FighterZ", "publishers": [{"id": "521816537653444610", "name": "Bandai Namco Entertainment"}], "splash": "2a9476b1d658f50372648a534c903160", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "678950", "sku": "678950"}], "type": 1, "verify_key": "4464a7c4022dd9d48aa8d4c4ac64bb52bffe71c7a3691203751ca9b717023aad"}, {"description": "Battalion 1944 is a World War II based shooter running on Unreal Engine 4, the game started as a Kickstarted funded game and was fully funded in under three days.", "developers": [{"id": "521816605827661853", "name": "Bulkhead Interactive"}], "executables": [{"is_launcher": false, "name": "battalion.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9d6f9d56c53499964dc5aebc9697a3de", "id": "419271532087607296", "name": "BATTALION 1944", "publishers": [{"id": "521816605827661853", "name": "Bulkhead Interactive"}, {"id": "521816526920351761", "name": "Square Enix"}], "splash": "b240ad953d3a37fbc7c6997420979876", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "489940", "sku": "489940"}], "type": 1, "verify_key": "a5b074d373df583eb4b1d7f16cd1ba7b02ad832946efdfb710b920ea643d5973"}, {"description": "Inspired by the free-to-play military MMO, Wargaming.net ports the popular World of Tanks to the iOS and Android platforms.", "developers": [{"id": "521816588601786401", "name": "Wargaming.net"}], "executables": [{"is_launcher": false, "name": "wotblitz.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3d22f4d22095e18963ff8bb7b67b8946", "id": "419272031960432651", "name": "World of Tanks Blitz", "publishers": [{"id": "521816588601786400", "name": "Wargaming Group Limited"}, {"id": "521816588601786401", "name": "Wargaming.net"}], "splash": "f93ed855a3b1964d970840e117e3cf2d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "444200", "sku": "444200"}], "type": 1, "verify_key": "0bc742663efb4b108fb749b91e42cd5f250fa1899e3f3bae442ceeca9a95d4dc"}, {"aliases": ["Dungeon & Fighter"], "description": "", "executables": [{"is_launcher": false, "name": "dnf.exe", "os": "win32"}], "flags": 0, "guild_id": "563256280521768962", "hook": true, "icon": "460152b702fe8de7db49c68185f5c123", "id": "421150671836938240", "name": "\ub358\uc804\uc564\ud30c\uc774\ud130", "publishers": [{"id": "521816605223813129", "name": "Tencent"}], "summary": "", "type": 1, "verify_key": "08a61fd8cdc99a5bec39d5eb7c1b16888aa0bc0c279986c1e500614fc3bc839a"}, {"aliases": ["Dark Souls: Prepare to Die Edition"], "description": "", "executables": [{"is_launcher": false, "name": "dark souls prepare to die edition/data/darksouls.exe ", "os": "win32"}], "flags": 0, "hook": true, "icon": "b4cb18c5c6f75b36e7bb93847c2a329d", "id": "421150676710588416", "name": "DARK SOULS\u2122: Prepare To Die Edition", "publishers": [{"id": "521816800560939010", "name": "FromSoftware"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "211420", "sku": "211420"}], "type": 1, "verify_key": "892358f00b9b44fab40e6815c791d46bec3d3b0aedc05cfc5b3f47aee91b2aa0"}, {"aliases": ["Total War: Arena"], "description": "Total War: Arena is a free-to-play 10-vs-10 strategy game.", "developers": [{"id": "521816720503996437", "name": "The Creative Assembly"}], "executables": [{"is_launcher": false, "name": "total_war_arena/arena.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ed643760da59d0ae3f97b9fd5b4a57a3", "id": "421150683329462272", "name": "Total War Arena", "overlay": true, "publishers": [{"id": "521816588601786401", "name": "Wargaming.net"}], "summary": "", "type": 1, "verify_key": "1e8e07038430620dd022002ca1396821c2ae6246f3887c9bc0934ef28b011d19"}, {"description": "Become a new member of the school's Literature Club in this cute game! Make friends with each of the sweet club members and write poems to increase your bond with them. Will you write the way into her heart?", "developers": [{"id": "521816701319249950", "name": "Team Salvato"}], "executables": [{"is_launcher": false, "name": "ddlc.exe", "os": "win32"}, {"is_launcher": false, "name": "doki doki literature club.app", "os": "darwin"}], "flags": 0, "hook": true, "icon": "58293873b0378f8ee427d3015c514e43", "id": "421150694683312138", "name": "Doki Doki Literature Club", "publishers": [{"id": "521816701319249950", "name": "Team Salvato"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "698780", "sku": "698780"}], "type": 1, "verify_key": "5be030585acf8d0e4a96d5fa88cd5b9e9c0c998d88faca859a48951d259c76ff"}, {"description": "", "developers": [{"id": "521816607408914450", "name": "Gearbox Software LLC"}], "executables": [{"is_launcher": false, "name": "borderlands2.exe", "os": "win32"}], "flags": 0, "guild_id": "132671445376565248", "hook": true, "icon": "75aafe852575a5c988e346fadec162f0", "id": "421150698168909834", "name": "Borderlands 2", "overlay": true, "publishers": [{"id": "521816503960600578", "name": "Gearbox Software"}, {"id": "521816504392482816", "name": "2K Games"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "49520", "sku": "49520"}], "type": 1, "verify_key": "fde1d57b37ef6afd3f2fc22e28474789833ef2bc8ef36f9caea695d4393ada29"}, {"cover_image": "4a9c53a2eb2a4cd14f97ee3176f3e4d2", "description": "Forsaken is a 3D first-person shooter in which the player has complete 360-degree range of freedom. In a far-off future you play as a scavenger searching through the underground tunnels for weapons and treasures. But you face dangers from automated defense systems and other scavengers.", "developers": [{"id": "521816531831750657", "name": "Nightdive Studios"}, {"id": "524351600127377411", "name": "Probe Entertainment"}, {"id": "563141479132823552", "name": "Iguana Entertainment UK"}], "executables": [{"is_launcher": false, "name": "selkis_x64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c010b42ad4837f05826fc51bfad7e366", "id": "421798336694059018", "name": "Forsaken Remastered", "primary_sku_id": "494870847777931268", "publishers": [{"id": "521816531831750657", "name": "Nightdive Studios"}], "slug": "forsaken-remastered", "splash": "088d53dde9b7fb6f7a4727c77cefb36c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "668980", "sku": "668980"}, {"distributor": "discord", "id": "494870847777931268", "sku": "494870847777931268"}], "type": 1, "verify_key": "15661049989add45cbb334c17bdedd3eb8b96b05c9758415930fea6db177d46d"}, {"description": "SoulWorker is an anime action MMORPG which takes place in the Cloudrealm, a now vacant city which only harbors the psychics and a horde of monsters.", "executables": [{"is_launcher": false, "name": "soulworker.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "db238f19460907c7df768ab1d155b779", "id": "421858437039783936", "name": "SoulWorker", "publishers": [{"id": "521816650840801282", "name": "Lion Games Co., Ltd."}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "630100", "sku": "630100"}], "type": 1, "verify_key": "462b4b03ab49f0610733dfdf9528f8da981bbe72f38795e0ab22a6296fe3530e"}, {"description": "", "developers": [{"id": "521816652262670336", "name": "Crytek GmbH"}], "executables": [{"is_launcher": false, "name": "hunt showdown/hunt.exe", "os": "win32"}], "flags": 0, "guild_id": "350201607788429323", "hook": true, "icon": "52ae10d11da1104b8081bfd9c4b1f803", "id": "422169383972896768", "name": "Hunt: Showdown", "publishers": [{"id": "521816652262670336", "name": "Crytek GmbH"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "594650", "sku": "594650"}], "type": 1, "verify_key": "23bbb989a4dc2e7a416595bd7999e8e6d5fbbc920fd873739a191b0735426510"}, {"aliases": ["Warframe Launcher"], "bot_public": true, "bot_require_code_grant": false, "cover_image": "6b0e4d8c05e14f630548eccc956324d9", "description": "Rich Presence for Warframe", "developers": [{"id": "521816584612872203", "name": "Digital Extremes"}], "executables": [{"is_launcher": false, "name": "warframe.x64.exe", "os": "win32"}, {"is_launcher": false, "name": "warframe.exe", "os": "win32"}], "flags": 0, "guild_id": "552966801558863896", "hook": true, "icon": "0d194a16e1a146c8034bf3b7e91ba625", "id": "422772752647323649", "name": "Warframe", "overlay": true, "primary_sku_id": "494959992483348480", "publishers": [{"id": "521816584612872203", "name": "Digital Extremes"}], "slug": "warframe", "splash": "e5185fe1f9ac1bd77cfdf3b2a5b97448", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "494959992483348480", "sku": "494959992483348480"}, {"distributor": "steam", "id": "230410", "sku": "230410"}], "type": 1, "verify_key": "1faf7ecefe6f6ff9b2deb95d13cb65546169d1a91df3e1145229aa80721e5884"}, {"aliases": ["Warcraft 3"], "description": "Armies of chaotic demons and corrupted beings are preparing a foretold invasion of the world of Azeroth in the third installment of the long-running medieval-fantasy series.", "developers": [{"id": "521816523430428673", "name": "Blizzard Entertainment"}], "executables": [{"is_launcher": false, "name": "wc3.exe", "os": "win32"}, {"is_launcher": false, "name": "warcraft iii.app", "os": "darwin"}, {"is_launcher": false, "name": "warcraft iii/frozen throne.exe", "os": "win32"}, {"is_launcher": false, "name": "warcraft iii.exe", "os": "win32"}, {"is_launcher": false, "name": "war3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e43cf060ad521e53fa0154b9712617e5", "id": "424719708785344525", "name": "Warcraft III", "publishers": [{"id": "521816523430428673", "name": "Blizzard Entertainment"}], "summary": "", "third_party_skus": [{"distributor": "battlenet", "id": null, "sku": null}], "type": 1, "verify_key": "9a160a038e8c88354da2a142c14227bd47649d45e693a701a5eda8e9112eadfa"}, {"description": "Bastion is a story about a Kid, his hammer, and a world gone all kinds of wrong.", "developers": [{"id": "521816498017271833", "name": "Supergiant Games"}], "executables": [{"is_launcher": false, "name": "bastion.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4ce40fa2051dec0ea99eafecbf388bde", "id": "425404251292958736", "name": "Bastion", "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "splash": "4c5c5fa0840cbdcc60732b0a44ed3bb3", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "107100", "sku": "107100"}], "type": 1, "verify_key": "ba5f5df7c47937b41897540135343e0624835468d766518ad7ea7b17bce4c8ca"}, {"aliases": ["Assassin?s Creed? Chronicles: China"], "description": "A 2.5D downloadable title for the Xbox One, PlayStation 4 and PC. The game follows Shao Jun, the last remaining Assassin of the Chinese Brotherhood.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "accgame-win32-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7f6c71cc37df9de39f145f8f22c6e1a0", "id": "425433703041335346", "name": "Assassin's Creed Chronicles China", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "summary": "", "third_party_skus": [{"distributor": "uplay", "id": "1651", "sku": "1651"}], "type": 1, "verify_key": "2f8dca2fe515b0437842b8924b5817415b9a49f0388eb7ff6061eddc53a1a82e"}, {"aliases": ["Assassins Creed"], "description": "Assassin's Creed is a stealth action-adventure game developed by Ubisoft Montreal. In the year 2012, Desmond Miles is kidnapped and made to relive his ancestor's memory through a machine called the Animus. As the ancestor, Alta\u00efr, players unveil an assassin conspiracy set in the middle ages.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "assassinscreed_dx10.exe", "os": "win32"}], "flags": 0, "guild_id": "215838530889318401", "hook": true, "icon": "640aa8c23c41fcbec2648e0d965ee7a2", "id": "425434240784662551", "name": "Assassin's Creed", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "e37329406832667b96fc630aa560aa74", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "15100", "sku": "15100"}], "type": 1, "verify_key": "a5222cab6067eb089de6e103dc960d9c429a829d84fe0d716057e45883dd1f9e"}, {"aliases": ["Assassin's Creed 2"], "description": "The second installment in the Assassin's Creed franchise follows the life of Ezio Auditore da Firenze as he seeks revenge on those who betrayed his family.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "assassinscreediigame.exe", "os": "win32"}], "flags": 0, "guild_id": "215838530889318401", "hook": true, "icon": "406816b22a78af9b22886bb7a9909503", "id": "425434695908458519", "name": "Assassin's Creed II", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "be5491e45569985a8f6dbe759a56f4b9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "33230", "sku": "33230"}], "type": 1, "verify_key": "da95486129b201b6033d20dc1a3b6b8ca263ae203063538137c128955542a666"}, {"description": "The fifth console entry in the Assassin's Creed franchise. It introduces the half-Native American, half-English Assassin Connor and is set in North America in the late eighteenth century amid the American Revolutionary War.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "ac3mp.exe", "os": "win32"}, {"is_launcher": false, "name": "ac3sp.exe", "os": "win32"}], "flags": 0, "guild_id": "215838530889318401", "hook": true, "icon": "6f10edc0dd66e2551f0ab9ecd545403a", "id": "425434783695503360", "name": "Assassin's Creed III", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "summary": "", "type": 1, "verify_key": "c24d449be43c9f9f153ead84a2df864a9b22efc65ad85e9c3fb170284e5f033f"}, {"description": "Assassin's Creed: Rogue takes place during the Seven Years' War in and around the American colonies. The protagonist, Shay Patrick Cormac, is an Assassin-turned-Templar who is hunting his former Brothers in the region.", "developers": [{"id": "521816515113385985", "name": "Ubisoft Bucharest"}], "executables": [{"is_launcher": false, "name": "acc.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6785f0222990268a44c8beeb976905f9", "id": "425434983080001556", "name": "Assassin's Creed Rogue", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "311560", "sku": "311560"}], "type": 1, "verify_key": "f7ce3c6ee0533c6d39fca6a15c38b4f92e1b91a19c079f664e8ec8acc9edf84b"}, {"description": "The Assassin's Creed series heads to Paris, France, amid the French Revolution. The player controls Arno Dorian, an Assassin, as he attempts to disrupt and destroy the true powers behind the Revolution.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "assassin's creed unity/acu.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0cfdd56b520027c42170e6ec2ffc87b2", "id": "425435152634609664", "name": "Assassin's Creed Unity", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "a3c6d44cb823f12a9c06773eb2f65fa7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "289650", "sku": "289650"}], "type": 1, "verify_key": "2688702f43c3cf8e6d2f6e4b6fa838cc3924ec304413c4863f1e67c9b9d7dac3"}, {"aliases": ["Assassin's Creed: Brotherhood"], "description": "The third installment in the Assassin's Creed franchise, this game's story picks up right after the events of Assassin's Creed II, showing Ezio Auditore traveling to Rome to recruit a new force of assassins. Brotherhood is the first game in the series to offer online multiplayer.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "acbsp.exe", "os": "win32"}, {"is_launcher": false, "name": "acbmp.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ba50472f858bbd79fcb1f24cb90079f3", "id": "425435232788021258", "name": "Assassin's Creed Brotherhood", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "48190", "sku": "48190"}], "type": 1, "verify_key": "89e8922aadc83c96c133cf278b6f7ef43a68557cabb38024f7ad20c3828643c4"}, {"aliases": ["Assassin's Creed: Revelations"], "description": "Assassin's Creed: Revelations is the fourth installment in the Assassin's Creed franchise and the final entry in Ezio Auditore's main storyline. A few levels also put players back in control of the original Assassin's Creed's Altair, and depict his rise to the Mentorship of the Crusades-era Brotherhood of Assassins.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "acrsp.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "cba9e70f7d9925da919af3eb66f15a39", "id": "425436928041680931", "name": "Assassin's Creed Revelations", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "a01a28a9a21c4f11dd2eb0e1239b6c05", "summary": "", "third_party_skus": [{"distributor": "uplay", "id": "40", "sku": "40"}, {"distributor": "steam", "id": "201870", "sku": "201870"}], "type": 1, "verify_key": "25171c7a701e21736ce3fd8f0efceb22f1640f63b81ef01a2ca6615cdcacd30e"}, {"aliases": ["Batman Arkham Knight", "Batman\u2122: Arkham Knight"], "description": "Arkham Knight, developer Rocksteady's return to the Batman series, takes place one year after Arkham City. It promises to expand the open world from the previous game, allowing players to drive the Batmobile through Gotham City's streets.", "developers": [{"id": "521816538664402945", "name": "Rocksteady Studios Ltd"}], "executables": [{"is_launcher": false, "name": "batmanak.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fa4ffa6c3b2d3a1d5955338c0b749473", "id": "425437076188561408", "name": "Batman: Arkham Knight", "publishers": [{"id": "521816538664402944", "name": "Rocksteady Studios"}, {"id": "521816499464306690", "name": "WB Games"}], "splash": "920a36188be4eef53469011b0dcf8071", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "208650", "sku": "208650"}], "type": 1, "verify_key": "610742e8ca9746731414b2f61c40cd1898573587b88b15cb31a269c2323e083c"}, {"aliases": ["Batman\u2122: Arkham Origins"], "description": "Two years after beginning his crime-fighting career, Batman faces his toughest challenge ever when the crime lord known as Black Mask hires the eight deadliest assassins in the DC Universe to kill the vigilante who has been interfering in his operations.", "developers": [{"id": "521816745686859780", "name": "WB Games Montr\u00e9al"}], "executables": [{"is_launcher": false, "name": "batmanorigins.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d469e494f3be7c84352a61b03e00d6f0", "id": "425437243822571550", "name": "Batman: Arkham Origins", "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "splash": "33100a4b567ba37f6d171a60ec8affa1", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "209000", "sku": "209000"}], "type": 1, "verify_key": "56ea74499dd29512fcd9ea5fa5db2da5aca01d52e5b1b1e536d11bd76e620574"}, {"aliases": ["Batman\u2122: Arkham VR"], "description": "A VR short story within the Arkham universe.", "developers": [{"id": "521816538664402945", "name": "Rocksteady Studios Ltd"}], "executables": [{"is_launcher": false, "name": "arkhamvr.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "07e5f4d1295868b5fb632eb1340297bc", "id": "425437344758366216", "name": "Batman: Arkham VR", "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "splash": "3d61a51df90e676b7142e41d911b29a1", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "502820", "sku": "502820"}], "type": 1, "verify_key": "768f7dd73b4f3fead317b3dbc0aed406803cc6e5471339e54dc64ce33d12ccc5"}, {"aliases": ["Beyond Good & Evil"], "description": "The story of a young, curious, and green-loving photojournalist named Jade, out to unravel an alien conspiracy on her home planet of Hillys.", "developers": [{"id": "521816592674193443", "name": "Ubisoft Montpellier Studios"}], "executables": [{"is_launcher": false, "name": "bge.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "eefa89c1b9b263bb24d2a7a15dece0d4", "id": "425437404854222858", "name": "Beyond Good and Evil", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "summary": "", "third_party_skus": [{"distributor": "uplay", "id": "232", "sku": "232"}], "type": 1, "verify_key": "cbe963248925167ac4f36a0cf72cc7c8d0c14d38df197c88ea32be18b50f508e"}, {"description": "A horror-themed FMV game for the PS2", "developers": [{"id": "521816711532511248", "name": "Digital Frontier Inc."}], "executables": [{"is_launcher": false, "name": "fearxp.exe", "os": "win32"}, {"is_launcher": false, "name": "fear.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "af77eebc7437a63c53969dc197eed6b6", "id": "425437484735004682", "name": "F.E.A.R.", "publishers": [{"id": "521816711532511245", "name": "Monolith Productions, Inc."}], "splash": "0aa575c520d8291413777c9db73160f2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "21090", "sku": "21090"}], "type": 1, "verify_key": "60451199c4dee1ae561fc396a773d999fcaf42cd31505bb3d723a5a4b3d1a4a3"}, {"description": "Project Origin is the direct sequel to Monolith's spooky first-person shooter, F.E.A.R.", "developers": [{"id": "521816711532511245", "name": "Monolith Productions, Inc."}], "executables": [{"is_launcher": false, "name": "fear2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "49270d65bda8df8d132a683dbbc0b746", "id": "425437598836719616", "name": "F.E.A.R. 2: Project Origin", "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "16450", "sku": "16450"}], "type": 1, "verify_key": "1095ca556d11df4c0a9715bf700f323502a7c03aa54a28e32df940b4dc24fd88"}, {"description": "Developed by Day 1 Studios, F.3.A.R. (pronounced \"Fear Three\") is the final chapter in the F.E.A.R. franchise and continues the twisted story of Alma Wade and her two sons, Paxton Fettel and the Point Man.", "developers": [{"id": "521816499464306691", "name": "Wargaming West"}], "executables": [{"is_launcher": false, "name": "f.e.a.r. 3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a22cc1c74c3ac7fb8ef7d40a06bafbdc", "id": "425437856169721856", "name": "F.E.A.R. 3", "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "splash": "3c3bfd40f9e800fcee744a2475f66ce8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "21100", "sku": "21100"}], "type": 1, "verify_key": "619ff56fd9b19a392c96a6591b51d89b91620e68f922fcddc3be99b54237a3d0"}, {"description": "Far Cry is a first-person shooter PC game developed by Crytek Germany. Meet Jack Carver, who is having a rough day - they blew up his boat, they chased him into the jungle, and now they're shooting at him. Too bad they don't know Jack.", "developers": [{"id": "521816652262670336", "name": "Crytek GmbH"}], "executables": [{"is_launcher": false, "name": "farcry.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4cb92e4aaa6b2a94c57b81a600f0eaae", "id": "425437906363219968", "name": "Far Cry", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "7e0f032b1ee992cea47c76db11c455cd", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "13520", "sku": "13520"}], "type": 1, "verify_key": "20b9cdc173cc27e3793e6b265d0551fd5a5879895fb5689f797f0c9226ce204b"}, {"description": "The sequel to the original Far Cry dispenses with Jack Carver, and moves the action to a war-consumed Africa complete with an open-ended storyline involving civil war, several hours of missions, heated gunplay, and a slew of dynamic elements powered by a new engine.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "farcry2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ab895e7c1160b13f05056d44142a1c27", "id": "425437961669181477", "name": "Far Cry 2", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "146f03c2cf904500a86bff3b34e150f1", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "19900", "sku": "19900"}], "type": 1, "verify_key": "b543876ab1538a56b3cd883d716c922532d866e2d12d0f3a06e6aa03e2b8f68a"}, {"description": "Far Cry 4 puts the player in the role of Ajay Ghale and pits him against a deadly antagonist and an even deadlier environment. Caught in the middle of a brutal Civil War while fulfilling his mother's dying wish, Ghale must fight back against the oppression of Kyrat's leader, Pagan Min, while also battling the ruthlessness of the jungle.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "farcry4.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e4e9a5a656347cfe99fb4913f8517305", "id": "425438134709518336", "name": "Far Cry 4", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "5c898c1e87b9f673e1c68064c51d57d1", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "298110", "sku": "298110"}], "type": 1, "verify_key": "9f9a098d593f16bedcaedb5677d506761e77f870c906f02d588ae201409c40b5"}, {"description": "An open-world first-person shooter set in central Europe around 10,000 BC.", "developers": [{"id": "521816631782014982", "name": "Ubisoft Toronto Studios"}], "executables": [{"is_launcher": false, "name": "fcprimal.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5193d4e24c63f8ee7afaa92c84473c79", "id": "425438207631556608", "name": "Far Cry Primal", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "afd0bb92bc3775eb16edc12c162f59eb", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "371660", "sku": "371660"}], "type": 1, "verify_key": "b275097d616df7fdba759efc8c2db6d6bf59ea338d7c043c58d273dfafa6a62d"}, {"aliases": ["For Honor", "ForHonor"], "description": "A third-person melee-focused game featuring knights, samurai, and vikings going to war with each other.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "forhonor.exe", "os": "win32"}, {"is_launcher": false, "name": "for honor/forhonor.exe", "os": "win32"}], "flags": 0, "guild_id": "275420710170525697", "hook": true, "icon": "02e63008d18580c53a2882ae38d71609", "id": "425438403819995145", "name": "For Honor", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}, {"id": "521816654095843331", "name": "Ubisoft Montreal"}, {"id": "521816654095843331", "name": "Ubisoft Montreal"}], "splash": "0c409f0ed743377fc62c475ca082b689", "summary": "", "third_party_skus": [{"distributor": "uplay", "id": "569", "sku": "569"}, {"distributor": "steam", "id": null, "sku": null}, {"distributor": "steam", "id": "304390", "sku": "304390"}], "type": 1, "verify_key": "1587c85f418cdf8e0958583c3d084ad560e4ee76a320d410fc868c5307c96659"}, {"description": "", "executables": [{"is_launcher": false, "name": "injustice.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c12b936ead4ea00d1f2a73ebcdcea644", "id": "425438526491066388", "name": "Injustice: Gods Among Us Ultimate Edition", "publishers": [{"id": "521816697448038412", "name": "NetherRealm Studios"}], "splash": "da4ca6fa5b64d31a6847242308ffa226", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "242700", "sku": "242700"}], "type": 1, "verify_key": "2aec86e78dba52557a3f5cb0cc257e228fb3fa7c16f9c9db5a1ad76d1aa91fbc"}, {"description": "Just Dance 2017 is to be available for all modern major consoles as well as a few legacy platforms.", "developers": [{"id": "521816562068488195", "name": "Ubisoft Paris Studios"}], "executables": [{"is_launcher": false, "name": "jd2017.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d666c1b1e5b9b31b883e8539f9399a12", "id": "425438596883939328", "name": "Just Dance 2017", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "c98e26d47727e01e9218a5193cbc6b2d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "446560", "sku": "446560"}], "type": 1, "verify_key": "e8aff0b78f1ba4e6dc0589a01f3c79e77351d6ad028ca2b3cfab0871d2ddaf18"}, {"aliases": ["LEGO - The Hobbit", "LEGO? The Hobbit?"], "description": "LEGO returns to Middle-earth with this video game adaptation of the first two Hobbit movies.", "developers": [{"id": "521816611506880523", "name": "TT Games"}], "executables": [{"is_launcher": false, "name": "legohobbit.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "17fd88e98fa215635d3f4e79b8de7773", "id": "425439134551900190", "name": "LEGO\u00ae The Hobbit\u2122", "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "splash": "ba120bbdbee29e925c6d78bc31355a51", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "285160", "sku": "285160"}], "type": 1, "verify_key": "339c5c0553777ef0f5a481b1abdb6d2b0f94b72ac2f7ca0e8b915378eb2f45a0"}, {"aliases": ["LEGO Worlds", "LEGO? Worlds"], "description": "An open world building game from Traveler's Tales.", "developers": [{"id": "521816542707449856", "name": "Traveller's Tales Ltd."}], "executables": [{"is_launcher": false, "name": "lego_worlds_dx11.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "bc64a4b5119c30732e23cd764f4481b5", "id": "425439198733008896", "name": "LEGO\u00ae Worlds", "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "splash": "f8bf6fe02a3aa31ca0c93fd3f4701e0c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "332310", "sku": "332310"}], "type": 1, "verify_key": "419e1cc47f1b51f84b1aa1faa60a2ae6e8daa1ee946499e615ffbd36856ebda9"}, {"description": "", "developers": [{"id": "521816537192202241", "name": "Avalanche Studios"}], "executables": [{"is_launcher": false, "name": "madmax.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "431d145eebad4e850edac0465b15eaaa", "id": "425439256001904650", "name": "Mad Max", "primary_sku_id": "492042542922203156", "publishers": [{"id": "521816537192202241", "name": "Avalanche Studios"}, {"id": "521816499464306690", "name": "WB Games"}], "slug": "mad-max", "splash": "cf4f7d06e1580e2aac5fad882a0b3984", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "234140", "sku": "234140"}, {"distributor": "discord", "id": "492042542922203156", "sku": "492042542922203156"}], "type": 1, "verify_key": "29c8955e17ac15524a29a3cd1651cc6ed68ceef8fd0b91fd6a4383944082914c"}, {"description": "One of the goriest fighting game franchises returns to its roots, introducing a new story that re-tells the events of the first three Mortal Kombat games (with a unique twist).", "developers": [{"id": "521816697448038412", "name": "NetherRealm Studios"}], "executables": [{"is_launcher": false, "name": "mkke.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "441f90c567827dcdf1ce84591d431486", "id": "425439413972238366", "name": "Mortal Kombat Komplete Edition", "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "splash": "d9a56b6c0df4912d4434abbac6813a18", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "237110", "sku": "237110"}], "type": 1, "verify_key": "de70a173b8d248755f7d53f0671b235c36bfed555ce9565f415977e2dbd9f47c"}, {"description": "The tenth installment of the bloody and storied fighting game franchise picks up decades after the events of the 2011 franchise re-boot, as new and returning kombatants fight throughout the realms over the power of an imprisoned evil.", "developers": [{"id": "521816697448038412", "name": "NetherRealm Studios"}], "executables": [{"is_launcher": false, "name": "mk10.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3935ccd262aca4bd09dd489c6f6cc3d4", "id": "425439470075117573", "name": "Mortal Kombat X", "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "splash": "45bd8d3915f1fa18ac6950ec9ed738ef", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "307780", "sku": "307780"}], "type": 1, "verify_key": "5010dda76bddc89b420eefcf0ca94ef71021159765930cad0dc1f14279bdbf1b"}, {"description": "Rayman Legends is the sequel to 2011's Rayman: Origins.", "developers": [{"id": "521816592674193443", "name": "Ubisoft Montpellier Studios"}], "executables": [{"is_launcher": false, "name": "rayman legends.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5493bd91609b35e3104c55a7405ae00d", "id": "425439545983500288", "name": "Rayman Legends", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "a4dcb8a0883a315ca5a2f9925edbb982", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "242550", "sku": "242550"}], "type": 1, "verify_key": "b47104aa50d966eb4c14b1a9dbf2d6488b06ded6e87892d12589959b0287e013"}, {"description": "Officially revealed at Ubisoft's 2010 E3 press briefing, Rayman Origins is a new 2D Rayman game developed by Michel Ancel and a small team, taking the series back to its roots.", "developers": [{"id": "521816592674193443", "name": "Ubisoft Montpellier Studios"}], "executables": [{"is_launcher": false, "name": "rayman origins.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "30d08727c0ce27098c125f18d4880877", "id": "425439593882714133", "name": "Rayman Origins", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "c2474f6caa7d5654ffac42858377258d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "207490", "sku": "207490"}], "type": 1, "verify_key": "3089e595ed57be6e1d0f46fe72890fc9b7cb09b3fbe87fbd9bbbdb9c19b146a5"}, {"aliases": ["Rocksmith2014"], "description": "The second edition of Rocksmith from Ubisoft features a new soundtrack, enhancements to the user interface, and a slew of new games and lessons aimed at helping learn how to play the guitar.", "developers": [{"id": "521816683913150494", "name": "Ubisoft San Francisco"}], "executables": [{"is_launcher": false, "name": "rocksmith2014.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0d907cdfb235e57a69d737bccb692959", "id": "425439633917214720", "name": "Rocksmith 2014", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "ebfd43289e349591b8ea93179e183cba", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "221680", "sku": "221680"}], "type": 1, "verify_key": "95b649f1112bb48f9ee162dbaae51cc985fd98885309e588a41e291192ec1412"}, {"description": "The fourth game in the Scribblenauts series focuses on cooperative multiplayer and content sharing, while further increasing the number of possible objects players can create.", "developers": [{"id": "521816570029146112", "name": "5th Cell Media"}], "executables": [{"is_launcher": false, "name": "scribblenauts/scribble.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "64015a00f5874bffc7e764f8b3880968", "id": "425439683938353162", "name": "Scribblenauts Unlimited", "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "splash": "7a0c5af280175deb1953ff4a39151b49", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "218680", "sku": "218680"}], "type": 1, "verify_key": "a2fd73818586a954d8062d36ad981d37458c1c85c700f8e1faa1876c8449429f"}, {"description": "A snowboarding, skiing, wingsuit, and paragliding game from Ubisoft.", "developers": [{"id": "521816681228664844", "name": "Ubisoft Annecy Studios"}], "executables": [{"is_launcher": false, "name": "steep.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5ac7fe88357c3674b1862b2eb10f03b6", "id": "425439790746566666", "name": "Steep", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}, {"id": "521816681228664842", "name": "Ubisoft Annecy"}], "splash": "17768a57cce02340e7559b2404e7a41b", "summary": "", "third_party_skus": [{"distributor": "uplay", "id": "3279", "sku": "3279"}, {"distributor": "steam", "id": "460920", "sku": "460920"}], "type": 1, "verify_key": "9add9b6a4c8f23a18a3721709b0bf76f23a715b9c2f2b6a7a560d139ddd9fd35"}, {"description": "A single-player and cooperative driving game that takes place throughout the United States, developed by Ivory Tower.", "developers": [{"id": "521816510172233759", "name": "Ubisoft Reflections"}], "executables": [{"is_launcher": false, "name": "thecrew.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1ff6b6d78f61296f48f8a23ace11dea5", "id": "425439876939382804", "name": "The Crew", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "1c8e4c58225aae51e8d0321ee47fe1ca", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "241560", "sku": "241560"}], "type": 1, "verify_key": "778c811b8393fb5382b0fe220270742d0c4a4bed53029973d9b8b795c7855dfa"}, {"aliases": ["The LEGO? Movie - Videogame\t"], "description": "An Action Adventure game based on The LEGO Movie and developed in the style of other TT Games' LEGO videogames.", "developers": [{"id": "521816611506880523", "name": "TT Games"}], "executables": [{"is_launcher": false, "name": "legoemmet.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "913789012e5d14d55307532786a95ab7", "id": "425439950553481216", "name": "The LEGO\u00ae Movie - Videogame", "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "splash": "61ef09abf7fa01cdf212157ed4ebd14e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "267530", "sku": "267530"}], "type": 1, "verify_key": "e8c80bcc88ab6d4de43ed34f29e0cfb4e11c7645c711334572f6988d5ab5057a"}, {"aliases": ["Tom Clancy's Ghost Recon: Future Solider"], "description": "Future Soldier is the first in Ubisoft's long-running Ghost Recon series of tactical shooters to take place in the near-future.", "developers": [{"id": "521816562068488195", "name": "Ubisoft Paris Studios"}], "executables": [{"is_launcher": false, "name": "future soldier dx11.exe", "os": "win32"}, {"is_launcher": false, "name": "future soldier.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "dea53752ca272f87e4b25beeee27718b", "id": "425440004983226378", "name": "Tom Clancy's Ghost Recon Future Soldier", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "b788de0c2bbab4acfb3c620d92c5d047", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "212630", "sku": "212630"}], "type": 1, "verify_key": "7e389dbb3f1d57583b5f6d9156269e98e7ec4c195cb2782cf3bebb5bf6c330dd"}, {"description": "First entry in the Splinter Cell series. You are Sam Fisher, a highly-trained covert operative working for a division of the NSA known as Third Echelon. As Sam, you must infiltrate heavily guarded areas in order to combat the threat of terrorism.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "splintercell.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c1aa2bfe79505a17f2d44b0974995d3a", "id": "425440094263050250", "name": "Tom Clancy's Splinter Cell", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "425be4ad06ce760463c952d0c7d6ebbf", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "13560", "sku": "13560"}], "type": 1, "verify_key": "15423c4c13da0042fa772520d5e84820b309d9a9c2d4be31b4ddd87018e4c142"}, {"aliases": ["Tom Clancy's Splinter Cell: Blacklist"], "description": "The sixth installment of the Tom Clancy's Splinter Cell series and follows the events after Splinter Cell: Conviction.", "developers": [{"id": "521816631782014982", "name": "Ubisoft Toronto Studios"}], "executables": [{"is_launcher": false, "name": "blacklist_dx11_game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d175707cb04eeaa0832d8f6ec571dc6e", "id": "425440144829448192", "name": "Tom Clancy's Splinter Cell Blacklist", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "ca0a3a1106e82d8ae37568bc332e02d8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "235600", "sku": "235600"}], "type": 1, "verify_key": "8bdeb7839c0498992277031fb7fedb6ad9570f1430e78b77b08ef681b91cfa6e"}, {"description": "Compete to achieve the fastest times in four crazy environments in this 2016 console-focused entry in the long-running TrackMania series.", "developers": [{"id": "521816570029146113", "name": "Nadeo"}], "executables": [{"is_launcher": false, "name": "trackmaniaturbo.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e490010bb287fd3fd5b08c84a364df32", "id": "425440195966664704", "name": "Trackmania Turbo", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "f78f2aa7b83d36457f6080dfbb1e6d2f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "375900", "sku": "375900"}], "type": 1, "verify_key": "ad6efba36eec8a5ca065f76ae9a27591e2fbea515991942e88def4ca2f6fa857"}, {"description": "RedLynx takes their bike-platforming franchise to the future (and PlayStation) with the addition of a physics-based trick system.", "developers": [{"id": "521816618024828941", "name": "RedLynx Ltd"}], "executables": [{"is_launcher": false, "name": "trials_fusion.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "437a7de5e18bdc15e4589c1214f9b5c1", "id": "425440259539599390", "name": "Trials Fusion", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "summary": "", "type": 1, "verify_key": "bde693fcad6ee5f679602b7137430161c09e72f85c531dc9b91b798fd0a65b2e"}, {"aliases": ["Watch Dogs"], "description": "A third-person open-world game from Ubisoft, set in a dark alternate version of the US where corporations track and catalog all online behavior over a vast data network. A vigilante group called the Watch_Dogs hacks into this data, using it to hunt criminals.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "watch_dogs.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "cdc7537877210500b250c849478329f2", "id": "425440319509626881", "name": "Watch_Dogs", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}, {"id": "521816510730338325", "name": "Ubisoft"}], "splash": "d58d47807f14a17fce011e04de7f8283", "summary": "", "third_party_skus": [{"distributor": "uplay", "id": "274", "sku": "274"}, {"distributor": "steam", "id": "243470", "sku": "243470"}], "type": 1, "verify_key": "cc5d3304bb7ee399254886718ef15654ff7a77da54fbbae77edc348f7581f9b9"}, {"aliases": ["Watch Dogs 2"], "description": "The sequel to Watch Dogs moves to San Francisco with a new protagonist.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "watchdogs2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5541989873e697e0648aa92903db945a", "id": "425440363688493066", "name": "Watch_Dogs 2", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "4fbf33a88bf3e8cff7af1a8a04f10c68", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "447040", "sku": "447040"}], "type": 1, "verify_key": "ca1d2bb338a836bcccff593fbd803e25b6f285b69c0e72be984dfdde62a5e5a6"}, {"aliases": ["Darksiders"], "description": "", "developers": [{"id": "521816508624535567", "name": "Vigil Games"}], "executables": [{"is_launcher": false, "name": "darksiderspc.exe", "os": "win32"}, {"is_launcher": false, "name": "darksiders1.exe", "os": "win32"}], "flags": 0, "guild_id": "411080228052533250", "hook": true, "icon": "ae4566f8ee4e7adbe9e83a98a372850b", "id": "425440430772060160", "name": "Darksiders Warmastered Edition", "primary_sku_id": "471030197421080597", "publishers": [{"id": "521816508167487498", "name": "THQ Nordic"}], "slug": "darksiders-warmastered-edition", "splash": "560b3efb9cb16f359bf77f677e21f65b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "462780", "sku": "462780"}, {"distributor": "discord", "id": "471030197421080597", "sku": "471030197421080597"}], "type": 1, "verify_key": "7780f66ea05dbb0178fbaed1a769252ecb5eeec89b73ead1c36e5080b6958a9d"}, {"aliases": ["Elex"], "description": "A new open world RPG by Piranha Bytes, the creators of Gothic and Risen series.", "developers": [{"id": "521816524403638275", "name": "Pluto 13 GmbH"}], "executables": [{"is_launcher": false, "name": "elex.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "532008b3bf11c69516d3eaebe8e25a87", "id": "425440477882351626", "name": "ELEX", "primary_sku_id": "489226782705319951", "publishers": [{"id": "521816508167487498", "name": "THQ Nordic"}], "slug": "elex", "splash": "74a3e7a8af0d513f67f20424c6013d14", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "489226782705319951", "sku": "489226782705319951"}, {"distributor": "steam", "id": "411300", "sku": "411300"}], "type": 1, "verify_key": "605a2b9659fb4e13aaac58a41519b1678547032680eba7b5b19e60de9920c0cd"}, {"aliases": ["Fade to silence"], "description": "A post-apocalyptic survival game from Black Forest Games.", "developers": [{"id": "521816668666855437", "name": "Black Forest Games"}], "executables": [{"is_launcher": false, "name": "whitesilence-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "44b5aaf518eb69c430da40874e5fe4c8", "id": "425440525286637577", "name": "Fade to Silence", "publishers": [{"id": "521816508167487498", "name": "THQ Nordic"}], "splash": "1f95e8b860d51dae871aa12f8c6b42f2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "706020", "sku": "706020"}], "type": 1, "verify_key": "feae62b96c5511bc2d06c0fedd0d22ceb87c607b538e1d828676654cb9d1a806"}, {"description": "Impossible Creatures is a real-time strategy game from Relic that is based on fighting genetically modified animals created by the player, allowing for bizarre combinations such as an ant and a wolf, or killer whale and snowy owl.", "developers": [{"id": "521816593798397970", "name": "Relic Entertainment"}], "executables": [{"is_launcher": false, "name": "impossible creatures/ic.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "dd840d9c6c35f235d284ccf81b6bbfd1", "id": "425440563337232394", "name": "Impossible Creatures", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}], "splash": "175ccf6d02edd1add63fa7ab9eafe4d5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "324680", "sku": "324680"}], "type": 1, "verify_key": "1ecadcda3326a2b532186ea21b2fe41b659283b7de8f5454a64a048daeaaaa0d"}, {"aliases": ["Ori And The Blind Forest: Definitive Edition", "Ori and the Blind Forest"], "description": "", "executables": [{"is_launcher": false, "name": "oride.exe", "os": "win32"}, {"is_launcher": false, "name": "ori.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a3b78d910a0b76981ed977437ebc970c", "id": "425440642173239296", "name": "Ori and the Blind Forest: Definitive Edition", "publishers": [{"id": "521816682684088330", "name": "Moon Studios GmbH"}], "splash": "a8a193d8cd3b093118594bfc6a16c747", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "387290", "sku": "387290"}], "type": 1, "verify_key": "70a1516b9d1d643e3e274ef67b343f8dc28a791b0e5bdc6c8bf2ac7359079d76"}, {"description": "", "developers": [{"id": "521816541323329560", "name": "Deep Silver Volition, Inc."}], "executables": [{"is_launcher": false, "name": "redfaction.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "582140ee4c9b56793fb40d85c998d7b9", "id": "425440700335915028", "name": "Red Faction", "primary_sku_id": "489074996837220354", "publishers": [{"id": "521816550596935692", "name": "THQ"}], "slug": "red-faction", "splash": "77c0df2c17e2ba14a8f6b531f4c357c0", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "489074996837220354", "sku": "489074996837220354"}, {"distributor": "steam", "id": "20530", "sku": "20530"}], "type": 1, "verify_key": "7827ae62964020056728fecb0603f82658ffaade1150d90755d0ec246ddd430c"}, {"description": "", "executables": [{"is_launcher": false, "name": "spellforce2.exe", "os": "win32"}], "flags": 0, "guild_id": "309836623594520576", "hook": true, "icon": "2777632d512fc238e27b26a618c5d60d", "id": "425440739166650368", "name": "SpellForce 2 - Anniversary Edition", "primary_sku_id": "471030686954946560", "publishers": [{"id": "521816508167487498", "name": "THQ Nordic"}], "slug": "spellforce-2-anniversary-edition", "splash": "48583a225ed646556efa2cdf016b4fe6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "39550", "sku": "39550"}, {"distributor": "discord", "id": "471030686954946560", "sku": "471030686954946560"}], "type": 1, "verify_key": "9b93644fe1f6e8231c8ea94bb4c3df9c1733089f04eabaea9dfe9752b8138add"}, {"description": "The Guild 3 is a Middle Ages simulator from GolemLabs and THQ Nordic.", "developers": [{"id": "521816601691947039", "name": "GolemLabs"}], "executables": [{"is_launcher": false, "name": "guild3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ef98d1369c31a40dc864f919a9bdc419", "id": "425440832238387200", "name": "The Guild 3", "primary_sku_id": "489872977685381120", "publishers": [{"id": "521816508167487498", "name": "THQ Nordic"}], "slug": "the-guild-3", "splash": "d66aeef3d7f62fa9a1218a2597e7aa1b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "311260", "sku": "311260"}, {"distributor": "discord", "id": "489872977685381120", "sku": "489872977685381120"}], "type": 1, "verify_key": "3c05adead66b35cc4833174482ea300ea94d259029e08792a10359d6090b333c"}, {"description": "A first-person mystery set in the Wyoming wilderness developed by Campo Santo, where the protagonist's only lifeline, emotionally and physically speaking, is the person on the other end of a handheld radio.", "developers": [{"id": "521816602132611104", "name": "Campo Santo"}], "executables": [{"is_launcher": false, "name": "firewatch.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fcd536fe0d0bf317ece9c7063d6a64cb", "id": "425440941793345536", "name": "Firewatch", "publishers": [{"id": "521816602132611103", "name": "Panic"}], "splash": "4dcec0923641a6a3b869e5d229a08d8b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "383870", "sku": "383870"}], "type": 1, "verify_key": "8b62c7d46cd27f3aa8eacbf3c5edf72f672895b4fcc4f3420bfa747cdee1182c"}, {"aliases": ["Witness"], "description": "From the creator of Braid, The Witness is an exploration-focused puzzle game that takes place on an uninhabited island.", "developers": [{"id": "521816685938868246", "name": "Thekla Inc"}], "executables": [{"is_launcher": false, "name": "witness64_d3d11.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "31edf4512403cd69f8c2ab5593fa229e", "id": "425441014292152320", "name": "The Witness", "publishers": [{"id": "521816685938868246", "name": "Thekla Inc"}], "splash": "a4f9731cdfedf2499b0e10cb3752de96", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "210970", "sku": "210970"}], "type": 1, "verify_key": "a524f7aeaf153456556cad7af1942d35a3a3f6ab7d28a215d43f09ab53ecba91"}, {"aliases": ["Principle"], "description": "A first-person puzzle game with a focus on philosophical quandaries.", "developers": [{"id": "521816609518518284", "name": "Croteam Ltd."}], "executables": [{"is_launcher": false, "name": "talos.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1e1305fb46a46a2748a56c3ff9bfabcb", "id": "425441094482919464", "name": "The Talos Principle", "publishers": [{"id": "521816510730338331", "name": "Devolver Digital"}], "splash": "8989ed73dab615a59d2e7249a7ef7b8f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "257510", "sku": "257510"}], "type": 1, "verify_key": "0e7bf34204af9ddb1f779d8b423518691ebe103bed8c0484d513b469d93e80fc"}, {"description": "An action RPG set in a dystopian sci-fi future from Deck 13, developers of Lords of the Fallen.", "developers": [{"id": "521816580838129676", "name": "DECK13 Interactive GmbH"}], "executables": [{"is_launcher": false, "name": "thesurge.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7ddee44927e030228eb282bd2b35ef9d", "id": "425441321512075264", "name": "The Surge", "publishers": [{"id": "521816537192202247", "name": "Focus Home Interactive"}], "splash": "77a8cae1085827de2555f66c0bca7775", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "378540", "sku": "378540"}], "type": 1, "verify_key": "0a5591649d5bf47b4cff2edc0226de61e29e2a6619f16d80bc28c2606ae2dc98"}, {"description": "A Sci-Fi Action-RPG from co-creators of Diablo and Torchlight, featuring heavy sandbox elements and large-scale ship battles.", "developers": [{"id": "521816630808805391", "name": "Double Damage Games"}], "executables": [{"is_launcher": false, "name": "rebelgalaxygog.exe", "os": "win32"}, {"is_launcher": false, "name": "rebelgalaxysteam.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "442c043208bcfb227c9a3d6b7b677456", "id": "425441408242155530", "name": "Rebel Galaxy", "publishers": [{"id": "521816630808805391", "name": "Double Damage Games"}], "splash": "51a2f4f6ab205a58c6d69d6faccdd1c1", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "290300", "sku": "290300"}], "type": 1, "verify_key": "4e24ab43bf027057a9e6c5cf3c1088cf06ed949bff7c68c7c2de9a171ed9b425"}, {"aliases": ["Fractured Space ?"], "description": "Multiplayer space combat game.", "developers": [{"id": "521816731715502082", "name": "Edge Case Games"}], "executables": [{"is_launcher": false, "name": "fractured space.exe", "os": "win32"}, {"is_launcher": false, "name": "spacegame-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c3bfa7ac4abb97fd2cce7eb72fb86bf7", "id": "425441448410873866", "name": "Fractured Space", "publishers": [{"id": "521816731715502080", "name": "Edge Case Games Ltd."}, {"id": "521816731715502082", "name": "Edge Case Games"}], "splash": "8effeaf44cf04cf4b8c6146748f34823", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "310380", "sku": "310380"}], "type": 1, "verify_key": "e4315b0bc0af62b4f6833646879916c88ba0f5cde9f9a644b9eb37496f517d67"}, {"bot_public": false, "bot_require_code_grant": false, "cover_image": "28744429dcd2b146f404ecf17b3ef01d", "description": "RTS FOR THE NEXT GENERATION\n\nColonize solar systems, annihilate homeworlds, and exterminate your foes in epic interplanetary battles with multiple players and thousands of units. Planetary Annihilation is a next-generation RTS that takes the genre to a planetary scale.", "developers": [{"id": "547963908208459806", "name": "Planetary Annihilation Inc"}], "executables": [{"is_launcher": false, "name": "pa.exe", "os": "win32"}], "flags": 0, "guild_id": "467998465004273674", "hook": true, "icon": "28744429dcd2b146f404ecf17b3ef01d", "id": "425441516354273280", "name": "Planetary Annihilation: TITANS", "publishers": [{"id": "547963908208459806", "name": "Planetary Annihilation Inc"}], "splash": "59c8f63a9cab297d55aacc9c9db12e6d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "386070", "sku": "386070"}], "type": 1, "verify_key": "cece0752c5c71cfcf936fd844297bb571ecf37833482a7658c9b242e15c63e93"}, {"aliases": ["HyperLightDrifter"], "description": "A 2D action-RPG inspired by A Link to the Past and Diablo developed by Heart Machine.", "developers": [{"id": "521816517952929792", "name": "Heart Machine"}], "executables": [{"is_launcher": false, "name": "hyperlightdrifter.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4f05422fcb79504ca6792192d36dba2c", "id": "425441571656433664", "name": "Hyper Light Drifter", "publishers": [{"id": "521816517952929792", "name": "Heart Machine"}], "splash": "9dd841bd58c66e1ae1b49968e563015b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "257850", "sku": "257850"}], "type": 1, "verify_key": "56f006a24fdd9fa50b5aff8cb9a8d303e56b321861395286dfd1de629ddf9126"}, {"description": "Stonehearth is a game about exploration and survival in an epic fantasy setting.", "developers": [{"id": "521816764376678400", "name": "Radiant Entertainment"}], "executables": [{"is_launcher": false, "name": "stonehearth.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b6eb9a426b6c31a71a340d86c94582ae", "id": "425441650878316564", "name": "Stonehearth", "publishers": [{"id": "521816764376678400", "name": "Radiant Entertainment"}], "splash": "eeca2eeb8d858f7e1c116833f1804ee8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "253250", "sku": "253250"}], "type": 1, "verify_key": "8127bfc77dd9156e1866f01b14864c9ba03ce7a489b00963ba04657ef51e5dd5"}, {"description": "A first-person adventure game by Cyan Worlds, in the vein of Myst.", "developers": [{"id": "521816757548351500", "name": "Cyan"}], "executables": [{"is_launcher": false, "name": "obduction-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f6efaa5341d1fbb5e762efb93f9ffd39", "id": "425441688152965142", "name": "Obduction", "publishers": [{"id": "521816757548351500", "name": "Cyan"}], "splash": "e16c24d1ea4926cef4e7054b7dfc6b33", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "306760", "sku": "306760"}], "type": 1, "verify_key": "716120f4c4a364b407a3afcc52ea0e707bac71f17da0670815375ea5ddd4514f"}, {"aliases": ["Shovel knight"], "description": "An action-platformer paying homage to 8-bit classics like Mega Man and Castlevania. It is developed by a small group of former WayForward employees, with funding through Kickstarter.", "developers": [{"id": "521816789449965597", "name": "Yacht Club Games"}], "executables": [{"is_launcher": false, "name": "shovelknight.app", "os": "darwin"}, {"is_launcher": false, "name": "shovelknight.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "16e0044c533a8a0fb0a57d6d236fea59", "id": "425441726736629760", "name": "Shovel Knight", "publishers": [{"id": "521816789449965597", "name": "Yacht Club Games"}], "splash": "96d220959f64e3e2a7f0d84da14a587c", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "250760", "sku": "250760"}], "type": 1, "verify_key": "d23357dd2b7ee3f2c67c7bf6281b68f525bdeb1522a408de42265c3d01b3faa7"}, {"aliases": ["Battle Chasers Nightwar", "Battle Chasers: Night War"], "description": "", "developers": [{"id": "521816653646790670", "name": "Airship Syndicate"}], "executables": [{"is_launcher": false, "name": "battle chasers nightwar/bc.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9c8c849b7fe037ee9e39238549f6f80b", "id": "425441774450901002", "name": "Battle Chasers: Nightwar", "primary_sku_id": "488811098242547739", "publishers": [{"id": "521816508167487498", "name": "THQ Nordic"}], "slug": "battle-chasers-nightwar", "splash": "f50060c4851bf86503acf77a0ae7498f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "451020", "sku": "451020"}, {"distributor": "discord", "id": "488811098242547739", "sku": "488811098242547739"}], "type": 1, "verify_key": "91d6ee00ce98701ef24fed34ade36387b5815ab3f69768d823a9c83864c46cc8"}, {"description": "Upcoming ARPG that is currently available on Steam Early Access.", "developers": [{"id": "521816562068488199", "name": "Wolcen Studio"}], "executables": [{"is_launcher": false, "name": "wolcen.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fc15f7d390521838adfd27992999e027", "id": "425441823754813455", "name": "Wolcen: Lords of Mayhem", "publishers": [{"id": "521816562068488199", "name": "Wolcen Studio"}], "splash": "a8b6240a51708e2409e5cc9f22d908b2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "424370", "sku": "424370"}], "type": 1, "verify_key": "7b4248e07356dcf3127f58e5237c3e009092bcf575e4cccde29e66be66decbfe"}, {"description": "A sci-fi sandbox survival game that lets you build your own contraptions to explore procedurally generated planets.", "developers": [{"id": "521816598017867787", "name": "Craneballs Studio"}], "executables": [{"is_launcher": false, "name": "planetnomads.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5ee8b8c83bbf7e0728c95360153e1cf8", "id": "425441961877700618", "name": "Planet Nomads", "publishers": [{"id": "521816598017867786", "name": "Craneballs"}], "splash": "a126a5f9a7a30aa126d339a4c499f189", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "504050", "sku": "504050"}], "type": 1, "verify_key": "434beca0defbfbd85ea57301be781141b112d46e27d3682b34dfc3316865dd67"}, {"aliases": ["Agents Of Mayhem\t"], "description": "Inspired by Saturday-morning cartoons, this single-player spin-off of the Saints Row series pits a roaming squad of anti-heroes against a massive evil organization in near-future South Korea.", "developers": [{"id": "521816541323329560", "name": "Deep Silver Volition, Inc."}], "executables": [{"is_launcher": false, "name": "aom_release_final.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "86aa0692b5ea4b25e9d2f5e91d0e2dd7", "id": "425442005766766592", "name": "Agents of Mayhem", "publishers": [{"id": "521816524403638274", "name": "Deep Silver"}], "splash": "37f2df53afef71623c2d7d2a1376972c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "304530", "sku": "304530"}], "type": 1, "verify_key": "6d0597a34ec0b29dcabef4245883b34b2fdcbaf9361a42e891ef179c91dca482"}, {"aliases": ["Dead Island"], "description": "", "executables": [{"is_launcher": false, "name": "deadislandgame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e218c5664665309e8d9b65caa6377d5c", "id": "425442043616034816", "name": "Dead Island Definitive Edition", "primary_sku_id": "484131038818205696", "publishers": [{"id": "521816514106621962", "name": "Techland"}], "slug": "dead-island-definitive-edition", "splash": "a155531126afcf07015e9c44fea8c148", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "383150", "sku": "383150"}, {"distributor": "discord", "id": "484131038818205696", "sku": "484131038818205696"}], "type": 1, "verify_key": "92ef6a48418c31655045574e1af563bf816d6491dd41692fff364d892607223a"}, {"aliases": ["Dead Island Riptide"], "description": "", "executables": [{"is_launcher": false, "name": "deadislandriptidegame.exe", "os": "win32"}, {"is_launcher": false, "name": "deadislandgame_x86_rwdi.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3c9975f18cfe6924d175bbce5e4c10f2", "id": "425442091666243594", "name": "Dead Island Riptide Definitive Edition", "publishers": [{"id": "521816514106621962", "name": "Techland"}], "splash": "42cee9da4631b4c8ad06149e8bebde49", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "383180", "sku": "383180"}], "type": 1, "verify_key": "7ec338ae67450f59ae0229fc2c677b3801382a25b02147720828af08e3542ef1"}, {"description": "Be fearless in DiRT 4.", "developers": [{"id": "521816499464306689", "name": "Codemasters Racing"}], "executables": [{"is_launcher": false, "name": "dirt4.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ff96383c6a85a5f959ee48900f1ec82d", "id": "425442140731080704", "name": "DiRT 4", "publishers": [{"id": "521816499464306688", "name": "Codemasters"}], "splash": "b36befdbd0f3e9bd275d60afd0492408", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "421020", "sku": "421020"}], "type": 1, "verify_key": "7209711b4d8e432c412a8f376386a48135798f97c67eca18d61878e4b95825d5"}, {"description": "The seventh installment in the Formula 1 franchise developed by Codemasters.", "developers": [{"id": "521816499464306688", "name": "Codemasters"}], "executables": [{"is_launcher": false, "name": "f1_2016.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ea541ced5536656b32cc2ceaab6e390e", "id": "425442173559767040", "name": "F1 2016", "publishers": [{"id": "521816499464306688", "name": "Codemasters"}], "splash": "d2734941487b9ef748ce6fc068d805f8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "391040", "sku": "391040"}], "type": 1, "verify_key": "4df0bea705b13a7a37e5ca9a780cf3b1be084df3f6aa795f51da1be5a6a8f6b1"}, {"description": "The eighth installment in the Formula 1 franchise developed by Codemasters.", "developers": [{"id": "521816499464306688", "name": "Codemasters"}], "executables": [{"is_launcher": false, "name": "f1_2017.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ba45e3980dc47c2910d76b39fd256803", "id": "425442216639725578", "name": "F1 2017", "publishers": [{"id": "521816499464306688", "name": "Codemasters"}], "splash": "906d978ca06058ee2114aa098a632958", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "515220", "sku": "515220"}], "type": 1, "verify_key": "93038fbdde26de33cf55700820fbb5e832e0b21e31b791dc110e183f1fd85d23"}, {"aliases": ["Homefront"], "description": "The sequel to Kaos Studios' 2011 shooter debuts an open-world and a Korean-occupied Philadelphia amid resistance.", "developers": [{"id": "521816604640542742", "name": "Deep Silver Dambuster Studios"}], "executables": [{"is_launcher": false, "name": "homefront.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a57752e04ae6b687935de4e8174d9ae6", "id": "425442258020597760", "name": "Homefront: The Revolution", "publishers": [{"id": "521816604640542740", "name": "Kaos Studios"}, {"id": "521816604640542741", "name": "Dambuster Studios"}, {"id": "521816524403638274", "name": "Deep Silver"}], "splash": "3936b44fa36ffea93d0dd27e149d08e7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "55100", "sku": "55100"}, {"distributor": "steam", "id": "223100", "sku": "223100"}], "type": 1, "verify_key": "62ca7e236a8991f3c86e8c2b700db6fa7fb276d36832cbc8c120670705306c5b"}, {"aliases": ["Metro 2033"], "description": "Metro Redux is a big overhaul of Metro 2033 and Metro: Last Light that includes significant visual and gameplay upgrades for a more uniform experience across both games.", "developers": [{"id": "521816528417718311", "name": "4A Games"}], "executables": [{"is_launcher": false, "name": "metro2033.exe", "os": "win32"}, {"is_launcher": false, "name": "metro 2033 redux/metro.exe", "os": "win32"}], "flags": 0, "guild_id": "369451281879662594", "hook": true, "icon": "dd0ddb682a125dcab5d99851dd620af8", "id": "425442324495990784", "name": "Metro 2033 Redux", "primary_sku_id": "489228147942883328", "publishers": [{"id": "521816528417718311", "name": "4A Games"}, {"id": "521816524403638274", "name": "Deep Silver"}], "slug": "metro-2033-redux", "splash": "9fddb15aa817f1b2b37c6dab249397ad", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "489228147942883328", "sku": "489228147942883328"}, {"distributor": "steam", "id": "286690", "sku": "286690"}], "type": 1, "verify_key": "2221e4b7b870ffd2fcf41795a1427331aa1491e29383e42f6eb716dcf919e827"}, {"aliases": ["Metro Last Light", "Metro Last Light Redux"], "description": "", "developers": [{"id": "521816528417718311", "name": "4A Games"}], "executables": [{"is_launcher": false, "name": "metro last light redux/metro.exe", "os": "win32"}, {"is_launcher": false, "name": "metroll.exe", "os": "win32"}], "flags": 0, "guild_id": "369451281879662594", "hook": true, "icon": "ae7449bb463c0d51bddb4c29dcc375a0", "id": "425442388270645248", "name": "Metro: Last Light Redux", "primary_sku_id": "469990965608710145", "publishers": [{"id": "521816528417718311", "name": "4A Games"}, {"id": "521816524403638274", "name": "Deep Silver"}], "slug": "metro-last-light-redux", "splash": "e0b1acfb6319887559de57f5dafeba02", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "469990965608710145", "sku": "469990965608710145"}, {"distributor": "steam", "id": "287390", "sku": "287390"}], "type": 1, "verify_key": "dcc4d7402fb4c4b27251e87533569a31f50eabf561f8e417202331cd76dfcfe7"}, {"description": "Micro Machines World Series is a new entry in the series developed by Just Add Water and Codemasters.", "developers": [{"id": "521816499464306688", "name": "Codemasters"}], "executables": [{"is_launcher": false, "name": "micromachines.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7671a3b513670009b80a264f91ca4070", "id": "425442430922391552", "name": "Micro Machines World Series", "publishers": [{"id": "521816499464306688", "name": "Codemasters"}], "splash": "f69794f8fb69ffa8e9b30b2f04ff211e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "535850", "sku": "535850"}], "type": 1, "verify_key": "fbe0c16bedcfee7bb481141b2371f6cd8d34c20cf82288febf3ce60e2c9ab0d2"}, {"aliases": ["Mighty Number 9"], "description": "An action-platformer headed by Mega Man creator Keiji Inafune, and crowdfunded via Kickstarter. It is heavily inspired by Inafune's Mega Man franchise.", "developers": [{"id": "521816798983880725", "name": "Level-5 Comcept"}], "executables": [{"is_launcher": false, "name": "mn9game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "34f782c8db136d5543fdcb64765cd94b", "id": "425442465244250132", "name": "Mighty No. 9", "publishers": [{"id": "521816524403638274", "name": "Deep Silver"}], "splash": "e6639605bc2b7d02568e51bca335dfe8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "314710", "sku": "314710"}], "type": 1, "verify_key": "5a21aea76cd3e6b4042f2ef014ebfdf64c9af0ebd2f4ee7312a263e39756cc17"}, {"description": "", "developers": [{"id": "521816524403638275", "name": "Pluto 13 GmbH"}], "executables": [{"is_launcher": false, "name": "risen.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "239681dc457e24ea496a44b02b661637", "id": "425442503198769152", "name": "Risen", "primary_sku_id": "489217885093232641", "publishers": [{"id": "521816524403638274", "name": "Deep Silver"}], "slug": "risen", "splash": "0a746e5fa66d6808a4e07bf33b08ca70", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "40300", "sku": "40300"}, {"distributor": "discord", "id": "489217885093232641", "sku": "489217885093232641"}], "type": 1, "verify_key": "8f022869a5d4805ec223cc4720b91fe69240073fd258967329c8bb4712ce670f"}, {"description": "Set in ancient Rome circa 68 A.D, this third-person action game follows Marius Titus as he sets out to avenge his fallen family. Developed by Crytek as an exclusive Xbox One launch game.", "developers": [{"id": "521816652262670336", "name": "Crytek GmbH"}], "executables": [{"is_launcher": false, "name": "ryse.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "da41acc85e069cf25331454c8a8fa340", "id": "425442538288185344", "name": "Ryse: Son of Rome", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}], "splash": "84fa0753966cb2ee9d040a6bb7381b43", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "302510", "sku": "302510"}], "type": 1, "verify_key": "bca6596929d85e590bb05069bdcefe58d61be3270ab3c72e141b1a841877b1fb"}, {"aliases": ["Saints Row II"], "description": "The clone that surpassed the original returns with the even more over-the-top sequel to Volition's popular open-world mayhem generator, Saints Row.", "developers": [{"id": "521816541323329560", "name": "Deep Silver Volition, Inc."}], "executables": [{"is_launcher": false, "name": "sr2_pc.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1496c84655820b37523cd2181d91d17e", "id": "425442587508211712", "name": "Saints Row 2", "primary_sku_id": "489227469711474699", "publishers": [{"id": "521816550596935692", "name": "THQ"}], "slug": "saints-row-2", "splash": "7ea4c1a3f5cc864a17916e87309c9d26", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "discord", "id": "489227469711474699", "sku": "489227469711474699"}, {"distributor": "steam", "id": "9480", "sku": "9480"}], "type": 1, "verify_key": "177f11f35f45efd888b1ae1ae684edd108bf6c2c56bb20eabe750f5cd907a314"}, {"description": "", "developers": [{"id": "521816635749695509", "name": "ClockStone"}], "executables": [{"is_launcher": false, "name": "bridgeconstructor.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b26e1be6d45c72c67de34880516851fe", "id": "425442642680348692", "name": "Bridge Constructor", "primary_sku_id": "456264683608080394", "publishers": [{"id": "521816561216913411", "name": "Headup Games"}], "slug": "bridge-constructor", "splash": "836f8f474d53baad24f2fb01050e903d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "250460", "sku": "250460"}, {"distributor": "discord", "id": "456264683608080394", "sku": "456264683608080394"}], "type": 1, "verify_key": "a9878ea1c170ae988b1941617ce4bcaafc09cd9f7cc11513d5a77bbeb74b6017"}, {"description": "Physics based game combining the worlds of Portal and Bridge Constructor.", "developers": [{"id": "521816635749695509", "name": "ClockStone"}], "executables": [{"is_launcher": false, "name": "bridge_constructor_portal.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9c3afe36490f04f5d8778ba6464a2c5e", "id": "425442712095948800", "name": "Bridge Constructor Portal", "publishers": [{"id": "521816561216913411", "name": "Headup Games"}, {"id": "521816635749695509", "name": "ClockStone"}], "splash": "8d4dea8f99c0bbb693a5b8b007d1999c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "684410", "sku": "684410"}], "type": 1, "verify_key": "c84bbd9f464401f801b1d0b34e1d2e30a84d947ecbd6121b773b6cd72f31318e"}, {"description": "", "developers": [{"id": "521816709490016256", "name": "Silent Dreams"}], "executables": [{"is_launcher": false, "name": "deadage.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9be365079c9218d25dbfa7d0cf17d66d", "id": "425442752562462720", "name": "Dead Age", "primary_sku_id": "489074028980731915", "publishers": [{"id": "521816709490016256", "name": "Silent Dreams"}], "slug": "dead-age", "splash": "546a6b2c8c086a21eb7685687a021fa2", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "489074028980731915", "sku": "489074028980731915"}, {"distributor": "steam", "id": "363930", "sku": "363930"}], "type": 1, "verify_key": "be4d7771838d38dc42e42a4a28d60530f463b066739e7eafb70519678eeeefb6"}, {"description": "A speedrunning-focused game set in a heavy metal-inspired hellscape.", "developers": [{"id": "521816656021028864", "name": "Pine Studio"}], "executables": [{"is_launcher": false, "name": "seum.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c6ad13512430edcf89937c575961ffe8", "id": "425442824134328320", "name": "SEUM: Speedrunners from Hell", "publishers": [{"id": "521816561216913411", "name": "Headup Games"}], "splash": "f504a50ca8659b86ba6f22591c1ac780", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "457210", "sku": "457210"}], "type": 1, "verify_key": "53b685cd9c1d8101f76b89d93a8cac58061f338288b3e2743d5c54e6feab2ef0"}, {"aliases": ["BioShock II"], "description": "Ten years after the events of the first game, Subject Delta is awoken and must unravel the mystery behind the Big Sisters and his own past in the ruined underwater city of Rapture.", "developers": [{"id": "521816696345067520", "name": "2K Marin"}], "executables": [{"is_launcher": false, "name": "bioshock2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "584f652fa296dd32ee2fdacb502fea73", "id": "425442925967573002", "name": "BioShock 2", "primary_sku_id": "425442925967573002", "publishers": [{"id": "521816504392482816", "name": "2K Games"}], "slug": "bioshock-2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "8850", "sku": "8850"}], "type": 1, "verify_key": "3d7b73df35e6833e50ccd5012f5caa92b828b1771b5c9aeccfcf2bae2adbd127"}, {"description": "", "developers": [{"id": "521816696345067520", "name": "2K Marin"}, {"id": "524352055746232324", "name": "2K China"}, {"id": "521816584612872203", "name": "Digital Extremes"}, {"id": "521816749830701057", "name": "2K Australia"}, {"id": "537921424950558720", "name": "Blind Squirrel"}], "eula_id": "542074049984200704", "executables": [{"is_launcher": false, "name": "bioshock2hd.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7f421657fb7a89b88bfcaa0f0b0d886a", "id": "425442965255880704", "name": "BioShock\u2122 2 Remastered", "primary_sku_id": "425442965255880704", "publishers": [{"id": "542107996516253761", "name": "2K"}], "slug": "bioshock-tm-2-remastered", "splash": "225361492675523b31b1f993e86986ee", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "409720", "sku": "409720"}], "type": 1, "verify_key": "a6638229163a9c01bf781c50132cc3bab06b3f3e15fa01716b9cb39c9bc7ff57"}, {"description": "The third game in the BioShock series leaves the bottom of the sea behind for an entirely new setting - the floating city of Columbia, circa 1912. Come to retrieve a girl named Elizabeth, ex-detective Booker DeWitt finds more in store for him there than he could ever imagine.", "developers": [{"id": "521816521731735572", "name": "Irrational Games"}], "executables": [{"is_launcher": false, "name": "bioshockinfinite.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d980bde9d53b055dc73976e22497719c", "id": "425442995681230858", "name": "BioShock Infinite", "publishers": [{"id": "521816504392482816", "name": "2K Games"}], "splash": "21d35240c1841b830fa2f2e0e5f475a9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "8870", "sku": "8870"}], "type": 1, "verify_key": "9e7196c1c4775043a634b21ca46508980a92af3dee280e008d72dbfd394038fc"}, {"description": "", "developers": [{"id": "521816598646882304", "name": "2K Boston"}, {"id": "521816749830701057", "name": "2K Australia"}, {"id": "537921424950558720", "name": "Blind Squirrel"}], "eula_id": "542074049984200704", "executables": [{"is_launcher": false, "name": "bioshock.exe", "os": "win32"}, {"is_launcher": false, "name": "bioshockhd.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a828eab18b1cab576a83bbcfe57293ad", "id": "425443045417156618", "name": "BioShock\u2122 Remastered", "primary_sku_id": "489259956923531275", "publishers": [{"id": "542107996516253761", "name": "2K"}], "slug": "bioshock-tm-remastered", "splash": "13fbb6378326adbe9c9cdd3c379f4a09", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "489259956923531275", "sku": "489259956923531275"}, {"distributor": "steam", "id": "409710", "sku": "409710"}], "type": 1, "verify_key": "1a665d4d82e7aefae3716fc52f0d3f9a3d15a80c0798277b412d6663166257cf"}, {"description": "Borderlands is a first-person shooter RPG from Gearbox Software that puts players into the shoes of one of four playable characters as they traverse the hostile planet of Pandora in search of a mysterious \"Vault\", said to contain priceless unknown riches and alien technologies.", "developers": [{"id": "521816607408914450", "name": "Gearbox Software LLC"}], "executables": [{"is_launcher": false, "name": "borderlands/borderlands.exe", "os": "win32"}, {"is_launcher": false, "name": "binaries/borderlands.exe", "os": "win32"}], "flags": 0, "guild_id": "132671445376565248", "hook": true, "icon": "c63623102b12e3f7c6c3814a656180a4", "id": "425443081916252160", "name": "Borderlands", "publishers": [{"id": "521816503960600578", "name": "Gearbox Software"}, {"id": "521816504392482816", "name": "2K Games"}], "splash": "a62900b8f40148661814418d77d4c7ac", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "8980", "sku": "8980"}], "type": 1, "verify_key": "da555050ee16ea626f8763d4e10a5adfa3ff6c27cc6ac9a40b4a5a5f9c01df1e"}, {"description": "", "developers": [{"id": "521816602728071194", "name": "Illusion Softworks, a.s."}], "eula_id": "542074049984200704", "executables": [{"is_launcher": false, "name": "mafia/game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ee83e3b336db063c025db31c43acc2b4", "id": "425443205195104277", "name": "Mafia", "primary_sku_id": "489243955041402880", "publishers": [{"id": "542107996516253761", "name": "2K"}], "slug": "mafia", "splash": "623350d618c26d5b41fcd0e9b9066c76", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "40990", "sku": "40990"}, {"distributor": "discord", "id": "489243955041402880", "sku": "489243955041402880"}], "type": 1, "verify_key": "d2b82db0417693cf2da332310a1bbc40df9f875ff1438323c1029f51fa5f4565"}, {"description": "Play as Vito Scaletta and rise up through the ranks of the criminal underworld of Empire Bay in Mafia II, the sequel to the 2002 sandbox-style hit.", "developers": [{"id": "521816742134284289", "name": "2K Czech"}], "executables": [{"is_launcher": false, "name": "mafia2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4c58f02d685fd245fc4411c1195dbc87", "id": "425443244285886494", "name": "Mafia II", "publishers": [{"id": "521816504392482816", "name": "2K Games"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "50130", "sku": "50130"}], "type": 1, "verify_key": "5ec546ac48481d49002a4df02b17da1226dbefd8ef3fdc8b319578af63c8dbc6"}, {"description": "The third game in the open world crime series. Mafia III follows Vietnam veteran, mixed-race Lincoln Clay in 1960s New Bordeaux, when racism is blooming, as he aspires for revenge against those who have harmed his family.", "developers": [{"id": "521816515557851147", "name": "Hangar 13"}], "executables": [{"is_launcher": false, "name": "mafia3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f0ebf3a88ac30d26d36bcee7ff0e68c0", "id": "425443292831023113", "name": "Mafia III", "publishers": [{"id": "521816515557851147", "name": "Hangar 13"}, {"id": "521816504392482816", "name": "2K Games"}], "splash": "c651e1c87a314b507ccc5c308c7f4095", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "360430", "sku": "360430"}], "type": 1, "verify_key": "5b377bb29af39568887c1c42e55cff523615f9cc7b5dfed187d60120a8c15dd0"}, {"aliases": ["Civilization Beyond Earth"], "description": "A sci-fi spin-off from the Civilization series that takes place on a distant planet.", "developers": [{"id": "521816573485514765", "name": "Firaxis Games"}], "executables": [{"is_launcher": false, "name": "civilizationbe_dx11.exe", "os": "win32"}, {"is_launcher": false, "name": "civilizationbe_mantle.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "73cc4e99c51f9e77e640ff83f8979eb6", "id": "425443404277743616", "name": "Sid Meier's Civilization: Beyond Earth", "publishers": [{"id": "521816573485514765", "name": "Firaxis Games"}, {"id": "521816504392482816", "name": "2K Games"}], "splash": "65e30de4d415fafc52c43deb17f68b28", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "65980", "sku": "65980"}], "type": 1, "verify_key": "f321a104eb94b8f394dc9080f6b5456f70470538c2e6ede2ab401b8151cc3105"}, {"aliases": ["wwe2k18"], "description": "This latest entry in 2k Sports WWE series boasts a next generation graphics engine, the largest roster of any WWE game before it with the rosters updated gimmick sets and show stylings to closely resembles the current TV product, and the first WWE 2k only be released on current generation hardware. \n\nSeth Rollins was revealed to be the cover star, and the game's slogan is \"Be Like No One.\"", "developers": [{"id": "521816685938868244", "name": "Yuke's Co. Ltd."}], "executables": [{"is_launcher": false, "name": "wwe2k18_x64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8606483793cbb061eb022498cfd64b34", "id": "425443442181537792", "name": "WWE 2K18", "publishers": [{"id": "521816531324370967", "name": "2K Sports"}], "splash": "12f5efd3f0826fe1f3115c23229f6886", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "664430", "sku": "664430"}], "type": 1, "verify_key": "71346d4d9e3e5f6c8a491b9a8a542b328910830bd888415331cc2ad8135ac84a"}, {"description": "An adventure game by Daedalic Entertainment that takes place on the trash planet Deponia.", "developers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "executables": [{"is_launcher": false, "name": "deponia.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5ada731023f138a4b2bdb2330b27d3d5", "id": "425443478525444106", "name": "Deponia", "publishers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "splash": "7eb8b773fcbfed36b27a97db953c0fb3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "214340", "sku": "214340"}], "type": 1, "verify_key": "a6bab03ef16c0f8b49bf8781e3462a3513769feb0184aa8e9ae0d6af50700e6e"}, {"aliases": ["Shadow Tactics Blades of the Shogun"], "description": "", "developers": [{"id": "521816687612395521", "name": "Mimimi Productions"}], "executables": [{"is_launcher": false, "name": "shadow tactics.exe", "os": "win32"}], "flags": 0, "guild_id": "294373853990486016", "hook": true, "icon": "2e96abb193d403db3dc7036f9ede1da6", "id": "425443548079456285", "name": "Shadow Tactics: Blades of the Shogun", "primary_sku_id": "492420089233014795", "publishers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "slug": "shadow-tactics-blades-of-the-shogun", "splash": "dfc029df7df019c73476000618b64852", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492420089233014795", "sku": "492420089233014795"}, {"distributor": "steam", "id": "418240", "sku": "418240"}], "type": 1, "verify_key": "c1fe041faa8acfed5a9c4cc5284af258a47856baa44a72ae17d542a93f523c13"}, {"description": "Silence is the sequel to Daedalic Entertainment\u2019s popular fantasy adventure game The Whispered World and features a new lead character and 3D graphics.", "developers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "executables": [{"is_launcher": false, "name": "silence.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "642b329c95bf18cbfeb63e34338d8fa6", "id": "425443601154048020", "name": "Silence", "publishers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "splash": "b86af3e609e33c1ec365f422cf2046a7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "314790", "sku": "314790"}], "type": 1, "verify_key": "d84d049a5f45ca5a9dfc890aa9f1c1e7213c9524ea4902bd0dbb2a3841feed51"}, {"description": "", "developers": [{"id": "521816607941459968", "name": "Noio"}], "executables": [{"is_launcher": false, "name": "kingdom new lands/kingdom.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f001bb8255d0b8cfe6695fe80fc6caeb", "id": "425443637892218890", "name": "Kingdom: New Lands", "primary_sku_id": "471029879891034123", "publishers": [{"id": "521816607941459968", "name": "Noio"}, {"id": "521816607941459969", "name": "Raw Fury"}], "slug": "kingdom-new-lands", "splash": "868173d133ba818149cf12e010d837d6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "496300", "sku": "496300"}, {"distributor": "discord", "id": "471029879891034123", "sku": "471029879891034123"}], "type": 1, "verify_key": "dcee1c92c05830a134eaf6d852ab2e7172b1551751783d863c63ec3659ffd430"}, {"description": "", "developers": [{"id": "521816709057740812", "name": "Art in Heart"}], "executables": [{"is_launcher": false, "name": "gonner.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "97f4724f9ec3a584dfeae0f8b827fa33", "id": "425443673698861066", "name": "GoNNER", "primary_sku_id": "471029710965440533", "publishers": [{"id": "521816607941459969", "name": "Raw Fury"}], "slug": "gonner", "splash": "c2775852c8c76fe92f04c9f2c810b66b", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "471029710965440533", "sku": "471029710965440533"}, {"distributor": "steam", "id": "437570", "sku": "437570"}], "type": 1, "verify_key": "f6a603a9565fb3e9ec4345509180f63c8ff27212845b410d6b384e8dfa022f24"}, {"description": "A dungeon exploration game where you play the dungeon master using cards to help guide the AI controlled players.", "developers": [{"id": "521816553080094725", "name": "Gambrinous"}], "executables": [{"is_launcher": false, "name": "dungeoneering.exe", "os": "win32"}], "flags": 0, "guild_id": "306957465407324171", "hook": true, "icon": "79c4758019008dbd046e0873e5caa26c", "id": "425443709958488064", "name": "Guild of Dungeoneering", "publishers": [{"id": "521816509111336966", "name": "Versus Evil"}], "splash": "5ec227e6f245e1063410c6f02bfbbb18", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "317820", "sku": "317820"}], "type": 1, "verify_key": "7b29bdbf7b04d885fbce40a5963e55d5a715edc5e6048e06a91c87b65bb026b2"}, {"description": "Antihero is a game about managing a thieves' guild through asynchronous multiplayer.", "developers": [{"id": "521816578786852875", "name": "Tim Conkling"}], "executables": [{"is_launcher": false, "name": "antihero.exe", "os": "win32"}], "flags": 0, "guild_id": "306957465407324171", "hook": true, "icon": "059ade1a937c3a3909b977bde22a70d7", "id": "425443745866186752", "name": "Antihero", "publishers": [{"id": "521816509111336966", "name": "Versus Evil"}], "splash": "f9ec2286b59e95a958370efcd3c087d0", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "505640", "sku": "505640"}], "type": 1, "verify_key": "b56f3e5b48035082a1172acc07614ab697d1217a1aa7aeb512d0ecc5798aee74"}, {"description": "Let Them Come is a side-scrolling, pixel art shoot 'em up.", "developers": [{"id": "521816578786852876", "name": "Klemen Lozar"}], "executables": [{"is_launcher": false, "name": "letthemcome.exe", "os": "win32"}], "flags": 0, "guild_id": "306957465407324171", "hook": true, "icon": "4b8a09cd8e7df4643b36232d51519dfa", "id": "425443777621131264", "name": "Let Them Come", "publishers": [{"id": "521816509111336966", "name": "Versus Evil"}], "splash": "28dbaa98a61bde0f746440024074c2dc", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "505630", "sku": "505630"}], "type": 1, "verify_key": "d5b1d460800362d7a8c8b9d1c91fc3466731efcb4a864d187bf05227e2bd99a7"}, {"aliases": ["LEGO STAR WARS: The Force Awakens", "LEGO? STAR WARS?: The Force Awakens"], "description": "LEGO Star Wars: The Force Awakens covers the seventh film and includes material that occurred between Return of the Jedi and Force Awakens.", "developers": [{"id": "521816542707449856", "name": "Traveller's Tales Ltd."}], "executables": [{"is_launcher": false, "name": "legoswtfa_dx11.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e471cba9f3d76b257e99beaad99dd3f6", "id": "425443938271363095", "name": "LEGO\u00ae STAR WARS\u2122: The Force Awakens", "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "splash": "cb1a7a7b3a086120e99cfbb184a8c3ce", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "438640", "sku": "438640"}], "type": 1, "verify_key": "268675e25a8643e302367f8ef6f2d543531536a1e34cb24dbc0a90cbf562dbd9"}, {"aliases": ["LEGO? MARVEL's Avengers"], "description": "Lego Avengers is a Lego game based on the Marvel Cinematic Universe.", "developers": [{"id": "521816542707449856", "name": "Traveller's Tales Ltd."}], "executables": [{"is_launcher": false, "name": "legomarvelavengers_dx11.exe", "os": "win32"}, {"is_launcher": false, "name": "legomarvelavengers.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e5b466b30681853483f7163c77d9255a", "id": "425449323346657290", "name": "LEGO\u00ae MARVEL's Avengers", "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "splash": "7d214dc93efdab5d64bf9dea411d8861", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "405310", "sku": "405310"}], "type": 1, "verify_key": "da55a2ac5ab37e774ef969d6ac5a52e3b3cf61ae38285c5607fcc09bce25a01e"}, {"aliases": ["LEGO? Jurassic World"], "description": "Relive the action of all four Jurassic Park films - in LEGO video game form!", "developers": [{"id": "521816542707449856", "name": "Traveller's Tales Ltd."}], "executables": [{"is_launcher": false, "name": "legojurassicworld_dx11.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8c834f7941d01cdcda477ebbb953349b", "id": "425450411391057950", "name": "LEGO\u00ae Jurassic World", "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "splash": "86feace413f78ab473e5def81db13565", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "352400", "sku": "352400"}], "type": 1, "verify_key": "34344c313156cead46d5c8f6cde79d3dff70b505a926c2d726361e9980cf1149"}, {"description": "As a benevolent god known as 'the Breath', players must lead their people to safety and help them retrieve the lost knowledge of their ancestors by manipulating the shape of the terrain of the world in this spiritual successor to Populous.", "developers": [{"id": "521816592674193443", "name": "Ubisoft Montpellier Studios"}], "executables": [{"is_launcher": false, "name": "from_dust.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "235426c0f66be33c18c83d1dff97042c", "id": "425450802316967956", "name": "From Dust", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "465730b8c11efb3e00480699af377c7d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "33460", "sku": "33460"}], "type": 1, "verify_key": "a6d89b8a90ccbb52aa7f488cb26e5713e3e3866bb8c43142c55b387097f11ce0"}, {"description": "Rocksmith is a guitar-based music game designed around playing a real electric guitar.", "developers": [{"id": "521816683913150494", "name": "Ubisoft San Francisco"}], "executables": [{"is_launcher": false, "name": "rocksmith.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7ab67b70cc0ac92301ba8405261c05a3", "id": "425450896877420565", "name": "Rocksmith", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "8c01a7a0f86e0e7423d7aabe0d8835df", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "205190", "sku": "205190"}], "type": 1, "verify_key": "f9d56247e81be10986c8699eaf7e564f8cadf0ef3e384f59a0926b7d1fd63acf"}, {"aliases": ["Tom Clancy's Ghost Recon\t"], "description": "Two soldiers fight their way through the streets of a futuristic Northern Europe in this on rails, third person shooter for the Wii.", "developers": [{"id": "521816504824758294", "name": "Next Level Games, Inc."}], "executables": [{"is_launcher": false, "name": "ghostrecon.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "afe3ed8999c48f1b27c9c84dbcfd2b39", "id": "425451104117981184", "name": "Tom Clancy's Ghost Recon", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "1c8c17dfeae234f2af198205d53897bf", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "15300", "sku": "15300"}], "type": 1, "verify_key": "d81d5a16412746378488a94ac74920ab67de694cd0b412fabc3f7311fbbc34ab"}, {"description": "ArcaniA: Gothic 4 is the 4th installment in the European Action RPG franchise Gothic, and the first after JoWood's split with the original franchise developer.", "developers": [{"id": "521816587586633730", "name": "Spellbound Studios"}], "executables": [{"is_launcher": false, "name": "arcania.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7aca019487a5e8879b7f18d113db6e60", "id": "425451163807383552", "name": "ArcaniA", "publishers": [{"id": "521816528895737860", "name": "JoWooD Productions Software AG"}], "splash": "a4716feb85eae01129b7fdad385d9f87", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "39690", "sku": "39690"}], "type": 1, "verify_key": "f29341d4cfb2b6b0ec3a75e02f9962b92bcc578d784512ec7a561764ac9dae89"}, {"description": "", "developers": [{"id": "521816713746972685", "name": "Rainbow Studios"}], "executables": [{"is_launcher": false, "name": "mxvsatv.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "03aef78d66732d647654cf3998bcfbce", "id": "425451199756632084", "name": "MX vs. ATV Unleashed", "publishers": [{"id": "521816550596935692", "name": "THQ"}], "splash": "33636906b388af3ffcec2097669102b4", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "359220", "sku": "359220"}], "type": 1, "verify_key": "3473ea19179499b850388dc28e6fe945600bdf5e5f719f35af2cd0313650cc9e"}, {"description": "An isometric tactical-RPG developed by King Art Games.", "developers": [{"id": "521816646768263170", "name": "King Art Games"}], "executables": [{"is_launcher": false, "name": "dwarves.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "43c99356276e6672a8cb3f1b57aff70b", "id": "425451237387796490", "name": "The Dwarves", "publishers": [{"id": "521816558092156949", "name": "EuroVideo Medien GmbH"}], "splash": "5884f2e96c2c8d649f393c1b386630f8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "403970", "sku": "403970"}], "type": 1, "verify_key": "18350ed7e357eab148b991e1afadbfb6d8533644b941e922d405c4023f9591ec"}, {"description": "In this sequel to Sunless Sea, London has left the dark caverns and the Unterzee behind them and ventured out among the stars.", "developers": [{"id": "521816707850043394", "name": "Failbetter Games"}], "executables": [{"is_launcher": false, "name": "sunless skies.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c7c9816e260af9100369b77180926137", "id": "425451303985217536", "name": "Sunless Skies", "publishers": [{"id": "521816707850043394", "name": "Failbetter Games"}], "splash": "263bcba24aafe5dc54d63da172d9cd4b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "596970", "sku": "596970"}], "type": 1, "verify_key": "1cee75da1455007e500b0df9c7254f440446c0d3a675cf48478ac7151eb29789"}, {"aliases": ["Deadlight"], "description": "", "executables": [{"is_launcher": false, "name": "lotdgame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8e7f8bc9a2514364f9ab117a49b20963", "id": "425451345865211904", "name": "Deadlight: Director's Cut", "primary_sku_id": "489167144408317953", "slug": "deadlight-director-s-cut", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "489167144408317953", "sku": "489167144408317953"}], "type": 1, "verify_key": "5cd57f3de6be459ad2a24c13c98df94b4a1c4d3a91f385474e05cd8feeb83ebc"}, {"description": "The third installment of ASCARON's Sacred franchise, now owned by Deep Silver. It was first shown to the public at PAX Prime 2012.", "developers": [{"id": "521816633392627714", "name": "Keen Games"}], "executables": [{"is_launcher": false, "name": "sacred3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "10f94b9f9c25c5e73b1d758ebc1ed036", "id": "425451387724234752", "name": "Sacred 3", "publishers": [{"id": "521816524403638274", "name": "Deep Silver"}], "splash": "73c052e407f0163de5b3faee707893fe", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "247950", "sku": "247950"}], "type": 1, "verify_key": "50597d886d1367a2a264db0fbd4c397565545ea2c6aafea03175e8cefe2b65be"}, {"description": "Trainz: A new Era is a realistic train simulator.", "developers": [{"id": "521816781304627216", "name": "N3V Games Pty Ltd"}], "executables": [{"is_launcher": false, "name": "trainz a new era/tane.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a37c4f8cbc2ea47e7e863f6f471019a9", "id": "425451439318630424", "name": "Trainz: A New Era", "publishers": [{"id": "521816781304627216", "name": "N3V Games Pty Ltd"}], "splash": "1f0f65203340231430bbc9d72162e319", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "315660", "sku": "315660"}], "type": 1, "verify_key": "cd1f5358f0b70f52c7992514dfb4323828920ffeb3c00672eb4ee68c4f2d4709"}, {"description": "", "developers": [{"id": "521816738807939111", "name": "Studio Fizbin"}], "executables": [{"is_launcher": false, "name": "theinnerworld.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7e71c55861868330ea8859fb982607b5", "id": "425451474122833930", "name": "The Inner World", "primary_sku_id": "469566186133127188", "publishers": [{"id": "521816561216913411", "name": "Headup Games"}], "slug": "the-inner-world", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "251430", "sku": "251430"}, {"distributor": "discord", "id": "469566186133127188", "sku": "469566186133127188"}], "type": 1, "verify_key": "6704b4ef1f6de3a8a92f31e327c850b31c4f6c022c57c1ad5030dcdd78038be3"}, {"description": "The Assassin's Creed IV DLC, starring Ad\u00e9wal\u00e9, is released as a standalone, digital release for PS4, PS3, and PC.", "developers": [{"id": "521816510730338327", "name": "Ubisoft Quebec"}], "executables": [{"is_launcher": false, "name": "acfc.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "bb46349d900f6c6c0b8576ed456e74b1", "id": "425453860392402964", "name": "Assassin's Creed Freedom Cry", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "3ee7435cba1957b4a00822175b641197", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "277590", "sku": "277590"}], "type": 1, "verify_key": "37207eddddeeba5aed015f035fdee0dc0e9a3a842bea2508067ef7c372a0b0b5"}, {"description": "Set in 1868 London during the Industrial Revolution, players take on the role of sibling Assassins named Evie and Jacob Frye as they rally to overthrow the Templars in power. Developed by Ubisoft Qu\u00e9bec for the PC, PlayStation 4, and Xbox One.", "developers": [{"id": "521816510730338327", "name": "Ubisoft Quebec"}], "executables": [{"is_launcher": false, "name": "assassin's creed syndicate/acs.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1e422667e8704db7821fda0a69f09e7c", "id": "425453938582487068", "name": "Assassin's Creed Syndicate", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "summary": "", "third_party_skus": [{"distributor": "uplay", "id": "1875", "sku": "1875"}], "type": 1, "verify_key": "5e0d9a62f36da871dcf9bae7dadcf0e585c1da63814acc33570704060d7bbfcd"}, {"description": "Bloody Good Time is a zany first-person competitive online murder simulator made by Outerlight, developer of the 2006 hit PC game The Ship.", "developers": [{"id": "521816563456802821", "name": "Outerlight Ltd."}], "executables": [{"is_launcher": false, "name": "bgt.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1faa4aeb67530f72ddfeeea9992ec45b", "id": "425453978114064424", "name": "Bloody Good Time", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "b2387e9e9bf1f8c0cb165cb98527b8ba", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "2450", "sku": "2450"}], "type": 1, "verify_key": "2f3b41281a4726a3e20e708c2aa82c8ec53444df5ffbec0241d14659eacc43cb"}, {"aliases": ["Far Cry? 3 Blood Dragon"], "description": "Inspired by the sci-fi action movies of the 1980s, Far Cry 3: Blood Dragon is a standalone expansion to 2012's Far Cry 3, switching a modern tropical setting with the neon-covered retro-future of 2007.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "fc3_blooddragon_d3d11_b.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7eeabd2ee6733ce75308ede6d1a386b1", "id": "425454019205529600", "name": "Far Cry 3 Blood Dragon", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "summary": "", "type": 1, "verify_key": "3f1577b152eb0c79527a319390b7bc18b39a871f94d2f1240da0ebfd49851fdf"}, {"description": "I Am Alive is a survival game. The story revolves around a man trying to find his family in the ruined Midwestern city of Haventon after a devastating, apocalyptic event.", "developers": [{"id": "521816583585136661", "name": "Ubisoft Shanghai Studios"}], "executables": [{"is_launcher": false, "name": "iamalive_game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "73201f7ef999b469e69ec83197d0ad56", "id": "425454053795823626", "name": "I Am Alive", "publishers": [{"id": "521816583585136660", "name": "Ubisoft S.A."}], "splash": "05c23fd1d37bc7fc344387c98597f1e8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "214250", "sku": "214250"}], "type": 1, "verify_key": "44ba52b40480f6001a68bbbf71366153a918f4c8bd84f2ffd5411f6a109c84bd"}, {"description": "A 2008 entry into the Prince of Persia franchise titled simply \"Prince of Persia\", this game stars an all-new Prince as he teams up with the mysterious Elika to fight Ahriman and cleanse the world of his corruption.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "prince of persia/launcher/launcher.exe", "os": "win32"}, {"is_launcher": false, "name": "princeofpersia_launcher.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3562a6927afc6e8c185bfa02101aad9d", "id": "425454114999369728", "name": "Prince of Persia", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "8cbbcd61326264044362e2bd2802a561", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "19980", "sku": "19980"}], "type": 1, "verify_key": "00be8a92df8066694568107a433fa3073fba0270ff3feeab51c78b57e152c486"}, {"description": "Black Mirror is an adventure game developed by KING Art and published by THQ Nordic.", "developers": [{"id": "521816646768263170", "name": "King Art Games"}], "executables": [{"is_launcher": false, "name": "blackmirror.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e0f23493d0c1d0c9e5c88490b2cf0b89", "id": "425454162705252372", "name": "Black Mirror", "publishers": [{"id": "521816508167487498", "name": "THQ Nordic"}], "splash": "72c50249f77e0067b1c2eb841e990900", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "581300", "sku": "581300"}], "type": 1, "verify_key": "974337a5031d48a55bdbfb4180074806ff3c9e442fe6e7b85b41cb54e623ec2f"}, {"aliases": ["Darksiders 2", "Darksiders II Deathinitive Edition"], "description": "", "developers": [{"id": "521816632285200387", "name": "Gunfire Games"}], "executables": [{"is_launcher": false, "name": "darksiders2.exe", "os": "win32"}], "flags": 0, "guild_id": "411080228052533250", "hook": true, "icon": "4ad62c12ea053b51f8af73d10df413b8", "id": "425454199371726858", "name": "Darksiders II: Deathinitive Edition", "primary_sku_id": "471030867175669760", "publishers": [{"id": "521816508167487498", "name": "THQ Nordic"}], "slug": "darksiders-ii-deathinitive-edition", "splash": "0e6c666f6c35fed8e5b29fb5a4adddf9", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "471030867175669760", "sku": "471030867175669760"}, {"distributor": "steam", "id": "388410", "sku": "388410"}], "type": 1, "verify_key": "bd7335ddb7cf6b6cb9f6b3754cc6233d04df009b0a1ba9748d1aeb38d18a8937"}, {"description": "Another Delta Force game where you take on the role of a Special Forces soldier. New features such as the ability to save, the ability to pick up weapons and the weapon caches where you can stock up on ammo or change your loadout where added.", "developers": [{"id": "521816672248791067", "name": "NovaLogic, Inc."}], "executables": [{"is_launcher": false, "name": "delta force land warrior/dflw.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3eb9d6344070e8a71baf7f388a306fce", "id": "425454276719017994", "name": "Delta Force: Land Warrior", "publishers": [{"id": "521816774614974474", "name": "Global Software Publishing Limited"}], "splash": "ce89308a097360d64ab9cde21681567b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "32640", "sku": "32640"}], "type": 1, "verify_key": "cc212ea64d442f314dbfb54f895e7f98a1bd27fb48dfbb136c04ae3ef6ed9afb"}, {"description": "Full Spectrum Warrior is based on a game commissioned by the US Army to train light infantry troops in urban combat situations. The game places soldiers in a tense, hostile, and claustrophobic environment where they must complete a variety of military objectives.", "developers": [{"id": "521816651793039390", "name": "Pandemic Studios"}], "executables": [{"is_launcher": false, "name": "full spectrum warrior/launcher.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d3b939a3a8b8e6b2c930615821299928", "id": "425454306737520650", "name": "Full Spectrum Warrior", "publishers": [{"id": "521816550596935692", "name": "THQ"}], "splash": "a64881f78aa7e23b6f0c5bef5ec8d5f9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "4520", "sku": "4520"}], "type": 1, "verify_key": "c94cb82c0e8af526df8ed6332f6578d2fe013de0cc5c891a9c441d2c9a5ce85d"}, {"description": "Full Spectrum Warrior: Ten Hammers is the sequel to Pandemic's modern war game, which allows players to lead mechanized infantry units and engage in multiplayer tactical combat.", "developers": [{"id": "521816651793039390", "name": "Pandemic Studios"}], "executables": [{"is_launcher": false, "name": "fsw2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9c1d59d3fb9d3e77689898691d3827a2", "id": "425454342888488960", "name": "Full Spectrum Warrior: Ten Hammers", "publishers": [{"id": "521816550596935692", "name": "THQ"}], "splash": "e0d2ecb19fbf53d05e045bd05c050b30", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "4530", "sku": "4530"}], "type": 1, "verify_key": "2b4800247e83e2b5e2fcae488377d787fbdd4d880ca263e90cc2e8c6159abeba"}, {"description": "In Men of Valor you play as Dean Shepard, a young Marine in the United States Marine Corps, trying to stay alive with his squad in the harsh jungles of Vietnam.", "developers": [{"id": "521816568473059340", "name": "2015, Inc."}], "executables": [{"is_launcher": false, "name": "menofvalor.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c594d1ea5713fde6718f4984bbc22167", "id": "425454383820570664", "name": "Men of Valor", "publishers": [{"id": "521816549666062336", "name": "Sierra"}], "splash": "6b4a392f0a46e5fec595a6d25867422b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "411330", "sku": "411330"}], "type": 1, "verify_key": "d55bcbd4c3131577de0741cd48f65e9bc9b1c71ca840d79d2105717db726964c"}, {"description": "A Real-time strategy/tactics game set in space that puts you in control of various squads of spaceships. ", "developers": [{"id": "521816783670476801", "name": "Mithis Entertainment"}], "executables": [{"is_launcher": false, "name": "nexus the jupiter incident/nexus.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "361709fb8d2fa3979f9b66353889ffdd", "id": "425454420289912832", "name": "Nexus: The Jupiter Incident", "publishers": [{"id": "521816548059643905", "name": "1C Company"}], "splash": "f4a68d456a086c0b5fc574c08ecb2596", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "6420", "sku": "6420"}], "type": 1, "verify_key": "d0d9ae0823ba19326d57b78d76815f50ba1463d06b64a3fbe2cd0c685299e891"}, {"description": "Sine Mora is a horizontal scrolling shoot 'em up developed by Grasshopper Manufacture and Digital Reality. It saw worldwide release in 2012.", "developers": [{"id": "521816681228664848", "name": "Digital Reality, Ltd."}], "executables": [{"is_launcher": false, "name": "sinemoraex.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "567e2ba81ab02b6aed5f8ff41a1f3b7e", "id": "425454457434931200", "name": "Sine Mora EX", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}], "splash": "ddba96eff9d98ab1ef4b62e9f43c2a3e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "606730", "sku": "606730"}], "type": 1, "verify_key": "9d4d39a57f9d85eb8229bcb6922b77f250ae41cb5a3432cfb1628b75abeada25"}, {"description": "Starring the demi-god Sphinx, and the undead corpse of Tutankhamen, this action-adventure game is filled with Ancient Egyptian mythology.", "developers": [{"id": "521816551054376970", "name": "Eurocom Entertainment Software"}], "executables": [{"is_launcher": false, "name": "sphinxd_gl.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2f5d9589d87e66be34e1e617e62caf03", "id": "425454500883595264", "name": "Sphinx and the Cursed Mummy", "publishers": [{"id": "521816550596935692", "name": "THQ"}], "splash": "5dab92cae6b5a6a1f0cfe392321f63fa", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "606710", "sku": "606710"}], "type": 1, "verify_key": "7e1dfa9e4e4a3090d1081116dc73ee8a91be93487d67cca78d0ddc3cd87728e8"}, {"description": "The third game in the Unwritten Tales adventure game series.", "developers": [{"id": "521816646768263170", "name": "King Art Games"}], "executables": [{"is_launcher": false, "name": "bout2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "960c69329707da291e6fbf8dd30b4ffc", "id": "425454534907658240", "name": "The Book of Unwritten Tales 2", "primary_sku_id": "484131450275233812", "publishers": [{"id": "521816508167487498", "name": "THQ Nordic"}], "slug": "the-book-of-unwritten-tales-2", "splash": "4f89f5c986cb91349f56ae89f941ff86", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "279940", "sku": "279940"}, {"distributor": "discord", "id": "484131450275233812", "sku": "484131450275233812"}], "type": 1, "verify_key": "d982a7e55f4cd3be1b3e0b57fc8abea5aef4f79f520362f5e081f678e8b80268"}, {"description": "", "executables": [{"is_launcher": false, "name": "europa1400gold_tl.exe", "os": "win32"}, {"is_launcher": false, "name": "europa1400gold.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "df4d5a9d698a800311ab6176ab1f6776", "id": "425454572778291210", "name": "The Guild Gold Edition", "publishers": [{"id": "521816804323098635", "name": "4HEAD Studios"}], "splash": "b115e82a3b3b9720748e08abc6d00769", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "39520", "sku": "39520"}], "type": 1, "verify_key": "61f687a5bb68680ef489c263b31412ce708908abb01f4b68092c794e74cac8a1"}, {"description": "A short adventure game.", "developers": [{"id": "521816665609207821", "name": "ErgoTM"}], "executables": [{"is_launcher": false, "name": "homesick/binaries/win64/udk.exe", "os": "win32"}, {"is_launcher": false, "name": "homesick/binaries/win32/udk.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e8b90da305d2119687844c4972541cc4", "id": "425454613827813376", "name": "Homesick", "publishers": [{"id": "521816665609207820", "name": "Lucky Pause"}], "splash": "716464159678e8052795de1c1fefff10", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "244910", "sku": "244910"}], "type": 1, "verify_key": "2330eec199c068a9f5206cb03096887e3c9253bb46e8577a40683a32cc56fe83"}, {"aliases": ["Shroud of the Avatar: Forsaken Virtues\t"], "description": "Shroud of the Avatar is the first installment of Portalarium's new vision and represents the reinvention of the classic, fantasy role-playing which Richard Garriott pioneered. A fantasy role-playing game that will focus more on player choices and discovery than on level grinding.", "developers": [{"id": "521816658981945367", "name": "Portalarium"}], "executables": [{"is_launcher": false, "name": "shroud of the avatar.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "23d63fa3377ddcf6346791c255944594", "id": "425454648623628288", "name": "Shroud of the Avatar", "publishers": [{"id": "521816658981945367", "name": "Portalarium"}], "summary": "", "type": 1, "verify_key": "c8c018e4ea7ca22c1071fbf9113fc21c5462cd9703ce848d1f003b1954d5a15f"}, {"aliases": ["Descent Underground"], "description": "Descent: Underground is a first person shooter with complete 3D movement, and funded by Kickstarter.", "developers": [{"id": "521816669211983875", "name": "Descendent Studios"}], "executables": [{"is_launcher": false, "name": "descent.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "31f1b94fa55b05d182a42e5f44edd890", "id": "425454679854678036", "name": "Descent: Underground", "publishers": [{"id": "521816669211983874", "name": "Descendent Studios Inc."}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "360950", "sku": "360950"}], "type": 1, "verify_key": "867421a5df9a6ee268c8261a2568dbfe7cfdce2debe561ffec3b80a7f27f4473"}, {"description": "A third-person Dead Island spin-off by Fatshark, focusing more on stealth and exploration than outright combat.", "developers": [{"id": "521816633392627715", "name": "Fatshark AB"}], "executables": [{"is_launcher": false, "name": "escapedeadisland.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3defe2ff70b5a33cf510b4b39d9a6408", "id": "425454719817875456", "name": "Escape Dead Island", "publishers": [{"id": "521816524403638274", "name": "Deep Silver"}], "splash": "3367c24bafe3157273d0f0f9c801138b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "226560", "sku": "226560"}], "type": 1, "verify_key": "d9a95899fd2b152042c87729e1699cb3ca181323a558d781589e9d6a640a6a7a"}, {"description": "", "developers": [{"id": "521816635749695509", "name": "ClockStone"}], "executables": [{"is_launcher": false, "name": "bridge_constructor_medieval.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f7dcfc32c3912461d40183cd7a65f892", "id": "425454757130272768", "name": "Bridge Constructor Medieval", "primary_sku_id": "489489624713003008", "publishers": [{"id": "521816561216913411", "name": "Headup Games"}], "slug": "bridge-constructor-medieval", "splash": "5907a3951cfda7b31ac26c9b5c88ac86", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "319850", "sku": "319850"}, {"distributor": "discord", "id": "489489624713003008", "sku": "489489624713003008"}], "type": 1, "verify_key": "1fcec6919f2e9d43a43f6fd66009e11f1037a78a9a933785feb687c7f94d5869"}, {"description": "The sequel to the multi-platform title \"Bridge Constructor.\" In Bridge Constructor Playground, players build bridges out of a variety of materials and stress test for stability.", "developers": [{"id": "521816635749695509", "name": "ClockStone"}], "executables": [{"is_launcher": false, "name": "bridgeconstructorplayground.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b40fdb7b378741f19efeb428c0a040d8", "id": "425454789405704202", "name": "Bridge Constructor Playground", "publishers": [{"id": "521816561216913411", "name": "Headup Games"}], "splash": "adb0f72630cc412ed49fb6555b78a727", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "279990", "sku": "279990"}], "type": 1, "verify_key": "3862973dadb18c5f489c4ee4b4728b9b1bf0f23167465d7fde564447c3259221"}, {"description": "Build ramps and loops to get to the goal in this new take on the Bridge Constructor series.", "developers": [{"id": "521816635749695509", "name": "ClockStone"}], "executables": [{"is_launcher": false, "name": "bridge_constructor_stunts.exe", "os": "win32"}, {"is_launcher": false, "name": "bridge constructor stunts/wmv9codec.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9f518e6b0a2b6dde46472afeabbbcbed", "id": "425454826042818590", "name": "Bridge Constructor Stunts", "publishers": [{"id": "521816561216913411", "name": "Headup Games"}], "splash": "a8eb5de01e815ad0f446f9d2f6f69e67", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "419080", "sku": "419080"}], "type": 1, "verify_key": "270ab54ee14012b60fd7fe9da66f8c15d478ba29d8580ee7e34e0ca9c499ae88"}, {"aliases": ["Deadly30"], "description": "Deadly 30 is a zombie survival game that combines the run-and-gun and tower defence genres.", "developers": [{"id": "521816561216913411", "name": "Headup Games"}], "executables": [{"is_launcher": false, "name": "deadly30.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ca6bca632bc9152ec33e492da73cab0f", "id": "425454866014404618", "name": "Deadly 30", "publishers": [{"id": "521816623976415269", "name": "Meridian4"}], "splash": "34f43be1ae72b724839d976a44b77ba7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "264730", "sku": "264730"}], "type": 1, "verify_key": "09744b03184038d85e7a7290a815a2e1cdcb50a5d8a3d60f2e24f084ef04a49e"}, {"description": "A rhythm based action game featuring music from Bossfight and the DJs of Geometry Dash.", "developers": [{"id": "521816627767934978", "name": "Incodra"}], "executables": [{"is_launcher": false, "name": "dubdash.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "162bde503f9012a1c30aa8e0281936fa", "id": "425454898759598080", "name": "Dub Dash", "publishers": [{"id": "521816561216913411", "name": "Headup Games"}], "splash": "bf6f931b68ad08bc547b79fd67eeeae5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "406940", "sku": "406940"}], "type": 1, "verify_key": "3825f0b445f59b860ecfb74171723afcc8b8b4da50c0263f77d2b34ff03af7c0"}, {"description": "Looterkings", "developers": [{"id": "521816732491317309", "name": "Looterkings"}], "executables": [{"is_launcher": false, "name": "looterkings.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "10d172d398141d955ac3c7ca0b278fad", "id": "425454939452604436", "name": "Looterkings", "publishers": [{"id": "521816732491317309", "name": "Looterkings"}], "splash": "f4fb5989e96ad1c7855427cb6bc275ba", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "397310", "sku": "397310"}], "type": 1, "verify_key": "c8eec3302cac14c897125083301c65d1021613605386b9764fd3caa1d6bff5f7"}, {"description": "A hilarious adventure role-playing rogue-like with a pixelated art style.", "developers": [{"id": "521816561640800266", "name": "The Bitfather"}], "executables": [{"is_launcher": false, "name": "pixel heroes - byte and magic.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1f910a1aa5083922d1eb7f4cfb45fe1e", "id": "425454980489543680", "name": "Pixel Heroes: Byte & Magic", "publishers": [{"id": "521816561216913411", "name": "Headup Games"}], "splash": "d1f0438674092974d0d730340efe096b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "338320", "sku": "338320"}], "type": 1, "verify_key": "c256738b6d22e64e550561ca7c780735079d2827affb5b152de1ba057270327d"}, {"description": "", "executables": [{"is_launcher": false, "name": "rockfest.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c5524f90f1465926484fb742f545a479", "id": "425455011221471232", "name": "Rockfest", "publishers": [{"id": "521816714791485464", "name": "Independent Arts"}], "splash": "685b4b7b54c04c38e33798bb0a9d2d06", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "754640", "sku": "754640"}], "type": 1, "verify_key": "afd2923c8a60796cc9a0626e2e3afcef99c9c4413f02a69c447f03b7b6f95d79"}, {"description": "", "developers": [{"id": "521816589050445826", "name": "Fabraz"}], "executables": [{"is_launcher": false, "name": "slime-san.exe", "os": "win32"}], "flags": 0, "guild_id": "410112046839889920", "hook": true, "icon": "8eba3a654eb3077e26a7223339734222", "id": "425455040082345984", "name": "Slime-san", "primary_sku_id": "469220845642973194", "publishers": [{"id": "521816561216913411", "name": "Headup Games"}], "slug": "slime-san", "splash": "eb20542cdd36025bab34b6b4ec96277b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "473530", "sku": "473530"}, {"distributor": "discord", "id": "469220845642973194", "sku": "469220845642973194"}], "type": 1, "verify_key": "0715ca18cb6d4661793f22ea700147793d67141fc52b49efe06efc1e96307523"}, {"description": "", "executables": [{"is_launcher": false, "name": "a new beginning/anb.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f23b3ecdcb1dffdc4d392ab107452e24", "id": "425455073661812766", "name": "A New Beginning - Final Cut", "publishers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "splash": "fca1f278047d4d72d4cd0bae2a534e1b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "105000", "sku": "105000"}], "type": 1, "verify_key": "2dcca15782bff1051516d826f3daf59a6f7b8d7326f224e0e32ffbfd9d3a237c"}, {"aliases": ["AER: Memories of Old"], "description": "As Auk, a girl with the ability to transform into a bird, explore what's left of a world forsaken by the gods.", "developers": [{"id": "521816728888410132", "name": "Forgotten Key"}], "executables": [{"is_launcher": false, "name": "aer.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e820d29d1d55590c49359ee554b15755", "id": "425455104632815636", "name": "AER Memories of Old", "publishers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "splash": "ad8ae5c0cdb71191462ce6880d1cb413", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "331870", "sku": "331870"}], "type": 1, "verify_key": "7ae40a953dd826af27f8ef62c052ffa449a1b126e35dbfabe9f9b63ed67e58bc"}, {"description": "Anna's Quest is an indie adventure game from Daedalic Entertainment", "developers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "executables": [{"is_launcher": false, "name": "anna's quest/anna.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "889d2f10ee84603393cde0fea7464dbe", "id": "425455138459746304", "name": "Anna's Quest", "publishers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "splash": "094d3eadf9ef93d9c6f3f4bd13ae4f02", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "327220", "sku": "327220"}], "type": 1, "verify_key": "81056dfadc80e2d91bce1099cff962fa11e428a35467ab3793a05889524220cf"}, {"description": "A turn-based strategy RPG from Daedalic Entertainment.", "developers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "executables": [{"is_launcher": false, "name": "blackguards.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "071544bd18c35c851a48335f41e50b2e", "id": "425455172714496015", "name": "Blackguards", "publishers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "splash": "420f991d9069fa360a17ae4bba2e8ed5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "249650", "sku": "249650"}], "type": 1, "verify_key": "8653f9d073026f7effec1dbffb55efc35ce0d98e3fb7f08b42d003788d9ae30d"}, {"description": "The sequel to the turn-based strategy game Blackguards.", "developers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "executables": [{"is_launcher": false, "name": "blackguards 2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4ddb4518e00c9df27ed7090f588ef1cf", "id": "425455204218175498", "name": "Blackguards 2", "publishers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "splash": "42d72cbaa5ef4376474bdc344251d430", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "314830", "sku": "314830"}], "type": 1, "verify_key": "a971ebd4be04a9065d496af1aba18feb0c8954b262733dd2658e6678e78a3816"}, {"description": "Crazy Machines 3 is a physics based puzzle game from FAKT Software.", "developers": [{"id": "521816635326201861", "name": "FAKT Software GmbH"}], "executables": [{"is_launcher": false, "name": "cm3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "22fffa02b01c51d02c24b820c29a798c", "id": "425455241597681664", "name": "Crazy Machines 3", "publishers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "splash": "39bc8028a6ec8f853cabf282072c292b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "351920", "sku": "351920"}], "type": 1, "verify_key": "a453092f686b3d7cb6d60507eeb2c6bd90fbf50e3f849305a87c6994309311d5"}, {"aliases": ["Edna and Harvey Harvey's New Eyes"], "description": "Figure out why Lilli is so sickly sweet in the latest Edna & Harvey release.", "developers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "executables": [{"is_launcher": false, "name": "edna and harvey harvey's new eyes/harvey.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b2eb854953bc72ce4851263a8ce1bc7e", "id": "425455277337214976", "name": "Edna & Harvey: Harvey's New Eyes", "publishers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "splash": "fe9b681fff8a830b30cab2beb8ec2a71", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "219910", "sku": "219910"}], "type": 1, "verify_key": "1179f56dce5161f026922fd8f9e96fe2de7c184d2f177e2e9d1b7f1399b9398e"}, {"aliases": ["Edna & Harvey The Breakout"], "description": "Edna and her stuffed pet Harvey find themselves in an insane asylum without any memory explaining why.", "developers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "executables": [{"is_launcher": false, "name": "edna.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6547cc389d4bf281a4532175172e6cbd", "id": "425455323646787584", "name": "Edna & Harvey: The Breakout", "publishers": [{"id": "521816788506509312", "name": "Viva Media, LLC"}], "splash": "e05e386d73e1960b47fb4ed4a2311b8c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "255320", "sku": "255320"}], "type": 1, "verify_key": "1206b262b37b5bc5f3a0e0082821755baf5b1b73a38ea5d70c7b67b8b689bc46"}, {"description": "Journey of a Roach is an adventure game about roaches living in a post apocalyptic world in which all humans have been wiped out by nuclear war.", "developers": [{"id": "521816706268659712", "name": "Koboldgames"}], "executables": [{"is_launcher": false, "name": "joar.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c026a8dd726c94c26020910f3180d1d3", "id": "425455356181872640", "name": "Journey of a Roach", "publishers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "splash": "f71a9ff8aa2ab8ab27a5991f494b0ed1", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "255300", "sku": "255300"}], "type": 1, "verify_key": "1728842666c30f3ebfefe499788f8143cb2bec1a3407c837dfe4d1bc7ead5a7e"}, {"description": "Adventure game developed by Daedalic Entertainment.", "developers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "executables": [{"is_launcher": false, "name": "the pillars of the earth/pillars.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "545f36d1485a22c8864046ee483ab245", "id": "425455393401995264", "name": "Ken Follett's The Pillars of the Earth", "publishers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "splash": "fc32b82ace18dceefe00120343177085", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "234270", "sku": "234270"}], "type": 1, "verify_key": "a58b4eebd1ec5b1c8d4b584d9c1d83cb4c18062487ad3c81852b8b802e076f35"}, {"description": "A point and click adventure game by Daedalic Entertainment.", "developers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "executables": [{"is_launcher": false, "name": "memoria.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "00d9b9aee5846659339d061a72db4980", "id": "425455438050623498", "name": "Memoria", "publishers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "splash": "980c29708b3a26a6e3e8c96674f88276", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "243200", "sku": "243200"}], "type": 1, "verify_key": "657c22ee17923cc218c53192d2043005fd2726774ebfb872188fadf457e55725"}, {"description": "A puzzle game from Gojira.", "developers": [{"id": "521816798140563477", "name": "Gojira"}], "executables": [{"is_launcher": false, "name": "munin.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9923ad8abfa32fc75a5ba0bd4dd892be", "id": "425455471172911104", "name": "Munin", "publishers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "splash": "0c036220b6fe27e1dd86a4cd4d6e311b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "281750", "sku": "281750"}], "type": 1, "verify_key": "bfadfe58a24ea9091a4de9233defac38f2c1381fc2f3754c61a46bc7b347f246"}, {"aliases": ["Shooting Stars", "ShootingStars.exe"], "description": "Meme filled top-down shooter", "executables": [{"is_launcher": false, "name": "shootingstars.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "375f9994ef15513c46f291128203d5d8", "id": "425455505331191808", "name": "Shooting Stars!", "publishers": [{"id": "521816749239435265", "name": "Bloodirony"}], "splash": "4972112d8a695831922d11e918e8298e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "415350", "sku": "415350"}], "type": 1, "verify_key": "9a5e982b9dd20186ac7a860a9061d6540c9ef97b5f8404d220809dd7537c4617"}, {"description": "From German developer Daedalic Entertainment, The Dark Eye: Chains of Satinav is a point-and-click adventure game set in the fantasy world of Aventuria. A murder of crows besieges the castle of Andergast, and its king employs a young birdcatcher, Geron. His task will not be simple, as darkness lurks.", "developers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "executables": [{"is_launcher": false, "name": "satinav.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "62db70840229dc811a4267610a922ba5", "id": "425455537803755530", "name": "The Dark Eye: Chains of Satinav", "publishers": [{"id": "521816524403638274", "name": "Deep Silver"}], "splash": "67d2c0c7848a4e7fa37ca1df8577d249", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "203830", "sku": "203830"}], "type": 1, "verify_key": "8005e6a7f019c4a9047dd46cc2ce1ff5cd9aa7700bf26117766c0ef32e4925b7"}, {"description": "The Long Journey Home is a procedurally generated space exploration game from Daedalic Entertainment.", "developers": [{"id": "521816563972571138", "name": "Daedalic Entertainment West"}], "executables": [{"is_launcher": false, "name": "tljh-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "184f36d320bd197481c474356b21b7db", "id": "425455571869761536", "name": "The Long Journey Home", "publishers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "splash": "b2c96b423b080dfbdcabbbd9ddfbc181", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "366910", "sku": "366910"}], "type": 1, "verify_key": "7907b0174a24322ec242e7edc08e2b3626b78fe16d4e2064eaf6260bd0ab4498"}, {"description": "A puzzle adventure game about 12 year old Jeremiah Hazelnut, a budding magician with the help of Marquis de Hoto, a well dressed rabbit. Developed by Daedalic Entertainment, makers of the Deponia series.", "developers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "executables": [{"is_launcher": false, "name": "the night of the rabbit/rabbit.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0acc60ed0c9e0629bebc1bb5cd3b18e5", "id": "425455612508241920", "name": "The Night of the Rabbit", "publishers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "splash": "8dac142b0734ee07e0220b8b99e3bc6f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "230820", "sku": "230820"}], "type": 1, "verify_key": "b40b4262eed051877b69ba6e87dcab520a815594981877409a952ba5cac4df02"}, {"description": "An adventure game developed by Daedalic Entertainment that follows the adventures of Sadwick, a depressed 12-year-old clown, who is part of a traveling circus and has been having recurring nightmares about the end of the world.", "developers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "executables": [{"is_launcher": false, "name": "twwse.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "eb01c390255483ca3a3b8c1d9f324b76", "id": "425455671052599296", "name": "The Whispered World Special Edition", "publishers": [{"id": "521816524403638274", "name": "Deep Silver"}], "splash": "3eb42180e35de1792feca8b0fa2093db", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "268540", "sku": "268540"}], "type": 1, "verify_key": "75e72b1414f4971bdbacbe150bdcdda455f1f1ec27ccf4ce8aca58d08280ea3e"}, {"description": "", "developers": [{"id": "521816661138079766", "name": "Clifftop Games"}], "executables": [{"is_launcher": false, "name": "kathyrain.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "853004cfe38a86899714af3c1f6d311d", "id": "425455715205906432", "name": "Kathy Rain", "primary_sku_id": "469319616481460235", "publishers": [{"id": "521816607941459969", "name": "Raw Fury"}], "slug": "kathy-rain", "splash": "1c596e3b615db44eee7ce5d477c2675a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "370910", "sku": "370910"}, {"distributor": "discord", "id": "469319616481460235", "sku": "469319616481460235"}], "type": 1, "verify_key": "5fbe2c262a588a9d16c22c1630f7010f672d663bfd9bb5b0b2f0ce7480b5a341"}, {"description": "Platformer from the makers of Knytt about saving animals. Has an algorithmic soundtrack.", "developers": [{"id": "521816614543294464", "name": "Nifflas Games"}], "executables": [{"is_launcher": false, "name": "uurnog.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f6c176e04873db0f179f78d1d339b4fd", "id": "425455750031081472", "name": "Uurnog Uurnlimited", "publishers": [{"id": "521816607941459969", "name": "Raw Fury"}], "splash": "befb7455e321b53513309beafd1fdf99", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "678850", "sku": "678850"}], "type": 1, "verify_key": "7f1d65046ac5afc3070f1e85d96b610e657b7e7db000593767813d2f52398dc1"}, {"description": "", "developers": [{"id": "521816748182339585", "name": "Long Hat House"}], "executables": [{"is_launcher": false, "name": "dandara.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e13ceb07c9d564c984efeabc4eecff55", "id": "425455780360355850", "name": "Dandara", "primary_sku_id": "471029491246956544", "publishers": [{"id": "521816607941459969", "name": "Raw Fury"}], "slug": "dandara", "splash": "9c60a8452d48f300c509eea4191f119a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "612390", "sku": "612390"}, {"distributor": "discord", "id": "471029491246956544", "sku": "471029491246956544"}], "type": 1, "verify_key": "c7140408246f7cbb0a293a5f700ce36b165fd8c2e2fea75b0eec3e22d986e87e"}, {"description": "A stop motion, point-and-click adventure comedy game by Doug TenNapel, Mike Dietz, and Ed Schofield; with music by Terry Scott Taylor.", "developers": [{"id": "521816547430236175", "name": "Pencil Test Studios"}], "executables": [{"is_launcher": false, "name": "armikrog.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2c0f67aa8057198473b85a39f5d05fe9", "id": "425455814497665034", "name": "Armikrog", "publishers": [{"id": "521816547430236175", "name": "Pencil Test Studios"}], "splash": "4f3f36e8676a35db0e08a03b2cba34a8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "334120", "sku": "334120"}], "type": 1, "verify_key": "45735e4417ba317371ac307bec27ea058fe7e1039835df9f818126352fed18de"}, {"description": "3D fantasy puzzle adventure about a lone girl named Moonchild who must explore the mysterious tower Toren.", "developers": [{"id": "521816633870647317", "name": "Swordtales"}], "executables": [{"is_launcher": false, "name": "toren.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f04dabf05da11dd7451fc0c32183a82b", "id": "425455851243831296", "name": "Toren", "publishers": [{"id": "521816509111336966", "name": "Versus Evil"}], "splash": "fadcf2855246af250dbe3faab76e4ec9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "320820", "sku": "320820"}], "type": 1, "verify_key": "824c87663eb8a7555b45de51c78aef99cb14e6fd8eda16d989d373641a0a8896"}, {"aliases": ["Call of Juarez: Gunslinger"], "description": "The fourth entry in Techland's Call of Juarez franchise returns to an American Old West setting, telling the story of bounty hunter Silas Greaves.", "developers": [{"id": "521816637956161558", "name": "Techland Sp. z o.o."}], "executables": [{"is_launcher": false, "name": "cojgunslinger.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b9265ea70ece29deb173bab8397d785d", "id": "425456506431995914", "name": "Call of Juarez - Gunslinger", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "summary": "", "type": 1, "verify_key": "339427341e4b93dab9da79f49467b0f53ba2753cde57f4a81a320a9b8e7b198f"}, {"description": "A Trials game set in the Blood Dragon universe.", "developers": [{"id": "521816618024828941", "name": "RedLynx Ltd"}], "executables": [{"is_launcher": false, "name": "trialsblooddragon.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "95d7e5d955f11d4dd58c842259575866", "id": "425456603765145656", "name": "Trials of the Blood Dragon", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "fed326d4e638b2581f47405bb1664f52", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "435480", "sku": "435480"}], "type": 1, "verify_key": "ac70cb4b62577501243007c5ab7b759ccdb5eda93d8d11c8781bdd7fb681e08a"}, {"description": "", "developers": [{"id": "521816672248791067", "name": "NovaLogic, Inc."}], "executables": [{"is_launcher": false, "name": "dftfd.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "991599b3c9afe7777170c99be95d5677", "id": "425456638154113044", "name": "Delta Force: Task Force Dagger", "publishers": [{"id": "521816774614974474", "name": "Global Software Publishing Limited"}], "splash": "745e79566ef20761cd1474b990b0c5b8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "32650", "sku": "32650"}], "type": 1, "verify_key": "ea9b34caf8579ebfaf5e7d2b54bc79e1257ed7319cd6cad342513b0ba657071e"}, {"description": "Lock's Quest is a tower defense game for the NDS from 5th Cell Media, featuring real-time strategy, RPG and action game mechanics.", "developers": [{"id": "521816570029146112", "name": "5th Cell Media"}], "executables": [{"is_launcher": false, "name": "locksquest.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4b244a0c8c5f6d0fc44b10cbe3ea258f", "id": "425456670362042368", "name": "Lock's Quest", "publishers": [{"id": "521816550596935692", "name": "THQ"}], "splash": "85f405727a265696ecb5dd121c3f9b32", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "490080", "sku": "490080"}], "type": 1, "verify_key": "4d4e5eec907e77a224fd33a554f6c8eb60d1ded80e96508b0622094593510684"}, {"description": "Rad Rodgers is a retro inspired action adventure game.", "developers": [{"id": "521816512085098544", "name": "Interceptor Entertainment"}], "executables": [{"is_launcher": false, "name": "rad-win64-shipping.exe", "os": "win32"}], "flags": 0, "guild_id": "370945338087047180", "hook": true, "icon": "cf28ce07731423020aa192ab673faccc", "id": "425456700640985108", "name": "Rad Rodgers", "publishers": [{"id": "521816512085098539", "name": "3D Realms Entertainment"}], "splash": "48d4e55ad089c8628b59812dd4d3d75b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "805660", "sku": "805660"}], "type": 1, "verify_key": "f88fc532c68aaaa72f06c214dd289abdffaea0dfed6c8e04f1aba97a870dc581"}, {"aliases": ["Tachyon The Fringe"], "description": "Experience the life of Jake Logan, a rough-and-tumble privateer voiced by Bruce Campbell. Sent to the fringe of Human civilization for a crime he didn't commit, players must either thwart or assist the efforts of a major corporation to conquer an important sector of space. ", "developers": [{"id": "521816672248791067", "name": "NovaLogic, Inc."}], "executables": [{"is_launcher": false, "name": "tachyon the fringe/tachyon.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "522b58f888c3e1c27bac8c4c1403932c", "id": "425456735050924032", "name": "Tachyon: The Fringe", "publishers": [{"id": "521816548059643905", "name": "1C Company"}], "splash": "0bddb81ddf317ac169e9d39c76ec4e09", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "32760", "sku": "32760"}], "type": 1, "verify_key": "902f0af430c485718cf4bc5b0db461e2b2a9cc472892e9f4dfd475c0903c786d"}, {"description": "A prequel to The Book of Unwritten Tales. Details how Nate Bonnett and Critter first met.", "developers": [{"id": "521816646768263170", "name": "King Art Games"}], "executables": [{"is_launcher": false, "name": "critterchronicles.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "115b39f0a6e1abc66de6320bea4eb038", "id": "425456762569621514", "name": "The Book of Unwritten Tales: The Critter Chronicles", "primary_sku_id": "489215994674413569", "publishers": [{"id": "521816508167487498", "name": "THQ Nordic"}], "slug": "the-book-of-unwritten-tales-the-critter-chronicles", "splash": "1d1adb2bb11d24226cc2f1335162c4a4", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "489215994674413569", "sku": "489215994674413569"}, {"distributor": "steam", "id": "221830", "sku": "221830"}], "type": 1, "verify_key": "63f9fc2443fa543dab2f3202b63fca500501f8112859c08143cb464e588f7adb"}, {"aliases": ["INSIDE"], "description": "", "developers": [{"id": "521816599607508999", "name": "Playdead"}], "executables": [{"is_launcher": false, "name": "inside/inside.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5d362c0f7ab6d7ec360ee4218280901f", "id": "425456795683913750", "name": "Inside", "primary_sku_id": "489929019895316481", "publishers": [{"id": "521816599607508999", "name": "Playdead"}], "slug": "inside", "splash": "c21db5e37b63f441f29455b01e588320", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "489929019895316481", "sku": "489929019895316481"}], "type": 1, "verify_key": "e78bac5572196d709f50abb5491cc032a2060504ebc7594216fbb0de53e2d520"}, {"description": "The Universim is a planet simulation and management game from Crytivo Games.", "developers": [{"id": "521816764376678402", "name": "Crytivo Games"}], "executables": [{"is_launcher": false, "name": "the universim.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d5709a3fa71cf2e663be2ad3bafe3520", "id": "425456822258892810", "name": "The Universim", "publishers": [{"id": "521816764376678402", "name": "Crytivo Games"}], "splash": "8bbc3809bef0e75b5be24e54e633a75c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "352720", "sku": "352720"}], "type": 1, "verify_key": "f1a81a58cf0fd158476ea210e7821a39c46264f0e08cda6169b896f7c23e0577"}, {"description": "", "developers": [{"id": "521816542707449859", "name": "Animation Arts Creative GmbH"}], "executables": [{"is_launcher": false, "name": "lost horizon/autostarter.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d2812beaf4e91ea612abef5f886a0115", "id": "425456853070118922", "name": "Lost Horizon", "primary_sku_id": "474763274060038154", "publishers": [{"id": "521816552501411875", "name": "Animation Arts"}, {"id": "521816524403638274", "name": "Deep Silver"}], "slug": "lost-horizon", "splash": "94bf69d648b9ea4ed7ea819ef0455a0c", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "474763274060038154", "sku": "474763274060038154"}, {"distributor": "steam", "id": "40350", "sku": "40350"}], "type": 1, "verify_key": "cfce40d265b6818064c5d5d9bf001d0336f39fc540ec39b4dd5246b31e4f6fd8"}, {"description": "An indie turn-based strategy RPG inspired by Fire Emblem and Final Fantasy Tactics.", "developers": [{"id": "521816561216913411", "name": "Headup Games"}], "executables": [{"is_launcher": false, "name": "grotesque tactics.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "228b0cc4b919effbb18f918bcbab1050", "id": "425456981332197386", "name": "Grotesque Tactics: Evil Heroes", "publishers": [{"id": "521816623976415269", "name": "Meridian4"}], "splash": "b5982efe7a05645f3ba0dc166c0ca39b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "46450", "sku": "46450"}], "type": 1, "verify_key": "bc6af22a3869494904c841ae758937810368b21a270edca3389ab672daabc621"}, {"description": "In Between is a mind-bending platformer that defies physics.", "developers": [{"id": "521816787487162388", "name": "Gentlymad"}], "executables": [{"is_launcher": false, "name": "in between.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d98a7f52d563717263545d48b9c87c61", "id": "425457045098070026", "name": "In Between", "publishers": [{"id": "521816561216913411", "name": "Headup Games"}], "splash": "e4f3c16203ea2b6e375322e682db7abd", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "388420", "sku": "388420"}], "type": 1, "verify_key": "593393a37092bdaccf615042fb5cdfcf4f20aa16496215aaa4611dea2da6c412"}, {"description": "\"Meridian: New World\" is a newly released RTS game with RPG elements.", "developers": [{"id": "521816584612872205", "name": "Elder Games"}], "executables": [{"is_launcher": false, "name": "meridian - new world.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "20ba4356ca0d6c6b5a0a9aaa2bfd79ad", "id": "425457072818094080", "name": "Meridian: New World", "publishers": [{"id": "521816561216913411", "name": "Headup Games"}], "splash": "cbd6bad3d287ebeff0244a376c878360", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "265120", "sku": "265120"}], "type": 1, "verify_key": "6be25ec5fcee13d838e6cb2052a414fe8eec83f61d44ffb8aef2909d958b5c40"}, {"description": "", "executables": [{"is_launcher": false, "name": "safetyfirst.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1ce7b93da7116ff0e9b4143ca4cf258e", "id": "425457108167950346", "name": "Safety First!", "publishers": [{"id": "521816675008380950", "name": "JCO"}], "splash": "c1b0debe55759757563a8f88cb6a6de5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "497700", "sku": "497700"}], "type": 1, "verify_key": "5164a58e15f3d32084943f8e5a82c00f537b21b11ba8526d69acb60c53ade63e"}, {"description": "Medieval city building management game", "developers": [{"id": "521816705295712276", "name": "HandyGames"}], "executables": [{"is_launcher": false, "name": "townsmen.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ea20325e40acdb67a53168aeae731e76", "id": "425457401769099297", "name": "Townsmen", "publishers": [{"id": "521816561216913411", "name": "Headup Games"}], "splash": "7555ba4864372dc7deede0925ddd877a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "486540", "sku": "486540"}], "type": 1, "verify_key": "b64380a518ab8f1da7881d3f37aaab3b8117fcb67e0d9350da419b08086a4ca6"}, {"description": "Action game for Steam VR", "executables": [{"is_launcher": false, "name": "vikingrage.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "df0126d5ad6b73420255e2ab27840411", "id": "425457433565986838", "name": "Viking Rage", "publishers": [{"id": "521816803228254218", "name": "N-Gon Entertainment"}], "splash": "8aab9cf706fae6dffc2e7dafcd4310e3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "589150", "sku": "589150"}], "type": 1, "verify_key": "a3497464f99ad427d4ea66ff16af14e480a0053535c46e3771e0c5351319b588"}, {"description": "Windscape is a first-person RPG from Magic Sandbox.", "developers": [{"id": "521816584076132354", "name": "Magic Sandbox"}], "executables": [{"is_launcher": false, "name": "windscape.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c2307006ad11c658d747720a6a616f0b", "id": "425457461731000320", "name": "Windscape", "publishers": [{"id": "521816561216913411", "name": "Headup Games"}], "splash": "b393beecf82b44f7f1d104bd1d55b4d8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "363950", "sku": "363950"}], "type": 1, "verify_key": "774b9313a9453870087e46d7e10e87fe32e61f0e251651a1aef210d7612d7c2d"}, {"aliases": ["Assassin's Creed Liberation"], "description": "This HD remake of Assassin's Creed III: Liberation depicts the struggles of 18th-century Assassin Aveline de Grandpr\u00e9 against the oppressive Templar Order in the city of New Orleans, using three distinct \"personas\" to fool and defeat her enemies.", "developers": [{"id": "521816551955890205", "name": "Ubisoft Sofia"}], "executables": [{"is_launcher": false, "name": "ac3lhd_32.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7b390686f395da080e042f90ddc2f991", "id": "425457838731690003", "name": "Assassin's Creed Liberation HD", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "summary": "", "type": 1, "verify_key": "10844eaf59daf318093e95bca37a3838aecab9fc37fdaa9b3375cf67b59c01ce"}, {"aliases": ["Justice League VR"], "description": "A set of virtual reality mini-games based on the 2017 film \"Justice League\".", "developers": [{"id": "521816639512248332", "name": "Method EXP"}], "executables": [{"is_launcher": false, "name": "justice_league_vr_the_complete_experience-1.0.1-htcvive-release.exe", "os": "win32"}, {"is_launcher": false, "name": "justice_league_vr_the_complete_experience-1.0.0-htcvive-release.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "24888d507e977cad85795f67cf210a75", "id": "425457887339348005", "name": "Justice League VR: The Complete Experience", "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "splash": "f294722fd4e9f58d253e4bb020dc5e72", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "752750", "sku": "752750"}], "type": 1, "verify_key": "83f2a2e4cd88cb95b4e6f5633d457e2f0c5c83ea9d8277145f3df145c601d155"}, {"aliases": ["South Park: The Stick of Truth", "South Park\u2122: The Stick of Truth\u2122"], "description": "An Obsidian-developed role-playing game based on the South Park animated TV series, in which players control a new kid in the eponymous town of South Park and takes part in an epic pretend-fantasy story that threatens the entire town.", "developers": [{"id": "521816588169510930", "name": "Obsidian Entertainment"}], "executables": [{"is_launcher": false, "name": "south park - the stick of truth.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "40ac5c9055e5f58fbd1587f62801f660", "id": "425457961574596608", "name": "South Park The Stick of Truth", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}, {"id": "521816588169510930", "name": "Obsidian Entertainment"}], "splash": "ed6932ba8607a3faa5fbdc9d30db0fbe", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "213670", "sku": "213670"}], "type": 1, "verify_key": "03ae0ea2c184c4130fb9bc5351e972f358c1ac5813b3c8a96990e98ac22ad86f"}, {"description": "Kickstarter funded turn based Strategy game inspired by classics such as Battle Isle, Advance Wars, and Panzer General developed by KING Art Games.", "developers": [{"id": "521816646768263170", "name": "King Art Games"}], "executables": [{"is_launcher": false, "name": "battleworldskronos.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d513a1421f35b58cc88b6feabb824c7e", "id": "425458030537211904", "name": "Battle Worlds: Kronos", "publishers": [{"id": "521816710106447873", "name": "KING Art Games"}, {"id": "521816710106447875", "name": "KING Art"}], "splash": "5c4c263564685c5a96d366535f8046a6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "237470", "sku": "237470"}], "type": 1, "verify_key": "554aada2036e4652ac2204b1022ce9d5e85e028f2de017af94bc89cdb7de20d3"}, {"description": "", "executables": [{"is_launcher": false, "name": "overclocked/ocd.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d9dfffee99992c17aa0edcf633f21e98", "id": "425458153262546944", "name": "Overclocked: A History of Violence", "publishers": [{"id": "521816792352555029", "name": "House of Tales"}], "splash": "ee50d245e6db3de75e24cee443ba1c38", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "339850", "sku": "339850"}], "type": 1, "verify_key": "8b05894af0216823c688a0c5c7f4c551efda261c7352a4378c217a2bf633518a"}, {"aliases": ["SuperPower 2 Steam Edition"], "description": "Take control of any country in the world in this Geo Political Simulator.", "developers": [{"id": "521816601691947039", "name": "GolemLabs"}], "executables": [{"is_launcher": false, "name": "joshua.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e1f4505e12546ab337b56d01e9a48c31", "id": "425458179539730462", "name": "SuperPower 2", "publishers": [{"id": "521816508167487498", "name": "THQ Nordic"}], "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}], "type": 1, "verify_key": "2e727e992693292abf9c9c17bd770d0fd14419727756fd7bd5b48c88c0f0022a"}, {"aliases": ["This Is The Police", "This Is the Police"], "description": "", "developers": [{"id": "521816558096351232", "name": "Weappy Studio"}], "executables": [{"is_launcher": false, "name": "this is the police/police.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c77d85bd82631780cb7320ac6b043254", "id": "425458210175188992", "name": "This is the Police", "primary_sku_id": "489072050477203460", "publishers": [{"id": "521816508167487498", "name": "THQ Nordic"}], "slug": "this-is-the-police", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "489072050477203460", "sku": "489072050477203460"}], "type": 1, "verify_key": "7be2481aef4f46db0882c4d7cad8028fb67eb8d116bc9991d60a19420b3a6cd7"}, {"aliases": ["SUPERHOT"], "description": "SUPERHOT is a puzzling first-person shooter where time progresses as the player moves.", "developers": [{"id": "521816517512265757", "name": "SUPERHOT Team"}], "executables": [{"is_launcher": false, "name": "superhot/sh.exe", "os": "win32"}, {"is_launcher": false, "name": "superhot.exe", "os": "win32"}], "flags": 0, "guild_id": "385450774949396480", "hook": true, "icon": "0ac7e843e9f0d408a4419a29caceccce", "id": "425458238595661854", "name": "Superhot", "publishers": [{"id": "521816517512265757", "name": "SUPERHOT Team"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "322500", "sku": "322500"}], "type": 1, "verify_key": "9b447daed526e024d41a676bdfe93ba5cc0eb24eff82a5698c193c35697bde8a"}, {"description": "Lost Horizon is the next installment in the graphical adventure series by Deep Silver.", "developers": [{"id": "521816542707449859", "name": "Animation Arts Creative GmbH"}], "executables": [{"is_launcher": false, "name": "losthorizon2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0390ee7f82ab7619689a6b34daf33d25", "id": "425458269360750592", "name": "Lost Horizon 2", "publishers": [{"id": "521816524403638274", "name": "Deep Silver"}], "splash": "fbccba1b695c1ef4aca52fa30f81a454", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "395560", "sku": "395560"}], "type": 1, "verify_key": "e22b4013bc737971710f641fdf950f6bb585c611720ae8e04b17d3711b588b59"}, {"aliases": ["Metro Redux\t", "Metro: Redux"], "description": "", "developers": [{"id": "521816528417718311", "name": "4A Games"}], "executables": [{"is_launcher": false, "name": "metro 2033 redux/metro.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "22a2dbee468b658c0d81e172d77afdbd", "id": "425458328278401044", "name": "Metro Redux", "publishers": [{"id": "521816524403638274", "name": "Deep Silver"}], "summary": "", "type": 1, "verify_key": "6e3198179b5c4e375f7a7c433a3daea069f9a8116bf0f0c46a0a84456385c3e3"}, {"description": "The third game in the Secret Files series.", "developers": [{"id": "521816542707449859", "name": "Animation Arts Creative GmbH"}], "executables": [{"is_launcher": false, "name": "secretfiles3/fsasgame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "173cdd22857cc7d45f70ea3827dd4ac3", "id": "425458354756911104", "name": "Secret Files 3", "publishers": [{"id": "521816524403638274", "name": "Deep Silver"}], "splash": "0c946c3f9eb2d47b3281bda9d4b7ac7c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "216210", "sku": "216210"}], "type": 1, "verify_key": "808d3f26cab8885a490527b248ba6a1b51f142cde38310679b2b1e889fd87c60"}, {"description": "A cutesy game about guiding sheep around.", "developers": [{"id": "521816705295712276", "name": "HandyGames"}], "executables": [{"is_launcher": false, "name": "cloudsandsheep2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1394f91cea2c9917b44416096ad6903a", "id": "425458381835206656", "name": "Clouds & Sheep 2", "publishers": [{"id": "521816561216913411", "name": "Headup Games"}], "splash": "04ff990d1669d82934e86f83b26d27db", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "439800", "sku": "439800"}], "type": 1, "verify_key": "afb28b119b92b595644825fe23c1243a57ba8c17487c077f325c3491bc2764fb"}, {"description": "Future Wars is an independently developed turn based strategy game for the PC that is heavily inspired by the Advance Wars series.", "developers": [{"id": "521816561216913411", "name": "Headup Games"}], "executables": [{"is_launcher": false, "name": "futurewars.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d37189b2023daabfd23f045d4a84b66e", "id": "425458408037285888", "name": "Future Wars", "publishers": [{"id": "521816623976415269", "name": "Meridian4"}], "splash": "d0464581dbd2fe2798a9c2dd02a5b491", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "46440", "sku": "46440"}], "type": 1, "verify_key": "25a238c11a5c9870d760e9acd4d925e49c63548e71547db5aa9aa647d855e240"}, {"description": "", "executables": [{"is_launcher": false, "name": "gameroyale2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "32a79ebac6d69a933708d0396bd5b748", "id": "425458432569638912", "name": "Game Royale 2 - The Secret of Jannis Island", "publishers": [{"id": "521816610097594397", "name": "btf GmbH"}], "splash": "8aaa940823acbfada2783c82f07e97bc", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "567010", "sku": "567010"}], "type": 1, "verify_key": "7f416b9c4102be2d729d9d4226b00a968686099ecffe63dd9a16ddc4b4392a02"}, {"aliases": ["Greed Black Border"], "description": "Greed is a hack-n-slash RPG from ClockStone studios. The game takes place on a mining ship that lost communication and stopped working. You play as one of the three different classes available. ", "developers": [{"id": "521816635749695509", "name": "ClockStone"}], "executables": [{"is_launcher": false, "name": "greed black border/greed.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b0152ef9eeb1d5202a2841209323e697", "id": "425458464714653696", "name": "Greed: Black Border", "publishers": [{"id": "521816561216913411", "name": "Headup Games"}], "splash": "0d8809087e43c0e66b68be5c6b0b6940", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "46400", "sku": "46400"}], "type": 1, "verify_key": "0af97b08dd35e29e1e92c2f7fb16b9ea7a5ead046e21103e67c471a2f08411d5"}, {"description": "To get a bit of relaxation after the last big battle of Grotesque Tactics 2: Dungeons & Donuts Holy Avatar decides to take a trip off-the-cuff with his Guild of Maidens on a Caribbean island, his recently purchased \u201cHoly Island\u201d.", "developers": [{"id": "521816561216913411", "name": "Headup Games"}], "executables": [{"is_launcher": false, "name": "holyavatarvs.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e709815a0b73675030967fa79c0ec5f6", "id": "425458490878984192", "name": "Holy Avatar vs. Maidens of the Dead", "publishers": [{"id": "521816561216913411", "name": "Headup Games"}], "splash": "a00d421284ba94bb3385380753f1049b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "261720", "sku": "261720"}], "type": 1, "verify_key": "9854b91fb128d6cb9d517b97bd66e356da8278bb9e289226cf6dd07ad3c2cec2"}, {"description": "Meridian: Squad 22", "developers": [{"id": "521816584612872205", "name": "Elder Games"}], "executables": [{"is_launcher": false, "name": "squad22.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b6f557e1c0dbe201b337461dc79c4a97", "id": "425458524865298432", "name": "Meridian: Squad 22", "publishers": [{"id": "521816679785824266", "name": "Merge Games"}], "splash": "0cdca0d4b0c85629674f67cc2ee77058", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "451400", "sku": "451400"}], "type": 1, "verify_key": "a3b289b896b1cefeb8e6e52f2fa9114661719e4af8fa268a7892eaa011114476"}, {"description": "Race.a.bit is a retro-styled racing game that features an 8 and 16-bit art style.", "developers": [{"id": "521816749830701056", "name": "Aesir Interactive"}], "executables": [{"is_launcher": false, "name": "raceabit.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a33f54ee23e8a89c87b7f0e347ad45d4", "id": "425458558620925982", "name": "Race.a.bit", "publishers": [{"id": "521816561216913411", "name": "Headup Games"}], "splash": "5d158c47ced176e3f466a6c982d408d3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "336030", "sku": "336030"}], "type": 1, "verify_key": "a4cb73f75ac3e6b0a0d5b5dee3fbca61640f02a9c9796bcbf4eb0863216632f9"}, {"description": "A platformer starring Shiny the Firefly.", "developers": [{"id": "521816683913150496", "name": "Stage Clear Studios"}], "executables": [{"is_launcher": false, "name": "shiny the firefly/shiny.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1dad916b4ec8eb8e4af444b445fe03d6", "id": "425458574731509760", "name": "Shiny The Firefly", "publishers": [{"id": "521816561216913411", "name": "Headup Games"}], "splash": "f9c1eb2d3333d2b5fce47df730425e2a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "277510", "sku": "277510"}], "type": 1, "verify_key": "774306bcc32aa64651a0c661dcfca22c9a0f7611d1495846adb664ea13a22a0d"}, {"description": "", "executables": [{"is_launcher": false, "name": "skilltree.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3d06e26b857fce0c55824fa4cd661781", "id": "425458587985379328", "name": "Skilltree Saga", "publishers": [{"id": "521816709490016256", "name": "Silent Dreams"}], "splash": "cc8922c135337c9e275d34dea9b56923", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "315320", "sku": "315320"}], "type": 1, "verify_key": "d413eb9d876cec41d68e1329928e1112a604da1b04f96bd6fda97789748dab0f"}, {"aliases": ["Soulcraft"], "description": "A hack and slash RPG", "developers": [{"id": "521816792352555028", "name": "MobileBits GmbH"}], "executables": [{"is_launcher": false, "name": "soulcraft.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f6aebb812d2ec63bddd0db2a56edee57", "id": "425458618108739614", "name": "SoulCraft", "publishers": [{"id": "521816561216913411", "name": "Headup Games"}], "splash": "0fb563e8ddf84a5e5b868248eabd32de", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "369180", "sku": "369180"}], "type": 1, "verify_key": "b4da86fd13bb449722e22b1ba1bd169e91df0430712e8de85bc0087a04ab56bf"}, {"description": "A game featuring space battles that is a mix between MOBA and RTS.", "developers": [{"id": "521816561216913411", "name": "Headup Games"}], "executables": [{"is_launcher": false, "name": "stellarimpact.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "174e864d47d5e4e1f23ef8e5f07a7bae", "id": "425458648006000640", "name": "Stellar Impact", "publishers": [{"id": "521816503465803785", "name": "Meridian 4, Inc."}], "splash": "2717e4c9944c241fc7405b1347e7d074", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "207150", "sku": "207150"}], "type": 1, "verify_key": "3c760081e935f84544d10e3d3d7ac728fa542d7dc849c0f48eaad863cdf19886"}, {"description": "Subsiege", "executables": [{"is_launcher": false, "name": "submerge-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9e76060ea2bc3a63c3ab322a09838cb8", "id": "425458682566934538", "name": "Subsiege", "publishers": [{"id": "521816691479674881", "name": "Icebird Studios"}], "splash": "ef38878b88bd4cc3adb38b4441f98c02", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "338640", "sku": "338640"}], "type": 1, "verify_key": "7baf13ad3a554f621174b32b1c8c45b248c8999b013ec9045f4a8821fbc92bb0"}, {"description": "Super Treasure Arena is a 4-player brawler with pixel graphics.", "developers": [{"id": "521816806176980992", "name": "Treasure Arena"}], "executables": [{"is_launcher": false, "name": "super treasure arena.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "aad52599d4ebc69dbb7c677b11c4aff7", "id": "425458718537154560", "name": "Super Treasure Arena", "publishers": [{"id": "521816561216913411", "name": "Headup Games"}], "splash": "da04249ee981204b7a5d675e826f9729", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "338330", "sku": "338330"}], "type": 1, "verify_key": "06acd2b530c8c46d2eb31837baff8379e4841340f64b999368f78529f45b21f1"}, {"description": "", "executables": [{"is_launcher": false, "name": "trappeddeadlockdown.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2c47081d9c116cacebe1e09a1c7d3583", "id": "425458758504939540", "name": "Trapped Dead: Lockdown", "publishers": [{"id": "521816630808805388", "name": "Bigmoon Studios"}], "splash": "a3fa668035f01b9a24ff659d2505faa8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "305500", "sku": "305500"}], "type": 1, "verify_key": "a0de693b13190d307a8a5a653d948c845f7b2a33ac5b0ab8a052c26fd2ba6465"}, {"description": "", "executables": [{"is_launcher": false, "name": "tristoy.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "16929d386e2f9de7a650c28ee0f695af", "id": "425458781451845632", "name": "TRISTOY", "publishers": [{"id": "521816731153596447", "name": "Uniworlds Game Studios"}], "splash": "7148f2da0c5e82f96990c269856124c6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "303260", "sku": "303260"}], "type": 1, "verify_key": "7779aa71aa293f887cc18fbf0d3f0bca9cb198bbdbef93b2f8469095c4692de4"}, {"description": "Trulon: The Shadow Engine is an adventure RPG with unique card combat system, steampunk and magic.", "developers": [{"id": "521816630355951628", "name": "Kyy Games"}], "executables": [{"is_launcher": false, "name": "trulon.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "49b43edf45f2f3aa2dd19786edb8267e", "id": "425458804868513802", "name": "Trulon: The Shadow Engine", "publishers": [{"id": "521816561216913411", "name": "Headup Games"}], "splash": "75f21550789cb205dd1d5f228e4c801f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "433840", "sku": "433840"}], "type": 1, "verify_key": "f0defc75d7806254e635a97c4201a0aabd546c5d8bc81a29f04d0aa4714c8e60"}, {"description": "Twin Sector is a first-person physics based puzzle game by DnS Development.", "developers": [{"id": "521816565096775693", "name": "DnS Development"}], "executables": [{"is_launcher": false, "name": "twinsector_steam.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7a754e1bb7552874dd1bdef7ffeff15a", "id": "425458819636920320", "name": "Twin Sector", "publishers": [{"id": "521816565096775692", "name": "Got Game Entertainment, LLC"}], "splash": "1bcc3836f22792a11c6a2ca58c154891", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "27900", "sku": "27900"}], "type": 1, "verify_key": "e1c287ba01cd29d578090d0db1882350c16076366f06a715440aaf00086367f6"}, {"aliases": ["Gotham City Impostors: Free To Play"], "description": "", "executables": [{"is_launcher": false, "name": "gotham city impostors f2p/engine.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "45ab76dd90e55b2ffd71573ebd73eedc", "id": "425459839494389780", "name": "Gotham City Impostors Free to Play", "publishers": [{"id": "521816711532511245", "name": "Monolith Productions, Inc."}], "splash": "58711b9e784b6b2498239251d173a54d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "206210", "sku": "206210"}], "type": 1, "verify_key": "41abf90abb989c389356c3530dd9f23a872f382b8d87932f6ee47ef9f068f67d"}, {"aliases": ["Heroes of Might & Magic III - HD Edition", "Heroes of Might and Magic III: Horn of the Abyss"], "description": "", "executables": [{"is_launcher": false, "name": "homm3 2.0.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "27af25ec2728542e6e359add2b01aae6", "id": "425459913200762889", "name": "Heroes of Might and Magic III HD", "publishers": [{"id": "521816526362247175", "name": "DotEmu"}], "splash": "49f1b5a4e64b810b0edd4ef6228c0ef4", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "297000", "sku": "297000"}], "type": 1, "verify_key": "a8e34e79aaf7c3d7529cbb15159a62b9b2951dc754ded5b0a408e25a0bcdb5fd"}, {"aliases": ["Heroes of Might & Magic V"], "description": "", "executables": [{"is_launcher": false, "name": "h5_game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ca10db79f85d7a979f460138bf5e19d1", "id": "425460002761998347", "name": "Might and Magic - Heroes V", "publishers": [{"id": "521816529948639233", "name": "Nival"}], "splash": "98c141d8a660016ffe4e5947ade56134", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "15170", "sku": "15170"}], "type": 1, "verify_key": "0e32753004ba1c4296c18d2774be5421baf8523254a3a43e49875509eb45200d"}, {"aliases": ["LEGO Batman 2"], "description": "Sequel to 2008's LEGO Batman, Batman and Robin are forced to work together alongside the likes of Superman, Wonder Woman and Green Lantern to help stop the combined tyranny of Lex Luthor and The Joker.", "developers": [{"id": "521816611506880523", "name": "TT Games"}], "executables": [{"is_launcher": false, "name": "legobatman2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2bd8897c6aff6487deb9feedf50d9bab", "id": "425460322619490304", "name": "LEGO\u00ae Batman 2 DC Super Heroes\u2122", "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "splash": "48dd5f5d10b53c02889390983f9c3200", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "213330", "sku": "213330"}], "type": 1, "verify_key": "dd4d6ed4d968db41d8f537131efc4b07c923eaf53f65ae9a7dd5b9b8e53998f6"}, {"aliases": ["LEGO Batman: The Videogame"], "description": "LEGO Batman: The Video Game is an action adventure platformer focused on the combination of the popular Batman universe and the continued licensing of Lego-styled video games.", "developers": [{"id": "521816611506880523", "name": "TT Games"}], "executables": [{"is_launcher": false, "name": "legobatman.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e68883a8d4206a9dd5c5eb3e25006e13", "id": "425460379624144925", "name": "LEGO Batman", "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "splash": "089428701b909d7bb1a079ac3b1292e7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "21000", "sku": "21000"}], "type": 1, "verify_key": "03edfb3ead25f1d0d2ca163382576f373b726f6728ce2f1429ece60ce3824ae1"}, {"aliases": ["Lego Harry Potter"], "description": "The popular LEGO franchise adds Harry Potter to its list of conquests in this action-adventure from Warner Bros and Traveller's Tales. The game covers the first four books/movies, and Hogwarts acts as a main hub, containing many secret areas and unlockables.", "developers": [{"id": "521816611506880523", "name": "TT Games"}], "executables": [{"is_launcher": false, "name": "legoharrypotter.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3f78b31d6488fefdf3a6d64ef6efce82", "id": "425460457558769674", "name": "LEGO Harry Potter: Years 1-4", "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "splash": "2eb795534738314b1fe5443baf1d36ae", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "21130", "sku": "21130"}], "type": 1, "verify_key": "279509caf673a66c352510c3fc04e119d90732ca1386a80d3a638d320c30fd87"}, {"aliases": ["Scribblenauts Unmasked"], "description": "A Scribblenauts game that features DC Comics characters. About 2,000 characters in total, supposedly all of them. Also included is a Hero Creator that lets players make their own Hero and a procedural puzzle generator that makes a new puzzle every time a map is loaded.", "developers": [{"id": "521816570029146112", "name": "5th Cell Media"}], "executables": [{"is_launcher": false, "name": "scribblenauts unmasked/scribble.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6438ac4171c2ea04ce84a32fa1ff42ac", "id": "425460538110246912", "name": "Scribblenauts Unmasked: A DC Comics Adventure", "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "splash": "0c54b82e5ff825841fc4cc46440765d9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "249870", "sku": "249870"}], "type": 1, "verify_key": "f09a44f4027443c188b7b0bb525ce867154b8892190c38d875d3d6dc975f94ea"}, {"aliases": ["Silent Hunter III"], "description": "Silent Hunter III puts players in the role of a German U-Boat captain during WWII. Their mission: To cut off enemy supply lanes in the Atlantic.", "developers": [{"id": "521816515113385985", "name": "Ubisoft Bucharest"}], "executables": [{"is_launcher": false, "name": "sh3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "cd7162f58778fd584a6bdc03788d0352", "id": "425460595718881280", "name": "Silent Hunter 3", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "8995baa2797c5839e9afd418ad0767f6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "15210", "sku": "15210"}], "type": 1, "verify_key": "0809f81082e4d4edd82324f43f3c17633a75e19f0d8726f5badcb1be762335c6"}, {"aliases": ["South Park The Fractured But Whole"], "description": "South Park takes on superheroes in this follow up to The Stick of Truth.", "developers": [{"id": "521816683913150495", "name": "South Park Digital Studios"}], "executables": [{"is_launcher": false, "name": "southpark_tfbw.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0ca50bb29465623cfafaac0db19f3397", "id": "425460666930036736", "name": "South Park Fractured But Whole", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}, {"id": "521816683913150494", "name": "Ubisoft San Francisco"}], "splash": "74e4fedb70e54a4f33d571cc3750dad7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "488790", "sku": "488790"}], "type": 1, "verify_key": "109b20dc79ecfbdf5c6b7adfc6f0b7dd9e0cf9b92325bd428164244cae1c0e09"}, {"aliases": ["The Lord of the Rings: War in the North"], "description": "A hack-and-slash action-RPG featuring cooperative multiplayer developed by Snowblind Studios under the Lord of the Rings license. The game draws on both literary and movie influences to tell the story of three warriors fighting in the North of Middle Earth concurrently with the events of the books/movies.", "developers": [{"id": "521816714791485460", "name": "Snowblind Studios"}], "executables": [{"is_launcher": false, "name": "war in the north/witn.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "94836360002bd2fc770d3ffe54877d42", "id": "425460776195719168", "name": "Lord of the Rings: War in the North", "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "32800", "sku": "32800"}], "type": 1, "verify_key": "4d20d70553746e400af8bcd098ae2e7330fc892de608e69a0bbbe6df13186896"}, {"aliases": ["Tom Clancy's Rainbow Six 3: Gold Edition"], "description": "Tom Clancy's Rainbow Six 3: Black Arrow is the successful expansion to Rainbow Six 3. Multiplayer updates like \"Retrieval\" mode and split screen co-operative play help distinguish Black Arrow from its predecessors. ", "developers": [{"id": "521816767484395520", "name": "Ubisoft Milan Studio"}], "executables": [{"is_launcher": false, "name": "ravenshield.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "01b7281338047f3e3eff9c7d46e3cafa", "id": "425460908345524224", "name": "Tom Clancy's Rainbow Six 3", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "1b20d61a2a3e1c3cb598b0a1806ef86e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "19830", "sku": "19830"}], "type": 1, "verify_key": "4ff736ba2a2d153c948a975b06bb07eb3bd6032f55c3922e97271c5d2f731a30"}, {"aliases": ["Tom Clancy's Rainbow Six: Vegas"], "description": "A reboot of sorts for the Rainbow Six series, Tom Clancy's Rainbow Six: Vegas drops the player into a fictional version of Las Vegas to stop a terrorist plot.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "r6vegas_game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f0c656d272a9e2b9ea9e02522305b1cf", "id": "425460989602037770", "name": "Tom Clancy's Rainbow Six Vegas", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "7a373c007a3a6ad4f5d3feecce8b3ec2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "13540", "sku": "13540"}, {"distributor": "steam", "id": "15120", "sku": "15120"}], "type": 1, "verify_key": "8f4abcf11cea9e52812b2aefe82cd28f458e7323d0e78a94c83f586ba3dda207"}, {"aliases": ["Tom Clancy's Rainbow Six: Vegas 2"], "description": "The sequel to Rainbow Six: Vegas returns with a brand new story of terrorist attacks and the Rainbow squad's attempt to stop them.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "r6vegas2_game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e4674af017a072559477c6f5d226d2da", "id": "425470018130673664", "name": "Tom Clancy's Rainbow Six Vegas II", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "8cbe15d03f6d26975e6f7fcd52b71a5c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "15120", "sku": "15120"}], "type": 1, "verify_key": "22be44455b2151cab7a8373175c3cb9cec64d97aac8060f06c5e5bf8b5ba704c"}, {"aliases": ["Tom Clancy's Splinter Cell: Chaos Theory"], "description": "The third outing for Sam Fisher finds him battling against terrorists who want to take control of the world using a simple algorithmic code.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "splintercell3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7cc83516871cda6b871d65174fa3c93a", "id": "425470107368554504", "name": "Tom Clancy's Splinter Cell Chaos Theory", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "45df80e5f91511bed5aaf6a2faa4e5e9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "13570", "sku": "13570"}], "type": 1, "verify_key": "12cad2b9ab1f2f3e9e6de87168b7abfdd4f742da8be14a7b4f6dfc88d30f9721"}, {"aliases": ["The Guild II: Renaissance"], "description": "The Guild 2 is a strategy game that takes places at the start of the Renaissance.", "developers": [{"id": "521816804323098635", "name": "4HEAD Studios"}], "executables": [{"is_launcher": false, "name": "guildii.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "07cf737ee7b19cac33b4176287028e97", "id": "425470196439056391", "name": "The Guild 2 Renaissance", "publishers": [{"id": "521816751621668885", "name": "DreamCatcher Interactive Inc."}], "splash": "aec02435a8b03e65dc5618ee623e2cd4", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "39680", "sku": "39680"}], "type": 1, "verify_key": "44213e128df8aa9350db367eb9c12e3500c47168b9612590f95ef385b51b58ca"}, {"aliases": ["SOMA"], "cover_image": "33c0a029a3a34bf47721ef95ac0643a0", "description": "Miles below the ocean floor, a facility lies isolated. The inhabitants are losing their minds and its AI has begun to run amock. SOMA is an unsettling story about identity, consciousness, and what it means to be human.\n", "developers": [{"id": "521816498541428770", "name": "Frictional Games"}], "executables": [{"is_launcher": false, "name": "soma.exe", "os": "win32"}], "flags": 0, "guild_id": "608260170660708352", "hook": true, "icon": "55a2360382f74dc79b9b423bc99495a2", "id": "425470408322449418", "name": "Soma", "primary_sku_id": "489230107093893120", "publishers": [{"id": "521816498541428770", "name": "Frictional Games"}], "slug": "soma", "splash": "ba15976ae2871dd092de1a9c4cb62d4b", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "489230107093893120", "sku": "489230107093893120"}, {"distributor": "steam", "id": "282140", "sku": "282140"}], "type": 1, "verify_key": "9da89773f03a3844c3f73751c9e755923a794b91264cc382e4c38220f395b4c7"}, {"aliases": ["HellBlade", "Hellblade: Senua's Sacrifice"], "description": "An action game from Ninja Theory.", "developers": [{"id": "521816785801052162", "name": "Ninja Theory"}], "executables": [{"is_launcher": false, "name": "hellbladegame-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4d7d787898232f322054907463919314", "id": "425470569698557962", "name": "Hellblade", "publishers": [{"id": "521816785801052162", "name": "Ninja Theory"}], "splash": "eb176a5b215073390e2487252d8495a3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "414340", "sku": "414340"}], "type": 1, "verify_key": "04ea248000ebc446afd96fe9cd2796dc66d1b21fe64d2ae81b8522d4d88e8489"}, {"aliases": ["Dirt Rally"], "description": "A new rally focused entry in Codemasters' DiRT franchise.", "developers": [{"id": "521816499464306689", "name": "Codemasters Racing"}], "executables": [{"is_launcher": false, "name": "drt.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "98b3c037fa546f9bc89aab2bdb7b7240", "id": "425471119068364819", "name": "DiRT Rally", "publishers": [{"id": "521816499464306688", "name": "Codemasters"}], "splash": "1bd41a480d748a0ad9e221d191d65939", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "310560", "sku": "310560"}], "type": 1, "verify_key": "9756d87c86993ad627bd3f7eb76906f9c33cc186610ecc2a0926f477190c4650"}, {"aliases": ["Killer is Dead"], "description": "", "executables": [{"is_launcher": false, "name": "kidgame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "94c971e74771c42018527ace551d9d59", "id": "425471324073230336", "name": "Killer Is Dead - Nightmare Edition", "publishers": [{"id": "521816777550725132", "name": "KADOKAWA GAMES / GRASSHOPPER MANUFACTURE"}], "splash": "c8d8c291c4ec5d24da7e47ac83398957", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "261110", "sku": "261110"}], "type": 1, "verify_key": "2f09c234c0d1971631bce71f76a0ef12dc93a0d511745d1b4d85461c59b26fc5"}, {"aliases": ["Saints Row: Gat Out of Hell"], "description": "When The Boss is captured by Satan, it's up to Third Street Saints lieutenants Johnny Gat and Kinzie Kensington to cause as much chaos as possible in Hell to rescue them.", "developers": [{"id": "521816541323329560", "name": "Deep Silver Volition, Inc."}], "executables": [{"is_launcher": false, "name": "saintsrowgatoutofhell.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "056d52250c75e101c589c06dec24cb33", "id": "425471448782733331", "name": "Saints Row: Gat out of Hell", "publishers": [{"id": "521816524403638274", "name": "Deep Silver"}], "splash": "5f0dc8ee3d1f2bd5237b006dd446de43", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "301910", "sku": "301910"}], "type": 1, "verify_key": "1a553a5f6134e402842e8121bd8729334720711a53e8311f98a2df3d0099adc1"}, {"aliases": ["Banner Saga"], "description": "The Sun has stopped in the middle of the sky, the Gods have died and human settlements are being invaded by the Dredge, a race of stone beings. There can be no doubt about it, the world is coming to an end. In this turn-based tactics game, borrowing elements from Norse myth, your clan's continued survival is the only thing that truly matters. Will its banner be stomped into the the ground or fly high and bring back hope to those who have lost it in this desolate cold world?", "developers": [{"id": "521816799411568641", "name": "Stoic"}], "executables": [{"is_launcher": false, "name": "the banner saga.exe", "os": "win32"}], "flags": 0, "guild_id": "306957465407324171", "hook": true, "icon": "58b942a62d5136e715921ede2f418ce4", "id": "425471698284970020", "name": "The Banner Saga", "publishers": [{"id": "521816799411568641", "name": "Stoic"}], "splash": "1dfb91b3b41a821342c13493184294f3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "237990", "sku": "237990"}], "type": 1, "verify_key": "f4b497b7bd6273fc7e2078330c2848315881e142d00db6e94838b269654efd11"}, {"aliases": ["TrackMania United"], "description": "TrackMania United compiles much of the content and concepts found in the previous TrackMania games while maintaining the same crazy driving and huge online feel.", "developers": [{"id": "521816570029146113", "name": "Nadeo"}], "executables": [{"is_launcher": false, "name": "tmforever.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7591ce414a82e3453cc189137082a90a", "id": "425709280725958689", "name": "Trackmania United Forever", "publishers": [{"id": "521816537192202247", "name": "Focus Home Interactive"}], "splash": "e2e22fa881737d575fdf65aef2d9f560", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "7200", "sku": "7200"}], "type": 1, "verify_key": "4aac12888ae46f51c2fef9ba5af62e5cd18f040c96d87039ce22c5100a0de41e"}, {"aliases": ["Trials Evolution Gold Edition"], "description": "The follow up to the best-selling hit Trials HD, Trials Evolution takes motorcycle platforming to a whole new level of ridiculousness.", "developers": [{"id": "521816618024828941", "name": "RedLynx Ltd"}], "executables": [{"is_launcher": false, "name": "trialsfmx.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "de5b74c9460fd92edec1737d6410dbcf", "id": "425709676965920788", "name": "Trials Evolution", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}], "splash": "0961dc547897ccc0d52edd2b1f5a48ed", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "220160", "sku": "220160"}], "type": 1, "verify_key": "7e31946366db64a9d76b66b0fc57ada63fd4f015efec37e94823df20dd10cfe0"}, {"aliases": ["Neighbours from Hell"], "description": "", "executables": [{"is_launcher": false, "name": "neighbours from hell/bin/game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "07c385afa1220cc512569dc3a4fa0360", "id": "425709808705077272", "name": "Neighbours From Hell Compilation", "publishers": [{"id": "521816710106447872", "name": "JoWooD Vienna"}], "splash": "56cef6034988751d8207a7fe9ce5da08", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "260750", "sku": "260750"}], "type": 1, "verify_key": "83b0dea3bb3191feee82ddf00463c738606038100a4638436fead8e0ecf01986"}, {"aliases": ["The Guild 2"], "description": "Sequel to PSP game Fairy Tail: Portable Guild.", "developers": [{"id": "521816513074692111", "name": "Konami"}], "executables": [{"is_launcher": false, "name": "guildii.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f25bb2b794092b07a922ee1ba82880c6", "id": "425710142252777508", "name": "The Guild II", "publishers": [{"id": "521816513074692111", "name": "Konami"}], "splash": "0fc83afe86c783d089492fbe68bd9c8a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "39650", "sku": "39650"}], "type": 1, "verify_key": "36942a14b60d70a20d43c085badb99cd6d32d2067ee9f7c97c282667c4b35dac"}, {"description": "A roguelike adventure in a procedurally-generated post-societal America. Created by The Molasses Flood.", "developers": [{"id": "521816499019841602", "name": "The Molasses Flood"}], "executables": [{"is_launcher": false, "name": "rivergame-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9d4994ed59dcee78be7eedfde9a8b42c", "id": "425713116903505930", "name": "The Flame in the Flood", "publishers": [{"id": "521816499019841600", "name": "Limited Run Games"}], "splash": "83174245f441feebbc8b2b477c54e9a5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "318600", "sku": "318600"}], "type": 1, "verify_key": "24f9d6ea21f34a96d657b7cb5247a5bcb6badb2e81ea88585c73a85e51a3b1a0"}, {"aliases": ["Dreamfall Chapters"], "description": "The episodic sequel to Dreamfall: The Longest Journey.", "developers": [{"id": "521816542258790407", "name": "Red Thread Games"}], "executables": [{"is_launcher": false, "name": "dreamfall chapters.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2db78adf4849c711247d15d0587c089c", "id": "425713647222784010", "name": "Dreamfall Chapters: The Longest Journey", "publishers": [{"id": "521816542258790405", "name": "Funcom Productions A/S"}], "splash": "d995e53a84ce7c491acd9cd1de51ae05", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "237850", "sku": "237850"}], "type": 1, "verify_key": "6f5ddb983f0e5bb71334b0e83c21c0396404286485ea8d5c3947a78baafba81e"}, {"aliases": ["Risen 3: Titan Lords"], "description": "The third game in the Risen series, developed by Piranha Bytes.", "developers": [{"id": "521816524403638275", "name": "Pluto 13 GmbH"}], "executables": [{"is_launcher": false, "name": "risen3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d80add29589fbae8e2a4267743fa7abd", "id": "425714129152770048", "name": "Risen 3 - Titan Lords", "publishers": [{"id": "521816524403638274", "name": "Deep Silver"}], "splash": "2e8908b03b216652ad2441aa706968a9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "249230", "sku": "249230"}], "type": 1, "verify_key": "171a3d1bc38681cbc505ac4a5629621e7f3974c281f747e2240c6d57c2e55639"}, {"aliases": ["Sacred 2"], "description": "", "executables": [{"is_launcher": false, "name": "sacred2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d9b2f55b2bc49d1895057c7e5c3c2de6", "id": "425714299877589002", "name": "Sacred 2 Gold", "primary_sku_id": "489226702807891991", "publishers": [{"id": "521816650304061466", "name": "Ascaron"}], "slug": "sacred-2-gold", "splash": "1101dbb0ccfd4f7b65e2a03d3d7eb6ab", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "489226702807891991", "sku": "489226702807891991"}, {"distributor": "steam", "id": "225640", "sku": "225640"}], "type": 1, "verify_key": "6b3cdb2a839014ec2bf1e70d723d35ebae4804ff6a75de5917c96a671bc010be"}, {"aliases": ["Deponia 1-3: The Complete Journey"], "description": "Deponia: The Complete Journey includes the whole Deponia Trilogy plus bonus content including four hours of developer's commentary and making-of features.", "developers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "executables": [{"is_launcher": false, "name": "deponia.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "71069de89b68f822c5dd758e9aae3ec1", "id": "425714472997355560", "name": "Deponia: The Complete Journey", "publishers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "splash": "03d93d2a3b1a5070927d4bb3792d1cae", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "292910", "sku": "292910"}], "type": 1, "verify_key": "9278fa66d951ed1db165d91711ea6f80d0417122c2ac8a94a5e93e16e28b985f"}, {"aliases": ["Deponia 2: Chaos on Deponia"], "description": "Chaos on Deponia is the sequel to Deponia. It is point-and-click adventure game with a dry sense of humor and high-definition hand-drawn art.", "developers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "executables": [{"is_launcher": false, "name": "chaos on deponia/deponia2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3b164a8faaf1b59c9b0ba315dadeca21", "id": "425714655726665788", "name": "Chaos on Deponia", "publishers": [{"id": "521816507102003201", "name": "Daedalic Entertainment"}], "splash": "a024fdbb810cef529d7085a44707f87f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "220740", "sku": "220740"}], "type": 1, "verify_key": "3ddb2aa5b5af45e16732700a315ccf75712fce3cbef8c338c642c82d2feb324b"}, {"aliases": ["Banner Saga 2"], "description": "The sequel to The Banner Saga features familiar hand-drawn art, full orchestral soundtrack, and similar gameplay to the initial entry.", "developers": [{"id": "521816799411568641", "name": "Stoic"}], "executables": [{"is_launcher": false, "name": "the banner saga 2.exe", "os": "win32"}], "flags": 0, "guild_id": "306957465407324171", "hook": true, "icon": "de181699a300eee33070097791dd1a8e", "id": "425722711180967946", "name": "The Banner Saga 2", "publishers": [{"id": "521816509111336966", "name": "Versus Evil"}], "splash": "b931a80cd6701ba74fb694886ccfc795", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "281640", "sku": "281640"}], "type": 1, "verify_key": "cc4b7fe53667e623cc8959784f9064f722059bf9a3b97fcf347fbbe5c82908eb"}, {"aliases": ["Tormentor X Punisher"], "description": "", "executables": [{"is_launcher": false, "name": "tormentorxpunishergit.exe", "os": "win32"}, {"is_launcher": false, "name": "tormentorxpunisher.exe", "os": "win32"}], "flags": 0, "guild_id": "261683801372098560", "hook": true, "icon": "0be2e6b915950a1b523df0e9b753ff87", "id": "425723123187449856", "name": "Tormentor\u274cPunisher", "overlay": true, "primary_sku_id": "471029037003833355", "publishers": [{"id": "521816660152287233", "name": "E-Studio"}], "slug": "tormentorpunisher", "splash": "24822cfdd44f5a500feb28fa2ed3d8ce", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "471029037003833355", "sku": "471029037003833355"}, {"distributor": "steam", "id": "500670", "sku": "500670"}], "type": 1, "verify_key": "b5bf79351b06664e98c0b5ecb38f4795c82743a8ef80147742b64d83e2d4ffef"}, {"aliases": ["Assassin's Creed Chronicles India", "Assassin?s Creed? Chronicles: India"], "description": "A 2.5D downloadable title for the Xbox One, PlayStation 4 and PC.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "accgame-win32-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "08166989ea20be62f40c562d0c392668", "id": "425725558626844702", "name": "Assassin\u2019s Creed\u00ae Chronicles: India", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "be113467d81e9cc9c1a812d263b3ddf4", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "359610", "sku": "359610"}], "type": 1, "verify_key": "299b5bb1184d8b2fa8605449a048e767a9e7edec4ea4b4b481b1aed67a4725b4"}, {"aliases": ["Batman: Arkham Asylum Game of the Year Edition"], "description": "", "executables": [{"is_launcher": false, "name": "shippingpc-bmgame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ca8db9abe5d24c03b070e390d966c1a3", "id": "425727574539370529", "name": "Batman: Arkham Asylum GOTY Edition", "publishers": [{"id": "521816538664402944", "name": "Rocksteady Studios"}], "splash": "13a29cbec5bdda22bba61735c324b8ad", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "35140", "sku": "35140"}], "type": 1, "verify_key": "b79cc653630d76c9475b1e64e44940375de7ea2ae3f95d965e29f35fdfe2f500"}, {"aliases": ["Brothers in Arms - Road to Hill 30"], "description": "Based on a true story, take control of your squad and lead your brothers in arms to victory though France and suppress the German forces.", "developers": [{"id": "521816607408914450", "name": "Gearbox Software LLC"}], "executables": [{"is_launcher": false, "name": "bia.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ff25dd48d300dfb4b8b489d0f6429f99", "id": "425727812490493972", "name": "Brothers in Arms: Road to Hill 30", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "d76214ebd6ea3ba8d9a99981f241e083", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "15190", "sku": "15190"}], "type": 1, "verify_key": "1070ff91795e482e3e9ecaf96cfe375ebc261c6237ba77b082a02d1e7eb634ae"}, {"description": "Join Ray McCall and his brother Thomas on a quest for gold, lust, and greed.", "developers": [{"id": "521816637956161558", "name": "Techland Sp. z o.o."}], "executables": [{"is_launcher": false, "name": "cojbibgame_x86.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e045bae3e8e7cc494eedc9e12539e3f1", "id": "425728267123949578", "name": "Call of Juarez: Bound in Blood", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "926718fed0ef787ed16c6dbd07fc6bbf", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "21980", "sku": "21980"}], "type": 1, "verify_key": "e61a328bd80e568741a2d1beebd9ebd65c62dbc05f4b104cc55f2da917054aa9"}, {"description": "A downloadable game inspired by classic RPGs with turn-based combat from the creative director of Far Cry 3, made using the UbiArt engine powering the most recent Rayman games.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "childoflight.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3584cbbce6935f0aed46ebfbbbf10aff", "id": "425728327505018921", "name": "Child of Light", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "4ab48967094c1b6aca68479b6cb654be", "summary": "", "type": 1, "verify_key": "b5b9b1955f48a9d95a5e4fca5560808ccca0d9f843050562616e7de4404b3014"}, {"description": "Prince of Persia: The Sands of Time is an action-adventure game with a heavy focus on platforming. The story revolves around the wry Prince, a time-altering dagger, and a kingdom beset by a plague-like evil.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "prince of persia the sands of time/princeofpersia.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "cb88c9dc052a5bcf35c17900f747fe23", "id": "425728421788909568", "name": "Prince of Persia: The Sands of Time", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "a2a50a1615d513a35584165b61f571f1", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "13600", "sku": "13600"}], "type": 1, "verify_key": "60f0756347e4b00e21728926e3b559f010f2e3923cf62b3190c103628e60078f"}, {"description": "Prince of Persia: Warrior Within is the the second game in the Sands of Time series. Adopting a much darker tone, Warrior Within follows the Prince to the Island of Time as he attempts to change the past in order to end the Dahaka's relentless pursuit.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "prince of persia the warrior within/princeofpersia.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "90b06b39b88bd0c7794d32569a8dfb68", "id": "425728459600429056", "name": "Prince of Persia: Warrior Within", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "c3a025daa6532be7c1a23854eb0e56b3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "13500", "sku": "13500"}], "type": 1, "verify_key": "d2ba21f9847a474caf7310ee8c1b9abda5573342f950ac96b59e2d4225d193db"}, {"description": "Silent hunter 5: Battle Of the Atlantic is the fifth installment of the Silent Hunter franchise.", "developers": [{"id": "521816515113385985", "name": "Ubisoft Bucharest"}], "executables": [{"is_launcher": false, "name": "sh5.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "be7b5f7aa486ffdb9d575ef140fb137b", "id": "425728548586913812", "name": "Silent Hunter 5: Battle of the Atlantic", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "6bd16e094a49e5f336f5ea448e58a81e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "48110", "sku": "48110"}], "type": 1, "verify_key": "ce11c71caea74c624b712e28372e7cb63c36286483a67561fc87e64b47eb3c13"}, {"description": "", "executables": [{"is_launcher": false, "name": "silent hunters wolves of the pacific/sh4.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "017849fd4dfd616679e4723ddc9334cd", "id": "425728586192912384", "name": "Silent Hunter: Wolves of the Pacific", "publishers": [{"id": "521816683233411082", "name": "Ubisoft Romania"}], "splash": "1c14e5183b8df57b6310e45adfa1cbac", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "15200", "sku": "15200"}], "type": 1, "verify_key": "f5aaf8a00ebe5a5142d0a7e60333548c38069866e9412de5715b27e106384055"}, {"description": "A hack-and-slash action-RPG featuring cooperative multiplayer developed by Snowblind Studios under the Lord of the Rings license. The game draws on both literary and movie influences to tell the story of three warriors fighting in the North of Middle Earth concurrently with the events of the books/movies.", "developers": [{"id": "521816714791485460", "name": "Snowblind Studios"}], "executables": [{"is_launcher": false, "name": "witn.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "94836360002bd2fc770d3ffe54877d42", "id": "425728616450490368", "name": "The Lord of the Rings: War in the North", "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "splash": "169f88f29c73038bb19d761cf735b7a5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "32800", "sku": "32800"}], "type": 1, "verify_key": "e9feda3875b6b068c7419560197ecedfee6315138cec220406de410b5abf32fa"}, {"description": "Delta Force: Black Hawk Down is a first-person shoooter developed and published by Novalogic, based on the same events portrayed in the novel and film \"Black Hawk Down\".", "developers": [{"id": "521816672248791067", "name": "NovaLogic, Inc."}], "executables": [{"is_launcher": false, "name": "delta force black hawk down/dfbhd.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c205bd3b6f9307c8bf2ad616cf8b5f8a", "id": "425731190570483757", "name": "Delta Force: Black Hawk Down", "publishers": [{"id": "521816672248791067", "name": "NovaLogic, Inc."}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "32670", "sku": "32670"}], "type": 1, "verify_key": "a455cdfd79ab68099a8d514d9bf3ac107bb76c67f804a32a1b798cbb0d78fd25"}, {"description": "", "executables": [{"is_launcher": false, "name": "painkiller.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0836af6799a51683d69e23e9f9613d1e", "id": "425731299936960512", "name": "Painkiller: Black Edition", "publishers": [{"id": "521816615457783829", "name": "People Can Fly"}], "splash": "a3f8eda387e818d2dd697606bbb7c8fa", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "39530", "sku": "39530"}], "type": 1, "verify_key": "f5d15b8c0321f605fd6a072f03799d1bd62e9f81264d3288b5b2a00dcaceba12"}, {"description": "", "executables": [{"is_launcher": false, "name": "spellforce.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2cd19c130700b8a14747fa2b61095a98", "id": "425731382820470824", "name": "SpellForce: Platinum Edition", "publishers": [{"id": "521816619685773340", "name": "Phenomic"}], "splash": "b7337fcef84a734f88e475413f403a60", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "39540", "sku": "39540"}], "type": 1, "verify_key": "e1438ddf4ce999d02e7c699370c18a8cdc19ae13ebd8718fc8a9945c81dcc6fc"}, {"description": "An expansion to the Guild 2", "developers": [{"id": "521816804323098635", "name": "4HEAD Studios"}], "executables": [{"is_launcher": false, "name": "the guild ii - pirates of the european seas/guildii.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "223545dc35122b7bc16d7ceb21569917", "id": "425731435929010195", "name": "The Guild II - Pirates of the European Seas", "publishers": [{"id": "521816528895737860", "name": "JoWooD Productions Software AG"}], "splash": "5a860de1ae88b3bbd748d748a3d9cf9f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "39660", "sku": "39660"}], "type": 1, "verify_key": "726dd68d4db247ffd89fd3db8dddc04de1557ec292f3c6915fb7bda2886a6e0e"}, {"description": "Codename CURE is a first person, co-operative zombie game by Hoobalugalar_X.", "executables": [{"is_launcher": false, "name": "codename cure/cure.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "db619a023d6d9bcca2b6284cdd52b965", "id": "425748063416483870", "name": "Codename CURE", "publishers": [{"id": "521816584071938058", "name": "Hoobalugalar_X"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "355180", "sku": "355180"}], "type": 1, "verify_key": "142203c6bbdc48037de6da2b2a8ac0826cc574559b5ad222b2c097a763b6cfd7"}, {"aliases": ["Dungeon Defenders 2"], "description": "Defend the dungeon in Dungeon Defenders 2. There are several new game modes including a DotA type mode.", "developers": [{"id": "521816518871220239", "name": "Trendy Entertainment"}], "executables": [{"is_launcher": false, "name": "dungeon defenders 2/dundef2/binaries/win32/dundefgame.exe", "os": "win32"}, {"is_launcher": false, "name": "dungeon defenders 2/dundef2/binaries/win32/dungeondefenders.exe", "os": "win32"}, {"is_launcher": false, "name": "dungeon defenders 2/dundef2/binaries/win64/dungeondefenders.exe", "os": "win32"}, {"is_launcher": false, "name": "dungeon defenders 2/dundef2/binaries/win64/dundefgame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "238dfd7cc5c0421b02565717cf5f19a0", "id": "425748090889175050", "name": "Dungeon Defenders II", "publishers": [{"id": "521816518871220239", "name": "Trendy Entertainment"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "236110", "sku": "236110"}], "type": 1, "verify_key": "845b0173a860b4d67cd69973637a3156ab565ef29995fd76b9e455eb1b38801f"}, {"description": "This survival-horror mod for the original Half-Life depicts a suburban town in Sweden that has been invaded by misshapen horrors and malevolent creatures of mysterious origin, and can be played singleplayer or in a separate co-op campaign.", "developers": [{"id": "521816795938684929", "name": "Team Psykskallar"}], "executables": [{"is_launcher": false, "name": "cof.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b40d1c584857b908b6fd9f4a69603e7f", "id": "425748259408183306", "name": "Cry of Fear", "publishers": [{"id": "521816795938684929", "name": "Team Psykskallar"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "223710", "sku": "223710"}], "type": 1, "verify_key": "1eab90fcd36186b4bd3bf96afd73c0fd97eef2fedd769291176b09c256570ea2"}, {"description": "A team-based naval combat FPS set in the 1700s.", "developers": [{"id": "521816656633266209", "name": "Mastfire Studios"}], "executables": [{"is_launcher": false, "name": "blackwake.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "73a30ff2efb960fc900f27ce5f5f9c29", "id": "425748296854667264", "name": "Blackwake", "publishers": [{"id": "521816656633266208", "name": "Mastfire Studios Pty Ltd"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "420290", "sku": "420290"}], "type": 1, "verify_key": "74f4a4c45d53780def339e9e37ce5ca539332be13ce747c9ef16a9bc9b1dd2c9"}, {"aliases": ["Age of Empires III"], "description": "", "executables": [{"is_launcher": false, "name": "age3y.exe", "os": "win32"}, {"is_launcher": false, "name": "age3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f04efd0f7f11469af7cc28cd3e956fde", "id": "425748312143167498", "name": "Age of Empires\u00ae III: Complete Collection", "publishers": [{"id": "521816567940513807", "name": "Ensemble Studios"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "105450", "sku": "105450"}], "type": 1, "verify_key": "92a17d281049c3ab46555c8225b61485ce10d1d777414bcd8bacfd121f570fb6"}, {"aliases": ["Far Cry 3"], "description": "The third installment in the series sees a reluctant victim battling nature, pirates, and the island's insanity-inducing jungle to rescue his friends and family from an island paradise gone horribly wrong.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "farcry3.exe", "os": "win32"}, {"is_launcher": false, "name": "farcry3_d3d11.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "80220e06769d9fcfc188e17898f0e609", "id": "425748544134053888", "name": "Far Cry\u00ae 3", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "220240", "sku": "220240"}], "type": 1, "verify_key": "8e2b7b6fee48e1f46e1d270ea02601e861da5dca9418a7e42701548e96892a47"}, {"description": "The 2017 release for the long running franchise. Manage clubs and/or countries from around the world.", "developers": [{"id": "521816521731735570", "name": "Sports Interactive Limited"}], "executables": [{"is_launcher": false, "name": "football manager 2018/fm.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "26a7377b3288dd9befcf4ab2e10ea068", "id": "425748782978826254", "name": "Football Manager 2018", "publishers": [{"id": "521816507676885010", "name": "Sega"}, {"id": "521816521731735569", "name": "Sports Interactive"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "624090", "sku": "624090"}], "type": 1, "verify_key": "5eeaa55b58d11dff8593aaba75ad7aa14bafd01af6fc333f7f8965fe9097999f"}, {"aliases": ["Total War: Attila"], "description": "The latest installment in the long running Total War series.", "developers": [{"id": "521816720503996437", "name": "The Creative Assembly"}], "executables": [{"is_launcher": false, "name": "attila.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "599331370e277b2f3c0c4d0063900f50", "id": "425748853132754945", "name": "Total War: ATTILA", "publishers": [{"id": "521816568473059338", "name": "Creative Assembly"}, {"id": "521816507676885010", "name": "Sega"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "325610", "sku": "325610"}], "type": 1, "verify_key": "0c1a756750835dce5be1ba7e35ea2b3d14e87c1838c4010587482334d28c6d49"}, {"description": "", "executables": [{"is_launcher": false, "name": "ffxv_s.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "75befa7ddf3a1bb05c85cd46fb69debb", "id": "425748942676819968", "name": "FINAL FANTASY XV WINDOWS EDITION", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "637650", "sku": "637650"}], "type": 1, "verify_key": "17c2e49544aa2fae76ed5fc9c6b18f0daf1fa0ebcb2d64fe6cb686d35140e0ce"}, {"description": "Evolve is a class-based cooperative-competitive game in which a team of four hunters chase after an evolving monster, also controlled by a player.", "developers": [{"id": "521816522977574922", "name": "Turtle Rock Studios, Inc."}], "executables": [{"is_launcher": false, "name": "evolve.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ff060cff3e508ad5a48d1fa184cf79b8", "id": "425748985517703188", "name": "Evolve Stage 2", "publishers": [{"id": "521816504392482816", "name": "2K Games"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "273350", "sku": "273350"}], "type": 1, "verify_key": "25338d1c65be565d9a10df0af3b1a08e4d3083c76d31ba303e6a4b6d0f07c912"}, {"aliases": ["Total War: Shogun 2"], "description": "Total War: Shogun 2 is the sequel to Shogun: Total War, the first game in the Total War series.\nShogun 2 is an epic strategy game, combining real-time 3D battles with turn based city and economic management.", "developers": [{"id": "521816720503996437", "name": "The Creative Assembly"}], "executables": [{"is_launcher": false, "name": "shogun2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "371433594f97fb3885861bf0d1c3cc21", "id": "425749196403114024", "name": "Total War: SHOGUN 2", "publishers": [{"id": "521816507676885010", "name": "Sega"}, {"id": "521816720503996437", "name": "The Creative Assembly"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "34330", "sku": "34330"}], "type": 1, "verify_key": "e5e2418ef4edaf330c72d66bc9048eaef5024abf3f7fbdd550ee2493be211355"}, {"description": "", "developers": [{"id": "521816498017271829", "name": "Subset Games"}], "executables": [{"is_launcher": false, "name": "breach.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2cdc10bc4418d647680ca838dfb2ab8f", "id": "425749372332933120", "name": "Into the Breach", "primary_sku_id": "471376328319303681", "publishers": [{"id": "521816498017271829", "name": "Subset Games"}], "slug": "into-the-breach", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "590380", "sku": "590380"}, {"distributor": "discord", "id": "471376328319303681", "sku": "471376328319303681"}], "type": 1, "verify_key": "13d6b1c9d59448a8cc6795c64e82f4581faec8314d5d352ed7580f4fd1732eef"}, {"description": "Alien Swarm: Reactive Drop was a mod for Alien Swarm, but is now a full game.", "executables": [{"is_launcher": false, "name": "reactivedrop.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b4f4a3c974afa2663c867ee1ceab4c7f", "id": "425749425168580608", "name": "Alien Swarm: Reactive Drop", "publishers": [{"id": "521816500508819468", "name": "Reactive Drop Team"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "563560", "sku": "563560"}], "type": 1, "verify_key": "dc07646cbf74386c74b566106b9f6b992a240b04eee84e70725e445cf0664d17"}, {"aliases": ["Trackmania Nations Forever"], "description": "TrackMania Nations Forever is the updated version of the game TrackMania Nations ESWC and is available for download for free. It was released at the same time as Trackmania United Forever and uses the same physics engine.", "developers": [{"id": "521816570029146113", "name": "Nadeo"}], "executables": [{"is_launcher": false, "name": "tmforever.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ecd3128d3352f68386cb1d648709fc98", "id": "425749438573707264", "name": "TrackMania Nations Forever", "publishers": [{"id": "521816570029146113", "name": "Nadeo"}, {"id": "521816537192202247", "name": "Focus Home Interactive"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "11020", "sku": "11020"}], "type": 1, "verify_key": "ec8fb2f6969864d99af8bd7ca2f48e76c90f77d8205d3dde100ca67da6aed023"}, {"description": "Left 4 Dead puts players in the role of one of four survivors during a zombie apocalypse. Survivors will depend on co-operation to get from one safe house to another, while facing hordes of \"Infected\", four of which can be controlled by human players in certain game modes.", "developers": [{"id": "521816530393104394", "name": "Valve Corporation"}], "executables": [{"is_launcher": false, "name": "left4dead.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "79ff0e9e1da3212881310ba3f9640166", "id": "425749516583698432", "name": "Left 4 Dead", "publishers": [{"id": "521816507102003200", "name": "Valve"}, {"id": "521816499464306692", "name": "Electronic Arts"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "500", "sku": "500"}], "type": 1, "verify_key": "912a5af006c729fa4aa224d9cc7483592b1fbaac9efc723d754461ee4e75872a"}, {"cover_image": "e8453a470ecf7761ec1070a290bd8028", "description": "The last remaining memories fade away into darkness. Your mind is a mess and only a feeling of being hunted remains. Do you have what it takes to survive?", "developers": [{"id": "521816498541428770", "name": "Frictional Games"}], "executables": [{"is_launcher": false, "name": "amnesia.exe", "os": "win32"}], "flags": 0, "guild_id": "608260170660708352", "hook": true, "icon": "e5106b6d5f12bbd36a79b1c1bcd8eb5e", "id": "425749626671595520", "name": "Amnesia: The Dark Descent", "primary_sku_id": "489229235509002261", "publishers": [{"id": "521816498541428770", "name": "Frictional Games"}], "slug": "amnesia-the-dark-descent", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "57300", "sku": "57300"}, {"distributor": "discord", "id": "489229235509002261", "sku": "489229235509002261"}], "type": 1, "verify_key": "2d3fede30ac29d892d56f35d4513af186bf59cbb61d0961abace96a7b6436230"}, {"description": "A Game development tycoon game developed by Greenheart Games.", "developers": [{"id": "521816643970531340", "name": "Greenheart Games"}], "executables": [{"is_launcher": false, "name": "game dev tycoon/nw.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2b7795d96519408387dc820f8f536818", "id": "425749842451496961", "name": "Game Dev Tycoon", "publishers": [{"id": "521816643970531340", "name": "Greenheart Games"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "239820", "sku": "239820"}], "type": 1, "verify_key": "dc39e65d4090099e3429280e671974c74ca26bad17ef43aa330e654cf583a6b3"}, {"description": "Banished is a medieval city building and resource management game made by one-man indie studio Shining Rock.", "developers": [{"id": "521816580838129674", "name": "Shining Rock Software"}], "executables": [{"is_launcher": false, "name": "banished/application-steam-x64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a4cfdf14e693723cb70f1a2efb469ef7", "id": "425750064963780628", "name": "Banished", "publishers": [{"id": "521816580389077014", "name": "Shining Rock Software LLC"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "242920", "sku": "242920"}], "type": 1, "verify_key": "89fe9c7b30049e4f773427bb6daeca6dc1b27e09f346d6f971181431ca0890f9"}, {"description": "Of Guards And Thieves is an online stealth/action game.", "developers": [{"id": "521816543261360130", "name": "Subvert Games"}], "executables": [{"is_launcher": false, "name": "ogat.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5823c9fb2d4edfe92a37d1d1a4e267a8", "id": "425750237534224394", "name": "Of Guards And Thieves", "publishers": [{"id": "521816543261360130", "name": "Subvert Games"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "302590", "sku": "302590"}], "type": 1, "verify_key": "f163345b59a0f5ee2f0ff12553f6fcfe66eccd15f42798059f9e46d168b1f09e"}, {"description": "Who's Your Daddy is a competitive 1v1 game where a clueless father is faced with watching over his curious son.", "executables": [{"is_launcher": false, "name": "whosyourdaddy.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "40881b132fbecc5861f4f92b25198558", "id": "425751000477990922", "name": "Who's Your Daddy", "publishers": [{"id": "521816718457176114", "name": "Evil Tortilla Games"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "427730", "sku": "427730"}], "type": 1, "verify_key": "2477700b626e79d97793c329aef4ec8910ddbaf7e19efdf97180f296d5d4e434"}, {"description": "", "executables": [{"is_launcher": false, "name": "final fantasy xv playable demo/ffxv_s.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c11cebddfd75bbf3099f414b4e3667fd", "id": "425751261095264276", "name": "FINAL FANTASY XV WINDOWS EDITION PLAYABLE DEMO", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "671210", "sku": "671210"}], "type": 1, "verify_key": "0aaa7422df9901d28e90b63a941facf73ee2d9b654e24c2b78b9559999a802be"}, {"description": "The sequel to 2007\u2019s wildly successful first-person-shooter Call of Duty 4: Modern Warfare, Call of Duty: Modern Warfare 2 continues the story of American and British soldiers fighting Russian ultra-nationalist forces.", "developers": [{"id": "521816501544550406", "name": "Infinity Ward"}], "executables": [{"is_launcher": false, "name": "iw4sp.exe", "os": "win32"}, {"is_launcher": false, "name": "iw4mp.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a66c1c84dbce91b61907bd9e985f8a4c", "id": "425777093628919828", "name": "Call of Duty: Modern Warfare 2", "overlay": true, "publishers": [{"id": "521816501544550404", "name": "Activision"}, {"id": "521816501544550406", "name": "Infinity Ward"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "10180", "sku": "10180"}], "type": 1, "verify_key": "aa4f18d61e3f1d2b8d0cb2d869711d90bf9d6f52ad8f129f0717b62f3ca06232"}, {"aliases": ["Torchlight 2"], "description": "", "developers": [{"id": "521816509673242635", "name": "Runic Games"}], "executables": [{"is_launcher": false, "name": "torchlight2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3c73e9b32fdf10bb7b86543a72fa6978", "id": "425777164361793547", "name": "Torchlight II", "primary_sku_id": "491788312370216961", "publishers": [{"id": "521816509673242635", "name": "Runic Games"}], "slug": "torchlight-ii", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "491788312370216961", "sku": "491788312370216961"}, {"distributor": "steam", "id": "200710", "sku": "200710"}], "type": 1, "verify_key": "8dfb397d2e87ce231fab77ff0e9bdc8a4755a3ec5e4c82794eb4ab4617959699"}, {"description": "", "developers": [{"id": "521816564564230170", "name": "Team Meat"}], "executables": [{"is_launcher": false, "name": "supermeatboy.exe", "os": "win32"}], "flags": 0, "guild_id": "448192945623924756", "hook": true, "icon": "16223d2622f9ee7e9854711cf5e6cd41", "id": "425777385103949834", "name": "Super Meat Boy", "primary_sku_id": "471500856043372544", "publishers": [{"id": "521816564564230170", "name": "Team Meat"}], "slug": "super-meat-boy", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "40800", "sku": "40800"}, {"distributor": "discord", "id": "471500856043372544", "sku": "471500856043372544"}], "type": 1, "verify_key": "b12f05044851fb78c4096f5b1a5ee1071214fb3110bc35019b91e95444e112f9"}, {"aliases": ["Men Of War: Assault Squad 2"], "description": "The latest game in the Men of War series, Assault Squad 2 features more weapons and tanks to use than ever before, an updated game engine, and up to 16-player multiplayer.", "developers": [{"id": "521816663679565844", "name": "Digitalmindsoft"}], "executables": [{"is_launcher": false, "name": "mowas_2.exe", "os": "win32"}, {"is_launcher": false, "name": "mowas2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c90e6967c883d34bdaf6c00ed5353a49", "id": "425777482860331018", "name": "Men of War: Assault Squad 2", "publishers": [{"id": "521816663679565844", "name": "Digitalmindsoft"}, {"id": "521816548059643905", "name": "1C Company"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "244450", "sku": "244450"}], "type": 1, "verify_key": "73083194fd23f70742ef4f3c91d08271b39f43757f96dd1d50b4814fbdd55d27"}, {"description": "", "executables": [{"is_launcher": false, "name": "darwin-win64-shipping.exe", "os": "win32"}, {"is_launcher": false, "name": "the darwin project/darwin.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "887b27bbd27d46a10acb84826e92ce5d", "id": "425777491068715018", "name": "Darwin Project", "publishers": [{"id": "521816617571581964", "name": "Scavengers Studio"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "544920", "sku": "544920"}], "type": 1, "verify_key": "69471d79fe9ed104cf1ad0a1e54077ad321d188af5744767dadb6e0452517719"}, {"description": "2D MOBA game", "developers": [{"id": "521816638895423489", "name": "CWAVESOFT, Inc."}], "executables": [{"is_launcher": false, "name": "hyperuniverse.exe", "os": "win32"}], "flags": 0, "guild_id": "266269091801595906", "hook": true, "icon": "ed25b821d100b92c8bb64e8992ed16f0", "id": "425777540263837706", "name": "Hyper Universe", "publishers": [{"id": "521816638895423489", "name": "CWAVESOFT, Inc."}, {"id": "521816511610880011", "name": "Nexon Corporation"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "591530", "sku": "591530"}], "type": 1, "verify_key": "b394ef6031c61b6b2e2699ba4e52a4930837cfc999ea186c1734ddf96dc606dc"}, {"description": "An action-RPG in the same vein as Diablo, from Crate Entertainment.", "developers": [{"id": "521816763332165659", "name": "Crate Entertainment, LLC"}], "executables": [{"is_launcher": false, "name": "grim dawn.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b911091b194da1194d4efd34eabf177c", "id": "425777682135908352", "name": "Grim Dawn", "publishers": [{"id": "521816763332165659", "name": "Crate Entertainment, LLC"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "219990", "sku": "219990"}], "type": 1, "verify_key": "4f3f3980cc25de7a5ecd56101bae5dc622cdcf03912b8b7e3ef437d3c5b7ec38"}, {"aliases": ["Rising Storm/Red Orchestra 2"], "description": "", "executables": [{"is_launcher": false, "name": "rogame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "66465cbbd1081b093a637f28145e37b9", "id": "425777721159974922", "name": "Rising Storm/Red Orchestra 2 Multiplayer", "publishers": [{"id": "521816644432166915", "name": "Tripwire Interactive"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "35450", "sku": "35450"}], "type": 1, "verify_key": "29633424f05a5b93f8f7650722bf47fd88ea4b35f96a335bbe1889136b1a028e"}, {"description": "A free to play, multiplayer fishing simulation game.", "executables": [{"is_launcher": false, "name": "fishingplanet.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4565d4a3679bb444ecb6cc3b1e90ad8b", "id": "425777941499215872", "name": "Fishing Planet", "publishers": [{"id": "521816699008319494", "name": "Fishing Planet LLC"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "380600", "sku": "380600"}], "type": 1, "verify_key": "6ed33594caf61302ff42c3f21132795e2836fe8f0001478b6dce403b98ebcb3c"}, {"description": "A racing sim by Italian developers Kunos Simulazioni, makers of netKar Pro.", "developers": [{"id": "521816525846478852", "name": "Kunos Simulazioni"}], "executables": [{"is_launcher": false, "name": "assettocorsa.exe", "os": "win32"}, {"is_launcher": false, "name": "assettocorsa/acshowroom.exe", "os": "win32"}, {"is_launcher": false, "name": "assettocorsa/acs.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0e176cf5cd3db5a923c22f076ea52b54", "id": "425778010222886912", "name": "Assetto Corsa", "publishers": [{"id": "521816525846478852", "name": "Kunos Simulazioni"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "244210", "sku": "244210"}], "type": 1, "verify_key": "d11c543ea6f9d33a6573b83b87538761e1259323aa45b26ff1d31d1b8b950dbb"}, {"description": "This is a game that helps users improve their aim in games such as Overwatch and CSGO with custom settings for the user to twiddle in, with different modes this game allows the user to improve their reflects, flick-shooting and/or tracking.", "executables": [{"is_launcher": false, "name": "aim hero.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ad10788941033b638409d216ebf789a4", "id": "425778246941016064", "name": "Aim Hero", "publishers": [{"id": "521816742675218463", "name": "ProGames Studio"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "518030", "sku": "518030"}], "type": 1, "verify_key": "e47dd3ce7a0a60908a2f68739e12246c74e70e733e6bd0059b4d920f48d36c1c"}, {"description": "", "executables": [{"is_launcher": false, "name": "sfm.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e5060782c4985fc1917688af9c0b5064", "id": "425778288661757952", "name": "Source Filmmaker", "publishers": [{"id": "521816507102003200", "name": "Valve"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "1840", "sku": "1840"}], "type": 1, "verify_key": "2f35892a1651aefd25a7b9a80f5ba2845a354e3134e92fc207aab244008ab0c8"}, {"description": "Poly Bridge puts the player in charge of building structurally sound bridges, by making use of a variety of materials such as Wood, Steel, Hydraulic Pistons and more.", "developers": [{"id": "521816622344699914", "name": "Dry Cactus"}], "executables": [{"is_launcher": false, "name": "polybridge.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f4049411b2bc9507f2781c0ed6d4a5cb", "id": "425778516320059392", "name": "Poly Bridge", "publishers": [{"id": "521816622344699914", "name": "Dry Cactus"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "367450", "sku": "367450"}], "type": 1, "verify_key": "f7261cb2dece9e85662286e6a9570e3a05b430e13d0a101486b5a7d90652bc00"}, {"description": "", "executables": [{"is_launcher": false, "name": "dirt3_game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c5d16bbc2fd8b5d0b9d7bd09753f9e64", "id": "425778620187803658", "name": "DiRT 3 Complete Edition", "publishers": [{"id": "521816592208756748", "name": "Codemasters Racing Studio"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "321040", "sku": "321040"}], "type": 1, "verify_key": "a20c971102bd27fac392cee302927eca42d1c2abe644064dc9945f51d6691b9b"}, {"description": "In this parody of inaccurate and terribly made \"Simulator\" games, an indestructible goat wreaks havoc on a vaguely European sandbox world plagued by buggy physics and non-sequiturs.", "developers": [{"id": "521816595153158147", "name": "Coffee Stain Studios"}], "executables": [{"is_launcher": false, "name": "goatgame-win32-shipping.exe", "os": "win32"}], "flags": 0, "guild_id": "570916458607935498", "hook": true, "icon": "10b3272b3d5044848eb8cc7f6e32455f", "id": "425778678723510302", "name": "Goat Simulator", "publishers": [{"id": "521816595153158147", "name": "Coffee Stain Studios"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "265930", "sku": "265930"}], "type": 1, "verify_key": "f5a23c93e2f64ca492dfce4751f56a95d498cd06746b5424102d69c5c694506a"}, {"description": "", "developers": [{"id": "521816623976415265", "name": "Hopoo Games"}], "executables": [{"is_launcher": false, "name": "risk of rain.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "216274c794767f6af246ad17eadc9f9d", "id": "425779272842608670", "name": "Risk of Rain", "primary_sku_id": "500458629879693313", "publishers": [{"id": "521816578342387713", "name": "Chucklefish Games"}, {"id": "521816623976415261", "name": "Hopoo Games, LLC"}], "slug": "risk-of-rain", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "248820", "sku": "248820"}, {"distributor": "discord", "id": "500458629879693313", "sku": "500458629879693313"}], "type": 1, "verify_key": "3904ec8a4bf53a86fd289c92d5f8c9c98aee0d810f6053cd602fb00a25bca367"}, {"description": "BombTag", "executables": [{"is_launcher": false, "name": "bombtag.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "26e0f3977004cc5e2c03ee1e7d383cb9", "id": "425779854332657694", "name": "BombTag", "publishers": [{"id": "521816663679565846", "name": "David Schneider"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "791930", "sku": "791930"}], "type": 1, "verify_key": "10561fc1f0048d828709edd11e2c68a6de9692df561c2e90071330681b6e643e"}, {"description": "Miscreated is a brutal, post-apocalyptic, survival-based, online multiplayer game being developed using CryENGINE 3.8 It was originally based on the popular DayZ mod for Arma 2.", "developers": [{"id": "521816714791485456", "name": "Entrada Interactive"}], "executables": [{"is_launcher": false, "name": "miscreated.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fa7aa7218a08c5fc5f3abca850a63835", "id": "425779909835751424", "name": "Miscreated", "publishers": [{"id": "521816714317660198", "name": "Entrada Interactive LLC"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "299740", "sku": "299740"}], "type": 1, "verify_key": "c1278094524993caf964ef6b603a6ec226d5c5f8d6f2ad9d1e40c009629270f6"}, {"description": "", "executables": [{"is_launcher": false, "name": "thehunter.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "62017e219df6fb33d2004147e5157e44", "id": "425781960317861888", "name": "theHunter Classic", "publishers": [{"id": "521816747477827597", "name": "Expansive Worlds"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "253710", "sku": "253710"}], "type": 1, "verify_key": "cbe789a62f1fa0af0848722aad62a5731607293d1d67edbd4a6b52278d4d2807"}, {"description": "Cortex Command is a side scroller that features up to 4 player spiltscreen action, developed independently by Data Realms LLC. Dynamic 2D pixel graphics coupled with an extremely detailed physics engine makes for replayable and emergent gameplay. It won the Audience Award and Award for Technical Excellence at IGF 2009.", "developers": [{"id": "521816748744245266", "name": "Data Realms"}], "executables": [{"is_launcher": false, "name": "cortex command.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3d695020b854bd102f214d74ace253d6", "id": "425787524737269770", "name": "Cortex Command", "publishers": [{"id": "521816748744245266", "name": "Data Realms"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "209670", "sku": "209670"}], "type": 1, "verify_key": "9c565462f19dcf2ab110406c68fbb8bc21394542c18f0ee451660481b3e8b12a"}, {"description": "", "executables": [{"is_launcher": false, "name": "mgv.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1db23ac12b79383fd2f7dc86b34239eb", "id": "425800674568044575", "name": "METAL GEAR SURVIVE BETA", "publishers": [{"id": "521816738807939112", "name": "Konami Digital Entertainment"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "797470", "sku": "797470"}], "type": 1, "verify_key": "e5e7aab591a82e42936f1805c129ec3431002b915b9efd46b1817d286eb4911f"}, {"aliases": ["Block n Load"], "description": "Block N Load", "developers": [{"id": "521816499950714881", "name": "Jagex Ltd."}], "executables": [{"is_launcher": false, "name": "blocknload.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f201f02b5614d519dea61b4093b9c078", "id": "426524547177512960", "name": "Block N Load", "publishers": [{"id": "521816562068488197", "name": "Jagex"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "299360", "sku": "299360"}], "type": 1, "verify_key": "070b63f5b746dd07a4a15688a87ca213718c208907de2dfb178c0931400ccf96"}, {"description": "Lethal League is fighting game between up to four players. The only means of attacking is by hitting an anti-gravity ball back and forth at exponentially faster speeds.", "developers": [{"id": "521816753341333507", "name": "Reptile"}], "executables": [{"is_launcher": false, "name": "lethalleague.exe", "os": "win32"}, {"is_launcher": false, "name": "lethalleague.app", "os": "darwin"}], "flags": 0, "guild_id": "207785413329420288", "hook": true, "icon": "a9541d4ddab904acc295477c38006f51", "id": "426524717919240202", "name": "Lethal League", "publishers": [{"id": "521816753341333507", "name": "Reptile"}, {"id": "521816753341333510", "name": "Team Reptile"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "261180", "sku": "261180"}], "type": 1, "verify_key": "345933b0cfd817c4ac6c466c14088b197895333da0c9536971f591177854f2e1"}, {"description": "Join the Italian resistance and snipe the hell out of fascists in the latest Sniper Elite game.", "developers": [{"id": "521816698534494221", "name": "Rebellion"}], "executables": [{"is_launcher": false, "name": "sniperelite4.exe", "os": "win32"}], "flags": 0, "guild_id": "231003172921933834", "hook": true, "icon": "8a41d5d909a55d49234d747d2410d693", "id": "426524936060928011", "name": "Sniper Elite 4", "publishers": [{"id": "521816698534494221", "name": "Rebellion"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "312660", "sku": "312660"}], "type": 1, "verify_key": "9f714572307c511a26cc815aeda390702cbba20b9243714fed866640b7d0fcc2"}, {"description": "The sequel to Amplitude Studio's 4X Space Strategy game Endless Space, featuring new factions and in depth political system.", "developers": [{"id": "521816527343845459", "name": "Amplitude Studios"}], "executables": [{"is_launcher": false, "name": "endlessspace2.exe", "os": "win32"}], "flags": 0, "guild_id": "227126593754103810", "hook": true, "icon": "8c5e5ef46b04c7302093151e203e8644", "id": "426524963583950868", "name": "Endless Space 2", "publishers": [{"id": "521816527343845450", "name": "AMPLITUDE Studios"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "392110", "sku": "392110"}], "type": 1, "verify_key": "5ec31d4d382d794d6953101246e71de800f6eb64bd71024513b57428513505bd"}, {"description": "Dead Maze is a 2D MMO game set in a destroyed contemporary world, filled with zombies. Explore the world, scavenge and craft as many items as possible, to survive the hostile environment and upgrade gear and camp.", "developers": [{"id": "521816548537663509", "name": "Atelier 801"}], "executables": [{"is_launcher": false, "name": "deadmaze.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "09392ab1ce233c90d6e7ad0f606c92b6", "id": "426524991379603458", "name": "Dead Maze", "publishers": [{"id": "521816548537663509", "name": "Atelier 801"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "667890", "sku": "667890"}], "type": 1, "verify_key": "d2ddb844ef2e5df8f38ee5152b1d879283173d49fa16a112a2fd87f3f6ec04ed"}, {"aliases": ["World of Warcraft PTR"], "description": "", "executables": [{"is_launcher": false, "name": "wowt-64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b0e9431d8218443178bd7df3755487c2", "id": "426525131276550144", "name": "World of Warcraft Public Test", "overlay": true, "publishers": [{"id": "521816523430428673", "name": "Blizzard Entertainment"}], "summary": "", "third_party_skus": [{"distributor": "battlenet", "id": null, "sku": null}], "type": 1, "verify_key": "e6213e98790adf27c7b2a514f641cce89957051899969ce41c99ac5c524fba43"}, {"description": "In Sniper Elite III, players once again take on the role of World War II sniper Karl Fairburne, this time as he travels to Northern Africa to uncover a secret Nazi plot.", "developers": [{"id": "521816698534494221", "name": "Rebellion"}], "executables": [{"is_launcher": false, "name": "sniperelite3_mantle.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e56a5df9ca0203b348f45a506a437193", "id": "426525148892495882", "name": "Sniper Elite 3", "publishers": [{"id": "521816570520141824", "name": "505 Games"}, {"id": "521816698534494221", "name": "Rebellion"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "238090", "sku": "238090"}], "type": 1, "verify_key": "d83478479160768d2c8679cd58e78014415f71def98f428c6afe4c0a8eb6bba4"}, {"description": "A satirical fantasy hack-and-slash action adventure in which you and up to three friends take on The Forces of Evil by wielding eight elements of magick and combining them in unique ways.", "developers": [{"id": "521816662723526658", "name": "Arrowhead Game Studios"}], "executables": [{"is_launcher": false, "name": "magicka.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c591e6bedd9925b15ba1ac27c3375124", "id": "426525158627606568", "name": "Magicka", "publishers": [{"id": "521816521249521702", "name": "Paradox Interactive AB"}, {"id": "521816662723526658", "name": "Arrowhead Game Studios"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "42910", "sku": "42910"}], "type": 1, "verify_key": "9ea2f4adc1b3ec51674ad70e69f0afff8991fd676b695d24f4e8c48d49498a0f"}, {"description": "The fifth numbered entry in the renowned Street Fighter series of fighting games has appeared as a PlayStation 4 and PC exclusive.", "developers": [{"id": "521816574512857088", "name": "Capcom"}], "executables": [{"is_launcher": false, "name": "streetfightervbeta-win64-shipping.exe", "os": "win32"}, {"is_launcher": false, "name": "streetfighterv.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9b7e6011ce57b59f332d20e6d60a1eef", "id": "426525250549973022", "name": "Street Fighter V", "publishers": [{"id": "521816574512857088", "name": "Capcom"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "310950", "sku": "310950"}], "type": 1, "verify_key": "754b300664ccdc3f397f10b3174639552c84e9a31083ba50e3b8fcb5418314b4"}, {"aliases": ["Dead Space"], "description": "In this portable tale, set in-between Dead Space and Dead Space 2, Vandal seeks to undo the damage unwittingly caused in the name of Unitology.", "developers": [{"id": "521816749239435267", "name": "IronMonkey Studios"}], "executables": [{"is_launcher": false, "name": "dead space.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "24731d17a3d4d03c6b6cea0fe1aa8f8a", "id": "426525408666583050", "name": "Dead Space\u2122", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}, {"id": "521816749239435266", "name": "EA Redwood Shores"}], "summary": "", "third_party_skus": [{"distributor": "origin", "id": null, "sku": null}, {"distributor": "steam", "id": "17470", "sku": "17470"}], "type": 1, "verify_key": "1ca932fa71bf9990a1fa8daa25cbd508a049b3bab0f0426d684cbf9cb7f186d4"}, {"description": "Superflight is a wing-suit flying game.", "developers": [{"id": "521816712211857410", "name": "Grizzly Games"}], "executables": [{"is_launcher": false, "name": "superflight.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6c7ddf3e32c7d506073fb7c401f4e526", "id": "426525741702709258", "name": "Superflight", "publishers": [{"id": "521816712211857409", "name": "GrizzlyGames"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "732430", "sku": "732430"}], "type": 1, "verify_key": "955dd82cd667f0fb4eee3ff7a4c298db1ecf068e384acd9313733faf4378357f"}, {"aliases": ["The Witcher 2: Assassins of Kings"], "description": "", "executables": [{"is_launcher": false, "name": "witcher2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d568936ecd0d60286d78c0ab2bb2764c", "id": "426525754092814346", "name": "The Witcher 2: Assassins of Kings Enhanced Edition", "publishers": [{"id": "521816596172505088", "name": "CD PROJEKT RED"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "20920", "sku": "20920"}], "type": 1, "verify_key": "9ac92c489b073580caffbd1963924e79f236e4a8a727b855269fe6a907df9973"}, {"description": "Off-road truck driving simulation based on Havok physics engine enabled ground deformation and interactive water and foliage.", "developers": [{"id": "521816618024828939", "name": "oovee"}], "executables": [{"is_launcher": false, "name": "spintires.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "334cbcc9c49b762cfaaae256b812eb6d", "id": "426525833281404928", "name": "Spintires", "publishers": [{"id": "521816617571581965", "name": "IMGN.PRO"}, {"id": "521816618024828938", "name": "Oovee\u00ae Game Studios"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "263280", "sku": "263280"}], "type": 1, "verify_key": "7f181acec0d2bcb29a3a7ed7f8f2f5008a52d8d7e9b8bd2bf151e6ae259575f1"}, {"description": "A wave based first-person shooter.", "developers": [{"id": "521816538202767361", "name": "Big Corporation"}], "executables": [{"is_launcher": false, "name": "bloodandbacon.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e7eced6f459cd8f2fcebed6d52b96695", "id": "426526253294551046", "name": "Blood and Bacon", "publishers": [{"id": "521816538202767360", "name": "Grunge Games LTD"}, {"id": "521816538202767361", "name": "Big Corporation"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "434570", "sku": "434570"}], "type": 1, "verify_key": "9b2d1770d3eeb610cb1ef5cdb283cb045c467af738b39e646994b2c30c437434"}, {"description": "The 3rd installment in the Car Mechanic Simulator franchise, and the 1st to be released on consoles.", "developers": [{"id": "521816512512786456", "name": "Red Dot Games"}], "executables": [{"is_launcher": false, "name": "cms2018.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e57fa905f4583c227540516e56bbd1d3", "id": "426526355564265479", "name": "Car Mechanic Simulator 2018", "publishers": [{"id": "521816512512786456", "name": "Red Dot Games"}, {"id": "521816512516980736", "name": "PlayWay"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "645630", "sku": "645630"}], "type": 1, "verify_key": "a784c82184f339248b4a8ea05e573473c1eb35f14c1f6de9e5007a8414d134bd"}, {"description": "A re-release of Dragon's Dogma, Dark Arisen includes a new high level area with new monsters and quests from the original, as well as a handful of refinements to the original game.", "developers": [{"id": "521816574512857088", "name": "Capcom"}], "executables": [{"is_launcher": false, "name": "ddda.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e200008edccf3690f7aea48f37ebc09d", "id": "426526490042302464", "name": "Dragon's Dogma: Dark Arisen", "publishers": [{"id": "521816574512857088", "name": "Capcom"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "367500", "sku": "367500"}], "type": 1, "verify_key": "69ddd55deb21477f6a4e9c3a4ed2ff8de2580052ac121826138fd57eda288ae0"}, {"description": "Isometric zombie survival, where death is inevitable and all you can hope for is to have a bullet left for your own head.", "developers": [{"id": "521816574047420419", "name": "The Indie Stone"}], "executables": [{"is_launcher": false, "name": "projectzomboid32.exe", "os": "win32"}, {"is_launcher": false, "name": "projectzomboid64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6030c94c33dab692201194047f5e1a51", "id": "426526722322726912", "name": "Project Zomboid", "publishers": [{"id": "521816574047420419", "name": "The Indie Stone"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "108600", "sku": "108600"}], "type": 1, "verify_key": "87b51570c38b12dfd40396eca64fc715efc5fc3c234ea755821c3ed6ddf25bbc"}, {"description": "Twin stick arena Rogue-Like from independent developer Panic Arts. Standard rogue-like with mechanics such as random items, potions, and arena layouts are present. The game also features RPG style character progression through attribute and talent points with a skill tree. The game currently consists of 4 acts, 4 playable characters, and 3 unlockable difficulties with Hardcore (permanent death) mode.", "developers": [{"id": "521816730650017803", "name": "Panic Arts"}], "executables": [{"is_launcher": false, "name": "hero_siege.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b276d99b37e11d3eb2b4e117dc040bac", "id": "426526773694431233", "name": "Hero Siege", "publishers": [{"id": "521816730650017803", "name": "Panic Arts"}, {"id": "521816730650017804", "name": "Elias Viglione"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "269210", "sku": "269210"}], "type": 1, "verify_key": "3674d1f1ef10f4b44870eef92be9e4aebba9fbb81e1ab4febe0fb8fdb5aa2b95"}, {"description": "Reprise the role of The Postal Dude who is willing to accomplish his everyday goals by any means necessary.", "developers": [{"id": "521816665168543755", "name": "Running With Scissors"}], "executables": [{"is_launcher": false, "name": "postal2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "64c1b27c267fe8bd32bf17711e8ac4bd", "id": "426527481122521098", "name": "POSTAL 2", "publishers": [{"id": "521816665168543755", "name": "Running With Scissors"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "223470", "sku": "223470"}], "type": 1, "verify_key": "dc75b782864c0a5fae6bffc83c24336e12332fe9d880a2bdcd18905a076e14e5"}, {"description": "A free-to-play, open world winter sports game.", "developers": [{"id": "521816604175106051", "name": "Poppermost Productions"}], "executables": [{"is_launcher": false, "name": "playsnow.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ad8016215d9f7910a1e1e4c541bbf428", "id": "426527534268809226", "name": "SNOW", "publishers": [{"id": "521816604175106051", "name": "Poppermost Productions"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "244930", "sku": "244930"}], "type": 1, "verify_key": "445dd0036eea3d9d5c0f0ff84552e6f1b862f969edc0227f069fe3a455ff995a"}, {"description": "Real Pool 3D - Poolians", "executables": [{"is_launcher": false, "name": "poolians.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3891ac63a5c74ea0e739234e3d0f8201", "id": "426528563919978496", "name": "Real Pool 3D - Poolians", "publishers": [{"id": "521816754989694998", "name": "Poolians.com"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "670290", "sku": "670290"}], "type": 1, "verify_key": "546409de6457dee09d77c9b13441cc6543e0d89bc30fda039fdcd7e0689383bd"}, {"description": "", "executables": [{"is_launcher": false, "name": "btd5-win.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6ff27148b29e87f584e97196767b5813", "id": "426528712348139520", "name": "Bloons TD5", "publishers": [{"id": "521816733728768032", "name": "Ninja Kiwi"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "306020", "sku": "306020"}], "type": 1, "verify_key": "c87ef6a19b57287510046a7b7111643d21c43dfde784c4178ab50caa90e6db11"}, {"description": "Following up two years after Deus Ex: Human Revolution, Mankind Divided sees Adam Jensen working to thwart a terrorist organization bent on promoting human augmentation. It serves as a prequel to Deus Ex, the first entry in the series.", "developers": [{"id": "521816520817639457", "name": "Eidos-Montr\u00e9al"}], "executables": [{"is_launcher": false, "name": "dxmd.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9e46dd60d47ae6d7e5f5f3b7d257e4ac", "id": "426529450910547968", "name": "Deus Ex: Mankind Divided\u2122", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}, {"id": "521816675516153861", "name": "Eidos Montreal"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "337000", "sku": "337000"}], "type": 1, "verify_key": "15a6f94a328cadc7cdfa5507143c5abca10ba62f348e92fe30bc4767c5296938"}, {"description": "A game where one player can see the bomb, and must listen to their friends who have the instructions on how to defuse it.", "developers": [{"id": "521816581924192298", "name": "Steel Crate Games"}], "executables": [{"is_launcher": false, "name": "ktane.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d7f56eba5073835b346ce534408ada38", "id": "426531471520563211", "name": "Keep Talking and Nobody Explodes", "publishers": [{"id": "521816581924192298", "name": "Steel Crate Games"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "341800", "sku": "341800"}], "type": 1, "verify_key": "104d6700696090341c4e08b3ebb0f8baeb504ff4fc40c6b01d2946cbc1dda2dc"}, {"description": "", "executables": [{"is_launcher": false, "name": "aomx.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4b555e06487b3aa5a1e3669c87f6db14", "id": "427033332065370132", "name": "Age of Mythology: Extended Edition", "publishers": [{"id": "521816624546709506", "name": "Skybox Labs"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "266840", "sku": "266840"}], "type": 1, "verify_key": "698b24261d9330f1360e18b9b9f30233e51a615b14a55374cd43acf096314943"}, {"description": "This is the 2015 edition of the F1 racing game by Codemasters for current generation consoles and PC.", "developers": [{"id": "521816503960600577", "name": "Codemasters Birmingham"}], "executables": [{"is_launcher": false, "name": "f1_2015.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8b0041947c866da175e244e82b42e0ac", "id": "427304691903365120", "name": "F1 2015", "publishers": [{"id": "521816499464306688", "name": "Codemasters"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "286570", "sku": "286570"}], "type": 1, "verify_key": "d3da47d37e6495fb72bfaa6d87ef1b6854ac5274152a5b1c722a975ef516b619"}, {"description": "A co-op cooking party game - work together or fight to be the best chef!", "developers": [{"id": "521816619115085825", "name": "Ghost Town Games"}], "executables": [{"is_launcher": false, "name": "overcooked.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "16473a1c76fde9b7e776e5583386d622", "id": "428052640740540416", "name": "Overcooked", "publishers": [{"id": "521816618586734595", "name": "Ghost Town Games Ltd."}, {"id": "521816571103019015", "name": "Team17 Software Limited"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "448510", "sku": "448510"}], "type": 1, "verify_key": "1445ac7955270e56d4a412f07760a778159fb3d21fe9fbdde51c83b4caeb0d37"}, {"aliases": ["The Witcher: Enhanced Edition "], "description": "", "executables": [{"is_launcher": false, "name": "witcher.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ecc6f92c342df3015d72702eda249dcf", "id": "428052689641930752", "name": "The Witcher: Enhanced Edition", "publishers": [{"id": "521816596172505088", "name": "CD PROJEKT RED"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "20900", "sku": "20900"}], "type": 1, "verify_key": "81d38e0ce9533f7c2b54d704aa1f13c1f97ede1234aff9e794a89c4977925fdf"}, {"description": "PickCrafter is a free-to-play hit mobile game where players tap or swing their pickaxe to break blocks and collect picks. As players progress they will open chests loaded with treasure and many collectibles. There are many unique biomes to explore with rare pickaxes to unlock.", "executables": [{"is_launcher": false, "name": "pickcrafter.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6980940884aaf8f67d9c251c87cf9fae", "id": "428052738140798976", "name": "PickCrafter", "publishers": [{"id": "521816695397023747", "name": "Fiveamp"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "734750", "sku": "734750"}], "type": 1, "verify_key": "2185d7a7eb01ef34cfb2deba7cf84796c23ebc902c58a9bc78a87da58b7c4a3c"}, {"aliases": ["Need for Speed: Most Wanted", "Need for Speed: Most Wanted (2005)", "Need for Speed: Most Wanted (2012)"], "description": "Players cruise the streets of the city Fairhaven, evading the cops while working their way to the top of the most wanted street racers list in this open-street racing game from Criterion Games.", "developers": [{"id": "521816761948045361", "name": "Criterion Games"}], "executables": [{"is_launcher": false, "name": "need for speed - most wanted/speed.exe", "os": "win32"}, {"is_launcher": false, "name": "nfs13.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "239f96838aa2bc6c6691975316536f8b", "id": "428052828242706433", "name": "Need for Speed\u2122 Most Wanted", "publishers": [{"id": "521816538202767363", "name": "EA Games"}], "summary": "", "third_party_skus": [{"distributor": "origin", "id": null, "sku": null}], "type": 1, "verify_key": "06fac703350cff18d8f0fc54720e055580bb49d217d5f715a15550d62ec6710b"}, {"aliases": ["Just Survive LaunchPad", "Just Survive Launcher"], "description": "A post-apocalyptic MMO from the makers of EverQuest II and The Matrix Online. Set fifteen years after an initial horrifying outbreak, players must survive against the infected, wild animals, and other survivors.", "developers": [{"id": "521816500974256130", "name": "Daybreak Games"}], "executables": [{"is_launcher": false, "name": "just survive/h1z1_be.exe", "os": "win32"}, {"is_launcher": false, "name": "just survive/h1z1.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "169a30924de53691ee7a5bc58506b621", "id": "428053249120010241", "name": "Just Survive", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816717291421726", "name": "Daybreak Game Company"}, {"id": "521816500974256130", "name": "Daybreak Games"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "295110", "sku": "295110"}], "type": 1, "verify_key": "c68dfe77c14dcc74066322bad8a73705b79d4f9a299abdb791effed115b633eb"}, {"description": "An indie game by Silver Dollar Games.", "developers": [{"id": "521816796907700226", "name": "Silver Dollar Games"}], "executables": [{"is_launcher": false, "name": "one finger death punch.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "684e5dbaca6bc1e291816db35df6cc2d", "id": "428053322000367616", "name": "One Finger Death Punch", "publishers": [{"id": "521816796907700226", "name": "Silver Dollar Games"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "264200", "sku": "264200"}], "type": 1, "verify_key": "74044cb8d248983aee46cd0cfe4cc62f74530c997d894eed9806d335960e7619"}, {"aliases": ["Elder Scrolls Legends"], "description": "A card game based on the Elder Scrolls franchise.", "developers": [{"id": "521816519768932355", "name": "Bethesda Game Studios"}], "executables": [{"is_launcher": false, "name": "the elder scrolls legends.exe", "os": "win32"}], "flags": 0, "guild_id": "186207370303504384", "hook": true, "icon": "8e8dbfc2c93d2ac3e15306563eabb4c9", "id": "428053383178354688", "name": "The Elder Scrolls: Legends", "publishers": [{"id": "521816500508819469", "name": "Bethesda Softworks"}, {"id": "521816520267923482", "name": "Dire Wolf Digital"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "364470", "sku": "364470"}], "type": 1, "verify_key": "a71b1e652f8fb352941e3bacb3c2d9fa3e348a14dd12d7a392fc5e1eb8f8883d"}, {"description": "From the studio behind Alien Hominid, Castle Crashers, and BattleBlock Theater comes a new comedic turn-based strategy game with a unique hexidecimal grid system.", "developers": [{"id": "521816647678558213", "name": "The Behemoth"}], "executables": [{"is_launcher": false, "name": "pitpeople.exe", "os": "win32"}], "flags": 0, "guild_id": "195951483789901835", "hook": true, "icon": "fac4b16b34fac91ba909a89029954013", "id": "428053560304074752", "name": "Pit People", "publishers": [{"id": "521816647678558213", "name": "The Behemoth"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "291860", "sku": "291860"}], "type": 1, "verify_key": "0a7dfdcb73265723de0a2dfb38df42ffdd2ccf8a81fa89aaef11c4e3b8459d0c"}, {"description": "The popular collectible card game goes free-to-play.", "developers": [{"id": "521816725247754268", "name": "Stainless Games Ltd."}], "executables": [{"is_launcher": false, "name": "magicduels.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9606625a036bca2517808e80af336f11", "id": "428053651932577792", "name": "Magic Duels", "publishers": [{"id": "521816725247754267", "name": "Wizards of the Coast, Inc."}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "316010", "sku": "316010"}], "type": 1, "verify_key": "e24d6dbf70dcd11b411fa067685adf1611fd1df81ac1b202e3c1e0aef2abbe8e"}, {"aliases": ["Star Wars Knights Of The Old Republic II: The Sith Lords"], "bot_public": true, "bot_require_code_grant": false, "description": "", "developers": [{"id": "521816588169510930", "name": "Obsidian Entertainment"}], "executables": [{"is_launcher": false, "name": "swkotor2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "41e07efb3899e0f0b0e00cb292757764", "id": "428053722300416010", "name": "STAR WARS\u2122 Knights of the Old Republic\u2122 II: The Sith Lords\u2122", "primary_sku_id": "492358610974801920", "publishers": [{"id": "570702595178627072", "name": "Lucasfilm, Disney"}], "slug": "star-wars-tm-knights-of-the-old-republic-tm-ii-the-sith-lords-tm", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492358610974801920", "sku": "492358610974801920"}, {"distributor": "steam", "id": "208580", "sku": "208580"}], "type": 1, "verify_key": "7e0ad73e641e2efb72f8aa465f28b196f61a5ce33077ecd4cc28c4c9ae90a077"}, {"aliases": ["Tree of Savior"], "description": "", "executables": [{"is_launcher": false, "name": "client_tos.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8d7c55f7c7da3e752b58fd291ec33b5f", "id": "428053768630960128", "name": "Tree of Savior (English Ver.)", "publishers": [{"id": "521816697448038411", "name": "IMCGAMES Co.,Ltd."}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "372000", "sku": "372000"}], "type": 1, "verify_key": "283aec8172be351352636d517aec4cad91521bbdb8b7535b831fe44d53d5128f"}, {"cover_image": "435b876910a51c4c7d049146a99ea32a", "description": "Torisbash is an extremely violent, complicated, community driven turn-based fighting game created by Swedish software engineer and Judo fighter Hampus \"Hampa\" S\u00f6derstr\u00f6m.", "developers": [{"id": "521816667232403461", "name": "Nabi Studios"}], "executables": [{"is_launcher": false, "name": "toribash.exe", "os": "win32"}], "flags": 0, "guild_id": "385460405754920970", "hook": true, "icon": "2cd4f2dd69051bb732f197f26f70121f", "id": "428054001502650368", "name": "Toribash", "primary_sku_id": "428054001502650368", "publishers": [{"id": "558166032661872641", "name": "Nicalis"}], "slug": "toribash", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "248570", "sku": "248570"}], "type": 1, "verify_key": "5256c917fa0eb70960edde7e612f2f1cd0da06b76fa8338b9b9b348101de8199"}, {"aliases": ["Star Wars Jedi Knight"], "description": "", "developers": [{"id": "521816668196831240", "name": "Raven Software"}], "executables": [{"is_launcher": false, "name": "jamp.exe", "os": "win32"}, {"is_launcher": false, "name": "jediacademy.exe", "os": "win32"}, {"is_launcher": false, "name": "jasp.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fd7f0533bb3b5c8ac0778074dd1b8baf", "id": "428054061502300160", "name": "STAR WARS\u2122 Jedi Knight: Jedi Academy\u2122", "primary_sku_id": "492359223028482049", "publishers": [{"id": "570702595178627072", "name": "Lucasfilm, Disney"}], "slug": "star-wars-tm-jedi-knight-jedi-academy-tm", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "6020", "sku": "6020"}, {"distributor": "discord", "id": "492359223028482049", "sku": "492359223028482049"}], "type": 1, "verify_key": "9dbcffd8f05f6003c5158efac904812de5ab56151da314f45f3f962f637fe873"}, {"description": "", "developers": [{"id": "521816770797895696", "name": "Ghost Ship Games"}], "executables": [{"is_launcher": false, "name": "fsd-win64-shipping.exe", "os": "win32"}], "flags": 0, "guild_id": "257785731072786435", "hook": true, "icon": "f2eb28103bedcfe67bb4d2da6ff663b9", "id": "428054228511227914", "name": "Deep Rock Galactic", "publishers": [{"id": "521816770797895696", "name": "Ghost Ship Games"}, {"id": "521816595153158147", "name": "Coffee Stain Studios"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "548430", "sku": "548430"}], "type": 1, "verify_key": "3ae32d8c63fdd953062ed113144de9fc72b76b3a4bc83479391f9652d3c08418"}, {"description": "After surviving a plane crash, players become stranded in a procedurally generated environment somewhere within the Pacific Ocean.", "developers": [{"id": "521816567030218764", "name": "BEAM Team Games"}], "executables": [{"is_launcher": false, "name": "stranded_deep_x64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8f2397c51a879380c46c3ef9b1eb4b6a", "id": "428054462892867614", "name": "Stranded Deep", "publishers": [{"id": "521816567030218764", "name": "BEAM Team Games"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "313120", "sku": "313120"}], "type": 1, "verify_key": "cf5d61035eda463e22fecfd5f1160004af13bde742146525abd488c8f3f0c7d5"}, {"description": "", "executables": [{"is_launcher": false, "name": "hunt.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "52ae10d11da1104b8081bfd9c4b1f803", "id": "428054629146951691", "name": "Hunt: Showdown (Test Server)", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "770720", "sku": "770720"}], "type": 1, "verify_key": "d3361dac6ddea67992e772eaa8e13fea854410a42590c614275607d0fa713b3c"}, {"description": "", "developers": [{"id": "521816715248533527", "name": "Denton Designs"}], "executables": [{"is_launcher": false, "name": "eco.exe", "os": "win32"}], "flags": 0, "guild_id": "254025510651297802", "hook": true, "icon": "c892436e74c2182ce082216a0bc63190", "id": "428055174905331712", "name": "Eco", "publishers": [{"id": "521816715248533525", "name": "Ocean Software Ltd."}, {"id": "521816715248533526", "name": "Strange Loop Games"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "382310", "sku": "382310"}], "type": 1, "verify_key": "693fde9b7cf616742789d124e5cdc3708bc18c68c52ebf58840155ef0227e0d3"}, {"description": "", "executables": [{"is_launcher": false, "name": "hideandshriek-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b300c8c79281faf575eaba4b088d933c", "id": "428055329004191744", "name": "Hide and Shriek", "publishers": [{"id": "521816606318264330", "name": "Funcom"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "480430", "sku": "480430"}], "type": 1, "verify_key": "91073d01aca732d35a123d9ce91d4a35e1a195b65f7e10ce7f6b0a09b27876e2"}, {"description": "Better known as the free-to-play \"APB: Reloaded\", APB is a MMO third-person shooter by the developers of Crackdown. Players choose between the hard-boiled law enforcers or the feared criminals as they try to stop the opposing faction's objectives.", "developers": [{"id": "521816798140563476", "name": "Realtime Worlds Ltd."}], "executables": [{"is_launcher": false, "name": "apb.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b6b64331fa9c16a269298f5ec80c0db6", "id": "428055627030331402", "name": "APB Reloaded", "publishers": [{"id": "521816797717069839", "name": "Reloaded Productions"}, {"id": "521816527343845439", "name": "Iceberg Interactive"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "113400", "sku": "113400"}], "type": 1, "verify_key": "f2917534ce81cfecd74d0d0261836e019fda59933fd6b1c4723ad665bb7ac130"}, {"description": "The seventh installment of the long-running action franchise, Call of Duty: Black Ops puts players into the early era of the Cold War (including the Vietnam War) as a member of the United States black operations unit known as the SOG.", "developers": [{"id": "521816646768263168", "name": "Treyarch"}], "executables": [{"is_launcher": false, "name": "t6sp.exe", "os": "win32"}, {"is_launcher": false, "name": "blackopsmp.exe", "os": "win32"}, {"is_launcher": false, "name": "blackops.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7f4d8a98b94e50063427483ec0e6e8a5", "id": "428055652162732032", "name": "Call of Duty: Black Ops", "publishers": [{"id": "521816501544550404", "name": "Activision"}, {"id": "521816646768263168", "name": "Treyarch"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "42700", "sku": "42700"}], "type": 1, "verify_key": "f7037d76d85cc9d00810b8a37174592244ee57076497a46605a8bd7faddccd1e"}, {"description": "The second game released with the Prey title, the player assumes the role of Morgan Yu as they attempt to escape the space station Talos-1 after a catastrophic alien outbreak.", "developers": [{"id": "521816500974256128", "name": "Arkane Studios SA"}], "executables": [{"is_launcher": false, "name": "prey.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "431b79115c4daf652163e02782cde04f", "id": "428055981650608128", "name": "Prey", "publishers": [{"id": "521816618586734593", "name": "Arkane Studios"}, {"id": "521816500508819469", "name": "Bethesda Softworks"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "480490", "sku": "480490"}], "type": 1, "verify_key": "8806a8f6aa428cb99778a96d9f4d15f8906dd4fddcbe28906685b9cba35c2f21"}, {"description": "Metro Conflict: The Origin", "executables": [{"is_launcher": false, "name": "metroconflict.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "86ba61028002eec3a7999df69d36c930", "id": "428056164698423296", "name": "Metro Conflict: The Origin", "publishers": [{"id": "521816790599335987", "name": "RED DUCK, INC."}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "662320", "sku": "662320"}], "type": 1, "verify_key": "7dbc588eac88ae552cf4a4c4216bb2f218cfeb37c10492a759a6810a78c02553"}, {"description": "As a brave, but fragile adventurer, explore dangerous procedurally-generated caves to collect treasure and gain better equipment, before dying horribly and starting all over again.", "developers": [{"id": "521816709057740814", "name": "Mossmouth, LLC"}], "executables": [{"is_launcher": false, "name": "spelunky.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e477c91773ec7dfdb4ca4caa363476f2", "id": "428056413806395392", "name": "Spelunky", "publishers": [{"id": "521816709057740814", "name": "Mossmouth, LLC"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "239350", "sku": "239350"}], "type": 1, "verify_key": "b97f863118003a481b1bbf792ce8637873a453e232b2ede9252ee2789cf648bb"}, {"description": "Medieval II is the fourth strategy game in the Total War series, and the second based during the The Middle Ages,marking a return for knights, castles and Crusades.", "developers": [{"id": "521816720503996437", "name": "The Creative Assembly"}], "executables": [{"is_launcher": false, "name": "medieval2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "90c633e84bcb94ca9fd8a48b82e9cefd", "id": "428057046701572106", "name": "Medieval II: Total War", "publishers": [{"id": "521816507676885010", "name": "Sega"}, {"id": "521816720503996437", "name": "The Creative Assembly"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "4700", "sku": "4700"}], "type": 1, "verify_key": "5fd01f2034f3331d313691f265353d9e5c426ee6bc672b2f64490e03f8fbfe81"}, {"description": "The sequel to the comedic fantasy world of Magicka tells the tale of a new group of powerful Wizards as they battle evil in a world almost devoid of other Wizards.", "developers": [{"id": "521816787487162391", "name": "Pieces Interactive"}], "executables": [{"is_launcher": false, "name": "magicka2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a0708ab9a754bfa9927659e5b422224e", "id": "428057934983987200", "name": "Magicka 2", "publishers": [{"id": "521816521249521702", "name": "Paradox Interactive AB"}, {"id": "521816787487162391", "name": "Pieces Interactive"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "238370", "sku": "238370"}], "type": 1, "verify_key": "5503afd82d0e923c3d34418dd3e2616c6eb86c02f24da51cb9e4811ef2465be0"}, {"description": "Ubisoft's take on the classic game", "developers": [{"id": "521816791677403139", "name": "Ubisoft Chengdu"}], "executables": [{"is_launcher": false, "name": "uno.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b6bcc64a33644cc76675d920cc51b2cd", "id": "428058887334264832", "name": "UNO", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "470220", "sku": "470220"}], "type": 1, "verify_key": "8c663793158dc23986da83b6af6c85c3e2ac6314ebaa04e7d840bd70b77a177d"}, {"description": "", "executables": [{"is_launcher": false, "name": "nioh.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6938d9e320823dc46cdd07a27b1d99ec", "id": "428059098882506752", "name": "Nioh: Complete Edition", "publishers": [{"id": "521816779509465099", "name": "KOEI TECMO GAMES CO., LTD."}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "485510", "sku": "485510"}], "type": 1, "verify_key": "d0fe710f76aeb0845e1f7208aa2ce226762c3f429540388e6a6059762e9f1733"}, {"description": "Dawn of War III is the 8th release in Relics esteemed Warhammer 40.000 RTS franchise and will have a much larger strategic component to it than previous titles, focusing on a more of a global battle while still retaining the squad-based action from previous titles.", "developers": [{"id": "521816593798397970", "name": "Relic Entertainment"}], "executables": [{"is_launcher": false, "name": "relicdow3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "eb47397a14e75738402857967faca15e", "id": "428060042248454144", "name": "Warhammer 40,000: Dawn of War III", "publishers": [{"id": "521816507676885010", "name": "Sega"}, {"id": "521816593798397970", "name": "Relic Entertainment"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "285190", "sku": "285190"}], "type": 1, "verify_key": "8e6f781408ac30520d0b286f17206779f6c78843e6bb2371b0ed4a04ce9f16c6"}, {"aliases": ["Epic Games Launcher"], "cover_image": "233029844745b015f186372d34076824", "description": "", "developers": [{"id": "521816615457783818", "name": "Epic Games"}], "executables": [{"is_launcher": false, "name": "fortniteclient-win64-shipping.exe", "os": "win32"}, {"is_launcher": false, "name": "fortniteclient-mac-shipping.app", "os": "darwin"}], "flags": 0, "guild_id": "322850917248663552", "hook": true, "icon": "233029844745b015f186372d34076824", "id": "432980957394370572", "name": "Fortnite", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816519332855821", "name": "Epic Games, Inc."}, {"id": "521816615457783818", "name": "Epic Games"}], "splash": "b82e4ce1bb3835f5adfd9a1e766844ae", "summary": "", "third_party_skus": [{"distributor": "epic", "id": "Fortnite", "sku": "Fortnite"}], "type": 1, "verify_key": "08d636fce21be4d2a5eb4e907dd2cf42a75e2b35825ef9a97b1a171403c3237d"}, {"bot_public": true, "bot_require_code_grant": false, "cover_image": "edb36f24e5ac60fffd4fa01ba8ba7cc7", "description": "In a dystopian future, gifted children known as Dreamers, have the ability to materialize the monsters haunting their nightmares. Ruthless fighters exploit the Dreamers\u2019 abilities to unleash hordes of monsters into arenas filled with massive guns, in this fresh take on the Tower Wars genre.", "developers": [{"id": "521816759083204608", "name": "DeSync Studios"}], "executables": [{"is_launcher": false, "name": "unleash.exe", "os": "win32"}], "flags": 0, "guild_id": "360108199946485760", "hook": true, "icon": "2581774a9d1eb61ee0a0ef486f35d269", "id": "437391104804126720", "name": "Unleash", "primary_sku_id": "492004779459870724", "publishers": [{"id": "521816759083204608", "name": "DeSync Studios"}], "slug": "unleash", "splash": "8f1f0eddd111d66492b4019ae54b77bf", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492004779459870724", "sku": "492004779459870724"}, {"distributor": "steam", "id": "621940", "sku": "621940"}], "type": 1, "verify_key": "518a85371157613b8274633511921754cad535841fb74791e94db30e1d482020"}, {"description": "Estranged: Act II follows the story of a fisherman, stranded on a mysterious island during a violent storm. Little does he know his adventure has just begun, and the island is home to more than it first seems.", "developers": [{"id": "521816740246585344", "name": "Alan Edwardes"}], "executables": [{"is_launcher": false, "name": "insulam-win64-shipping.exe", "os": "win32"}], "flags": 0, "guild_id": "368117880547573760", "hook": true, "icon": "32c56ffba6954f1fe50594a00764f089", "id": "443136903814971445", "name": "Estranged: The Departure", "primary_sku_id": "443136903814971445", "publishers": [{"id": "521816740246585344", "name": "Alan Edwardes"}], "slug": "estranged-the-departure", "splash": "61eabcac51092561a88175ba031615f9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "582890", "sku": "582890"}], "type": 1, "verify_key": "f08e1a5a54dbbff7157784038e2403d3ff105764f679933174212a6c84706926"}, {"aliases": ["ArcheAge"], "description": "ArcheAge is a sandbox MMO by XLGames.", "developers": [{"id": "521816776561131524", "name": "XLGames"}], "executables": [{"is_launcher": false, "name": "archeage.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a1439e9cff0b8f8e83cd25d4abed1c73", "id": "443155983670312969", "name": "Archeage", "publishers": [{"id": "521816577876951040", "name": "Trion Worlds"}], "summary": "", "third_party_skus": [{"distributor": "glyph", "id": null, "sku": null}], "type": 1, "verify_key": "86912c6fe1768db1311d4f3601a41759c0460d0584357274ec2d953a155a2fd4"}, {"aliases": ["Wakfu"], "description": "Wakfu is the successor of the turn-based MMORPG of Dofus set in the same world 1000 years later. The game is now made in Java instead of Flash.", "developers": [{"id": "521816751038791693", "name": "Ankama Games"}], "executables": [{"is_launcher": false, "name": "wakfu.exe", "os": "win32"}, {"is_launcher": false, "name": "wakfu.app", "os": "darwin"}], "flags": 0, "hook": true, "icon": "6962992f1748869a81a0da00d83475bf", "id": "443155990414622730", "name": "WAKFU", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}], "splash": "54aaeab581bbdf69f13abe524970d663", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "215080", "sku": "215080"}], "type": 1, "verify_key": "39997881cc8df9350ffe10248e62d726d7d5d4b38599b75ddcf3dab464bcfc6d"}, {"aliases": ["Microsoft Flight Simulator X"], "description": "", "executables": [{"is_launcher": false, "name": "fsx.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "59fcf8231557b9a7f5efb86ca997eb7f", "id": "443156007544160276", "name": "Microsoft Flight Simulator X: Steam Edition", "publishers": [{"id": "521816508624535569", "name": "Microsoft Game Studios"}], "splash": "5a76ea7622c30d80c643de2e91e9d900", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "314160", "sku": "314160"}], "type": 1, "verify_key": "eb95ed39869ebd479d8bc1a81a0b496b9621854e08757668a245f120c1069577"}, {"description": "Darwin Project reimagines the battle royale genre, adding reality show elements such as spectator interaction and even a Show Director who controls the arena. Ten players must withstand extreme environmental conditions, track opponents, craft tools, set traps, and fight to be the last one left alive.", "developers": [{"id": "521816617571581964", "name": "Scavengers Studio"}], "executables": [{"is_launcher": false, "name": "darwin.exe", "os": "win32"}], "flags": 0, "guild_id": "309438551798317066", "hook": true, "icon": "773a1574fd5f2406c3e85fc2bbd3490a", "id": "443156037130780692", "name": "Darwin Project", "publishers": [{"id": "521816617571581964", "name": "Scavengers Studio"}], "splash": "54703f2eb0fbfd9c65f71e4bcc807a81", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "544920", "sku": "544920"}], "type": 1, "verify_key": "c4165e67200a25e31898a20ad282729b4bf774fcd58ef6a0de316b554c41b57f"}, {"description": "", "executables": [{"is_launcher": false, "name": "mitosis.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "916e96c8ce7eaeb360824e319e326b46", "id": "443156048992403456", "name": "Mitos.is: The Game", "publishers": [{"id": "521816605827661834", "name": "Freakinware Studios"}], "splash": "08f7f1eba09b263e0ff4316f0a06f3d6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "389570", "sku": "389570"}], "type": 1, "verify_key": "02dc885b9f1db0d9567e5248b5c833c0d0c948e51e6f2655522d48aa3a59c258"}, {"description": "A competitive game where up to eight players attempt to penetrate one another using large, colorful phalluses.", "developers": [{"id": "521816734374559754", "name": "Free Lives"}], "executables": [{"is_launcher": false, "name": "genitaljousting.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7fc5d523d69169e70eb8b926df4dc06f", "id": "443156066562473993", "name": "Genital Jousting", "publishers": [{"id": "521816734374559754", "name": "Free Lives"}, {"id": "521816510730338331", "name": "Devolver Digital"}], "splash": "1986c4b09c9d5fcfa30966ae98bab9e3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "469820", "sku": "469820"}], "type": 1, "verify_key": "7c56311070d0a91c40d603f037cf88ceb7e71d39a4c4c340b0289b4b72042969"}, {"aliases": ["Universe Sandbox 2"], "description": "Universe Sandbox\u00b2 is a space simulator from Giant Army.", "developers": [{"id": "521816614543294465", "name": "Giant Army"}], "executables": [{"is_launcher": false, "name": "universe sandbox x64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5fb3742c3ab229c8d6580c00c57f64b6", "id": "443156067434889236", "name": "Universe Sandbox", "publishers": [{"id": "521816614543294465", "name": "Giant Army"}], "splash": "fed7ceda9357bd9d7705cc751fa9d0bb", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "230290", "sku": "230290"}], "type": 1, "verify_key": "f090c52be6efb5c9bb3676ffe1e760b5bd1c24ff8b2032c3ebdb15d20932eba0"}, {"description": "Aura Kingdom is a free to play MMO that brings lots of new things to the industry such as 100 floor sky towers, and a class system that focuses on weapon types and advances into multiple weapon types.", "developers": [{"id": "521816701319249954", "name": "X-Legend Entertainment"}], "executables": [{"is_launcher": false, "name": "aura kingdom/_launcher.exe", "os": "win32"}, {"is_launcher": false, "name": "aura kingdom/launcher.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3b54d155942ebf8e097101ec94776f63", "id": "443156075399872522", "name": "Aura Kingdom", "publishers": [{"id": "521816701319249952", "name": "Aeria Games & Entertainment"}, {"id": "521816701319249953", "name": "X-Legend"}], "splash": "0cb9af7d0c73a8f419d4783672d75e2e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "268420", "sku": "268420"}], "type": 1, "verify_key": "71dee0f76676eec37b41d2d61e6ebbb9083e6b1ed1802b7b2db08261f72bf3a6"}, {"description": "The fifth main entry in the open-world series, this time set in Montana. The protagonist must free Hope County from the cult known as Eden\u2019s Gate, led by cult leader Joseph Seed.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "farcry5.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "415833187ba5b19225a13a36f399e12f", "id": "443156340454457344", "name": "Far Cry 5", "publishers": [{"id": "521816654095843331", "name": "Ubisoft Montreal"}, {"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "a8a3271fb16b103d2cfc2e1adf73c2bf", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "552520", "sku": "552520"}], "type": 1, "verify_key": "304a8a9ee3a7322ba6c27f0f7607ac3581f6463da65ef42f147e82d133b90949"}, {"description": "Return to the dark life of Jackie Estacado in The Darkness II, Digital Extremes' sequel to the 2007 shooter by Starbreeze.", "developers": [{"id": "521816584612872203", "name": "Digital Extremes"}], "executables": [{"is_launcher": false, "name": "darknessii.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c35d95f9275d9910ed5a81b8b77b5a95", "id": "443156342115663882", "name": "The Darkness II", "publishers": [{"id": "521816584612872203", "name": "Digital Extremes"}, {"id": "521816504392482816", "name": "2K Games"}], "splash": "0ff647dc12d6e88ead7a7e85bc28ece8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "67370", "sku": "67370"}], "type": 1, "verify_key": "4c8bf32386892b51bb037492772cbf97a46fe260bfa8117de1d0af575fef93c9"}, {"aliases": ["Star Wars: Empire at War"], "description": "", "executables": [{"is_launcher": false, "name": "starwarsg.exe", "os": "win32"}, {"is_launcher": false, "name": "sweaw.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "24eb445c29b27827106d40484ae4d5ae", "id": "443156343227023370", "name": "STAR WARS\u2122 Empire at War: Gold Pack", "publishers": [{"id": "521816768407273492", "name": "Petroglyph"}], "splash": "03dd3a4070f2f40d80c69b7e03e552af", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "32470", "sku": "32470"}], "type": 1, "verify_key": "a56396d8c154df9192121f39b897ddd4a465879d8128ad70dcd95ac7e73f824b"}, {"description": "", "executables": [{"is_launcher": false, "name": "blockade3d/main.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "508ef8bb1105415646a70e510b1760ac", "id": "443156392874868767", "name": "BLOCKADE 3D", "publishers": [{"id": "521816792885100566", "name": "Shumkov Dmitriy"}], "splash": "56ae1a398bfc3961c6d9eaaea433867f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "302830", "sku": "302830"}], "type": 1, "verify_key": "a36542f4caf9029326b7f12bf67d15ac79bcc4f305f4e96b4e3f371f64050652"}, {"description": "MINDNIGHT", "executables": [{"is_launcher": false, "name": "mindnight.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fec751518f04573f39192f8a82da7fbd", "id": "443156444351561738", "name": "MINDNIGHT", "publishers": [{"id": "521816740246585345", "name": "No Moon"}], "splash": "4f9f914585b8805583cbd4fd98e0d479", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "667870", "sku": "667870"}], "type": 1, "verify_key": "03278500a1f4a32a59792c21f3498b7da2e519c3988a9b3c37104bb004ec0d61"}, {"bot_public": false, "bot_require_code_grant": false, "cover_image": "26143d4d4c731bad7d706d6a04c897d1", "description": "Dive into the zombie apocalypse with Zombie Panic! Source: a cooperative, survival-horror first-person-shooter. One of the most popular Half-Life 2 modifications of all time.", "developers": [{"id": "524353255669628948", "name": "Zombie Panic! Team"}], "executables": [{"is_launcher": false, "name": "zombie panic source/zps.exe", "os": "win32"}], "flags": 0, "guild_id": "280422623274598432", "hook": true, "icon": "b79d949320527e22e0ce57af632cf59f", "id": "443156570847838218", "name": "Zombie Panic! Source", "primary_sku_id": "443156570847838218", "publishers": [{"id": "524353255669628948", "name": "Zombie Panic! Team"}], "slug": "zombie-panic-source", "splash": "8c5806625d49e13831d57f6c94d54eb3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "17500", "sku": "17500"}], "type": 1, "verify_key": "94103be42f35bffcac4f2a94404b1ffd86ed61ec473061560c724542f73f6909"}, {"description": "", "executables": [{"is_launcher": false, "name": "just cause 3 multiplayer mod/playjcmp.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b026b632c235e969b485095ab706b8ae", "id": "443156876931235840", "name": "Just Cause\u2122 3: Multiplayer Mod", "publishers": [{"id": "521816611506880528", "name": "nanos GbR"}], "splash": "fdb66420db3c232b970bf1965974a6b9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "619910", "sku": "619910"}], "type": 1, "verify_key": "3c21ecaccffc2f28eb6c55e09b6e20d3b85fe93be502f0a9e10f13841fe0deb3"}, {"aliases": ["SimCity"], "description": "The fifth major installment of the SimCity franchise is a new take on the old city simulation formula. It features asynchronous multiplayer as well as Maxis' new Glassbox engine, allowing for real time customization and upgrading of buildings.", "developers": [{"id": "521816577876951044", "name": "Maxis Software"}], "executables": [{"is_launcher": false, "name": "simcity.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "378a59282129206c6d1d49a2acd184e5", "id": "443157047157194772", "name": "SimCity\u2122", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "summary": "", "third_party_skus": [{"distributor": "origin", "id": null, "sku": null}], "type": 1, "verify_key": "836b17653bad15e61ac23ff53a62016068d7421d86ebd158b327283d891bdc35"}, {"bot_public": true, "bot_require_code_grant": false, "description": "Frostpunk is the first society survival game.", "developers": [{"id": "521816628980219914", "name": "11 Bit Studios"}], "executables": [{"is_launcher": false, "name": "frostpunk.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0565b37e6c4cca654543e4b11bc01c89", "id": "443157248710148117", "name": "Frostpunk", "primary_sku_id": "471501184939851806", "publishers": [{"id": "521816628980219914", "name": "11 Bit Studios"}], "slug": "frostpunk", "splash": "dd9a5788aa0f99b43740c4bd8b13575b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "323190", "sku": "323190"}, {"distributor": "discord", "id": "471501184939851806", "sku": "471501184939851806"}], "type": 1, "verify_key": "5491a7842397257d62f75f9745dbe0a0e8f0b2d1ebe212afd098bd4cc0bcc4f6"}, {"description": "A multiplayer FPS sandbox platform.", "developers": [{"id": "521816592208756746", "name": "Bankroll Studios"}], "executables": [{"is_launcher": false, "name": "hurtworld.exe", "os": "win32"}, {"is_launcher": false, "name": "hurtworldclient.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5e2ce3c6c8255a3283903daf197d54a4", "id": "443157375260688395", "name": "Hurtworld", "publishers": [{"id": "521816592208756746", "name": "Bankroll Studios"}], "splash": "328241cb85ac1f11e81a6be5e278b5f5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "393420", "sku": "393420"}], "type": 1, "verify_key": "011c444c9ffa61a894c89db693314e6a0c36f63af7b955bfc2812a1f135fe8f1"}, {"description": "An iteration of the mobile FPS franchise with a focus on team-based multiplayer.", "executables": [{"is_launcher": false, "name": "moderncombatversus.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6e826d821cc5a296144d27e267826996", "id": "443157946357252116", "name": "Modern Combat Versus", "publishers": [{"id": "521816624546709504", "name": "Gameloft"}], "splash": "b5244c4e53881205874b82605a742afd", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "723780", "sku": "723780"}], "type": 1, "verify_key": "6a661c737d63c0551a695375787ee2af175ca6f406be4f8449912e55f24fbd3d"}, {"description": "A game that blurs the line between television and gaming. The game follows protagonists Jack Joyce and Beth Wilder, while the television show follows the game's antagonist Paul Serene. Both make up Quantum Break: a time travel mystery developed by Remedy Entertainment for Xbox One and PC.", "developers": [{"id": "521816609518518282", "name": "Remedy Entertainment Ltd."}], "executables": [{"is_launcher": false, "name": "quantumbreak.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6a328046a514d9bd369b18133969fcf3", "id": "443158005798928384", "name": "Quantum Break", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}, {"id": "521816635749695508", "name": "Remedy Entertainment"}], "splash": "34701a52693f6ddd00472e4512340298", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "474960", "sku": "474960"}], "type": 1, "verify_key": "504b811565638be4bb5a8cbb17438a8e6c766ed7ba80db792971df08267d69f1"}, {"description": "Brainstorm t-shirts, deceive your friends, and survive a night with a deadly trivia host in the third installment of Jackbox Games' annual party game pack.", "developers": [{"id": "521816532737851443", "name": "Jackbox Games"}], "executables": [{"is_launcher": false, "name": "the jackbox party pack 3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "572f1c58ef3e4f2ea0ffbb79d1491f61", "id": "443158085247303690", "name": "The Jackbox Party Pack 3", "publishers": [{"id": "521816532737851443", "name": "Jackbox Games"}], "splash": "7efbd428857ab9df6ba4ac86d04cd777", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "434170", "sku": "434170"}], "type": 1, "verify_key": "c2fab7d285ca0d2af785e8e50220d146f6b0496cebdd9b4722738577a5473045"}, {"description": "The fifth game in Kalypso's dictatorship simulation series. The game improves on trading, technology and research and adds competitive and cooperative multiplayer for the first time in the series.", "developers": [{"id": "521816701860577325", "name": "Haemimont Games AD"}], "executables": [{"is_launcher": false, "name": "tropico 5/appdata.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6db7d6e5bd8732fb964e9f6139abe8f5", "id": "443158178083897375", "name": "Tropico 5", "primary_sku_id": "484131048297463821", "publishers": [{"id": "521816629416296449", "name": "Kalypso Media"}, {"id": "521816616602959882", "name": "Haemimont Games"}], "slug": "tropico-5", "splash": "3b86c64959d71c60a28546407d20f97d", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "484131048297463821", "sku": "484131048297463821"}, {"distributor": "steam", "id": "245620", "sku": "245620"}], "type": 1, "verify_key": "b1d85004a62e59d3a9d1bba182a7710898daf2c5835b360f65071e525999f0ba"}, {"description": "A free-to-play battle royale 80's themed game from Boss Key Productions", "developers": [{"id": "521816742675218462", "name": "Boss Key Productions"}], "executables": [{"is_launcher": false, "name": "radicalheights.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b6ddbf1ab7d16f7285c673c99b88cbea", "id": "443158281624617000", "name": "Radical Heights", "publishers": [{"id": "521816742675218462", "name": "Boss Key Productions"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "809960", "sku": "809960"}], "type": 1, "verify_key": "70a97fb7dada76a675b19effdf35df0c551d9f5673d9dd760144925e1a2d4aa9"}, {"description": "My Summer Car - Part Car Mechanic Simulator, part basic needs simulator and part mid 90s Finland lifestyle simulator.", "developers": [{"id": "521816802674737155", "name": "Amistech Games"}], "executables": [{"is_launcher": false, "name": "mysummercar.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "622659bd5040df6e22a5efb8a8289fbc", "id": "443158342026788884", "name": "My Summer Car", "publishers": [{"id": "521816802674737155", "name": "Amistech Games"}], "splash": "c999777955641efb911a732b46b3fe1d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "516750", "sku": "516750"}], "type": 1, "verify_key": "a22b28ab7580f8fdcb4e301774e4ad0848aa54313a3380ce1dc39c1b09aa4f1e"}, {"description": "Spec Ops: The Line is a narrative-driven modern military third-person shooter set in Dubai during the aftermath of a series of destructive sandstorms.", "developers": [{"id": "521816629416296448", "name": "YAGER Development GmbH"}], "executables": [{"is_launcher": false, "name": "specopstheline.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "95b9b3a40f486b9367c6c70570c535fa", "id": "443158504719646739", "name": "Spec Ops: The Line", "publishers": [{"id": "521816504392482816", "name": "2K Games"}], "splash": "05f8f20237ccdc971473ee120338db1e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "50300", "sku": "50300"}], "type": 1, "verify_key": "96a6a9db43c634a7d80739c933af99c1f933da352e27248a9b1e2a14f920835f"}, {"description": "Friday the 13th: Killer Puzzle", "executables": [{"is_launcher": false, "name": "friday the 13th killer puzzle/f13.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "dcc24cb2243dc5b5878999ad60f7f8b5", "id": "443158817983692820", "name": "Friday the 13th: Killer Puzzle", "publishers": [{"id": "521816778264018957", "name": "Blue Wizard Digital"}], "summary": "", "type": 1, "verify_key": "22b9e7dbd0b7148bc0bbdbdac50b7ce28576cd11c3a4221cd9912f27d395704a"}, {"description": "Inspired by the bloody Battle of Verdun that took place in 1916 between German and French forces, Verdun is a squad-based multiplayer shooter set in World War I.", "developers": [{"id": "521816636995534860", "name": "Blackmill Games"}], "executables": [{"is_launcher": false, "name": "verdun.exe", "os": "win32"}, {"is_launcher": false, "name": "1914-1918 series.exe", "os": "win32"}], "flags": 0, "guild_id": "294408040902295552", "hook": true, "icon": "43bfc1ffc3efd605fa654591ff18896e", "id": "443159293538205697", "name": "Verdun", "publishers": [{"id": "521816636995534859", "name": "M2H"}], "splash": "b4d9d0e03c2a79b5fa84b973e6e05ea5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "242860", "sku": "242860"}], "type": 1, "verify_key": "95168ca1d178d1c497357045f6287f6891508017441ac2a7017349497298688a"}, {"description": "A free-to-play interactive database of firearms with interactive teardowns and reassembly. Has DLC/ microtransactions.", "developers": [{"id": "521816777039151107", "name": "Noble Empire Corp."}], "executables": [{"is_launcher": false, "name": "wog/disasm.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d96f2675da85174c8d87e0f321ec8b9d", "id": "443159499512086539", "name": "World of Guns: Gun Disassembly", "publishers": [{"id": "521816777039151107", "name": "Noble Empire Corp."}], "splash": "fda91516c16ebae49123e92cff900a69", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "262410", "sku": "262410"}], "type": 1, "verify_key": "cfbb86c1915640462f9d4856461f9d32653f2a871bf83c093d3f93997b1e320a"}, {"description": "A procedurally generated space exploration game from Hello Games, the creators of Joe Danger.", "developers": [{"id": "521816694797369354", "name": "Hello Games"}], "executables": [{"is_launcher": false, "name": "nms.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a13ad44b102c5bb9ec91a72ec9c93099", "id": "443159611479031808", "name": "No Man's Sky", "publishers": [{"id": "521816694797369354", "name": "Hello Games"}], "splash": "1b0de773265cc85c8286187f43f82683", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "275850", "sku": "275850"}], "type": 1, "verify_key": "999d67a2127ff938e840b74ed850e29dde9e89ba07a9c5938114d865814699b7"}, {"description": "Ylands is a sandbox game by Bohemia Interactive.", "developers": [{"id": "521816510172233760", "name": "Bohemia Interactive Studio"}], "executables": [{"is_launcher": false, "name": "ylands.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e687ec03f54b632bbd3159187064e907", "id": "443159628185075722", "name": "Ylands", "publishers": [{"id": "521816659519078412", "name": "Bohemia Interactive"}, {"id": "521816510172233760", "name": "Bohemia Interactive Studio"}], "splash": "567854d48cd643fc417d582cd510e12c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "298610", "sku": "298610"}], "type": 1, "verify_key": "b24c750866d37f20827a9fefdd15f74625c131e58c9fa9e2eb7e1bbe9319d98e"}, {"description": "", "executables": [{"is_launcher": false, "name": "re7.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0b954aa7f4b795d6c33497c381e1883a", "id": "443160369192632330", "name": "RESIDENT EVIL 7 biohazard / BIOHAZARD 7 resident evil", "publishers": [{"id": "521816514106621968", "name": "CAPCOM Co., Ltd."}], "splash": "d3262adebd264a216ccb2c883fa594b4", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "418370", "sku": "418370"}], "type": 1, "verify_key": "0c66e4dbc82064b427ecedaf359ab3c67655c7234e303a35005a9c56e6217fc4"}, {"description": "The first turn-based BattleTech game for PC in over twenty years.", "developers": [{"id": "521816521249521698", "name": "Harebrained Schemes"}], "executables": [{"is_launcher": false, "name": "battletech.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9ae971e6baf8daaf45fe48cb84883a5e", "id": "443160562088673285", "name": "BATTLETECH", "publishers": [{"id": "521816521249521698", "name": "Harebrained Schemes"}, {"id": "521816521249521702", "name": "Paradox Interactive AB"}], "summary": "", "type": 1, "verify_key": "a381d7965d406eb6fec1d012e5a4ed98a79f4d237a28335d840dccbf629c5e6f"}, {"description": "", "developers": [{"id": "521816693719302146", "name": "distractionware"}], "executables": [{"is_launcher": false, "name": "superhexagon.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5b972b3b29ff62a27eba164efd5c7ad9", "id": "443161212969156608", "name": "Super Hexagon", "primary_sku_id": "494700199562838027", "publishers": [{"id": "521816693719302145", "name": "Terry Cavanagh"}, {"id": "521816693719302146", "name": "distractionware"}], "slug": "super-hexagon", "splash": "57935c6872e5fd3ce95ce9c53e249bca", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "494700199562838027", "sku": "494700199562838027"}, {"distributor": "steam", "id": "221640", "sku": "221640"}], "type": 1, "verify_key": "a3a2935af5ae0aafdb7c00303ca8ac05a82c3a14dcdea184bdb2e4fee3fa6e5a"}, {"description": "A sandbox game based on Ark: Survival Evolved developed by Snail Games (licensed by Studio Wildcard).", "developers": [{"id": "521816522302423050", "name": "Snail Games USA Inc."}], "executables": [{"is_launcher": false, "name": "pixark.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c0de7bef51e15778e64a185241e7911c", "id": "443165450424156160", "name": "PixARK", "publishers": [{"id": "521816522302423050", "name": "Snail Games USA Inc."}, {"id": "521816522302423051", "name": "Snail Games USA"}], "splash": "d1752f0980ec2a4730a69687cb576862", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "593600", "sku": "593600"}], "type": 1, "verify_key": "db6bf1f11f83804d49562464c3bb7b46655e961ef1c4890a0b97e10892a043dc"}, {"description": "Action-based, free-to-play MMO developed by Three Rings, makers of Puzzle Pirates and Bang Howdy. ", "developers": [{"id": "521816795250950146", "name": "Three Rings Design, Inc."}], "executables": [{"is_launcher": false, "name": "spiral knights/java_vm/bin/javaw.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "56528d84a3be11b750c671f2d7e9f4e2", "id": "443168429990477844", "name": "Spiral Knights", "publishers": [{"id": "521816507676885010", "name": "Sega"}], "splash": "d17a1ef94b609a2a4bd3cc15f3b9a9f8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "99900", "sku": "99900"}], "type": 1, "verify_key": "fe27cacd2a68fcb3e716ed85d5fd5a0a2b57d8aa8192dccba2167fa0cb332d3a"}, {"description": "A real-time, class-based strategy game, set in a cyberpunk open world.", "developers": [{"id": "521816704615972866", "name": "5 Lives Studios"}], "executables": [{"is_launcher": false, "name": "satellitereignwindows.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7d1b00a4c395c56405339fa0c065928a", "id": "443198577687134218", "name": "Satellite Reign", "publishers": [{"id": "521816704615972866", "name": "5 Lives Studios"}], "summary": "", "type": 1, "verify_key": "c3c28be321259630bb618d9b656f9daf5e661af6cf18d284528ff2e08dd3e43e"}, {"description": "", "developers": [{"id": "521816588169510930", "name": "Obsidian Entertainment"}], "executables": [{"is_launcher": false, "name": "pillarsofeternity.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f89146c539596cbc7dd704b274925f05", "id": "443198850119892992", "name": "Pillars of Eternity", "primary_sku_id": "491747381621293086", "publishers": [{"id": "521816588169510930", "name": "Obsidian Entertainment"}, {"id": "521816521249521702", "name": "Paradox Interactive AB"}], "slug": "pillars-of-eternity", "splash": "0256c10fbb75b17e604bc906cfbc5b59", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "491747381621293086", "sku": "491747381621293086"}, {"distributor": "steam", "id": "291650", "sku": "291650"}], "type": 1, "verify_key": "b30a6e3c7d2b2106e5661d39ff95630541a2f69868021b677649e8c2af260cf5"}, {"description": "Survival game based on the Conan universe.", "developers": [{"id": "521816542258790405", "name": "Funcom Productions A/S"}], "executables": [{"is_launcher": false, "name": "conansandbox.exe", "os": "win32"}, {"is_launcher": false, "name": "conansandbox_be.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2d738d2fa8f6d3ab5db02d75ccedfb21", "id": "443524051999260672", "name": "Conan Exiles", "publishers": [{"id": "521816606318264330", "name": "Funcom"}, {"id": "521816542258790405", "name": "Funcom Productions A/S"}], "splash": "817adefad0fa2370821607da24e4f647", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "440900", "sku": "440900"}], "type": 1, "verify_key": "22360b9d1aa906847f4b1b71ae71c07c2c0e902373587663850d7abb23e8f833"}, {"description": "TrackMania 2 gets a proper Stadium setting with this expansion.", "developers": [{"id": "521816570029146113", "name": "Nadeo"}], "executables": [{"is_launcher": false, "name": "maniaplanet_tmstadium/maniaplanet.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "61d855eff4190699da8c3e950b738f1e", "id": "444200321179451412", "name": "TrackMania\u00b2 Stadium", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}, {"id": "521816570029146113", "name": "Nadeo"}], "splash": "469f1c2468ba89ad65f00d56c22b6d6f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "232910", "sku": "232910"}], "type": 1, "verify_key": "9b1149c590d2a11e3f1879120f9228e33d836a4551e618b2f6c85dd69fdde7dc"}, {"aliases": ["Need For Speed 2016"], "description": "Need for Speed attempts to reboot the franchise with a focus on nighttime street races, multiplayer action, police chases, and new ways for players to configure and tune their cars.", "developers": [{"id": "521816785801052160", "name": "Ghost Games"}], "executables": [{"is_launcher": false, "name": "nfs16.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e5921759744d0bf4aa934bf429eb788c", "id": "444540143890726940", "name": "Need for Speed\u2122", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "summary": "", "third_party_skus": [{"distributor": "origin", "id": null, "sku": null}], "type": 1, "verify_key": "0c68c948d889958e2035d87301a0bff34c8fa0a38a74fb0b08732088d969322b"}, {"description": "Valve's online World War II infantry-based shooter gets remade in their Source engine, complete with updated visuals, sound design, and gameplay tweaks.", "developers": [{"id": "521816530393104394", "name": "Valve Corporation"}], "executables": [{"is_launcher": false, "name": "day of defeat source/hl2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "92b9c144c776a95dda6b15b15662c322", "id": "444720426934075393", "name": "Day of Defeat: Source", "publishers": [{"id": "521816608931446835", "name": "CyberFront Corporation"}], "splash": "b30083a63a2c06364502ccdcd4962017", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "300", "sku": "300"}], "type": 1, "verify_key": "947db18291db3f8dd6ebf068b6446d840b8e8dee51487edc03f71cc22eb389f5"}, {"description": "A party-based roguelike game with elements of 4X resource management and tower defense.", "developers": [{"id": "521816527343845459", "name": "Amplitude Studios"}], "executables": [{"is_launcher": false, "name": "dungeonoftheendless.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "940df9bdc80735755914ec167417fe47", "id": "444853958977126400", "name": "Dungeon of the Endless", "overlay": true, "publishers": [{"id": "521816527343845450", "name": "AMPLITUDE Studios"}], "splash": "bbfb79f3099fff739f6be1b5f67ff183", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "249050", "sku": "249050"}], "type": 1, "verify_key": "48988bde83029850dc6f7bbb5977800b0808408838cddeba357493181f1ff7fa"}, {"description": "Endless Legend is a fantasy-themed 4X strategy game from Amplitude Studios.", "developers": [{"id": "521816527343845459", "name": "Amplitude Studios"}], "executables": [{"is_launcher": false, "name": "endlesslegend.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "18acda825d0f42b7e0907ed241e27d02", "id": "445329750819602433", "name": "Endless Legend", "overlay": true, "publishers": [{"id": "521816527343845439", "name": "Iceberg Interactive"}, {"id": "521816527343845450", "name": "AMPLITUDE Studios"}], "splash": "6f9b6d77ebcc5bd5809b4581c508f570", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "289130", "sku": "289130"}], "type": 1, "verify_key": "aae67591a0c3cd02d55922cd2f263676a382c35bcac425ff3a2ff9690c1319ad"}, {"description": "A vertical shooter", "executables": [{"is_launcher": false, "name": "deep space waifu.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6fdbf6e9c0fdaa1e5c0919e36c91f7b3", "id": "445783564257067008", "name": "DEEP SPACE WAIFU", "publishers": [{"id": "521816704184090625", "name": "Neko Climax Studios"}], "splash": "7d0b838c9644b52a53701629ae39d1de", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "639790", "sku": "639790"}], "type": 1, "verify_key": "2ff194b9086a8520e8ff5c5559e24324cf3f8ad25f21b9fcba14db251b190cc9"}, {"description": "Surviving Mars lets the player take command of a Mars colonization mission, gathering resources and building their own Dome Cities.", "developers": [{"id": "521816701860577325", "name": "Haemimont Games AD"}], "executables": [{"is_launcher": false, "name": "marssteam.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1f7cb3ffe8771bc7797fd6aecd6f9aac", "id": "445996079352250368", "name": "Surviving Mars", "publishers": [{"id": "521816616602959882", "name": "Haemimont Games"}, {"id": "521816521249521702", "name": "Paradox Interactive AB"}], "splash": "b0e223bc2160f055ccee49ea547f8367", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "464920", "sku": "464920"}], "type": 1, "verify_key": "dd6360235aba8b1cce11f93e7867367973ab8df02400333cd00579ce04c687ac"}, {"aliases": ["Dragon Age: Inquisition"], "description": "Dragon Age: Inquisition is the third installment in the Dragon Age series of role-playing games developed by BioWare.", "developers": [{"id": "521816589570408449", "name": "BioWare"}], "executables": [{"is_launcher": false, "name": "dragonageinquisition.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a158334e8e46f8c8e369f8ffeea12710", "id": "446061700496621578", "name": "Dragon Age\u2122: Inquisition", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "summary": "", "third_party_skus": [{"distributor": "origin", "id": null, "sku": null}], "type": 1, "verify_key": "0b433447c7b577aa223a52933aadda31f69fb4ab033eb104ddb3be7d39c8fab9"}, {"aliases": ["Mass Effect: Andromeda"], "description": "Set in a galaxy far from the Milky Way, Mass Effect: Andromeda puts players in the role of a Pathfinder tasked with exploring new habitable worlds and investigating mysterious technology.", "developers": [{"id": "521816782479163392", "name": "BioWare Montreal"}], "executables": [{"is_launcher": false, "name": "masseffectandromeda.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "496157679603055c8036340e8c23e268", "id": "446061836807307301", "name": "Mass Effect\u2122: Andromeda", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "summary": "", "third_party_skus": [{"distributor": "origin", "id": null, "sku": null}], "type": 1, "verify_key": "373cd6cfb837de4887b4adb306c18b854921cc827c617838809bad82f3d71f9f"}, {"cover_image": "003ac668130865c43eb1eb8acc8f94c3", "description": "Crossfire is a free-to-play multiplayer first person shooter for PC. Players compete in different game modes to complete objectives and secure wins. The game has over 30 modes from traditional team matches to playing against mutants and Zombies, with over 1,000 different weapon types and skins.", "developers": [{"id": "521816563456802829", "name": "Smilegate"}], "executables": [{"is_launcher": false, "name": "crossfire.exe", "os": "win32"}], "flags": 0, "guild_id": "360821102580072449", "hook": true, "icon": "89bc82482d4f321ab8fae27247d54949", "id": "446061929283321856", "name": "CrossFire", "primary_sku_id": "446061929283321856", "publishers": [{"id": "521816563456802825", "name": "Smilegate West"}], "slug": "crossfire", "splash": "ab6d298619159f8408105b44d2932640", "summary": "", "type": 1, "verify_key": "765b5d7aa8390706820b490c9cdd8b6f5add5c69998da5e538a0184e2f518792"}, {"description": "", "executables": [{"is_launcher": false, "name": "toontown rewritten/ttrengine.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7ec7239de691802d9329a582667ef0d5", "id": "446062074842447909", "name": "Toontown Rewritten", "publishers": [{"id": "521816620771835953", "name": "The TTR Team"}], "summary": "", "type": 1, "verify_key": "b99b42d7c3af0a366ae7a506c0b0dfb07f9ea9c570d5208015843b6bc94e6ea1"}, {"aliases": ["Survarium-Steam"], "description": "A free-to-play MMO from a new studio, created by former developers of S.T.A.L.K.E.R.", "developers": [{"id": "521816619115085829", "name": "Vostok Games"}], "executables": [{"is_launcher": false, "name": "survarium.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4c75dda8f93149893ca8f8cd3f4144d8", "id": "446062275925770270", "name": "Survarium", "publishers": [{"id": "521816619115085829", "name": "Vostok Games"}], "summary": "", "type": 1, "verify_key": "1d238cad10af05041c0f0ec42e600e77d5fe3cfb09b8b730ae36cea719f9bbc4"}, {"aliases": ["Plants vs Zombies Garden Warfare 2"], "description": "Building on the first game, Plants vs. Zombies: Garden Warfare 2 features a single-player campaign and plants going on the offensive.", "developers": [{"id": "521816596633747478", "name": "PopCap Games, Inc."}], "executables": [{"is_launcher": false, "name": "gw2.main_win64_retail.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d6004e354a6dea58eb4f11d352462d21", "id": "446063035057045534", "name": "Plants vs Zombies GW2", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "summary": "", "type": 1, "verify_key": "99257f4d0f734fec738b8a230056dd368070b80a0642c291417a9672f5b4ca49"}, {"aliases": ["Project64 version 2.3.0.210"], "description": "", "executables": [{"is_launcher": false, "name": "project64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "98bfb7219ade81d2f64bd4eb29c0d026", "id": "446063198198693898", "name": "Project64", "summary": "", "type": 1, "verify_key": "4decd075e159bb40f347f4e777fad9b8516a7fdfad3a05bfbfefdda3b3a1ed7f"}, {"aliases": ["Armored Warfare MyCom"], "description": "Armored Warfare is a free-to-play, modern military, tactical MMO from Obsidian Entertainment.", "developers": [{"id": "521816588169510930", "name": "Obsidian Entertainment"}], "executables": [{"is_launcher": false, "name": "armoredwarfare.exe", "os": "win32"}], "flags": 0, "guild_id": "301850249977266178", "hook": true, "icon": "f0f574d82ed29d909ce5e3959b9b2549", "id": "446063355594145823", "name": "Armored Warfare", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816651797233664", "name": "Mail.Ru"}, {"id": "521816512085098549", "name": "My.com"}, {"id": "521816750296137754", "name": "My.com B.V."}], "summary": "", "type": 1, "verify_key": "1b174900944254d9747acbc232b908e6bf3ab56259586467f2a27095e45a83ca"}, {"description": "Play as The Expendables in this free platforming action game.", "developers": [{"id": "521816734374559754", "name": "Free Lives"}], "executables": [{"is_launcher": false, "name": "expendabros.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a9f2601b34f762d8a777d24903b9fbaf", "id": "446069736250277888", "name": "The Expendabros", "publishers": [{"id": "521816510730338331", "name": "Devolver Digital"}], "splash": "6c2769cdd1b96a5b442cc7938aaf3f5e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "312990", "sku": "312990"}], "type": 1, "verify_key": "d2b401a050b473856a85e6f6af01e7d47a8dad5e4b3984841f2ec77aef1e8666"}, {"description": "While controlling each individual limb, a series of muscular, speedo-clad men with swinging packages attempt to reach the highest point possible by climbing atop one another.", "developers": [{"id": "521816569601458176", "name": "Stegersaurus Software Inc."}], "executables": [{"is_launcher": false, "name": "mountyourfriends.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9f39d0e0685ba0033e3b0d0b88cf9726", "id": "446105070057029663", "name": "Mount Your Friends", "publishers": [{"id": "521816569601458176", "name": "Stegersaurus Software Inc."}], "splash": "f5d4a6d32060f63406b2fcf0fb548b42", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "296470", "sku": "296470"}], "type": 1, "verify_key": "1a7a06980730cbbcd70247eeaa8af4eb9f82139731add739a3751dd24e60559e"}, {"description": "The sequel to the racing simulator Project CARS", "developers": [{"id": "521816652745277463", "name": "Slightly Mad Studios"}], "executables": [{"is_launcher": false, "name": "pcars2avx.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fe620094c42ba04931eaa27c8e88d5a6", "id": "446380370733039616", "name": "Project CARS 2", "publishers": [{"id": "521816537653444610", "name": "Bandai Namco Entertainment"}, {"id": "521816652745277463", "name": "Slightly Mad Studios"}], "splash": "7038bce6cf56320ee4867723dfcdd4c5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "378860", "sku": "378860"}], "type": 1, "verify_key": "0dcbf1ef9f911328d6984ee99157ea4c3311aff675d214fe8a52cba73bace7ec"}, {"description": "", "executables": [{"is_launcher": false, "name": "shakes and fidget.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a53209550b9ca66f162ac0f531906ea0", "id": "447038538383622145", "name": "Shakes and Fidget", "publishers": [{"id": "521816664199921685", "name": "Playa Games GmbH"}], "splash": "5940c054765e5091826e3ffbe25e18f2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "438040", "sku": "438040"}], "type": 1, "verify_key": "c330ad73af8f51fb7b5ae5a68d238e705627e889f57ea4036d42e04090781720"}, {"description": "Originally a flash game that has now been released on mobile platforms. SAS: Zombie Assault 4 is an action game by ninja kiwi.", "executables": [{"is_launcher": false, "name": "sas4-win.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2bf57ca7872ce31db636ebdec3750521", "id": "447184346252836864", "name": "SAS: Zombie Assault 4", "publishers": [{"id": "521816733728768032", "name": "Ninja Kiwi"}], "splash": "d2b366f03abee4d1123ca73608b1ecfe", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "678800", "sku": "678800"}], "type": 1, "verify_key": "66add80c341a8b38c58f7cf41ae88f0c51d128d93a8daa9aae1e9bf28fd3012a"}, {"description": "Aliens, robots, and futuristic cowboys collide in this MOBA-inspired 2D arena platformer inspired by late-80s and early-90s cartoons.", "developers": [{"id": "521816503960600576", "name": "Ronimo Games"}], "executables": [{"is_launcher": false, "name": "awesomenauts.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d3c186528a69ef8af5dc659e6b008283", "id": "447488337519968257", "name": "Awesomenauts", "publishers": [{"id": "521816503465803791", "name": "dtp entertainment AG"}], "splash": "bfe38c27606fe8da6bba2b610c98bc60", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "204300", "sku": "204300"}], "type": 1, "verify_key": "3a933ba34f7157fa29cf9c344b9c60bc8060b567f7ba89b46752888d484d115b"}, {"description": "The precursor to numerous surreal and psychological-horror RPGs, Yume Nikki is a freeware adventure game, developed with the RPG Maker series of tools, where players explore a troubled recluse's bleak and disturbing dreams.", "developers": [{"id": "521816582570377226", "name": "Kikiyama"}], "executables": [{"is_launcher": false, "name": "yumenikki/rpg_rt.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f0bc8441786ced60b066e1ff67233238", "id": "447509870510473216", "name": "Yume Nikki", "publishers": [{"id": "521816582570377226", "name": "Kikiyama"}], "splash": "db74bdc072d9f06ae66a7c90b563c1fd", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "650700", "sku": "650700"}], "type": 1, "verify_key": "16cb1fac203703caed57df7a3ab3131c30b1ccca391a2410c03568488e6649b6"}, {"description": "A multiplayer first and third person shooter set during the Napoleonic era. Battles with over 150 players per server on both land, sea and the coast take place in the game.", "developers": [{"id": "521816752212934689", "name": "Anvil Game Studios"}], "executables": [{"is_launcher": false, "name": "holdfast naw.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "16c90580db9e7f0acb2b480aeb908224", "id": "447728433037049876", "name": "Holdfast: Nations At War", "publishers": [{"id": "521816752212934689", "name": "Anvil Game Studios"}], "splash": "75275f644148c5c9cac10761011f82b0", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "589290", "sku": "589290"}], "type": 1, "verify_key": "b71c389d49bbeb14c269740ca63bbf06937a17cd5700a59dbca6687e065115ee"}, {"description": "The third entry in the Learn to Fly series.", "developers": [{"id": "521816546499362820", "name": "Light Bringer Games inc."}], "executables": [{"is_launcher": false, "name": "learn to fly 3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7639a13d342af4ddc33888f9139edfdd", "id": "447743861549432833", "name": "Learn to Fly 3", "publishers": [{"id": "521816546499362820", "name": "Light Bringer Games inc."}], "splash": "1a941b015e4758e0906751f74136b457", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "589870", "sku": "589870"}], "type": 1, "verify_key": "5a30b49c2428f45f70208ecf341c6ffa77dfa839c871ae7b2884114516ed1f46"}, {"description": "Stories: The Path of Destinies tells the tale of Reynardo, the last line of defense in a war against an invading armada.", "developers": [{"id": "521816671434833942", "name": "Spearhead Games"}], "executables": [{"is_launcher": false, "name": "stories.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "328365be30604c140288b86adff43426", "id": "448044587580260363", "name": "Stories: The Path of Destinies", "publishers": [{"id": "521816671434833942", "name": "Spearhead Games"}], "splash": "3cd73bda260d95ea214af88f84953f76", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "439190", "sku": "439190"}], "type": 1, "verify_key": "68ccefcdb3a43dc82732d0fa86fc8274453a4917cbd71f42a55799ebaac40f4d"}, {"description": "A psychological horror game from Bloober Team SA.", "developers": [{"id": "521816682155737092", "name": "Bloober Team"}], "executables": [{"is_launcher": false, "name": "layers of fear.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "230729beb1a8c325a2af89ebc16c7458", "id": "448120144775086080", "name": "Layers of Fear", "publishers": [{"id": "521816682155737090", "name": "Bloober Team SA"}, {"id": "521816511178997817", "name": "Aspyr Media, Inc."}], "splash": "9ab2776cb9d61838f7d5e446a0a4505d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "391720", "sku": "391720"}], "type": 1, "verify_key": "18098924023ab3c31fed2042518ac1a416010a6a23aeeb8c3bb76e2f6888f30e"}, {"description": "A sci-fi MMORPG developed by Cryptic Studios and Perpetual Entertainment which allows players to fight amongst the ranks of Starfleet, join the Klingon Empire, or rebuild a Romulan homeworld.", "developers": [{"id": "521816694352510976", "name": "Cryptic Studios"}], "executables": [{"is_launcher": false, "name": "star trek online.exe", "os": "win32"}, {"is_launcher": false, "name": "star trek online/live/gameclient.exe", "os": "win32"}, {"is_launcher": false, "name": "star trek online/live/x64/gameclient.exe", "os": "win32"}, {"is_launcher": false, "name": "star trek online/live/x86/gameclient.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4b3bfeedad2d43b64dcee75b625539b4", "id": "448384255131779073", "name": "Star Trek Online", "publishers": [{"id": "521816509673242636", "name": "Perfect World Entertainment"}], "splash": "0d19bd6538d773e6113c157607cef913", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "9900", "sku": "9900"}], "type": 1, "verify_key": "1dc343bde93eb886cb8fbf3b9962f9df6864cbf1b0897b60c3ce919693131028"}, {"bot_public": false, "bot_require_code_grant": false, "cover_image": "b6016680ead9cd491c2c871e262e7419", "description": "Minion Masters is a fast-paced online 1 vs 1 and 2 vs 2 Minion Battler.", "developers": [{"id": "521816739286351893", "name": "BetaDwarf"}], "executables": [{"is_launcher": false, "name": "minionmasters.exe", "os": "win32"}], "flags": 0, "guild_id": "255388470762143745", "hook": true, "icon": "dd42ada1fbac33582f3c947c5ae6f0be", "id": "448417850466762753", "name": "Minion Masters", "primary_sku_id": "488607666231443456", "publishers": [{"id": "521816739286351893", "name": "BetaDwarf"}], "slug": "minion-masters", "splash": "9da25a5233db55a3a3bb292b76f33f6f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "489520", "sku": "489520"}, {"distributor": "discord", "id": "488607666231443456", "sku": "488607666231443456"}], "type": 1, "verify_key": "bb52fea7468a28f71baba019c792496ec30fae0db7fcf32a1d3380e7f8688436"}, {"aliases": ["Warhammer 40K: Dawn of War Soulstorm"], "description": "Soulstorm, developed by Iron Lore, is the third and final expansion pack to Relic's hit real-time strategy game, Warhammer 40,000: Dawn of War. The Sisters of Battle and the Dark Eldar join the fray as you fight to dominate the Kaurava system.", "developers": [{"id": "521816593798397970", "name": "Relic Entertainment"}], "executables": [{"is_launcher": false, "name": "soulstorm.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2add8673c6c84eea86b3796638534316", "id": "448448339386695690", "name": "Warhammer 40,000: Dawn of War - Soulstorm", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816593798397970", "name": "Relic Entertainment"}, {"id": "521816550596935692", "name": "THQ"}], "splash": "49d9e2e0cc0e60e1deddd7166d8ba1ba", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "9450", "sku": "9450"}], "type": 1, "verify_key": "0a17b3cfb7589d4c5ccf908fec972b2a02ececc5a0f10495a079a043bf25a6e9"}, {"description": "A sandbox game that allows players to pit huge armies of individual units against each other in battles.", "developers": [{"id": "521816598646882307", "name": "Brilliant Game Studios"}], "executables": [{"is_launcher": false, "name": "ultimate epic battle simulator/uebs.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "14845047da5192eb38dd33f7c87063e4", "id": "448537306345898014", "name": "Ultimate Epic Battle Simulator", "publishers": [{"id": "521816598646882307", "name": "Brilliant Game Studios"}], "splash": "5f40a115119e646ea37df8a59a23a611", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "616560", "sku": "616560"}], "type": 1, "verify_key": "63b7fac4b12893d8faa0761596961c8b764db5ca5ffed31d7dc39f3b81176eeb"}, {"description": "TerraTech is a physics-based vehicle construction and exploration sandbox game. You are an intergalactic prospector, it's your job to travel to alien worlds, gather resources and send them home to get paid.", "developers": [{"id": "521816738807939113", "name": "Payload Studios"}], "executables": [{"is_launcher": false, "name": "terratechwin32.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "dab25c5db315d4fa4d2961cc9d12e53c", "id": "448560544778289152", "name": "TerraTech", "publishers": [{"id": "521816738807939113", "name": "Payload Studios"}], "splash": "59d5e59bcf875fd74b332f3963cbfb23", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "285920", "sku": "285920"}], "type": 1, "verify_key": "e136a72158b0ec6d0b9d2fbd3b63d6a069139651e6acc35f6e16896f73b41cc0"}, {"description": "", "executables": [{"is_launcher": false, "name": "airmech.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "20c2dfbd9b4146f22a7145496f1a74b7", "id": "448622851386376202", "name": "AirMech Strike", "publishers": [{"id": "521816775977861121", "name": "Carbon Games"}], "splash": "3f318fad874b19c1052d3cd5206edeeb", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "206500", "sku": "206500"}], "type": 1, "verify_key": "a0b329202724d975bc53c4a631a780f3cc7cfdb4c7bf408fd29fe9aab9f3ec98"}, {"description": "", "executables": [{"is_launcher": false, "name": "mudrunner.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "aac5aa5f8f2d9d25dcbe61309c29dda9", "id": "448910307969204236", "name": "Spintires: MudRunner", "publishers": [{"id": "521816571581038634", "name": "Saber Interactive"}], "splash": "3d440263ee3b692089f5b85638e90970", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "675010", "sku": "675010"}], "type": 1, "verify_key": "7332ea1b236c72bdf17f5652da2b45b2829f987ddd23b7e24d87aaccab5d1375"}, {"description": "A freeware top-down co-operative shooter where a squad of marines must investigate and prevent the spread of a rampant alien infestation. It was originally a total conversion for Unreal Tournament 2004 before its team, hired by Valve for other projects, completed it as a side-project.", "developers": [{"id": "521816530393104394", "name": "Valve Corporation"}], "executables": [{"is_launcher": false, "name": "alien swarm/swarm.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7d33eb629124122694f4bf19077f8b4a", "id": "449531408730423296", "name": "Alien Swarm", "publishers": [{"id": "521816507102003200", "name": "Valve"}, {"id": "521816530393104394", "name": "Valve Corporation"}], "splash": "bff03d3b394eaa40e600c0f212dd5b4e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "630", "sku": "630"}], "type": 1, "verify_key": "096e1dbefb43a947c649a0869951a234a07000542c80dc38229e9c17babb937d"}, {"description": "A terminal-based hacking game, following the story of a recently deceased hacker named Bit.", "developers": [{"id": "521816590673641485", "name": "Team Fractal Alligator"}], "executables": [{"is_launcher": false, "name": "hacknet.exe", "os": "win32"}], "flags": 0, "guild_id": "307359835815411712", "hook": true, "icon": "9b126b01c85bf9572c09d0c0819ac9b1", "id": "449639683740270612", "name": "Hacknet", "primary_sku_id": "449639683740270612", "publishers": [{"id": "521816590673641485", "name": "Team Fractal Alligator"}, {"id": "521816591139078164", "name": "Surprise Attack Games"}], "slug": "hacknet", "splash": "99bfe1c9cda59672e26e7d53a220cf2d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "365450", "sku": "365450"}, {"distributor": "discord", "id": "449639683740270612", "sku": "449639683740270612"}], "type": 1, "verify_key": "1cd79e77caac931a2bfac01b05e46943b78d4357d0bd21b611b50aaf0be74ab6"}, {"description": "The spiritual successor to Quake III Arena, Quake Champions brings a new take to the arena-based first-person shooter with unique characters (each with their own attributes and special abilities). It is currently in development, with a planned free-to-play release sometime in 2018.", "developers": [{"id": "521816563024920606", "name": "id Software"}], "executables": [{"is_launcher": false, "name": "quakechampions.exe", "os": "win32"}], "flags": 0, "guild_id": "133980319010258944", "hook": true, "icon": "559fe40f0dfc5510ac4a226988dee2c7", "id": "449682899596214283", "name": "Quake Champions", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816563024920606", "name": "id Software"}, {"id": "521816500508819469", "name": "Bethesda Softworks"}], "splash": "9a7d37dc267912a6555a03c7e24bebdf", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "611500", "sku": "611500"}], "type": 1, "verify_key": "227a1fab4ea21cd9e8e90d49b8f7a2bf528dc24b1d56be632750b9d569d079ee"}, {"description": "Iron Snout is a single-screen endless beat 'em up game from developer SnoutUp.", "developers": [{"id": "521816533270396930", "name": "SnoutUP"}], "executables": [{"is_launcher": false, "name": "ironsnout.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b532978ed0d0641a2d1d6baf33fce4a1", "id": "449684687011708928", "name": "Iron Snout", "publishers": [{"id": "521816533270396930", "name": "SnoutUP"}], "splash": "010ed4765fc4f4776f50309877012437", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "424280", "sku": "424280"}], "type": 1, "verify_key": "653ac53bd2949cc296e2dc16689d4a285399ecf20627bc8c83f79027e72c105e"}, {"aliases": ["Dark Souls"], "description": "", "executables": [{"is_launcher": false, "name": "darksoulsremastered.exe", "os": "win32"}, {"is_launcher": false, "name": "darksouls.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "91714be659c1549773ad86618cff4607", "id": "449738622619353088", "name": "DARK SOULS\u2122: REMASTERED", "publishers": [{"id": "521816555584225281", "name": "QLOC"}], "splash": "8f84286956ead7dee34922b82e058e68", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "570940", "sku": "570940"}], "type": 1, "verify_key": "94da02de1c193bd01263b4455c751f6f0b7ef7ace9c8adc64660852025025d09"}, {"description": "Raft is an indie ocean navigation survival game.", "developers": [{"id": "521816623552921602", "name": "Redbeet Interactive"}], "executables": [{"is_launcher": false, "name": "raft.exe", "os": "win32"}], "flags": 0, "guild_id": "446658603873730611", "hook": true, "icon": "aa3b7a0ded0341cfbfd463d349e06add", "id": "449806905901056012", "name": "Raft", "publishers": [{"id": "521816623552921602", "name": "Redbeet Interactive"}, {"id": "521816623552921604", "name": "Axolot Games"}], "splash": "b28637baca23553de6d9747f8a1110ad", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "648800", "sku": "648800"}], "type": 1, "verify_key": "66e7b0d12109b3528b90587c299837dd307a2c054844c3f5bca3d8e98b0168b6"}, {"description": "Dungreed is a 2D side-scrolling action game with 2D Rogue-LITE elements.", "executables": [{"is_launcher": false, "name": "dungreed.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ed1b5bb47c7be46aff6a0b34cda8ef4f", "id": "449885746799575040", "name": "Dungreed", "publishers": [{"id": "521816760949669900", "name": "TEAM HORAY"}], "splash": "fa37970af8dc5f36fa67f64332d3bb7d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "753420", "sku": "753420"}], "type": 1, "verify_key": "8a1f006b50bb8cb9135a42c38bdc2562a9545930b74eb04cac029676516a0e04"}, {"aliases": ["Grand Theft Auto 4"], "description": "Take on the role of Niko Bellic, a Serbian immigrant who comes to the US at his cousin Roman's request, to find a better life, search for \"that special someone\" and participate in lawless activities in an upgraded generation of Liberty City.", "developers": [{"id": "521816560537567261", "name": "Rockstar North"}], "executables": [{"is_launcher": false, "name": "gtaiv.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d6d6c02c19b0ae83f62265476634ff9d", "id": "450005834672373760", "name": "Grand Theft Auto IV", "publishers": [{"id": "521816560537567257", "name": "Rockstar Games"}, {"id": "521816560537567261", "name": "Rockstar North"}], "splash": "df0e8cce8495b5c314f14e7bcebd3b6a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "12210", "sku": "12210"}], "type": 1, "verify_key": "2e332f9356177e8966628650e73b13b6fdade571b83e3c7a818b14d108696eb0"}, {"description": "A Half-Life 2 co-operative mod created on the Source Engine.", "executables": [{"is_launcher": false, "name": "synergy.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "534264ce3efad15b8214ce721eb9e57b", "id": "450021409700446208", "name": "Synergy", "publishers": [{"id": "521816530393104394", "name": "Valve Corporation"}, {"id": "521816731153596450", "name": "Synergy Team"}], "splash": "63b229c9c83842367866b8726fd261aa", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "17520", "sku": "17520"}], "type": 1, "verify_key": "0eb0d22ba0f08a29d1363d1269567f517f770616bf63996e6f4fe9ac0ca1be0e"}, {"description": "Wizard of Legend is a crowdfunded 2D dungeon crawler.", "developers": [{"id": "521816713294118914", "name": "Contingent99"}], "executables": [{"is_launcher": false, "name": "wizardoflegend.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ad36692b48c00671da441039aa8155ca", "id": "450024058348634112", "name": "Wizard of Legend", "publishers": [{"id": "521816713294118914", "name": "Contingent99"}], "splash": "4dadac1fdddf38de242c37d100f33b2d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "445980", "sku": "445980"}], "type": 1, "verify_key": "8f7005296bde2e871392e026dedc17995ffc8c998388a06507a7c136c4ce18a9"}, {"aliases": ["KRITIKA"], "description": "Kritika Online is an action MMO brawler built around rapid questing and intense combat.", "executables": [{"is_launcher": false, "name": "kritika_client.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1ccff2f26a9755b52988505164bae466", "id": "450129940051001354", "name": "Kritika Online", "publishers": [{"id": "521816599607508995", "name": "ALLM"}], "splash": "ee9b332a762f0bbfe1ec89bcf5b9c0dc", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "439350", "sku": "439350"}], "type": 1, "verify_key": "810d9cdc50e0c48a03b8291b8b6c6310fc9f1c02665ad4a2592ec2c1a29f5656"}, {"description": "In a futuristic totalitarian dystopia, a master courier (in a group of renegade \"runners\") investigates a conspiracy, while outrunning the deadly government military, in this parkour-inspired first-person action game.", "developers": [{"id": "521816575481872391", "name": "DICE"}], "executables": [{"is_launcher": false, "name": "mirrorsedge.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1bdcd02d48972403a7f61e86cef5b1d0", "id": "450145899063017492", "name": "Mirror's Edge", "publishers": [{"id": "521816538202767363", "name": "EA Games"}], "splash": "718f683a7e8ae4f19645bfe846f11768", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "17410", "sku": "17410"}], "type": 1, "verify_key": "d28535b9a1510c88de2724ae6a074ca6ead1b2a605c4241fb467b1a335c798b7"}, {"description": "The second installment in the Car Mechanic Simulator franchise.", "developers": [{"id": "521816512512786456", "name": "Red Dot Games"}], "executables": [{"is_launcher": false, "name": "cms2015.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "19f4ee852e5c187f0d0498e67524b42e", "id": "450273108859813888", "name": "Car Mechanic Simulator 2015", "publishers": [{"id": "521816512512786456", "name": "Red Dot Games"}, {"id": "521816512516980736", "name": "PlayWay"}], "splash": "c99045cb7463f53182aa52fe78e3da60", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "320300", "sku": "320300"}], "type": 1, "verify_key": "1e455850e7b01e5d63fb2953098fc0d5c87ba0ef031f80b78de5aa03b697ef34"}, {"description": "A multiplayer third-person shooter with free style combat using slow-mo, dodge mechanic slides, dives and flips.", "developers": [{"id": "521816635749695510", "name": "Double Action Factory"}], "executables": [{"is_launcher": false, "name": "double action/hl2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "509528dbdeded1eb4ee771c7c0708b63", "id": "450292948911915008", "name": "Double Action: Boogaloo", "publishers": [{"id": "521816635749695510", "name": "Double Action Factory"}], "splash": "8a9bc39ae1a02d87725ad3117e62fe20", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "317360", "sku": "317360"}], "type": 1, "verify_key": "b76e37dc6f7d1da88233b1aeca9d8fddef1700e70eee4a36e08adc38bd9ec7a8"}, {"aliases": ["Star Wars Knights Of The Old Republic"], "description": "", "developers": [{"id": "521816589570408449", "name": "BioWare"}], "executables": [{"is_launcher": false, "name": "swkotor.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5ac558a29b18fa44070a787879b93493", "id": "450293931301666826", "name": "STAR WARS\u2122: Knights of the Old Republic\u2122", "primary_sku_id": "450293931301666826", "publishers": [{"id": "521816522977574923", "name": "LucasArts Entertainment Company LLC"}], "slug": "star-wars-tm-knights-of-the-old-republic-tm", "splash": "177ed6c1384ce828995d24721eb2b7e3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "32370", "sku": "32370"}], "type": 1, "verify_key": "d9ff7060499a5a3d84d02caed7d55e4eb6fb2047724a10c159079bcaa519226e"}, {"description": "The Stanley Parable is an abstract, psychological, dark and humorous meta-narrative that attempts to make its choices void, journey paradoxical and generate discussion about storytelling in video games.", "developers": [{"id": "521816585602859014", "name": "Galactic Cafe"}], "executables": [{"is_launcher": false, "name": "the stanley parable/stanley.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "502f04b1d9e8c3a127da298452db6f96", "id": "450401603669721089", "name": "The Stanley Parable", "publishers": [{"id": "521816585602859014", "name": "Galactic Cafe"}], "splash": "49aefb1f79bd345e1aa62bae96a87576", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "221910", "sku": "221910"}], "type": 1, "verify_key": "2ad9fdef96da71c39578c2788b9909b922a6abae754c96b8933a9c275992cc38"}, {"bot_public": true, "bot_require_code_grant": false, "description": "", "developers": [{"id": "521816588169510930", "name": "Obsidian Entertainment"}], "executables": [{"is_launcher": false, "name": "tyranny.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c8c10659f735dd6e7563ebbed483665d", "id": "450668558465368074", "name": "Tyranny", "primary_sku_id": "491805220192518146", "publishers": [{"id": "521816588169510930", "name": "Obsidian Entertainment"}, {"id": "521816521249521702", "name": "Paradox Interactive AB"}], "slug": "tyranny", "splash": "ed65e97557d94b3464886eba43edbc7e", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "491805220192518146", "sku": "491805220192518146"}, {"distributor": "steam", "id": "362960", "sku": "362960"}], "type": 1, "verify_key": "ca5593a268bc0d7a8d48f3af246163383f675a9421d53182020102f0094dbb05"}, {"description": "Empyrion is a 3D open world, space survival adventure game.", "executables": [{"is_launcher": false, "name": "empyrion - galactic survival/empyrion.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6c230e66ba5f28fd7e553dfdb741c07f", "id": "450804667748843520", "name": "Empyrion - Galactic Survival", "publishers": [{"id": "521816588601786399", "name": "Eleon Game Studios"}], "splash": "868b9a33113eff8231860f28b159ca65", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "383120", "sku": "383120"}], "type": 1, "verify_key": "caf6f2859689a569dcd9945c21506224e323502e0591e80170e5eef0c04b177e"}, {"description": "Bless Online is a high fantasy MMORPG involving the conquering of dungeons, the taming of creatures and skirmishes between realms.", "developers": [{"id": "521816598646882305", "name": "NEOWIZ BLESS STUDIO"}], "executables": [{"is_launcher": false, "name": "bless online/binaries/win64/bless.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "bc772e5cbdc678d3137476b09ab2de7c", "id": "451132630390538270", "name": "Bless Online", "publishers": [{"id": "521816503465803779", "name": "Neowiz Games"}, {"id": "521816598646882305", "name": "NEOWIZ BLESS STUDIO"}], "splash": "6aaf09ae793cedbfe8bdc5aad6fce65b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "681660", "sku": "681660"}], "type": 1, "verify_key": "ab33aedb5cfe1773fd642e31e9b6a886cc1bf2b93733d46b7cdd2ab4d6815dc4"}, {"description": "The bombs are about to hit and there are only 60 seconds to get ready. Then it's time to manage food, water, and sanity from inside a bunker.", "developers": [{"id": "521816551054376972", "name": "Robot Gentleman Studios"}], "executables": [{"is_launcher": false, "name": "60seconds.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2373b66b5bf3279b7d7ebfb236707e0d", "id": "451336909831012383", "name": "60 Seconds!", "publishers": [{"id": "521816551054376971", "name": "Robot Gentleman"}, {"id": "521816551054376972", "name": "Robot Gentleman Studios"}], "splash": "33494a976312121df4b277c5fffbefe8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "368360", "sku": "368360"}], "type": 1, "verify_key": "8ac6463c6bf9ec66c6e752e817abdf9a652073f5b1dc250c32aea774411a0403"}, {"description": "The Escapists is a game developed by Mouldy Toof Studios that showcases prison life.", "developers": [{"id": "521816796907700225", "name": "Mouldy Toof Studios"}], "executables": [{"is_launcher": false, "name": "theescapists.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a4275235d0191f9e59b47c3ae5c2b7bb", "id": "451429730416197669", "name": "The Escapists", "publishers": [{"id": "521816571103019015", "name": "Team17 Software Limited"}], "splash": "3a406bd8636ac66779c1f9f37a8aefb0", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "298630", "sku": "298630"}], "type": 1, "verify_key": "1fe962a87b2d989a987f002e29b1fd11c03aadd8257cb6790f6c12f953221cab"}, {"description": "The first game from Phoenix Labs.", "developers": [{"id": "521816674534555661", "name": "Phoenix Labs"}], "executables": [{"is_launcher": false, "name": "dauntless-win64-shipping.exe", "os": "win32"}], "flags": 0, "guild_id": "254109857819525132", "hook": true, "icon": "92f3faaf19598bc89b9c6d73e26ffe5c", "id": "451468933057347603", "name": "Dauntless", "publishers": [{"id": "521816674534555658", "name": "Nom de votre soci\u00e9t\u00e9"}, {"id": "521816674534555661", "name": "Phoenix Labs"}, {"id": "521816674534555663", "name": "Nombre de su organizaci\u00f3n"}, {"id": "521816674534555665", "name": "Ihr Firmenname"}], "summary": "", "type": 1, "verify_key": "98fd8a3fb784f4d44632475796eb6ef78777d8d91cc8e047830e1c237dd28092"}, {"description": "", "executables": [{"is_launcher": false, "name": "daorigins.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3bf7b03128d756d9e00f3f3f98c9d1b2", "id": "451538960305618952", "name": "Dragon Age: Origins - Ultimate Edition", "publishers": [{"id": "521816589570408449", "name": "BioWare"}], "splash": "8877a70db22d7cd5f1062b1772dac984", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "47810", "sku": "47810"}], "type": 1, "verify_key": "fd7d13c33e0200454f74faac15b6b516ecbe72767ad3d41270807ecf3f3b71d4"}, {"description": "The first entry in the spin-off series of Total War takes a more focused approach on the events at the end of the 9th century in England.", "developers": [{"id": "521816720503996437", "name": "The Creative Assembly"}], "executables": [{"is_launcher": false, "name": "total war saga thrones of britannia/thrones.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b1c6d8e49fade9b2b721f3b52f49d54b", "id": "451539017381576704", "name": "Total War Saga: Thrones of Britannia", "publishers": [{"id": "521816568473059338", "name": "Creative Assembly"}, {"id": "521816507676885010", "name": "Sega"}], "splash": "26d04af5dff21db686a153bee8c0ee51", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "712100", "sku": "712100"}], "type": 1, "verify_key": "cf7cb4e549f2a405cf869496859ef2672cb8cb3bf4d0b04f66709fcaee9255ef"}, {"description": "", "executables": [{"is_launcher": false, "name": "okami.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "808af4bdee8c37b6d746b0162fe0c9b6", "id": "451539083966283776", "name": "OKAMI HD / \u5927\u795e \u7d76\u666f\u7248", "publishers": [{"id": "521816514106621968", "name": "CAPCOM Co., Ltd."}], "splash": "437a635baa7b75f7c36a6b100327b3b4", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "587620", "sku": "587620"}], "type": 1, "verify_key": "07c4e29c3e9e736492d2b51ce31c8eeb78d9947da7337f7c82c9b6836b446f14"}, {"description": "The world's greatest communism simulator!", "developers": [{"id": "521816534881009686", "name": "Hyper Hippo Productions Ltd."}], "executables": [{"is_launcher": false, "name": "adventure-communist.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "346c0ecfd70a3401480d00a9d95b3b68", "id": "451539129973604352", "name": "AdVenture Communist", "publishers": [{"id": "521816534881009686", "name": "Hyper Hippo Productions Ltd."}], "splash": "68862c7ae4cedbc12c77eb56f29c8057", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "462930", "sku": "462930"}], "type": 1, "verify_key": "7bbb4fdcaff8469878524aadc294daa6023c8b5a138bc01c5d68d7625fed1e47"}, {"description": "The third entry in the casual poker series. The first game in the series to feature online multiplayer.", "developers": [{"id": "521816720503996436", "name": "YoudaGames"}], "executables": [{"is_launcher": false, "name": "gop3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "85679de5c771713b4e9fcee8caa42e72", "id": "451539151678865409", "name": "Governor of Poker 3", "publishers": [{"id": "521816720046948395", "name": "OrangeGames"}], "splash": "c9243342cf5b0bd6399b04787c9431aa", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "436150", "sku": "436150"}], "type": 1, "verify_key": "ed6cae41688e3c9f6320f9f21e0edc16f7e93e7cd87d80540c27a0a53147dac3"}, {"description": "Worms Revolution is the next game in the Worms franchise from Team 17 Software. Built entirely from scratch, Revolution will return to the series' 2D roots.", "developers": [{"id": "521816499464306690", "name": "WB Games"}], "executables": [{"is_launcher": false, "name": "wormsrevolution.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e88e41364656b207d25aa9c7bba98ef7", "id": "451539172763762688", "name": "Worms Revolution", "publishers": [{"id": "521816610600779776", "name": "Team17 Digital Ltd"}, {"id": "521816571103019015", "name": "Team17 Software Limited"}], "splash": "ffb6aea3081c5ae96f4ef6134df0efd7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "200170", "sku": "200170"}], "type": 1, "verify_key": "a5445521548f83c061678de8b99618739d5973736ca094591b31d1933d7bbe6a"}, {"description": "L.A. Noire is a detective thriller developed by Team Bondi in Australia and published by Rockstar Games.", "developers": [{"id": "521816636177776645", "name": "Team Bondi"}], "executables": [{"is_launcher": false, "name": "lanoire.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f5457902123082280b0146c4772be6fe", "id": "451539180682739732", "name": "L.A. Noire", "publishers": [{"id": "521816560537567257", "name": "Rockstar Games"}, {"id": "521816636177776645", "name": "Team Bondi"}], "splash": "0c6e6d73111bccc8d2006f6f688bc7b9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "110800", "sku": "110800"}], "type": 1, "verify_key": "c781b74915e4ce41748158eb47c22d5951e8d5e15108e1e42201bbe6112834de"}, {"aliases": ["Morrowind Launcher"], "description": "The third entry in Bethesda's series of expansive first-person role-playing games. Arriving on the island of Vvardenfell as a prisoner, the player character is caught up in an ancient prophecy, as well as a power struggle between factions, races, and gods incarnate.", "developers": [{"id": "521816519768932355", "name": "Bethesda Game Studios"}], "executables": [{"is_launcher": false, "name": "morrowind.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c565e3d039791a8d128a54dc673937e0", "id": "451539197044719616", "name": "The Elder Scrolls III: Morrowind", "overlay": true, "publishers": [{"id": "521816519768932355", "name": "Bethesda Game Studios"}, {"id": "521816500508819469", "name": "Bethesda Softworks"}], "splash": "44f0ac79a586d0afd43e3b2227e1b675", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "22320", "sku": "22320"}], "type": 1, "verify_key": "3784173cfff40bd739b644353e08c6e0934120d5e288cba6025e9c4dbbd3ab4d"}, {"description": "Armello is a multiplayer card and board game set in a fairy-tale animal kingdom. It is the debut title from League of Geeks.", "developers": [{"id": "521816733728768030", "name": "League of Geeks"}], "executables": [{"is_launcher": false, "name": "armello.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f45ceb2b8c2ac5d4effede49346d21d9", "id": "451539293173841949", "name": "Armello", "publishers": [{"id": "521816733728768030", "name": "League of Geeks"}], "splash": "e24fb113899b8033a9b99a394220c749", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "290340", "sku": "290340"}], "type": 1, "verify_key": "8252f7c157454b60d6b72a3325264fe48509f88769eeac98623b0f22923a0600"}, {"description": "2K Sports and Visual Concepts' basketball simulator for the 2017/2018 season, including branching out to the Nintendo Switch.", "developers": [{"id": "521816587586633731", "name": "Visual Concepts"}], "executables": [{"is_launcher": false, "name": "nba2k18.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "776df571007e205149c996078f0d95d4", "id": "451539322965852185", "name": "NBA 2K18", "publishers": [{"id": "521816587586633731", "name": "Visual Concepts"}, {"id": "521816531324370967", "name": "2K Sports"}], "splash": "b9f26eb0bd312b7d2368f3127f62dbde", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "577800", "sku": "577800"}], "type": 1, "verify_key": "1e7a9287a6c4b58464194ad34e5ae70319e2fe5321867ae4adab341a4cc38dcc"}, {"description": "The classic mech combat series is being reborn as an online free-to-play game by Piranha Games.", "developers": [{"id": "521816557656080387", "name": "Piranha Games"}], "executables": [{"is_launcher": false, "name": "mechwarrioronline.exe", "os": "win32"}, {"is_launcher": false, "name": "mwoclient.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0b1f5ca9d2210e69ffb56d5ec2294034", "id": "451539349142634496", "name": "MechWarrior Online", "publishers": [{"id": "521816557211615237", "name": "Piranha Games Inc."}, {"id": "521816557211615238", "name": "Infinite Game Publishing"}], "splash": "bd39c76213c1b526f78fd03865ea1ef6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "342200", "sku": "342200"}], "type": 1, "verify_key": "b37c2980a9de126a90817c97249832d811599bee6ac08d0d4db51ba862f24911"}, {"aliases": ["Resident Evil 5"], "description": "", "executables": [{"is_launcher": false, "name": "re5dx9.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "af605415059e597224f0e0b5f9f686b8", "id": "451539402896703490", "name": "Resident Evil 5 / Biohazard 5", "publishers": [{"id": "521816574512857088", "name": "Capcom"}], "splash": "9e20af12fb1127988515f06c4cd6ed75", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "21690", "sku": "21690"}], "type": 1, "verify_key": "262dba403e151b64aa09c8d82c648e73967d5841118d3b6d6960fb25596f066a"}, {"description": "A game about buying, repairing and selling houses.", "developers": [{"id": "521816512512786456", "name": "Red Dot Games"}], "executables": [{"is_launcher": false, "name": "houseflipper.exe", "os": "win32"}], "flags": 0, "guild_id": "448833517418184725", "hook": true, "icon": "693027d5c1ddeecbe0e06c60561c7fdd", "id": "451539472610492426", "name": "House Flipper", "publishers": [{"id": "521816548059643909", "name": "Empyrean"}, {"id": "521816512516980736", "name": "PlayWay"}], "splash": "f15e07f800ca0ee625135c9eaf5b61e7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "613100", "sku": "613100"}], "type": 1, "verify_key": "7d3e398eb13bfc2fc52cf631bae7c92123a3a2f9a32e33b1fe9a56548b82bfe9"}, {"description": "", "executables": [{"is_launcher": false, "name": "sdhdship.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0ea7b036afe61759634ec94f5abc35ee", "id": "451539490574434315", "name": "Sleeping Dogs: Definitive Edition", "publishers": [{"id": "521816640195788801", "name": "United Front Games"}], "splash": "ea316d4eba65ba7b5c2dc54594fb781d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "307690", "sku": "307690"}], "type": 1, "verify_key": "72feb9e0b6a933614226358c51a742e89ac563d514bdd345386bf078875a3df7"}, {"aliases": ["Final Fantasy VII"], "description": "The seventh numbered entry in the Final Fantasy franchise brings the series into 3D with a landmark title that set new industry standards for cinematic storytelling. Mercenary Cloud Strife joins the rebel group AVALANCHE in their fight against the power-hungry Shinra Company, but their struggle soon becomes a race to save the entire Planet from an impending cataclysm.", "developers": [{"id": "521816676157751326", "name": "Squaresoft"}], "executables": [{"is_launcher": false, "name": "ff7_en.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "87e2bfc63b2e43d949da67691190e8db", "id": "451539606207463424", "name": "FINAL FANTASY VII", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}, {"id": "521816676157751326", "name": "Squaresoft"}], "splash": "d5871757563f1ff8406f14c4e6968f2b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "39140", "sku": "39140"}], "type": 1, "verify_key": "e287da9f22b011dde3d74c3184238bedab8ac45d8e8a696c33cb45917062614a"}, {"description": "Heroes of Hammerwatch is a roguelite spin-off of the 2013 dungeon crawler Hammerwatch", "executables": [{"is_launcher": false, "name": "hwr.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a269fce17a004e5977a0b65204836654", "id": "451539639811964928", "name": "Heroes of Hammerwatch", "publishers": [{"id": "521816573485514762", "name": "Crackshell"}], "splash": "7bde3f6b46bfcf67a01c1533eba664e6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "677120", "sku": "677120"}], "type": 1, "verify_key": "e1f2c5ac658b2ee65737536f3b50e91434822fb11dbfde6e42adde5631983cfe"}, {"description": "Youtubers Life", "executables": [{"is_launcher": false, "name": "youtuberslife.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "caf7bca4e46359f029ef7905ae2430a6", "id": "451539649656127488", "name": "Youtubers Life", "publishers": [{"id": "521816689004904469", "name": "U-Play Online"}], "splash": "a3046082e69b4ee4ba0f2e6b5ff953d0", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "428690", "sku": "428690"}], "type": 1, "verify_key": "041e356b98da0c62cb697f07b6a0568f26adc7d66f8c514171728cb8df5294d7"}, {"aliases": ["Resident Evil 4 HD"], "description": "", "executables": [{"is_launcher": false, "name": "bio4.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0d99a0804ef6c27e4bb2a05ffae31f4b", "id": "451539772037398560", "name": "resident evil 4 / biohazard 4", "publishers": [{"id": "521816574512857088", "name": "Capcom"}], "splash": "d2f74d29ca99f5c99d463b61c4471bfe", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "254700", "sku": "254700"}], "type": 1, "verify_key": "fd95b262721b17f01b12c823c4ed978ce5af15e4b7864b67f0e741421e83cfd1"}, {"description": "An upgraded version of the 2013 XBLA title featuring all the DLC, brand new animations for both humans and zombies, improved interface and increased graphics quality.", "developers": [{"id": "521816505252446228", "name": "Undead Labs"}], "executables": [{"is_launcher": false, "name": "stateofdecay.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "32a24d12ab414fa4c3d606b03ebefb94", "id": "451539805860528128", "name": "State of Decay: Year-One", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}, {"id": "521816505252446228", "name": "Undead Labs"}], "splash": "fd702d11e698575a700f8b82459fce41", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "329430", "sku": "329430"}], "type": 1, "verify_key": "404b348b1b41c8675b09d5bafb21306ef826d8a576f22e1daf5cc2b36a96279c"}, {"description": "An official free-to-play conversion of Arma 3.", "developers": [{"id": "521816510172233760", "name": "Bohemia Interactive Studio"}], "executables": [{"is_launcher": false, "name": "argobattleye.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e9b1fe296cae7ed54a6cf3e4d138093c", "id": "451539926417408000", "name": "Argo", "publishers": [{"id": "521816510172233760", "name": "Bohemia Interactive Studio"}], "splash": "6a2368d5554fac1620cec787907f69d7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "530700", "sku": "530700"}], "type": 1, "verify_key": "9d3cec1df9ec228059182b9a18b8121e08953e1d7f61ddbf66aa487cc3a77e3b"}, {"description": "", "executables": [{"is_launcher": false, "name": "eseaclient.exe", "os": "win32"}, {"is_launcher": false, "name": "eseaclientsteam.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c5870d06e0c4104f002623649fae605b", "id": "451539971283877888", "name": "ESEA", "publishers": [{"id": "521816675516153857", "name": "ESEA"}], "splash": "3d470db297c043869c0113846407bd21", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "479130", "sku": "479130"}], "type": 1, "verify_key": "0beb18e297f5b37521edcb5d60d256fc46ad53c5234c39c4d761827c97fa1ce4"}, {"description": "A compilation containing Sniper Elite: Nazi Zombie Army 1 and 2, plus the previously unreleased Zombie Army 3.", "developers": [{"id": "521816698534494221", "name": "Rebellion"}], "executables": [{"is_launcher": false, "name": "zat.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "75aa560a98c52cb0525ed0748eadcc68", "id": "451539976908439552", "name": "Zombie Army Trilogy", "publishers": [{"id": "521816698534494221", "name": "Rebellion"}], "splash": "43c391b7dc9a508a0150774c8e54260e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "301640", "sku": "301640"}], "type": 1, "verify_key": "4834ff95e923f634335bc5317766a406fb7bde9d9c930e6025522df8c4501221"}, {"description": "The last installment of the Modern Warfare trilogy brings World War 3 to the world of Call of Duty. While the U.S., British, and French armed forces try to push back the Russian invasion, the disavowed Task Force 141 begin their hunt for international terrorist Vladimir Makarov.", "developers": [{"id": "521816501544550406", "name": "Infinity Ward"}], "executables": [{"is_launcher": false, "name": "iw5sp.exe", "os": "win32"}, {"is_launcher": false, "name": "iw5mp.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a3bc00611f0b6dc7a993fb8865914f80", "id": "451539986144296969", "name": "Call of Duty: Modern Warfare 3", "publishers": [{"id": "521816501544550404", "name": "Activision"}, {"id": "521816501544550406", "name": "Infinity Ward"}], "splash": "00170ee33cf1ab51d55f5c8d795f40af", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "42680", "sku": "42680"}], "type": 1, "verify_key": "b8e0e3fb500573b1fee68e2c5c0ad35dc35137bed3d5f4c11759956e9de4bb64"}, {"description": "Horizon Source", "executables": [{"is_launcher": false, "name": "horizon source/gameclient.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0ed3ef971d78985758caf6671bb55807", "id": "451540115437912064", "name": "Horizon Source", "publishers": [{"id": "521816590673641484", "name": "Zhong Chongren"}], "splash": "755422c090b4ea33c13c3ed4346d0635", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "788880", "sku": "788880"}], "type": 1, "verify_key": "68916f3818a8fe93e1833f81c4edb30da628c68eb1a2a60472e197ac466f368f"}, {"description": "Yet Another Zombie Defense is a shooter.", "developers": [{"id": "521816558096351233", "name": "Awesome Games Studio"}], "executables": [{"is_launcher": false, "name": "yetanotherzombiedefense.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "49c440d9d516dc0086f82fb5778b37a0", "id": "451540166037995532", "name": "Yet Another Zombie Defense", "publishers": [{"id": "521816558096351233", "name": "Awesome Games Studio"}], "splash": "a9e59d34fb53d97468eb54be2731363c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "270550", "sku": "270550"}], "type": 1, "verify_key": "32a11627fe8fb4d11956210411ea62a0027091222065413e218370f05893a61c"}, {"description": "", "executables": [{"is_launcher": false, "name": "cpucores/cpucores.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2dd5236fb4d5b19d9c6a9fec0b9c17f9", "id": "451540177131798541", "name": "CPUCores :: Maximize Your FPS", "publishers": [{"id": "521816556175491082", "name": "Tim Sullivan"}], "splash": "f39bd6bf817f94e7b37d2ac354f59dac", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "384300", "sku": "384300"}], "type": 1, "verify_key": "035b8385346f67ce256b267af6d4035149d71df5c807262b7d096f6851cc7c06"}, {"description": "Wargame: Red Dragon is the third entry in Eugen Systems' Cold War real-time tactical series, published by Focus Home Interactive. This game brings the action to East Asia, in contrast to the European focus of the first two titles.", "developers": [{"id": "521816690066194454", "name": "Eugen Systems"}], "executables": [{"is_launcher": false, "name": "wargame3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1d93d2f7dab8e603a823d6b0c6ef79ca", "id": "451540284006858772", "name": "Wargame: Red Dragon", "publishers": [{"id": "521816690066194454", "name": "Eugen Systems"}, {"id": "521816537192202247", "name": "Focus Home Interactive"}], "splash": "c0bb1142feb3ed9eb91d8ca0f989a0bd", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "251060", "sku": "251060"}], "type": 1, "verify_key": "fa881881a20538d394e6bf5c843075e15b19b5e2fe28687e188bc52ed82e28cf"}, {"aliases": ["Resident Evil 6"], "description": "", "executables": [{"is_launcher": false, "name": "bh6.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "bf1035490ba526a889316fdb639e6ee9", "id": "451540292458512394", "name": "Resident Evil 6 / Biohazard 6", "publishers": [{"id": "521816574512857088", "name": "Capcom"}], "splash": "a83ca9c0239d7fb1e4ec32e5778ad046", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "221040", "sku": "221040"}], "type": 1, "verify_key": "e872025d9d2aafbb16c8216786030cf3e7a20122d486436e833ce51dcc7cfc1f"}, {"description": "CastleMiner Z is an online survival horror co-op game. Players must fend off a zombie horde as they search for resources and build weapons to survive.", "developers": [{"id": "521816670541709333", "name": "DigitalDNA Games"}], "executables": [{"is_launcher": false, "name": "castleminerz.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2d2146db3d18472494aad9167eecc971", "id": "451540363941904385", "name": "CastleMiner Z", "publishers": [{"id": "521816670541709333", "name": "DigitalDNA Games"}], "splash": "0029ea965cf46511dc4196f60e087486", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "253430", "sku": "253430"}], "type": 1, "verify_key": "bf8c7a4dcef033e95e6a395a5bd5bb0f629036e64795498673c2938f8ac538c3"}, {"aliases": ["Lord of the Rings Online"], "description": "Helm's Deep is an expansion for The Lord of the Rings Online released on November 20, 2013.", "developers": [{"id": "521816685502791730", "name": "Turbine, Inc."}], "executables": [{"is_launcher": false, "name": "lotroclient.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "976a50f90afab3890e5485254c404e3d", "id": "451540469470593024", "name": "The Lord of the Rings Online\u2122", "overlay": true, "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "summary": "", "type": 1, "verify_key": "9d38504e06ec3b6e20dc5d0741c4208422c189fe8e5efef7f0ac5d9a06509dd3"}, {"description": "For the King is an online co-op, turn-based, hex-based, strategy RPG.", "developers": [{"id": "521816633392627712", "name": "IronOak Games"}], "executables": [{"is_launcher": false, "name": "ftk.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "57dd0b3b55c8bffd2f700ae0efbc91e0", "id": "451540626270584833", "name": "For The King", "publishers": [{"id": "521816633392627712", "name": "IronOak Games"}], "splash": "4ea1461616f561885243d4fc81484866", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "527230", "sku": "527230"}], "type": 1, "verify_key": "b529c0f82bba491a456bff608eba6bd2fda851e2e383289ac134aa2f7ea78d0a"}, {"description": "Rico Rodriguez returns to explore another autocratic island nation in this explosion-laded followup to Just Cause.", "developers": [{"id": "521816537192202241", "name": "Avalanche Studios"}], "executables": [{"is_launcher": false, "name": "justcause2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9819c589d78f4928a9fbbd4654166f14", "id": "451540656494477312", "name": "Just Cause 2", "publishers": [{"id": "521816520817639456", "name": "Eidos Interactive"}], "splash": "41098ceab260da9cfcc42f21bc24d44a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "8190", "sku": "8190"}], "type": 1, "verify_key": "dd4822738cb2cb5af6cd341322faf102f4c6a0ac3772a7c4fcfe6fc3f0625b11"}, {"description": "Gigantic is a 5v5 third-person shooter and MOBA hybrid game where players fight to take down the enemy team's Guardian.", "developers": [{"id": "521816532737851445", "name": "Motiga"}], "executables": [{"is_launcher": false, "name": "rxgame-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5749fdbb0b260dca6b89e43c60c40ed4", "id": "451540746592321536", "name": "Gigantic", "publishers": [{"id": "521816509673242636", "name": "Perfect World Entertainment"}], "splash": "d11a1827fde9cb70c7fb01c8e66ec6e3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "327690", "sku": "327690"}], "type": 1, "verify_key": "a2a72189e081f456e06921dde8ea6f327f2ec1d6956acaf3c227adbd0b72cf40"}, {"description": "Ten years after the events of Chaos Rising, sub-sector Aurelia is still engulfed in all out war. In this third installment of Dawn of War II, you decide the victor!", "developers": [{"id": "521816593798397970", "name": "Relic Entertainment"}], "executables": [{"is_launcher": false, "name": "dow2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "32691743fa8448cb129d5b4f2ab8268f", "id": "451540774530711572", "name": "Dawn of War II - Retribution", "publishers": [{"id": "521816550596935692", "name": "THQ"}], "summary": "", "type": 1, "verify_key": "a86bdc12c4ee835d19e0ee2f794e8e1fac90848c85067334ebd522b9b0a97043"}, {"description": "Paint the Town Red is a voxel based first person combat game currently available in Early Access on Steam.", "executables": [{"is_launcher": false, "name": "paintthetownred.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9069ce816fcb3fac41d9371bd218b519", "id": "451540782785101834", "name": "Paint the Town Red", "publishers": [{"id": "521816565541240841", "name": "South East Games"}], "splash": "199edfec3575dd072860f193cf72e7da", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "337320", "sku": "337320"}], "type": 1, "verify_key": "56e579ad73a1c93b9ff556282656574544cbed9dd5c4a41f100f971d8eef8795"}, {"description": "A fan-made re-imagining of the 1998 FPS hit Half-Life.", "developers": [{"id": "521816708562944020", "name": "Crowbar Collective"}], "executables": [{"is_launcher": false, "name": "black mesa/bms.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f9fe6ebf190d336453d9b3b03ce1b5ff", "id": "451540911172747284", "name": "Black Mesa", "publishers": [{"id": "521816708562944020", "name": "Crowbar Collective"}], "splash": "f0c4a58309e5b071ea02191ad61f6255", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "362890", "sku": "362890"}], "type": 1, "verify_key": "68a0c1144b91f7f60c5942c0c211febf645ff029b03c326219b6e88961ec70d9"}, {"description": "Vindictus is a free-to-play action-oriented MMORPG created by devCAT, an internal studio of Korean free-to-play game publisher Nexon.", "executables": [{"is_launcher": false, "name": "vindictus.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1191ba6f0061d27e7e8d4865ddd8e80f", "id": "451541058497675294", "name": "Vindictus", "publishers": [{"id": "521816511610880011", "name": "Nexon Corporation"}], "splash": "484785d60acd32179e039e1c3624b957", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "212160", "sku": "212160"}], "type": 1, "verify_key": "7d32650d778d053824e970f517d9126eeba57e6b162fa39f0556b7b53a3a9b3b"}, {"aliases": ["Batman: Arkham City"], "description": "", "executables": [{"is_launcher": false, "name": "batmanac.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "586e24dd7f5b3ce54371981c5954ffda", "id": "451541064545861632", "name": "Batman: Arkham City GOTY", "publishers": [{"id": "521816538664402944", "name": "Rocksteady Studios"}], "splash": "d333a50c19996ddedd1f7ce3a2348194", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "200260", "sku": "200260"}], "type": 1, "verify_key": "501afb9919b8799743e083e5dc6cd5ba5820b64512f695bdbdd751195f9f279b"}, {"description": "A story-focused platforming adventure/exploration game with a striking and colorful art style. Taking place in a small town of anthropomorphic animals, the game revolves around college dropout Mae as she tries to get reacquainted with her hometown.", "developers": [{"id": "521816686991769601", "name": "Infinite Fall"}], "executables": [{"is_launcher": false, "name": "night in the woods.exe", "os": "win32"}], "flags": 0, "guild_id": "409719543984947201", "hook": true, "icon": "697990380ed8c9f190e50c8d3173b635", "id": "451541089912881162", "name": "Night in the Woods", "publishers": [{"id": "521816686991769600", "name": "Finji"}], "splash": "70c707531182fb90873ff974fd3f7c90", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "481510", "sku": "481510"}], "type": 1, "verify_key": "829806626cbbe7ba034a2ea2488cce671127e14eeab61b39171abd274e232fa2"}, {"description": "Door Kickers is a top-down real-time SWAT tactics game.", "developers": [{"id": "521816567940513809", "name": "KillHouse Games"}], "executables": [{"is_launcher": false, "name": "doorkickers.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7b98744492b41913e8fe06be513b5a0b", "id": "451541104643538944", "name": "Door Kickers", "publishers": [{"id": "521816567940513809", "name": "KillHouse Games"}], "splash": "ed0ad4022e3122c4829112c53f37ab5e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "248610", "sku": "248610"}], "type": 1, "verify_key": "83c0edca54cb010494573590668bb0f6d0f8f3102e18a591cf41975885b9b3f5"}, {"description": "Free to play shooter about the confrontation of two irreconcilable sides, represented by the government military housings and the armed hirelings.", "executables": [{"is_launcher": false, "name": "warmode/warmode.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a790f92112f5f0b8c873580e54b5701a", "id": "451541174877159430", "name": "WARMODE", "publishers": [{"id": "521816554648764430", "name": "WARTEAM"}], "splash": "7b09ac16a976f3646b209a5e9804ac30", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "391460", "sku": "391460"}], "type": 1, "verify_key": "913dc79e1050fcbacc2b45376ca1dafcc4c738b633c50863ee5946e719c2b18c"}, {"description": "Follow the exploits of Captain Cole Anderson as he tries to stop a bio-weapon being unleashed.", "developers": [{"id": "521816677101600814", "name": "CI Games"}], "executables": [{"is_launcher": false, "name": "sniperghostwarrior2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5da42d6e496ba234b9f0d267af0dc1ae", "id": "451541277935140874", "name": "Sniper Ghost Warrior 2", "publishers": [{"id": "521816677101600814", "name": "CI Games"}, {"id": "521816677105795083", "name": "City Interactive"}], "splash": "d51344a3b69e8837b5772da97aa76db9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "34870", "sku": "34870"}], "type": 1, "verify_key": "cbb036301491ce87f12a24336bab4554f9a687abb6d86390c84a6013b289f69d"}, {"aliases": ["Battlefield: Bad Company\u2122 2"], "description": "Battlefield: Bad Company 2 is the second installment in this spin-off Battlefield series. It has a more serious campaign and a vastly expanded multiplayer system.", "developers": [{"id": "521816575481872391", "name": "DICE"}], "executables": [{"is_launcher": false, "name": "bfbc2game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c36db6848b23f2ab5077cd58a6a842c8", "id": "451541573742755850", "name": "Battlefield: Bad Company 2", "publishers": [{"id": "521816575481872391", "name": "DICE"}, {"id": "521816499464306692", "name": "Electronic Arts"}], "splash": "8d0de52e1dfeeb1128715ad9845d12ee", "summary": "", "third_party_skus": [{"distributor": "origin", "id": null, "sku": null}, {"distributor": "steam", "id": "24960", "sku": "24960"}], "type": 1, "verify_key": "2ff26b42c8c6b214aebc41c4a15dcfa037f90f7bab6d96c9ac2c86c7d8931e40"}, {"aliases": ["Limbo"], "description": "", "developers": [{"id": "521816599607508999", "name": "Playdead"}], "executables": [{"is_launcher": false, "name": "limbo.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7a51b58c0881e4b9c6d887f65cef85ea", "id": "451541581778911262", "name": "LIMBO", "primary_sku_id": "489928194208825365", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}, {"id": "521816599607508999", "name": "Playdead"}], "slug": "limbo", "splash": "780c83b00428c919799b20343459805d", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "489928194208825365", "sku": "489928194208825365"}, {"distributor": "steam", "id": "48000", "sku": "48000"}], "type": 1, "verify_key": "f0fb781a296874c6332af0ffdb939ddfbb23ddb4ad011d9cedaa407b4f68153c"}, {"aliases": ["HELLDIVERS"], "description": "Up to 4 players shoot aliens (and possibly each other) with some help from above in this downloadable shooter for PS3, PS4, Vita and PC.", "developers": [{"id": "521816662723526658", "name": "Arrowhead Game Studios"}], "executables": [{"is_launcher": false, "name": "helldivers.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c174acef65c9d0de3546773cd7646e1f", "id": "451541695771967508", "name": "HELLDIVERS\u2122", "publishers": [{"id": "521816525410402312", "name": "Sony Interactive Entertainment America"}, {"id": "521816662723526658", "name": "Arrowhead Game Studios"}], "splash": "7d21a0f47b37d3cabdf68168b9dc6d64", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "394510", "sku": "394510"}], "type": 1, "verify_key": "9e125666272735bb4e37050641bee39bd79bebb1ef4ba67669622d025298f5a5"}, {"description": "Formerly known as Teewars, Teeworlds is a combat platformer for up to 16 players.", "executables": [{"is_launcher": false, "name": "teeworlds.exe", "os": "win32"}, {"is_launcher": false, "name": "teeworlds.app", "os": "darwin"}], "flags": 0, "hook": true, "icon": "9cde8b3e1619a319aea30e1fe1d2df7d", "id": "451541853418815498", "name": "Teeworlds", "publishers": [{"id": "521816523430428672", "name": "Teeworlds Team"}], "splash": "ada15dbfce46140e560aa3f9137b83d3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "380840", "sku": "380840"}], "type": 1, "verify_key": "e559164492d7eff80c3a42ee26eaac8e572149a98f1e528402f4515ad825d4e3"}, {"description": "Sponsored by the National Aeronautics and Space Administration, Moonbase Alpha tasks players with repairing the life support systems of the titular settlement. The game encourages teamwork and efficiency while showcasing the latest in NASA technology.", "developers": [{"id": "521816781770457098", "name": "U.S. Army"}], "executables": [{"is_launcher": false, "name": "moonbasealphagame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "eadaf56af761b2456cf875114c1bcfec", "id": "451541936872882186", "name": "Moonbase Alpha", "publishers": [{"id": "521816664199921687", "name": "National Aeronautics and Space Administration"}], "splash": "4c841f492f3e7414937ae8de8296934a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "39000", "sku": "39000"}], "type": 1, "verify_key": "40f02ea119ba2202f1bac659c1258a5da421e9c369250a4192aa946f962847d0"}, {"description": "", "executables": [{"is_launcher": false, "name": "mcosu/mcengine.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ca48b63ff2622421e006b2852cdb352e", "id": "451541958268157952", "name": "McOsu", "publishers": [{"id": "521816640808026114", "name": "McKay"}], "splash": "010093059c241784c2088f3a3aec8857", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "607260", "sku": "607260"}], "type": 1, "verify_key": "d5172c70f2e23e985531b451c910f63ffe1f74fc12e055fd1a74cc0821a3f106"}, {"description": "A simple clicker game.", "developers": [{"id": "521816685938868250", "name": "CakeEaterGames"}], "executables": [{"is_launcher": false, "name": "loading screen simulator/lss.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7dae2be931d191b9a48d08217c0488d5", "id": "451542208257064961", "name": "Loading Screen Simulator", "publishers": [{"id": "521816685938868250", "name": "CakeEaterGames"}], "splash": "fc34fea64182f6d91388ae1473621e52", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "652980", "sku": "652980"}], "type": 1, "verify_key": "bcbd98fa0ff2bf0204f827fd73659f04882767f49ad210f23ec104c30956320e"}, {"bot_public": true, "bot_require_code_grant": false, "description": "", "developers": [{"id": "521816522977574923", "name": "LucasArts Entertainment Company LLC"}], "executables": [{"is_launcher": false, "name": "swrepubliccommando.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "eded659c2684d89f243de5ddd408fcbb", "id": "451542291635503124", "name": "STAR WARS\u2122 Republic Commando", "primary_sku_id": "492432195219095553", "publishers": [{"id": "521816549057626137", "name": "ak tronic Software & Services GmbH"}], "slug": "star-wars-tm-republic-commando", "splash": "a2fb1c89b80aadd7dd592238e3106d88", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "6000", "sku": "6000"}, {"distributor": "discord", "id": "492432195219095553", "sku": "492432195219095553"}], "type": 1, "verify_key": "460cab5f2fe7b71e3c2c06b3fe217f4f68d55db16dae672bdfb66182355871e2"}, {"description": "A set of quick VR experiences are collected together in one free package for HTC Vive owners.", "developers": [{"id": "521816530393104394", "name": "Valve Corporation"}], "executables": [{"is_launcher": false, "name": "thelab.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fa1eca67ec72510b1c0ee09c38159816", "id": "451542394857455638", "name": "The Lab", "publishers": [{"id": "521816507102003200", "name": "Valve"}, {"id": "521816530393104394", "name": "Valve Corporation"}], "splash": "782aa30493ca28d56de4725fcd86f303", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "450390", "sku": "450390"}], "type": 1, "verify_key": "06371df7175ce01c53e8e2314a03baea8e0f1af86dcd79714affd343680c74a7"}, {"description": "", "executables": [{"is_launcher": false, "name": "citra-qt.app", "os": "darwin"}, {"is_launcher": false, "name": "citra-qt.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9cb08b239dcd645f659e43de2049c572", "id": "451542523219935272", "name": "Citra", "publishers": [{"id": "521816597569208323", "name": "Citra Team"}], "summary": "", "type": 1, "verify_key": "b79cd8a0afb5ac02fa76ea622741b380adbc4224f4de28d5c635c084e4997c9c"}, {"description": "Sword Art Online: Fatal Bullet is a third-person shooter developed by Dimps.", "developers": [{"id": "521816600723324929", "name": "Dimps Corporation"}], "executables": [{"is_launcher": false, "name": "saofb-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c6e737634678b11853fdaf45dff7ecfc", "id": "451542793513598996", "name": "Sword Art Online: Fatal Bullet", "publishers": [{"id": "521816537653444610", "name": "Bandai Namco Entertainment"}, {"id": "521816600723324928", "name": "DIMPS"}], "splash": "aac46bf51265299fd8fe6704efba50f8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "626690", "sku": "626690"}], "type": 1, "verify_key": "d896cb52a84b674a7ce266226e81086e65ccd1ac47d1fa1c355992adb96a5a5f"}, {"description": "Bit Heroes", "executables": [{"is_launcher": false, "name": "bit heroes.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "bb59a6b9a76b82e1941cdaf9e5db2f09", "id": "451542845703061524", "name": "Bit Heroes", "publishers": [{"id": "521816524403638272", "name": "Kongregate"}], "splash": "ae21f0b4c9816b8ccad68129befee499", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "666860", "sku": "666860"}], "type": 1, "verify_key": "3a699ea344d8bd9ada4a5ac41f23dcebacb1c976598b627f7d83137474b90555"}, {"description": "More levels, more traps, and more Orcs who simply MUST DIE!", "developers": [{"id": "521816601230704643", "name": "Robot Entertainment"}], "executables": [{"is_launcher": false, "name": "orcsmustdie2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "835dd3a49f67ecb5a61f9b3cddc03eb7", "id": "451543160057888778", "name": "Orcs Must Die! 2", "publishers": [{"id": "521816601230704643", "name": "Robot Entertainment"}], "splash": "c00faf685f425e156b26f0a74ef38f56", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "201790", "sku": "201790"}], "type": 1, "verify_key": "a8286410c7ff3e1833ce8a57841652fb98deb2da0a912cfaf07d9fe647e7ba13"}, {"aliases": ["DC Universe Online Live"], "description": "An MMO for the PC and consoles that allows you to fight for and alongside the forces of good or evil from the DC Comics Universe.", "developers": [{"id": "521816500974256130", "name": "Daybreak Games"}], "executables": [{"is_launcher": false, "name": "dcgame.exe", "os": "win32"}], "flags": 0, "guild_id": "227819773688283137", "hook": true, "icon": "c95ded2fca578cef0f81ce49c4fa1e73", "id": "451543277385023488", "name": "DC Universe Online", "publishers": [{"id": "521816682155737088", "name": "Sony Online Entertainment"}, {"id": "521816500974256130", "name": "Daybreak Games"}], "splash": "fffce05fee6492f64c8bd91efe45cd44", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "24200", "sku": "24200"}], "type": 1, "verify_key": "c1d326414aa29f6124db758f4151d0068f863242347151654e5f93024fd4c6f0"}, {"aliases": ["Guilty Gear Xrd -REVELATOR-"], "description": "The first revision in the Guilty Gear Xrd series.", "developers": [{"id": "521816536743149599", "name": "Arc System Works Co., Ltd."}], "executables": [{"is_launcher": false, "name": "guilty gear xrd -revelator-/binaries/win32/bootggxrd.exe", "os": "win32"}, {"is_launcher": false, "name": "guiltygearxrd.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1354aa2ed3120a448ebf9d16304bc6af", "id": "451543838847139850", "name": "GUILTY GEAR Xrd -REVELATOR-", "publishers": [{"id": "521816536743149599", "name": "Arc System Works Co., Ltd."}], "splash": "aef72b056a8d8ff4ab5168eea9de5ae1", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "520440", "sku": "520440"}], "type": 1, "verify_key": "c2e186e8e9d71ed7bd139678874dfa6c82eb69a9f104a2501c2ab1442d6fb720"}, {"description": "", "developers": [{"id": "521816727710072832", "name": " Trickjump Games Ltd"}], "executables": [{"is_launcher": false, "name": "battleroyaletrainer-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "453768ecd26174e634b72355dbee54fc", "id": "451543838989746186", "name": "Battle Royale Trainer", "publishers": [{"id": "521816727710072832", "name": " Trickjump Games Ltd"}], "splash": "74f792096b60c509c5155660e5fbbbd9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "772540", "sku": "772540"}], "type": 1, "verify_key": "d24f05c593368ee8fac43f5c510af6a071e99334fa302ba4cd4c306efc61a311"}, {"aliases": ["Rise of Nations Extended"], "description": "Build a nation and watch it progress through the ages in this real-time strategy game from Big Huge Games.", "developers": [{"id": "521816731153596453", "name": "Big Huge Games"}], "executables": [{"is_launcher": false, "name": "rise of nations/patriots.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1653bb11aae9cfc628ff14d34051c839", "id": "451543839665160232", "name": "Rise of Nations: Extended Edition", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}, {"id": "521816624546709506", "name": "Skybox Labs"}], "splash": "975b0c1a1b4a7062a5ccaf30e0063beb", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "287450", "sku": "287450"}], "type": 1, "verify_key": "1f8f26dfde0bb81d95a6a09fcca35f761509bccd37790a116b8da943a4bc046a"}, {"description": "Bid on art, defuse a bomb, and more in the second installment of Jackbox Games' annual party game pack (now with audience participation).", "developers": [{"id": "521816532737851443", "name": "Jackbox Games"}], "executables": [{"is_launcher": false, "name": "the jackbox party pack 2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b13d64a8dbe127c6f31b7a2629ab4251", "id": "451543877111775247", "name": "The Jackbox Party Pack 2", "publishers": [{"id": "521816532737851443", "name": "Jackbox Games"}], "splash": "7e096e69ba9ec7d6035cbd40a2cdc6be", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "397460", "sku": "397460"}], "type": 1, "verify_key": "8fbe6d5d954176922285e1f756b877688ba7b5feaa887c1756b76413c8f85060"}, {"description": "Aion: Tower of Eternity is an MMORPG by NCSoft with a unique PvPvE system using the first CryEngine. Originally released in Korea, it was relaunched for China, Japan, Taiwan, North America and Europe in 2009.", "developers": [{"id": "521816560051159044", "name": "NCsoft Corporation"}], "executables": [{"is_launcher": false, "name": "aion.bin", "os": "win32"}], "flags": 0, "hook": true, "icon": "fe0db058834506b095f32a63ab4fd679", "id": "451543892358201393", "name": "Aion", "publishers": [{"id": "521816560051159044", "name": "NCsoft Corporation"}, {"id": "521816594675138613", "name": "NC Interactive, LLC"}], "summary": "", "type": 1, "verify_key": "9c864defb23c8f800a140ab492f148f4c816eb92f29fed8153ca8cce8ae0ec05"}, {"description": "A survival horror game set fifteen years after the original Alien film. It stars Amanda Ripley, the daughter of the film's protagonist, Ellen Ripley.", "developers": [{"id": "521816720503996437", "name": "The Creative Assembly"}], "executables": [{"is_launcher": false, "name": "alien isolation/ai.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "25d3037b36f6f7048b30825f8eb788fd", "id": "451543893050261504", "name": "Alien: Isolation", "publishers": [{"id": "521816568473059338", "name": "Creative Assembly"}, {"id": "521816507676885010", "name": "Sega"}], "splash": "f9e3d3d5d75302e2007869795caa37a1", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "214490", "sku": "214490"}], "type": 1, "verify_key": "eae9abbc890c994aafd2dc82681839541e4b0560b3ff33ba0fcb856cb2964038"}, {"cover_image": "e19f46fbeb46c4eee8a215a7f71a2306", "description": "", "developers": [{"id": "521816783196258334", "name": "Ironclad Games Corporation"}], "executables": [{"is_launcher": false, "name": "sins of a solar empire rebellion.exe", "os": "win32"}], "flags": 0, "guild_id": "266693357093257216", "hook": true, "icon": "5c5e3c049133447cb3695baee7328441", "id": "451543958611427328", "name": "Sins of a Solar Empire: Rebellion", "primary_sku_id": "489926101083226123", "publishers": [{"id": "521816676157751316", "name": "Stardock Corporation"}], "slug": "sins-of-a-solar-empire-rebellion", "splash": "0a2bb039c2f04e0fa81feb8bf9a1c2f1", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "204880", "sku": "204880"}, {"distributor": "discord", "id": "489926101083226123", "sku": "489926101083226123"}], "type": 1, "verify_key": "f9ea31bdf6dca310afcf21d9fa4119c8a6f13f02c658288059f169b754b6c4ac"}, {"aliases": ["Dragon Ball XenoVerse"], "description": "A fighting game for PlayStation 3, PlayStation 4, Xbox 360, Xbox One, and PC set in the Dragon Ball Z universe.", "developers": [{"id": "521816600723324929", "name": "Dimps Corporation"}], "executables": [{"is_launcher": false, "name": "dbxv.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "631ba2ef4d4f062e872afa8084de1c13", "id": "451543960167514112", "name": "DRAGON BALL XENOVERSE", "publishers": [{"id": "521816537653444610", "name": "Bandai Namco Entertainment"}], "splash": "5db10346f9d783458661d53162a0bac8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "323470", "sku": "323470"}], "type": 1, "verify_key": "ee8b87235be31cfc616172ad0fc256b27302ba4dbfba2130bc06ac626697d1af"}, {"description": "Continuing where Supreme Commander left off, players can now make use of the mighty Seraphim or defend humanity from these new invaders with the remnants of the returning factions.", "developers": [{"id": "521816566543810565", "name": "Gas Powered Games"}], "executables": [{"is_launcher": false, "name": "supremecommander.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "64da27de247a991fff015f84c07adbc0", "id": "451543961207701534", "name": "Supreme Commander: Forged Alliance", "publishers": [{"id": "521816550596935692", "name": "THQ"}], "splash": "eba93312c5ec66cddfec1924869bd94d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "9420", "sku": "9420"}], "type": 1, "verify_key": "aad9845f946de7d0c3ec85e25e55dc3d4e3648eda4a0fd6f9b345fe24d9e3b9b"}, {"description": "An online multiplayer game released on Steam Early-Access by October 31st. In short, the game is all about wizard duels with sumo-wrestling rules. Fast and responsive gameplay directed towards the MOBA crowds.", "executables": [{"is_launcher": false, "name": "spellsworn-win64-test.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a5b749c7fe970b659c2f30dbaecf9766", "id": "451544008737423360", "name": "Spellsworn", "publishers": [{"id": "521816695887626240", "name": "Frogsong Studios AB"}], "splash": "650584cb50b9e790d76be5929802a07e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "360620", "sku": "360620"}], "type": 1, "verify_key": "17fd4aa79f7441bdccab9d0c6f15fb97089e76046bf078d2a9cd01da180b42e5"}, {"aliases": ["Mass Effect 3"], "description": "When Earth begins to fall in an ancient cycle of destruction, Commander Shepard must unite the forces of the galaxy to stop the Reapers in the final chapter of the original Mass Effect trilogy.", "developers": [{"id": "521816589570408449", "name": "BioWare"}], "executables": [{"is_launcher": false, "name": "masseffect3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9e11e337b239c8701179a71e37bca2af", "id": "451544148617592832", "name": "Mass Effect\u2122 3", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "summary": "", "third_party_skus": [{"distributor": "origin", "id": null, "sku": null}], "type": 1, "verify_key": "fcd027560a503e65b3737376c20ee94f2e29d3c9d2df86c9e0c09695103607a3"}, {"description": "A completely new game designed from the ground up for virtual reality.", "developers": [{"id": "521816517512265757", "name": "SUPERHOT Team"}], "executables": [{"is_launcher": false, "name": "superhotvr.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "927dfd2d835ab6502c81a0684dd72a2b", "id": "451544150756556810", "name": "SUPERHOT VR", "publishers": [{"id": "521816517512265757", "name": "SUPERHOT Team"}], "splash": "e81ab4fca7b49e1f37347e4430ff865a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "617830", "sku": "617830"}], "type": 1, "verify_key": "987f478c6d7438e53c5099fa954c4a8ad06544986d75a2959086effd83b5338d"}, {"description": "", "executables": [{"is_launcher": false, "name": "blackdesertpatcher32.pae.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "616add8dabc904f7b6b2fe3ca9ab232d", "id": "451544197632229376", "name": "Black Desert Online SA", "publishers": [{"id": "521816521731735571", "name": "Pearl Abyss"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "706220", "sku": "706220"}], "type": 1, "verify_key": "96becdefa3bcd13992577eef59a3f7ca23aa4352acab3137e7db2fc472d1da1f"}, {"description": "Grand Theft Auto: Vice City is the second 3D game in the series and sixth original title. It features more of the same sand-box action-adventure gameplay with a new 1980s setting, new characters, new weapons and much more.", "developers": [{"id": "521816560537567261", "name": "Rockstar North"}], "executables": [{"is_launcher": false, "name": "gta-vc.exe", "os": "win32"}, {"is_launcher": false, "name": "gta--vc.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "347ba4f041c6d997930c1585acde1067", "id": "451544294432702474", "name": "Grand Theft Auto: Vice City", "publishers": [{"id": "521816560537567257", "name": "Rockstar Games"}], "splash": "361809ac06340c045963e0387c6b1e13", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "12110", "sku": "12110"}], "type": 1, "verify_key": "80c9fe3657f46cca4807f46da093a7827ee994548d10695692833bf3c0cb18c6"}, {"description": "", "executables": [{"is_launcher": false, "name": "dmlauncher.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f774d2f8c1eb8a0f721592fabefc47e4", "id": "451544305509859328", "name": "Digimon Masters Online", "publishers": [{"id": "521816666489749524", "name": "Move Games Co., Ltd."}], "splash": "32f338cf2149ff64e8c1bbd70fcf8a5e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "537180", "sku": "537180"}], "type": 1, "verify_key": "6e08a5ca4de135c2a0dda592bb747800b808f5b86500184af4f0fd176b2e4fc7"}, {"aliases": ["Mirror's Edge: Catalyst"], "description": "A reboot of the previously singleton franchise, this game features Faith using parkour in an open-world.", "developers": [{"id": "521816575481872391", "name": "DICE"}], "executables": [{"is_launcher": false, "name": "mirrorsedgecatalyst.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "325da4cefeccde63f7cf179c6d3b1e7b", "id": "451544331287789568", "name": "Mirror's Edge\u2122 Catalyst", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "summary": "", "third_party_skus": [{"distributor": "origin", "id": null, "sku": null}], "type": 1, "verify_key": "cce56a29832c8b3cc7dc5a8b47a2c7ac3901587a196ae2c4952103f8c88c3684"}, {"aliases": ["Anno 2070"], "description": "Anno 2070, a part of Ubisoft's strategy franchise Anno, ditches historical settings for a futuristic one. The focus of the game stays true to the series formula of building up cities through exploration and resource management.", "developers": [{"id": "521816672781336590", "name": "Blue Byte - studio Mainz"}], "executables": [{"is_launcher": false, "name": "anno5.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "bb8c974e8dc5c183ac6572f7327a94a1", "id": "451544339416481828", "name": "ANNO 2070", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "summary": "", "type": 1, "verify_key": "6efbc946d6375666ab9102e2b0fee050ef0b6f57b2f9e59cd27a265d042ceadc"}, {"aliases": ["Life is Feudal"], "description": "Life is Feudal: MMO is a open world survival crafting MMO, with an emphasis on simulation.", "developers": [{"id": "521816615457783813", "name": "Bitbox Ltd. "}], "executables": [{"is_launcher": false, "name": "life is feudal mmo/game/eu/cm_client.exe", "os": "win32"}], "flags": 0, "guild_id": "222787979649744896", "hook": true, "icon": "b831f0b284d8dc60da2173b79effac03", "id": "451544345699549194", "name": "Life is Feudal: MMO", "publishers": [{"id": "521816535753555989", "name": "Xsolla Inc."}, {"id": "521816535753555990", "name": "Bitbox Ltd."}], "splash": "2175b0f9d0f8a0247bee33233c82975a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "700030", "sku": "700030"}], "type": 1, "verify_key": "fe963879d592b674f3a079fe29a16f17d954b0dd880dab3858b05a6136d50b97"}, {"description": "Faeria is a turn-based game mixing the board game genre with tradable cards. The game board starts off blank as players first have to build lands, which serves as platforms to cast their creatures and move them.", "developers": [{"id": "521816578342387715", "name": "Abrakam"}], "executables": [{"is_launcher": false, "name": "faeria.exe", "os": "win32"}], "flags": 0, "guild_id": "107041343619993600", "hook": true, "icon": "db075655b9d109df69f0ba050e4a9441", "id": "451544379908423680", "name": "Faeria", "publishers": [{"id": "521816578342387715", "name": "Abrakam"}], "splash": "351becf05663ab0b788c3cb50b871622", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "397060", "sku": "397060"}], "type": 1, "verify_key": "431e071c6779edfc308f215b2237e239b295eea3bca5d5ca677ec8887bf7f4ad"}, {"description": "The game follows Semyon a ordinary young man, one day something completely unusual happens to him: he falls asleep in a bus in winter and wakes up... in the middle of a hot summer. In front of him is \"Sovionok\" - a pioneer camp.", "developers": [{"id": "521816629844377633", "name": "Soviet Games "}], "executables": [{"is_launcher": false, "name": "everlasting summer.exe", "os": "win32"}, {"is_launcher": false, "name": "everlasting summer.app", "os": "darwin"}], "flags": 0, "hook": true, "icon": "5d665b11b32e280c18722f181eff36fb", "id": "451544422711033856", "name": "Everlasting Summer", "publishers": [{"id": "521816629844377633", "name": "Soviet Games "}, {"id": "521816629844377636", "name": "Soviet Games"}], "splash": "bb6e8586c1e6b3f96fc5aa80a58d47a2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "331470", "sku": "331470"}], "type": 1, "verify_key": "6b2860c447673c7ab8150d7c4d8117e2edc606f05b52b849a9d56afd90055c57"}, {"description": "An MMORPG set in a fantasy world. The game has no in-game loading or instancing; the entire game world is a single map.", "developers": [{"id": "521816706268659715", "name": "Alchemic Dream Inc."}], "executables": [{"is_launcher": false, "name": "dnl.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "09b8d23fc7fd80ae810f432a4cc2e86e", "id": "451544430025900062", "name": "Dark and Light", "publishers": [{"id": "521816706268659714", "name": "Farlan Entertainment Ltd."}], "splash": "289f9a02504043d31bd65ef73c95210d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "529180", "sku": "529180"}], "type": 1, "verify_key": "6f7dfc509f2102487cb9c5a345c73e6e45f527d893bc2fe59e205726e83037f8"}, {"description": "A real-time strategy game from Eugen systems, players use historically accurate units while commanding real divisions from WW2. Battles take place in the Normandy theater, using maps faithfully recreated from wartime aerial photography.", "developers": [{"id": "521816690066194454", "name": "Eugen Systems"}], "executables": [{"is_launcher": false, "name": "steeldivision.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "51b7758142315d04359f2bab652fc142", "id": "451544463941304350", "name": "Steel Division: Normandy 44", "publishers": [{"id": "521816521249521702", "name": "Paradox Interactive AB"}], "splash": "f50b1de1021a95955dca9588e6236cbb", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "572410", "sku": "572410"}], "type": 1, "verify_key": "271ca31b821923f27b014ffb968b566c125b5766486acb77e798445fa75e5a5f"}, {"cover_image": "c7ef452295b98780dd996fd34622b2cc", "description": "This world is a Machine - A Machine for Pigs! Fit only for the slaughtering of Pigs! A first-person horror that will drag you to the depths of greed, power and madness.", "developers": [{"id": "521816681228664846", "name": "The Chinese Room"}], "executables": [{"is_launcher": false, "name": "machine for pigs/aamfp.exe", "os": "win32"}], "flags": 0, "guild_id": "608260170660708352", "hook": true, "icon": "c7ef452295b98780dd996fd34622b2cc", "id": "451544639674253322", "name": "Amnesia: A Machine for Pigs", "primary_sku_id": "451544639674253322", "publishers": [{"id": "521816498541428770", "name": "Frictional Games"}], "slug": "amnesia-a-machine-for-pigs", "splash": "72faf4836b87bfabcf4f56bf1c870695", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "239200", "sku": "239200"}], "type": 1, "verify_key": "86eec6e518557b4435cd83ab2bea482cdbe1130c30f631ec148b5792859a8e37"}, {"description": "A fan made game for Roosterteeth's RWBY animated internet series.", "developers": [{"id": "521816545874149376", "name": "Rooster Teeth Productions"}], "executables": [{"is_launcher": false, "name": "rwby-ge.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "405aab06ed9d87690e3ca84c1ae0e737", "id": "451544645852332032", "name": "RWBY: Grimm Eclipse", "publishers": [{"id": "521816545874149376", "name": "Rooster Teeth Productions"}], "splash": "1a7371877b5811330b78ad139f7fdb5c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "418340", "sku": "418340"}], "type": 1, "verify_key": "e5a049459dd786176adfb40261e60bb1241b3755693527914529d61469d3619d"}, {"description": "Capcom's Devil May Cry series gets a stylish new reboot from developer Ninja Theory, featuring a redesigned Dante and a new take on the franchise's fiction.", "developers": [{"id": "521816785801052162", "name": "Ninja Theory"}], "executables": [{"is_launcher": false, "name": "dmc-devilmaycry.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "05277d7d80b357bf481a38e8dec1b234", "id": "451544650009018368", "name": "DmC Devil May Cry", "publishers": [{"id": "521816574512857088", "name": "Capcom"}, {"id": "521816785801052162", "name": "Ninja Theory"}], "splash": "e0fcd92e332505e64d7a92a1b2d30a1e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "220440", "sku": "220440"}], "type": 1, "verify_key": "4fddb141520e5e1f5da2e8ce8b72730969fc64c5cd5110b8d4e9d9ea0c59a0aa"}, {"description": "Supreme Commander 2 is the sequel to the original Supreme Commander, a real-time strategy game with a focus on massive maps and large numbers of units.", "developers": [{"id": "521816566543810565", "name": "Gas Powered Games"}], "executables": [{"is_launcher": false, "name": "supremecommander2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ef5502a8903f61c4852d9380a9468eb8", "id": "451544676458037258", "name": "Supreme Commander 2", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}], "splash": "13e6995af1876c6e2c47da9237231af7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "40100", "sku": "40100"}], "type": 1, "verify_key": "9eb39d53b993e3830e5d7bff575e717d7d44db481b8a254b19db077c2831b42f"}, {"aliases": ["Deus Ex: Human Revolution"], "description": "The Director's Cut of Deus Ex: Human Revolution features redone boss battles, improved graphics, A.I. and combat, and all DLC released for the original game. The Wii U version makes use of the controller's screen to allow new features like map notes.", "developers": [{"id": "521816675516153863", "name": "Straight Right"}], "executables": [{"is_launcher": false, "name": "dxhrdc.exe", "os": "win32"}, {"is_launcher": false, "name": "dxhr.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8c62436ae85bedc87d8b3aaf5f742b5d", "id": "451544688713793536", "name": "Deus Ex: Human Revolution - Director's Cut", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}, {"id": "521816675516153861", "name": "Eidos Montreal"}], "splash": "fff3cc96a309a1df891fdfc49ba90d58", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "238010", "sku": "238010"}], "type": 1, "verify_key": "c215a846bd1265a472ad73661e4b4136d35d22536d2bcab65cea9aed4b9d9465"}, {"aliases": ["Freestyle 2: Street Basketball"], "description": "", "executables": [{"is_launcher": false, "name": "freestyle2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a14ebdb4e3d5b20a0b997c1de7c93abd", "id": "451544694267183104", "name": "FreeStyle 2: Street Basketball", "publishers": [{"id": "521816533270396928", "name": "Joycity"}], "splash": "d91bee82f82db0824c5c63fc40812dd0", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "339610", "sku": "339610"}], "type": 1, "verify_key": "f6e6086ca838fa8eb4be9271bd4d9f4f12170731a74556cdd27ac61bb657728c"}, {"cover_image": "03ddf51f1a270b2a545b426e6f66e21d", "description": "Furi is an ultra-responsive mix of fast-paced sword fighting and dual-stick shooting. Featuring character designs by Takashi Okazaki, creator of Afro Samurai and a explosive electro soundtrack.", "developers": [{"id": "521816539087896596", "name": "The Game Bakers"}], "executables": [{"is_launcher": false, "name": "furi.exe", "os": "win32"}], "flags": 0, "guild_id": "468417598544019468", "hook": true, "icon": "03ddf51f1a270b2a545b426e6f66e21d", "id": "451544694598533120", "name": "Furi", "publishers": [{"id": "521816539087896596", "name": "The Game Bakers"}], "splash": "48a17f78fc469cc0763c91c8e7c48484", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "423230", "sku": "423230"}], "type": 1, "verify_key": "2e2a4f4f9b1eddc5b14b8d171fdcca4de524e984709ab83310ac612c73527bf0"}, {"description": "The third major installment of the Street Fighter IV legacy adds characters and stages from Street Fighter X Tekken, a brand new fighter, new gameplay mechanics (including the ability to bring both Ultra Combos into the fight), and a variety of balance tweaks, training enhancements, and new modes.", "developers": [{"id": "521816600723324929", "name": "Dimps Corporation"}], "executables": [{"is_launcher": false, "name": "ssfiv.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a8a22b30abdb960eb80fefd5ce839466", "id": "451544694917169162", "name": "Ultra Street Fighter IV", "publishers": [{"id": "521816574512857088", "name": "Capcom"}], "splash": "21206c2f515cda2d00a641c5c5a21607", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "45760", "sku": "45760"}], "type": 1, "verify_key": "dbc48d4851dc453e4d5b27c1e0d29b3990a069727ec10e54ee241f37fed41c9c"}, {"aliases": ["Rift"], "description": "RIFT is a free-to-play fantasy MMORPG, developed by Trion Worlds.", "developers": [{"id": "521816577876951040", "name": "Trion Worlds"}], "executables": [{"is_launcher": false, "name": "rift_x64.exe", "os": "win32"}, {"is_launcher": false, "name": "rift/glyphclientapp.exe", "os": "win32"}, {"is_launcher": false, "name": "rift.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fb77c8d9933c2259d20e4465c413384d", "id": "451544729763446784", "name": "RIFT", "publishers": [{"id": "521816577876951040", "name": "Trion Worlds"}], "splash": "5e822f4f5b05fe2c1c402deb31500b17", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "39120", "sku": "39120"}], "type": 1, "verify_key": "b70238b868b4c3fee4d9eb77716fcb0ab3c27baf11b9a3d056572cdbf0b43948"}, {"description": "OneShot is a 8-bit puzzle adventure game that breaks the fourth wall to bring the player into the game.", "developers": [{"id": "521816735280660496", "name": "Team OneShot"}], "executables": [{"is_launcher": false, "name": "oneshot.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "73af69e1eac7d658dc40d5b25411630d", "id": "451544770876145664", "name": "OneShot", "publishers": [{"id": "521816735280660494", "name": "Degica Games"}], "splash": "41440f00c848502e361587cec3283567", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "420530", "sku": "420530"}], "type": 1, "verify_key": "43dfb9181046b533c6bbd922137432a5605208087cb3971fe6731f898f1f19c4"}, {"description": "High Octane Drift", "executables": [{"is_launcher": false, "name": "highoctanedrift.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fa16a557d272cfafbc76ad996354bf9b", "id": "451544776895103006", "name": "High Octane Drift", "publishers": [{"id": "521816631354327041", "name": "Cruderocks"}], "splash": "ee19f6843421cca2b6d72feaf1a97773", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "457330", "sku": "457330"}], "type": 1, "verify_key": "938b81ecb1772e07bd840d9f767f620645f084c56e182df116a70fca13c252c7"}, {"description": "Ruiner is a top down cyberpunk shooter from developer Reikon Games and publisher Devolver Digital", "developers": [{"id": "521816648278212633", "name": "Reikon Games"}], "executables": [{"is_launcher": false, "name": "ruiner-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3547985c6144e72365c5e83fdf99104d", "id": "451544819555237888", "name": "RUINER", "publishers": [{"id": "521816648278212633", "name": "Reikon Games"}, {"id": "521816510730338331", "name": "Devolver Digital"}], "splash": "2f5a26f4c0028d718b611e3333f4ca4d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "464060", "sku": "464060"}], "type": 1, "verify_key": "6b7c816ee0b644ecda6bf3756bd61ae5129e0a5b0fc95ba89620defc4251b0f2"}, {"aliases": ["Phantasy Star Online 2"], "description": "Phantasy Star Online 2 is a Japanese free-to-play online action-RPG which was released for PC in July 2012, and Vita in Feb 2013. The game has yet to be released in the West on any platform.", "developers": [{"id": "521816507676885013", "name": "Sonic Team"}], "executables": [{"is_launcher": false, "name": "pso2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "100f0e65e7bff083019294f7d36ded2a", "id": "451544889331679242", "name": "PHANTASY STAR ONLINE 2", "publishers": [{"id": "521816507676885010", "name": "Sega"}, {"id": "521816673422934016", "name": "SEGA Games Co., Ltd."}], "summary": "", "type": 1, "verify_key": "e778be66d08a89987868bd62e7e41f289cb066ac4568ae6b895c8af4405863ea"}, {"description": "", "executables": [{"is_launcher": false, "name": "swordwithsauce-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ab42bedca0d79c30aa979c0ca0669b5f", "id": "451544945984012288", "name": "Sword With Sauce: Alpha", "publishers": [{"id": "521816567030218762", "name": "Diatomic Games"}], "splash": "e823a9836863411a417df7111f4f2639", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "581630", "sku": "581630"}], "type": 1, "verify_key": "241dbce078b747ba336ce2fdab5ae90ee6de072c083c653978b05a69ae12e1f7"}, {"aliases": ["Mass Effect"], "description": "Humanity is still a newcomer on the futuristic galactic stage, and it's up to the charismatic Commander Shepard to investigate the actions of a rogue agent while under threat from a dangerous synthetic race known as the Geth.", "developers": [{"id": "521816589570408449", "name": "BioWare"}], "executables": [{"is_launcher": false, "name": "masseffect.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4c2c1b44392cc9910cada374ad3baa66", "id": "451544965542182942", "name": "Mass Effect\u2122", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}, {"id": "521816589570408449", "name": "BioWare"}], "summary": "", "third_party_skus": [{"distributor": "origin", "id": null, "sku": null}, {"distributor": "steam", "id": "17460", "sku": "17460"}], "type": 1, "verify_key": "c6ded768799ef8925435074bc2f4e0fde876cfc69f8d61d10370f93206e04d24"}, {"description": "Turmoil is an oil drilling simulation game available on Steam.", "developers": [{"id": "521816641772847126", "name": "Gamious"}], "executables": [{"is_launcher": false, "name": "turmoil_pc_full.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f0040d5a1305ee93f6f7263fa31c8a10", "id": "451545009938759710", "name": "Turmoil", "publishers": [{"id": "521816641772847126", "name": "Gamious"}], "splash": "b48958bbbdb653f55d911f7a0a963f81", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "361280", "sku": "361280"}], "type": 1, "verify_key": "837566ba648887e41b553269ab5343426776b5c216321cd344c2a2bed099fadb"}, {"description": "Worms Armageddon is the third instalment in the turn-based war game from Team17. Players attack their foes with a vast array of weapons.", "developers": [{"id": "521816571103019015", "name": "Team17 Software Limited"}], "executables": [{"is_launcher": false, "name": "wa.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3421456ffe816dda266c32464c204b11", "id": "451545039139766272", "name": "Worms Armageddon", "publishers": [{"id": "521816661138079767", "name": "MicroProse Software, Inc."}], "splash": "6f985021811fc4cb3d32658a0f6af865", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "217200", "sku": "217200"}], "type": 1, "verify_key": "d2be94cdf26a2f5e26aa6130cd35d673247117d25af687dec01e0742d4e09217"}, {"description": "Chase a rogue god over land and sea in this sequel to Pillars of Eternity. Captain your own ship on a dangerous voyage of discovery across the vast Deadfire Archipelago. Delve deeply into the story you create through the new character customization system, meaningful companion relationships, freedom of exploration, and a world that reacts to the complex, moral choices you\u2019ll have to make.", "developers": [{"id": "521816588169510930", "name": "Obsidian Entertainment"}], "executables": [{"is_launcher": false, "name": "pillarsofeternityii.exe", "os": "win32"}], "flags": 0, "guild_id": "306957465407324171", "hook": true, "icon": "7246c2af78599200fd201424780d0ed9", "id": "451545069326041099", "name": "Pillars of Eternity II: Deadfire", "primary_sku_id": "466696214818193408", "publishers": [{"id": "521816588169510930", "name": "Obsidian Entertainment"}], "slug": "pillars-of-eternity-ii-deadfire", "splash": "8dde9ff2d96bce8fa894c8109cccbf53", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "560130", "sku": "560130"}, {"distributor": "discord", "id": "466696214818193408", "sku": "466696214818193408"}], "type": 1, "verify_key": "aabcf988bd4ce911c15116af0b8b9ada9a3b7ef51384b3a28e3ec8a25dbdbe2e"}, {"cover_image": "d11f08ef71e97adc7f2a06ddc05e91eb", "description": "Build your very own PC empire, from simple diagnosis and repairs to bespoke, boutique creations that would be the envy of any enthusiast. With an ever-expanding marketplace full of real-world components you can finally stop dreaming of that ultimate PC and get out there, build it and see how it benchmarks in 3DMark!", "developers": [{"id": "521816737310572546", "name": "The Irregular Corporation"}], "executables": [{"is_launcher": false, "name": "pc building simulator/pcbs.exe", "os": "win32"}], "flags": 0, "guild_id": "479289346219048960", "hook": true, "icon": "d11f08ef71e97adc7f2a06ddc05e91eb", "id": "451545070739652608", "name": "PC Building Simulator", "primary_sku_id": "451545070739652608", "publishers": [{"id": "521816737310572546", "name": "The Irregular Corporation"}], "slug": "pc-building-simulator", "splash": "c83db0f4cae401bc38c7ea0f7429e8b4", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "621060", "sku": "621060"}], "type": 1, "verify_key": "175f9ffdade879d4843e3ee18c2428ed2f7e4126b694c9923fed9a21768d7dd1"}, {"description": "Streets of Rogue is a top-down rogue-lite that combines shooting, stealth, and role-playing elements in a procedurally generated city.", "developers": [{"id": "521816776561131530", "name": "Matt Dabrowski"}], "executables": [{"is_launcher": false, "name": "streetsofrogue.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "585d6e8b0f6826d4badc2ccaf706fcca", "id": "451545147361067008", "name": "Streets of Rogue", "publishers": [{"id": "521816524952961034", "name": "tinyBuild"}, {"id": "521816776561131530", "name": "Matt Dabrowski"}], "splash": "335b7dfe513c3ecc58975e27bf1cf43f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "512900", "sku": "512900"}], "type": 1, "verify_key": "9a2e07435950924a7af021991c04d0f1c12859adef9315997ae38de4fb89adc0"}, {"cover_image": "375318aaa8730f2073b1f38bb6779b49", "description": "Hitman: Absolution follows the Original Assassin undertaking his most personal contract to date. Betrayed by the Agency and hunted by the police, Agent 47 finds himself pursuing redemption in a corrupt and twisted world.", "developers": [{"id": "591189272623710209", "name": "IO Interactive A/S"}], "executables": [{"is_launcher": false, "name": "hma.exe", "os": "win32"}], "flags": 0, "guild_id": "451879555523805195", "hook": true, "icon": "ab893289d94235c9807b3d9ac0dff08b", "id": "451545240264769547", "name": "Hitman: Absolution", "overlay": true, "overlay_compatibility_hook": true, "primary_sku_id": "451545240264769547", "publishers": [{"id": "591189272623710209", "name": "IO Interactive A/S"}], "slug": "hitman-absolution", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "203140", "sku": "203140"}], "type": 1, "verify_key": "6af4ad2728b298a12e672e9b6df6f5801de300946140cf266648637cfcab4f2a"}, {"description": "Manage 2,500 football clubs and over 500,000 players in this updated simulation.", "developers": [{"id": "521816521731735570", "name": "Sports Interactive Limited"}], "executables": [{"is_launcher": false, "name": "football manager 2017/fm.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9320a1b14eb42311cc56e34d2080c322", "id": "451545279154487306", "name": "Football Manager 2017", "publishers": [{"id": "521816507676885010", "name": "Sega"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "482730", "sku": "482730"}], "type": 1, "verify_key": "046e0cae3421212ed436d0230630ec57d3b71aa9106bceffd0a847f5cdaff37e"}, {"description": "Atlas Reactor is a competitive team tactic, simultaneous turn-based multiplayer game. Two teams of four players choose heroes to battle in small arenas in death-match and objective based games.", "developers": [{"id": "521816577876951040", "name": "Trion Worlds"}], "executables": [{"is_launcher": false, "name": "atlas reactor/glyphclientapp.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e3dcd3c5b6edf66a238fe2803b140270", "id": "451545283784998934", "name": "Atlas Reactor", "publishers": [{"id": "521816577876951040", "name": "Trion Worlds"}], "splash": "966dfb22f6860bfdce7e54730abdb8c7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "402570", "sku": "402570"}], "type": 1, "verify_key": "085e49233bb65676b02f4904e31f89e37ee646a81ba989e9cae33a7c0eea45c2"}, {"description": "The long-awaited third Max Payne game finally arrived in May 2012, courtesy of Rockstar Vancouver. Eight years after the end of Max Payne 2, an aging, burnt-out Max finds one last chance to redeem himself while working as a bodyguard for a rich family in Brazil.", "developers": [{"id": "521816755988070412", "name": "Rockstar Vancouver"}], "executables": [{"is_launcher": false, "name": "maxpayne3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ff54bfd443df1da5317ddf35ceb69609", "id": "451545305201246208", "name": "Max Payne 3", "publishers": [{"id": "521816560537567257", "name": "Rockstar Games"}], "splash": "cfce10f8f854ac28b94e5c1f4ee6268f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "204100", "sku": "204100"}], "type": 1, "verify_key": "a933bc20e73a6d7ebe7ca7b9ad9e783c064d6019a27fecc1d421cda5188bf2af"}, {"description": "S.T.A.L.K.E.R: Shadow of Chernobyl is a First-Person-Shooter with many Role Playing elements. It's set in the Chernobyl Exclusion Zone after a second fictional explosion in the not too distant future. It is known for its atmosphere and relatively difficult gameplay.", "developers": [{"id": "521816551486259236", "name": "GSC Game World"}], "executables": [{"is_launcher": false, "name": "stalker shadow of chernobyl/bin/xr_3da.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ec70c6b18061d07d52a7d8bcd97b0d94", "id": "451545336218124289", "name": "S.T.A.L.K.E.R.: Shadow of Chernobyl", "publishers": [{"id": "521816551486259236", "name": "GSC Game World"}, {"id": "521816550596935692", "name": "THQ"}], "splash": "d337be244221c9e2d766ae9d4d4675fa", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "4500", "sku": "4500"}], "type": 1, "verify_key": "dcbf527b06d63aa970e0c88664f49c38ac0ac0e66173a6fc0065fb18589eaa1d"}, {"description": "A collection of various competitive games built from the ground up for VR.", "developers": [{"id": "521816514106621964", "name": "Against Gravity"}], "executables": [{"is_launcher": false, "name": "recroom_release.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8192a2b51d6c9a223fb62722b140cbf5", "id": "451545342987468800", "name": "Rec Room", "publishers": [{"id": "521816514106621964", "name": "Against Gravity"}], "splash": "6ef7389f18a8f6273b171d13b71ec791", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "471710", "sku": "471710"}], "type": 1, "verify_key": "709cd0a581875b3c149e9be8ec24f523344dc82b8f07c1eb8ce9e76b3b32c18d"}, {"description": "My Time at Portia is an open-world simulation RPG set in a post apocalyptic setting.", "developers": [{"id": "521816571103019013", "name": "Pathea Games"}], "executables": [{"is_launcher": false, "name": "portia.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "975720b4d5f8cf15dea37da31e42d972", "id": "451545373740367881", "name": "My Time At Portia", "publishers": [{"id": "521816571103019013", "name": "Pathea Games"}, {"id": "521816571103019015", "name": "Team17 Software Limited"}], "splash": "988063ac52b109982c391c3c5a1f8f3b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "666140", "sku": "666140"}], "type": 1, "verify_key": "42b11d31cb1f15ca657f7219905ec8d635e0ae596d4297dbf0cd6653c80e54aa"}, {"description": "Lost Castle is an action RPG beat'em up game with rogue-like elements and randomized dungeons.", "executables": [{"is_launcher": false, "name": "lost_castle.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4462920806def126bffe7be6876e22ca", "id": "451545409253408768", "name": "Lost Castle", "publishers": [{"id": "521816559031812100", "name": "Another Indie"}, {"id": "521816559031812102", "name": "Hunter Studio"}], "splash": "d727e256f7d18119caf988344f67bd2e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "434650", "sku": "434650"}], "type": 1, "verify_key": "6c5b8b02c7c4be96e6f35e7c94813290da08066c580b414fea345e442ff753f4"}, {"description": "RPG/dungeon-crawler with focus on team-building and looting. Upgrade your tavern with new sodas to attract new adventurers!", "developers": [{"id": "521816551486259234", "name": "Afro-Ninja Productions"}], "executables": [{"is_launcher": false, "name": "soda dungeon/dungeon.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b4b8c9d4da24c25aff5b259825099741", "id": "451545721036996619", "name": "Soda Dungeon", "publishers": [{"id": "521816551486259232", "name": "Armor Games"}], "splash": "0e4ddd3ea909751c305bfda0b082d9e9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "564710", "sku": "564710"}], "type": 1, "verify_key": "ff630f1c90e63dc67158a4c3373c560cbd2b13148f9c3ecf07529775dc12fe9a"}, {"aliases": ["Fallout 3 - Game of the Year Edition", "Fallout 3 GOTY edition"], "description": "", "executables": [{"is_launcher": false, "name": "fallout3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "04e90a72f1567b8f55165ae0cecf0c03", "id": "451545729253638144", "name": "Fallout 3", "publishers": [{"id": "521816519768932355", "name": "Bethesda Game Studios"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "22300", "sku": "22300"}, {"distributor": "steam", "id": "22370", "sku": "22370"}], "type": 1, "verify_key": "e70d4ddd0f35a7c3f175191d97f3382c607afc0d21393a2ae4bea50679e2e7ab"}, {"aliases": ["Running with Rifles"], "description": "A top-down, open-world shooter.", "developers": [{"id": "521816514630778880", "name": "Modulaatio Games"}], "executables": [{"is_launcher": false, "name": "rwr_game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f12a5b97a8e3c80b65506ea58b8dc875", "id": "451545786946289664", "name": "RUNNING WITH RIFLES", "publishers": [{"id": "521816514630778880", "name": "Modulaatio Games"}], "splash": "25dff1072208b223ae1ce6529660eb55", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "270150", "sku": "270150"}], "type": 1, "verify_key": "f41c40e19f546e31648b10cb3f51a9a4d1877318700ada57967751d1aafb83d9"}, {"description": "A text game simulating chat conversations during several years between the player and an old friend from high school. Written for the 21st Annual Interactive Fiction Competition by Kyle Seeley.", "developers": [{"id": "521816728213258250", "name": "Kyle Seeley"}], "executables": [{"is_launcher": false, "name": "emily is away.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "387bb216b6a213283e9efbfa2b0ab979", "id": "451545806806319104", "name": "Emily is Away", "publishers": [{"id": "521816728213258250", "name": "Kyle Seeley"}], "splash": "e995ecf48500fa86092d6088c78841bd", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "417860", "sku": "417860"}], "type": 1, "verify_key": "2abeb48ac1db5ed1cb9803dc4c6157a890d991b4d345cef468ca744eb7c384a4"}, {"description": "3-5 minute strategy battles in turn-based, hex grid tactics within a world comprised of monsters.", "developers": [{"id": "521816786832982050", "name": "Camex"}], "executables": [{"is_launcher": false, "name": "tactical monsters.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9a91b8ad0b44caff47757ef1609a2725", "id": "451545859830710272", "name": "Tactical Monsters Rumble Arena", "publishers": [{"id": "521816786832982050", "name": "Camex"}], "splash": "e3d0f450e4b57668fc42739925a5b5ba", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "705220", "sku": "705220"}], "type": 1, "verify_key": "654ecf8aae0448a26b2a0d2785b8a7710d67a1626dbb5a29f186e96ce3034348"}, {"description": "The first game from Overkill Software (headed by the founders of former studio GRIN), Payday is a fast-paced crime-themed first-person shooter that lets teams of players conduct robberies and other criminal activities while fending off waves of cops.", "developers": [{"id": "521816586101850132", "name": "Overkill Software"}], "executables": [{"is_launcher": false, "name": "payday_win32_release.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0b5a98a56a970a8c62e497bf2b9063c7", "id": "451546040382914567", "name": "PAYDAY: The Heist", "publishers": [{"id": "521816500974256130", "name": "Daybreak Games"}], "splash": "a520e39d14b484f504ac6fcc60498b7b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "24240", "sku": "24240"}], "type": 1, "verify_key": "578e5e9462b6cb2fd2892c3e6e5a9a589e7cd74776386c22a087feb873d83243"}, {"description": "Brick Rigs is a sandbox building and driving game with dynamic destruction physics.", "executables": [{"is_launcher": false, "name": "brickrigs-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "bf1f71d8d78b8ed7257c53796d58f904", "id": "451546081243824131", "name": "Brick Rigs", "publishers": [{"id": "521816605827661843", "name": "Lukas Rustemeyer"}], "splash": "f4e8944243e86313e81943bc73903955", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "552100", "sku": "552100"}], "type": 1, "verify_key": "2918f8afb1a4440cbb0a354aa6beadf39593b9974a71f3afb23b4af9dc7f8b62"}, {"description": "A space action MMO being developed by StarGem Inc for the PC and Mac. Currently in open beta, featuring multiple competitive multiplayer game modes.", "developers": [{"id": "521816766788272134", "name": "StarGem Inc"}], "executables": [{"is_launcher": false, "name": "star conflict/game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "23ae67efc739a9d057038233a2141c78", "id": "451546138999390208", "name": "Star Conflict", "publishers": [{"id": "521816505688522752", "name": "Gaijin Entertainment"}, {"id": "521816766788272130", "name": "Star Gem Inc."}], "splash": "e8d2367889ff26e504617e983f6f4ec8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "212070", "sku": "212070"}], "type": 1, "verify_key": "58059c9de1859d9ca494fc1a4d6f50a18fb99089623c1b7b311493f313d0fb39"}, {"description": "AdventureQuest 3D is a cross-platform MMO RPG made by Artix Entertainment. Players can play on their PC and carry on with the same character and progress on their mobile device.", "developers": [{"id": "521816574512857090", "name": "Artix Entertainment"}], "executables": [{"is_launcher": false, "name": "aq3d.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7d8ad1935175cba60b184e67c654895a", "id": "451546156024201217", "name": "AdventureQuest 3D", "publishers": [{"id": "521816574512857090", "name": "Artix Entertainment"}], "splash": "e473b93d04d49def0c28d48a9e8f8c3d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "429790", "sku": "429790"}], "type": 1, "verify_key": "90efad9c229d2b27d97a6654f2b924f05f883df5b91c6e91276725667121be6f"}, {"description": "Bayonetta is a \"stylish action game\" from PlatinumGames. The titular character is a witch who can use hair-based magic, as well as firearms attached to her feet, to battle fallen angels and other foes.", "developers": [{"id": "521816725793275924", "name": "PlatinumGames"}], "executables": [{"is_launcher": false, "name": "bayonetta.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8d2cd7d231176a4fe1e3a38b203754cd", "id": "451546169685049344", "name": "Bayonetta", "publishers": [{"id": "521816507676885010", "name": "Sega"}, {"id": "521816725793275924", "name": "PlatinumGames"}], "splash": "51feb7f51015d5595ed80d0c939928c9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "460790", "sku": "460790"}], "type": 1, "verify_key": "8f20780d6e137306801ce3a091de847c1ef521ea6b89b143c1772d79b2ebd352"}, {"description": "Battle other badly drawn 2D stickman online while jumping around like a lunatic and getting blown up into smithereens.", "executables": [{"is_launcher": false, "name": "boringmangame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7316f6109142b0c77ffd5f3fcc76ca33", "id": "451546227696205844", "name": "Boring Man - Online Tactical Stickman Combat", "publishers": [{"id": "521816712778350613", "name": "Spasman Games"}], "splash": "1f4b2f4d8ac221060b7fde8b3fce0efd", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "346120", "sku": "346120"}], "type": 1, "verify_key": "9831975f76102685cfe30b8e2c7893dcc49411f24fa89ba51d7dc86ace449af8"}, {"aliases": ["Mass Effect 2"], "description": "After a violent death by an unknown force and a timely reanimation by the human supremacist organization Cerberus, Commander Shepard must assemble a new squad in the seedier side of the galaxy for a suicide mission in the second installment of the \"Mass Effect\" trilogy.", "developers": [{"id": "521816589570408449", "name": "BioWare"}], "executables": [{"is_launcher": false, "name": "masseffect2.exe", "os": "win32"}, {"is_launcher": false, "name": "mass effect 2/binaries/me2game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "910afd8d258e188b460c019205f57db7", "id": "451546229252554752", "name": "Mass Effect\u2122 2", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "summary": "", "third_party_skus": [{"distributor": "origin", "id": null, "sku": null}], "type": 1, "verify_key": "0e97f0691549236f80bd5787b24ab0c239b432e0fead0c642013d8bf6f7899c7"}, {"description": "Legendary swordsman and mercenary Lo Wang is back, and this time he brought friends.", "developers": [{"id": "521816530397298689", "name": "Flying Wild Hog"}], "executables": [{"is_launcher": false, "name": "shadowwarrior2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d037fa7c6798fcd28e76e21e8ef954d4", "id": "451546331639709706", "name": "Shadow Warrior 2", "publishers": [{"id": "521816510730338331", "name": "Devolver Digital"}, {"id": "521816530397298689", "name": "Flying Wild Hog"}], "splash": "f48baae7c630c203e658f3bb01ce68e5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "324800", "sku": "324800"}], "type": 1, "verify_key": "b16ae687fe1c70bf28688fca4d992970efd6e035431e53b13801093dab29e4e7"}, {"aliases": ["Dark Souls II"], "description": "Blood, souls, and tears are continually spent as players traverse the land of Drangleic in FromSoftware's third entry in the Souls series.", "developers": [{"id": "521816537653444611", "name": "FromSoftware, Inc."}], "executables": [{"is_launcher": false, "name": "darksoulsii.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1d29f353b2c59f353747b66d37ec0713", "id": "451546403764830218", "name": "DARK SOULS\u2122 II", "overlay": true, "publishers": [{"id": "521816537653444609", "name": "FromSoftware, Inc"}, {"id": "521816537653444610", "name": "Bandai Namco Entertainment"}], "splash": "95ac05d8e7fbf7c49f79cd011f46805f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "236430", "sku": "236430"}], "type": 1, "verify_key": "64286fd99b941c13c2021579805ddba13707b55c6f56f8251fd2abb6aa7e3ff9"}, {"description": "The fifth installment in the Total War series from The Creative Assembly. Empire: Total War features the series' hallmark blend of real-time strategic battles, and turn-based empire building. Empire takes place during the 18th century \u2014 an age of imperial expansion, trade, rifles and cannons.", "developers": [{"id": "521816720503996437", "name": "The Creative Assembly"}], "executables": [{"is_launcher": false, "name": "empire.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f78df49783b7b25370b910b0b717b68d", "id": "451546468763959326", "name": "Empire: Total War", "publishers": [{"id": "521816507676885010", "name": "Sega"}], "splash": "3b0e124db545fe4ffec3f0f1b2300fbf", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "10500", "sku": "10500"}], "type": 1, "verify_key": "07a3bb885da7fe5fbab4dd3125249c5c480a71629b44d2efd247a5c1e4bd42d1"}, {"description": "Burnout Paradise turns the Burnout series on its head by moving from closed set tracks to an open world full of events to experience both alone and in a group online.", "developers": [{"id": "521816761948045361", "name": "Criterion Games"}], "executables": [{"is_launcher": false, "name": "burnoutparadise.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1e91d437fef42becac7065c750a6cdbd", "id": "451546473801187348", "name": "Burnout Paradise: The Ultimate Box", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "splash": "2c9532815b929948be6f0836e71087ed", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "24740", "sku": "24740"}], "type": 1, "verify_key": "5532f292ea7b446ccd2f97c64e0a560ff1ef658c97d32760bc2e19ede345a01a"}, {"description": "A first person multiplayer sports game with rules similar to soccer.", "executables": [{"is_launcher": false, "name": "supraball/binaries/win64/udk.exe", "os": "win32"}, {"is_launcher": false, "name": "supraball/binaries/win32/udk.exe", "os": "win32"}], "flags": 0, "guild_id": "265277423329738752", "hook": true, "icon": "7ba268107d821db4abe1291dc18d7613", "id": "451546491866316800", "name": "Supraball", "publishers": [{"id": "521816612626497539", "name": "Supra Games"}], "splash": "76b7bdb60e51d5481313c7b03c4bf80e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "321400", "sku": "321400"}], "type": 1, "verify_key": "b7ae5faf5350a95fb1060af53c6fa70e2d08dd87ca56997e1d11bfdfe9e03f52"}, {"description": "First person survival game with 4-player Online Co-Op.", "executables": [{"is_launcher": false, "name": "desolate/binaries/win64/sh-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f184a5eabf0e0cb0cdb035939e6c13b2", "id": "451546514775474195", "name": "Desolate", "publishers": [{"id": "521816581924192300", "name": "Nearga"}], "splash": "7b876f993268cc148cc392b20c167e41", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "671510", "sku": "671510"}], "type": 1, "verify_key": "cd8a319e377b928a3a84decb0b7c19b0a772c785d24650b5a693762403ea1c75"}, {"description": "Operation Arrowhead is the first stand-alone expansion pack to Bohemia Interactive's war simulator, ARMA II. Set soon after the events of ARMA 2.", "developers": [{"id": "521816510172233760", "name": "Bohemia Interactive Studio"}], "executables": [{"is_launcher": false, "name": "arma2oa_be.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3dacdae6900b5eb0890ca72b300265e1", "id": "451546514943377438", "name": "Arma 2: Operation Arrowhead", "publishers": [{"id": "521816623976415269", "name": "Meridian4"}], "splash": "940029401fe36ff44106edddac1201cf", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "33930", "sku": "33930"}], "type": 1, "verify_key": "e6e2cd26f0b70d3fcf53f33b620100d8197660732c961a875e16c2bd6bb42f89"}, {"aliases": ["MU LEGEND GLOBAL"], "description": "MU Legend is a top down MMORPG from Webzen and the sequel to 2003's MU Online.", "developers": [{"id": "521816587041505290", "name": "Webzen Games Inc."}], "executables": [{"is_launcher": false, "name": "mulegend.exe", "os": "win32"}], "flags": 0, "guild_id": "282112491612405760", "hook": true, "icon": "cb694a5ef651fbbdd1f5f20383a7d8b8", "id": "451546558706614292", "name": "MU Legend", "publishers": [{"id": "521816642292809769", "name": "Webzen"}], "summary": "", "type": 1, "verify_key": "ea05c1adcb24fa780d3e7e4693d25bb859ee736531636872da1722b2b1281d60"}, {"description": "House Party", "executables": [{"is_launcher": false, "name": "houseparty.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fb23e3fec6a49eafeac5f2ba43aee482", "id": "451546699177918464", "name": "House Party", "publishers": [{"id": "521816767941836802", "name": "Eek! Games"}], "splash": "a714eac9efacd951d46855cc5241af7c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "611790", "sku": "611790"}], "type": 1, "verify_key": "5c41fb94ef0d3a8ea87c8b64e7f1a846733838c6d59cb4940c80ebaa26ee123e"}, {"description": "Relic Hunters Zero is an free open-source shooter where players battle it out with evil space ducks and turtles.", "developers": [{"id": "521816532288798735", "name": "Rogue Snail"}], "executables": [{"is_launcher": false, "name": "relichunterszero.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ff1edfd467d380535e6529a6a5ab367b", "id": "451546725606359050", "name": "Relic Hunters Zero", "publishers": [{"id": "521816532288798735", "name": "Rogue Snail"}], "splash": "cd8159b9d38fbeee36da5e56822adcc5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "382490", "sku": "382490"}], "type": 1, "verify_key": "ce3bc9d24c427457f4786398cd8573c391e155f47f06353e48c7776b15573c89"}, {"description": "EverQuest is one of the original MMOs that helped to define the genre. With twenty-four expansion packs, this game is still enjoyed by thousands all over the world.", "developers": [{"id": "521816725247754269", "name": "Verant Interactive"}], "executables": [{"is_launcher": false, "name": "eqclient.exe", "os": "win32"}, {"is_launcher": false, "name": "eqgame.exe", "os": "win32"}], "flags": 0, "guild_id": "228604818057330688", "hook": true, "icon": "6b8d8a7bc504e4680e3127c4a3b27c70", "id": "451546783668109322", "name": "EverQuest", "publishers": [{"id": "521816682155737088", "name": "Sony Online Entertainment"}, {"id": "521816500974256130", "name": "Daybreak Games"}], "summary": "", "type": 1, "verify_key": "033a98c8d789820beccd972c6fab936825b1495a03052c77be2c7d79180f1803"}, {"description": "Developed by Carbine Studios and published by NCsoft, WildStar is a Sci-Fi/Fantasy MMORPG.", "developers": [{"id": "521816560537567253", "name": "Carbine Studios"}], "executables": [{"is_launcher": false, "name": "wildstar.exe", "os": "win32"}, {"is_launcher": false, "name": "wildstar64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "950a98d272f31cfa64a584aed0e7af76", "id": "451546896167731220", "name": "WildStar", "publishers": [{"id": "521816560051159044", "name": "NCsoft Corporation"}, {"id": "521816560537567249", "name": "NCSOFT"}], "summary": "", "type": 1, "verify_key": "c7d9b16ac704dc66b045b68a84f289355cb341e7db51eddf9c5172b93c3ea0c7"}, {"description": "Lag Studios' first-person adventure game where players traverse the 1000-room mansion of the cute ghost girl, Spooky; there they encounter disturbing specimens and various send-ups of classic video game horror and modern \"YouTube-bait\" horror tropes.", "developers": [{"id": "521816597074018304", "name": "Lag Studios"}], "executables": [{"is_launcher": false, "name": "spooky's house of jump scares/spooky.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2678f1df95ecc0fea83ed97b433aaaa1", "id": "451546955513069594", "name": "Spooky's Jump Scare Mansion", "publishers": [{"id": "521816597074018304", "name": "Lag Studios"}], "splash": "98c43e1e2b75e3750d6b04f81b305084", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "356670", "sku": "356670"}], "type": 1, "verify_key": "5acb31dcfd425c8b1ad7be7fc1c1f5982252e21c60ff638605e684e0155bcbbf"}, {"description": "S.T.A.L.K.E.R.:Call Of Pripyat (\u0417\u043e\u0432 \u041f\u0440\u0438\u043f\u044f\u0442\u0438) is the third game in the S.T.A.L.K.E.R. franchise, and picks up shortly after the events of the original game. Call of Pripyat takes elements from both the original game and the prequel, Clear Sky, and is generally considered the most polished and most accessible game in the series.", "developers": [{"id": "521816551486259236", "name": "GSC Game World"}], "executables": [{"is_launcher": false, "name": "stalker call of pripyat/bin/xrengine.exe", "os": "win32"}, {"is_launcher": false, "name": "stalker call of pripyat/stalker-cop.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c050b49a4880717f1bdc5e9a408946c7", "id": "451547035104051200", "name": "S.T.A.L.K.E.R.: Call of Pripyat", "publishers": [{"id": "521816551486259236", "name": "GSC Game World"}, {"id": "521816551486259238", "name": "bitComposer Games"}], "splash": "1c10b79ad68a738470d7a5c387eb9cf6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "41700", "sku": "41700"}], "type": 1, "verify_key": "15f0b78da4ce61b4cb8192e2741789245746c51f84c86d733be4cedb0a1f3405"}, {"description": "Fort is a physics-based RTS game of building, battling and causing rubble.", "developers": [{"id": "521816707850043392", "name": "EarthWork Games"}], "executables": [{"is_launcher": false, "name": "forts.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "54f5ce2af2cc942a3a108ab64242547e", "id": "451547094121971712", "name": "Forts", "publishers": [{"id": "521816707850043392", "name": "EarthWork Games"}], "splash": "dc5cf1f1b68eb0c5b4b05a0f477910f1", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "410900", "sku": "410900"}], "type": 1, "verify_key": "ae229c8d0bbf1490bf8b3590c6994efc01acade4e4e75a52d3810103737d624d"}, {"description": "Heroes of Newerth is a free-to-play, stand alone MOBA-game developed by S2 Games.", "developers": [{"id": "521816592674193435", "name": "S2 Games, LLC"}], "executables": [{"is_launcher": false, "name": "hon.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fef7b4a27491e2e7c1cd3f5ef930d0c8", "id": "451547098916192284", "name": "Heroes of Newerth", "publishers": [{"id": "521816592208756749", "name": "S2 Games"}, {"id": "521816592674193435", "name": "S2 Games, LLC"}], "summary": "", "type": 1, "verify_key": "6dbce3dc88ee6a5d11049d22d8f38d128c85efd04015590ec4be0f1077fe2325"}, {"description": "After crash-landing on a distant planet, you must build a colony with your friends, battle others and explore the system prospecting for riches. Discover, fight, and tame indigenous alien creatures or search for lost human expeditions.", "developers": [{"id": "521816784660070429", "name": "Fenix Fire"}], "executables": [{"is_launcher": false, "name": "osirisnewdawn.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "332ceeb27804effd4884fdbbef40cc92", "id": "451547204340023296", "name": "Osiris: New Dawn", "publishers": [{"id": "521816784660070425", "name": "Reverb Triple XP"}, {"id": "521816784660070427", "name": "Fenix Fire Entertainment"}], "splash": "bb5fd14a2226a5a240829a2b7c5db365", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "402710", "sku": "402710"}], "type": 1, "verify_key": "8ba5ede7d092c09f29596f32fd17b745b140a8005f670701b3c6f7c8057f2977"}, {"description": "Legendary, quick-witted swordsman Lo Wang returns to fight demonic forces in this total re-imagining of 3D Realms' 1997 Asia-themed first-person shooter of the same name.", "developers": [{"id": "521816530397298689", "name": "Flying Wild Hog"}], "executables": [{"is_launcher": false, "name": "dx11/sw.x64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "87809faaa4ac30842f4ba548407e1d25", "id": "451547262418419712", "name": "Shadow Warrior", "publishers": [{"id": "521816510730338331", "name": "Devolver Digital"}], "splash": "5288dc2a78bb439d9534ca863cc86650", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "233130", "sku": "233130"}], "type": 1, "verify_key": "890e8b0141ae619956cb9ff08617b66959be792db23c556299721e22b74213e1"}, {"description": "The fourth iteration of the U.S. Army's free first-person shooter.", "developers": [{"id": "521816781770457098", "name": "U.S. Army"}], "executables": [{"is_launcher": false, "name": "aagame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "608670f76127fa2d3142334d5f703182", "id": "451547323596537866", "name": "America's Army: Proving Grounds", "publishers": [{"id": "521816781770457098", "name": "U.S. Army"}], "splash": "868f1b02eb7ab321627b8e4eb82ac5e3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "203290", "sku": "203290"}], "type": 1, "verify_key": "31a80964676a333233cbec186e87dd53b8cbd1e4968f98cbc59a39a2f999f033"}, {"description": "", "executables": [{"is_launcher": false, "name": "aion.bin", "os": "win32"}], "flags": 0, "hook": true, "icon": "39c56122a7cf7c3423202a3022fb0ff1", "id": "451547384975982602", "name": "AION Free-to-Play", "publishers": [{"id": "521816560537567249", "name": "NCSOFT"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "261430", "sku": "261430"}], "type": 1, "verify_key": "31e37d7ccd59254bd4019c26a258715de8c54b9d531acd1af9e9d14b804cb255"}, {"description": "An upcoming castle builder / real-time strategy game. It is the first polygonal 3D title in the series.", "developers": [{"id": "521816784660070421", "name": "FireFly Studios Ltd."}], "executables": [{"is_launcher": false, "name": "crusader2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "54f6e04f9f27c279e1eaa966ce1854f1", "id": "451547401594077184", "name": "Stronghold Crusader 2", "publishers": [{"id": "521816602132611105", "name": "Firefly Studios"}, {"id": "521816784660070421", "name": "FireFly Studios Ltd."}], "splash": "83d4f8387426ecef99e65b655aee675e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "232890", "sku": "232890"}], "type": 1, "verify_key": "f861b00d8656fa8f761166900c616e5f07944b8e41f3033a1ba89f59994cf48f"}, {"description": "A 2D platforming action-adventure developed by D-pad Studios for PC.", "developers": [{"id": "521816627344441345", "name": "D-pad Studio"}], "executables": [{"is_launcher": false, "name": "owlboy.exe", "os": "win32"}], "flags": 0, "guild_id": "242640695117086721", "hook": true, "icon": "51aa1cfa6176f41cba7444f6efc2aab3", "id": "451547470967865345", "name": "Owlboy", "publishers": [{"id": "521816627344441345", "name": "D-pad Studio"}], "splash": "dffbeb40e87863105c483ac7c6563882", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "115800", "sku": "115800"}], "type": 1, "verify_key": "9a382ca4cb62706bbc2a318f10a25ef7db5e6a74703a08ee6a6ee0f6fea3c760"}, {"description": "Reigns is a kingdom management game from Nerial.", "developers": [{"id": "521816800044777472", "name": "Nerial"}], "executables": [{"is_launcher": false, "name": "reigns.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1d00f4865f1a049b4f5a097fb375271e", "id": "451547889982898176", "name": "Reigns", "publishers": [{"id": "521816510730338331", "name": "Devolver Digital"}], "splash": "aea44be63351594e02b77e1767445774", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "474750", "sku": "474750"}], "type": 1, "verify_key": "2571b0a14742847afba02be29a6b241b922efd11ef088a836044b8ee19900afe"}, {"description": "", "executables": [{"is_launcher": false, "name": "zula_launcher.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a5f389da430eed4d3fb87c4d634ef7b1", "id": "451547924531249152", "name": "Zula Online", "publishers": [{"id": "521816709490016258", "name": "Madbyte Games"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "714210", "sku": "714210"}], "type": 1, "verify_key": "c89ec68de0556daceb1dc7a863cd3a2c9be0b9e1bc7d0edf525a804f088d1f91"}, {"description": "The sixteenth mainline entry in the long-running Tales action-RPG series, following the exploits of a pirate named Velvet.", "developers": [{"id": "521816537653444610", "name": "Bandai Namco Entertainment"}], "executables": [{"is_launcher": false, "name": "tales of berseria.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "28112a96abd2b80f45a6dce1ddeaa3ad", "id": "451548231223214080", "name": "Tales of Berseria", "publishers": [{"id": "521816537653444610", "name": "Bandai Namco Entertainment"}, {"id": "521816782479163394", "name": "BANDAI NAMCO Studios Inc."}], "splash": "4e7aa1074043e48e5ba0ec9dc01cdee7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "429660", "sku": "429660"}], "type": 1, "verify_key": "d79693ee628c2dc23220a3fec9981ef07579dd11d33f2654859fca0e15315ebc"}, {"description": "Shooty Skies is an endless arcade flyer from the creators of Crossy Road.", "developers": [{"id": "521816556720619536", "name": "Mighty Games"}], "executables": [{"is_launcher": false, "name": "shootyskies.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e246ada58f0f4b7e01dd26fb86d07193", "id": "451548290740387850", "name": "Shooty Skies", "publishers": [{"id": "521816556720619536", "name": "Mighty Games"}], "splash": "674da380e44fdd80cd2fd50e9f32c4f1", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "702810", "sku": "702810"}], "type": 1, "verify_key": "65adaa2b0891f7a96f38ce0a1275d0fbc96dd5d4a9fb655624afcf163ee5dd74"}, {"description": "A management simulation game where players run and manage their own camera girl operations.", "developers": [{"id": "521816734374559755", "name": "HuniePot"}], "executables": [{"is_launcher": false, "name": "huniecamstudio.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "16ce25fb950c2f431abcf263d461a782", "id": "451548751010725888", "name": "HunieCam Studio", "publishers": [{"id": "521816734374559755", "name": "HuniePot"}], "splash": "e3ebf52c19fdce5b765d4172c2828b08", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "426000", "sku": "426000"}], "type": 1, "verify_key": "4791f10aa6d4f19e2f94dc4e662ee5fa5c0fea708d2d352e7f3a2f56a8ecdd70"}, {"description": "Bomber Crew is a game about managing the crew of a Lancaster bomber throughout its WW2 campaign.", "developers": [{"id": "521816568473059339", "name": "Runner Duck"}], "executables": [{"is_launcher": false, "name": "bombercrew.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f3d30214428e568f972c6a929b5a98e5", "id": "451548752046587915", "name": "Bomber Crew", "publishers": [{"id": "521816552501411877", "name": "Curve Digital Entertainment"}], "splash": "bd56789351a718da474c11142fd95ed0", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "537800", "sku": "537800"}], "type": 1, "verify_key": "e6f3597d5ec44b92aaf6fd060769b17a81ca2f0a59852768739bc8a16669b294"}, {"description": "Line of Sight is a modern military FPS online game and it is currently available on Steam Early Acccess", "executables": [{"is_launcher": false, "name": "lsgame_be.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "119b5f1c23a085e92ca2367b0e560bb2", "id": "451548957361831946", "name": "Line of Sight", "publishers": [{"id": "521816785197203458", "name": "BlackSpot Entertainment"}], "splash": "32854deadacccdb7f3c7c56297bdee7b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "436520", "sku": "436520"}], "type": 1, "verify_key": "84bebf07e13b930136f5ca943aafee821b3b0a3b1908d72598866e26cd6387ed"}, {"aliases": ["S.K.I.L.L. - Special Force 2 ", "Special Force 2 SEA"], "description": "Fast paced first-person shooter from Gameforge 4D GmbH.", "developers": [{"id": "521816736891273218", "name": "Dragonfly Game Design, LLC"}], "executables": [{"is_launcher": false, "name": "skill/dfubg.exe", "os": "win32"}, {"is_launcher": false, "name": "s.k.i.l.l/binaries/win32/sf2.exe", "os": "win32"}, {"is_launcher": false, "name": "skill/dfufg.exe", "os": "win32"}, {"is_launcher": false, "name": "games/specialforce2/binaries/win32/sf2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "81aae327b845ac6ee8e95901f8fd751a", "id": "451549001511075860", "name": "S.K.I.L.L. - Special Force 2", "publishers": [{"id": "521816736891273216", "name": "Dragonfly GF Co., LTD"}, {"id": "521816498541428766", "name": "GameForge"}], "splash": "b6a994e3ad39dd9b95b13dcb9b9bf1ce", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "286940", "sku": "286940"}], "type": 1, "verify_key": "67826e1952447e0d19b5726bb9cd4f96ffe27d4bd1fc6570c5ad3c77d3e36cfb"}, {"description": "Mini Metro is a minimalist subway layout puzzle game. The task is to draw routes between the stations to connect them with subway lines.", "developers": [{"id": "521816608445038606", "name": "Dinosaur Polo Club"}], "executables": [{"is_launcher": false, "name": "minimetro.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "53e5cdf9e8fbd2a1aa4dc543f26b0ced", "id": "451549165361823769", "name": "Mini Metro", "publishers": [{"id": "521816608445038606", "name": "Dinosaur Polo Club"}], "splash": "04b5db7997fffbb447f92449cf084728", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "287980", "sku": "287980"}], "type": 1, "verify_key": "46a42d0aa5870fb93eafa95b24b8e84453e2db7f265d8dbad3e2c0b9ba981597"}, {"description": "The first game coming out of the newly created Spiral Game Studios. Based on the Half Life 2 mod Orion.", "developers": [{"id": "521816752649404429", "name": "Spiral Game Studios"}], "executables": [{"is_launcher": false, "name": "dinohordegame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "902b084965ea986fa7c6bf213a666ca1", "id": "451549177885753345", "name": "ORION: Prelude", "publishers": [{"id": "521816752649404429", "name": "Spiral Game Studios"}], "splash": "b96d4e62fdd8011a2e0174665853cce3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "104900", "sku": "104900"}], "type": 1, "verify_key": "9534d3d58baa688f783cbc3f4898c10e4a8272e6205349592680b2971af7f8c6"}, {"description": "Tricky Towers is a multiplayer, physics-based, tower-building puzzle game.", "developers": [{"id": "521816626904170511", "name": "WeirdBeard"}], "executables": [{"is_launcher": false, "name": "trickytowers.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f8dab6cd521d8a72ca41bde7596f6b77", "id": "451549293946470400", "name": "Tricky Towers", "publishers": [{"id": "521816626904170511", "name": "WeirdBeard"}], "splash": "7b3973924308d733219aed52a581da57", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "437920", "sku": "437920"}], "type": 1, "verify_key": "53dbe9aff4415062b1a21443b58cbdf97fe69629d4edcfe82f88308de31d0fde"}, {"description": "A parody of the popular \"Simulator\" series of games depicting realistic takes on generally boring careers, Surgeon Simulator 2013 is a wildly unrealistic depiction of kidney, heart, and brain surgery where the primary challenge comes from the game's deliberately awkward controls.", "developers": [{"id": "521816516593975297", "name": "Bossa Studios"}], "executables": [{"is_launcher": false, "name": "surgeon simulator/ss2013.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3700f2b3b2f3e4ab89fa3f9585782767", "id": "451549334320971776", "name": "Surgeon Simulator", "publishers": [{"id": "521816516593975297", "name": "Bossa Studios"}], "splash": "08de1a1587ed25db22f61573bd05bdb1", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "233720", "sku": "233720"}], "type": 1, "verify_key": "76cc09b6efae1e2ca2769f8aafd6edaa36b561875018043c287d71a2f231e0f5"}, {"description": "Date monsters, take answers out of context on the Internet, and make bizarre murals in the fourth installment of Jackbox Games' annual party game pack.", "developers": [{"id": "521816532737851443", "name": "Jackbox Games"}], "executables": [{"is_launcher": false, "name": "the jackbox party pack 4.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "851087ec8f6e24abbb511fa0c87c1cea", "id": "451549336996806676", "name": "The Jackbox Party Pack 4", "publishers": [{"id": "521816532737851443", "name": "Jackbox Games"}], "splash": "932d5339aad584aaa07400538efd2490", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "610180", "sku": "610180"}], "type": 1, "verify_key": "c152c66af80d8d29db8f070dc22ae32863193b5bf76c6916fe5b2bd3612844f0"}, {"description": "Contagion is a survival horror FPS and spiritual successor to the Half-Life 2 mod, Zombie Panic: Source.", "developers": [{"id": "521816703370526738", "name": "Monochrome Games"}], "executables": [{"is_launcher": false, "name": "contagion.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0dc08a75de5a82fb97320a09cba2faba", "id": "451549440734658560", "name": "Contagion", "publishers": [{"id": "521816703370526738", "name": "Monochrome Games"}], "splash": "31ddf046228bdc6db709226649afa1be", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "238430", "sku": "238430"}], "type": 1, "verify_key": "1cc1ac9a4dfe9f369987c74ba06a0b8c5b16e4effe2866788b232d1d57e49ef4"}, {"description": "A simulation game where players can build planes and fly them. Now available on the PC.", "developers": [{"id": "521816698534494225", "name": "Jundroo"}], "executables": [{"is_launcher": false, "name": "simpleplanes.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f75c55b3149a9f92d2c6890a961afa96", "id": "451549534993252362", "name": "SimplePlanes", "publishers": [{"id": "521816698534494225", "name": "Jundroo"}], "splash": "448e8d288a62a3e07fba55dc59823543", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "397340", "sku": "397340"}], "type": 1, "verify_key": "dc22e41426f8283c56ac7107204e3911615c98d6a7ee52e62c17e3c6d021b1ff"}, {"description": "The RPG Maker series scores an entry on both PC and Mac, and for the first time allows porting to mobile platforms and Linux.", "developers": [{"id": "521816515989733376", "name": "Enterbrain, Inc."}], "executables": [{"is_launcher": false, "name": "rpgmv.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6c051c5a7df069f906cf0f7658ecebf5", "id": "451549964422873088", "name": "RPG Maker MV", "publishers": [{"id": "521816515989733376", "name": "Enterbrain, Inc."}], "splash": "d0bf1eadcc294d2b0ae5203527af434c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "363890", "sku": "363890"}], "type": 1, "verify_key": "dcb134cf9b3bd9683eb907f5c533117b7e7e45c83e10087f428c5196791ef4c4"}, {"description": "A puzzle platformer developed by Polytron that uses a 2D perspective shifting mechanic to solve puzzles and complete levels. The main character, a white creature named Gomez, wears a fez and is obsessed with collecting hats.", "developers": [{"id": "521816755446743062", "name": "Polytron"}], "executables": [{"is_launcher": false, "name": "fez.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f6662c310eeb014ba3e967a56b43d64b", "id": "451550717673472030", "name": "FEZ", "publishers": [{"id": "521816755446743060", "name": "Trapdoor"}], "splash": "39818f3cf7c25f114121bc5d07da5eb1", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "224760", "sku": "224760"}], "type": 1, "verify_key": "9ed9f4de29e6955ac2576d1d4b78ff630511decffa36a07feb93680647ea9d95"}, {"description": "Survive five nights at Freddy's Pizzeria as the night watchman.", "developers": [{"id": "521816648739454976", "name": "animdude"}], "executables": [{"is_launcher": false, "name": "fivenightsatfreddys.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "616155d59b4ceaa5e00799062a89d22e", "id": "451550771193053194", "name": "Five Nights at Freddy's", "publishers": [{"id": "521816648739454976", "name": "animdude"}], "splash": "7e6fa061114d9251c902f1042c1fb2c7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "319510", "sku": "319510"}], "type": 1, "verify_key": "23017d07c8a287ddf17c5150677783751538f8438e9b745f109339e2c4ac6f41"}, {"description": "", "developers": [{"id": "521816697448038412", "name": "NetherRealm Studios"}], "executables": [{"is_launcher": false, "name": "injustice2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8ec333a3b9f370f282d216a751467556", "id": "451551201604141056", "name": "Injustice\u2122 2", "primary_sku_id": "492165204889567232", "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "slug": "injustice-tm-2", "splash": "b491748afcd4558649d2e35bd2498921", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "627270", "sku": "627270"}, {"distributor": "discord", "id": "492165204889567232", "sku": "492165204889567232"}], "type": 1, "verify_key": "279477cbf3de3582a8f71a26c01359941c7675fec2a05bc14c582cd67e603dab"}, {"description": "", "executables": [{"is_launcher": false, "name": "eternal card game/eternal.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "aa779f97307d2e712ff906d3895229b3", "id": "451551225968853012", "name": "Eternal Card Game", "publishers": [{"id": "521816520267923482", "name": "Dire Wolf Digital"}], "splash": "d202daad4b7b11e345ae0ecbcda89097", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "531640", "sku": "531640"}], "type": 1, "verify_key": "1bbdd84b2bb71e45c7a096540e7f1276857eadd8a29eda0b9deea804815bb4cf"}, {"description": "CarX Drift Racing Online", "executables": [{"is_launcher": false, "name": "carx drift racing online/drift racing online.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "84181b03003c0d3674ef36ce04f2d52b", "id": "451551359393595412", "name": "CarX Drift Racing Online", "publishers": [{"id": "521816618024828940", "name": "CarX Technologies"}], "splash": "afaa2ba30cde76f975a96cc9af13c5a1", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "635260", "sku": "635260"}], "type": 1, "verify_key": "9255b3de3193fe92887475b6762dd649cbd499fe4d78544b4cfa2119b6eb82a1"}, {"description": "The Evil Within 2", "developers": [{"id": "521816549057626140", "name": "Tango Gameworks"}], "executables": [{"is_launcher": false, "name": "tew2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5a24ca3307e4d97bafb6a93e348ca95c", "id": "451551873581711360", "name": "The Evil Within 2", "publishers": [{"id": "521816500508819469", "name": "Bethesda Softworks"}], "splash": "c4c7db01338e51dd9055aefdf21cfc2f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "601430", "sku": "601430"}], "type": 1, "verify_key": "c741e2dd0689e4cbb4604797906a737a4dd18fdd286566866be85dde4e7fd96e"}, {"description": "A \"randomly generated road trip action-RPG\", Death Road to Canada pits a car-full of jerks against the zombie apocalypse as they make their way through procedurally-generated locations and encounters.", "developers": [{"id": "521816768407273491", "name": "Madgarden"}], "executables": [{"is_launcher": false, "name": "deathroadtocanada/prog.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d2e3969673e5f2746e3070564ce644e0", "id": "451551950937260032", "name": "Death Road to Canada", "publishers": [{"id": "521816768407273490", "name": "Rocketcat Games"}], "splash": "31adb200c87ab9d4fe77a691d69ec615", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "252610", "sku": "252610"}], "type": 1, "verify_key": "f664cd0ab93112610f29cf0d0df82d25c414e8c81548e6b23c7134637081a8d5"}, {"description": "", "executables": [{"is_launcher": false, "name": "totally accurate battle zombielator/game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c6d66727b225ddfbc92dfb7594f5acc6", "id": "451551980108906496", "name": "Totally Accurate Battle Zombielator", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "615000", "sku": "615000"}], "type": 1, "verify_key": "61da20132b8f10812a376ac4088cdfa836f6c868e0ed4ad97514d82098698d53"}, {"description": "Set in the 1600s, Fire and the Sword brings the medieval Mount and Blade games into an era of new technology and conflicts, while retaining its open world RPG gameplay.", "developers": [{"id": "521816586101850136", "name": "Taleworlds"}], "executables": [{"is_launcher": false, "name": "mb_wfas.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "048b2271961b202b6ed2f2be5e7d0c18", "id": "451552014883880980", "name": "Mount & Blade: With Fire and Sword", "publishers": [{"id": "521816521249521702", "name": "Paradox Interactive AB"}], "splash": "a244b0ee5f9f109fa6d613c1e16e0e2c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "48720", "sku": "48720"}], "type": 1, "verify_key": "8350530cb12e6af090b06380f35cf37065afa12cbfeb0c32afb63538a4e77768"}, {"description": "Secret World Legends is a free to play shared-world RPG, where everything is true.", "developers": [{"id": "521816542258790405", "name": "Funcom Productions A/S"}], "executables": [{"is_launcher": false, "name": "secretworldlegendsdx11.exe", "os": "win32"}, {"is_launcher": false, "name": "secretworldlegends.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f2b40a3c29990580c0ad7c4fb8d0b152", "id": "451552107825201152", "name": "Secret World Legends", "publishers": [{"id": "521816542258790405", "name": "Funcom Productions A/S"}], "splash": "95de71900b941eb592fbd285b3ac187f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "215280", "sku": "215280"}], "type": 1, "verify_key": "4e86dea443b8dbc723da9aa365c2681d0c9d40ee8e7faabc6d7fa4f4cb378ab9"}, {"description": "Grand Strategy game from Paradox Interactive where players take command of any nation on earth to face the political and social upheavals of the 19th century.", "developers": [{"id": "521816521249521702", "name": "Paradox Interactive AB"}], "executables": [{"is_launcher": false, "name": "victoria2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "72accaf0001e81653f2579994c22da70", "id": "451552374423552000", "name": "Victoria II", "publishers": [{"id": "521816521249521702", "name": "Paradox Interactive AB"}], "splash": "6779f1446e651e042aa9f7a6a58e3865", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "42960", "sku": "42960"}], "type": 1, "verify_key": "3c8279076988859d2905c4692ce832ba4ab58475b17436a75ca2dd1eb63e3b7d"}, {"description": "Successor to Men of War: Assault squad. Call to arms brings Men of War to the modern era and shifts the focus to more infantry based combat.", "developers": [{"id": "521816663679565844", "name": "Digitalmindsoft"}], "executables": [{"is_launcher": false, "name": "call_to_arms.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "80b6ca77c71448eace5dcccec6a964fa", "id": "451552458083270676", "name": "Call to Arms", "publishers": [{"id": "521816548059643905", "name": "1C Company"}], "splash": "9c8dbe945ded2ebbbfab1c87ffa10669", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "302670", "sku": "302670"}], "type": 1, "verify_key": "0f646263377797d953083c72c5aec964c75b51eabf438dafd274c9da414c9ba5"}, {"description": "Mirror", "executables": [{"is_launcher": false, "name": "mirror/game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "99f83c43c67fd44bbd0fe7850cbab4f8", "id": "451552550446170113", "name": "Mirror", "publishers": [{"id": "521816730650017802", "name": "SakuraGame"}], "splash": "dee520291bfec8df06b2d1a2d2f8a5a9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "644560", "sku": "644560"}], "type": 1, "verify_key": "fafa8d9d5d37d60623f384adad543208310dba092c36edbcd20ee9b244bfe9c1"}, {"description": "This family friendly game combines Lego Star Wars, and Lego Star Wars: The Original Trilogy, into one adventure spanning the entire Star Wars universe.", "developers": [{"id": "521816611506880523", "name": "TT Games"}], "executables": [{"is_launcher": false, "name": "legostarwarssaga.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2e69de3bcd4a8dcbb8679c73793e8b45", "id": "451552771045457920", "name": "LEGO\u00ae Star Wars\u2122: The Complete Saga", "publishers": [{"id": "521816522977574923", "name": "LucasArts Entertainment Company LLC"}], "splash": "b8526b018ba399298e1b21ce58cdd334", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "32440", "sku": "32440"}], "type": 1, "verify_key": "24847b36fceb6751b6249dfa0ba4088d847e846d340ff6a16a0745505d6aac4a"}, {"description": "", "executables": [{"is_launcher": false, "name": "justfishing.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b4578241aefa982405faae31d979deb0", "id": "451553376803487744", "name": "Just Fishing", "publishers": [{"id": "521816754356486156", "name": "Just Fishing LLC"}], "splash": "7ac00a5a7238634d21ff3d75cdd047e5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "703950", "sku": "703950"}], "type": 1, "verify_key": "ca656f4a31cb5b2815db3840b36df01475f0934b346d4961542099374733a165"}, {"description": "A pixelart ludus simulator.", "developers": [{"id": "521816649264005121", "name": "DolphinBarn"}], "executables": [{"is_launcher": false, "name": "domina.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "eb9b5557716c5d90ac9dacc49c5b7b54", "id": "451553701404999700", "name": "Domina", "publishers": [{"id": "521816649264005121", "name": "DolphinBarn"}], "splash": "9055f63a2029b3459c5a7d25bf8fc5d5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "535230", "sku": "535230"}], "type": 1, "verify_key": "60de6074c9b8e7c825c618362abb91739936c412869720c146d30451a8fa25b3"}, {"description": "Quake Live is a 'free-to-play' web browser-based FPS from id Software. It is based on the popular game Quake III Arena, and focuses solely on online multiplayer.", "developers": [{"id": "521816563024920606", "name": "id Software"}], "executables": [{"is_launcher": false, "name": "quakelive.exe", "os": "win32"}, {"is_launcher": false, "name": "quakelive_steam.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d2f1b81937ea9f3e217659377994056b", "id": "451553710275821568", "name": "Quake Live", "publishers": [{"id": "521816563024920606", "name": "id Software"}], "splash": "2d6c02afb8f54f8d4f14c1173f470d1d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "282440", "sku": "282440"}], "type": 1, "verify_key": "8c649eb56ede5f19f96b6b844fa09d38d6295f60e8171325058dec7c3b5cef9f"}, {"description": "", "developers": [{"id": "521816601230704643", "name": "Robot Entertainment"}], "executables": [{"is_launcher": false, "name": "spitfiredashboard.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f963ae45d8924b8598067feabb4a44d3", "id": "451554260262322176", "name": "Orcs Must Die!", "primary_sku_id": "498980730869645329", "publishers": [{"id": "521816601230704643", "name": "Robot Entertainment"}], "slug": "orcs-must-die", "splash": "37da97f2c8e3427da8dd03115b1b4398", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "427270", "sku": "427270"}, {"distributor": "discord", "id": "498980730869645329", "sku": "498980730869645329"}], "type": 1, "verify_key": "f93b537c32973521b6c3bd0c00302565afe2c9a6e577b2cea48e888f733319c9"}, {"description": "Loadout is a third-person shooter featuring fully customizable weapons and over-the-top violence. It is available through Steam for PC and the PlayStation Store for PS4.", "developers": [{"id": "521816658298404886", "name": "Edge of Reality, Ltd."}], "executables": [{"is_launcher": false, "name": "loadout.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9d45d79c35e38a7d1aaea4afa35c9c15", "id": "451555691836997643", "name": "Loadout", "publishers": [{"id": "521816658298404886", "name": "Edge of Reality, Ltd."}], "splash": "999fd65c0485196ad85da6e820316f79", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "208090", "sku": "208090"}], "type": 1, "verify_key": "62ebf2ee09e73c46a206fd2e9b7228226ddf5cbe485ba0772f778d045261c766"}, {"description": "A game in the Farming Simulator franchise, first released on PC on October 30, 2014. The game released on May 19, 2015 for Xbox 360, PS3, PS4, and Xbox One. The PS4 and Xbox One versions of the game feature the first online multiplayer on consoles. New to Farming Simulator 15 is the ability to transform the terrain with wood cutting tools and equipment.", "developers": [{"id": "521816627767934979", "name": "GIANTS Software GmbH"}], "executables": [{"is_launcher": false, "name": "farmingsimulator2015game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "48cfba535d49560a086fe55de2e2743b", "id": "451556128992657418", "name": "Farming Simulator 15", "publishers": [{"id": "521816537192202247", "name": "Focus Home Interactive"}], "splash": "e55fdd02dce9174e9bf183a17ba6e24c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "313160", "sku": "313160"}], "type": 1, "verify_key": "0d3054316ad9109c7c984b7f9296ffc2b99d663712ca4d83df1a49b7f12c0b2b"}, {"description": "Take control of massive armies as you battle to conquer the known world. Be it on the battlefield or on the world map, besiege cities and route enemies. All for the ultimate goal of crushing the senate and ruling Rome.", "developers": [{"id": "521816720503996437", "name": "The Creative Assembly"}], "executables": [{"is_launcher": false, "name": "rometw.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "bdf3949bf7982405b2ce0a717c86dedb", "id": "451557091279372298", "name": "Rome: Total War", "publishers": [{"id": "521816501544550404", "name": "Activision"}], "splash": "1b61579b961fd0973a63bec7ec538fad", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "4760", "sku": "4760"}], "type": 1, "verify_key": "925badaabe6cbb774e6d79a6ba1657d3e3d94bb57ed291cedec31bcd3c0f1a4e"}, {"description": "The Fallout series continues in a post-apocalyptic Boston, Massachusetts.", "developers": [{"id": "521816519768932355", "name": "Bethesda Game Studios"}], "executables": [{"is_launcher": false, "name": "fallout4vr.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5352166fca2f8e43c6ca863b5223e814", "id": "451557388504530945", "name": "Fallout 4 VR", "publishers": [{"id": "521816500508819469", "name": "Bethesda Softworks"}], "splash": "90e77fb339fcc7845a92f6c0e2e328e7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "611660", "sku": "611660"}], "type": 1, "verify_key": "fc63e9931475f26550bd20a2dd0a4adcc794ef030b6826593d6486a59229eeae"}, {"description": "Inspired by Monster Hunter and Spelunky, Magicite features randomly generated dungeons, crafting, tons of items and resources, and multiplayer.", "developers": [{"id": "521816574949326848", "name": "SmashGames"}], "executables": [{"is_launcher": false, "name": "magicite.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f26967f48378b2ce2bce3aaa3910a8e9", "id": "451559209893363712", "name": "Magicite", "publishers": [{"id": "521816574949326848", "name": "SmashGames"}], "splash": "332365bc97c484f9939cf2516053df1d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "268750", "sku": "268750"}], "type": 1, "verify_key": "33dac65f80afc5009d4e0ca1ac5078a8aefd8c1445ac32c9bca31d0f619af4da"}, {"description": "'Bully: Scholarship Edition' takes place at the fictional New England boarding school Bullworth Academy, and tells the story of mischievous 15-year-old Jimmy Hopkins as he goes through the hilarity and awkwardness of adolescence. Beat the jocks at dodge ball, play pranks on the preppies, save the nerds, kiss the girl.", "developers": [{"id": "521816766784077836", "name": "Rockstar Toronto"}], "executables": [{"is_launcher": false, "name": "bully scholarship edition/bully.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1fe2c101970e26a6347364a9a2de6c7e", "id": "451560105008431124", "name": "Bully: Scholarship Edition", "publishers": [{"id": "521816560537567257", "name": "Rockstar Games"}], "splash": "322212e5ff305861b9e7d6d9e2b4ef2d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "12200", "sku": "12200"}], "type": 1, "verify_key": "0409248f8079ea67b19646892b78c933c485051262231fe622f53c7c0b5d8a33"}, {"description": "", "developers": [{"id": "521816508624535571", "name": "Messhof"}], "executables": [{"is_launcher": false, "name": "nidhogg.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "77286326f88cf6d1e987ac28a9af4cf5", "id": "451561653570502656", "name": "Nidhogg", "primary_sku_id": "492002087194984458", "publishers": [{"id": "521816508624535571", "name": "Messhof"}], "slug": "nidhogg", "splash": "d0f6ee9aad3c9cf3e08f39c57519b3bb", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492002087194984458", "sku": "492002087194984458"}, {"distributor": "steam", "id": "94400", "sku": "94400"}], "type": 1, "verify_key": "be8007087d39f15675432a5658921fd7d02d4164de1daa31ff135fd4df96fe66"}, {"description": "Ten players enter the island, one leaves out on top. A mobile competitive class-based first person dungeon crawler inspired by \"Battle Royale\" games like King of the Kill or ARMA 3's Battle Royale mod.", "developers": [{"id": "521816667756560399", "name": "Archbears"}], "executables": [{"is_launcher": false, "name": "blacksurvival.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7a7ec703449f6a99f7915a2f38c3d3bf", "id": "451561708461359124", "name": "Black Survival", "publishers": [{"id": "521816667756560399", "name": "Archbears"}], "splash": "5d4bc91e22330a9a5208611667bc15f3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "690510", "sku": "690510"}], "type": 1, "verify_key": "56efc22b8d27a1e33300de777a5fb073755c170b7856fb694f18e63e7cdafecd"}, {"description": "", "executables": [{"is_launcher": false, "name": "fortify.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2564f5dbd90a96e5324f017be19e1700", "id": "451563408794320906", "name": "FORTIFY", "publishers": [{"id": "521816516593975296", "name": "RTK Entertainment"}], "splash": "03cfd34a2d7e133e55bdb776b5e86195", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "505040", "sku": "505040"}], "type": 1, "verify_key": "470a25246cc8ca5d70058c3fc909e08809c55fa74c52b9d377f1494a0d26e078"}, {"description": "Avorion takes the sandbox aspects from the X games and Freelancer, throws in co-op multiplayer and lets players build their own ships.", "developers": [{"id": "521816541323329561", "name": "Boxelware"}], "executables": [{"is_launcher": false, "name": "bin/avorion.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7d553286b262491a5a4757015140def6", "id": "451563448015519744", "name": "Avorion", "publishers": [{"id": "521816541323329561", "name": "Boxelware"}], "splash": "54a0e745fbd313737c0c66e41250a66e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "445220", "sku": "445220"}], "type": 1, "verify_key": "9139e8ad5c7089e274637fb4ced1d011b3dbfc65445f138e7414980b5a0ff3c7"}, {"description": "When Earth is in its final hour before extinction from alien hordes, it's up to one man to venture through an apocalyptic near-future Egypt and begin a journey to save humanity: Sam \"Serious\" Stone.", "developers": [{"id": "521816609518518284", "name": "Croteam Ltd."}], "executables": [{"is_launcher": false, "name": "sam3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a1be99574d793701d9c0daff943f571e", "id": "451564621422395392", "name": "Serious Sam 3: BFE", "publishers": [{"id": "521816510730338331", "name": "Devolver Digital"}, {"id": "521816658298404888", "name": "Croteam"}], "splash": "00c47feab03b95b582bd011eb289797b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "41070", "sku": "41070"}], "type": 1, "verify_key": "9bb036adfb5e491ed1badd64f9dac073062aa5a6afb3064cf199ea17314ad24b"}, {"description": "Gold Rush: The Game is a realistic gold mining simulator set in Alaska.", "developers": [{"id": "521816636177776643", "name": "Code Horizon"}], "executables": [{"is_launcher": false, "name": "goldrushthegame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7a5b40bb6385d4becd8029000296c782", "id": "451564928868941824", "name": "Gold Rush: The Game", "publishers": [{"id": "521816512516980736", "name": "PlayWay"}], "splash": "fecfe099cd2e39c26ae4ccadc8e7e3b6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "451340", "sku": "451340"}], "type": 1, "verify_key": "7627ce4a84712edee5c7d5ec9eb6b49acb142a34bc5c4ff154645bffe97345ae"}, {"description": "Co-op survival game for up to 8 players.", "developers": [{"id": "521816772534337538", "name": "Ironward"}], "executables": [{"is_launcher": false, "name": "the red solstice/bin/game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "227fdd1d2f436983cab5cbc0fb8fc784", "id": "451565617162747904", "name": "The Red Solstice", "publishers": [{"id": "521816772534337538", "name": "Ironward"}, {"id": "521816772534337539", "name": "Nkidu Games"}], "splash": "382988b98c38a5d0e47a01c5b0ca15fa", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "265590", "sku": "265590"}], "type": 1, "verify_key": "c78f113e780e1e937f101950ac2b655ec5738b25818670292128fb4fa140b725"}, {"description": "The sequel to Ni no Kuni for Windows and PlayStation 4.", "developers": [{"id": "521816592674193445", "name": "Level-5 Inc."}], "executables": [{"is_launcher": false, "name": "nino2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "96755d9710b4dd49ffbcae1e143d1e02", "id": "451572281584648202", "name": "Ni no Kuni\u2122 II: Revenant Kingdom", "publishers": [{"id": "521816592674193445", "name": "Level-5 Inc."}], "splash": "7c3adaf212e4ed6aa133d014de8a3b4d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "589360", "sku": "589360"}], "type": 1, "verify_key": "7457750fddd6ee7509e65988507c277ca37377dbcd76eb1050cd8baef4fa408f"}, {"description": "Sequel to the tower defense/Monkey Ball/art history mashup Rock of Ages.", "developers": [{"id": "521816597074018307", "name": "ACE Team"}], "executables": [{"is_launcher": false, "name": "roa2-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b53e6fd942e3870f151c7955e2804d12", "id": "451584845898842112", "name": "Rock of Ages 2", "publishers": [{"id": "521816597074018306", "name": "Atlus Co., Ltd."}, {"id": "521816597074018307", "name": "ACE Team"}], "splash": "c51556d18b49f0eb3e253387c11a3e58", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "434460", "sku": "434460"}], "type": 1, "verify_key": "ff425562ea6d5e3e3a1dd398191780c1638020e66b539a3eea46bd8c6112dc4e"}, {"description": "A sci-fi action MMO developed by Allods Team in collaboration with Obsidian Entertainment.", "developers": [{"id": "521816500974256132", "name": "Allods Team"}], "executables": [{"is_launcher": false, "name": "skyforge.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f9976f17faa0312f23cb9a1746bb91b0", "id": "451598719498846218", "name": "Skyforge", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816512085098549", "name": "My.com"}], "splash": "354e6d10d03cdbca1e99b550b65b3794", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "414530", "sku": "414530"}], "type": 1, "verify_key": "bbc64658d8a824d7ac8801ad5d1b23ed58c0e78d2144cdce7673e98a5058c45d"}, {"description": "Meteor 60 seconds!", "executables": [{"is_launcher": false, "name": "meteor60seconds.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c6facf55d5af3f866d868dca39ed6577", "id": "451604801248034836", "name": "Meteor 60 Seconds!", "publishers": [{"id": "521816769640529960", "name": "Avocavo"}], "splash": "ed3f4398bf6b2f324d84840782e55de5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "788770", "sku": "788770"}], "type": 1, "verify_key": "beb5e3f7a8455136058312bbeebcc8e1bc1d6ba5ebdbd367c9ce8ed55bd99112"}, {"description": "A game in the Yu-Gi-Oh! franchise that spans five series.", "developers": [{"id": "521816513074692114", "name": "Other Ocean Interactive"}], "executables": [{"is_launcher": false, "name": "yu-gi-oh! legacy of the duelist/yugioh.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "62d19a74c760c6d91df3c3dc3a6dc39a", "id": "451686854597672970", "name": "Yu-Gi-Oh! Legacy of the Duelist", "publishers": [{"id": "521816513074692111", "name": "Konami"}], "splash": "65d45eca28dc011496b574e5beccae63", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "480650", "sku": "480650"}], "type": 1, "verify_key": "9cc6835957092e33b62dad9146d213ba89be4c2d7972cc565e18199a9c67a011"}, {"description": "Beat Saber is a VR rhythm game. Boxes that match the beat moves towards the player. The player has to slash the boxes with their saber while matching the direction of their slash with the arrows on the boxes.", "developers": [{"id": "521816720046948392", "name": "Hyperbolic Magnetism"}], "executables": [{"is_launcher": false, "name": "beat saber.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "58526cb1de3ca4591abc80230ddc5609", "id": "451991967149195264", "name": "Beat Saber", "publishers": [{"id": "521816720046948392", "name": "Hyperbolic Magnetism"}], "splash": "054c37a7215637afbf06eb1f47adc19a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "620980", "sku": "620980"}], "type": 1, "verify_key": "a0d535cdbeb5de377d907f8fede1d97056168844c8bc1a0557ce28171d487944"}, {"cover_image": "43c166619fb813b8683d6a44ab6a1aed", "description": "SpellForce 3 - The perfect blend between RTS and RPG!", "developers": [{"id": "521816579797811200", "name": "Grimlore Games"}], "executables": [{"is_launcher": false, "name": "sf3clientfinal.exe", "os": "win32"}], "flags": 0, "guild_id": "309836623594520576", "hook": true, "icon": "0d3ae82258c1b53c7bd33c805431b76d", "id": "452001740431163402", "name": "SpellForce 3", "primary_sku_id": "471033395590201365", "publishers": [{"id": "521816508167487498", "name": "THQ Nordic"}], "slug": "spellforce-3", "splash": "3311f8e4a398b0fcceb221d3296df688", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "311290", "sku": "311290"}, {"distributor": "discord", "id": "471033395590201365", "sku": "471033395590201365"}], "type": 1, "verify_key": "5958b272f91513abf3adab8925aa483d507ee790efbd24e1314e486051597fc7"}, {"cover_image": "ec2b9ef646b4e8cdfe1603e5c8e6ab13", "description": "The Titans, gods before the gods, have escaped from their eternal prison to wreak havoc on the world. In this titanic struggle between old and new gods, it is the heroes of humankind who will ultimately determine the fate of all existence.", "developers": [{"id": "521816723263979521", "name": "Iron Lore Entertainment Ltd."}], "executables": [{"is_launcher": false, "name": "tq.exe", "os": "win32"}], "flags": 0, "guild_id": "347282491192639488", "hook": true, "icon": "3c7992344b1f90ac29c323292dd1c1dd", "id": "452029545843785730", "name": "Titan Quest Anniversary Edition", "primary_sku_id": "494928814707834881", "publishers": [{"id": "521816722752405505", "name": "Iron Lore Entertainment"}, {"id": "521816508167487498", "name": "THQ Nordic"}], "slug": "titan-quest-anniversary-edition", "splash": "7a151b821231c1e61db40f99cb53a677", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "475150", "sku": "475150"}, {"distributor": "discord", "id": "494928814707834881", "sku": "494928814707834881"}], "type": 1, "verify_key": "865f845b0bf5b04eb30ca3d2431ba3a711d9fade9c8d77497cb0dd1bc571c40d"}, {"description": "A collection of 59 of the greatest SEGA Mega Drive/Genesis games complete with a new hub system exclusive to Steam complete with full mod support for all games", "developers": [{"id": "521816537192202245", "name": "d3t Ltd."}], "executables": [{"is_launcher": false, "name": "sega classics/segagameroom.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "18b7d75f2948767bc3c91b7a28bb100f", "id": "452099265230274571", "name": "SEGA Mega Drive & Genesis Classics", "publishers": [{"id": "521816507676885010", "name": "Sega"}], "splash": "012055edba1b1275a512384813e2a747", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "34270", "sku": "34270"}], "type": 1, "verify_key": "2c44f115a7281fac12e2020a900cd13b9311824c8942b2f652f54db022603a84"}, {"description": "", "executables": [{"is_launcher": false, "name": "execpubg.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "61c56b4246d79dbfcf3ed97ba250e38c", "id": "452140668265955339", "name": "PUBG: Test Server", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "622590", "sku": "622590"}], "type": 1, "verify_key": "72caf1dfc309061584137ac3d602911d11c2b6412f3c1f76e8b2789df9cdf9a3"}, {"description": "A 3d action-adventure featuring ninja rabbits and a brutal combat system on a custom engine developed over nine years by the small indie studio Wolfire Games.", "developers": [{"id": "521816644432166913", "name": "Wolfire"}], "executables": [{"is_launcher": false, "name": "overgrowth.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0598422e6cb97209a73e08a42a15b938", "id": "452205639347994656", "name": "Overgrowth", "publishers": [{"id": "521816644432166913", "name": "Wolfire"}], "splash": "47a78aef3fa640ef981286913c16e6a1", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "25000", "sku": "25000"}], "type": 1, "verify_key": "664bc59321e9ee2ddb8b1641d96bf15afdfcb0c8da55b82760ddea901b9a4071"}, {"description": "Create a dad and romance other dads in this comedic dating sim produced by the team behind the Game Grumps webseries.", "developers": [{"id": "521816741689425920", "name": "Game Grumps"}], "executables": [{"is_launcher": false, "name": "dream daddy/ddadds.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ae9a6921c2c355ff0349384aeec16150", "id": "452206598283198504", "name": "Dream Daddy: A Dad Dating Simulator", "publishers": [{"id": "521816741689425920", "name": "Game Grumps"}], "splash": "4a6364ce35a24c330922d0607d6ca620", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "654880", "sku": "654880"}], "type": 1, "verify_key": "6ce27341125f98c268153f46fa18f5d7bfc30d518eaba839bf5498b0aee9ac17"}, {"aliases": ["Kingdoms of Amalur: Reckoning"], "description": "Kingdoms of Amalur: Reckoning is an open-world singleplayer RPG with combo-based action and the trappings of an MMORPG. Reckoning is set in Amalur, the same setting as 38 Studios' planned MMO codenamed \"Copernicus.\"", "developers": [{"id": "521816731153596453", "name": "Big Huge Games"}], "executables": [{"is_launcher": false, "name": "reckoning.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f996dac815df4aea844a97ce91182017", "id": "452276290385346589", "name": "Kingdoms of Amalur: Reckoning\u2122", "publishers": [{"id": "521816731153596453", "name": "Big Huge Games"}, {"id": "521816499464306692", "name": "Electronic Arts"}], "splash": "d54b415fe52d46400b2672c483459232", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "102500", "sku": "102500"}], "type": 1, "verify_key": "f21aa816b047553acf5018791175c217e5f3314d18cfa588d32bd30c7b78eda0"}, {"aliases": ["Star Citizen Launcher"], "description": "A first-person space combat flight simulation inspired by the Wing Commander series of games.", "developers": [{"id": "521816554648764436", "name": "Cloud Imperium Games Corporation"}], "executables": [{"is_launcher": false, "name": "starcitizen.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7a55868f259fca03ba55756e41983e44", "id": "452295596917784577", "name": "Star Citizen", "publishers": [{"id": "521816554648764433", "name": "Cloud Imperium Games"}, {"id": "521816554648764436", "name": "Cloud Imperium Games Corporation"}], "summary": "", "type": 1, "verify_key": "a39a8cf59ecd8d0bb6a26e2f648a13fada7ce14075a8c74e6a37f3584407675b"}, {"aliases": ["Need for Speed(TM) Hot Pursuit"], "description": "Criterion's reboot of one of the most popular games in the Need for Speed series. The game features Racer versus Cop gameplay and can be played from either perspective at any time.", "developers": [{"id": "521816761948045361", "name": "Criterion Games"}], "executables": [{"is_launcher": false, "name": "nfs11.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "13f922f64a6ee1cddac00e858514e6c6", "id": "452295877978095646", "name": "Need for Speed: Hot Pursuit", "publishers": [{"id": "521816761948045361", "name": "Criterion Games"}, {"id": "521816499464306692", "name": "Electronic Arts"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "47870", "sku": "47870"}], "type": 1, "verify_key": "193053bdab220e541028f3606a1a5deaa78c5f5f45879a58124336c955c2dafe"}, {"aliases": ["Battlefield Hardline"], "description": "This Battlefield spin-off, developed by Visceral Games, focuses on the neverending battle between criminals and police officers, rather than the series' standard military setting.", "developers": [{"id": "521816624546709507", "name": "Visceral Games"}], "executables": [{"is_launcher": false, "name": "bfh.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c1848934a7643e5cf0d0a0db4fc52336", "id": "452296074762256393", "name": "Battlefield\u2122 Hardline", "publishers": [{"id": "521816538202767363", "name": "EA Games"}], "summary": "", "type": 1, "verify_key": "6e50618a526f9ccfae194b4354a407be711b2536c0295e7c0c7a5f0e74db95fb"}, {"aliases": ["World_of_Warplanes_EU"], "description": "World of Warplanes is a free-to-play MMO featuring planes from the 1930s to the 1950s.The game was announced by Wargaming during E3 2011.", "developers": [{"id": "521816588601786401", "name": "Wargaming.net"}], "executables": [{"is_launcher": false, "name": "worldofwarplanes.exe", "os": "win32"}], "flags": 0, "guild_id": "408226912813580289", "hook": true, "icon": "9fd161fc0d6bd26b79d8f7b154675bde", "id": "452296290940878848", "name": "World of Warplanes", "publishers": [{"id": "521816588601786401", "name": "Wargaming.net"}], "summary": "", "type": 1, "verify_key": "243741b5bc80f62dedc8fe822b6e7d866cf160fd8f271b7d154481a83b45be91"}, {"description": "Train simulator 2016 is the annual update to the Train Simulator series. This update is free to existing users of Train Simulator 2015", "developers": [{"id": "521816625507336192", "name": "Dovetail Games"}], "executables": [{"is_launcher": false, "name": "railworks.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ca915e1fe23208182ee3bed131e0445b", "id": "452313101539475456", "name": "Train Simulator", "publishers": [{"id": "521816625507336192", "name": "Dovetail Games"}], "splash": "44c9340486ee8e2583237e718d3e4f28", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "24010", "sku": "24010"}], "type": 1, "verify_key": "962f779f4c51de9d3ed359768768590626d5fad18342bf7a3fad11ffd3c2a238"}, {"description": "An action strategy PVP game .", "developers": [{"id": "521816734844583947", "name": "NetDragon"}], "executables": [{"is_launcher": false, "name": "tiger knight/bin/frontend.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "037ec53e45e1f4090ec0f774ec82477f", "id": "452944801952694282", "name": "Tiger Knight", "publishers": [{"id": "521816734844583947", "name": "NetDragon"}], "splash": "6677d07eb0dbcbd293eb0372f1961d2e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "415660", "sku": "415660"}], "type": 1, "verify_key": "6b747c6ec606be37fdbcd02487a757d3e7520ce2b8e4758a7a00b36783f39ce5"}, {"description": "", "executables": [{"is_launcher": false, "name": "ball 3d.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "96a16e87a458eeca4e4840dcbf454cd8", "id": "453374517864169477", "name": "Ball 3D: Soccer Online", "publishers": [{"id": "521816610097594398", "name": "Unusualsoft"}], "splash": "e9930b7ef1b8d06c5841fedaeca733b3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "485610", "sku": "485610"}], "type": 1, "verify_key": "6f462bc4ad9caf4a1bad001a6c4e6ee82c398111172ac368f6ae8e462b996f88"}, {"description": "A simulation game where players create and sell their own paintings.", "executables": [{"is_launcher": false, "name": "passpartout.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c61c56d4597406e6e7aa5a2b926d8113", "id": "453677781511831572", "name": "Passpartout: The Starving Artist", "publishers": [{"id": "521816619115085827", "name": "Flamebait Games"}], "splash": "08c4507e581fa2989481a3e6fdf3b422", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "582550", "sku": "582550"}], "type": 1, "verify_key": "bfc949fd06181c502ed93be9bd8975654cb42d6127a348173bb04b5f48ac1f02"}, {"description": "A fast-paced comedy-horror visual novel set in a high-school for spooky monsters. Along with stat-building dating sim mechanics, the game features multiplayer for up to four players, with players able to compete for the same love interest!", "developers": [{"id": "521816560051159043", "name": "Beautiful Glitch"}], "executables": [{"is_launcher": false, "name": "monsterprom.exe", "os": "win32"}], "flags": 0, "guild_id": "410790077158129664", "hook": true, "icon": "ca21990e3bed87b81dbdb414b2775227", "id": "453680460304875531", "name": "Monster Prom", "publishers": [{"id": "521816560051159042", "name": "Those Awesome Guys"}], "splash": "93d0c34bb60d0c4af48e6104c8feb97c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "743450", "sku": "743450"}], "type": 1, "verify_key": "790f474f1ee508d394c632ca6efd1806cd657a6dabb64ed3627de2dff59cc97c"}, {"description": "", "executables": [{"is_launcher": false, "name": "totallyaccuratebattlegrounds.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "22e8aafe3733ca3340a6919d6afbbbfd", "id": "453818237508124692", "name": "Totally Accurate Battlegrounds", "publishers": [{"id": "521816536210604034", "name": "Landfall"}], "splash": "bc692404b238f92f94421d20e3551aeb", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "823130", "sku": "823130"}], "type": 1, "verify_key": "8733a03e50f5e7de3d31a128f097abc621d6aa58b282be34acbce7bc0d7df3f7"}, {"description": "A horror action-RPG developed by Dontnod Entertainment. In Vampyr the player takes control of a vampiric doctor in the time period following World War I.", "developers": [{"id": "521816549057626131", "name": "DONTNOD Entertainment"}], "executables": [{"is_launcher": false, "name": "avgame-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c81a12f4c35d80c9ad334e063a7c0268", "id": "454123972343365652", "name": "Vampyr", "publishers": [{"id": "521816537192202247", "name": "Focus Home Interactive"}], "splash": "05fd7b8bde2b0481ed70f9c82e921b73", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "427290", "sku": "427290"}], "type": 1, "verify_key": "de2ad3c9db360eb9ec7404e7b06a0cf3f55d2d6d7eb9f56e2456283b288ee5ee"}, {"description": "A follow up to Outlast from Red Barrels.", "developers": [{"id": "521816563972571136", "name": "Red Barrels"}], "executables": [{"is_launcher": false, "name": "outlast2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "009c7c05105d2f9241e49088c6ca8a5b", "id": "454411001492668417", "name": "Outlast 2", "publishers": [{"id": "521816563972571136", "name": "Red Barrels"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "414700", "sku": "414700"}], "type": 1, "verify_key": "57d716e3fe87eee1c28853b81f705b9456984645d1aecf25383e37e5975deb86"}, {"description": "A sandbox-style RPG supporting up to 4 players in randomly generated 3D worlds with the goal of going through portals to progress to more difficult worlds and boss fights.", "developers": [{"id": "521816633392627714", "name": "Keen Games"}], "executables": [{"is_launcher": false, "name": "portal_knights_x64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2c8debab024436e9f21e3005bc81ab49", "id": "454600052904820736", "name": "Portal Knights", "publishers": [{"id": "521816570520141824", "name": "505 Games"}], "splash": "12b256c9947bf844097e62d4cfc9dade", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "374040", "sku": "374040"}], "type": 1, "verify_key": "375a65a275e0742d5a64d69c7969892c015dead65daee7d0c35137aa336affd4"}, {"description": "Fortified! is an action strategy game set in 1950's sci-fi.", "developers": [{"id": "521816637481943060", "name": "Clapfoot"}], "executables": [{"is_launcher": false, "name": "fenris-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "cd416b71f40f5ceb9ec3d38c8df9708a", "id": "454713992322220032", "name": "Fortified", "publishers": [{"id": "521816637481943060", "name": "Clapfoot"}], "splash": "b74d529f0ac8a52b146a4496139e2f1e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "334210", "sku": "334210"}], "type": 1, "verify_key": "776871ca9c4f529d943623d8e53492b8562174d25846c78981823d9c4c09b0f1"}, {"description": "Fast-paced Arena-FPS with old-school gameplay and modern graphics", "developers": [{"id": "521816658981945371", "name": "Reakktor Studios"}], "executables": [{"is_launcher": false, "name": "toxikk.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1042b8fa4ba6edd2b00ce69e86e37ea9", "id": "454731115027103759", "name": "TOXIKK", "publishers": [{"id": "521816658981945371", "name": "Reakktor Studios"}], "splash": "b51d3dfc0e5eba089c0a9362eeac6588", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "324810", "sku": "324810"}], "type": 1, "verify_key": "c618344c86a6872c006c8ac88624958570627878ec4a917dd71c0582ccdfbeb0"}, {"description": "Battle Carnival", "executables": [{"is_launcher": false, "name": "release/bc.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c3f63674e575c18647d5fcbcf409bdf7", "id": "454759028187463700", "name": "Battle Carnival", "publishers": [{"id": "521816698018332683", "name": "Zepetto"}], "splash": "29c377a7de187e4fda6abe9a2dec004f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "803140", "sku": "803140"}], "type": 1, "verify_key": "49e6941c717d9597bd415203b6d25cc8bfbe564988c48679955a38f2af6356a2"}, {"aliases": ["iRacing.com Race Simulation"], "description": "iRacing.com is an online simulation racing game for the PC featuring numerous licensed cars and tracks.", "executables": [{"is_launcher": false, "name": "iracingsim64.exe", "os": "win32"}, {"is_launcher": false, "name": "iracingsim.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "33310c080c235f5daec03b1bccc7c0e3", "id": "454810317705314334", "name": "iRacing", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816803652141098", "name": "iRacing.com Motorsport Simulations"}], "summary": "", "type": 1, "verify_key": "d8830a15ed0e7fce0ddae3861173baa2bbfa7d43d10f629291cc993dadf98b3a"}, {"description": "Far Cry 4 puts the player in the role of Ajay Ghale and pits him against a deadly antagonist and an even deadlier environment. Caught in the middle of a brutal Civil War while fulfilling his mother's dying wish, Ghale must fight back against the oppression of Kyrat's leader, Pagan Min, while also battling the ruthlessness of the jungle.", "developers": [{"id": "521816502500982842", "name": "Ubisoft Montreal Studios"}], "executables": [{"is_launcher": false, "name": "farcry4.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8a888f387de0869fe7920e3f1b5359cd", "id": "454811906230845440", "name": "FarCry 4", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "summary": "", "type": 1, "verify_key": "e03842de4fa1a560f2d2f11b3821dc48799ac870ab688f331ad4d65f63e77e4b"}, {"description": "", "developers": [{"id": "521816608445038604", "name": "Matt Makes Games"}], "executables": [{"is_launcher": false, "name": "celeste.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5c74efe85ae802ba1445391ba52ac611", "id": "454814894596816907", "name": "Celeste", "primary_sku_id": "500428425362931713", "publishers": [{"id": "521816608445038604", "name": "Matt Makes Games"}], "slug": "celeste", "splash": "e5f8c81e62a8d2bc5fe3b9cbd4214238", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "500428425362931713", "sku": "500428425362931713"}, {"distributor": "steam", "id": "504230", "sku": "504230"}], "type": 1, "verify_key": "9cf02af64f8e490c52aa67248a8fefe9b3c51c9fda2d5ed8ac7b9d77facec6cf"}, {"description": "Audiosurf is a block-matching game that generates levels based on the rhythm and tempo of songs that the player loads from their hard drive.", "developers": [{"id": "521816751038791691", "name": "Dylan Fitterer"}], "executables": [{"is_launcher": false, "name": "audiosurf.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f633f680137da6b476571944e022854b", "id": "455442346558095370", "name": "Audiosurf", "publishers": [{"id": "521816530393104394", "name": "Valve Corporation"}], "splash": "fbb4d9063625c31b6fc8e0b136486572", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "12900", "sku": "12900"}], "type": 1, "verify_key": "405b985becdbc62f9b6ef15d6f0c22625337d485233090e25c3966b98b9bc72b"}, {"description": "Bioware's first RPG, you must assemble a party of adventurers and investigate the mystery of the iron crisis and a darker threat that looms in the city of Baldur's Gate.", "developers": [{"id": "521816589570408449", "name": "BioWare"}], "executables": [{"is_launcher": false, "name": "baldur's gate enhanced edition/baldur.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8325da68de3eec3eeafd40c0cf3532c4", "id": "455494486089269258", "name": "Baldur's Gate: Enhanced Edition", "publishers": [{"id": "521816563024920612", "name": "Interplay Entertainment Corp."}], "splash": "ea6d19051e4d5136515c8656617e84a5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "228280", "sku": "228280"}], "type": 1, "verify_key": "7be162317410ae81c7a1c7a621049e1276f2e492be6d868162f2074e72c594bb"}, {"description": "", "executables": [{"is_launcher": false, "name": "conquests/civ3conquests.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "aa50ab770a9dc4b2f4415d0d1fec47ca", "id": "455584343792943104", "name": "Sid Meier's Civilization III: Complete", "primary_sku_id": "489236894488461322", "publishers": [{"id": "521816573485514765", "name": "Firaxis Games"}], "slug": "sid-meier-s-civilization-iii-complete", "splash": "1a4412a602dd71163681bdb699f35f1a", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "489236894488461322", "sku": "489236894488461322"}, {"distributor": "steam", "id": "3910", "sku": "3910"}], "type": 1, "verify_key": "5402b1b0b5a82675fc071cbadbbcac193ff5c54cc9841480aee137b6a1c7ac33"}, {"description": "Action-RPG set in the Warhammer 40K Universe.", "developers": [{"id": "521816736274841641", "name": "Neocore Games"}], "executables": [{"is_launcher": false, "name": "warhammer_x64_11.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "34b7a9f7837a98e86fd6ec440e542b75", "id": "455692385268269056", "name": "Warhammer 40,000: Inquisitor - Martyr", "publishers": [{"id": "521816736274841640", "name": "NeocoreGames"}], "splash": "3d5a147db2ead6c1fba98d1ed518cffa", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "527430", "sku": "527430"}], "type": 1, "verify_key": "4668d74a9b7d7dd4e905dd5c51a13136ae69afabdee8d99b450b13a653512724"}, {"description": "An adult RPG where you fight Monster Girls. If you lose, your hero will be raped to death.", "developers": [{"id": "521816642762833921", "name": "Toro Toro Resistance"}], "executables": [{"is_launcher": false, "name": "monmusu/game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b0b00556f4e804635050f0dc757d8416", "id": "455713051794997249", "name": "MONMUSU", "publishers": [{"id": "521816642762833920", "name": "Tentacle Games"}], "splash": "5bc8220047783bbfefda1b543c95ab7b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "533540", "sku": "533540"}], "type": 1, "verify_key": "91bd63e3af50d1f6d0b2b73f6fa405c631d7c034a3bcf331505307e0db96cb6e"}, {"description": "Platformer game for PS4, PC and Xbox One.", "developers": [{"id": "521816664199921691", "name": "Tarsier Studios"}], "executables": [{"is_launcher": false, "name": "littlenightmares.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "354a4d2dffd0e3c6cc99c58cea124eed", "id": "455788266860445696", "name": "Little Nightmares", "publishers": [{"id": "521816537653444610", "name": "Bandai Namco Entertainment"}], "splash": "53058c55702fead25adb3bc0ebf8b99d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "424840", "sku": "424840"}], "type": 1, "verify_key": "497e63b550762a9e553e917af006b20b655f00cc1190cfa8d42db8e064c910e6"}, {"description": "", "executables": [{"is_launcher": false, "name": "rct.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fc0cd65f17ae7a81dbece8716200d241", "id": "455864514185920523", "name": "RollerCoaster Tycoon: Deluxe", "publishers": [{"id": "521816507102003203", "name": "Chris Sawyer Productions"}], "splash": "e67c9587c284e1f261d2df3c64b5da36", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "285310", "sku": "285310"}], "type": 1, "verify_key": "b62e0fd909ff4bfdbb6b3306655f37aa799da4b469555de747ebfa7c25a3dd5c"}, {"description": "", "executables": [{"is_launcher": false, "name": "halowarsde/xgamefinal.exe", "os": "win32"}], "flags": 0, "guild_id": "471722331820130324", "hook": true, "icon": "0d306a8245be56ae1a0268544f2ea825", "id": "456022848214138884", "name": "Halo Wars: Definitive Edition", "publishers": [{"id": "521816567940513807", "name": "Ensemble Studios"}], "splash": "8c67c7dfe6954fc505e5f4e672c89e01", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "459220", "sku": "459220"}], "type": 1, "verify_key": "6f8a70c9295d313a4ca2f16a5cc5d64c65c1fc2d57d98498c8e004c777567012"}, {"description": "A dinosaur park simulator.", "developers": [{"id": "521816604175106063", "name": "Frontier Developments Ltd."}], "executables": [{"is_launcher": false, "name": "jwe.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3497531e38870a8c2c0e1e6645365e71", "id": "456144990930862086", "name": "Jurassic World Evolution", "publishers": [{"id": "521816604175106059", "name": "Frontier Developments"}, {"id": "521816604175106063", "name": "Frontier Developments Ltd."}], "splash": "0c83cb1f674be9287534d0462dc3904e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "648350", "sku": "648350"}], "type": 1, "verify_key": "8afbdcc95305948542428b44e86faabc40b8b3ca7ce2c9f7d1b5bae65a6bb615"}, {"description": "Defiance is a free-to-play MMO-shooter that coincides with events in a television series of the same name, depicting humans and aliens working together on a ravaged, mutated Earth. The game is multi-platform, but does not support cross-platform play.", "developers": [{"id": "521816577876951040", "name": "Trion Worlds"}], "executables": [{"is_launcher": false, "name": "defiance.exe", "os": "win32"}, {"is_launcher": false, "name": "defiance/glyphclientapp.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b580a85d26f1eda2eee613c99a4efc72", "id": "456294192616964096", "name": "Defiance", "publishers": [{"id": "521816577876951040", "name": "Trion Worlds"}], "splash": "bc9226505934ba5b710eccdd6646951e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "224600", "sku": "224600"}], "type": 1, "verify_key": "97d38d667f1ae5731cbd12c9569d6d53aed5c52dbcedf6ea22bb9e805086376c"}, {"description": "Developed by Eidos Montr\u00e9al and coming more than 10 years after the previous Thief game, this is the fourth installment in and a reboot of the Thief franchise.", "developers": [{"id": "521816520817639457", "name": "Eidos-Montr\u00e9al"}], "executables": [{"is_launcher": false, "name": "shipping-thiefgame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "cb6d20bdf4666d9054587f77eb0b2a03", "id": "456834047730122752", "name": "Thief", "publishers": [{"id": "521816520817639456", "name": "Eidos Interactive"}], "splash": "37a4d52e5daa47fe94d859a05eff3220", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "239160", "sku": "239160"}], "type": 1, "verify_key": "033525808769f684e7dbb02e84e222ffce84b13e974ac7b7cfb7afc23640b6e8"}, {"description": "From The Depths is a single player and multiplayer creative sandbox game where players can build their own war machines block-by-block. Players can build ships, submarines, air balloons, planes, space craft, fortresses and structures out of hundreds of different blocks.", "developers": [{"id": "521816656633266207", "name": "Brilliant Skies"}], "executables": [{"is_launcher": false, "name": "from_the_depths.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7b412f7bc0fa866861b95f8b674a5235", "id": "456965807780397076", "name": "From The Depths", "publishers": [{"id": "521816656633266206", "name": "Brilliant Skies Ltd."}], "splash": "1b1a85c8edf7173a065478d56a957a7f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "268650", "sku": "268650"}], "type": 1, "verify_key": "fdc742ae45992056bf584ec235e645f686b403862f7c8572816ba326f275a9b4"}, {"description": "A first-person action platformer centered around a grappling hook mechanic.", "developers": [{"id": "521816684407947264", "name": "Gone North Games"}], "executables": [{"is_launcher": false, "name": "asamu-win32-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3f48001592d070bc085f0c4acabcb441", "id": "457095132119040020", "name": "A Story About My Uncle", "publishers": [{"id": "521816595153158147", "name": "Coffee Stain Studios"}], "splash": "121c46796803a1e962726066e6c53a85", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "278360", "sku": "278360"}], "type": 1, "verify_key": "bb7281efbc080db008036f0bdec8045d568d4faa9419d9be0a5182461619c6d9"}, {"description": "", "developers": [{"id": "521816783196258335", "name": "Digital Sun"}], "executables": [{"is_launcher": false, "name": "moonlighter.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "beee02c73c8f3904c46d903d3c3bbe4b", "id": "457269337137348613", "name": "Moonlighter", "primary_sku_id": "471501020006973451", "publishers": [{"id": "521816628980219914", "name": "11 Bit Studios"}], "slug": "moonlighter", "splash": "03516bc0756f08ed8913de57e533b2eb", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "471501020006973451", "sku": "471501020006973451"}, {"distributor": "steam", "id": "606150", "sku": "606150"}], "type": 1, "verify_key": "ef9f135fb43421a59f55722412d9b0d7f4c5072f77a13b031e7f1b451e05d28e"}, {"description": "Sequel to Wizard101", "executables": [{"is_launcher": false, "name": "pirate101.exe", "os": "win32"}, {"is_launcher": false, "name": "pirate.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e66b26299010a726ae95153061568180", "id": "457283942475759662", "name": "Pirate101", "publishers": [{"id": "521816682684088331", "name": "KingsIsle Entertainment, Inc."}], "summary": "", "type": 1, "verify_key": "40e6dee4bdc8f2e54e4777eef0d12cdf9e9562b7a09a84917ab1935a6f77552c"}, {"description": "An upcoming Free-to-play, developed by Yager.", "developers": [{"id": "521816629416296448", "name": "YAGER Development GmbH"}], "executables": [{"is_launcher": false, "name": "dreadgame-win64-shipping.exe", "os": "win32"}], "flags": 0, "guild_id": "99592296034476032", "hook": true, "icon": "4915455b9c9419f07c070627fcd2a904", "id": "457284340330659864", "name": "Dreadnought", "publishers": [{"id": "521816628980219917", "name": "Grey Box"}], "summary": "", "type": 1, "verify_key": "f5a69299c5baea53dceeb06177a6d7dd3941ae676e985f59c885393f44f71871"}, {"description": "Napoleon: Total War follows Napoleon from the early Italian campaign, to the Battle of Waterloo, and beyond.", "developers": [{"id": "521816720503996437", "name": "The Creative Assembly"}], "executables": [{"is_launcher": false, "name": "napoleon.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "072d778729e34238b5426d6a610377a2", "id": "457284624977100800", "name": "Napoleon: Total War", "publishers": [{"id": "521816507676885010", "name": "Sega"}], "summary": "", "type": 1, "verify_key": "85996c00c53213d3f8917331a998556fd91db4da1b95e51779ac01d58ef12d25"}, {"description": "Often referred to as simply AVA, Alliance of Valiant Arms is a free to play (F2P) modern-based first person shooter.", "developers": [{"id": "521816522302423055", "name": "Red Duck"}], "executables": [{"is_launcher": false, "name": "ava.exe", "os": "win32"}], "flags": 0, "guild_id": "443950921286811649", "hook": true, "icon": "7d0d3e78c2786df6c4a843594bc09e39", "id": "457284796658352128", "name": "Alliance of Valiant Arms", "overlay": true, "publishers": [{"id": "521816522302423053", "name": "NHN Games Corporation"}, {"id": "521816522302423054", "name": "GameOn"}], "summary": "", "type": 1, "verify_key": "b91e13168506186fe7084d46606c3c67082bfc10b2f86591a5119cf7322e00f5"}, {"aliases": ["Arpiel"], "description": "Arpiel is an isometric MMORPG from Nexon.", "executables": [{"is_launcher": false, "name": "arpiel.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2d8651579682d9416ca09d36ea21fcaa", "id": "457299794772230154", "name": "Arpiel Online", "publishers": [{"id": "521816628980219916", "name": "EspritGames Co.,Ltd."}], "summary": "", "type": 1, "verify_key": "4e2c8f7d1336cf3edea277eaf48a810ab43d18f242825428984e6b12f7681ef5"}, {"description": "", "executables": [{"is_launcher": false, "name": "maniaplanet.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "236d2a67350cea2ad01fe1725449c850", "id": "457300140470960128", "name": "ManiaPlanet", "publishers": [{"id": "521816570029146113", "name": "Nadeo"}], "summary": "", "type": 1, "verify_key": "e1c24abf2c3186c9e0b0d69ed75d57049cfa771d035ebaded0b29faeb63e34e0"}, {"aliases": ["Mabinogi Heroes (Vindictus)"], "description": "", "executables": [{"is_launcher": false, "name": "heroes.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "53f7e4554dd46892589b5ae55bf1ae50", "id": "457300488199733265", "name": "\ub9c8\ube44\ub178\uae30 \uc601\uc6c5\uc804", "summary": "", "type": 1, "verify_key": "767bd9c8dddc301ea4ec0472362014ad5ffa899cbf6a8ea817630467a8282271"}, {"aliases": ["LineageII"], "description": "A Lineage II game for mobile devices.", "developers": [{"id": "521816684957270026", "name": "Netmarble"}], "executables": [{"is_launcher": false, "name": "l2.exe", "os": "win32"}, {"is_launcher": false, "name": "lineageii.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f2f9b337a57454eb9cfa59f7c041247a", "id": "457300834393391104", "name": "Lineage II", "overlay": true, "overlay_compatibility_hook": true, "publishers": [{"id": "521816611036856320", "name": "Innova Systems"}], "summary": "", "type": 1, "verify_key": "23c7bf66a5637a24ca978ca9ca2f53d6929a55e0339ec3193652a737c665a994"}, {"aliases": ["\uba54\uc774\ud50c\uc2a4\ud1a0\ub9ac2"], "description": "", "executables": [{"is_launcher": false, "name": "maplestory2.exe", "os": "win32"}], "flags": 0, "guild_id": "433766043098415127", "hook": true, "icon": "c58e167d2785e0d26d93a9924a76f9b7", "id": "457301027453009947", "name": "MapleStory 2", "overlay": true, "overlay_compatibility_hook": true, "summary": "", "type": 1, "verify_key": "9b90e41ddddc7284c33fa012571209e59dcad8788fefc1e0f8d81d67325fa044"}, {"aliases": ["PPSSPP version 1.5.4"], "description": "", "executables": [{"is_launcher": false, "name": "ppssppwindows.exe", "os": "win32"}, {"is_launcher": false, "name": "ppssppwindows64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "799bce165081854988bf7bb848fa204c", "id": "457301373592141836", "name": "PPSSPP", "summary": "", "type": 1, "verify_key": "dc97646f76b879c5773e10a3555533ecf90904378628f7aee07123bec2ccfc23"}, {"aliases": ["Command & Conquer Generals: Zero Hour"], "description": "Continue your campaign against terrorism & communism or face 9 equally crazy Generals who are hysterically stereotypical in every way shape and form.", "developers": [{"id": "521816605223813131", "name": "EA Los Angeles"}], "executables": [{"is_launcher": false, "name": "generals.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "90cb12ace492c75ba43aabe8b49d6a10", "id": "457301510515195924", "name": "Command & Conquer\u2122: Generals and Zero Hour", "publishers": [{"id": "521816511178997817", "name": "Aspyr Media, Inc."}], "summary": "", "type": 1, "verify_key": "3510b98ae584501b1e2d76419c18910f4fc3ba388a3243180cbb7ebb4a547e89"}, {"bot_public": false, "bot_require_code_grant": false, "description": "NoxPlayer is a free Android Emulator which dedicated to bring to Android games and apps to PC and MAC. ", "executables": [{"is_launcher": false, "name": "nox.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9c3e502ae240e246d3d7d20b7ec927d0", "id": "457301824110723113", "name": "NoxPlayer", "publishers": [{"id": "521816550102138911", "name": "Duodian Technology Co. Ltd."}], "summary": "", "type": 1, "verify_key": "2fb0c14d2f9d70cb42390dc12c70a4e83c9d195032e29d8a6886cc9e322200e6"}, {"aliases": ["Tribes Ascend"], "description": "Tribes: Ascend is a fast-paced free-to-play FPS developed by Hi-Rez Studios for the PC. With a focus on projectile weapons, high speed and jet packs, Tribes: Ascend offers unique acrobatic aerial combat with intense class based teamwork.", "developers": [{"id": "521816544939081737", "name": "Hi-Rez Studios"}], "executables": [{"is_launcher": false, "name": "tribesascend.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "948c2bc53c2fd6c334a4cc4a2d5df470", "id": "457549567538495489", "name": "Tribes: Ascend", "publishers": [{"id": "521816544939081737", "name": "Hi-Rez Studios"}], "splash": "4698424ac6262c5e924c0d43dbb24ccf", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "17080", "sku": "17080"}], "type": 1, "verify_key": "9c7a5b91b338403ce030aae73792b869814474c42c75991735039a3808a53f69"}, {"description": "The next sandbox building game from the same developers as Space Engineers.", "executables": [{"is_launcher": false, "name": "medievalengineers.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "48538bab6071a6cfb06b3bd735ce5b4d", "id": "457619737535447060", "name": "Medieval Engineers", "publishers": [{"id": "521816518409977856", "name": "Keen Software House"}], "splash": "6b0c63d86dff2462e0b6259268277cf5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "333950", "sku": "333950"}], "type": 1, "verify_key": "cfb295c23af28a1ebc2a4fcab756cd2453a5593dffed85e31d38a64cc904b170"}, {"description": "Cuisine Royale is a Battle Royale style game with a huge arsenal of kitchen-warfare utensils.", "executables": [{"is_launcher": false, "name": "cuisine royale/win64/enlisted.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1f8b6dd766b9bc3b9c9e285c7c2256fe", "id": "457888043668340737", "name": "Cuisine Royale", "publishers": [{"id": "521816778264018956", "name": "Darkflow Software"}], "splash": "440ee582f064d54d8538ea905d376f8c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "884660", "sku": "884660"}], "type": 1, "verify_key": "3698b23c2e68cbd24b02397b7181badb0b0521800b37a4cd41ec445d0e57606a"}, {"description": "A multiplayer hide and seek game", "developers": [{"id": "521816726996779019", "name": "Barrel Roll Games GmbH"}], "executables": [{"is_launcher": false, "name": "propwitchhuntmodule-win64-shipping.exe", "os": "win32"}], "flags": 0, "guild_id": "241945990796410882", "hook": true, "icon": "544ea6c5b056655d61f4d82980f2bd91", "id": "458081878394667009", "name": "Witch It", "publishers": [{"id": "521816726996779019", "name": "Barrel Roll Games GmbH"}], "splash": "961b6f269f93fb1f32469b8c6b18aaff", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "559650", "sku": "559650"}], "type": 1, "verify_key": "ffcc178206662f4773e64b90988048218887ae3b382dafab2caf54221b2ceda4"}, {"aliases": ["Grid 2"], "description": "The sequel to the original \"reboot\" of the TOCA Race Driver series, GRID (known as Racedriver: GRID outside of the US). It uses the same EGO 3.0 Engine which was used in Dirt 3 and employs a brand new system called \"TrueFeel\" which provides a balance between accessibility and realism.", "developers": [{"id": "521816499464306689", "name": "Codemasters Racing"}], "executables": [{"is_launcher": false, "name": "grid2.exe", "os": "win32"}, {"is_launcher": false, "name": "grid2_avx.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6b5a90ef0bc7647f8e9a6d7740759c3e", "id": "458309189974884363", "name": "GRID 2", "publishers": [{"id": "521816499464306688", "name": "Codemasters"}], "splash": "5f6912beac4d63acf28ee610a96d512a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "44350", "sku": "44350"}], "type": 1, "verify_key": "53c0b62f60e1a363483e72876492e9cfd530c01c5f7e27714441d040a3137c2e"}, {"description": "From the creators of the Shank series comes a 2D stealth game featuring a ninja Champion bearing a magical tattoo that brings great power at a heavy price, in order to bring bloody vengeance against his clan's enemies.", "developers": [{"id": "521816520817639454", "name": "Klei Entertainment Inc."}], "executables": [{"is_launcher": false, "name": "mark_of_the_ninja/bin/game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3a0dd5633ccd3dcc73a48d00fb72e47d", "id": "458503484153528322", "name": "Mark of the Ninja", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}], "splash": "418955734694676d924fff269fc02c28", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "214560", "sku": "214560"}], "type": 1, "verify_key": "a199054ef257137c0913e9428bd645df7a9aa30fbe22dfbab15f5deb7c961b0d"}, {"description": "An Elite style Space combat Trading Game with superior graphics but a more 2-Dimensional space combat system.", "developers": [{"id": "521816714317660196", "name": "Intense! Interactive, Inc."}], "executables": [{"is_launcher": false, "name": "nomad.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f280c2680f2db0c5a4a9aac1b275a284", "id": "458780333601587200", "name": "Nomad", "publishers": [{"id": "521816714317660195", "name": "GameTek, Inc."}], "splash": "fbc6e14cc41fe6dd0a4e8d22dcca0474", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "378370", "sku": "378370"}], "type": 1, "verify_key": "cb860c396a63b44f0858c38ade0fad21d84c872e45fa38f8d3cc7e91dd94feb9"}, {"description": "A VR gladiatorial, physics-driven fighting game.", "developers": [{"id": "521816734374559754", "name": "Free Lives"}], "executables": [{"is_launcher": false, "name": "gorn.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7a77a6597f56949f9af11840a25347f4", "id": "459465853600268289", "name": "GORN", "publishers": [{"id": "521816510730338331", "name": "Devolver Digital"}], "splash": "2c292212beba37bf591884b7882b78f7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "578620", "sku": "578620"}], "type": 1, "verify_key": "6ecf5893ebc4eb178b57298ae8b2095524ceb14dc56ed45772e1d80454772937"}, {"aliases": ["Unreal"], "description": "", "executables": [{"is_launcher": false, "name": "unreal.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fc156cc567e011aaabe7fbd7e7a32218", "id": "459581070438825994", "name": "Unreal Gold", "publishers": [{"id": "521816519332855821", "name": "Epic Games, Inc."}], "splash": "2d32b9ae4d612132d520b00e60a8849d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "13250", "sku": "13250"}], "type": 1, "verify_key": "acdbfbec1c15b9ac787fe2ecc50e60c9b4a38b8922289abbaf5c0ac2549ba5c5"}, {"description": "Shadowrun Returns is a turn-based RPG created by Harebrained Schemes.", "developers": [{"id": "521816521249521698", "name": "Harebrained Schemes"}], "executables": [{"is_launcher": false, "name": "shadowrun.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4c317ad5adcec28ea838e6e5efd12399", "id": "459713656339562503", "name": "Shadowrun Returns", "publishers": [{"id": "521816521249521698", "name": "Harebrained Schemes"}], "splash": "1c0fe1f16fa6f74579dd380b3a1eeaf1", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "234650", "sku": "234650"}], "type": 1, "verify_key": "cb29f2877dc2984955e5b5adc633593a16c8f81277486a19acd2d188856b1477"}, {"description": "", "executables": [{"is_launcher": false, "name": "spacehulkgame-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a576dfaf2db5b5c49397aa504b587724", "id": "459764260935958538", "name": "Space Hulk: Deathwing - Enhanced Edition", "publishers": [{"id": "521816672248791063", "name": "Streum On Studio"}], "splash": "b18111e09ffa76f5edb78a197315b23f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "816090", "sku": "816090"}], "type": 1, "verify_key": "761a0084ec9eaac81bb33ec69dde322bab33624bcc4ca7c8be79c81406aaa0a5"}, {"description": "Colony Survival", "executables": [{"is_launcher": false, "name": "colony survival/colonyclient.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "04ec0ad1e1a65ed2edd063efd092a293", "id": "459774120226455562", "name": "Colony Survival", "publishers": [{"id": "521816585602859010", "name": "Pipliz"}], "splash": "2cb791cd201ab0e973f59c852ae69a9d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "366090", "sku": "366090"}], "type": 1, "verify_key": "a5f70b70734ffc2c1e24f6a1bf30d1369b812d11534aad6c1953ee2cad223c4e"}, {"description": "Murder Miners is a Halo-inspired first person shooter. The game was originally for Xbox 360 but later ported to PC.", "executables": [{"is_launcher": false, "name": "murder miners.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "786a4c6a1b05953a2543ae5e57025d2d", "id": "459807786151182346", "name": "Murder Miners", "publishers": [{"id": "521816779509465100", "name": "JForce Games"}], "splash": "982b62e676ee72847c678aeda672ebf7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "274900", "sku": "274900"}], "type": 1, "verify_key": "ead93c7ab7ed0c408f53fa70699d730437be306874f86effabfdcf8c5e36497d"}, {"description": "An expanded version of the sci-fi \"hunting action\" game God Eater 2, this time leaving the PSP behind in favor of a PS4 version.", "developers": [{"id": "521816591604908036", "name": "Shift"}], "executables": [{"is_launcher": false, "name": "ge2rb.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8bac4e5e4ad7b44dd43f768ac9655898", "id": "459968630935781376", "name": "GOD EATER 2 Rage Burst", "publishers": [{"id": "521816537653444610", "name": "Bandai Namco Entertainment"}], "splash": "ca44247f75a5a50b76be8819eca1b9bc", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "438490", "sku": "438490"}], "type": 1, "verify_key": "b0d54c8f64366b297c415763c8453badae794a554251266deb766bfe51943625"}, {"description": "FPS aim training game.", "developers": [{"id": "521816729849036800", "name": " Victor M\u00f6ller"}], "executables": [{"is_launcher": false, "name": "aimtastic.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "72fa6ad4c98ea4a695f9c4054f5cc2df", "id": "460092747580309504", "name": "Aimtastic", "publishers": [{"id": "521816729379405826", "name": "Victor M\u00f6ller"}], "splash": "29552f20332bdaec7a32f9b208bf0c27", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "757240", "sku": "757240"}], "type": 1, "verify_key": "50e8c77e656d3cd8f93063085e60ab5ef87a5b29cbe132c5156d1d728052ec7b"}, {"description": "", "executables": [{"is_launcher": false, "name": "thedivision.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "817f6cd119d4b3ed7558e3cd8e6bf67c", "id": "460199128522293258", "name": "Tom Clancy's The Division Trial", "publishers": [{"id": "521816652745277460", "name": "Massive Entertainment"}], "splash": "3e7ba572be0884c64a6d43ac7e5215a5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "588220", "sku": "588220"}], "type": 1, "verify_key": "874b066c986ad47203813823651b568540aac1f752abcb1e8610c29ac9b23d3b"}, {"description": "Set in futuristic 2080, the 13th entry of the Call of Duty series brings a war that spans our entire Solar System.", "developers": [{"id": "521816501544550406", "name": "Infinity Ward"}], "executables": [{"is_launcher": false, "name": "iw7_ship.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b3da6d74b73bdc7c93d40faa0ab095cd", "id": "460217112250810368", "name": "Call of Duty: Infinite Warfare", "publishers": [{"id": "521816501544550404", "name": "Activision"}], "splash": "a8d6b2c64d0a3edc2c40d21698ef3702", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "292730", "sku": "292730"}], "type": 1, "verify_key": "4ad775220ad6cd4ff1a955361b0be8220689cf8b8a4903ae8509ca2dbbdc0905"}, {"description": "A science fiction-themed action-RPG by Supergiant Games, creators of Bastion.", "developers": [{"id": "521816498017271833", "name": "Supergiant Games"}], "executables": [{"is_launcher": false, "name": "transistor.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f0b531d96893c314e83a5fc3fed2c615", "id": "460299285049901056", "name": "Transistor", "publishers": [{"id": "521816498017271833", "name": "Supergiant Games"}], "splash": "d5e864800e3e8a7ba9e1125ba5cb2d4a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "237930", "sku": "237930"}], "type": 1, "verify_key": "7ec7762a93c3524f7d5b4f846a9e0daa59410e74a4c36f4713eea868dc4dfe54"}, {"description": "The denizens of the Marvel Universe battle it out LEGO style.", "developers": [{"id": "521816611506880523", "name": "TT Games"}], "executables": [{"is_launcher": false, "name": "lego marvel super heroes/legomarvel.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3bcb5797ea073e24ec2e2b9010aa1b04", "id": "460450424940396544", "name": "LEGO\u00ae MARVEL Super Heroes", "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "splash": "625e6e8f510c27a69646ec7203b81b56", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "249130", "sku": "249130"}], "type": 1, "verify_key": "3c91166a15441e7c947c902740be97e5620825d305d2637323d8160d5d8460c2"}, {"description": "Side-scrolling 2D action RPG about a sailor shipwrecked on a mysterious island.", "developers": [{"id": "521816505688522760", "name": "Ska Studios, LLC"}], "executables": [{"is_launcher": false, "name": "salt and sanctuary/salt.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "96973b32acd1da2ee41291e76a86a95b", "id": "460472377566822400", "name": "Salt and Sanctuary", "publishers": [{"id": "521816505688522760", "name": "Ska Studios, LLC"}], "splash": "27f50e496f454dab24eed0d6c0de3d59", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "283640", "sku": "283640"}], "type": 1, "verify_key": "2168634c05f44395406d24d79094b74a30c6c9431333477921f159d5b2d3ce63"}, {"description": "Transport Fever is the spiritual successor to Train Fever. Build stations, airports and harbors and try to make a transport empire.", "developers": [{"id": "521816774086230043", "name": "Urban Games"}], "executables": [{"is_launcher": false, "name": "transportfever.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "bf37393d41aef42dd360fbf6ab9a10a3", "id": "460542812124086272", "name": "Transport Fever", "publishers": [{"id": "521816530866929705", "name": "Good Shepherd Entertainment"}], "splash": "300a3a251a12c6542055e57f2f44f44e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "446800", "sku": "446800"}], "type": 1, "verify_key": "4e66d6ae0248ac3d949bf39dbf866604463674db1458b4aeae2669634bd95290"}, {"description": "Earth Defense Force 4.1 is a remake of Earth Defense Force 2025 for the Playstation 4, featuring new content and remastered visuals.", "developers": [{"id": "521816587586633729", "name": "Sandlot"}], "executables": [{"is_launcher": false, "name": "edf41.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1340927de47bbb5f9504447b1f60aefa", "id": "460598317173309452", "name": "EARTH DEFENSE FORCE 4.1 The Shadow of New Despair", "publishers": [{"id": "521816587586633728", "name": "D3 Publisher Inc."}], "splash": "6fa86d63a5c32169c2ac378c1dca4bd9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "410320", "sku": "410320"}], "type": 1, "verify_key": "0ae0d6937c9973d83cc246a2e60f0941bcd2165dc0edd0d6aca239ab6365be53"}, {"description": "", "executables": [{"is_launcher": false, "name": "thecrew2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c0300313a9aea3621e4c3815a6990c50", "id": "460639482547273749", "name": "The Crew 2", "publishers": [{"id": "521816533731639319", "name": "Ivory Tower"}], "splash": "d8ea0ebc26f696a70032a83ce0c4b972", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "760760", "sku": "760760"}], "type": 1, "verify_key": "ec54f24a938a556ee877064458f095424a9cb8f3a2ca736a93fb007bbf5cf56e"}, {"description": "Titan Souls is a top down action game where you play as a hero trying to defeat large and powerful monsters.", "developers": [{"id": "521816543777128452", "name": "Acid Nerve"}], "executables": [{"is_launcher": false, "name": "titan souls/titan.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "bf30b272be68c4db7bcc69832b43e760", "id": "460691329752629248", "name": "Titan Souls", "publishers": [{"id": "521816510730338331", "name": "Devolver Digital"}], "splash": "37befedeb8d216404f3da35a9ae88371", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "297130", "sku": "297130"}], "type": 1, "verify_key": "558bbe368a9460b431570ecade86e3ddbad84046f6088e23b0f6a0b7449b8d2c"}, {"aliases": ["Metal Gear Rising: Revengeance"], "description": "A fast-paced action game co-developed by PlatinumGames and Kojima Productions. It follows ninja-cyborg Raiden's activities four years after the events of Metal Gear Solid 4: Guns of the Patriots.", "developers": [{"id": "521816725793275924", "name": "PlatinumGames"}], "executables": [{"is_launcher": false, "name": "metal gear rising revengeance.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "cb172f47edc9678f3fa527bf87b468cd", "id": "460788999880179722", "name": "METAL GEAR RISING: REVENGEANCE", "publishers": [{"id": "521816513074692111", "name": "Konami"}], "splash": "51458eeaebd9b36e5afb745376985205", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "235460", "sku": "235460"}], "type": 1, "verify_key": "03d3fd48ef23fdc00da72f218567d59cbdc0c29bd60e785a32d4d920e73f4a59"}, {"description": "Next Day: Survival", "executables": [{"is_launcher": false, "name": "next day survival/nextday_game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e31f076227048bb30b97a4cbe36fea3d", "id": "460831278799912960", "name": "Next Day: Survival", "publishers": [{"id": "521816760387764249", "name": "Last Level"}], "splash": "b54a8b987c7b2dd71bb9b4f46c52acc5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "519190", "sku": "519190"}], "type": 1, "verify_key": "0260cdb9d6589f4a33b8b4eb81348ede00d308c1a5879ecb9cfea1bc2f40f107"}, {"description": "A multiplayer first-person sports game where players race around an arena as jet-powered robots and hit each other with exploding dodgeballs.", "developers": [{"id": "521816801537949720", "name": "82 Apps"}], "executables": [{"is_launcher": false, "name": "disco dodgeball.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1a1fd6871cda82580a6f2272770e27ac", "id": "460909130140614656", "name": "Robot Roller-Derby Disco Dodgeball", "publishers": [{"id": "521816801537949720", "name": "82 Apps"}], "splash": "a06b95e4c7dc59ad56bb5270e9fca4ef", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "270450", "sku": "270450"}], "type": 1, "verify_key": "d9a2ae8412c921e27cff2ec0da6e33f5694bf028a88754a22a48601e0a55ad0f"}, {"bot_public": false, "bot_require_code_grant": false, "cover_image": "c15b8e51c060b2bdf21da2d4706c9790", "description": "King of the hat is a fast-paced, hat based, multiplayer game.", "flags": 0, "guild_id": "311623758395998219", "hook": true, "icon": "d67e75e6c9c274109b40921670075773", "id": "460940655984771072", "name": "King of the Hat", "primary_sku_id": "486981988109254667", "slug": "king-of-the-hat", "splash": "17b4bb78ddf7149eb4aaccd9440eca85", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "486981988109254667", "sku": "486981988109254667"}], "type": 1, "verify_key": "4a09198aa92f48de45c9dde65bd90140129e8eace9792b03227861b0ab7f7c13"}, {"description": "A sandbox game set in the Middle Ages. Players can modify the land as they please and build what they want.", "developers": [{"id": "521816615457783813", "name": "Bitbox Ltd. "}], "executables": [{"is_launcher": false, "name": "life is feudal your own/yo_cm_client.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "83e3713b9954bd60c586bff5114b338d", "id": "460951106357297172", "name": "Life is Feudal: Your Own", "publishers": [{"id": "521816615457783813", "name": "Bitbox Ltd. "}], "splash": "296d54d127cb36431b681a5b5834b80d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "290080", "sku": "290080"}], "type": 1, "verify_key": "603e548b834525df4b09d8ef766dcd412bf58edb3ae84694b84770deeba472ba"}, {"description": "A sequel to the first Blood Bowl. A game based on the Games Workshop table top mini figures game of the same name that pits fantasy races from the Warhammer universe against one another in turn-based American football.", "developers": [{"id": "521816537653444608", "name": "Cyanide Studio"}], "executables": [{"is_launcher": false, "name": "bloodbowl2_dx_32.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b2dc24a2f96ca80129a25f9cb56f42bf", "id": "460987469756629005", "name": "Blood Bowl 2", "publishers": [{"id": "521816537192202247", "name": "Focus Home Interactive"}], "splash": "f7c00061a2858cec43deab752b7a7ab9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "236690", "sku": "236690"}], "type": 1, "verify_key": "bfd81c297c476379b677d08e52f130063f12de622d0bbb2af385a52eb22beab7"}, {"description": "The sequel to Telltale Games's poker-crossover game, Poker Night at the Inventory, branching out into beloved characters who aren't even tangentially related to video games.", "developers": [{"id": "521816542258790401", "name": "Telltale Games"}], "executables": [{"is_launcher": false, "name": "pokernight2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c5657994bf03fde587f295e407a16a8b", "id": "461039002796032000", "name": "Poker Night 2", "publishers": [{"id": "521816542258790401", "name": "Telltale Games"}], "splash": "babbce1c8925f1aee6b5fa71361dcb6f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "234710", "sku": "234710"}], "type": 1, "verify_key": "a6ed18c8c919ac6da7521d522f27709c7179bad4bde9b8359aa5f4ee58901ce8"}, {"description": "In the follow-up to the original, Freddy Fazbear's Pizza is re-opened, and the night watchman is once again tasked with surviving a working week while dealing with the homicidal animatronics that wander the restaurant at night.", "developers": [{"id": "521816648739454976", "name": "animdude"}], "executables": [{"is_launcher": false, "name": "fivenightsatfreddys2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "219c2a542d2014859b2c9229feebbe4a", "id": "461050695198572554", "name": "Five Nights at Freddy's 2", "publishers": [{"id": "521816648739454976", "name": "animdude"}], "splash": "0b15568a00de36fe2c2f05010ffd83a2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "332800", "sku": "332800"}], "type": 1, "verify_key": "4406e8d8b0ccbc6083ecc45390e51c82b237d7d1fafe1f20b95c0c5b7c3f464b"}, {"description": "An adventure from DONTNOD in the Life is Strange universe.", "developers": [{"id": "521816549057626131", "name": "DONTNOD Entertainment"}], "executables": [{"is_launcher": false, "name": "captainspirit-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "73caef8725956ed822bbada6982f3be7", "id": "461256067003973633", "name": "The Awesome Adventures of Captain Spirit", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}, {"id": "521816549057626131", "name": "DONTNOD Entertainment"}], "splash": "ce0f744d198793d9decbb6267a9764ca", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "845070", "sku": "845070"}], "type": 1, "verify_key": "41e52d1941e485625fbc21a0d37c4abb41dfa3b4e6787a52c5579fbbd40eac42"}, {"description": "A first person shooter with strategy and RPG elements.", "developers": [{"id": "521816664715690006", "name": "KK Game Studio"}], "executables": [{"is_launcher": false, "name": "freeman guerrilla warfare.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5fb87ade8c8d905001ef2be012f2be7f", "id": "461302775284891648", "name": "Freeman: Guerrilla Warfare", "publishers": [{"id": "521816664715690006", "name": "KK Game Studio"}], "splash": "80cdd3d2c5b04808948f54bf5f6cc901", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "773951", "sku": "773951"}], "type": 1, "verify_key": "37de6c1089c673ca2d07f61afb75e4bf4928e4f89d1864b62db420e3aaf3da3a"}, {"description": "Climb up to the top of Castle Hammerwatch in this fast-paced hack-and-slash action-adventure game heavily inspired by the Gauntlet series.", "developers": [{"id": "521816573485514762", "name": "Crackshell"}], "executables": [{"is_launcher": false, "name": "hammerwatch.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4e4819f55fb4812947ede6f0cf8b3ef9", "id": "461404096751206420", "name": "Hammerwatch", "publishers": [{"id": "521816573485514762", "name": "Crackshell"}], "splash": "ead83d78fec6dd87d50ad1977442a8a9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "239070", "sku": "239070"}], "type": 1, "verify_key": "a9f139f778a7392fdaaf63a5972bcdd0ea93d12553f0204edceb952b36b1de1d"}, {"description": "", "executables": [{"is_launcher": false, "name": "rct3plus.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1e5a10b0dc3574b30e85ef51e144a14a", "id": "461439083894407178", "name": "RollerCoaster Tycoon 3: Platinum!", "publishers": [{"id": "521816532737851442", "name": "Frontier"}], "splash": "b2f22d4b9e847964de95d538feaf7253", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "2700", "sku": "2700"}], "type": 1, "verify_key": "98e4e8310b11dcfd548e33d52eb74b302bfd575bd21f3cc548eea68e85a4298d"}, {"description": "A road trip game about embarking on a grand pilgrimage through Europe.", "developers": [{"id": "521816781304627228", "name": "Minskworks "}], "executables": [{"is_launcher": false, "name": "jalopy.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "14bc6d1afc6cc05bdcabf45e5a69e375", "id": "461561181598121984", "name": "Jalopy", "publishers": [{"id": "521816781304627224", "name": "Excalibur Games"}], "splash": "d5cdbb3d90a9f5d66cfa965ef88ee28b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "446020", "sku": "446020"}], "type": 1, "verify_key": "8f51e6c44f8a7e0a081b675340dd09ed14186fbf10cedb62ae5a205a905d2df6"}, {"description": "", "executables": [{"is_launcher": false, "name": "ultimate custom night.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7891ca3d0343cb0af53ae1e4688c4133", "id": "461673633798946816", "name": "Ultimate Custom Night", "publishers": [{"id": "521816617118728205", "name": "Scott Cawthon"}], "splash": "4269fea238cf08f4d93c1fbeb7cb52a0", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "871720", "sku": "871720"}], "type": 1, "verify_key": "193c69b5b70d03bf086c60e96771d58dc1a9666dde4dc1e9d1e1f0cb5fcc97eb"}, {"description": "An Xbox 360 remastering of the original Fable game, including the extra (originally cut) content from Fable: The Lost Chapters. Released on February 4, 2014 in both boxed and digital forms.", "developers": [{"id": "521816588169510932", "name": "Lionhead Studios Ltd."}], "executables": [{"is_launcher": false, "name": "fable anniversary.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "027f7d2fe350c4b47daa2510cba40999", "id": "461711977727918080", "name": "Fable Anniversary", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}], "splash": "80fc28c830618801cb505a414172de8f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "288470", "sku": "288470"}], "type": 1, "verify_key": "8cd7ef352f7b35022ff3871d24418dc4e530ce083e0f089d4814324c88430446"}, {"description": "Pavlov is a multiplayer shooter for the HTC Vive and Oculus Rift.", "executables": [{"is_launcher": false, "name": "pavlov-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "35221bb850b59b9873e1b6ba0db81d1a", "id": "461758710088466432", "name": "Pavlov VR", "publishers": [{"id": "521816772534337536", "name": "davevillz"}], "splash": "268ba8e6819664347e8cc34a596cfb27", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "555160", "sku": "555160"}], "type": 1, "verify_key": "bfdf53709389a23c91f46121063e62fdbb09ef0b92de94ef25f6a741ed8bb659"}, {"description": "A sequel to Styx: Master of Shadows that is being released on PS4, Xbox One, and PC", "developers": [{"id": "521816537653444608", "name": "Cyanide Studio"}], "executables": [{"is_launcher": false, "name": "styx2-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "dce6cb0e4ff3701bef2c31d433de0c29", "id": "462296460512198656", "name": "Styx: Shards of Darkness", "publishers": [{"id": "521816537192202247", "name": "Focus Home Interactive"}], "splash": "5a1b57f3ccff5af3f2062be5e16c79ef", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "355790", "sku": "355790"}], "type": 1, "verify_key": "c169040555ae9d18789b4120a37ae597c05e404a49d3c8342315772bb421dd6e"}, {"description": "The sequel to Audiosurf, formerly known as Audiosurf Air.", "developers": [{"id": "521816751038791691", "name": "Dylan Fitterer"}], "executables": [{"is_launcher": false, "name": "audiosurf2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "39fc09d42af3f2794e9d1fa63e54659f", "id": "462407650941075456", "name": "Audiosurf 2", "publishers": [{"id": "521816751038791691", "name": "Dylan Fitterer"}], "splash": "6ae97250db896dd60f97a90243e89045", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "235800", "sku": "235800"}], "type": 1, "verify_key": "f8d762849e6c09d6588448b701a669d8cde46224a0cc7093d628447391f9cdec"}, {"description": "Slap City", "developers": [{"id": "521816725793275927", "name": "Ludosity Interactive"}], "executables": [{"is_launcher": false, "name": "slap city.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "399984729dfea8bb6a814916e8630c8b", "id": "462788623675162634", "name": "Slap City", "publishers": [{"id": "521816725793275926", "name": "Ludosity"}], "splash": "7a6008a2551dce9ad24e9ad85dc05621", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "725480", "sku": "725480"}], "type": 1, "verify_key": "eee39aaa34a10340b3d9cbbd0934fda0b6ec9740f0fbe38f2ccc563c02673541"}, {"description": "Natural Selection 2 is a multiplayer game that blends first-person shooter with real-time strategy gameplay. The story is set a few years after the original Natural Selection and is currently under development from Unknown Worlds Entertainment.", "developers": [{"id": "521816602728071191", "name": "Unknown Worlds"}], "executables": [{"is_launcher": false, "name": "ns2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "45e53f717009cb567b33d1b365449e9b", "id": "462817604202004480", "name": "Natural Selection 2", "publishers": [{"id": "521816602728071191", "name": "Unknown Worlds"}], "splash": "82357a9c194abcb9f2947f48bd24d4d3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "4920", "sku": "4920"}], "type": 1, "verify_key": "876f7ccc132ab2d86b5ed697e747b161a226afc5da6ec27be16a280a62bd7d13"}, {"description": "Like the title suggests, Moon takes place on the moon where explorers discover a hatch that leads them to a startling discovery.", "developers": [{"id": "521816527918333964", "name": "Renegade Kid"}], "executables": [{"is_launcher": false, "name": "to the moon.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d03ba27c6d92f389d8959d7c5770358c", "id": "462829880615370762", "name": "To the Moon", "publishers": [{"id": "521816527918333963", "name": "Mastiff, LLC"}], "splash": "21f8ce23714e07fe6aaea060901c7f12", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "206440", "sku": "206440"}], "type": 1, "verify_key": "04eb52d42990e1810adab69813ddc0db90e3b63be046a6689f6a26b05033a841"}, {"aliases": ["Devil May Cry 4"], "description": "A remastering of Capcom's fourth Devil May Cry game featuring 3 additional playable characters, enhanced graphics and balance tweaks.", "developers": [{"id": "521816574512857088", "name": "Capcom"}], "executables": [{"is_launcher": false, "name": "devilmaycry4specialedition.exe", "os": "win32"}, {"is_launcher": false, "name": "devilmaycry4_dx9.exe", "os": "win32"}, {"is_launcher": false, "name": "devimaycry4.exe", "os": "win32"}, {"is_launcher": false, "name": "devilmaycry4_dx10.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ef81cef3c92f2ff20417ff64ed0ab6f2", "id": "463227448167890944", "name": "Devil May Cry\u00ae 4 Special Edition", "publishers": [{"id": "521816514106621968", "name": "CAPCOM Co., Ltd."}, {"id": "521816574512857088", "name": "Capcom"}], "splash": "630dc5965fe5f65a563730b08fa3919a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "329050", "sku": "329050"}], "type": 1, "verify_key": "f772a0ade657843e4f21ba1cfc403b2452ff6a97c414a98d9db7ad4b4ff1564e"}, {"description": "While investigating a mass murder, Detective Sebastian Castellanos descends into a gruesome, nightmarish world. This third-person survival horror game marks the debut of Tango Gameworks, a studio headed by Resident Evil progenitor Shinji Mikami.", "developers": [{"id": "521816549057626140", "name": "Tango Gameworks"}], "executables": [{"is_launcher": false, "name": "evilwithin.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1d97778a874c1ce990978abd42133815", "id": "463274972958425098", "name": "The Evil Within", "publishers": [{"id": "521816500508819469", "name": "Bethesda Softworks"}], "splash": "5a9f88453d73e565f80e3e92b67f041c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "268050", "sku": "268050"}], "type": 1, "verify_key": "24ec6d6a08c12c640284ffb12b04b8dae05c018e79202697a8751d1dacdbd514"}, {"aliases": ["Lords of the Fallen"], "description": "A fantasy action-RPG developed by CI Games and Deck 13 for PC, PlayStation 4, and Xbox One. The protagonist, convicted and ostracized for his crimes by a draconian society, is called upon to stop an army of demons commanded by a god who was long ago overthrown.", "developers": [{"id": "521816677101600814", "name": "CI Games"}], "executables": [{"is_launcher": false, "name": "lordsofthefallen.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ea98154eab6ab8922afd11fb40ab1962", "id": "463425384893906944", "name": "Lords Of The Fallen", "publishers": [{"id": "521816537653444610", "name": "Bandai Namco Entertainment"}], "splash": "1fb5ca0de9804e9e1c9d778cc484c079", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "265300", "sku": "265300"}], "type": 1, "verify_key": "ac045481d42b5d26ba6ec41514446cfc0b039ef31d4307874511ffb8464b9b1a"}, {"description": "A 2016 spin-off of the Five Nights at Freddy's series, taking place at \"Circus Baby's Pizza World\".", "developers": [{"id": "521816617118728203", "name": "Scottgames"}], "executables": [{"is_launcher": false, "name": "five nights at freddy's sister location/sisterlocation.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8a0d4d7e0c10aaa013e7536cf1dfae15", "id": "463603236880908297", "name": "Five Nights at Freddy's: Sister Location", "publishers": [{"id": "521816617118728203", "name": "Scottgames"}], "splash": "94df83352d68a51ba9540af8011f665d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "506610", "sku": "506610"}], "type": 1, "verify_key": "b39acfe96b53cfe089d5b7edbc7665a52164a1af80c4b9d8e595d12b41114d63"}, {"aliases": ["The LEGO? NINJAGO? Movie Video Game\t"], "bot_public": false, "bot_require_code_grant": false, "cover_image": "e0f8eec4a9740b317a6d5d010f76f3bd", "description": "devapp", "developers": [{"id": "521816611506880523", "name": "TT Games"}], "executables": [{"is_launcher": false, "name": "legoninjago_dx11.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "698f2b7b0546f4190c2e6c3341c9c894", "id": "463761561685721088", "name": "fin-dev", "primary_sku_id": "497821656748654602", "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "slug": "fin-dev", "splash": "ca3c23b45e1b689b8717c0ffacce40fe", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "640590", "sku": "640590"}, {"distributor": "discord", "id": "497821656748654602", "sku": "497821656748654602"}], "type": 1, "verify_key": "a31f6a89995ffb5a661adae6385cf4bc04061aa1392be1f4d238159bbeed90f0"}, {"aliases": ["Jackbox Party Pack"], "description": "Five party games (including updates for You Don't Know Jack and Fibbage) that can be played locally using the series's signature multi-device multiplayer (where players with phones, tablets, laptops, and other devices can participate using a web-based service).", "developers": [{"id": "521816532737851443", "name": "Jackbox Games"}], "executables": [{"is_launcher": false, "name": "tjpp.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0e58c6bb043d63cd2306b2a5602ab5fd", "id": "463963734507782144", "name": "The Jackbox Party Pack", "publishers": [{"id": "521816532737851443", "name": "Jackbox Games"}], "splash": "529f930bc78fe48a063ccaf2bea008a8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "331670", "sku": "331670"}], "type": 1, "verify_key": "a6551d30cec5fc3eb0f530bac9181ba9e82704bb7048d2295b7339061d7e3e25"}, {"aliases": ["Nekopara Vol. 1"], "description": "A visual novel which removes player choice and instead uses an entirely linear story to let players interact with catgirls.", "developers": [{"id": "521816576895352838", "name": "NEKO WORKs"}], "executables": [{"is_launcher": false, "name": "nekopara_vol1.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a7822d5f861c79e485bf18e9ef64808e", "id": "464273275904589834", "name": "NEKOPARA Vol. 1", "publishers": [{"id": "521816532288798739", "name": "Sekai Project"}], "splash": "5192b7aba1a1ccc0984dae9c63c9a142", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "333600", "sku": "333600"}], "type": 1, "verify_key": "8f6cd5489c74dd19bf6d7b5ddb81157035b80ab4aa3a06d6bed2d2db015e47ad"}, {"description": "The third release in the Grand Theft Auto Franchise stars silent criminal protagonist Claude who, after having been betrayed and left for dead, is out for revenge. It was the first GTA game in 3D, an evolution that proved to be pivotal and helped establish the franchise as one of gaming's most popular (and controversial).", "developers": [{"id": "521816560537567261", "name": "Rockstar North"}], "executables": [{"is_launcher": false, "name": "gta3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "410f75ff51f1d24848f7be2e68271c9c", "id": "464434670646460427", "name": "Grand Theft Auto III", "publishers": [{"id": "521816574512857088", "name": "Capcom"}], "splash": "1470b1f6b3b96630cbf0754d2b350151", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "12100", "sku": "12100"}], "type": 1, "verify_key": "994079853610c52fd951d91898de89c53468f71c8ed0218376de0127e131aec1"}, {"description": "The developers behind I Am Bread and Surgeon Simulator are working on a MMO that takes place in a sky of endless islands.", "developers": [{"id": "521816516593975297", "name": "Bossa Studios"}], "executables": [{"is_launcher": false, "name": "worldsadrift.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1fe1b4a5caa23600a83cbca42d0fb65f", "id": "464507152111763457", "name": "Worlds Adrift", "publishers": [{"id": "521816516593975297", "name": "Bossa Studios"}], "splash": "2a2a959a5c3121adca4982850a4a0588", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "322780", "sku": "322780"}], "type": 1, "verify_key": "d1593a78303ecb6b51314a40cf6bf582292e135626a2e3494d4166c742c694f1"}, {"description": "We Were Here Too is the sequel to We Were Here, developed by Total Mayhem Games.", "developers": [{"id": "521816654095843328", "name": "Total Mayhem Games"}], "executables": [{"is_launcher": false, "name": "we were here too.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2dd97785fe5b9b203a2435cf2b123233", "id": "464823241098395674", "name": "We Were Here Too", "publishers": [{"id": "521816654095843328", "name": "Total Mayhem Games"}], "splash": "7a4f08f022ca29e06e7587a473787cc9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "677160", "sku": "677160"}], "type": 1, "verify_key": "be514f49009fd4ff2ef84b28f8a5077291a3d27f429e9ef1232edbfe6f37fe69"}, {"description": "Farm Together", "developers": [{"id": "521816720965632021", "name": "Milkstone Studios"}], "executables": [{"is_launcher": false, "name": "farmtogether.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6c2733d1e623c707b98f51763bfe7af5", "id": "464830344558805002", "name": "Farm Together", "publishers": [{"id": "521816720965632021", "name": "Milkstone Studios"}], "splash": "08e24361d806547631587bf87bb124da", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "673950", "sku": "673950"}], "type": 1, "verify_key": "2cf18b332ac3ae1bcb405940fffeb17198f5ceaf8a421aab7e4d38ec11285a0a"}, {"description": "Bloodlines is a first person action-RPG built on Source engine and based on the World of Darkness setting from White Wolf.", "developers": [{"id": "521816667756560395", "name": "Troika Games L.L.C."}], "executables": [{"is_launcher": false, "name": "vampire.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f5c0861e1f2791b160aabc18a3cbeccf", "id": "464956888656773150", "name": "Vampire: The Masquerade - Bloodlines", "publishers": [{"id": "521816501544550404", "name": "Activision"}], "splash": "dd1a28bec2f1f1c79e19f4dffc07e1e8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "2600", "sku": "2600"}], "type": 1, "verify_key": "aeb2eeb8fc8b94636ca8154a1a6f717828824fe126e15aa9fccb4720e16f502e"}, {"description": "", "executables": [{"is_launcher": false, "name": "stoneshard.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1122ab446068272c87b048c4dd3bd891", "id": "465087252574371850", "name": "Stoneshard: Prologue", "publishers": [{"id": "521816639512248334", "name": "Ink Stains Games"}], "splash": "96f5c9e73977d0c152d3b79987d68dd0", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "869760", "sku": "869760"}], "type": 1, "verify_key": "0f12d85a60e9a0738839bfa963084a43746f1b0a94ecc47f91460ec1af5ab3a2"}, {"description": "The sequel to Vertigo Gaming's original \"hardcore restaurant sim\" adds new food prep mechanics, several dozen new recipes, and the ability for players to customize the look of their own restaurant.", "developers": [{"id": "521816627767934976", "name": "Vertigo Gaming Inc."}], "executables": [{"is_launcher": false, "name": "csd2.exe", "os": "win32"}], "flags": 0, "guild_id": "341748228875747338", "hook": true, "icon": "370e81edcc0c1dbec69645de0822981d", "id": "465247704155553792", "name": "Cook, Serve, Delicious! 2!!", "primary_sku_id": "465247704155553792", "publishers": [{"id": "521816627767934976", "name": "Vertigo Gaming Inc."}], "slug": "cook-serve-delicious-2", "splash": "5f6a5277ca0e79ffdef88c0ec45861a5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "386620", "sku": "386620"}], "type": 1, "verify_key": "1d3db4eaf0c96c73b362bdeeb5da76b8c2bcb61ef93a55ef3e4dd29ad9c10a9e"}, {"description": "Dark Crusade is Relic's second expansion pack to Warhammer 40,000: Dawn of War, adding even more units and two new races to the game. The game itself is also available as a stand-alone game without needing the full game or the previous expansion.", "developers": [{"id": "521816593798397970", "name": "Relic Entertainment"}], "executables": [{"is_launcher": false, "name": "dawn of war dark crusade/darkcrusade.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c8dde95768fa90de4e17143d66a43dbe", "id": "465536900560584714", "name": "Warhammer 40,000: Dawn of War - Dark Crusade", "publishers": [{"id": "521816550596935692", "name": "THQ"}], "splash": "6b7554f5ed242f97d7ae8235f8cea732", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "4580", "sku": "4580"}], "type": 1, "verify_key": "86f6315187f9e72be8505d56b2fedc35f7fa09a8c8f251287a97711158937a73"}, {"aliases": ["Final Fantasy X | X-2 HD Remaster"], "description": "A collection for PS3, PS4, Vita and PC, containing Final Fantasy X International and Final Fantasy X-2 International + Last Mission featuring HD visuals and a remastered soundtrack.", "developers": [{"id": "521816526920351761", "name": "Square Enix"}], "executables": [{"is_launcher": false, "name": "ffx.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7a95b41902d70a696a132b7564707c0b", "id": "465985864095367178", "name": "FINAL FANTASY X/X-2 HD Remaster", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}], "splash": "73e11b058b07bc9c6429b4b5d28b75b3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "359870", "sku": "359870"}], "type": 1, "verify_key": "1eff0f3faf9140d190be013570e5b04bf30c7997617c742629a769474b3e9e45"}, {"bot_public": true, "bot_require_code_grant": false, "description": "Longshot Discord Integration", "flags": 0, "hook": true, "icon": null, "id": "466240509682384896", "name": "Longshot [Dev]", "summary": "", "type": 1, "verify_key": "94e40df21a0b2b1464eb1e88e070183df9b6304a443241f305da552147d9776f"}, {"description": "Heavy Metal Machines is an action driving real time strategy game. Where your driving skills using WASD controllers are paired with your team's strategy to destroy your enemy towers and base!", "developers": [{"id": "521816682684088332", "name": "Hoplon Infotainment"}], "executables": [{"is_launcher": false, "name": "heavy metal machines/hmm.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f97bc78f843e208f1af9c72288b64db6", "id": "466296927944835082", "name": "Heavy Metal Machines", "publishers": [{"id": "521816682684088332", "name": "Hoplon Infotainment"}], "splash": "0efa3a48515d61954e9247f2d69d5da2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "331360", "sku": "331360"}], "type": 1, "verify_key": "338a8565a1df010518287a1b698978cf9bc6168d32049d9ddea5923032dbb55b"}, {"description": "SOS is a PC multiplayer survival game set inside a fictional reality show against the backdrop of an authoritarian past. It focuses on ad-hoc team building and showcasing players\u2019 personalities through voice chat.", "developers": [{"id": "521816771255336984", "name": " Outpost Games"}], "executables": [{"is_launcher": false, "name": "sos-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "35020bb10ece173f26f7095ec1d2a0d6", "id": "466334957183303710", "name": "SOS", "publishers": [{"id": "521816771255336984", "name": " Outpost Games"}], "splash": "f1c9c6e536c54962513a045b008d0c18", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "619080", "sku": "619080"}], "type": 1, "verify_key": "fe9157586664fd889a5731ae88544484d7e7285b5725c7404006b912772735a3"}, {"description": "A spiritual successor to the Flatout franchise being worked on by Bugbear Entertainment.", "developers": [{"id": "521816544385171486", "name": "Bugbear Entertainment Ltd."}], "executables": [{"is_launcher": false, "name": "wreckfest_x64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "154bbe116a68aed48b50aa2e902462c3", "id": "466457842401148948", "name": "Wreckfest", "publishers": [{"id": "521816544385171486", "name": "Bugbear Entertainment Ltd."}, {"id": "521816515113385984", "name": "Bugbear"}], "splash": "a5f569f511c8e5f2e6c7555705215fbd", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "228380", "sku": "228380"}], "type": 1, "verify_key": "671ca1c34fbecb7571f14fe6684fc442f45dc561f3864916177d259268fe6bfc"}, {"description": "Card Hunter is a free-to-play online card-combat game from former Irrational/Looking Glass duder, Jonathan Chey.", "developers": [{"id": "521816795938684935", "name": "Blue Manchu"}], "executables": [{"is_launcher": false, "name": "cardhunter.app", "os": "darwin"}, {"is_launcher": false, "name": "cardhunter.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "07c1f558636a8270b5cc8c65c86b9db5", "id": "466640524670009354", "name": "Card Hunter", "publishers": [{"id": "521816795938684935", "name": "Blue Manchu"}], "splash": "242ae13fc8d5b0a67fe86f447d9d75bd", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "293260", "sku": "293260"}], "type": 1, "verify_key": "dc54126f5098e1eee11eaf4e6071ca3f9689750aa38327ff89d9722697087988"}, {"description": "Gear Up is an online multiplayer vehicle shooter in development by Doctor Entertainment for PC, Mac and Linux.", "developers": [{"id": "521816683233411083", "name": "Doctor Entertainment"}], "executables": [{"is_launcher": false, "name": "traktor.amalgam.app.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4e3e038908faff7ceb94852165f5e50a", "id": "466685661806592000", "name": "Gear Up", "publishers": [{"id": "521816683233411083", "name": "Doctor Entertainment"}], "splash": "d914e9916a9899b170d01407d2636fbe", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "214420", "sku": "214420"}], "type": 1, "verify_key": "c773846b569dcdb7b98cd0caf81c390364122174257cfd6feb94342d2bbd862a"}, {"description": "A visual novel from shinachiku-castella.", "developers": [{"id": "521816525846478850", "name": "shinachiku-castella"}], "executables": [{"is_launcher": false, "name": "amorous.game.windows.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "eb374a82c5fe2bce1582f61da4587e25", "id": "466691613138354196", "name": "Amorous", "publishers": [{"id": "521816525846478848", "name": "Team Amorous"}], "splash": "dd6f19b1a799df24f1e1ec41cc26f815", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "778700", "sku": "778700"}], "type": 1, "verify_key": "70b80414540abe3ccc95c608d2a50c7d3abd650daade8d341f8d4a17ea2e3058"}, {"description": "Pixel Worlds", "executables": [{"is_launcher": false, "name": "pixelworlds.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4af4b5fa0932bd166953f1855476cd51", "id": "466733503720062996", "name": "Pixel Worlds", "publishers": [{"id": "521816734844583946", "name": "Kukouri Mobile Entertainment"}], "splash": "eaa148580bc6e1c975d618a31e88a523", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "636040", "sku": "636040"}], "type": 1, "verify_key": "bc50678a699e3245d5ac1d1c351bbbeba49cf12f4e906bae101b2d677a3cf64c"}, {"cover_image": "1068ad9bd6ce185859965f5cbf40dfa9", "description": "Starbound is an extraterrestrial sandbox adventure game! You\u2019ve fled your home, only to find yourself lost in space with a damaged ship. Your only option is to beam down to the planet below and gather the resources you need to repair your ship and set off to explore the vast, infinite universe\u2026", "developers": [{"id": "521816578342387713", "name": "Chucklefish Games"}], "executables": [{"is_launcher": false, "name": "starbound.app", "os": "darwin"}, {"is_launcher": false, "name": "starbound_opengl.exe", "os": "win32"}, {"is_launcher": false, "name": "starbound.exe", "os": "win32"}], "flags": 0, "guild_id": "225269243262926849", "hook": true, "icon": "3d4cd654db31681e44a5c8fbbb40713f", "id": "467102538278109224", "name": "Starbound", "overlay": true, "primary_sku_id": "471033751535616000", "publishers": [{"id": "521816578342387713", "name": "Chucklefish Games"}], "rpc_origins": [], "slug": "starbound", "splash": "62c84941f0bcbe6317f7d230c5d3beef", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "211820", "sku": "211820"}, {"distributor": "discord", "id": "471033751535616000", "sku": "471033751535616000"}], "type": 1, "verify_key": "739d040105fa2072eef760aff268608597e79a205986b1f9ee180873079a2602"}, {"description": "Montaro", "developers": [{"id": "521816530866929707", "name": "JCKSLAP"}], "executables": [{"is_launcher": false, "name": "montaro/nw.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "cdd0f2e1172170cde429389f736dd0a0", "id": "467286012104671232", "name": "Montaro", "publishers": [{"id": "521816530866929707", "name": "JCKSLAP"}], "splash": "82eb91564a3433af6a12eac805bbfabe", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "495890", "sku": "495890"}], "type": 1, "verify_key": "bea39522546cef9226c9dd790a3d9e2d2356b590ba926850351b1114ccc026bf"}, {"description": "A class-based, sci-fi arena shooter in a world where gravity has become distorted and the Law is waging a war on those who would break it. From the head designer of Unreal Tournament and development lead of Killzone.", "developers": [{"id": "521816742675218462", "name": "Boss Key Productions"}], "executables": [{"is_launcher": false, "name": "lawbreakers.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c6e879ef3a52875ae524089475029845", "id": "467724362674470912", "name": "LawBreakers", "publishers": [{"id": "521816511610880011", "name": "Nexon Corporation"}], "splash": "76ce1ca2a8b516d45e8e503e79e4f6aa", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "350280", "sku": "350280"}], "type": 1, "verify_key": "c3e67073c58321b7ac450a37224b99571e7cc4fba804efe10c5da1fd31948779"}, {"description": "HDH&HG attempts to replicate some of the more nuanced parts of shooting a gun, including loading magazines.", "executables": [{"is_launcher": false, "name": "h3vr.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3e61c40b17c41a166aded051c41af68a", "id": "467788345565511690", "name": "Hot Dogs, Horseshoes & Hand Grenades", "publishers": [{"id": "521816545874149378", "name": "RUST LTD"}], "splash": "02dd29948b8ec699736e71bd82b5c186", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "450540", "sku": "450540"}], "type": 1, "verify_key": "66fe6a1297e795b8cb19fb650d9259501d2631222b4430f37533a1cb89596768"}, {"aliases": ["RollerCoaster Tycoon 2"], "description": "Stretch your imagination further to build bigger parks and higher coasters!", "executables": [{"is_launcher": false, "name": "openrct2.exe", "os": "win32"}, {"is_launcher": false, "name": "rct2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ac387a288927b3af8b478ce352146158", "id": "467979045179752448", "name": "RollerCoaster Tycoon 2: Triple Thrill Pack", "primary_sku_id": "489157993385033788", "publishers": [{"id": "521816550596935691", "name": "Atari Interactive, Inc."}], "slug": "rollercoaster-tycoon-2-triple-thrill-pack", "splash": "ffc1daaa7357e6bf4af422af6e77930a", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "489157993385033788", "sku": "489157993385033788"}, {"distributor": "steam", "id": "285330", "sku": "285330"}], "type": 1, "verify_key": "2081e62d4fe693ec4c46259e1428059cdc574f91b6b70854f3843367eab3b7b9"}, {"description": "A compilation of high-definition remakes of the first three Crash Bandicoot games.", "developers": [{"id": "521816513561493528", "name": "Vicarious Visions"}], "executables": [{"is_launcher": false, "name": "crashbandicootnsanetrilogy.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e9e7b48fd1982e91224ce7d13d22b292", "id": "468099355962900480", "name": "Crash Bandicoot\u2122 N. Sane Trilogy", "publishers": [{"id": "521816525410402312", "name": "Sony Interactive Entertainment America"}], "splash": "b853a85105bb7c698ffe49703016f755", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "731490", "sku": "731490"}], "type": 1, "verify_key": "4196a13ae81ad512410374008c7bbe9aed487ec1be6f43e2de223ab5eed8499c"}, {"description": "Islands of Nyne: Battle Royale is an online, competitive, first-person shooter.", "developers": [{"id": "521816599095934979", "name": "Define Human Studios"}], "executables": [{"is_launcher": false, "name": "ionbranch_be.exe", "os": "win32"}, {"is_launcher": false, "name": "ionbranch.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3946e37d316e9000165b1d7e3b668605", "id": "468254179987685406", "name": "Islands of Nyne: Battle Royale", "publishers": [{"id": "521816599095934979", "name": "Define Human Studios"}], "splash": "db12ff33679a2c9177b5e5f7f4c07ae7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "728540", "sku": "728540"}], "type": 1, "verify_key": "d8237f1afa3f0159c5f8c580bf144524d453e73fdf3cb5a26bc0dd4adf18f425"}, {"description": "Rules of Survival is a mobile game available for Android or iOS.", "developers": [{"id": "521816803228254219", "name": "NetEase"}], "executables": [{"is_launcher": false, "name": "rules of survival/ros.exe", "os": "win32"}], "flags": 0, "guild_id": "383908501170290690", "hook": true, "icon": "de7bdca0f5ccb98cc1e7329b1a0a16b3", "id": "468577647392456714", "name": "Rules Of Survival", "publishers": [{"id": "521816803228254219", "name": "NetEase"}], "splash": "41132f33119e58ab90cba02eaa7271fb", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "788260", "sku": "788260"}], "type": 1, "verify_key": "7deb9037edf5e1cd4514377b1af0a8ece4c203a1003463245fee6f3d84593529"}, {"description": "", "developers": [{"id": "521816705295712277", "name": "Triumph Studios"}], "executables": [{"is_launcher": false, "name": "aow3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ec745c18a34ac81de3474fa336ca7219", "id": "468606521433915404", "name": "Age of Wonders III", "primary_sku_id": "491730373101748225", "publishers": [{"id": "521816558092156949", "name": "EuroVideo Medien GmbH"}], "slug": "age-of-wonders-iii", "splash": "cc39727430d1e353763058d666ad92d0", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "491730373101748225", "sku": "491730373101748225"}, {"distributor": "steam", "id": "226840", "sku": "226840"}], "type": 1, "verify_key": "8b5c4437b95e62187c767c24ed93444810ab1a17136bae33f275041e4644c1eb"}, {"description": "", "developers": [{"id": "521816575481872385", "name": "Dark Star"}], "flags": 0, "guild_id": "293120529030840330", "hook": true, "icon": "761232c9c64b0b24eefbf193d3f70d81", "id": "468611186330566677", "name": "SINNER", "primary_sku_id": "489184797936058380", "publishers": [{"id": "521816559031812100", "name": "Another Indie"}], "slug": "sinner", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "489184797936058380", "sku": "489184797936058380"}], "type": 1, "verify_key": "cede42809008ac1bb3fbcb5ffd473084f4d3eec487e449512459bc0fbba98846"}, {"aliases": ["S.T.A.L.K.E.R Clear Sky"], "description": "A prequel to the open-world first-person shooter S.T.A.L.K.E.R.: Shadow of Chernobyl. Set a year before the events of the first game, Clear Sky follows a new character, Scar, through the Zone.", "developers": [{"id": "521816551486259236", "name": "GSC Game World"}], "executables": [{"is_launcher": false, "name": "stalker clear sky/xrengine.exe", "os": "win32"}, {"is_launcher": false, "name": "stalker clear sky/bin/xrengine.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ff86c466d4c2aebd3d6b12428f83d629", "id": "469153997027016714", "name": "S.T.A.L.K.E.R.: Clear Sky", "publishers": [{"id": "521816737310572545", "name": "KOCH Media"}], "splash": "5867ed2783e12d6a938895fbc6c440db", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "20510", "sku": "20510"}], "type": 1, "verify_key": "a7fdff4c80216a57e27c3cf20fd635eb62388eca347fd7cc4acd85979e32d96f"}, {"description": "Russian Fishing 4", "executables": [{"is_launcher": false, "name": "russianfishing4/rf4_x64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "35eafd57ad9c52ca2a525667d6e6e8fe", "id": "469213224215248896", "name": "Russian Fishing 4", "publishers": [{"id": "521816581433589780", "name": "Russian Fishing"}], "splash": "e7ae190d5ad860f3a21f3f6ae4ef50d1", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "766570", "sku": "766570"}], "type": 1, "verify_key": "177a1f4b4c1d440558b12fae671919c5835feef76cf35729d6cda84faa6c7d19"}, {"description": "Omensight is an action murder mystery game. In order to prevent the apocalypse, you are fated to repeat the last day of the world until it can be saved. Investigate clues, fight enemies, and solve the murder of the Godless-Priestess.", "developers": [{"id": "521816671434833942", "name": "Spearhead Games"}], "executables": [{"is_launcher": false, "name": "omensight.exe", "os": "win32"}], "flags": 0, "guild_id": "432543817414082562", "hook": true, "icon": "51ab3828dbebd592978ac956847616c5", "id": "469278650936721428", "name": "Omensight", "primary_sku_id": "469679019701567528", "publishers": [{"id": "521816671434833942", "name": "Spearhead Games"}], "slug": "omensight", "splash": "1ea3ad0906d9e1ede73a84aceb6815a4", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "469679019701567528", "sku": "469679019701567528"}, {"distributor": "steam", "id": "455820", "sku": "455820"}], "type": 1, "verify_key": "9133916b550aca702f67811f5222f9b22beb7462280b8ff4774d0800d1df5079"}, {"cover_image": "4e869bf3f740a0d9abf10dcdd09ed313", "description": "Sundered is a chaotic hand\u00ad-drawn metroidvania where you resist or embrace ancient eldritch powers. Confront hordes of terrifying enemies in an ever-changing world inspired by the works of H.P. Lovecraft. Sundered is a challenging and unique take on a classic genre from the creators of Jotun, now with local co-op!", "developers": [{"id": "521816587041505293", "name": "Thunder Lotus Games "}], "executables": [{"is_launcher": false, "name": "sundered.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7d0fb8c73bba4f6214a222be656b03d6", "id": "469280323109257228", "name": "Sundered", "primary_sku_id": "471034342651592734", "publishers": [{"id": "521816587041505293", "name": "Thunder Lotus Games "}], "slug": "sundered", "splash": "7321daa6c1290f2605c09b79da1e2c5e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "535480", "sku": "535480"}, {"distributor": "discord", "id": "471034342651592734", "sku": "471034342651592734"}], "type": 1, "verify_key": "d07cbf97ea2b47e7196d78363adaba9c9cab096ec730b5a3cb9ced32dec91818"}, {"description": "", "developers": [{"id": "521816671434833940", "name": "SomaSim Games"}], "executables": [{"is_launcher": false, "name": "project highrise/game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a322140ee3eef3b9403e03b3dcdfc234", "id": "469288321814757402", "name": "Project Highrise", "primary_sku_id": "471030558009589772", "publishers": [{"id": "521816586588258348", "name": "Kasedo Games"}], "slug": "project-highrise", "splash": "3ca13f8fb1814bfb91dec0a3e1006113", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "423580", "sku": "423580"}, {"distributor": "discord", "id": "471030558009589772", "sku": "471030558009589772"}], "type": 1, "verify_key": "62b287c2a2ac23023449c5f5c1983c98ff841396f28e7acc5be79ba92f4c5471"}, {"description": "", "developers": [{"id": "521816629416296450", "name": "Skilltree Studios"}], "executables": [{"is_launcher": false, "name": "crookz.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2dba93ab3ceedb0367695d66e9263b13", "id": "469288750019641365", "name": "Crookz - The Big Heist", "primary_sku_id": "471030377197076485", "publishers": [{"id": "521816629416296449", "name": "Kalypso Media"}], "slug": "crookz-the-big-heist", "splash": "1d2cef350683074825f1dea0b869d62a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "310490", "sku": "310490"}, {"distributor": "discord", "id": "471030377197076485", "sku": "471030377197076485"}], "type": 1, "verify_key": "b7c02d1515684a4fb9685bf56f7cf32ba3c2be72ef84204da1fec49283c7302e"}, {"aliases": ["System Shock"], "description": "", "developers": [{"id": "521816531831750657", "name": "Nightdive Studios"}, {"id": "570358003165822992", "name": "Looking Glass Studios"}], "executables": [{"is_launcher": false, "name": "system shock.exe", "os": "win32"}, {"is_launcher": false, "name": "sshock.exe", "os": "win32"}], "flags": 0, "guild_id": "190583485826727936", "hook": true, "icon": "29a0a4f7d4f1a6e26945f1c3b813d663", "id": "469292352893222942", "name": "System Shock: Enhanced Edition", "primary_sku_id": "471028545271889920", "publishers": [{"id": "521816531831750657", "name": "Nightdive Studios"}], "slug": "system-shock-enhanced-edition", "splash": "640f1548a4e16022c384f1e7e9cf7fbc", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "471028545271889920", "sku": "471028545271889920"}, {"distributor": "steam", "id": "410710", "sku": "410710"}], "type": 1, "verify_key": "f04f7fe198730b3bedf7b52fab62dc39e2613e6c9362a5349a6e75dbf4bc188b"}, {"description": "", "executables": [{"is_launcher": false, "name": "metronomicon.exe", "os": "win32"}], "flags": 0, "guild_id": "330171429649645588", "hook": true, "icon": "4b7cd385da48444d28dbf943b18efe72", "id": "469292858701119508", "name": "The Metronomicon: Slay The Dance Floor", "primary_sku_id": "471028348039069737", "publishers": [{"id": "524352796632416310", "name": "Akupara Games"}], "slug": "the-metronomicon-slay-the-dance-floor", "splash": "798b58029adde88b9429342d90914f0f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "416790", "sku": "416790"}, {"distributor": "discord", "id": "471028348039069737", "sku": "471028348039069737"}], "type": 1, "verify_key": "8d8829ecbbb1b9ebd4b49c1de16ec53b6a4a3db16d8259ad8b68efdac4ca5b69"}, {"description": "", "developers": [{"id": "521816746546561024", "name": "Realmforge Studios GmbH"}], "executables": [{"is_launcher": false, "name": "dungeons2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "da6258fd78e8cfda1a48d637e9624ea4", "id": "469293209214910504", "name": "Dungeons 2", "primary_sku_id": "471028128547078157", "publishers": [{"id": "521816629416296449", "name": "Kalypso Media"}], "slug": "dungeons-2", "splash": "ba51f599a8c192905f3c0c2d033ce8a2", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "471028128547078157", "sku": "471028128547078157"}, {"distributor": "steam", "id": "262280", "sku": "262280"}], "type": 1, "verify_key": "be0b69f1184d7f539ed1b8a12b6d4d4e5e973d524552e958f01186a451c085e8"}, {"description": "", "developers": [{"id": "521816701860577325", "name": "Haemimont Games AD"}], "executables": [{"is_launcher": false, "name": "tropico4.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "adaf0c54871af63ee62e3de4b68006eb", "id": "469293612207833089", "name": "Tropico 4", "primary_sku_id": "471027915086233610", "publishers": [{"id": "521816629416296449", "name": "Kalypso Media"}], "slug": "tropico-4", "splash": "32c49d8f2944448028c79026ed6878c5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "57690", "sku": "57690"}, {"distributor": "discord", "id": "471027915086233610", "sku": "471027915086233610"}], "type": 1, "verify_key": "cd5554f6cdf53a1f0bf5e5d8e08c36ae2ec41409cfe8429d716343a38943cac5"}, {"cover_image": "00bab57ec56a751b8977933fd78f6a9c", "description": "Red Faction: Guerrilla Re-Mars-tered re-defines the limits of destruction-based game-play with a huge open-world, fast-paced guerrilla-style combat, and true physics-based destruction.", "executables": [{"is_launcher": false, "name": "rfg.exe", "os": "win32"}], "flags": 0, "guild_id": "254065019807858689", "hook": true, "icon": "267405d6747941176cd56e69b3c2fded", "id": "469429746007015426", "name": "Red Faction Guerrilla Re-Mars-tered", "primary_sku_id": "489214919510851595", "publishers": [{"id": "521816755446743064", "name": "Volition"}], "slug": "red-faction-guerrilla-re-mars-tered", "splash": "ee3420775b7a6bb78f3cd345500e5aa6", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "489214919510851595", "sku": "489214919510851595"}, {"distributor": "steam", "id": "667720", "sku": "667720"}], "type": 1, "verify_key": "4ec360dd032e12bff500148ff7702f1eff7efc985494fd8ecba559fb3ce33df6"}, {"description": "", "executables": [{"is_launcher": false, "name": "hellbound-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "49011bad2821094e39b1bed9a3b9c8a1", "id": "469564278853206025", "name": "Hellbound: Survival Mode", "publishers": [{"id": "521816540853698568", "name": "Saibot Studios"}], "splash": "aebedaadc9f58b7da38214c4cac45bc2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "802200", "sku": "802200"}], "type": 1, "verify_key": "41f3a8b758d4f36861c0ed1cce8af7bd74098688d0eab651098009e54e0977dd"}, {"bot_public": true, "bot_require_code_grant": false, "cover_image": "423d04bf6d0d9c959df2a8933889466b", "description": "Endless running arena shooter. Hotrod styled robots. Highspeed physics-based brawl. Online multiplayer.", "developers": [{"id": "521816502500982843", "name": "Hero Blocks ApS"}], "executables": [{"is_launcher": false, "name": "madmachines.exe", "os": "win32"}], "flags": 0, "guild_id": "375629633590132737", "hook": true, "icon": "1e2fd96e2e5e7c7678d65a85c0644f7f", "id": "469807750084296716", "name": "MAD MACHINES", "primary_sku_id": "487272772393762826", "publishers": [{"id": "521816502500982843", "name": "Hero Blocks ApS"}], "slug": "mad-machines", "splash": "bfd1df8f821e511f5d40f97ca054bd10", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "487272772393762826", "sku": "487272772393762826"}, {"distributor": "steam", "id": "611260", "sku": "611260"}], "type": 1, "verify_key": "acc2b361ca15d68935a690d1f6dc830b40339d72494697b3d69f348c033f1aba"}, {"aliases": ["Metal Gear Solid V: Ground Zeroes"], "description": "The stand-alone prelude to Metal Gear Solid V: The Phantom Pain, giving players a taste of the new open-world gameplay mechanics while setting up the main game's story, as Snake (Big Boss) must infiltrate a prison camp to rescue his comrades.", "developers": [{"id": "521816572088811558", "name": "Kojima Productions"}], "executables": [{"is_launcher": false, "name": "mgsgroundzeroes.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d6c1af42b9748c28334569a3dda3209a", "id": "469944923928657939", "name": "METAL GEAR SOLID V: GROUND ZEROES", "publishers": [{"id": "521816513074692111", "name": "Konami"}], "splash": "ba8b78c3b158ee8d02ea5cbbb97477a6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "311340", "sku": "311340"}], "type": 1, "verify_key": "9610b38413a2a3baa37a343bfb1e39564261c253cdb486fabd19780ed6ccf222"}, {"description": "Bloody Trapland is a 2011 platformer released on the PC and distributed through Desura. Its style is reminiscent of Super Meat Boy or I Wanna Be the Guy, but with two additional game modes.", "executables": [{"is_launcher": false, "name": "bloody trapland.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d4fb5ed6bb0f425d51c1e4b92e7d7940", "id": "469959314183028736", "name": "Bloody Trapland", "publishers": [{"id": "521816752212934677", "name": "2Play"}], "splash": "30f244577188863f085a6f80dedf8173", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "257750", "sku": "257750"}], "type": 1, "verify_key": "44e14b42dd47ccc04aa990a4fed0ab345c51f3d71f6c6b0337842f84423ec056"}, {"description": "", "executables": [{"is_launcher": false, "name": "wormis.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ae0fbabf133de622834630b1e8ed7a78", "id": "469989584277602304", "name": "Worm.is: The Game", "publishers": [{"id": "521816605827661834", "name": "Freakinware Studios"}], "splash": "66a7d4bb4d9be1aa0162d7fdb57c12e8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "466910", "sku": "466910"}], "type": 1, "verify_key": "3e59943b5d24d5d0648af525b2b46040d9acafbd73d06dde3fac8c31b4c8c3ed"}, {"description": "The newest entry in GSC Game World's RTS franchise, which aims to recreate the classic gameplay of the first game.", "developers": [{"id": "521816551486259236", "name": "GSC Game World"}], "executables": [{"is_launcher": false, "name": "cossacks 3/cossacks.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3a56e1d45f4844559460773c171a3710", "id": "470220034237530112", "name": "Cossacks 3", "publishers": [{"id": "521816551486259236", "name": "GSC Game World"}], "splash": "74d0adadc51d0fa923ea1e5649d5b313", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "333420", "sku": "333420"}], "type": 1, "verify_key": "92f27521c1a1ef6850451a9a142abbd7b440e3f86536fa3f49278b88dc3b29b7"}, {"description": "Guild Wars is a 'competitive online role-playing game' developed by ArenaNet and published by NCsoft, notable for instanced, skilled play and for being one of the first games of its time without a subscription fee.", "developers": [{"id": "521816722752405504", "name": "ArenaNet, Inc."}], "executables": [{"is_launcher": false, "name": "gw.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b5902d6b299fc4ff7c2e3abe851e0ce8", "id": "470282452674412564", "name": "Guild Wars", "publishers": [{"id": "521816560051159044", "name": "NCsoft Corporation"}], "summary": "", "type": 1, "verify_key": "fdc2e7f256257e1b1e119b73f5682c31ebaee9b5c4ef4adc28677d90d9d7e4c1"}, {"aliases": ["The Sims 2 Ultimate Collection"], "description": "", "executables": [{"is_launcher": false, "name": "sims2ep9.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1e1846c18b16a283b3d13ea28916ed74", "id": "470283475660963850", "name": "The Sims 2: Ultimate Collection", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "summary": "", "type": 1, "verify_key": "d7334be69858900d9a7fab9400231c8dfc5a188c8c123293b4c5e97a8120fea1"}, {"description": "Dragon Age: Origins is an epic fantasy role-playing game featuring a rich story, personality-driven characters, and tactical, bloody combat. It is considered a spiritual successor to the Baldur's Gate series.", "developers": [{"id": "521816589570408449", "name": "BioWare"}], "executables": [{"is_launcher": false, "name": "daorigins.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d902e88b33004f164d1aac30ce729f79", "id": "470283661414105131", "name": "Dragon Age: Origins", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "summary": "", "type": 1, "verify_key": "53b67cd1b003d5e1de4c91946fdc7b83634eded34dd48791d2ab6c2946382ea2"}, {"description": "Minimalist rhythm-based action game with EDM. Heavily influenced by the game Undertale.", "developers": [{"id": "521816583115505695", "name": "SEROSOO"}], "executables": [{"is_launcher": false, "name": "project_rhombus.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "541d76e52d1ca7a4dc13c743bfcd998c", "id": "470399665154686986", "name": "Project Rhombus", "publishers": [{"id": "521816583115505694", "name": "PsychoFlux Entertainment"}], "splash": "294ee69555b4f35bb4e21103937d60e5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "735570", "sku": "735570"}], "type": 1, "verify_key": "92fe24bf8c11820494d5c83d47c7b33a1376f468acb20d5e23ebd8328de3cbea"}, {"description": "An online multiplayer brawler, with simple game mechanics.", "executables": [{"is_launcher": false, "name": "climb/climb.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b01f9d1f5879eb2c12d72540bf339351", "id": "470810047547572244", "name": "Climb", "publishers": [{"id": "521816580838129678", "name": "A Sweet Studio"}], "splash": "73e3590d7feb91817b8c803d37d537b7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "876900", "sku": "876900"}], "type": 1, "verify_key": "0ff7e5cb9eae85927c372040aae0fef3a414c2ac74632a56b53371edfa394675"}, {"aliases": ["Command and Conquer Red Alert 3"], "description": "Turn back the clock yet again in EALA's third installment of the popular alternate-historical RTS, Command & Conquer: Red Alert 3.", "developers": [{"id": "521816605223813131", "name": "EA Los Angeles"}], "executables": [{"is_launcher": false, "name": "command and conquer red alert 3/ra3.exe", "os": "win32"}, {"is_launcher": false, "name": "ra3ep1.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e8ae0faeb78547c74d9fea73efb30263", "id": "470958640031989761", "name": "Command and Conquer: Red Alert 3", "publishers": [{"id": "521816538202767363", "name": "EA Games"}], "splash": "d6a9f68f5441170a0280bf47258334c9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "17480", "sku": "17480"}], "type": 1, "verify_key": "6b83c61037d3acd70060817b9ad46279d866d8fd6781ce8b8d54804afbd60d57"}, {"description": "Trapped in the body of a sword robot, survive the trials of the arena!", "developers": [{"id": "521816678430933002", "name": "Doborog"}], "executables": [{"is_launcher": false, "name": "clone drone in the danger zone.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "64220f512066b93536a49c382b315623", "id": "471192232985231370", "name": "Clone Drone in the Danger Zone", "publishers": [{"id": "521816652262670339", "name": "Doborog Games"}], "splash": "008f3cc4b5d77b63ee556f1b1a6e1c7f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "597170", "sku": "597170"}], "type": 1, "verify_key": "f4488d7753c58b1703e95925b12aa20bc13ab185e3df866c9f1ad1a3c91cc904"}, {"description": "", "developers": [{"id": "521816558096351232", "name": "Weappy Studio"}], "executables": [{"is_launcher": false, "name": "police2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1f2feec3adb3391844cfcf2ccbe059da", "id": "471357631697780774", "name": "This Is the Police 2", "primary_sku_id": "474762950108905472", "publishers": [{"id": "521816508167487498", "name": "THQ Nordic"}], "slug": "this-is-the-police-2", "splash": "0e9cf25578240b06268c0c2c92135de4", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "785740", "sku": "785740"}, {"distributor": "discord", "id": "474762950108905472", "sku": "474762950108905472"}], "type": 1, "verify_key": "edebf1169048e71593742679774cdcbcdbbdeee62dca7ac875592e0a21e9450a"}, {"cover_image": "80546ded255554f38b1a3b28dc7c0226", "description": "Continue the epic hack and slash apocalyptic saga as Fury, using your whip to slash through hordes while you traverse an open world.", "developers": [{"id": "521816632285200387", "name": "Gunfire Games"}], "executables": [{"is_launcher": false, "name": "darksiders3.exe", "os": "win32"}], "flags": 0, "guild_id": "411080228052533250", "hook": true, "icon": "027a94b7bf49527387de500cdaf3d9aa", "id": "471358881348452352", "name": "Darksiders III", "primary_sku_id": "471358881348452352", "publishers": [{"id": "521816508167487498", "name": "THQ Nordic"}], "slug": "darksiders-iii", "splash": "32f91b6b0c49946d3eb7f4bd6e1c1292", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "606280", "sku": "606280"}, {"distributor": "discord", "id": "471358881348452352", "sku": "471358881348452352"}], "type": 1, "verify_key": "28d33e0220f806052d4ba836f28ad845dd25fea951d2d141d053522feb85560c"}, {"description": "Escape from the zombie-infested city of Los Perdidos, California in the third installment of Capcom's Dead Rising franchise.", "developers": [{"id": "521816574512857089", "name": "Capcom Game Studios Vancouver"}], "executables": [{"is_launcher": false, "name": "deadrising3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b07f0dbe85b90f0afd080d0f1cbc924f", "id": "471760010016194570", "name": "Dead Rising 3", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}], "splash": "8450be901f89abc3678d12504b94a444", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "265550", "sku": "265550"}], "type": 1, "verify_key": "d829b4ebf66bfac4e3a6774f927b9bad707e7c1d17029ccf928221dbf79221f9"}, {"description": "Nazi scientists have found a way to breed killer dinosaurs. Will this turn the tide of World War II?", "developers": [{"id": "521816621732462595", "name": "800 North"}], "executables": [{"is_launcher": false, "name": "dinodday.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c0d9d570a705b22a58c890396c306677", "id": "472197780836974604", "name": "Dino D-Day", "publishers": [{"id": "521816621732462595", "name": "800 North"}], "splash": "347b38ecbcdf7c60bda4207be8e6f4b3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "70000", "sku": "70000"}], "type": 1, "verify_key": "40189dd081159469041e13db44b277e4a90aa5f37de9fb6335ea026a5282f9d9"}, {"description": "", "executables": [{"is_launcher": false, "name": "the banner saga 3.exe", "os": "win32"}], "flags": 0, "guild_id": "306957465407324171", "hook": true, "icon": "d7150a86209a1798dd9c9212bd73e50d", "id": "472228397020479488", "name": "Banner Saga 3", "primary_sku_id": "472483394085715979", "slug": "banner-saga-3", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "discord", "id": "472483394085715979", "sku": "472483394085715979"}], "type": 1, "verify_key": "8526e4a286c782f7822018a1331f8e85c27579109a3ff53a545d83894c4b3732"}, {"description": "Epic battles of giant robots in a giant war machine and battle in 6 vs 6 online multiplayer.", "executables": [{"is_launcher": false, "name": "warrobots.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e86f979e91fdb40470e83aff57fd7c95", "id": "472823716062167050", "name": "War Robots", "publishers": [{"id": "521816773629181954", "name": "Pixonic"}], "splash": "11d7ecde74b2c82bf041d709941d3468", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "767560", "sku": "767560"}], "type": 1, "verify_key": "678393c2b940415fd386e1451293dcf9bcf22a0d042edd2ae73434db767408c3"}, {"description": "Mobius Final Fantasy", "developers": [{"id": "521816526920351761", "name": "Square Enix"}], "executables": [{"is_launcher": false, "name": "mobiusff.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5a5322b25af21e8efd0d5979d1cb242d", "id": "472837297063067658", "name": "MOBIUS FINAL FANTASY", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}], "splash": "513414c3c289cdf4f9bfc77db9304885", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "536930", "sku": "536930"}], "type": 1, "verify_key": "5afb150369e79ba8ad3f92ed73340f303733eabbdabbaca8e669f96e05a4c286"}, {"description": "Democracy is a political strategy game, in which one takes control of a country, planning budgets and enacting laws, eventually influencing voter behavior.", "developers": [{"id": "521816692079329281", "name": "Positech Computing Ltd."}], "executables": [{"is_launcher": false, "name": "democracy3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8e84de5dc1b60bbf792bccef502423b4", "id": "473064732807528458", "name": "Democracy 3", "publishers": [{"id": "521816692079329280", "name": "Positech Games"}], "splash": "f2dbe26abc46cbc4044a3fe8a9561343", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "245470", "sku": "245470"}], "type": 1, "verify_key": "b182f4ac0651a3ec5ebffd970905ca5f82e6302b5c681190008c557493083919"}, {"description": "A poker game from Telltale featuring many key characters from their studio along with other guest stars.", "developers": [{"id": "521816542258790401", "name": "Telltale Games"}], "executables": [{"is_launcher": false, "name": "poker night at the inventory/celebritypoker.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2cbcf2eb090ab342fbb6bcc1433d5b93", "id": "473440891110162440", "name": "Poker Night at the Inventory", "publishers": [{"id": "521816542258790401", "name": "Telltale Games"}], "splash": "2399ca7070620dc3eb984cc79eba140d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "31280", "sku": "31280"}], "type": 1, "verify_key": "520a9be6459afc425936e8c9ae506d43965774c68a8eb38e262d593f0a91b1cd"}, {"description": "A 2D platformer and the fourth game in the Momodora series.", "developers": [{"id": "521816561216913410", "name": "Bombservice"}], "executables": [{"is_launcher": false, "name": "momodorarutm.exe", "os": "win32"}], "flags": 0, "guild_id": "232553601355087874", "hook": true, "icon": "64774282bdbd9fc6eb9d82e323d37a5d", "id": "473594880673972224", "name": "Momodora: Reverie Under the Moonlight", "publishers": [{"id": "521816561216913409", "name": "AGM Playism"}], "splash": "8b80ff11eb8f427071f9c21236acfa4b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "428550", "sku": "428550"}], "type": 1, "verify_key": "fe6e56d8a854db1a616b51f472789e090c010b7ecbd695c080873c41696f2f70"}, {"description": "AriZona Sunshine is a zombie-themed first-person shooter for the PC.", "developers": [{"id": "521816746546561025", "name": "Vertigo Games"}], "executables": [{"is_launcher": false, "name": "arizonasunshine.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "786b33d905afa3a2ede6143876e4962d", "id": "473969782085910558", "name": "Arizona Sunshine", "publishers": [{"id": "521816746546561025", "name": "Vertigo Games"}], "splash": "5aae38f42b235d7bf10fad8a65844701", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "342180", "sku": "342180"}], "type": 1, "verify_key": "e3a8ff554e4428ec97458b71f6ec45ac1dc9eb6096b160fa12596dde68317961"}, {"description": "", "developers": [{"id": "521816527343845464", "name": "Blue Tongue Entertainment Pty, Ltd."}], "executables": [{"is_launcher": false, "name": "deblob.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8afb3004c5674227deea104c48337238", "id": "474014437863587870", "name": "de Blob", "primary_sku_id": "474761570132426753", "publishers": [{"id": "521816508167487498", "name": "THQ Nordic"}], "slug": "de-blob", "splash": "398be21b5f6d17a262e6da9bcd2caad9", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "474761570132426753", "sku": "474761570132426753"}, {"distributor": "steam", "id": "532320", "sku": "532320"}], "type": 1, "verify_key": "05ffa5cefe593cf614d2c916587cc568fc40248159d840530031de46b0ccd279"}, {"description": "", "developers": [{"id": "521816527343845464", "name": "Blue Tongue Entertainment Pty, Ltd."}], "executables": [{"is_launcher": false, "name": "deblob2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "446208a4bd2c6c1e44e84f17aaaa3c2e", "id": "474015113964290048", "name": "de Blob 2", "primary_sku_id": "489205706730242058", "publishers": [{"id": "521816508167487498", "name": "THQ Nordic"}], "slug": "de-blob-2", "splash": "f08ec94dec26f5b552b6c6c25e6ed994", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "563190", "sku": "563190"}, {"distributor": "discord", "id": "489205706730242058", "sku": "489205706730242058"}], "type": 1, "verify_key": "5a152cedcd4ac8420c2e8f4d19f8fd1cb13b62dc964e5e9c53becbf8fa4682fe"}, {"description": "A real time open world realistic sword combat, squad and city managing, blood splattering game set in Japan. It is in the same fashion as mount and blade but no instances of loading occurs but you do not directly influence combat except for the locations of flank.", "executables": [{"is_launcher": false, "name": "kenshi/kenshi_x64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9f159050ec5ee7d5893624645a36298e", "id": "474081029490081792", "name": "Kenshi", "publishers": [{"id": "521816510172233758", "name": "Lo-Fi Games"}], "splash": "e56e0b7891daff24c0274ced66eca2ec", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "233860", "sku": "233860"}], "type": 1, "verify_key": "4fcfe264331cefad6d0e820e4774b3ee998aee48b1f32c373dae154999debf69"}, {"cover_image": "a542e1af53eb42e0f648ba43ec70378d", "description": "140 is a challenging minimalistic platformer with abstract colorful graphics. Rhythmic awareness is required to overcome obstacles controlled by an energetic, yet melancholic electronic soundtrack.", "developers": [{"id": "521816776561131526", "name": "Carlsen Games"}], "executables": [{"is_launcher": false, "name": "140/140.exe", "os": "win32"}], "flags": 0, "guild_id": "557186095754772490", "hook": true, "icon": "2c26a9a8af993c83be9f2a9528efe288", "id": "474298936228708372", "name": "140", "primary_sku_id": "475000062167089152", "publishers": [{"id": "521816776561131526", "name": "Carlsen Games"}], "slug": "140", "splash": "f289cc23d7dea45b7e60af63242a7685", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "242820", "sku": "242820"}, {"distributor": "discord", "id": "475000062167089152", "sku": "475000062167089152"}], "type": 1, "verify_key": "537b3abad5e66e8a7264dbf6d5ae769309019a10f4a784925bcbc94d282f1ca9"}, {"description": "RaceRoom Racing Experience is a Racing Simulator for the PC. It was originally developed by the veteran simracing studio SimBin and is now handled by Sector3 Studios.", "developers": [{"id": "521816805396971520", "name": "Sector3 Studios AB"}], "executables": [{"is_launcher": false, "name": "rrre64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c9335f64e32134204c61c531f746e8cd", "id": "474431535291039754", "name": "RaceRoom Racing Experience", "publishers": [{"id": "521816804910170115", "name": "Sector3 Studios"}], "splash": "c7da9aa70c192e6adb722f86e2ab0ca6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "211500", "sku": "211500"}], "type": 1, "verify_key": "66bb8b5df2eaa4137f346592c728cd09927fe201cdc0dfb9a44794e1faccfe57"}, {"description": "", "executables": [{"is_launcher": false, "name": "stronghold crusader.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "23adf071518ea4e0b0b16e186f12eab2", "id": "474975575409295380", "name": "Stronghold Crusader HD", "publishers": [{"id": "521816602132611105", "name": "Firefly Studios"}], "splash": "0d0fabb636f8db44a2b9373cc5cc916e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "40970", "sku": "40970"}], "type": 1, "verify_key": "3fda872d368af9465fdf41830285c8b211b54db411c1d11cdcf5774e17f4dcb5"}, {"description": "Sniper: Ghost Warrior 3 is a first person shooter that mainly focuses on sniping like its predecessors. It is more open world this time around with different ways of going about missions.", "developers": [{"id": "521816677101600814", "name": "CI Games"}], "executables": [{"is_launcher": false, "name": "sgw3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7130085161bf0bb20e172f6c1dd70da0", "id": "475006595814785024", "name": "Sniper Ghost Warrior 3", "publishers": [{"id": "521816677101600814", "name": "CI Games"}], "splash": "3d3b808e65d15f99317c60d667cd83f9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "368070", "sku": "368070"}], "type": 1, "verify_key": "00722c8b0c612f5395327b7b2bf0b1183698adeb04feea0654fcd4f22f3d0323"}, {"description": "Motorsport Manager is a single seater racing management game.", "developers": [{"id": "521816580389077012", "name": "Playsport Games"}], "executables": [{"is_launcher": false, "name": "motorsport manager/mm.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "844562068a54fd7768e1f388c3594d96", "id": "475034058066493441", "name": "Motorsport Manager", "publishers": [{"id": "521816507676885010", "name": "Sega"}], "splash": "0f86ba646a4c1faccbe73e734917e4c4", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "415200", "sku": "415200"}], "type": 1, "verify_key": "53736d191612eeb46bfb71b2cef43e9763b73992fc2df02d97365681374bc2c4"}, {"description": "Beholder is a totalitarian themed spying game.", "developers": [{"id": "521816702321819667", "name": "Warm Lamp Games"}], "executables": [{"is_launcher": false, "name": "beholder.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5110534a50f32df766ed5e4ff29a0de0", "id": "475039384358617098", "name": "Beholder", "publishers": [{"id": "521816702321819663", "name": "Alawar Entertainment, Inc."}], "splash": "44de6d27407885d887411b8e56be1130", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "475550", "sku": "475550"}], "type": 1, "verify_key": "7a2b2e565e58141aca25190e15e4082640cca7d1814a73bc94befcb39d58f1b4"}, {"description": "A BlazBlue tag battle game with multiple guest characters from other properties.", "developers": [{"id": "521816536743149599", "name": "Arc System Works Co., Ltd."}], "executables": [{"is_launcher": false, "name": "bbtag.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0194ac5e1a43b115de0567193d3e0cab", "id": "475495343182577675", "name": "BlazBlue Cross Tag Battle", "publishers": [{"id": "521816536743149599", "name": "Arc System Works Co., Ltd."}], "splash": "287e0394f6b0e004893495917e579246", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "702890", "sku": "702890"}], "type": 1, "verify_key": "491905991de1f8679ba08c18f3493be98dbcfb8fd99d75827d64d999084fa220"}, {"description": "", "executables": [{"is_launcher": false, "name": "dawn of war gold/w40k.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d7f654cf90a5cdc428466543c5941afc", "id": "475821838782693387", "name": "Warhammer 40,000: Dawn of War - Game of the Year Edition", "publishers": [{"id": "521816593798397970", "name": "Relic Entertainment"}], "splash": "2216ed12dcf7da5e71f7e8aa0086a7a5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "4570", "sku": "4570"}], "type": 1, "verify_key": "ea04f3918a01e66e3b92f2ace62a5b149db5f7ebaa71ae95859bad55c302dba5"}, {"description": "Eat other fish to grow bigger then keep going and just keep eating.", "executables": [{"is_launcher": false, "name": "feed and grow fish/feed and grow.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a2e97b152f4f7cb9feae3cb2b1fed1f8", "id": "475913332478443530", "name": "Feed and Grow: Fish", "publishers": [{"id": "521816774614974475", "name": "Old B1ood"}], "splash": "8883d2f8cfd0a2bd99e63a5bc54cdeab", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "429050", "sku": "429050"}], "type": 1, "verify_key": "729c7fc783774f312a60d48f9b041ae46a0e619f61237161bffa8dac4c7f34b8"}, {"description": "Punch Club is an underground fight club tycoon simulator.", "developers": [{"id": "521816724262354956", "name": "Lazy Bear Games"}], "executables": [{"is_launcher": false, "name": "punch club.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "58eedbf6d4c394ff3933dd4b9bbec569", "id": "476271278836285440", "name": "Punch Club", "publishers": [{"id": "521816524952961034", "name": "tinyBuild"}], "splash": "b39c990e00761febaa7b286fb44e4bee", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "394310", "sku": "394310"}], "type": 1, "verify_key": "80cf61515f3189ada75deb8db62db4992af9820140f1da5a95c2403a6a32376e"}, {"description": "A Sci-Fi puzzle game, where players compete solve deadly traps on a futuristic game show.", "executables": [{"is_launcher": false, "name": "halfdead.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8d9cfafe11c9331d7d1983c325d11fe4", "id": "476349443474718730", "name": "Half dead", "publishers": [{"id": "521816617118728209", "name": "Room710Games"}], "splash": "982f955d3b683b132d5a82bb9afc0204", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "434730", "sku": "434730"}], "type": 1, "verify_key": "ca210d916b68542aa7e551a3290a94398712d12b69efed38ad3eeb145ed82808"}, {"description": "Team17 celebrated the 21st anniversary of Worms by releasing a new Worms game.", "developers": [{"id": "521816571103019015", "name": "Team17 Software Limited"}], "executables": [{"is_launcher": false, "name": "worms w.m.d.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d712860b2d8ac34ba7f3a3be85e668dc", "id": "476482983675559946", "name": "Worms W.M.D", "publishers": [{"id": "521816571103019015", "name": "Team17 Software Limited"}], "splash": "b20df44bf7d156b274a16072018628f0", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "327030", "sku": "327030"}], "type": 1, "verify_key": "c3888892d86c0a550448723a1aee2d67ce58283a3fb06e41cbdb272e20bb0ca5"}, {"description": "Lead a band of exiles through an ancient competition in the third game from Supergiant Games.", "developers": [{"id": "521816498017271833", "name": "Supergiant Games"}], "executables": [{"is_launcher": false, "name": "pyre.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "979f34cedd6a8713c62312022ae910d4", "id": "476907979069849620", "name": "Pyre", "publishers": [{"id": "521816498017271833", "name": "Supergiant Games"}], "splash": "faa464018c249bb769e07840646c735f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "462770", "sku": "462770"}], "type": 1, "verify_key": "25668e4e0a928225d9ed80da5e96d8f789b7e7d50984dc5b11c06d441f8aa3f1"}, {"description": "The fifth primary title in the Monster Hunter franchise features much larger maps, seamless transitions between zones in the map and four-player online co-op. It allows players from Japan and western countries to play together for the first time in the series.", "developers": [{"id": "521816574512857088", "name": "Capcom"}], "executables": [{"is_launcher": false, "name": "monsterhunterworld.exe", "os": "win32"}], "flags": 0, "guild_id": "120889695658967041", "hook": true, "icon": "8fd08a2e0440f80334ea403d2300a828", "id": "477152881196269569", "name": "MONSTER HUNTER: WORLD", "publishers": [{"id": "521816514106621968", "name": "CAPCOM Co., Ltd."}, {"id": "521816574512857088", "name": "Capcom"}], "splash": "fdd5d30ff7a802d7ec38f2dff0e63046", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "582010", "sku": "582010"}], "type": 1, "verify_key": "12c77166a2b2359e0eb61eff5124144b6adee43765c990486dd23447de7613de"}, {"cover_image": "6b05f8bebdb9740a1d56569916f8c56a", "deeplink_uri": "https://innersloth.com", "description": "Play with 4-15 player online or via local WiFi as you attempt to prepare your spaceship for departure, but beware as one or more random players among the Crew are Impostors bent on killing everyone!", "executables": [{"is_launcher": false, "name": "among us/among us.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0473e4e0f8e1d038fa439e41effb33b8", "id": "477175586805252107", "name": "Among Us", "overlay": true, "publishers": [{"id": "524353263890595861", "name": "Innersloth"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "945360", "sku": "945360"}], "type": 1, "verify_key": "8fd675e78dd5ce2c5c0177299b6ddf11014ffe65c4d8334c4d5c3691b6918d5c"}, {"description": "Viridi is a succulent growing and nurturing simulation. Spritz your potted inhabitants a few times a week then witness their growth and perhaps flowering in real-time.", "developers": [{"id": "521816526920351763", "name": "Ice Water Games"}], "executables": [{"is_launcher": false, "name": "viridi.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "177a4d4313bb5747c0e056885b8c1309", "id": "477520549833211915", "name": "Viridi", "publishers": [{"id": "521816526920351763", "name": "Ice Water Games"}], "splash": "7c5c9e6dba640685da8fe05983b084fd", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "375950", "sku": "375950"}], "type": 1, "verify_key": "dbc4a0c80bea486937e143afd7d0df38e4cbde71502ab9f12fe1dc87101d1b84"}, {"description": "A purely economic RTS game from Civ4 designer Soren Johnson.", "developers": [{"id": "521816804910170113", "name": "Mohawk Games"}], "executables": [{"is_launcher": false, "name": "offworld.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "022c334126d69b99e9156de4973c7df7", "id": "477657966095630346", "name": "Offworld Trading Company", "publishers": [{"id": "521816676157751316", "name": "Stardock Corporation"}], "splash": "7584a2013d9e592b0ccbf7ce615eaa0a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "271240", "sku": "271240"}], "type": 1, "verify_key": "09de9e8bf8f9d6acf821c532c0a4eca33fe8e28998c08f4462541446cc8f1e8d"}, {"description": "West of Loathing is a black & white, stick figure, slapstick Western from Asymmetric.", "developers": [{"id": "521816748744245262", "name": "Asymmetric Publications"}], "executables": [{"is_launcher": false, "name": "west of loathing.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "84df3edcc9cd0b694e3d0e7da8375c65", "id": "478014121065840650", "name": "West of Loathing", "publishers": [{"id": "521816748744245262", "name": "Asymmetric Publications"}], "splash": "4617779b223fb267ac8648115a3eae64", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "597220", "sku": "597220"}], "type": 1, "verify_key": "3b02be4701719ff6c8b388b539ced0287172855b014102e7a1e6f8f7d6b5ca5e"}, {"description": "Released in 1995, The Ultimate Doom refined elements of deathmatch, and added a completely new episode of content to the original game.", "developers": [{"id": "521816563024920606", "name": "id Software"}], "executables": [{"is_launcher": false, "name": "ultimate doom/base/dosbox.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5c22325395acdcb8efba445d1848b334", "id": "478613204323270666", "name": "The Ultimate DOOM", "publishers": [{"id": "521816563024920606", "name": "id Software"}], "splash": "517c763c570f3fbe9063581a2898bc1c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "2280", "sku": "2280"}], "type": 1, "verify_key": "38e4bf66e374df23f57a251c80eea7657c8f7fd197d92c05d9bf0191e5766e33"}, {"bot_public": false, "bot_require_code_grant": true, "cover_image": "2d9e11d27028a681e8894ef03f7fbe24", "description": "Last Year is a 5 vs 1 multiplayer asymmetrical action game where 5 players play as a group of teenagers, such as the Jock, the Nerd, or the Popular Girl, and must survive against the one player that is playing as the Killer. Sound familiar? Not so fast. Every time the Killer dies they come back as a new Killer, with different abilities, and the Survivors must adapt and work together if they want to escape with their lives. ", "developers": [{"id": "521816650304061470", "name": "Elastic Games"}], "executables": [{"is_launcher": false, "name": "lastyear-win64-shippinggame.exe", "os": "win32"}], "flags": 0, "guild_id": "425383353739509771", "hook": true, "icon": "2d9e11d27028a681e8894ef03f7fbe24", "id": "478637764565401630", "name": "Last Year: The Nightmare", "overlay": true, "primary_sku_id": "489576163438624769", "publishers": [{"id": "521816650304061470", "name": "Elastic Games"}], "slug": "last-year-the-nightmare", "splash": "7bfeb08ba4e841a992f804ebdd86a376", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "489576163438624769", "sku": "489576163438624769"}], "type": 1, "verify_key": "ca1bf24bb85f30e6e283e006c5d413ffc8b9edd534207eaf1eac4103c13a5d6b"}, {"description": "Co-op beat'm up game with random dungeons.", "developers": [{"id": "521816583585136662", "name": "Rake in Grass"}], "executables": [{"is_launcher": false, "name": "rampage_knights.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b1bb76ac42a6014fd9200ac01a398c24", "id": "478646014841061416", "name": "Rampage Knights", "publishers": [{"id": "521816583585136662", "name": "Rake in Grass"}], "splash": "28e27d196f3a88db2003a9948c19ae93", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "314410", "sku": "314410"}], "type": 1, "verify_key": "30189fe6c1d2f59019f3fad1e7a1446312f83f34158aa964968180f6358ac8d2"}, {"description": "A prequel to the original Yakuza set in 1988, featuring a young Kazuma Kiryu and Goro Majima as dual playable protagonists.", "developers": [{"id": "521816684957270028", "name": "Ryu ga Gotoku Studio"}], "executables": [{"is_launcher": false, "name": "yakuza0.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b512d5d1538d4b392dfc907d4addaa7b", "id": "478764846951825418", "name": "Yakuza 0", "publishers": [{"id": "521816507676885010", "name": "Sega"}], "splash": "4ad8063aae3a4da98c55f1e1dcdab5e8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "638970", "sku": "638970"}], "type": 1, "verify_key": "459c5b0492ddc4f41f0f17b2db02ea3f11a3d12d9d1b2947adb8a1a95ed9d5e8"}, {"description": "Rend is a faction based survival game. Pitting factions against each other to survive the waves of lost ones and to collect souls in a race to ascension.", "developers": [{"id": "521816664715690010", "name": "Frostkeep Studios"}], "executables": [{"is_launcher": false, "name": "otherlandsclient-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b360252176de2b25cf28483bc0efb686", "id": "478866361544605698", "name": "Rend", "publishers": [{"id": "521816664715690010", "name": "Frostkeep Studios"}], "splash": "85b918cad903a8906469925faf978482", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "547860", "sku": "547860"}], "type": 1, "verify_key": "8e984c6043d88a52105e1bed6d5048343e8bb56359d7f994c5dc791955416dd9"}, {"description": "Overcooked! returns in this multiplatform sequel now with online play.", "developers": [{"id": "521816619115085825", "name": "Ghost Town Games"}], "executables": [{"is_launcher": false, "name": "overcooked2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "28fbee56b0c9d001f863772236f9753a", "id": "479169486583496704", "name": "Overcooked! 2", "publishers": [{"id": "521816571103019015", "name": "Team17 Software Limited"}], "splash": "67e2cef23492f41592581e3e7ac4ed6e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "728880", "sku": "728880"}], "type": 1, "verify_key": "57df64f8c4b0718a488e2e808dd0632fd923ac10a7358f1f3546e9bd5b2ea4ce"}, {"description": "Fallout 2 is the sequel to the critically acclaimed post-apocalyptic RPG.", "developers": [{"id": "521816563456802817", "name": "Black Isle Studios"}], "executables": [{"is_launcher": false, "name": "fallout2hr.exe", "os": "win32"}, {"is_launcher": false, "name": "fallout2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "55e58458e5eb4250cc6a1c59634d4d02", "id": "479334869462417409", "name": "Fallout 2", "publishers": [{"id": "521816563024920612", "name": "Interplay Entertainment Corp."}], "splash": "591c5e12f01b7ea0c7b36c04adb802c4", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "38410", "sku": "38410"}], "type": 1, "verify_key": "206e58461b97571cad30cb9eecf5242f898e07c9cff822a7b24cbaf0c90ef677"}, {"description": "In Deathgarden, a team of \"Runners\" attempt to escape or take down a single \"Hunter\".", "developers": [{"id": "521816611036856323", "name": "Behaviour Interactive"}], "executables": [{"is_launcher": false, "name": "theexit-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3f57e10f981b9dd58eb0ed855eea4b29", "id": "479694330441891840", "name": "DEATHGARDEN", "publishers": [{"id": "521816611036856323", "name": "Behaviour Interactive"}, {"id": "521816611036856324", "name": "Behaviour Digital Inc."}], "splash": "d10816e6817de6f6f7f815ace0506cd2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "555440", "sku": "555440"}], "type": 1, "verify_key": "d1d7ee8516290bbd5ede306a6d2435c46e8c048e06accf1727ad7667065296f7"}, {"description": "id Software's Rage combines first-person shooting, vehicular action, and \"open but directed\" exploration to tell the story of Earth's wretched civilization after a cataclysmic meteor strike. Militaristic authority figures, freedom-fighting rebels, criminal raiders, and twisted mutants battle each other for control of the barren wasteland Earth has become.", "developers": [{"id": "521816563024920606", "name": "id Software"}], "executables": [{"is_launcher": false, "name": "rage.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "43c6c4588353a89419e9e6ae9486bb73", "id": "479735703140433940", "name": "RAGE", "publishers": [{"id": "521816500508819469", "name": "Bethesda Softworks"}], "splash": "724e6d737d37219ef2e4bec3680511d6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "9200", "sku": "9200"}], "type": 1, "verify_key": "94ed0f7cb711dc8e22d2b20c989ee6a2356a0328a28fbbaf39f94857a67d82ff"}, {"description": "Orwell: Keeping an Eye On You is an adventure game played entirely on a virtual desktop in which players must collect data on their targets to solve a mysterious terror attack.", "developers": [{"id": "521816625020928011", "name": "Osmotic Studios"}], "executables": [{"is_launcher": false, "name": "orwell.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d11987aff00964dda18de33c11a7611a", "id": "479821376975405066", "name": "Orwell", "publishers": [{"id": "521816625020928007", "name": "Fellow Traveller"}], "splash": "6a9b14519af0f893e68dc47bf8aa65cb", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "491950", "sku": "491950"}], "type": 1, "verify_key": "085c08ca31cc71122169d80afb49956faa2a0ef6f7c26fc87111eebf8c0dfd02"}, {"description": "A clicker game where players control a team of sharpshooters who take aim at a never-ending stream of enemy cubes.", "developers": [{"id": "521816640195788802", "name": "Proton Studio Inc"}], "executables": [{"is_launcher": false, "name": "timeclickers.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "118a4e0bfcbc3fed44da02a4ba13c71b", "id": "479894252726517760", "name": "Time Clickers", "publishers": [{"id": "521816640195788802", "name": "Proton Studio Inc"}], "splash": "d9e61b0e7b39ad470dc25dbfd24e9ef3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "385770", "sku": "385770"}], "type": 1, "verify_key": "eddd4e72b46083ed39687c534c3be38370ff18e56d7353a313481a12f13e946d"}, {"description": "Prominence Poker is a free to play poker game on PC, Xbox One, and PS4.", "developers": [{"id": "521816616602959886", "name": "Pipeworks Software, Inc."}], "executables": [{"is_launcher": false, "name": "win64/prominence-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ac1d7dcd112a349890da6628b54f464f", "id": "480167738334248980", "name": "Prominence Poker", "publishers": [{"id": "521816570520141824", "name": "505 Games"}], "splash": "68284215c781863e9ae63bf11204eeee", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "384180", "sku": "384180"}], "type": 1, "verify_key": "a986e7824b8ad6340fa96feddb79fea82dcdf574a686c75dcd7a6c3b192d3bba"}, {"description": "WRECKED: Revenge Revisited was developed by Supersonic and is the spiritual successor to the MASHED series from the PlayStation 2/Xbox generation.", "developers": [{"id": "521816745099395081", "name": "Supersonic Software Ltd."}], "executables": [{"is_launcher": false, "name": "getwrecked.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "73c23b356758320ed092a56947e09209", "id": "480316289307639808", "name": "Wrecked", "publishers": [{"id": "521816570520141824", "name": "505 Games"}], "splash": "14af0d341ad8f49587fde91f2df1eb13", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "805850", "sku": "805850"}], "type": 1, "verify_key": "c33b7a921718016d24a580ea53bd16aac19102daa18e7e5962a3bbbf00edf62d"}, {"description": "", "executables": [{"is_launcher": false, "name": "paintball war.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e488d50a4f29cf1601a0f2633a4eb120", "id": "480363777574043658", "name": "Paintball War", "publishers": [{"id": "521816792885100565", "name": "ShadowWolf Games"}], "splash": "2fd22094e4c18a1b826c906ced7f3446", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "757130", "sku": "757130"}], "type": 1, "verify_key": "a90ecb17ff8f8786c78107900aaa9d7fd07342313fda9163f8b1a8ec9e691737"}, {"description": "Post Scriptum is an upcoming realistic combined arms First Person Shooter which covers Operation Market Garden during World War II.", "developers": [{"id": "524352770233335840", "name": "Periscope Games"}], "executables": [{"is_launcher": false, "name": "postscriptum.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "aa364517e850c0139198407f7d0a59c1", "id": "480560735521341440", "name": "Post Scriptum", "publishers": [{"id": "524755167288098837", "name": "Offworld Industries"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "736220", "sku": "736220"}], "type": 1, "verify_key": "2bc7d71cda28b6b0e585319a5e680a7e917900f0f91d04143e5204f43b2c0d3b"}, {"description": "", "developers": [{"id": "521816677101600788", "name": "Powerhoof"}], "executables": [{"is_launcher": false, "name": "crawl.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3ef021e68c15d58fdf0e7c95720541fa", "id": "480573996509954078", "name": "Crawl", "primary_sku_id": "498549800237662212", "publishers": [{"id": "521816499019841600", "name": "Limited Run Games"}], "slug": "crawl", "splash": "56cdc0341df2d216eaaa6a0c6c8b459b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "293780", "sku": "293780"}, {"distributor": "discord", "id": "498549800237662212", "sku": "498549800237662212"}], "type": 1, "verify_key": "9e5880349e7f293726492d240ff4e4c857236c6334b099de140c159f0b94398a"}, {"description": "Ace Attorney meets action and rhythm games with a plot resembling Battle Royale in this \"high speed detective action game\" from Spike for the PSP.", "developers": [{"id": "521816803652141096", "name": "Spike Co., Ltd."}], "executables": [{"is_launcher": false, "name": "danganronpa.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "12a1cdab3733bca079e1caf4cfd104ae", "id": "480963716934795264", "name": "Danganronpa: Trigger Happy Havoc", "publishers": [{"id": "521816803652141096", "name": "Spike Co., Ltd."}], "splash": "7ded5dd3d62849a32fee6635e9cd7323", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "413410", "sku": "413410"}], "type": 1, "verify_key": "92691297718baa6f4764419d88c5fd05c1c7405f61b7b905d882c02df568d855"}, {"description": "Manage emergency phone calls from any city in the world.", "developers": [{"id": "521816631782014988", "name": "Jutsu Games"}], "executables": [{"is_launcher": false, "name": "911 operator/911.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ec792c5b9abce05d9102b8742d712487", "id": "481103865559908372", "name": "911 Operator", "publishers": [{"id": "521816512516980736", "name": "PlayWay"}], "splash": "ad5b332252bd5637c59f7237e43299a4", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "503560", "sku": "503560"}], "type": 1, "verify_key": "f20bede7095364d290254df5f0780ba6130e105b728f00e6c6515a92ca804721"}, {"description": "EKO Software's zombie survival series goes to New Orleans.", "developers": [{"id": "521816670004576266", "name": "Eko Software"}], "executables": [{"is_launcher": false, "name": "howtosurvive2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d1ab2c1a5c756c44a9f1d4f33eca6e54", "id": "481505570747318292", "name": "How to Survive 2", "publishers": [{"id": "521816570520141824", "name": "505 Games"}, {"id": "521816670004576266", "name": "Eko Software"}], "splash": "8c708c9791ba620faf53532356c7c00d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "360170", "sku": "360170"}], "type": 1, "verify_key": "079b45c55bec68276201fad2f3e177c56ad975c820d245cbded82cd15c598f60"}, {"description": "Dead Rising 2 is a third-person action-adventure survival horror game that takes place five years after the end of the original Dead Rising, moving its zombie apocalypse setting into the glamorous Fortune City.", "developers": [{"id": "521816574512857089", "name": "Capcom Game Studios Vancouver"}], "executables": [{"is_launcher": false, "name": "deadrising2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c8ff8939c9b1d695a624c2d887c38d6b", "id": "481570202988052490", "name": "Dead Rising 2", "publishers": [{"id": "521816574512857088", "name": "Capcom"}], "splash": "17c5c6d51c192873f7cb18cae6006983", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "45740", "sku": "45740"}], "type": 1, "verify_key": "77c922af8c52bb3e04b5fbfd92ae92d39ade7177a7128f6a7599c7ca0ad7e1bb"}, {"description": "From the creators of Punch Club comes Graveyard Keeper, the most inaccurate medieval cemetery management sim of 2017.", "developers": [{"id": "521816724262354956", "name": "Lazy Bear Games"}], "executables": [{"is_launcher": false, "name": "graveyard keeper.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "93fba3a7839d53372d523402eef6cb7e", "id": "481816401183506432", "name": "Graveyard Keeper", "publishers": [{"id": "521816724262354956", "name": "Lazy Bear Games"}, {"id": "521816524952961034", "name": "tinyBuild"}], "splash": "9614e9acb86387e2bc9aedae87979250", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "599140", "sku": "599140"}], "type": 1, "verify_key": "cd5a8bc2562ada75873136982abceffba09379d607cecfe886a18c7c663f221a"}, {"description": "A fast paced 8-bit game where you shower with your dad.", "developers": [{"id": "521816523954978819", "name": "Marbenx "}], "executables": [{"is_launcher": false, "name": "showerdad.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "44aa404e52146f1b1c57143e3a1f7715", "id": "481999402630774794", "name": "Shower With Your Dad Simulator 2015: Do You Still Shower With Your Dad", "publishers": [{"id": "521816523954978818", "name": "marbenx"}], "splash": "1d8faacac18e0e5ff677c08b2081fcc9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "359050", "sku": "359050"}], "type": 1, "verify_key": "64abe8672999c913585fdf4e73c6e7e424ea9f96043d1261dad942d53bb1d65f"}, {"aliases": ["Valkyria Chronicles"], "description": "A turn-based tactics game with real-time elements, that tells the story of Squad 7 as they rally together to fight for the freedom of their country, Gallia.", "developers": [{"id": "521816581433589782", "name": "Basiscape"}], "executables": [{"is_launcher": false, "name": "valkyria.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "17c75a03b51d5bb869f18f358c421112", "id": "482176854938353674", "name": "Valkyria Chronicles\u2122", "publishers": [{"id": "521816507676885010", "name": "Sega"}], "splash": "523f4512070fc9f1d28af04cf20271ab", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "294860", "sku": "294860"}], "type": 1, "verify_key": "210befcb2cfffb5665a98e6afe3ea60c7c63e86745430faf9102d9761324c994"}, {"description": "A first person parkour game set in a number of different distinct worlds with lava on the floor.", "developers": [{"id": "521816520817639454", "name": "Klei Entertainment Inc."}], "executables": [{"is_launcher": false, "name": "hotlava.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "82a3802670f6d31a5879ec72c24a3b71", "id": "482730443037212673", "name": "Hot Lava", "publishers": [{"id": "521816520817639454", "name": "Klei Entertainment Inc."}], "splash": "2b943bd0f575c32f9d88c89be9078bda", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "382560", "sku": "382560"}], "type": 1, "verify_key": "f52bfe3fc25091be5e5c7156aacd5eaedd90dc1bae10960bf1afaf09e169ca5a"}, {"description": "", "executables": [{"is_launcher": false, "name": "simcity 4.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "166286754cb52e3e23335fe8a459cab5", "id": "482776230895288320", "name": "SimCity 4 Deluxe", "publishers": [{"id": "521816601691947040", "name": "EA - Maxis"}], "splash": "a02741b4dfe45c4fe3d00f1585deb880", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "24780", "sku": "24780"}], "type": 1, "verify_key": "8e58b05c12d256eaa8af823132a6de3bd71f10b1779a9276138e8b7a4b6d7bd2"}, {"description": "", "executables": [{"is_launcher": false, "name": "brokeprotocol.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "324e5ada4e3efb1569b9319bb04840c8", "id": "483247042689368084", "name": "BROKE PROTOCOL: Online City RPG", "publishers": [{"id": "521816662723526656", "name": "Cylinder Studios"}], "splash": "0ca29c6862ebea97a22efdb9e4f62e85", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "696370", "sku": "696370"}], "type": 1, "verify_key": "125f47b5489798ba71c2d80ced450773648f8b7fd313b59855e8df9b645f211a"}, {"description": "We Need to Go Deeper is a 2-4-player cooperative submarine rogue-like set in a Verne-inspired undersea universe.", "developers": [{"id": "521816534881009684", "name": "Deli Interactive LLC"}], "executables": [{"is_launcher": false, "name": "weneedtogodeeper.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8c42255082dd8ee6dbb9e49dda2dffaf", "id": "483361121269710858", "name": "We Need to Go Deeper", "publishers": [{"id": "521816534881009684", "name": "Deli Interactive LLC"}], "splash": "eed387a1542f913654eae2d46100fb8a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "307110", "sku": "307110"}], "type": 1, "verify_key": "9603ed8b117f43332ee216e181d3f3f01e6c1243956d45cf6d1ea1afb1eb15ca"}, {"description": "Team up with friends and form a Combat Squad to take down the legendary Destroyer; a monstrous creature from another time. Explore randomly generated worlds, gather rare pieces of loot, and forge epic gear! Roguelands features 16 unique classes and over 45 Races, Augments, and Uniforms for players to create their ultimate Galactic Cadet!", "developers": [{"id": "521816574949326848", "name": "SmashGames"}], "executables": [{"is_launcher": false, "name": "roguelands.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8de6e3c4303fa1de6d8de6d112b61927", "id": "483421234391154698", "name": "Roguelands", "publishers": [{"id": "521816574949326848", "name": "SmashGames"}], "splash": "ad65bdc40985df0d03391a28a5f08afd", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "364420", "sku": "364420"}], "type": 1, "verify_key": "e75a0c1034fae064ba81f0abad93e77fd676be79c7545adcca3eba3f59dba2ce"}, {"description": "", "executables": [{"is_launcher": false, "name": "uno demo/uno.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8c74298f3883bfda8d7b21cee6690f9b", "id": "484310169145180160", "name": "UNO Demo", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "edcffb68e9afc678b9b1de722a3b4b4f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "471610", "sku": "471610"}], "type": 1, "verify_key": "10b92560db5368c0362219ba3abb24359cd99fbe1eb1bc134d9515bb2e19adc7"}, {"description": "Scum", "developers": [{"id": "521816517952929794", "name": "Gamepires"}], "executables": [{"is_launcher": false, "name": "scum.exe", "os": "win32"}], "flags": 0, "guild_id": "228656196247093248", "hook": true, "icon": "83c6b689ee21b111749f54f9ee361967", "id": "484425151631589378", "name": "SCUM", "publishers": [{"id": "521816517952929794", "name": "Gamepires"}, {"id": "521816510730338331", "name": "Devolver Digital"}], "splash": "7c1206145f1c6b1147280956e0180463", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "513710", "sku": "513710"}], "type": 1, "verify_key": "d13ffb8892934c88877f9747e7cc8e9a04a7d2f924da79b3d225d986b7338f64"}, {"description": "", "executables": [{"is_launcher": false, "name": "system/witcher.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "41584f116adbd6dd064129615a483575", "id": "484451241825533962", "name": "The Witcher Enhanced Edition Director's Cut", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}], "type": 1, "verify_key": "92a49efc9df32c8dc0e5b5e9001b19c5516c159f8e2f0f90c06302f9828cfe00"}, {"description": "", "developers": [{"id": "521816792885100564", "name": "Coolhand Interactive"}], "flags": 0, "hook": true, "icon": "0c2c693026f57bab618d7c17a472d218", "id": "484475041711521830", "name": "STAR WARS Rebellion", "primary_sku_id": "489927207578238996", "publishers": [{"id": "521816522977574923", "name": "LucasArts Entertainment Company LLC"}], "slug": "star-wars-rebellion", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "489927207578238996", "sku": "489927207578238996"}], "type": 1, "verify_key": "0f36ff318e284e37a394a96882ceed1e3bf2e6f9f0606b07166af868a6efff68"}, {"description": "Call of War is a modern fps shooter inspired by the likes of Call of Duty and the Battlefield franchises developed by Corrupted Pixel LLC for the game Garry's Mod", "executables": [{"is_launcher": false, "name": "call of war.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "57b9a425fd791a58a05af886c981fa06", "id": "484486787952148485", "name": "Call of War", "publishers": [{"id": "521816692079329282", "name": "Bytro Labs GmbH"}], "splash": "2160153e7954b8e3aa008509f482c550", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "672680", "sku": "672680"}], "type": 1, "verify_key": "de3c213ccc920b9c4a6bdb4119c5012f36a67479e78896bec540250abbaaaf20"}, {"description": "Wesnoth is a free open-source turn-based strategy game that focuses on simple battle mechanics and strong AI.", "executables": [{"is_launcher": false, "name": "wesnoth.exe", "os": "win32"}], "flags": 0, "guild_id": "231976805987385345", "hook": true, "icon": "de80bb59a4a1e326b36c7874d151c735", "id": "484526083686006810", "name": "Battle for Wesnoth", "publishers": [{"id": "521816785801052161", "name": "The Battle for Wesnoth Project"}], "splash": "b1da1f1bf8db016d4ffb1e60e14cd653", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "599390", "sku": "599390"}], "type": 1, "verify_key": "c7d874aa724e45f83fefc97ed2d0da76bd720ef0b0a402c94aa6c1865484e64a"}, {"description": "LISA is a side-scrolling RPG set in a post-apocalyptic world.", "developers": [{"id": "521816553679749140", "name": "Dingaling"}], "executables": [{"is_launcher": false, "name": "lisa.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3e118857e7bbc9daa86f016e7649fbe3", "id": "484572816977428490", "name": "LISA", "publishers": [{"id": "521816553679749140", "name": "Dingaling"}], "splash": "3cf71bf6adc2ca4d16e5fd5a7f26b643", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "335670", "sku": "335670"}], "type": 1, "verify_key": "b146c432dfa238341b72968b0048f62de4166752be97492c58fc98c08494fa88"}, {"description": "A crucial planet size factory is under siege by millions of Orks. As Space Marine Captain Titus, you must lead your soldiers to stem the tide until help arrives.", "developers": [{"id": "521816593798397970", "name": "Relic Entertainment"}], "executables": [{"is_launcher": false, "name": "spacemarine.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "82ad5f9673951ef688f0a89a20ccd42c", "id": "484789228761514004", "name": "Warhammer 40,000: Space Marine", "publishers": [{"id": "521816628477034506", "name": "Relic"}, {"id": "521816550596935692", "name": "THQ"}], "splash": "2144f01155981aad68f69a1ca1da66d3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "55150", "sku": "55150"}], "type": 1, "verify_key": "57125f00c157dce2fcb7f1c52f7ce717283389025840a997d31420879a92c671"}, {"description": "", "developers": [{"id": "521816505688522756", "name": "New World Interactive"}], "executables": [{"is_launcher": false, "name": "insurgencyclient-win64-shipping.exe", "os": "win32"}], "flags": 0, "guild_id": "464728263248576522", "hook": true, "icon": "2f8a84f6fc3b1b40055ea5f2057fee2b", "id": "484892481452769290", "name": "Insurgency: Sandstorm", "primary_sku_id": "489925702590660628", "publishers": [{"id": "521816505688522756", "name": "New World Interactive"}, {"id": "521816537192202247", "name": "Focus Home Interactive"}], "slug": "insurgency-sandstorm", "splash": "fb066d6e3673b510ff0d8b0e0c53a6fd", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "581320", "sku": "581320"}, {"distributor": "discord", "id": "489925702590660628", "sku": "489925702590660628"}], "type": 1, "verify_key": "5f119ef04b72363a125970b3ae0f92a5dd938643424e6e40ad59bac6e9470628"}, {"description": "Onward is a virtual reality military simulation game.", "developers": [{"id": "521816513074692119", "name": "Downpour Interactive "}], "executables": [{"is_launcher": false, "name": "onward.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "25a4dbcefc1826e24b770977d575303b", "id": "484938446268268564", "name": "Onward", "publishers": [{"id": "521816513074692117", "name": "Downpour Interactive"}], "splash": "baddd62e4d6f707bfc7355a62d205ef2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "496240", "sku": "496240"}], "type": 1, "verify_key": "d48432ce60f26578ba2882eb9282cbf18e8ff6da403e6a47154e1192734db64c"}, {"description": "Hospital management sim and spiritual successor to Theme Hospital.", "developers": [{"id": "521816641340964887", "name": "Two Point Studios "}], "executables": [{"is_launcher": false, "name": "tph.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9430dfd53a9ef95ada7dfc61b51fee9d", "id": "485224436187004928", "name": "Two Point Hospital", "publishers": [{"id": "521816641340964884", "name": "Two Point Studios"}, {"id": "521816507676885010", "name": "Sega"}], "splash": "0c12b8ae83a43cab65d9a9eb2a16a26a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "535930", "sku": "535930"}], "type": 1, "verify_key": "df000ba09e7822dc5827243e4c27395a991cacad0fd6261b9f8936fd2383ea49"}, {"description": "Talisman Digital Edition is a video game adaptation of the Talisman board game.", "developers": [{"id": "521816641772847124", "name": "Nomad Games"}], "executables": [{"is_launcher": false, "name": "talisman.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f3b4cb8d2e0048eaf94eec75ae7926ce", "id": "485857105278926848", "name": "Talisman: Digital Edition", "publishers": [{"id": "521816641772847124", "name": "Nomad Games"}], "splash": "45816dab75c8792e1d6042dc3a51abff", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "247000", "sku": "247000"}], "type": 1, "verify_key": "1a4a30fc82f2d977b55a25f7d4ab5789c8ec3187f2ef2d04c9871d9171e4f192"}, {"description": "A 2D stealth/puzzle game from PC Gamer UK writer Tom Francis. As a private detective hired by a woman accused of murder, the player infiltrates buildings by hacking or \"crosslinking\" electrical systems to bypass heavy security.", "developers": [{"id": "521816591604908032", "name": "Suspicious Developments"}], "executables": [{"is_launcher": false, "name": "gunpoint.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "83da9bc247e22af7bc7072faca46f673", "id": "486705198576828416", "name": "Gunpoint", "publishers": [{"id": "521816591604908032", "name": "Suspicious Developments"}], "splash": "db56aac296860c4bf400474af309623a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "206190", "sku": "206190"}], "type": 1, "verify_key": "9c2803191bbbf84e9521fc6222dab67a482767786843b79424a80654d27a60bc"}, {"description": "Call of Duty 4: Modern Warfare ditches the World War II setting of the past Call of Duty games to tell a story set in contemporary times, and backs it up with a solid, feature-rich multiplayer mode.", "developers": [{"id": "521816501544550406", "name": "Infinity Ward"}], "executables": [{"is_launcher": false, "name": "iw3sp.exe", "os": "win32"}, {"is_launcher": false, "name": "iw3mp.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8e608881762ba5e864cd5bbe02711ddd", "id": "486763816944795658", "name": "Call of Duty 4: Modern Warfare", "overlay": true, "publishers": [{"id": "521816501544550404", "name": "Activision"}], "splash": "3b42a1dea246398d153285a41d8e466e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "7940", "sku": "7940"}], "type": 1, "verify_key": "d5955d2487ee276358884b95f7823e297291f3cf601137fce88db99ec129a5a8"}, {"description": "Old school survival horror meets MMORPG. A sequel to Dead Frontier, this game includes an ever changing city, missions, player made economy, 8 player co-op (or go it alone) and much more!", "developers": [{"id": "521816506607206420", "name": "Creaky Corpse Ltd."}], "executables": [{"is_launcher": false, "name": "deadfrontier2.exe", "os": "win32"}], "flags": 0, "guild_id": "429253210990182406", "hook": true, "icon": "29d0ede1c648938aa6dcb5911cc68752", "id": "487074862565818378", "name": "Dead Frontier 2", "publishers": [{"id": "521816506171129886", "name": "Creaky Corpse Ltd"}, {"id": "521816506607206420", "name": "Creaky Corpse Ltd."}], "splash": "158d712c592310399d196ef52ed1f66c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "744900", "sku": "744900"}], "type": 1, "verify_key": "ee15003de4e16dab7144499b58748c86387673fb8e4fd2b209f1bae8d7bb5fe8"}, {"description": "", "executables": [{"is_launcher": false, "name": "stronghold crusader extreme/stronghold crusader.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "11d57cb47cd47a0a00b1269f738dab24", "id": "487328146438356992", "name": "Stronghold Crusader Extreme HD", "publishers": [{"id": "521816602132611105", "name": "Firefly Studios"}], "splash": "3fcc0e25779e67f99ea24b854cbe7c5d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "16700", "sku": "16700"}], "type": 1, "verify_key": "964b755645d6b51653c1a2add63edd5864beb2863ebb5e98d42550aad5060865"}, {"description": "An online multiplayer social deduction game of mischief, betrayal, and medieval politics.", "developers": [{"id": "521816771255336980", "name": "Imperium42"}], "executables": [{"is_launcher": false, "name": "throneoflies.exe", "os": "win32"}, {"is_launcher": false, "name": "throneoflies.x86 ", "os": "linux"}], "flags": 0, "hook": true, "icon": "6816820c0082e2fad688954faddfa6c7", "id": "487330866830376960", "name": "Throne of Lies", "publishers": [{"id": "521816771255336980", "name": "Imperium42"}], "splash": "02a669b17cf77d0c6a5fef3854031837", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "595280", "sku": "595280"}], "type": 1, "verify_key": "f07507c9b60ada40c531dc6d7401cee2946ce1b8a8455306a78028ad1faedbde"}, {"bot_public": true, "bot_require_code_grant": false, "cover_image": "90955e9b393ded86dc6d3a71726b9733", "description": "", "executables": [{"is_launcher": false, "name": "badnorth.exe", "os": "win32"}], "flags": 0, "guild_id": "261683801372098560", "hook": true, "icon": "ae6ecbd993f1ff0325a906cbcafac60d", "id": "487564993236172802", "name": "Bad North", "primary_sku_id": "488422292137836574", "slug": "bad-north", "splash": "98627cf8959e296ab93e2bfb9db6b67f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "688420", "sku": "688420"}, {"distributor": "discord", "id": "488422292137836574", "sku": "488422292137836574"}], "type": 1, "verify_key": "43c999d73038ccd0210f33e42f7270305df2ba7add9a2a5f327884f3ded39f9b"}, {"description": "Hunger Dungeon is a round based MOBA.", "developers": [{"id": "521816801038958592", "name": "Buka Game Studio "}], "executables": [{"is_launcher": false, "name": "hungerdungeon.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0558c104e36593e99da41b4cc7de8e93", "id": "487652330989158410", "name": "Hunger Dungeon", "publishers": [{"id": "521816800560939011", "name": "PQube"}], "splash": "c18a275757b2e181eb0c4c74106c08ed", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "513560", "sku": "513560"}], "type": 1, "verify_key": "2768bf585d501ef37c44c31902f4858b064012f7e01f6d305c90370b2379399b"}, {"description": "", "developers": [{"id": "521816522977574923", "name": "LucasArts Entertainment Company LLC"}], "executables": [{"is_launcher": false, "name": "the dig.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "da569756056b5c5ffc6ae46fa45b3769", "id": "487683851519393822", "name": "The Dig\u00ae", "primary_sku_id": "493895414336978976", "publishers": [{"id": "570702595178627072", "name": "Lucasfilm, Disney"}], "slug": "the-dig-r", "splash": "b5a69e58d55fd145bb341e250229afeb", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "6040", "sku": "6040"}, {"distributor": "discord", "id": "493895414336978976", "sku": "493895414336978976"}], "type": 1, "verify_key": "d9c07b38f199c89a46784eac110b8171321e0fa3ddf4f03158849d1ee8188042"}, {"aliases": ["Deus Ex"], "description": "", "executables": [{"is_launcher": false, "name": "deusex.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "849a60c0b79f3dc492d550d660975d80", "id": "488014835389300736", "name": "Deus Ex: Game of the Year Edition", "publishers": [{"id": "521816777039151111", "name": "Ion Storm"}], "splash": "88eeac772ebdac220d17b45a6de77f5e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "6910", "sku": "6910"}], "type": 1, "verify_key": "a0d6211b9033c3d71442155480bcf6d0eb4febcd1d374d2ae0b8fda42397712a"}, {"description": "", "executables": [{"is_launcher": false, "name": "gc2twilightofthearnor.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5911e38c5fae2c56f7444a0aa152a4fc", "id": "488380884337295360", "name": "Galactic Civilizations II: Ultimate Edition", "publishers": [{"id": "521816531831750658", "name": "Stardock Entertainment"}], "splash": "3144b187753e69221ff52580178071cf", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "202200", "sku": "202200"}], "type": 1, "verify_key": "03b73d8dfcfadfb2e646aa865b7f66b10d6588ded3ca264e21981bebcb1ee229"}, {"description": "", "developers": [{"id": "521816738199896096", "name": "Landfall West"}], "executables": [{"is_launcher": false, "name": "stickfight.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9ca796e31254d56a71c4ae3ebb0e51c5", "id": "488693576314650634", "name": "Stick Fight: The Game", "primary_sku_id": "492081050760249374", "publishers": [{"id": "521816737738653727", "name": "Landfall Games"}], "slug": "stick-fight-the-game", "splash": "569d516313c9535527d7a88314f56686", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "674940", "sku": "674940"}, {"distributor": "discord", "id": "492081050760249374", "sku": "492081050760249374"}], "type": 1, "verify_key": "4619b5dbb552a12c39ce3877f3f85fae34b2d3e5a0465215cc11f653cf871fc3"}, {"description": "Civilization IV comes to life like never before in a beautifully detailed, living 3D world that elevates the gameplay experience to a whole new level. ", "developers": [{"id": "521816573485514765", "name": "Firaxis Games"}], "eula_id": "542074049984200704", "executables": [{"is_launcher": false, "name": "civilization4.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "108c2f883c597a31f6556d5ead878e2d", "id": "488844250251788339", "name": "Sid Meier's Civilization\u00ae IV Complete", "primary_sku_id": "489206862772961290", "publishers": [{"id": "542107996516253761", "name": "2K"}], "slug": "sid-meier-s-civilization-r-iv-complete", "splash": "790540e2486838b79eab74e6c36dcc44", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "489206862772961290", "sku": "489206862772961290"}, {"distributor": "steam", "id": "3900", "sku": "3900"}], "type": 1, "verify_key": "f08f40e88c2f33aaee3a23d8da4c76d6176a9c1e5ebac4c7d78528ebd9d95a36"}, {"description": "", "developers": [{"id": "521816573485514765", "name": "Firaxis Games"}], "eula_id": "542074049984200704", "executables": [{"is_launcher": false, "name": "xcomew.exe", "os": "win32"}, {"is_launcher": false, "name": "xcomgame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "558efa50d4a7f10b42ce0ff60006b5fb", "id": "488856269382483979", "name": "XCOM Enemy Unknown", "primary_sku_id": "491375713253982219", "publishers": [{"id": "542107996516253761", "name": "2K"}], "slug": "xcom-enemy-unknown", "splash": "94c3dc467facd35cb318aeb88eb1a84e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "200510", "sku": "200510"}, {"distributor": "discord", "id": "491375713253982219", "sku": "491375713253982219"}], "type": 1, "verify_key": "6d5f1154c7b8f42af2b4c400ccb8abfd5b3ce72b109657e1c3448afb1d57233f"}, {"description": "Get Dungeon Defenders: Complete Edition FREE with Nitro!", "developers": [{"id": "521816518871220239", "name": "Trendy Entertainment"}], "executables": [{"is_launcher": false, "name": "dundefgame.exe", "os": "win32"}], "flags": 0, "guild_id": "98499414632448000", "hook": true, "icon": "21300741a8048086876802198547bcdb", "id": "488858705836900355", "name": "Dungeon Defenders", "primary_sku_id": "489181101609320449", "publishers": [{"id": "521816518871220239", "name": "Trendy Entertainment"}], "slug": "dungeon-defenders", "splash": "8edda5258985d28816fb8ad081ee4de1", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "489181101609320449", "sku": "489181101609320449"}, {"distributor": "steam", "id": "65800", "sku": "65800"}], "type": 1, "verify_key": "8987d15a2c0d9635b8ba3c32d7c51f0a8387281a55c1c816b3c4aafe9c106dc6"}, {"description": "NBA 2K17 is the 2016 release in Visual Concept's NBA simulation franchise.", "developers": [{"id": "521816587586633731", "name": "Visual Concepts"}], "executables": [{"is_launcher": false, "name": "nba2k17.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "df5d4c31fe4d1b3b47c9647beba15438", "id": "489276682566369290", "name": "NBA 2K17", "publishers": [{"id": "521816531324370967", "name": "2K Sports"}], "splash": "46df02f00a7cd57a8e1b41ed974314b2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "385760", "sku": "385760"}], "type": 1, "verify_key": "a6ebe23b0ea2c183863f17d16867dd4365b9bfdb1f6eb7e8f2e3992ac6c8a901"}, {"description": "Remake of the first Hyperdimension Neptunia game, featuring a revised plot and the improved battle system introduced in its sequels.", "developers": [{"id": "521816535304503322", "name": "Felistella"}], "executables": [{"is_launcher": false, "name": "neptuniarebirth1.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d0b4e4db7e30f981115d3f3126686f21", "id": "489332841910632458", "name": "Hyperdimension Neptunia Re;Birth1", "publishers": [{"id": "521816535304503320", "name": "Compile Heart, Inc."}], "splash": "f66a00ac75ed8b2f239527ad7677dbc6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "282900", "sku": "282900"}], "type": 1, "verify_key": "296c70e26b35b367e5aa8a1155c29a2b574fd8e95e41462745b5d9957c3948c7"}, {"description": "sZone-Online is an MMO shooter.", "executables": [{"is_launcher": false, "name": "szoneonline.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fc007bc1722c8ef24395693ea2f12f04", "id": "489441787778301992", "name": "sZone-Online", "publishers": [{"id": "521816657060954132", "name": "CTS Games"}], "splash": "48e974d2a0d36c8b963de0fb167fa035", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "316390", "sku": "316390"}], "type": 1, "verify_key": "75e3fd41fbecaed54fedecdd1a10ea3de127f33c8575ab0c64a7965d7be205db"}, {"aliases": ["Resident Evil Revelations 2"], "description": "", "executables": [{"is_launcher": false, "name": "rerev2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e197b6bdcc079d4efc8bfd8c7d4bf7cb", "id": "489648352892289054", "name": "Resident Evil Revelations 2 / Biohazard Revelations 2", "publishers": [{"id": "521816514106621968", "name": "CAPCOM Co., Ltd."}], "splash": "730e24d96a4270e43bfc43bfbb6eb7e6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "287290", "sku": "287290"}], "type": 1, "verify_key": "8b3c5fb501537781e72b3be0a0443b1674d2caf6c6bc908a6192de4f3bec19ab"}, {"cover_image": "fdce17de02df4743f981aa32e6bf820f", "description": "Trine Enchanted Edition", "developers": [{"id": "521816505252446238", "name": "Frozenbyte"}], "executables": [{"is_launcher": false, "name": "trine1_32bit.exe", "os": "win32"}, {"is_launcher": false, "name": "trine.exe", "os": "win32"}, {"is_launcher": false, "name": "trine.app", "os": "darwin"}], "flags": 0, "hook": true, "icon": "0cf966c347621aeacc626048632b4241", "id": "489705172453425173", "name": "Trine Enchanted Edition", "primary_sku_id": "494709638487343107", "publishers": [{"id": "521816505252446238", "name": "Frozenbyte"}], "slug": "trine-enchanted-edition", "splash": "084195dd544814ac6660f0f1a838fc56", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "35700", "sku": "35700"}, {"distributor": "discord", "id": "494709638487343107", "sku": "494709638487343107"}], "type": 1, "verify_key": "f162a02ce13687a245ac8a9a84e6fd4969f199de79bc4323e4909b1ea350c20b"}, {"cover_image": "2d2a1cd4e7b190e7729425c9b2ae82e0", "description": "Trine 3: The Artifacts of Power", "developers": [{"id": "521816505252446238", "name": "Frozenbyte"}], "executables": [{"is_launcher": false, "name": "trine3_64bit.exe", "os": "win32"}, {"is_launcher": false, "name": "trine3_32bit.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0c1ea7ebc1347e247cb8c8826d1b45d1", "id": "489715273683697674", "name": "Trine 3: The Artifacts of Power", "primary_sku_id": "494710602921541634", "publishers": [{"id": "521816505252446238", "name": "Frozenbyte"}], "slug": "trine-3-the-artifacts-of-power", "splash": "82068258efa10444859856988eaab968", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "494710602921541634", "sku": "494710602921541634"}, {"distributor": "steam", "id": "319910", "sku": "319910"}], "type": 1, "verify_key": "aba5a712f2c2efa1005cf226ebb789043de0f7280f6261f756cb282b770027c5"}, {"cover_image": "a37b48dbd859f19e3790e02f3eaba204", "description": "Trine 2: Complete Story", "developers": [{"id": "521816505252446238", "name": "Frozenbyte"}], "executables": [{"is_launcher": false, "name": "trine2.app", "os": "darwin"}, {"is_launcher": false, "name": "trine2_32bit.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0b1f3c8f11515ddfffe4e1a68945e256", "id": "489715841789853697", "name": "Trine 2: Complete Story", "overlay": true, "primary_sku_id": "494707599611265024", "publishers": [{"id": "521816505252446238", "name": "Frozenbyte"}], "slug": "trine-2-complete-story", "splash": "a24801d2af33e8ec6486b0f3baaadc94", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "494707599611265024", "sku": "494707599611265024"}, {"distributor": "steam", "id": "35720", "sku": "35720"}], "type": 1, "verify_key": "1dd3b45a125d07703ccb40dd6088da1bfc8a52188847d75809c3690e99e7fd75"}, {"description": "Learn what it used to be like \"to job\" in this VR-only job... simulator.", "developers": [{"id": "521816678430933004", "name": "Owlchemy Labs"}], "executables": [{"is_launcher": false, "name": "jobsimulator.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e5cba71d4b295ae02b3f605be0bdf06e", "id": "489832887936483338", "name": "Job Simulator", "publishers": [{"id": "521816678430933004", "name": "Owlchemy Labs"}], "splash": "01a0cd032cf0e0e667475cce74279610", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "448280", "sku": "448280"}], "type": 1, "verify_key": "621d49a93520b3c099d86a3f0aa840adeea29518008fd86522c539b482582c47"}, {"description": "EA's long-running soccer franchise returns for yet another year.", "developers": [{"id": "521816499950714880", "name": "EA Canada"}], "executables": [{"is_launcher": false, "name": "fifa16.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "21867e9e39ac4a727bf43046e8a88741", "id": "489854965787918376", "name": "FIFA 16", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "summary": "", "third_party_skus": [{"distributor": "origin", "id": null, "sku": null}], "type": 1, "verify_key": "dd776944b28126caea8f99a1fc59149801e5cf20247f3aff3c7d0e25156a8b2f"}, {"aliases": ["Construction Simulator 2015"], "description": "A simulation game from Astragon Software GmbH. Take control of 15 different construction machines as and try to finish construction jobs as well as different challenges.", "executables": [{"is_launcher": false, "name": "consim2015.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e74cea8cbf4ee94be4c14884eac56fc5", "id": "489879126925115392", "name": "Construction-Simulator 2015", "publishers": [{"id": "521816758462578700", "name": "weltenbauer. Software Entwicklung GmbH"}], "splash": "646c15bd6de03ecb9dbd90b1b88381ea", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "289950", "sku": "289950"}], "type": 1, "verify_key": "816db7e0213ec5b21b01d5de86e6786de963c37ac7113bd7de2ab0b6a6472db4"}, {"description": "", "developers": [{"id": "521816774086230037", "name": "Swing Swing Submarine"}], "flags": 0, "hook": true, "icon": "d1f9fd2df669ca4e6e826538fd4df355", "id": "489916817146511371", "name": "Seasons After Fall", "primary_sku_id": "489920936414543922", "publishers": [{"id": "521816537192202247", "name": "Focus Home Interactive"}], "slug": "seasons-after-fall", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "489920936414543922", "sku": "489920936414543922"}], "type": 1, "verify_key": "67bd2c4eec43b0f442e763465459cd1ee0eef844f95bd8b04c625caa61b38ce7"}, {"aliases": ["Wasteland 2"], "description": "", "executables": [{"is_launcher": false, "name": "wl2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0655df9c0dfc5eeb78d0e25033bee450", "id": "489917055282315274", "name": "Wasteland 2: Director's Cut", "primary_sku_id": "489922243854336000", "publishers": [{"id": "521816713746972684", "name": "inXile Entertainment"}], "slug": "wasteland-2-director-s-cut", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "404730", "sku": "404730"}, {"distributor": "discord", "id": "489922243854336000", "sku": "489922243854336000"}], "type": 1, "verify_key": "8d53bc9c3711e7c756efa6643aa1a51a41cbb90658f9f00b23e5529e661ec935"}, {"description": "", "flags": 0, "hook": true, "icon": null, "id": "489917480274362368", "name": "Shadows: Heretic Kingdoms", "primary_sku_id": "491289795138682880", "slug": "shadows-heretic-kingdoms", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "491289795138682880", "sku": "491289795138682880"}], "type": 1, "verify_key": "be74cf7ac98de866a256b832cecc2f5611940591618b8b989574a704ab19a508"}, {"description": "", "developers": [{"id": "521816677625757710", "name": "Looking Glass Studios, Inc."}], "executables": [{"is_launcher": false, "name": "ss2/ss2.exe", "os": "win32"}, {"is_launcher": false, "name": "system shock2.exe", "os": "win32"}, {"is_launcher": false, "name": "shock2.exe", "os": "win32"}], "flags": 0, "guild_id": "190583485826727936", "hook": true, "icon": "4622074d010e22733aeb23c917731cec", "id": "489917602412494878", "name": "System Shock 2", "primary_sku_id": "491326980407427082", "publishers": [{"id": "523186062672134155", "name": "Night Dive Studios"}], "slug": "system-shock-2", "splash": "fd3d7bbd1c84de2362f8d26247a90cd6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "238210", "sku": "238210"}, {"distributor": "discord", "id": "491326980407427082", "sku": "491326980407427082"}], "type": 1, "verify_key": "b43ffca157220e056ed3b324686edf33e44de1534f839194425fdb9bac2b865a"}, {"description": "The third game in Lara's rebooted series", "developers": [{"id": "521816535753555988", "name": "Crystal Dynamics, Inc."}], "executables": [{"is_launcher": false, "name": "sottr.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ba54249f7ca7ee387b83de29f871a940", "id": "490260586899177491", "name": "Shadow of the Tomb Raider", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}], "splash": "251fadc0c813731fab8b638c254de55b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "750920", "sku": "750920"}], "type": 1, "verify_key": "392f07450587f2e1541acfbcb916ea2192eaf894d1d2f98b7ab8d00111f67dc1"}, {"description": "ONRAID is a 2D team shooting game from Pragmatix.", "developers": [{"id": "521816704615972865", "name": "Pragmatix"}], "executables": [{"is_launcher": false, "name": "onraid.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9e66a51216f9cdbd8a302e3bdbdf2736", "id": "490611188988772367", "name": "ONRAID", "publishers": [{"id": "521816704615972864", "name": "Pragmatix Ltd"}], "splash": "f383b37685e8304357a0f60db55b2a48", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "511800", "sku": "511800"}], "type": 1, "verify_key": "07798af35b7dcaa9ab64669a5a02c6c74dfed43b0468c33f4f0970dcd0fc382a"}, {"aliases": ["Call of Duty: Black Ops 4", "Call of Duty: Black Ops IIII"], "description": "The Call of Duty release for 2018 ditches a traditional single-player campaign in favor of an expanded zombies mode and a battle royale mode known as Blackout.", "developers": [{"id": "521816646768263168", "name": "Treyarch"}], "executables": [{"is_launcher": false, "name": "blackops4.exe", "os": "win32"}], "flags": 0, "guild_id": "136986169563938816", "hook": true, "icon": "6a74f2e0c9fc94b3e2af6dcc16e6f685", "id": "490913233667096576", "name": "Call of Duty Black Ops 4", "overlay": true, "publishers": [{"id": "521816501544550404", "name": "Activision"}, {"id": "521816523430428673", "name": "Blizzard Entertainment"}], "summary": "", "third_party_skus": [{"distributor": "battlenet", "id": null, "sku": null}], "type": 1, "verify_key": "cf9ff5fb78623319f6cc1ae8c4a70c749964a3b9531b9b9e01a2ffb2679c659c"}, {"description": "", "executables": [{"is_launcher": false, "name": "chess/chess.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b6e8bd801e11694ef46e59adb919da99", "id": "491048607072387072", "name": "Simply Chess", "publishers": [{"id": "521816554648764427", "name": "BlueLine Games"}], "splash": "2ee2a751fc16888026791ca52736a1b9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "312280", "sku": "312280"}], "type": 1, "verify_key": "d8525c6da89baa5a22cc2677741212c0e4e208186e585bea0714666c933cc197"}, {"description": "Turn-based wizard combat with the tactical positioning of chess and the bluff of poker. Features wizard customization, 100s of gear items, single player realm adventures, online leagues and co-op play.", "developers": [{"id": "521816647191756815", "name": "Snapshot Games Inc."}], "executables": [{"is_launcher": false, "name": "chaosrebornwin64.exe", "os": "win32"}], "flags": 0, "guild_id": "263258801904287745", "hook": true, "icon": "5e64161b5531d136ada30d64e822c433", "id": "491200852149796865", "name": "Chaos Reborn", "primary_sku_id": "492083360492027913", "publishers": [{"id": "521816647191756815", "name": "Snapshot Games Inc."}], "slug": "chaos-reborn", "splash": "55a62561cbe0b4243f9fbf85b0b44555", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492083360492027913", "sku": "492083360492027913"}, {"distributor": "steam", "id": "319050", "sku": "319050"}], "type": 1, "verify_key": "e783d00469b83965f03d3243a1145b36d47a7a5ec14f8280d134deed904a7462"}, {"description": "", "developers": [{"id": "521816518871220235", "name": "Double Fine Productions, Inc."}], "executables": [{"is_launcher": false, "name": "brokenage.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "148f00fded30f9953ea267e845aa3d22", "id": "491424584168505354", "name": "Broken Age", "primary_sku_id": "491700594055053312", "publishers": [{"id": "521816700153495552", "name": "Double Fine Productions"}], "slug": "broken-age", "splash": "f8504de14d434335b45dc91e39097612", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "232790", "sku": "232790"}, {"distributor": "discord", "id": "491700594055053312", "sku": "491700594055053312"}], "type": 1, "verify_key": "9b503411fc4008ef67703244b862ab0118504936e22ae9a68d7ca5b26f773dde"}, {"description": "", "developers": [{"id": "521816651306631168", "name": "Sonalysts, Inc."}], "executables": [{"is_launcher": false, "name": "dangerous waters/steamrun.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fd982ffd28e6f4c9ea1afd9b5e2456d6", "id": "491425013468102657", "name": "Dangerous Waters", "primary_sku_id": "492082077831790605", "publishers": [{"id": "521816698534494219", "name": "Black Bean"}], "slug": "dangerous-waters", "splash": "012cd3f20cb4b5ed7982428a89194162", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "1600", "sku": "1600"}, {"distributor": "discord", "id": "492082077831790605", "sku": "492082077831790605"}], "type": 1, "verify_key": "a397ce8143caf260d82aa7f1344fcb9cefe144a3740f6b1fe71f3b667744c869"}, {"description": "", "executables": [{"is_launcher": false, "name": "discipl2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8e211752d26e0012d5c33c12bcf72eb2", "id": "491425405681664037", "name": "Disciples II: Gallean's Return", "primary_sku_id": "492402808251744287", "publishers": [{"id": "521816588601786398", "name": "Strategy First"}], "slug": "disciples-ii-gallean-s-return", "splash": "4102d4842e9eb1b623bd9f18003b0832", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "1640", "sku": "1640"}, {"distributor": "discord", "id": "492402808251744287", "sku": "492402808251744287"}], "type": 1, "verify_key": "a36de2e366da82d399be80c24e73f04f3c81ff65f4f79701526610c6e2928669"}, {"description": "", "executables": [{"is_launcher": false, "name": "disciple.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "28f1ada9543fe02fadfe91ef771e7554", "id": "491425800059486208", "name": "Disciples Sacred Lands Gold", "primary_sku_id": "492403683045146624", "publishers": [{"id": "521816588601786398", "name": "Strategy First"}], "slug": "disciples-sacred-lands-gold", "splash": "5b082bd959b6081e824b77391abcfca7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "281450", "sku": "281450"}, {"distributor": "discord", "id": "492403683045146624", "sku": "492403683045146624"}], "type": 1, "verify_key": "54b437563819bbc3210e63ad8378cc380127911ae67be60a44b3af9422d7607c"}, {"description": "", "developers": [{"id": "521816544385171486", "name": "Bugbear Entertainment Ltd."}], "executables": [{"is_launcher": false, "name": "flatout2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ff9beaa227078f4ae9b656a03fa8a7a4", "id": "491426078137647104", "name": "FlatOut 2", "primary_sku_id": "492394470831030272", "publishers": [{"id": "521816579344957442", "name": "Empire Interactive Entertainment"}], "slug": "flatout-2", "splash": "22e45f80d96f570b244ca540813e6aa0", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492394470831030272", "sku": "492394470831030272"}, {"distributor": "steam", "id": "2990", "sku": "2990"}], "type": 1, "verify_key": "cd202a60b1faf33b717c35b0d99f5bc67885af55b37bc52ae75df174223823ee"}, {"description": "", "developers": [{"id": "521816544385171486", "name": "Bugbear Entertainment Ltd."}], "executables": [{"is_launcher": false, "name": "fouc.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f3584ed4c95a6ca565690ae207950cd0", "id": "491426256789831690", "name": "FlatOut: Ultimate Carnage", "primary_sku_id": "492068627231539200", "publishers": [{"id": "521816579344957442", "name": "Empire Interactive Entertainment"}], "slug": "flatout-ultimate-carnage", "splash": "acd2524e8dc44cb0e7f2efbf0ea49678", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492068627231539200", "sku": "492068627231539200"}, {"distributor": "steam", "id": "12360", "sku": "12360"}], "type": 1, "verify_key": "3226022de143ee7ce8b8c4d97669ab5243e93a242d079c74ed004fd6480e334e"}, {"description": "", "developers": [{"id": "521816506607206430", "name": "Arcen Games"}], "executables": [{"is_launcher": false, "name": "fleet command/steamrun.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c5da06b20ea5123fdee12c25a0740fb1", "id": "491426408384561160", "name": "Fleet Command", "primary_sku_id": "492404319350554634", "publishers": [{"id": "521816588601786398", "name": "Strategy First"}], "slug": "fleet-command", "splash": "f9458c7355ab32901d1ef292ae6ed824", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "2910", "sku": "2910"}, {"distributor": "discord", "id": "492404319350554634", "sku": "492404319350554634"}], "type": 1, "verify_key": "71f9b59108f9642e147130cdfa10954b0f97f3f9ec3f516d95f83de929915b60"}, {"description": "", "developers": [{"id": "521816704184090624", "name": "Malfador Machinations"}], "executables": [{"is_launcher": false, "name": "se4.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0ff529393940aeddb9c0541b26fb147b", "id": "491426627394338846", "name": "Space Empires IV Deluxe", "primary_sku_id": "492082675537149972", "publishers": [{"id": "521816601691947038", "name": "Akella"}], "slug": "space-empires-iv-deluxe", "splash": "c33247a73e8c8516fca8506eef3e6587", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492082675537149972", "sku": "492082675537149972"}, {"distributor": "steam", "id": "1610", "sku": "1610"}], "type": 1, "verify_key": "279bd9ce552d8667ecc1187b3df6d2b63594de4e826a6511c0d5d885259b05f7"}, {"description": "", "developers": [{"id": "521816651306631168", "name": "Sonalysts, Inc."}], "executables": [{"is_launcher": false, "name": "sub command/steamrun.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fc9b4309e16b472f6c6e6936091de283", "id": "491426844604760120", "name": "Sub Command", "primary_sku_id": "492405107410075648", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "slug": "sub-command", "splash": "9d9ebe93a4a7ab470273b46a4af3e1b2", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492405107410075648", "sku": "492405107410075648"}, {"distributor": "steam", "id": "2920", "sku": "2920"}], "type": 1, "verify_key": "bc7c9d5c649bef134694e5aa7a3a28ecb855c97b5a93efd2f2063c818c516b64"}, {"description": "", "developers": [{"id": "521816541763993601", "name": "Passtech Games"}], "executables": [{"is_launcher": false, "name": "masters of anima.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6045450974a640023708f312163305db", "id": "491427069734027273", "name": "Masters of Anima", "primary_sku_id": "492418279717994505", "publishers": [{"id": "521816537192202247", "name": "Focus Home Interactive"}], "slug": "masters-of-anima", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492418279717994505", "sku": "492418279717994505"}], "type": 1, "verify_key": "a811980e9daab744973ca3a15b67be5ed7194b38fc4e02cd396c0dfe90c8095e"}, {"description": "", "developers": [{"id": "521816529453449248", "name": "Daniel Mullins Games"}], "executables": [{"is_launcher": false, "name": "ponyisland.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e48c55316ccbc29ad3d449d9e36c19fd", "id": "491427187442974749", "name": "Pony Island", "primary_sku_id": "492056527918727178", "publishers": [{"id": "521816529453449248", "name": "Daniel Mullins Games"}], "slug": "pony-island", "splash": "55f8ec31b0ebeba2bffb8d275c074c6b", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492056527918727178", "sku": "492056527918727178"}, {"distributor": "steam", "id": "405640", "sku": "405640"}], "type": 1, "verify_key": "a1776390d97b57b20bb1611f47653b56ba3567379cfb05f3d70df18f7e51f754"}, {"cover_image": "009cb24b59390d7144b7c99b864e9df3", "description": "", "developers": [{"id": "521816693719302146", "name": "distractionware"}], "executables": [{"is_launcher": false, "name": "vvvvvv.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "009cb24b59390d7144b7c99b864e9df3", "id": "491427544134975498", "name": "VVVVVV", "primary_sku_id": "492001517767753729", "publishers": [{"id": "521816693719302146", "name": "distractionware"}], "slug": "vvvvvv", "splash": "bf99e16021b0772e5c63313359a6451b", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492001517767753729", "sku": "492001517767753729"}, {"distributor": "steam", "id": "70300", "sku": "70300"}], "type": 1, "verify_key": "8dda700af34cbb1e1fa797aba73211a3fb020137e71775f0b173a2b3309c62d6"}, {"description": "", "developers": [{"id": "521816617571581962", "name": "DrinkBox Studios"}], "executables": [{"is_launcher": false, "name": "drinkbox_game4/game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e57cc399b7ad46758b13cbafd89b50dd", "id": "491427940135993364", "name": "Guacamelee! Super Turbo Championship Edition", "primary_sku_id": "492074696779497477", "publishers": [{"id": "521816617571581962", "name": "DrinkBox Studios"}], "slug": "guacamelee-super-turbo-championship-edition", "splash": "0d48ef54ed7215925271f2284c39d84e", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492074696779497477", "sku": "492074696779497477"}, {"distributor": "steam", "id": "275390", "sku": "275390"}], "type": 1, "verify_key": "faff396ac1b6c292405b28d999c464b611959dde7454c3c797660021013969af"}, {"description": "", "executables": [{"is_launcher": false, "name": "theendisnigh.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "983fb1d1a45b0d854945b41a0f07ee09", "id": "491739802870349883", "name": "The End Is Nigh", "primary_sku_id": "492017956373659649", "publishers": [{"id": "521816629844377630", "name": "Edmund McMillen and Tyler Glaiel"}], "slug": "the-end-is-nigh", "splash": "e9e76419ef13741187847da4ffd9aad4", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "583470", "sku": "583470"}, {"distributor": "discord", "id": "492017956373659649", "sku": "492017956373659649"}], "type": 1, "verify_key": "78f86cc8ad9dbf602a76d66f17e2cda153fc8dcf1b999274e9eafb2ff952adb6"}, {"description": "", "developers": [{"id": "521816608445038604", "name": "Matt Makes Games"}], "executables": [{"is_launcher": false, "name": "towerfall.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6a6186c4981b177b54d5861d1f25120d", "id": "491740193116782595", "name": "TowerFall Ascension", "primary_sku_id": "492067651217129473", "publishers": [{"id": "521816608445038604", "name": "Matt Makes Games"}], "slug": "towerfall-ascension", "splash": "d60295e84177e7e5d99fe6012dec4906", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "251470", "sku": "251470"}, {"distributor": "discord", "id": "492067651217129473", "sku": "492067651217129473"}], "type": 1, "verify_key": "d389ffe91946769bc32b3478c9407c0191642c0187ea7a8b3f560d45ef53cf53"}, {"description": "The eleventh numbered entry in the long-running RPG series returns to its pre-MMO roots.", "developers": [{"id": "521816798983880728", "name": "Toylogic"}], "executables": [{"is_launcher": false, "name": "dragon quest xi.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "61d70025ffc2c69245dc22b459c26e48", "id": "491806530576842762", "name": "DRAGON QUEST\u00ae XI: Echoes of an Elusive Age\u2122", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}], "splash": "690986dd09147e6f95cb1a986c1ae18e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "742120", "sku": "742120"}], "type": 1, "verify_key": "83d337c917dc8c7b588ba8e1af4696af01a1f9e2af421fad1f1c90b77ff25586"}, {"cover_image": "c4cceda0855e16e3637c9506c0c277db", "description": "", "developers": [{"id": "521816677101600788", "name": "Powerhoof"}], "executables": [{"is_launcher": false, "name": "regularhumanbasketball.exe", "os": "win32"}], "flags": 0, "guild_id": "384541799034912768", "hook": true, "icon": "ba6bd7185f1cff008523232ba4939359", "id": "491853507507388427", "name": "Regular Human Basketball", "primary_sku_id": "491853507507388427", "publishers": [{"id": "521816677101600788", "name": "Powerhoof"}], "slug": "regular-human-basketball", "splash": "703e2c62765a958b5fd87773721dba0f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "661940", "sku": "661940"}, {"distributor": "discord", "id": "491853507507388427", "sku": "491853507507388427"}], "type": 1, "verify_key": "f5ec87d00d01e398d9bc6c92454ff177cb3a5584453e2182e5be202bff55f070"}, {"description": "The tenth instalment in the Formula 1 franchise developed by Codemasters", "developers": [{"id": "521816499464306688", "name": "Codemasters"}], "executables": [{"is_launcher": false, "name": "f1_2018.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "65e5791ada147a3dc73b366068b2a403", "id": "491909189086740480", "name": "F1 2018", "publishers": [{"id": "521816499464306688", "name": "Codemasters"}], "splash": "b649cf0bb40a014f02f36833cb64c7c5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "737800", "sku": "737800"}], "type": 1, "verify_key": "7218cfa3e581f6b2a8bee6977b203f9b3a1f9e478e9f9d7d76e5e3c7f9640010"}, {"description": "Never Split the Party", "developers": [{"id": "521816743828783124", "name": "Legend Studio"}], "executables": [{"is_launcher": false, "name": "never split the party.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4a8fd2577b2761e940ab9c74caa5319e", "id": "492054902772727808", "name": "Never Split the Party", "publishers": [{"id": "521816743828783124", "name": "Legend Studio"}], "splash": "7a397895be9db081a388a752e2ead291", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "711810", "sku": "711810"}], "type": 1, "verify_key": "949105b0a5deacfe8458f72df25f23c264908018dc5c62f032cda13e5de3ca3c"}, {"description": "", "developers": [{"id": "521816542258790401", "name": "Telltale Games"}], "executables": [{"is_launcher": false, "name": "thewolfamongus.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "44cb19d6060dec9701cb713bbe7fdd43", "id": "492110850342125591", "name": "The Wolf Among Us", "primary_sku_id": "492166959870509076", "publishers": [{"id": "521816542258790401", "name": "Telltale Games"}], "slug": "the-wolf-among-us", "splash": "7394221f33536c480f92387a034b7c1c", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492166959870509076", "sku": "492166959870509076"}, {"distributor": "steam", "id": "250320", "sku": "250320"}], "type": 1, "verify_key": "744036a474da84b2486a3495c8a3d792a3fcb4e8d32edf40b88b9721de88f82c"}, {"description": "", "developers": [{"id": "521816570520141825", "name": "Starbreeze Studios AB"}], "executables": [{"is_launcher": false, "name": "brothers.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "691d2b7a7aef59e74a68713212994b56", "id": "492112259770875921", "name": "Brothers - A Tale of Two Sons", "primary_sku_id": "492136230452985864", "publishers": [{"id": "521816570520141824", "name": "505 Games"}, {"id": "521816570520141825", "name": "Starbreeze Studios AB"}], "slug": "brothers-a-tale-of-two-sons", "splash": "9cdb46490aebad90451fa275c1a2aeb0", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492136230452985864", "sku": "492136230452985864"}, {"distributor": "steam", "id": "225080", "sku": "225080"}], "type": 1, "verify_key": "db7a2737a873ed4194065c32ef34576181dc21a35436406afc088be88fbf3104"}, {"cover_image": "ca26bf489f2b754a18c92a1b134f6c83", "description": "", "developers": [{"id": "521816572994519041", "name": "Giant Squid"}], "executables": [{"is_launcher": false, "name": "abzugame-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6f8f0177e25b29b8dffdf673d837bc9c", "id": "492113873508368403", "name": "ABZU", "primary_sku_id": "492134997591851023", "publishers": [{"id": "521816570520141824", "name": "505 Games"}, {"id": "521816572994519041", "name": "Giant Squid"}], "slug": "abzu", "splash": "129708fc12a770c0b6bd8ef11e78d116", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492134997591851023", "sku": "492134997591851023"}, {"distributor": "steam", "id": "384190", "sku": "384190"}], "type": 1, "verify_key": "e665454eaa160c0ffe35c1e2c6a77afa90cca65051ba3c596386ce8e60c3540f"}, {"description": "", "developers": [{"id": "521816759913938944", "name": "Ovosonico"}], "executables": [{"is_launcher": false, "name": "lastdayofjune.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b20e0bef9830d82f4e694b3715e0b970", "id": "492114663211925536", "name": "Last Day of June", "primary_sku_id": "492137108656488452", "publishers": [{"id": "521816570520141824", "name": "505 Games"}, {"id": "521816759913938944", "name": "Ovosonico"}], "slug": "last-day-of-june", "splash": "6654e040529d37047f9e7b9e5ed2d2c9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "635320", "sku": "635320"}, {"distributor": "discord", "id": "492137108656488452", "sku": "492137108656488452"}], "type": 1, "verify_key": "5f5bb1512d9a4eccc7d4f0bdd86849d01afaa31415be29ac5aa0347b0025068e"}, {"description": "", "developers": [{"id": "521816650840801280", "name": "Colossal Order"}], "executables": [{"is_launcher": false, "name": "cities in motion.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3d4ebd2cc68f1ae79f7bd8459cc2bf92", "id": "492115461824184320", "name": "Cities in Motion", "primary_sku_id": "492137689856999464", "publishers": [{"id": "521816650304061477", "name": "Colossal Order Ltd."}, {"id": "521816521249521702", "name": "Paradox Interactive AB"}], "slug": "cities-in-motion", "splash": "0feb5c5089edfe9ed9a1f45d4a157a37", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492137689856999464", "sku": "492137689856999464"}, {"distributor": "steam", "id": "73010", "sku": "73010"}], "type": 1, "verify_key": "1646ef60ed681fe44b969c8241f3c2495f845ca7dc7f9a377aa1c33fa9bce202"}, {"description": "", "executables": [{"is_launcher": false, "name": "darkest hourkr.exe", "os": "win32"}, {"is_launcher": false, "name": "darkest hour.exe", "os": "win32"}, {"is_launcher": false, "name": "darkest houren.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "83f676b692e8a2de0754b374779606dd", "id": "492116330909138974", "name": "Darkest Hour: A Hearts of Iron Game", "primary_sku_id": "492140296076001280", "publishers": [{"id": "521816760949669898", "name": "Martin Ivanov"}, {"id": "521816521249521702", "name": "Paradox Interactive AB"}], "slug": "darkest-hour-a-hearts-of-iron-game", "splash": "b77c06a7165aa7fa0597e14de4d615da", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492140296076001280", "sku": "492140296076001280"}, {"distributor": "steam", "id": "73170", "sku": "73170"}], "type": 1, "verify_key": "c1e17c666d65ced68e73a5ec124ff8431b5e6a98a98350d9d10065294c9a0ec2"}, {"description": "", "developers": [{"id": "521816796907700224", "name": "Paradox Development"}], "executables": [{"is_launcher": false, "name": "eu3.exe", "os": "win32"}, {"is_launcher": false, "name": "eu3game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1fbe1bcd6c8489a1a46ff54be0b70d85", "id": "492117546728816640", "name": "Europa Universalis III", "primary_sku_id": "492141866628808715", "publishers": [{"id": "521816507676885007", "name": "Paradox Development Studio"}, {"id": "521816521249521702", "name": "Paradox Interactive AB"}], "slug": "europa-universalis-iii", "splash": "747309a2867570f144cf2da76f41dc49", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "25800", "sku": "25800"}, {"distributor": "discord", "id": "492141866628808715", "sku": "492141866628808715"}], "type": 1, "verify_key": "1d7cc6ef9e241383565638a10273236deb2a950f543faa8f528710e46f9646ed"}, {"description": "", "developers": [{"id": "521816521249521702", "name": "Paradox Interactive AB"}], "executables": [{"is_launcher": false, "name": "hoi3game.exe", "os": "win32"}, {"is_launcher": false, "name": "hoi3.exe", "os": "win32"}, {"is_launcher": false, "name": "hoi3_tfh.exe", "os": "win32"}, {"is_launcher": false, "name": "hoi3_tfh_kor.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b088017a67047f6669ab10aa61d3a5c8", "id": "492118503508279316", "name": "Hearts of Iron III", "primary_sku_id": "492142950487293983", "publishers": [{"id": "521816507676885007", "name": "Paradox Development Studio"}, {"id": "521816521249521702", "name": "Paradox Interactive AB"}], "slug": "hearts-of-iron-iii", "splash": "881705024573a232f893b07871060621", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "25890", "sku": "25890"}, {"distributor": "discord", "id": "492142950487293983", "sku": "492142950487293983"}], "type": 1, "verify_key": "18c808b01265f513653243279433bce651d0c91c9e3f88441133ebdcce8f8709"}, {"aliases": ["Majesty: The Fantasy Kingdom Sim"], "description": "", "executables": [{"is_launcher": false, "name": "majestyhd.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3cb6c1896a5102a4e0c8855443f106fb", "id": "492120134937346049", "name": "Majesty Gold HD", "primary_sku_id": "492143826954354698", "slug": "majesty-gold-hd", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "discord", "id": "492143826954354698", "sku": "492143826954354698"}, {"distributor": "steam", "id": "73230", "sku": "73230"}], "type": 1, "verify_key": "3fe3bde83e7d6a2fbc19bf1435b795527caf8f09a8878f5b4b595e4907ba5068"}, {"description": "", "developers": [{"id": "521816521249521698", "name": "Harebrained Schemes"}], "executables": [{"is_launcher": false, "name": "dragonfall.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "98a3f83118c5509be10a653f1f49e76a", "id": "492120767111233566", "name": "Shadowrun: Dragonfall - Director's Cut", "primary_sku_id": "492145960525234187", "publishers": [{"id": "521816521249521698", "name": "Harebrained Schemes"}], "slug": "shadowrun-dragonfall-director-s-cut", "splash": "d1b3c440fd6f66d280ed84bfe8039385", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492145960525234187", "sku": "492145960525234187"}, {"distributor": "steam", "id": "300550", "sku": "300550"}], "type": 1, "verify_key": "6bc04b761e6aba55ad12b97d0b74d7fd944bb547138be4f50b280bb2705b1aff"}, {"description": "", "developers": [{"id": "521816509673242635", "name": "Runic Games"}], "executables": [{"is_launcher": false, "name": "torchlight.exe", "os": "win32"}], "flags": 0, "guild_id": "439223259352006657", "hook": true, "icon": "bfcbbe5ae5e4215433ff6c4c52c0836d", "id": "492121941155643402", "name": "Torchlight", "primary_sku_id": "492147454469472257", "publishers": [{"id": "521816509673242634", "name": "Runic Games, Inc."}, {"id": "521816509673242635", "name": "Runic Games"}, {"id": "521816509673242636", "name": "Perfect World Entertainment"}], "slug": "torchlight", "splash": "0fd8b5ee3b1243f285a5a887ce922b68", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "discord", "id": "492147454469472257", "sku": "492147454469472257"}, {"distributor": "steam", "id": "41500", "sku": "41500"}], "type": 1, "verify_key": "f4f49e3e30fadfae250b6a2be6a3c01c236b0a596ae57519c84e7f8a3b02c09b"}, {"bot_public": true, "bot_require_code_grant": false, "description": "", "developers": [{"id": "521816522977574923", "name": "LucasArts Entertainment Company LLC"}], "executables": [{"is_launcher": false, "name": "swrepubliccommando.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7893feb700e602d4a6ec5985361eead0", "id": "492129256772599837", "name": "STAR WARS\u2122 Republic Commando\u2122", "primary_sku_id": "492167977492283405", "publishers": [{"id": "570702595178627072", "name": "Lucasfilm, Disney"}], "slug": "star-wars-tm-republic-commando-tm", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492167977492283405", "sku": "492167977492283405"}], "type": 1, "verify_key": "18890c7e1ce80eae296198937fc4d798c8b38d053b70ca9efb43a035903c5d8f"}, {"cover_image": "cb2e174cddf8400e70b14c199e62a1d1", "description": "Stranger is a bounty hunter that never much cared for guns... Use an array of critters and his trusty crossbow to hunt down a bunch of outlaws so that Stranger can get the moolah he needs and right the wrongs of Mongo Valley.", "developers": [{"id": "521816747477827596", "name": "Oddworld Inhabitants"}], "executables": [{"is_launcher": false, "name": "stranger.exe", "os": "win32"}], "flags": 0, "guild_id": "293291256736382976", "hook": true, "icon": "4e3e3904fcf8006491261328dc79999c", "id": "492129658536591400", "name": "Oddworld: Stranger's Wrath", "primary_sku_id": "492148799783829504", "publishers": [{"id": "521816747477827596", "name": "Oddworld Inhabitants"}], "slug": "oddworld-stranger-s-wrath", "splash": "09f66787d3a971b2cba444e534f6f522", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "15750", "sku": "15750"}, {"distributor": "discord", "id": "492148799783829504", "sku": "492148799783829504"}], "type": 1, "verify_key": "cd157f5c9d7f94f50157aa3e8be6a8814d5fd4166ea0ec538d32465b2387c11d"}, {"description": "", "developers": [{"id": "521816631354327045", "name": "Deep Red Games Ltd."}], "executables": [{"is_launcher": false, "name": "vegas - make it big/casino.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7268822de526b35b1560fc01ac9967d0", "id": "492130126012743710", "name": "Vegas: Make It Big", "primary_sku_id": "492361573512380416", "publishers": [{"id": "521816631354327043", "name": "Deepred"}, {"id": "521816579344957442", "name": "Empire Interactive Entertainment"}], "slug": "vegas-make-it-big", "splash": "4be378a055f51448cc90a4bc6df5294b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "6210", "sku": "6210"}, {"distributor": "discord", "id": "492361573512380416", "sku": "492361573512380416"}], "type": 1, "verify_key": "2940af57a84cc5dd0e8c7a47058fb3c9f5ae12a955b3705c10253cb6fef49863"}, {"description": "", "executables": [{"is_launcher": false, "name": "swgbwide_x1.exe", "os": "win32"}, {"is_launcher": false, "name": "battlegrounds.exe", "os": "win32"}, {"is_launcher": false, "name": "battlegrounds_x1.exe", "os": "win32"}, {"is_launcher": false, "name": "swgbg.exe", "os": "win32"}, {"is_launcher": false, "name": "battlegrounds_x2.exe", "os": "win32"}, {"is_launcher": false, "name": "battlegrounds_cc.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e20da2055e532789a0f74495535927ab", "id": "492131222135373834", "name": "STAR WARS\u2122 Galactic Battlegrounds Saga", "primary_sku_id": "492426605231341568", "publishers": [{"id": "521816567940513807", "name": "Ensemble Studios"}], "slug": "star-wars-tm-galactic-battlegrounds-saga", "splash": "7d7d1969be61950ef02ff7ed70d0a8f8", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492426605231341568", "sku": "492426605231341568"}, {"distributor": "steam", "id": "356500", "sku": "356500"}], "type": 1, "verify_key": "d874692610532564408900241eb0c826d43d4f3758da8e2f9669ce206858212c"}, {"description": "", "developers": [{"id": "521816542258790401", "name": "Telltale Games"}], "executables": [{"is_launcher": false, "name": "walkingdead4.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3c7ebaa15e85b3b29f8ed21fc6c83994", "id": "492133608493023232", "name": "The Walking Dead: The Final Season", "publishers": [{"id": "521816542258790401", "name": "Telltale Games"}], "splash": "1bd4a0173614d50dc1e49d5109722566", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "866800", "sku": "866800"}], "type": 1, "verify_key": "fc1e1b80b585d32f614c0d78ca5e39cfa25571d0047d374099d98dca8be15d6d"}, {"description": "", "developers": [{"id": "521816522977574923", "name": "LucasArts Entertainment Company LLC"}], "executables": [{"is_launcher": false, "name": "jk.exe", "os": "win32"}, {"is_launcher": false, "name": "jedi.exe", "os": "win32"}, {"is_launcher": false, "name": "jediknight.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "773ac17ebd2c045df507e65f50a9c369", "id": "492134139647098881", "name": "STAR WARS\u2122 Jedi Knight: Dark Forces II", "primary_sku_id": "492427369257369610", "publishers": [{"id": "570702595178627072", "name": "Lucasfilm, Disney"}], "slug": "star-wars-tm-jedi-knight-dark-forces-ii", "splash": "78a92b32ee65df3079844791851de943", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492427369257369610", "sku": "492427369257369610"}, {"distributor": "steam", "id": "32380", "sku": "32380"}], "type": 1, "verify_key": "af633356415aa97ef03095f8dd2469bcac042e6a87ffaa32e39898f18544dffd"}, {"description": "Yooka-Laylee is a spiritual successor to classic 3D platformers, such as Banjo Kazooie, from former RARE developers at Playtonic Games. Playtonic crowdsourced the game's funding through Kickstarter, achieving their goal within 40 minutes.", "developers": [{"id": "521816702753701898", "name": "Playtonic Games"}], "executables": [{"is_launcher": false, "name": "yookalaylee64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7dc90618a4d754c33eaa5757e3d4887c", "id": "492134695711014912", "name": "Yooka-Laylee", "publishers": [{"id": "521816571103019015", "name": "Team17 Software Limited"}], "splash": "a67ab6724e15fdb3196f5653059d6b27", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "360830", "sku": "360830"}], "type": 1, "verify_key": "60121b8327b60840d203c123584190a1f48207ef34c1b6e7c91af8e6012cbcc2"}, {"description": "", "developers": [{"id": "521816522977574923", "name": "LucasArts Entertainment Company LLC"}], "executables": [{"is_launcher": false, "name": "mise.exe", "os": "win32"}, {"is_launcher": false, "name": "misec.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "25cbdae69a053595eeac7fd9282b340a", "id": "492134756914429975", "name": "The Secret of Monkey Island\u2122 Special Edition", "primary_sku_id": "492367768877006848", "publishers": [{"id": "570702595178627072", "name": "Lucasfilm, Disney"}], "slug": "the-secret-of-monkey-island-tm-special-edition", "splash": "35eea891eaae179820fc43e155ce1f3e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "32360", "sku": "32360"}, {"distributor": "discord", "id": "492367768877006848", "sku": "492367768877006848"}], "type": 1, "verify_key": "364c89b03ade7a9f45bca7defc829958be1fd3c5626c680b4704dab24ed8b095"}, {"aliases": ["Star Wars Jedi Knight II"], "description": "", "developers": [{"id": "521816668196831240", "name": "Raven Software"}], "executables": [{"is_launcher": false, "name": "jk2mvmp_x64.exe", "os": "win32"}, {"is_launcher": false, "name": "jk2sp.exe", "os": "win32"}, {"is_launcher": false, "name": "jk2mvmp_x86.exe", "os": "win32"}, {"is_launcher": false, "name": "jk2mp.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c7d676e2c8e20dc68d5351747f6d95c3", "id": "492135944179286068", "name": "STAR WARS\u2122 Jedi Knight II: Jedi Outcast\u2122", "primary_sku_id": "492429111680303114", "publishers": [{"id": "521816522977574923", "name": "LucasArts Entertainment Company LLC"}, {"id": "521816668196831240", "name": "Raven Software"}], "slug": "star-wars-tm-jedi-knight-ii-jedi-outcast-tm", "splash": "7d69cdf6f89fd9e6d158f33bb07c5cbf", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492429111680303114", "sku": "492429111680303114"}, {"distributor": "steam", "id": "6030", "sku": "6030"}], "type": 1, "verify_key": "256948f917f912dccf342ab7277c4980f466032cc41d818d78794d9c29818ce2"}, {"description": "", "developers": [{"id": "521816589570408449", "name": "BioWare"}], "executables": [{"is_launcher": false, "name": "swkotor.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d838d0936fcbae26eaa9ad93c9a806c1", "id": "492136872714305566", "name": "STAR WARS\u2122 Knights of the Old Republic", "primary_sku_id": "492430161367662593", "publishers": [{"id": "570702595178627072", "name": "Lucasfilm, Disney"}], "slug": "star-wars-tm-knights-of-the-old-republic", "splash": "177ed6c1384ce828995d24721eb2b7e3", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492430161367662593", "sku": "492430161367662593"}, {"distributor": "steam", "id": "32370", "sku": "32370"}], "type": 1, "verify_key": "eca825652cdd414a83d1ea5a113e73ca7bbcc38ac6fdaed7e0469ffbb40af8c0"}, {"description": "", "developers": [{"id": "521816522977574923", "name": "LucasArts Entertainment Company LLC"}], "executables": [{"is_launcher": false, "name": "dark forces/dosbox/dosbox.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e82ab9b39e2ae6024748de2353aa18ca", "id": "492137508633706517", "name": "Star Wars: Dark Forces", "primary_sku_id": "492428089725419523", "publishers": [{"id": "570702595178627072", "name": "Lucasfilm, Disney"}], "slug": "star-wars-dark-forces", "splash": "9a175ad2c0900e015973f04f4afd5ca2", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492428089725419523", "sku": "492428089725419523"}, {"distributor": "steam", "id": "32400", "sku": "32400"}], "type": 1, "verify_key": "11fab2b6eb28f99a8672b4051c4a7fe3540a75359f00b219ee43cf7efbb5826c"}, {"description": "", "executables": [{"is_launcher": false, "name": "ascension.exe", "os": "win32"}, {"is_launcher": false, "name": "ascensiongame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2cfb672f418e0cf07b0310b25b7fd0fe", "id": "492140628717731846", "name": "Ascension: Deckbuilding Game", "primary_sku_id": "492369141026521093", "slug": "ascension-deckbuilding-game", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "261860", "sku": "261860"}, {"distributor": "discord", "id": "492369141026521093", "sku": "492369141026521093"}], "type": 1, "verify_key": "595d0081b5e9c3bb63db53ba47e5c89b9494f64c7d85d5c6c25b6b249f4b35a4"}, {"cover_image": "e02e40b084c89a7e92edcdb6c8ea57c8", "description": "The human race is under assault by a race of machines who seek nothing short of total annihilation. Wage war on a scale never before seen as your armies battle against a relentless foe in both epic single player matches against powerful AI players or online against human opponents in custom or ranked multiplayer.", "developers": [{"id": "521816531831750658", "name": "Stardock Entertainment"}, {"id": "524352523591483414", "name": "Oxide Games"}], "executables": [{"is_launcher": false, "name": "ashesescalation_dx11.exe", "os": "win32"}], "flags": 0, "guild_id": "135425716425719809", "hook": true, "icon": "e74b85a6234090e7123d91dad3f3c5f2", "id": "492141568816447488", "name": "Ashes of the Singularity: Escalation", "primary_sku_id": "492370018450014218", "publishers": [{"id": "521816531831750658", "name": "Stardock Entertainment"}], "slug": "ashes-of-the-singularity-escalation", "splash": "35aee802f9278f105c663b8c855d315f", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492370018450014218", "sku": "492370018450014218"}, {"distributor": "steam", "id": "507490", "sku": "507490"}], "type": 1, "verify_key": "17efc8bba037e23fc408617b07c6d36f0b93f0f08cce4ad8ca85041a502e6969"}, {"description": "", "developers": [{"id": "521816794068025358", "name": "Asmodee Digital"}], "executables": [{"is_launcher": false, "name": "ticket to ride.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4ae8e28d39f0ac5a798e0d1130307310", "id": "492142885077123082", "name": "Ticket to Ride", "primary_sku_id": "492370897534189568", "publishers": [{"id": "521816794068025358", "name": "Asmodee Digital"}], "slug": "ticket-to-ride", "splash": "384e36f06211b795ec06b94c6c784ec5", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492370897534189568", "sku": "492370897534189568"}, {"distributor": "steam", "id": "108200", "sku": "108200"}], "type": 1, "verify_key": "e98878132d20aec030bb7045021f3c092905ea8dd6ec61305ac729c2eb0fc87d"}, {"bot_public": false, "bot_require_code_grant": false, "cover_image": "bb9580d326f62e8e7c3f676ad24d6f02", "description": "", "developers": [{"id": "521816604640542744", "name": "Liquid Bit / Bumble Bear Games"}], "executables": [{"is_launcher": false, "name": "killer queen black.exe", "os": "win32"}, {"is_launcher": false, "name": "killer queen black/killerqueenx.exe", "os": "win32"}], "flags": 0, "guild_id": "377189070834630657", "hook": true, "icon": "c92cb8ed7136d25ee6765f080790b84d", "id": "492144146040094722", "name": "Killer Queen Black", "primary_sku_id": "492373500997402624", "publishers": [{"id": "521816604640542743", "name": "Liquid Bit, LLC"}], "slug": "killer-queen-black", "splash": "b3cd8054876c75292d688f6d24cc39bf", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "663670", "sku": "663670"}, {"distributor": "discord", "id": "492373500997402624", "sku": "492373500997402624"}], "type": 1, "verify_key": "cb8624b9d39289971d719f8ecfe587bb3bf1e3f0a60cccd8e52008e0f17376f9"}, {"cover_image": "1a576b74827ea60d0d93a30848988e92", "description": "Oddworld: New 'n' Tasty is the ground-up remake of our first ever adventure, Abe's Oddysee.", "executables": [{"is_launcher": false, "name": "nnt.exe", "os": "win32"}], "flags": 0, "guild_id": "293291256736382976", "hook": true, "icon": "e2d05fb2c3d0e4db0b0f3fb71822954e", "id": "492146632511586313", "name": "Oddworld: New 'n' Tasty", "primary_sku_id": "492374183238696966", "publishers": [{"id": "521816771745939467", "name": "Oddworld Inhabitants, Inc."}], "slug": "oddworld-new-n-tasty", "splash": "3fb237f933af85d5175dc846a28d0bdc", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "314660", "sku": "314660"}, {"distributor": "discord", "id": "492374183238696966", "sku": "492374183238696966"}], "type": 1, "verify_key": "f933c993dd99d491765ab896a8e2cfcd8d1d1465cecc29d91c09e9bc54ef334e"}, {"description": "", "developers": [{"id": "521816801995390976", "name": "Out of the Park Developments"}], "executables": [{"is_launcher": false, "name": "ootp18.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0131104065ef6369e1aff0145f63f6c7", "id": "492147626872012800", "name": "Out of the Park Baseball 18", "primary_sku_id": "492375977662480384", "publishers": [{"id": "521816801995390976", "name": "Out of the Park Developments"}], "slug": "out-of-the-park-baseball-18", "splash": "6174917bee2b0ebf3b30427fd2df4625", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "465650", "sku": "465650"}, {"distributor": "discord", "id": "492375977662480384", "sku": "492375977662480384"}], "type": 1, "verify_key": "20d1f7ff5227506e2c5c63d1e565bf34540d2c821a9b09a454125b34e8484729"}, {"description": "", "executables": [{"is_launcher": false, "name": "tropico3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0c0f745ceb46067c584da4f081f8ad2a", "id": "492154985627385886", "name": "Tropico 3", "primary_sku_id": "492389652125319178", "publishers": [{"id": "521816616602959882", "name": "Haemimont Games"}], "slug": "tropico-3", "splash": "8813323dbb5e4e30ac6d7cec3b57b582", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492389652125319178", "sku": "492389652125319178"}, {"distributor": "steam", "id": "23490", "sku": "23490"}], "type": 1, "verify_key": "2434e58e0671485caee0c177ecfa131f59118e887bdefe0815fe15c009746ec9"}, {"description": "", "executables": [{"is_launcher": false, "name": "hoi2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "12e210d3cc1510f67860817634a000aa", "id": "492158597673910281", "name": "Hearts of Iron II", "primary_sku_id": "492382381853114368", "publishers": [{"id": "521816507676885007", "name": "Paradox Development Studio"}], "slug": "hearts-of-iron-ii", "splash": "60f7740716d6558dd7a58c23aa733b65", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492382381853114368", "sku": "492382381853114368"}, {"distributor": "steam", "id": "22130", "sku": "22130"}], "type": 1, "verify_key": "9b5be1113eff13e3299fa68e15730f913ff276c13b9633eb8cc165fbc1729c6b"}, {"description": "", "developers": [{"id": "521816521249521702", "name": "Paradox Interactive AB"}], "flags": 0, "hook": true, "icon": null, "id": "492159419837186053", "name": "Europa Universalis II", "primary_sku_id": "492386332124119040", "publishers": [{"id": "521816739726622745", "name": "Virtual Programming Ltd."}], "slug": "europa-universalis-ii", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492386332124119040", "sku": "492386332124119040"}], "type": 1, "verify_key": "99350eb9de915c98daed6bf4928976aa6f64574700bb1b991901d29546b1dc36"}, {"description": "Ring Of Elysium", "executables": [{"is_launcher": false, "name": "ring of elysium/europa_client.exe", "os": "win32"}], "flags": 0, "guild_id": "487271370405707777", "hook": true, "icon": "5d648cef11e3cbf07007fa13d05f3748", "id": "492159553966702592", "name": "Ring of Elysium", "publishers": [{"id": "521816504392482820", "name": "Tencent Games"}], "splash": "4e67b810734668303fbd02712c76d368", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "755790", "sku": "755790"}], "type": 1, "verify_key": "673c76782093f66a62e071b6ac3f6189f2567eeab4f945a84e78c5bb72f36d14"}, {"description": "", "executables": [{"is_launcher": false, "name": "victoria.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "42aaf395b85247299ff951ae3b8d453b", "id": "492161312730775553", "name": "Victoria I", "primary_sku_id": "492390457381224450", "publishers": [{"id": "521816527918333962", "name": "Paradox Interactive"}], "slug": "victoria-i", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492390457381224450", "sku": "492390457381224450"}], "type": 1, "verify_key": "c2bbdfff656b732ecd3b5f7a66fb5e7959fd29b634e05b5d093cff52d9a92713"}, {"description": "", "developers": [{"id": "521816522977574923", "name": "LucasArts Entertainment Company LLC"}], "executables": [{"is_launcher": false, "name": "indiana jones and the fate of atlantis.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "bf08ae533801796e8482775005ee248b", "id": "492162663976140810", "name": "Indiana Jones\u00ae and the Fate of Atlantis\u2122", "primary_sku_id": "492391636467318813", "publishers": [{"id": "570702595178627072", "name": "Lucasfilm, Disney"}], "slug": "indiana-jones-r-and-the-fate-of-atlantis-tm", "splash": "fbe37e22ecc3b1b889e31b900570ae90", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492391636467318813", "sku": "492391636467318813"}, {"distributor": "steam", "id": "6010", "sku": "6010"}], "type": 1, "verify_key": "2cae375e2188b2e02e0d4a789f3fbe46624442a49a1beec5a9831301d620d11e"}, {"description": "", "developers": [{"id": "521816522977574923", "name": "LucasArts Entertainment Company LLC"}], "executables": [{"is_launcher": false, "name": "monkey2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "37bf42807e648a451c0db6bed0d73513", "id": "492164341840347156", "name": "Monkey Island\u2122 2 Special Edition: LeChuck's Revenge\u2122", "primary_sku_id": "492393482980163584", "publishers": [{"id": "570702595178627072", "name": "Lucasfilm, Disney"}], "slug": "monkey-island-tm-2-special-edition-lechuck-s-revenge-tm", "splash": "e8b231de296f73db40fca56b028c925c", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "492393482980163584", "sku": "492393482980163584"}, {"distributor": "steam", "id": "32460", "sku": "32460"}], "type": 1, "verify_key": "b2dfa1645e2ba6d84d0575bf9906f7d7be01ef223326113f9df196c46c83740f"}, {"description": "Travel across Europe in a variety of trucks, picking up and delivering cargo in SCS Software's latest game.", "developers": [{"id": "521816662261891072", "name": "SCS Software"}], "executables": [{"is_launcher": false, "name": "eurotrucks.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e7196942c7d47b6b21da1c404bcf6e0e", "id": "492695172967301120", "name": "Euro Truck Simulator", "publishers": [{"id": "521816556175491083", "name": "rondomedia Marketing & Vertriebs GmbH"}], "splash": "202be5ab3de8e2090d2b8dbf6e26a6af", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "232010", "sku": "232010"}], "type": 1, "verify_key": "9533ac6ee970bced1f891443d420cfb992d006c7516d6b8b2883578fee9f8641"}, {"cover_image": "2319011df03e3e55d4670ce7fb518be0", "description": "Build a civilization that will stand the test of time in the largest space-based strategy game ever! Choose from dozens of unique races and make a name for yourself across the galaxy through diplomacy, espionage, technological advances, and more.", "developers": [{"id": "521816531831750658", "name": "Stardock Entertainment"}], "executables": [{"is_launcher": false, "name": "galciv3.exe", "os": "win32"}], "flags": 0, "guild_id": "299942486095167489", "hook": true, "icon": "fdca7d88578870e5b48cb46c90f338cb", "id": "492772865175715850", "name": "Galactic Civilizations III", "primary_sku_id": "498203870363910145", "publishers": [{"id": "521816531831750658", "name": "Stardock Entertainment"}], "slug": "galactic-civilizations-iii", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "498203870363910145", "sku": "498203870363910145"}], "type": 1, "verify_key": "b298fc07d21675c142585cbd842a00de3a1c7d67b6740cd9eb39e12d04e37755"}, {"description": "As the earliest known standalone game dedicated to the \"battle royale\" sub-genre, The Culling takes place in a dystopian game show where up to sixteen players scavenge an arena and fight to the death.", "developers": [{"id": "521816681681518593", "name": "Xaviant LLC"}], "executables": [{"is_launcher": false, "name": "theculling/victory/binaries/win64/victory.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5de948b07e6fc402374cf11e62359670", "id": "493430961313415188", "name": "The Culling", "publishers": [{"id": "521816681681518593", "name": "Xaviant LLC"}, {"id": "521816784161079298", "name": "Xaviant"}], "splash": "1c90408101a9a9ada5d843fe6115d942", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "437220", "sku": "437220"}], "type": 1, "verify_key": "842948111d00fd2458cab3e2ee8846bdf736b9d4f1674608bf941ede56b3717b"}, {"description": "More RPG makin' fun for the PC.", "developers": [{"id": "521816515989733376", "name": "Enterbrain, Inc."}], "executables": [{"is_launcher": false, "name": "rpgvxace.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "bb6f2354897a245a029b1b588e99eaf6", "id": "493490198580035604", "name": "RPG Maker VX Ace", "publishers": [{"id": "521816751038791690", "name": "Kadokawa Games"}], "splash": "a6e5609dee7a369e4b2e3c91f568dc19", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "220700", "sku": "220700"}], "type": 1, "verify_key": "bb3fdd9a5f51b1751d02fa10c26c776e353ab8e6dd097e502d12d049ca788a05"}, {"description": "The Wild Eight is a multiplayer survival game set in the snow forests of Alaska. It is set to release for Windows and Xbox One", "developers": [{"id": "521816499019841598", "name": "8 Points"}], "executables": [{"is_launcher": false, "name": "wildeight.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5949d896ddd1bf165199a58b133498ea", "id": "493827668991803402", "name": "The Wild Eight", "publishers": [{"id": "521816499019841595", "name": "HypeTrain Digital"}], "splash": "06fa5fdfe0d9c3fc1f56cb8383cedf9a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "526160", "sku": "526160"}], "type": 1, "verify_key": "20fa300de21340425d74eb098ca76a7111f80bb55741382304dc94bf5703c57c"}, {"bot_public": true, "bot_require_code_grant": false, "description": "Warframe Test", "flags": 0, "hook": true, "icon": null, "id": "494178385807933445", "name": "Warframe Test", "primary_sku_id": "499571165988126730", "slug": "warframe-test", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "499571165988126730", "sku": "499571165988126730"}], "type": 1, "verify_key": "bf6c4d75e50fba5392a821e632b5de7830c412ff2e66a036a77fe955ff60b110"}, {"description": "Planetbase is a strategy game where players guide a group of space settlers trying to establish an outpost on a remote planet.", "developers": [{"id": "521816794722205696", "name": "Madruga Works"}], "executables": [{"is_launcher": false, "name": "planetbase.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a92bfaebac8237a254eebeedf0b0f301", "id": "494228479898812416", "name": "Planetbase", "publishers": [{"id": "521816794722205696", "name": "Madruga Works"}], "splash": "4095fb02a60b752f1c13156d48c2947a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "403190", "sku": "403190"}], "type": 1, "verify_key": "757b6aeb38d558e3345f85cb0a38d83c016461e9ff957528e2a5ad7dd94b643d"}, {"aliases": ["Alien Vs Predator"], "description": "The third game in the popular AvP franchise. Players are be able to control one of the three deadly species in a fight for survival.", "developers": [{"id": "521816698534494221", "name": "Rebellion"}], "executables": [{"is_launcher": false, "name": "avp3.exe", "os": "win32"}, {"is_launcher": false, "name": "avp_dx11.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5ce7895f085671f62f25179cc11dc191", "id": "494240845378355220", "name": "Aliens vs. Predator", "publishers": [{"id": "521816507676885010", "name": "Sega"}], "splash": "a9867c276a0f485f6d369cd76c2e674f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "10680", "sku": "10680"}], "type": 1, "verify_key": "b1d03f951917b629f369451c294e9282a4952cf89cdef67ba92826ac9dfd0dd2"}, {"description": "", "executables": [{"is_launcher": false, "name": "blazblue centralfiction/bbcf.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e6a526a05410f559924b4a4886f2e164", "id": "494341815940415488", "name": "BlazBlue Centralfiction", "publishers": [{"id": "521816599095934983", "name": "Arc System Works"}], "splash": "abb9e3e68563fb470c5f29d48869e20e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "586140", "sku": "586140"}], "type": 1, "verify_key": "52d3bf6716a8ed80ff2e9ed0e15394454f1f16259d5910ec060a436a4fe91611"}, {"description": "Blacklight: Retribution is a free to play first person shooter for the PC and PS4 developed by Zombie Studios.", "developers": [{"id": "521816691034816523", "name": "Zombie Studios"}], "executables": [{"is_launcher": false, "name": "foxgame-win32-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ec5ae322666d0be61f3024d74d7b387b", "id": "495079795252527104", "name": "Blacklight: Retribution", "publishers": [{"id": "521816509673242636", "name": "Perfect World Entertainment"}], "splash": "e57d63aa7724f4a8c79e4c7c6ce7fde9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "209870", "sku": "209870"}], "type": 1, "verify_key": "668eb1fadc024acffee684be269196b8b68a5a4b21b70f5243426dd3fb7c3d4b"}, {"aliases": ["20XX"], "cover_image": "21459c465c69ea00f47c9510c684126e", "description": "If you like roguelikes or Mega Man, 20XX is for you!\n", "developers": [{"id": "521816712778350617", "name": "Batterystaple Games"}], "executables": [{"is_launcher": false, "name": "20xx.exe", "os": "win32"}], "flags": 0, "guild_id": "200409490800115712", "hook": true, "icon": "22a9e0b7c5c84a1cc04adb400979a7bd", "id": "495310509382565890", "name": "20XX", "primary_sku_id": "496732534898425866", "publishers": [{"id": "521816712778350615", "name": "Fire Hose Games"}], "slug": "20xx", "splash": "68f9ee115731446b31062f98f9ad760b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "322110", "sku": "322110"}, {"distributor": "discord", "id": "496732534898425866", "sku": "496732534898425866"}], "type": 1, "verify_key": "128aec1ed52b8f8b869cfd8518740fb9a19cd8d6be24e83e9e43a98cd6082cc6"}, {"description": "Ten years after the events of Chaos Rising, sub-sector Aurelia is still engulfed in all out war. In this third installment of Dawn of War II, you decide the victor!", "developers": [{"id": "521816593798397970", "name": "Relic Entertainment"}], "executables": [{"is_launcher": false, "name": "dow2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e4cfcbc0ac64c33ce24c5833843c9057", "id": "495651148242616330", "name": "Warhammer 40,000: Dawn of War II - Retribution", "publishers": [{"id": "521816550596935692", "name": "THQ"}], "splash": "8cb830fc4f6a28ca40678d749bd01aea", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "56400", "sku": "56400"}], "type": 1, "verify_key": "d251b22a4b56294248c55cd0f73e2d21053edc23fa3cdf16502a36ff8684790b"}, {"description": "The official stand-alone sequel to the first popular competitive tower defense mod for Warcraft III.", "developers": [{"id": "521816621271220234", "name": "AutoAttack Games"}], "executables": [{"is_launcher": false, "name": "legion td 2.exe", "os": "win32"}], "flags": 0, "guild_id": "159363816570880012", "hook": true, "icon": "825848cc91c0e1a8bc2c9a8e5852b5a0", "id": "495691276159549460", "name": "Legion TD 2", "publishers": [{"id": "521816621271220234", "name": "AutoAttack Games"}], "splash": "46456f3e6db86807660bbd11e662b8b2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "469600", "sku": "469600"}], "type": 1, "verify_key": "8fcefe9464e85555c98698f97cc804173b7ccdf1323d26e8628de206a2d649f0"}, {"description": "Coloring Pixels is a pixel based coloring by numbers game where the player colors in pixel art images from predefined pallet.", "developers": [{"id": "521816711532511251", "name": " ToastieLabs"}], "executables": [{"is_launcher": false, "name": "coloringpixels.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d010eaa746c29af8da104fc3c538ef05", "id": "495871643432910848", "name": "Coloring Pixels", "publishers": [{"id": "521816711532511251", "name": " ToastieLabs"}], "splash": "4f08d071b23e4dc8dd7a79aabaaa969b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "897330", "sku": "897330"}], "type": 1, "verify_key": "26ee230b7a708a311585ba71764fd890e342010f1353dc8b65e06c39449aff57"}, {"description": "Art of War: Red Tides is a MOBA meets RTS. Its beta just released on Steam.", "executables": [{"is_launcher": false, "name": "artofwar/game/u1game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c1bc1c9be1aa1bb8fb5dacb44d786221", "id": "495889089703444481", "name": "Art of War: Red Tides", "publishers": [{"id": "521816673422934017", "name": "Game Science"}], "splash": "336270c8bb9f447c9b7e73317dcbe9d2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "558100", "sku": "558100"}], "type": 1, "verify_key": "f879de65336c5d50872dce237a7f912e12c41574b1b87785615b0b21a55a7d2e"}, {"description": "Experience the battle royale thrill from above in this top-down, skillshot-based action game. Select one of several Champions, each with unique abilities and play styles, and leap into the fray from the back of a mighty dragon.", "developers": [{"id": "521816546499362828", "name": "Stunlock Studios"}], "executables": [{"is_launcher": false, "name": "battleriteroyale.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "77520e28c849e0b4ff370b9f05121b6d", "id": "495912170190667776", "name": "Battlerite Royale", "publishers": [{"id": "521816546499362828", "name": "Stunlock Studios"}], "splash": "8371722c61db304d4079c26b196488c4", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "879160", "sku": "879160"}], "type": 1, "verify_key": "3bed6658f5f94505636faba9efcd6a1600578e513c3b91a11c65e14e64fddb20"}, {"description": "Rogue Legacy is a genealogical rogue-\"LITE\" where anyone can be a hero. Each time you die, your child will succeed you. Every child is unique. One child might be colorblind, another might have vertigo-- they could even be a dwarf. But that's OK, because no one is perfect, and you don't have to be to succeed.", "developers": [{"id": "521816517071994890", "name": "Cellar Door Games"}], "executables": [{"is_launcher": false, "name": "roguelegacy.exe", "os": "win32"}], "flags": 0, "guild_id": "403607175638941706", "hook": true, "icon": "ad04c4f7ec687a536f574ead59935440", "id": "495979053371752481", "name": "Rogue Legacy", "primary_sku_id": "499249990728810496", "publishers": [{"id": "521816517071994890", "name": "Cellar Door Games"}], "slug": "rogue-legacy", "splash": "99aa74b9fec6a57eee56508f182e6784", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "241600", "sku": "241600"}, {"distributor": "discord", "id": "499249990728810496", "sku": "499249990728810496"}], "type": 1, "verify_key": "408a6021a459fcc4efdcf779ec0fbbeb1e7f8bd492663a9259b3aa439ddb1265"}, {"description": "Mist Survival", "developers": [{"id": "521816669211983873", "name": " Rati Wattanakornprasit"}], "executables": [{"is_launcher": false, "name": "mistsurv-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0c232cfe45483d82f4fa114d460808fb", "id": "496035345981243395", "name": "Mist Survival", "publishers": [{"id": "521816669211983872", "name": "Rati Wattanakornprasit"}], "splash": "607ef709ac562e17cd41f4fad6603f18", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "914620", "sku": "914620"}], "type": 1, "verify_key": "518769d3a6935568dd8a40126f2bd60619b9983514af9745c492d5f5e86dec5e"}, {"description": "", "executables": [{"is_launcher": false, "name": "rememberinghowwemet.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "47832feb5e0fee06d7de865160394661", "id": "496521775161671734", "name": "A Kiss For The Petals - Remembering How We Met", "publishers": [{"id": "521816733200416779", "name": "St. Michael's Girls School"}], "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "397270", "sku": "397270"}], "type": 1, "verify_key": "5e805ca0d86595c7eb5961819ead2a7e2c7c8d71c1fa72033499f156f65b9f1e"}, {"aliases": ["A Sky Full Of Stars"], "description": "A Sky Full of Stars", "executables": [{"is_launcher": false, "name": "a sky full of stars/advhd.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c3946397f5736e7dbe2057bee4c1411f", "id": "496523213778583553", "name": "A Sky Full of Stars", "publishers": [{"id": "521816612626497537", "name": "MoeNovel"}], "splash": "95210737581aacf69d078312c0e4f84a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "745960", "sku": "745960"}], "type": 1, "verify_key": "7e2b127712ee8d8bf2dcdc259a5e3ae71ac165eaa79608ceb16cc9866d9d1e65"}, {"aliases": ["A Study In Steampunk: Choice By Gaslight"], "description": "Set in an alternate steampunk London, players take the role of a once army medic who now accompanies a Sherlockian freelance investigator. Half-RPG and Half-interactive novel, players guide the story to outwit criminals, enemy spies, and more occult elements in this iOS game.", "developers": [{"id": "521816692511211521", "name": "Hosted Games"}], "executables": [{"is_launcher": false, "name": "studyinsteampunk.exe", "os": "win32"}, {"is_launcher": false, "name": "a study in steampunk choice by gaslight.app", "os": "darwin"}], "flags": 0, "hook": true, "icon": "3610e66ffe4a1a459a455a735b46bc78", "id": "496524367962832918", "name": "A Study in Steampunk: Choice by Gaslight", "publishers": [{"id": "521816692511211521", "name": "Hosted Games"}], "splash": "5c67a4b80b3dd23ecd00394fc9b8bf4e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "421630", "sku": "421630"}], "type": 1, "verify_key": "c618e58b84051d1a4c0ef8593b4335fef219c1a7f8d200476a82bf0e5d15db6d"}, {"description": "A racing game that pits would-be action figure Action Henk against various other toys in peril-filled obstacle races to prove himself the best.", "developers": [{"id": "521816688073637898", "name": "RageSquid"}], "executables": [{"is_launcher": false, "name": "actionhenk.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d6cda8d57bfc7fbf9f7a2ff7a4a9199f", "id": "496524555360403476", "name": "Action Henk", "publishers": [{"id": "521816552501411877", "name": "Curve Digital Entertainment"}, {"id": "521816688073637898", "name": "RageSquid"}], "splash": "1905f03b569af175a918050d052323cd", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "285820", "sku": "285820"}], "type": 1, "verify_key": "4de89da059d2c04fff47148e1116c554c90f084fb73f62fe4d1c59b9ae031e76"}, {"description": "Aeon Rivals", "developers": [{"id": "521816728213258256", "name": "OneWeakness"}], "executables": [{"is_launcher": false, "name": "aeon rivals.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "85a273b92e749d751eecd32c87cceb68", "id": "496524827050508316", "name": "Aeon Rivals", "publishers": [{"id": "521816728213258254", "name": "UNKNOWN"}], "summary": "", "type": 1, "verify_key": "4cf3125ff243e09f0b8b32597950dd2549e3e76d8876f9adfa34a08d9e3b4138"}, {"description": "Rise of the Godslayer is a new expansion for the massively multiplayer online role playing Age Of Conan.\n\nIt will feature a new race called the Khitai, which is a Asian like race from the original Conan books, and also tons of new content for the lower levels around 20 ", "developers": [{"id": "521816542258790405", "name": "Funcom Productions A/S"}], "executables": [{"is_launcher": false, "name": "ageofconandx10.exe", "os": "win32"}, {"is_launcher": false, "name": "ageofconan.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "24699459598d9dda3b5f900817fded92", "id": "496525141467987991", "name": "Age of Conan", "summary": "", "type": 1, "verify_key": "fcabee0c2cdac40b61c7f5d8a7e7835867b3cc35b3bc1a1b3c73a61d3ce8f9cb"}, {"description": "An innovative, 2D 4X-like massive space RTS that adds a new twist to the RTS formula. It has had continual development and refinement since its release in 2009.", "developers": [{"id": "521816506607206430", "name": "Arcen Games"}], "executables": [{"is_launcher": false, "name": "aiwar.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "00b72933a814dc6878ca8d17aea038b4", "id": "496525786468319232", "name": "AI War: Fleet Command", "publishers": [{"id": "521816506607206430", "name": "Arcen Games"}, {"id": "521816506607206435", "name": "Arcen Games, LLC"}], "splash": "be068af55dccd72a8e7c1aec94942ca1", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "40400", "sku": "40400"}], "type": 1, "verify_key": "f89650ccde63e0f76cc70cc72103d99998e461ac2fd78a8a52445a511167f8f8"}, {"description": "When Alan Wake's twisted doppelganger, Mr. Scratch, unleashes his forces of darkness throughout the rural Arizona town of Night Springs, it's up to Alan to rewrite reality and foil his plans (unaware that he has a twisted trick up his sleeve) in this crazy spin-off of the original 2010 horror game Alan Wake.", "developers": [{"id": "521816609518518282", "name": "Remedy Entertainment Ltd."}], "executables": [{"is_launcher": false, "name": "alan_wakes_american_nightmare.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c0a7831c1cbc1807cc7b81d4f81f3f21", "id": "496526142673649724", "name": "Alan Wake's American Nightmare", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}, {"id": "521816635749695508", "name": "Remedy Entertainment"}, {"id": "521816519768932352", "name": "R.G. Mechanics, spider91"}], "splash": "d1271f6926f7679bb535e50059f1e686", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "202750", "sku": "202750"}], "type": 1, "verify_key": "e28f6ffd4df4c6e79e4a8b6eef578d995068360cdaf32c82466ef5c4621e9db8"}, {"description": "A cross-platform MMO in development by Sandbox Interactive.", "executables": [{"is_launcher": false, "name": "albion-online.exe", "os": "win32"}, {"is_launcher": false, "name": "albion-online.app", "os": "darwin"}], "flags": 0, "guild_id": "105651127692881920", "hook": true, "icon": "d02f9a9e52c633a16ca27750eaa08553", "id": "496526645671231488", "name": "Albion Online", "overlay": true, "publishers": [{"id": "521816582570377228", "name": "Sandbox Interactive GmbH"}], "splash": "0f4827eb7b5f91bec7471f461d4abb0f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "761890", "sku": "761890"}], "type": 1, "verify_key": "e448b024b247df37fb9c119973197d8c3f9b39debcfdbf4d2eced23a0d07e304"}, {"description": "Alien Breed 2: Assault is a follow up to the isometric alien shooter, Alien Breed: Evolution.", "developers": [{"id": "521816571103019015", "name": "Team17 Software Limited"}], "executables": [{"is_launcher": false, "name": "alienbreed2assault.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1cd3eab7dc58977a7ec819ce70e88ec0", "id": "496527138141503538", "name": "Alien Breed 2: Assault", "publishers": [{"id": "521816610600779776", "name": "Team17 Digital Ltd"}, {"id": "521816571103019015", "name": "Team17 Software Limited"}], "splash": "b54ab3c1b40a3e9ca578b837b3c2af0c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "22650", "sku": "22650"}], "type": 1, "verify_key": "29f8828dc640adb63fb4f29a51448d95193f49e0ae47b447f9758f9fd890fabf"}, {"description": "Altitude is a multiplayer 2D aerial combat game developed and published by Nimbly Games featuring a cartoony art style, unlockable planes, and perks.", "developers": [{"id": "521816672781336576", "name": "Nimbly Games"}], "executables": [{"is_launcher": false, "name": "altitude.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "459c743065ef14f73c9d980cdb133270", "id": "496529186064826368", "name": "Altitude", "publishers": [{"id": "521816672781336576", "name": "Nimbly Games"}], "splash": "108ea4ac99d3ed5dcc2d0d5b8b3406ba", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "41300", "sku": "41300"}], "type": 1, "verify_key": "2765bd2212fc72351f68ca6efec358765b6496f1b67d6a6baf134666ae904e01"}, {"description": "Anarchy Online is a MMORPG that takes place 30,000 years in the future on a planet called Rubi-Ka. The game has multiple professions and breeds to choose from. The world is very large with thousands of players.", "developers": [{"id": "521816542258790405", "name": "Funcom Productions A/S"}], "executables": [{"is_launcher": false, "name": "anarchy.exe", "os": "win32"}, {"is_launcher": false, "name": "anarchyonline.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3e772df73e62ea27e61c4b1abf4a5ae9", "id": "496529322039836681", "name": "Anarchy Online", "publishers": [{"id": "521816606318264330", "name": "Funcom"}, {"id": "521816542258790405", "name": "Funcom Productions A/S"}], "splash": "23dfafa8fdf00fbb069fbac8118865fa", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "396280", "sku": "396280"}], "type": 1, "verify_key": "ca2f082cd2214d7b5d382edf47ab4006d01959f152c00327bb379706e6839757"}, {"aliases": ["Anno 1404"], "description": "Known as Dawn of Discovery in North America, Anno 1404 is the fourth game in popular city management series.", "developers": [{"id": "521816672781336590", "name": "Blue Byte - studio Mainz"}], "executables": [{"is_launcher": false, "name": "anno4.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f108a7015638d0a00640fa712b0f5664", "id": "496530041895911429", "name": "ANNO 1404", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}, {"id": "521816672781336584", "name": "Blue Byte"}, {"id": "521816510730338325", "name": "Ubisoft"}], "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "33250", "sku": "33250"}, {"distributor": "uplay", "id": "89", "sku": "89"}], "type": 1, "verify_key": "c3164c96aae483425203d65bb82a56778ddca6d60e6fffee206b3aa780db8785"}, {"aliases": ["ANNO 2205"], "description": "Latest title in the Anno franchise.", "developers": [{"id": "521816672781336590", "name": "Blue Byte - studio Mainz"}], "executables": [{"is_launcher": false, "name": "anno2205.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7b0669639eaa411f686d525789bacfa5", "id": "496530253905264659", "name": "Anno 2205", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}, {"id": "521816672781336584", "name": "Blue Byte"}, {"id": "521816510730338325", "name": "Ubisoft"}], "splash": "ab7839edb535266a9c54ce394d8e5062", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "375910", "sku": "375910"}, {"distributor": "uplay", "id": null, "sku": null}, {"distributor": "uplay", "id": "1253", "sku": "1253"}], "type": 1, "verify_key": "663d74389a0bbf2ad8519ae7d169be0e53b7d7a657c13e4ae09a0279d4e713c4"}, {"description": "A first-person exploration/puzzle game set within a boldly-colored world with a focus on non-euclidean geometry and optical illusions.", "developers": [{"id": "521816519332855822", "name": "Demruth"}], "executables": [{"is_launcher": false, "name": "antichamber/binaries/win32/udk.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "dd21a2e4c95a5355c861dd4d1b9bfd64", "id": "496532716099993623", "name": "Antichamber", "publishers": [{"id": "521816519332855820", "name": "Alexander Bruce"}, {"id": "521816519332855821", "name": "Epic Games, Inc."}, {"id": "521816519332855822", "name": "Demruth"}, {"id": "521816519768932352", "name": "R.G. Mechanics, spider91"}], "splash": "50b91b24eb2d54071bc0f30645dd3375", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "219890", "sku": "219890"}], "type": 1, "verify_key": "558c0830baabb9dddc8be4da29e7304050e992c423a0f261d62e771e8bc7b216"}, {"description": "3D Indie PVE Space MMO where players focus on exploring procedurally generated solar systems, space combat, mining, and trading.", "developers": [{"id": "521816517071994892", "name": "Fluffy Kitten Studios"}], "executables": [{"is_launcher": false, "name": "thespacegame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "000815c454545893303b432efd5109be", "id": "496533328833544227", "name": "Ascent - The Space Game", "publishers": [{"id": "521816517071994892", "name": "Fluffy Kitten Studios"}], "splash": "a8ebd10e6f9a44ec574d324a44b21988", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "345010", "sku": "345010"}], "type": 1, "verify_key": "9b0720681869f92b66670117e7cf24407652f448b2dce87bdd211fbe06a1f2ec"}, {"description": "Indie twin stick arena shooter with 4 player co-op.", "developers": [{"id": "521816640808026112", "name": "Witch Beam"}], "executables": [{"is_launcher": false, "name": "assault android cactus/cactus.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a03aff7af94f080ccd541feb9af23d17", "id": "496533560228970514", "name": "Assault Android Cactus", "publishers": [{"id": "521816640808026112", "name": "Witch Beam"}], "splash": "50e4d141185a495ee135ede710b98464", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "250110", "sku": "250110"}], "type": 1, "verify_key": "df3b52910a964b7ee9bc1f818b43c7f7ec08cd7ca041b0bbe8d40885b118b138"}, {"description": "A Bullet Hell Shoot 'Em Up released by the Japanese indie developer Edelweiss.", "developers": [{"id": "521816680276426759", "name": "Edelweiss"}], "executables": [{"is_launcher": false, "name": "astebreed.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fe0de2f98a753f3b57e94e708973093b", "id": "496533728932134922", "name": "Astebreed", "publishers": [{"id": "521816680276426759", "name": "Edelweiss"}, {"id": "521816561216913409", "name": "AGM Playism"}], "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "283680", "sku": "283680"}], "type": 1, "verify_key": "396fe16b9dc2e07741f7170474c95c3b7acb0f508bcd2547a4495c6e4747fda1"}, {"description": "A sidescrolling action-adventure that takes inspiration from Super Metroid and other \"Metroidvania\" games. The player controls Trace, a scientist who finds himself in a strange, foreign world.", "developers": [{"id": "521816518409977858", "name": "Thomas Happ Games, LLC"}], "executables": [{"is_launcher": false, "name": "axiomverge.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1d1c6a9fa6827ae44aaec8630f829b2c", "id": "496534151642742804", "name": "Axiom Verge", "publishers": [{"id": "521816518409977857", "name": "Thomas Happ Games LLC"}, {"id": "521816518409977858", "name": "Thomas Happ Games, LLC"}], "splash": "c895e8d29828008834fe4af4c4e4577e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "332200", "sku": "332200"}], "type": 1, "verify_key": "8152c9f0afedcf6182e3952259584241f45564920b1884a2c3bacc23aedbd1ec"}, {"description": "The follow-up to the legendary cult classic that no one was expecting.", "developers": [{"id": "521816762904477707", "name": "Invent 4 Entertainment"}], "executables": [{"is_launcher": false, "name": "rats.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f069fdf9c3ec55f1b3e0f29e438d58c6", "id": "496534375740080128", "name": "Bad Rats", "publishers": [{"id": "521816762472202252", "name": "Invent4 Entertainment"}, {"id": "521816762904477706", "name": "Strategy First, Inc."}], "splash": "e14b6a5d7515582c77f0fd603ed857b6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "34900", "sku": "34900"}], "type": 1, "verify_key": "f17c9a3ed8e7c9bfb000430b54abfcb66fd0947a8777fbb4e9a96347e8e98ea5"}, {"description": "", "executables": [{"is_launcher": false, "name": "baremetal.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ed3f9b742bc684fe12d95fb4177d3d2d", "id": "496534611250118656", "name": "Bare Metal", "publishers": [{"id": "521816583115505696", "name": "Michael McCartney"}], "splash": "45d3506e9b05a437c09714bd517ceb62", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "674130", "sku": "674130"}], "type": 1, "verify_key": "f3840f22d3a288102d2206c5c44c1f877e193f9569e979e45d301b302e9c56c1"}, {"description": "Battle Squares is a competitive multiplayer online virtual board game.", "executables": [{"is_launcher": false, "name": "battlesquares.exe", "os": "win32"}], "flags": 0, "guild_id": "143159883095736320", "hook": true, "icon": "15566a6f8088ce238c5f7f7219c0526c", "id": "496534796424708124", "name": "Battle Squares", "publishers": [{"id": "521816553679749143", "name": "Caleb Chalmers"}], "splash": "31737c3042f4c536e6d33a2d978952fd", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "681990", "sku": "681990"}], "type": 1, "verify_key": "253f21064e376c1955122204022ccb5faa1ac429dba4aad8d9a8267a6654b555"}, {"description": "DICE's large-scale multiplayer shooter moves to the present day in this acclaimed sequel, whose online community has remained active for nearly a decade.", "developers": [{"id": "521816661788065794", "name": "DICE Canada"}], "executables": [{"is_launcher": false, "name": "bf2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "775cbed4b779a5dc8fe82e152bc9af28", "id": "496534962200248373", "name": "Battlefield 2", "publishers": [{"id": "521816575481872391", "name": "DICE"}, {"id": "521816499464306692", "name": "Electronic Arts"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "24860", "sku": "24860"}], "type": 1, "verify_key": "669754de23edc86fbda29afa34fed5fa3305798b7c9967bc72cf3f483783cbba"}, {"description": "Battlefield 2142 takes the popular Battlefield series into a futuristic ice age, complete with future-tech weapons and vehicles.", "developers": [{"id": "521816575481872391", "name": "DICE"}], "executables": [{"is_launcher": false, "name": "bf2142.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0f5e108cb52dfbdd62394f8c56024c61", "id": "496535501465976835", "name": "Battlefield 2142", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "summary": "", "type": 1, "verify_key": "d19e26586c53d48e185108d5517d0e31d10b188ea80388ea86f20058f96bc185"}, {"description": "Beat Hazard is a twin-stick shooter by a one-man development team. The beat of the music controls your shots, while the song itself supplies the layout of the level.", "developers": [{"id": "521816744659124246", "name": "Cold Beam Games"}], "executables": [{"is_launcher": false, "name": "beathazard.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "dcc25b38db62011c5363d8e84c086e1e", "id": "496535788427935764", "name": "Beat Hazard", "publishers": [{"id": "521816744659124246", "name": "Cold Beam Games"}], "splash": "fa1971ac8e0490c79ea84d8480d1b01e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "49600", "sku": "49600"}], "type": 1, "verify_key": "43b115a2b209d70f917b76b772a8ee44f77896b42cd9c4682f1e8574f2816e77"}, {"description": "The third main installment in the match-three franchise.", "developers": [{"id": "521816596633747478", "name": "PopCap Games, Inc."}], "executables": [{"is_launcher": false, "name": "bejeweled3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "83ec75a972ad122c3d08d0da3357c58e", "id": "496536236769542154", "name": "Bejeweled 3", "publishers": [{"id": "521816620339953704", "name": "PopCap Games"}, {"id": "521816620339953705", "name": "WildTangent"}, {"id": "521816596633747478", "name": "PopCap Games, Inc."}], "splash": "10882407a7ff5d11944d2c9335b77408", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "78000", "sku": "78000"}], "type": 1, "verify_key": "f30fec328ed9d9d6ddf39c76e7344d735ade7df3f59a27087aeb557f1bed7d5e"}, {"description": "A different take on the original Bejeweled where you can only play each round for 60 seconds and has a social element by including Facebook integration.", "developers": [{"id": "521816596633747478", "name": "PopCap Games, Inc."}], "executables": [{"is_launcher": false, "name": "bejblitz.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f5a38f4d3b46e567685ee4afe9b8aed2", "id": "496537107708248064", "name": "Bejeweled Blitz", "publishers": [{"id": "521816596633747478", "name": "PopCap Games, Inc."}], "summary": "", "type": 1, "verify_key": "4122838dede3c845fee27cc618b83247fa5998283f07062c2d354d04fed3f7eb"}, {"aliases": ["Blake Stone - Planet Strike"], "description": "The sequel to Blake Stone: Aliens of Gold has futuristic secret agent Blake Stone infiltrating an abandoned training facility on the planet Selon, where elusive mad scientist Dr. Goldfire is believed to be creating a dangerous mutant army in a final attempt to conquer humanity.", "developers": [{"id": "521816508167487495", "name": "JAM Productions"}], "executables": [{"is_launcher": false, "name": "blake stone - planet strike/dosbox/dosbox.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "193170d756434c1b2eb193f830d51e6e", "id": "496538565451317259", "name": "Blake Stone: Planet Strike", "publishers": [{"id": "521816508167487492", "name": "WizardWorks Software"}], "splash": "31bdd2927be8197652149ba8042152e1", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "358310", "sku": "358310"}], "type": 1, "verify_key": "a5d4c34401ebd6f44879ae50698c08a561bd6d6233a83f330214891e0164cde1"}, {"description": "Block Sport is developed by Hero Blocks ApS. It is a gladiatorial combat sports game, multiplayer online, team vs team battle to win by scoring the most goals.", "developers": [{"id": "521816502500982843", "name": "Hero Blocks ApS"}], "executables": [{"is_launcher": false, "name": "heroblocks.exe", "os": "win32"}, {"is_launcher": false, "name": "blocksport.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "197803de5edcd032ff5c1192c534d3bb", "id": "496538914673262596", "name": "Block Sport", "publishers": [{"id": "521816502500982843", "name": "Hero Blocks ApS"}], "splash": "6c4d87d195337e324cef9dbdfb9586c6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "611260", "sku": "611260"}], "type": 1, "verify_key": "259b79a99397f8b0523d2927eba0b6e9c32953910849e8bf8dfa1084a546636d"}, {"description": "Blockland is an indie game for Windows and Mac with a focus on building, user-created content, and a variety of game modes.", "executables": [{"is_launcher": false, "name": "blockland.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4dc83a90b92b41ba51eb74517a5262f6", "id": "496539095888035861", "name": "Blockland", "publishers": [{"id": "521816790083567634", "name": "Eric Hartman"}], "splash": "0c98f76923bf8b788b27ee11667a6980", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "250340", "sku": "250340"}], "type": 1, "verify_key": "06907ea2ee6b11242b3871b51e4c9bc9196fff6d6e94dd733ff98ec9ab60edef"}, {"description": "Bloodline Champions is a new free to play 10 player arena type PvP game that requires precise aiming and carefully thought out strategies. It is similar to DoTA but definitely a lot more skill based.", "developers": [{"id": "521816546499362828", "name": "Stunlock Studios"}], "executables": [{"is_launcher": false, "name": "bloodlinechampions.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5df32da1c02553d995ce9c54f7ebcd3e", "id": "496539230026334208", "name": "Bloodline Champions", "publishers": [{"id": "521816546499362828", "name": "Stunlock Studios"}, {"id": "521816542258790405", "name": "Funcom Productions A/S"}], "splash": "05f472ccb36ece579c04f44c9e7db38a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "6370", "sku": "6370"}], "type": 1, "verify_key": "c8b441af3a05281c2c3d56dfe3827176fce868079fed084b0893a3252e4aca68"}, {"description": "Boid is a real-time strategy game by Mokus Games.", "developers": [{"id": "521816723729416215", "name": "Mokus Games"}], "executables": [{"is_launcher": false, "name": "boid.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2df7fa601091a16c903fabb669079b45", "id": "496539411308216320", "name": "Boid", "publishers": [{"id": "521816723729416214", "name": "Mokus"}, {"id": "521816524952961034", "name": "tinyBuild"}], "splash": "7675b49816fde35fd81cac75560f64ef", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "314010", "sku": "314010"}], "type": 1, "verify_key": "ce9a98d6ffdf01a5e5a23b9e652b7ab9bc16bc408f8496bc746db5eaa0eb53d9"}, {"description": "Manipulate time to complete puzzles in this 2D platform game made by indie developer Jonathan Blow.", "developers": [{"id": "521816657581309953", "name": "Number None Inc"}], "executables": [{"is_launcher": false, "name": "braid.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e10c1ea094572b5670b2fb55c2a26a47", "id": "496540068442537984", "name": "Braid", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}, {"id": "521816657581309952", "name": "Number None"}], "splash": "707a228ac7469736a2a12db57457864d", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "26800", "sku": "26800"}], "type": 1, "verify_key": "f579dae355aa8bf4973b2c68ea8f05392ca43a807d4b39ca5ecc05c2041220d0"}, {"description": "Stylish, ludicrous kills net big points in this ridiculously over-the-top first-person shooter.", "developers": [{"id": "521816615457783829", "name": "People Can Fly"}], "executables": [{"is_launcher": false, "name": "shippingpc-stormgame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0771503b5d235c2f93b70faf32521daa", "id": "496540681913892864", "name": "Bulletstorm", "publishers": [{"id": "521816615457783818", "name": "Epic Games"}, {"id": "521816615457783823", "name": "R.G. Revenants"}, {"id": "521816615457783829", "name": "People Can Fly"}], "summary": "", "third_party_skus": [{"distributor": "origin", "id": null, "sku": null}, {"distributor": "steam", "id": "99810", "sku": "99810"}], "type": 1, "verify_key": "047fda953441c7b2e39dd5a8125c5c81a2b173960526b886dcd5e4a8b70a941f"}, {"description": "Continent of the Ninth Seal is a free-to-play MMORPG from Webzen.", "developers": [{"id": "521816522302423053", "name": "NHN Games Corporation"}], "executables": [{"is_launcher": false, "name": "c9/c9.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3ac0cbf50e8acfca2bba408215f18fc6", "id": "496543199209193488", "name": "C9", "publishers": [{"id": "521816587041505290", "name": "Webzen Games Inc."}, {"id": "521816587041505291", "name": "Cloud 9 Studio"}, {"id": "521816522302423054", "name": "GameOn"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "212390", "sku": "212390"}], "type": 1, "verify_key": "20ba43ceec24ab3f30d4c9b53b2fe5d752f62498693ef12ca6e46b9e343b6209"}, {"aliases": ["Cabal Online"], "description": "Cabal Online is a free massively-multiplayer online role-playing game (MMORPG), created by ESTsoft. There are six character classes in Cabal Online known as the Authentic Six.", "developers": [{"id": "521816665609207819", "name": "ESTsoft Corp"}], "executables": [{"is_launcher": false, "name": "cabalmain.exe", "os": "win32"}, {"is_launcher": false, "name": "cabal.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "21093efcaf975262356a83372ad072f4", "id": "496544716997918750", "name": "CABAL Online", "publishers": [{"id": "521816665168543757", "name": "ESTsoft Corp."}, {"id": "521816663214129153", "name": "Playpark"}, {"id": "521816665609207818", "name": "Asiasoft"}], "splash": "558c9cb0f46fcc7889afc0c1117eda56", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "253490", "sku": "253490"}], "type": 1, "verify_key": "a03997456922ed1eb9c44ee6a271f5c1526f06feeef251520d4710210ab23ade"}, {"aliases": ["Call Of Duty 2"], "description": "Infinity Ward's second and last foray into the World War II installments of the hit Call of Duty series brings another series of viewpoints of the war in Europe. It's credited as the first to introduce staple gameplay mechanics such as nearby grenade indicators and automatically-regenerating health.", "developers": [{"id": "521816501544550406", "name": "Infinity Ward"}], "executables": [{"is_launcher": false, "name": "cod2sp_s.exe", "os": "win32"}, {"is_launcher": false, "name": "cod2mp_s.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6582389fcf3ce280ce3d698add76a78c", "id": "496546499346432010", "name": "Call of Duty 2", "publishers": [{"id": "521816501544550404", "name": "Activision"}, {"id": "521816501544550406", "name": "Infinity Ward"}], "splash": "80fcf593f9997e7a1c8a236a990a7bce", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "2630", "sku": "2630"}], "type": 1, "verify_key": "3c02b677e2535a1f2adfb3d70dba64b91a3b8fb22351d4321dee40824755db7d"}, {"description": "Call of Juarez is a Western-themed first person shooter from Polish developer Techland and published by Ubisoft.", "developers": [{"id": "521816637956161558", "name": "Techland Sp. z o.o."}], "executables": [{"is_launcher": false, "name": "coj_dx10.exe", "os": "win32"}, {"is_launcher": false, "name": "coj.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3f1d38ede6b8edfc7194f7481d146fcf", "id": "496547399599390730", "name": "Call of Juarez", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}, {"id": "521816510730338325", "name": "Ubisoft"}, {"id": "521816514106621962", "name": "Techland"}], "splash": "cf3ced0e310b30fc85b86da02f63f3ce", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "3020", "sku": "3020"}], "type": 1, "verify_key": "e10a128e19c85a3d33cabb294c17d38b3a6990872d8a3e67bf3124cbfe7cd7f2"}, {"description": "A 2D sidescroller \"action platform\" roguelike game from small Netherlands developer Serious Brew, in which players jump and drill through cubic cargo containers in space as the eponymous Cargo Commander.", "developers": [{"id": "521816685502791734", "name": "Serious Brew"}], "executables": [{"is_launcher": false, "name": "cargocommander.exe", "os": "win32"}, {"is_launcher": false, "name": "cargocommander.app", "os": "darwin"}], "flags": 0, "hook": true, "icon": "ebe961e1ea44c7e894f17292f1757460", "id": "496547754680647690", "name": "Cargo Commander", "publishers": [{"id": "521816685502791732", "name": "Digital Tribe"}, {"id": "521816685502791734", "name": "Serious Brew"}], "splash": "b09a18e087e933db1110af4555797e4c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "220460", "sku": "220460"}], "type": 1, "verify_key": "140f164687bdc6d8f78de81a68e9fc67a90dea9d30141fc99b07c80a907ccb69"}, {"description": "", "executables": [{"is_launcher": false, "name": "chronicon.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "65809f3ddec0077667f7229a4edfd6cd", "id": "496548575061213184", "name": "Chronicon", "publishers": [{"id": "521816606901534724", "name": "Subworld"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "375480", "sku": "375480"}], "type": 1, "verify_key": "51df67481d5a353af43ec210c1dad577596c0f3fd7f88ae024ef957cda1b61ea"}, {"description": "Clannad is a visual novel developed by Key and released on April 2004 in Japan, first on the PC and later on the PS2 in 2006 and the PSP and Xbox 360 in 2008. With an acclaimed interactive narrative revolving around a family theme, it was adapted into an equally acclaimed anime series.", "developers": [{"id": "521816689004904468", "name": "Key"}], "executables": [{"is_launcher": false, "name": "clannad/realliveen.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "766537e08f6cc1bc45c786c6983d5d94", "id": "496550410685906954", "name": "CLANNAD", "publishers": [{"id": "521816632801361926", "name": "VisualArts/Key"}, {"id": "521816688547856415", "name": "Interchannel, Ltd."}], "splash": "13d4161a28095a12e52916b4adf38065", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "324160", "sku": "324160"}], "type": 1, "verify_key": "ea918647a47a6061d8164dcd35ff2c15fdb2f6d54ac6dc914ca917041d24a87f"}, {"description": "", "executables": [{"is_launcher": false, "name": "clannad side stories/realliveen.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d53bfaee601a50c4ab2f3144c2e29bcc", "id": "496550790572277770", "name": "CLANNAD Side Stories", "publishers": [{"id": "521816632801361926", "name": "VisualArts/Key"}], "splash": "9ede27281f86eea70786e0bf99929644", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "420100", "sku": "420100"}], "type": 1, "verify_key": "0377095c8138e462defaeee064071b0474c5992d1655542fd2c4a317b94039d0"}, {"description": "As Patrick Galloway, you must come to the aid of a dying friend whose family is cursed by an evil that threatens the entire world.", "developers": [{"id": "521816603671920660", "name": "DreamWorks Interactive L.L.C."}], "executables": [{"is_launcher": false, "name": "undying.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e56e0f78f3bcdb8fd050de6b3046848b", "id": "496552265977692181", "name": "Clive Barker's Undying", "publishers": [{"id": "521816504392482822", "name": "GOG.com"}, {"id": "521816511178997817", "name": "Aspyr Media, Inc."}], "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}], "type": 1, "verify_key": "7e36da8dc0cda86c7f28db5f81e55c3a5a99e647da5284c0df526cba2941b403"}, {"description": "", "developers": [{"id": "521816544385171489", "name": "RedWolf Design"}], "executables": [{"is_launcher": false, "name": "clonk.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "295f46ab97078a31f7a4cf2cc68045a0", "id": "496552591111618565", "name": "Clonk Rage", "publishers": [{"id": "521816544385171488", "name": "RedWolf Design GmbH"}, {"id": "521816544385171489", "name": "RedWolf Design"}], "summary": "", "type": 1, "verify_key": "3c8e2fc247be61694fcc3e3de925c0e861e006778b419dfb037917838dda7064"}, {"description": "A cel-shaded parkour-infused action platforming game set in the remains of mysterious floating ruins.", "developers": [{"id": "521816700153495556", "name": "Coilworks"}], "executables": [{"is_launcher": false, "name": "cloudbuilt.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "42d15309ab9f6da911f777b8d257c145", "id": "496552729141837824", "name": "Cloudbuilt", "publishers": [{"id": "521816700153495556", "name": "Coilworks"}, {"id": "521816519332855818", "name": "Rising Star Games"}], "splash": "9f01a92ac1e768812dfd62fa870722bf", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "262390", "sku": "262390"}], "type": 1, "verify_key": "8f84f9e5f337a6a9cd03baf1271c29fe0f30663aa6e4d4c35cf1a719230eed1b"}, {"description": "Combat Arms is free-to-play FPS created by Korean developer Nexon. The games attempts to implement themes popularized by mainstream franchises such as Call of Duty, Battlefield and Counter-Strike. ", "developers": [{"id": "521816511610880011", "name": "Nexon Corporation"}], "executables": [{"is_launcher": false, "name": "combatarms.exe", "os": "win32"}, {"is_launcher": false, "name": "combat arms/engine.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f7910f863d11b3f5aede3d7645bda857", "id": "496553014220554270", "name": "Combat Arms", "publishers": [{"id": "521816511610880011", "name": "Nexon Corporation"}], "summary": "", "type": 1, "verify_key": "f96f4f7f866060ebf360f54efc8febc55a137ea4b6346f0154f993e8b93e3a51"}, {"aliases": ["Command & Conquer 3: Kane's Wrath"], "description": "Kane's Wrath expands on the events before, during and after the events of Command & Conquer: Tiberium Wars with a new campaign, as well as the all-new Global Domination mode and a range of sub-factions and new units to fight with or against.", "developers": [{"id": "521816605223813131", "name": "EA Los Angeles"}], "executables": [{"is_launcher": false, "name": "cnc3ep1.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "835e1e821097d07fa250472a77eac610", "id": "496557233979654154", "name": "Command and Conquer 3: Kane's Wrath", "publishers": [{"id": "521816605223813131", "name": "EA Los Angeles"}, {"id": "521816605223813133", "name": "Electronic Arts Inc."}, {"id": "521816499464306692", "name": "Electronic Arts"}], "splash": "2c4d2dc9508058033b9d6ff0bdfa0fc6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "24810", "sku": "24810"}], "type": 1, "verify_key": "be173f919ddf66a0ba6837d4251900f3d019d6a788cb71c75b028b15f6b5029d"}, {"description": "This action packed strategy game lets you take control of Able Company on the shores of 1944 France, pushing the Nazis back into Germany.", "developers": [{"id": "521816593798397970", "name": "Relic Entertainment"}], "executables": [{"is_launcher": false, "name": "reliccoh.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b9bc0b1371f124a52ea8676574e4f480", "id": "496557687560077322", "name": "Company of Heroes", "publishers": [{"id": "521816593798397970", "name": "Relic Entertainment"}, {"id": "521816550596935692", "name": "THQ"}], "splash": "74ca943ad7545a493a64c71d62354002", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "228200", "sku": "228200"}], "type": 1, "verify_key": "6d07180f2b02b8e50b0fc4b6a4b503af9d6822f2c0f111ab21a8d75e901fc90b"}, {"description": "Touted as \"a hardcore restaurant sim\", this game will have you buying, preparing, and serving food to make your restaurant succeed.", "developers": [{"id": "521816627767934976", "name": "Vertigo Gaming Inc."}], "executables": [{"is_launcher": false, "name": "csdsteambuild.exe", "os": "win32"}, {"is_launcher": false, "name": "csdgogbuild.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "eda6211393a99262a6093d102dd91f64", "id": "496558661041127444", "name": "Cook, Serve, Delicious!", "publishers": [{"id": "521816627767934976", "name": "Vertigo Gaming Inc."}, {"id": "521816642762833922", "name": "Vertigo Gaming"}], "splash": "4d744ccf0a15788c846190f0fd7922ca", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "247020", "sku": "247020"}], "type": 1, "verify_key": "62c3da9bb58b9ec7b96eeb661241f488b4ced7cf7b2f7622182241f42303223f"}, {"description": "Golem Creation Kit", "executables": [{"is_launcher": false, "name": "creationkit.exe", "os": "win32"}, {"is_launcher": false, "name": "creationkit32.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a65db950956e2624efd9517c999370ec", "id": "496560355615703060", "name": "Creation Kit", "publishers": [{"id": "521816788997111808", "name": "bgs.bethsoft.com"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "202480", "sku": "202480"}], "type": 1, "verify_key": "584cc7d09a01e9a59356c7a845ac5db810d0204e25da3e77dfad695ec97d8a4b"}, {"description": "Creeper World 3 is a real-time strategy game where players must manage and contain the Creeper, a destructive miasma that behaves like a fluid.", "developers": [{"id": "521816577876951046", "name": "Knuckle Cracker"}], "executables": [{"is_launcher": false, "name": "cw3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4241d6e6ac254f8304b88b0754f032c9", "id": "496560583521468426", "name": "Creeper World 3: Arc Eternal", "publishers": [{"id": "521816577876951046", "name": "Knuckle Cracker"}], "splash": "74b5279b069e4039e5b112e52f14c706", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "280220", "sku": "280220"}], "type": 1, "verify_key": "cf4a158c40b2ec5b6cc18541f7c123e5aa938e76898aa3512737c9352253169e"}, {"description": "A top-down shooter where the goal is for players to defend themselves from waves upon waves of enemies, using an assortment of increasingly powerful weapons.", "developers": [{"id": "521816513561493527", "name": "10tons Ltd."}], "executables": [{"is_launcher": false, "name": "crimsonland.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "50501d50d85079413cbe0f67e41730e2", "id": "496561007888433152", "name": "Crimsonland", "publishers": [{"id": "521816513561493519", "name": "Reflexive Entertainment Inc."}, {"id": "521816513561493522", "name": "10 tons Entertainment"}, {"id": "521816513561493525", "name": "10tons Ltd"}], "splash": "278aa2310dd803a20ae7fd22a5e3baad", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "262830", "sku": "262830"}], "type": 1, "verify_key": "08c9458fddda445d64f28dc5e9f8f66c408b28650b97f5421bde3cc7027fff89"}, {"description": "Crowfall is a new Massively Multiplayer Online Game. It's about Time, Destruction and Power.", "developers": [{"id": "521816673855209495", "name": "ArtCraft Entertainment"}], "executables": [{"is_launcher": false, "name": "crowfallclient.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c74a6ccdc63b6ceb15c389db17848341", "id": "496561718668034078", "name": "Crowfall", "publishers": [{"id": "521816673855209494", "name": "Innova Co. SARL"}], "summary": "", "type": 1, "verify_key": "0e88003fae72fe2394bccc25ddcff8ec93ef9217a0326861d6b32ad2af6970e5"}, {"description": "Cryptark is a 2D sci-fi roguelike shooter from Alientrap. Players raid giant hulks to recover xenotech to fund their mercenary operation.", "developers": [{"id": "521816723729416212", "name": "Alientrap"}], "executables": [{"is_launcher": false, "name": "cryptark.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1ad880fa11a3d030a10df2af8d622400", "id": "496562135447502882", "name": "CRYPTARK", "publishers": [{"id": "521816723729416212", "name": "Alientrap"}], "splash": "afa6405cab1d517299c0e0132a4ae043", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "344740", "sku": "344740"}], "type": 1, "verify_key": "128ca262375cf2bfa593b63d49f1cb19cd69278e2452571f717b7be037e69973"}, {"aliases": ["CRYSIS"], "description": "As Nomad, an elite soldier outfitted in a state-of-the-art Nanosuit that gives him superhuman abilities, infiltrate a North Korean-held island to rescue captured scientists... and face a reawakening ancient evil that threatens the entire world. Crysis is well known for its high system requirements and top of the line graphics.", "developers": [{"id": "521816652262670336", "name": "Crytek GmbH"}], "executables": [{"is_launcher": false, "name": "crysis.exe", "os": "win32"}, {"is_launcher": false, "name": "crysis64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2b2cdc642b62a3a23dbdc33a9ab58fc9", "id": "496562734889041930", "name": "Crysis", "publishers": [{"id": "521816601691947041", "name": "Crytek"}, {"id": "521816499464306692", "name": "Electronic Arts"}], "splash": "855af9b7afb132d5c43f7858c7e4e530", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "17300", "sku": "17300"}], "type": 1, "verify_key": "31ea355ab5a5bfe97b13752343a26c1bcf8f9a37f988b742143e878fe483aaa5"}, {"description": "Set three years after the original Crysis, an ambushed Marine named Alcatraz dons the famous Nanosuit and fights his way through an obliterated New York City to stop the alien invasion.", "developers": [{"id": "521816652262670336", "name": "Crytek GmbH"}], "executables": [{"is_launcher": false, "name": "crysis2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1dd123bcbdb7f464dac000de1ec2f4eb", "id": "496564403345424431", "name": "Crysis 2", "publishers": [{"id": "521816786321014819", "name": "Crytek Studios"}, {"id": "521816499464306692", "name": "Electronic Arts"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "99830", "sku": "99830"}], "type": 1, "verify_key": "8b8116377006f6a8cd6f10d9a28e9de28c4ec0e170c08f9277095734bdca17e5"}, {"description": "A mysteriously resurrected Prophet fights his way through the now literal jungles of the fallen New York City, continuing the fight against the malevolent Ceph alien invaders.", "developers": [{"id": "521816652262670336", "name": "Crytek GmbH"}], "executables": [{"is_launcher": false, "name": "crysis3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2c99bd38db8860639ecacb981f3b9ede", "id": "496565168528949249", "name": "Crysis 3", "publishers": [{"id": "521816538202767363", "name": "EA Games"}], "summary": "", "type": 1, "verify_key": "3dd2a7b39857dcb632beb10a06384428f9141ae89be6f413251bc2b0f5566e23"}, {"description": "A Massively Multiplayer Action Online Battle Arena game created by Neople Entertainment.", "developers": [{"id": "521816517512265759", "name": "Neople"}], "executables": [{"is_launcher": false, "name": "cyphers.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "334909178b0fbe89b921e763afc589f6", "id": "496565866721443840", "name": "Cyphers", "overlay": true, "publishers": [{"id": "521816511610880011", "name": "Nexon Corporation"}], "summary": "", "type": 1, "verify_key": "49bf322547c9ffd9725aff7e223a5e7779e02376ce669cefe441bb49bcff20f4"}, {"aliases": ["Darkstar One"], "description": "Darkstar One is a space action-adventure with role-playing elements and an epic story.", "developers": [{"id": "521816742134284298", "name": "ASCARON Entertainment GmbH"}], "executables": [{"is_launcher": false, "name": "darkstarone.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9a59fc7cb0d42da14266dccb9feafb35", "id": "496566320213655552", "name": "DarkStar One", "publishers": [{"id": "521816601691947038", "name": "Akella"}, {"id": "521816742134284295", "name": "Ascaron Entertainment ltd."}], "splash": "58e7172f22a20412e96479de5cf854ae", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "12330", "sku": "12330"}], "type": 1, "verify_key": "9b2df1d0dd41883ffeae44815230915b37e4b1dd5430fdb486f77a5e87853eeb"}, {"description": "DCS World is a free-to-play military aircraft simulator.", "developers": [{"id": "521816631782014993", "name": "Eagle Dynamics"}], "executables": [{"is_launcher": false, "name": "dcs.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6ea8f740edf619e4b38423963915b86c", "id": "496568071713062928", "name": "DCS World", "publishers": [{"id": "521816631782014993", "name": "Eagle Dynamics"}, {"id": "521816632285200384", "name": "The Fighter Collection"}, {"id": "521816632285200385", "name": "Eagle Dynamics SA"}], "splash": "3bbb1812e110e3e12ebe8a837ffcd4e2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "223750", "sku": "223750"}], "type": 1, "verify_key": "c13421b19ead0a80d904a9d5cab698cc610c124ec31cb36de2e72662936baa0b"}, {"aliases": ["Dead Space\u2122 2"], "description": "Dead Space 2 is the sequel to the 2008 surprise hit Dead Space. The no-longer-silent Isaac Clarke finds himself trapped on a city-sized space station called the Sprawl, which has been overtaken by another Necromorph infestation.", "developers": [{"id": "521816624546709507", "name": "Visceral Games"}], "executables": [{"is_launcher": false, "name": "deadspace2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "82689558aeff0f9119d5ce0f7c0f3832", "id": "496568659276201984", "name": "Dead Space 2", "publishers": [{"id": "521816624546709507", "name": "Visceral Games"}, {"id": "521816499464306692", "name": "Electronic Arts"}], "splash": "f262015ea3a73054ea26e9a8fe206dea", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "47780", "sku": "47780"}], "type": 1, "verify_key": "2569ce5957270b8ee3bbdca1d3fb9ba0fac46ec1aacf1d15af557ce9bfe38274"}, {"description": "DeadCore is a first-person platforming game with an emphasis on movement. Players attempt to reach the top of a futuristic tower using their abilities and weapons to traverse environmental hazards and robotic enemies.", "developers": [{"id": "521816769078231040", "name": "5 Bits Games"}], "executables": [{"is_launcher": false, "name": "deadcore.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ef296867ebe535a633bd6140e484a7d8", "id": "496569001405841439", "name": "DeadCore", "publishers": [{"id": "521816537653444610", "name": "Bandai Namco Entertainment"}, {"id": "521816769078231040", "name": "5 Bits Games"}], "splash": "f0f0c2bce81cdda8aa17623859dd5d21", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "284460", "sku": "284460"}], "type": 1, "verify_key": "15e051dde46fb40e294f40ceeebaf77bdd24ea864e72a279304bcd3c0b0390eb"}, {"description": "A 'Bullet Hell' Shoot 'Em Up game.", "developers": [{"id": "521816666489749522", "name": "CAVE Co., Ltd."}], "executables": [{"is_launcher": false, "name": "deathsmiles/default.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "778e3e4bed169588c7a2a467ad384cf1", "id": "496569185237860359", "name": "Deathsmiles", "publishers": [{"id": "521816666489749521", "name": "Aksys Games"}], "splash": "8277124c3b67cca405c5d6b57b5b7f4b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "314180", "sku": "314180"}], "type": 1, "verify_key": "693c99afbafb0e1b4a56128b112eb95d1510b29e4e1dca4879cb17e3329f995c"}, {"aliases": ["Debugger 3.16: Hack'n'Run "], "description": "", "executables": [{"is_launcher": false, "name": "debugger 316/debugger.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f2f629d04f88b4798e971c292b40f551", "id": "496569333665759232", "name": "Debugger 3.16: Hack'n'Run", "publishers": [{"id": "521816529948639235", "name": "Spiderwork Games"}], "splash": "913c4bbb9d2899518d09557c7035d476", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "339720", "sku": "339720"}], "type": 1, "verify_key": "14f23fba53cbbe6b708bbd6b5769dc0c011b14f14ead208f772138459b53d4ea"}, {"description": "Sequel to the first Defense Grid game, released following a successful Kickstarter campaign.", "developers": [{"id": "521816567466688525", "name": "Hidden Path Entertainment"}], "executables": [{"is_launcher": false, "name": "defensegrid2_release.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ef97d82a0f7508bd155586432393753e", "id": "496569474670133258", "name": "Defense Grid 2", "publishers": [{"id": "521816567466688525", "name": "Hidden Path Entertainment"}], "splash": "b5664296e3d128b534dc3b81dc2ae57f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "221540", "sku": "221540"}], "type": 1, "verify_key": "765749daeae96a0f5dab1b9f3854d1d4182bc6876eadd3c28cd3b4048c9358db"}, {"description": "Depression Quest is an interactive fiction, choose-your-own-adventure style visual novel, dealing with depression in a realistic way.", "executables": [{"is_launcher": false, "name": "depressionquest.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3618a9ce86f15e3fc9961d02f0d52907", "id": "496569655679385603", "name": "Depression Quest", "publishers": [{"id": "521816797717069838", "name": "The Quinnspiracy"}], "splash": "4a0b6506c0838487a6303372aa5a270e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "270170", "sku": "270170"}], "type": 1, "verify_key": "427b1f43f4bfc13827868c51246d03a96c0ec963f4a1ba2cf07a57a75351a42a"}, {"description": "A wave-based survival FPS with a '90s fever dream' aesthetic.", "developers": [{"id": "521816659519078410", "name": "Sorath"}], "executables": [{"is_launcher": false, "name": "devildaggers/dd.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d30b9c2d0f30e9c9f5aa272b5b02cb25", "id": "496571420579463168", "name": "Devil Daggers", "publishers": [{"id": "521816659519078410", "name": "Sorath"}], "splash": "c795426d9f573af960fd4928aab7929d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "422970", "sku": "422970"}], "type": 1, "verify_key": "f90dc8fbce95d78b90958afedbd6ad55076e539abbbdedc2b669d36f8048bef5"}, {"description": "A Korean hack & slash multiplayer RPG.", "developers": [{"id": "521816680276426753", "name": "Bluehole Ginno Games"}], "executables": [{"is_launcher": false, "name": "devilian.exe", "os": "win32"}, {"is_launcher": false, "name": "devilian/glyphclientapp.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5cb467a2737d6f82a9de520d1348877a", "id": "496571728089317437", "name": "Devilian", "publishers": [{"id": "521816680276426753", "name": "Bluehole Ginno Games"}, {"id": "521816577876951040", "name": "Trion Worlds"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "407510", "sku": "407510"}], "type": 1, "verify_key": "cb96f8cef2523ef94ef478c8054f27211acf81a629f26a82351da79a8eeac85d"}, {"description": "An isometric strategy RPG that takes place in and below the town of Tristram. Gothic fantasy weapons and spells are used to defeat hordes of monsters from hell through randomized dungeon levels, continuously gaining experience points, gold, and a variety of equipment to bolster the hero's monster-killing potency along the way.", "developers": [{"id": "521816523430428673", "name": "Blizzard Entertainment"}], "executables": [{"is_launcher": false, "name": "diablo.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5530ebdc735e5ea2069458102d23b94d", "id": "496571953147150354", "name": "Diablo", "publishers": [{"id": "521816523430428673", "name": "Blizzard Entertainment"}], "summary": "", "type": 1, "verify_key": "3823a3f093a75f0b223179cf9feaad0b3338bece6b13585dc53273013d2c436a"}, {"aliases": ["Diablo 2"], "description": "The sequel to Blizzard's popular action-RPG features a larger and more varied world, new playable classes, and expanded skill trees. Even moreso than its predecessor, Diablo II would provide a blueprint followed by many later RPGs and action games.", "developers": [{"id": "521816523430428674", "name": "Blizzard North"}], "executables": [{"is_launcher": false, "name": "diablo ii.exe", "os": "win32"}, {"is_launcher": false, "name": "diablo ii/game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "38a7fa1313f656cfc7d300813934448e", "id": "496572658255790080", "name": "Diablo II", "publishers": [{"id": "521816523430428673", "name": "Blizzard Entertainment"}], "summary": "", "type": 1, "verify_key": "ce8a7b1af19196c3e87cb5e22e36eefb68373426f897ecf36f53bbbee18f1c17"}, {"description": "Diadra Empty is a free-roaming shoot-'em-up.", "executables": [{"is_launcher": false, "name": "diadraempty154plus.exe", "os": "win32"}, {"is_launcher": false, "name": "diadraempty.exe", "os": "win32"}, {"is_launcher": false, "name": "diadraempty154lw.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b212d99478b938b9d8b64eb90513fbc5", "id": "496573404002910227", "name": "Diadra Empty", "publishers": [{"id": "521816720046948394", "name": "Frozen Orb"}], "splash": "658469265f1e213d0db820740decbebd", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "284220", "sku": "284220"}], "type": 1, "verify_key": "b2f78c8c69c18c273430a81e168089471d04178d067b2d5b6c2a3445a2f063b7"}, {"description": "Dirt 3 is the latest installment in Codemasters' long-running Colin McRae Rally franchise. The game returns to the series' rally roots with dynamic weather, a career focusing on team-based racing, as well as introducing the freestyle event: Gymkhana.", "developers": [{"id": "521816499464306689", "name": "Codemasters Racing"}], "executables": [{"is_launcher": false, "name": "dirt3_game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4d9475147716080f034063bd62400589", "id": "496574120436432915", "name": "DiRT 3", "publishers": [{"id": "521816592208756748", "name": "Codemasters Racing Studio"}, {"id": "521816499464306688", "name": "Codemasters"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "44320", "sku": "44320"}], "type": 1, "verify_key": "8a31272e380e069a2c63e1bc28cb55ace266610de83474dd6d548c2b6a29dbe9"}, {"description": "Distance is a survival racing game that is the spiritual successor to Nitronic Rush. Players control a unique car that can boost, jump, rotate, and even fly.", "developers": [{"id": "521816642762833923", "name": "Refract Studios"}], "executables": [{"is_launcher": false, "name": "distance.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "03b2e3a9cf9c130b70430761a9545daa", "id": "496575580070871040", "name": "Distance", "publishers": [{"id": "521816642762833923", "name": "Refract Studios"}, {"id": "521816643245047838", "name": "Refract"}], "splash": "479cbb31fa7fb2ed79d4cb3e86fba450", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "233610", "sku": "233610"}], "type": 1, "verify_key": "1c3b684b0b2583cd4287cb1da4f0c98172babd28c5fa2c4fd7639f74554ca8ce"}, {"description": "Dominions 4 is a turn-based strategy war game. It is set in a fantasy world that draws inspiration from historical nations, cultures, and myths.", "developers": [{"id": "521816654091649035", "name": "Illwinter Game Design"}], "executables": [{"is_launcher": false, "name": "dominions4.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fc2f9b27e76fe0dbe49b4be9e7ffd8c0", "id": "496575805413916683", "name": "Dominions 4", "publishers": [{"id": "521816654091649035", "name": "Illwinter Game Design"}], "splash": "f1045956a9a49bd67141f2c1ab9ccf94", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "259060", "sku": "259060"}], "type": 1, "verify_key": "95b755db4cda9673dc0c2c035ec80e8a7fe321ebfc40a22e5f3de309f6597fc4"}, {"aliases": ["Doom 3"], "description": "Doom 3, a more story-focused remake of the original Doom, is a sci-fi first-person-shooter that was widely considered the most graphically advanced game available for its time.", "developers": [{"id": "521816563024920606", "name": "id Software"}], "executables": [{"is_launcher": false, "name": "doom.exe", "os": "win32"}, {"is_launcher": false, "name": "doom3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ca4a9e564217f19d041da4c63c77608d", "id": "496575943431946250", "name": "DOOM 3", "publishers": [{"id": "521816563024920606", "name": "id Software"}, {"id": "521816501544550404", "name": "Activision"}], "splash": "266fdc9619bb928b26eb2ae718e3c1b6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "9050", "sku": "9050"}], "type": 1, "verify_key": "3a6099cd48af01b7042ac3db496c9ae904932f663e1090190420c8c5926d83d9"}, {"description": "Journey back to the bodacious 80s in this long-awaited reboot of the Double Dragon beat 'em up series.", "developers": [{"id": "521816699574419457", "name": "WayForward Technologies"}], "executables": [{"is_launcher": false, "name": "doubledragon.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b2626e4fe72bb412d8a92d730a91e450", "id": "496576235934187539", "name": "Double Dragon Neon", "publishers": [{"id": "521816607408914447", "name": "Majesco Entertainment"}, {"id": "521816607408914448", "name": "WayForward"}], "splash": "5a83c1bfcb6fbeb47272ab4bfcac85ca", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "252350", "sku": "252350"}], "type": 1, "verify_key": "0191d00e57187c0d493bb468deca768d95ecc56be7cc34c77be950e6cdab9a57"}, {"description": "A vertical-scrolling action roguelike that is heavily inspired by Spelunky.", "developers": [{"id": "521816765680844831", "name": "Moppin"}], "executables": [{"is_launcher": false, "name": "downwell.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "146b8b583fb8cb50f1c505b98d67431a", "id": "496576457082929152", "name": "Downwell", "publishers": [{"id": "521816510730338331", "name": "Devolver Digital"}, {"id": "521816765680844831", "name": "Moppin"}], "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "360740", "sku": "360740"}], "type": 1, "verify_key": "d35b854385572309634e2cec8bd68109653e3462160a318e872f80f4e6e0c70e"}, {"description": "This sequel to Dragon Age: Origins features faster combat, a new art style, and a brand new, fully voiced main character named Hawke.", "developers": [{"id": "521816589570408449", "name": "BioWare"}], "executables": [{"is_launcher": false, "name": "dragonage2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8a584b9df9affb2251de9dc3d5e190fd", "id": "496576882540806154", "name": "Dragon Age II", "publishers": [{"id": "521816589570408449", "name": "BioWare"}, {"id": "521816499464306692", "name": "Electronic Arts"}], "summary": "", "third_party_skus": [{"distributor": "origin", "id": null, "sku": null}, {"distributor": "steam", "id": "47900", "sku": "47900"}], "type": 1, "verify_key": "31220b47420dcbe06751ece8d5e435b5ca787985dffc1037f6bd14d8274cb73f"}, {"description": "Dragon Fin Soup is an action RPG set in a twisted fairy tale world. It is the first game from Grimm Bros.", "developers": [{"id": "521816781770457100", "name": "Grimm Bros"}], "executables": [{"is_launcher": false, "name": "dragonfinsoup.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "25094b00032518bd07401debac8aeb8a", "id": "496577154683895827", "name": "Dragon Fin Soup", "publishers": [{"id": "521816781770457099", "name": "Grimm Bros, LLC"}, {"id": "521816781770457100", "name": "Grimm Bros"}], "splash": "fce11ea3c476b8a7026a750aac37e2d8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "299600", "sku": "299600"}], "type": 1, "verify_key": "a92f1c138de98b21d037532d1fcbcaf6b07350a3866d1607f4c77115a9ba9cc4"}, {"description": "A free-to-play action MMORPG for PC, developed in South Korea. It is popular in East Asia, and has been adapted into several other media, including a Japanese manga and two Chinese films.", "developers": [{"id": "521816511610880014", "name": "Eyedentity Games"}], "executables": [{"is_launcher": false, "name": "dragonnest.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9e8cf718b1d577e63460e37811c1516c", "id": "496577285466357760", "name": "Dragon Nest", "publishers": [{"id": "521816511610880008", "name": "Eyedentity Games Inc."}, {"id": "521816511610880011", "name": "Nexon Corporation"}], "splash": "333287f5e3115c5a8d417d02505734e1", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "11610", "sku": "11610"}], "type": 1, "verify_key": "c6c67749262887bd565ea49840df064f308264dfd239a00bcce7ed1fa2a3ce8d"}, {"description": "A Free 2 Play online full open world game for the PS3, PS4 and PC.", "developers": [{"id": "521816574512857088", "name": "Capcom"}], "executables": [{"is_launcher": false, "name": "ddo.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c30d98f61d9a02a24b7b2cae0f03ca67", "id": "496578773647622187", "name": "Dragon's Dogma Online", "publishers": [{"id": "521816514106621968", "name": "CAPCOM Co., Ltd."}, {"id": "521816574512857088", "name": "Capcom"}], "summary": "", "type": 1, "verify_key": "d72b0d5f1dbff91f8b536d2356cf067aab8dcf56f6be2714105a4827a7913851"}, {"description": "RTS/MOBA. Control 3 rigs/pilots on a hunt for energy cores on the Jupiter moon Europa. Fast paced, intense gameplay. Fixed round duration of 15 minutes per round. 1v1 fast paced action.", "developers": [{"id": "521816595606011944", "name": "Sparkypants"}], "executables": [{"is_launcher": false, "name": "dropzonesteamclient_x32_rel.exe", "os": "win32"}, {"is_launcher": false, "name": "dropzone/bin/juggernautclient_x32_rel.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a60772e8e2fa95ae49225d87c8bc64d1", "id": "496578915263971358", "name": "Dropzone", "publishers": [{"id": "521816595153158151", "name": "Sparkypants Studios LLC"}, {"id": "521816498541428766", "name": "GameForge"}], "splash": "3608d1a07a2fd88e671cd9844fd4e61f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "572520", "sku": "572520"}], "type": 1, "verify_key": "062b83e529baaea3bcfeb879c7180a677e13712363b2e7da44435e449803d9b6"}, {"description": "After approximately fourteen years of development, the heavily infamous sequel to Duke Nukem 3D was finally released, in which the macho Duke must damper yet another alien invasion.", "developers": [{"id": "521816512085098539", "name": "3D Realms Entertainment"}], "executables": [{"is_launcher": false, "name": "dukeforever.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "133b70d0f7100d2263a68701e070f1d5", "id": "496579092418658363", "name": "Duke Nukem Forever", "publishers": [{"id": "521816503960600578", "name": "Gearbox Software"}, {"id": "521816504392482816", "name": "2K Games"}], "splash": "7a3376bf1c5a3737e600be1b523fd5a6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "57900", "sku": "57900"}], "type": 1, "verify_key": "9d4d65753859b2f4bf1d197c2a548e921a6f9b2508fb86a0ae097a275412414b"}, {"description": "Get ready for the ultimate brawl! Dungeon Fighter Online is a classic beat'em up 2D action game with an epic storyline and RPG elements! Join today for free! ", "developers": [{"id": "521816517512265759", "name": "Neople"}], "executables": [{"is_launcher": false, "name": "dfo.exe", "os": "win32"}], "flags": 0, "guild_id": "563256280521768962", "hook": true, "icon": "cc272cdb29d37411344592ff13833de6", "id": "496579303631486976", "name": "Dungeon Fighter Online", "primary_sku_id": "496579303631486976", "publishers": [{"id": "521816517512265759", "name": "Neople"}], "slug": "dungeon-fighter-online", "splash": "85e24d3013fdc7cfeffcf7f9c93be1e3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "495910", "sku": "495910"}], "type": 1, "verify_key": "41ccceee7b184c8411f984322d9be5bf9cbd6ae611a19bebe162dcd288f4e015"}, {"description": "Dungeonland is a multiplayer action RPG in which a team of players attempt to navigate their adventurer characters through an amusement park full of monsters and deathtraps set by another player who operates as the evil dungeonmaestro.", "developers": [{"id": "521816625507336196", "name": "Critical Studio"}], "executables": [{"is_launcher": false, "name": "dungeonland.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1edfac6beca49f2ca0bd624298a7d9de", "id": "496579621693816832", "name": "Dungeonland", "publishers": [{"id": "521816625507336196", "name": "Critical Studio"}, {"id": "521816521249521702", "name": "Paradox Interactive AB"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "218130", "sku": "218130"}], "type": 1, "verify_key": "7745ddd9d55fd6d2201b0ed78a45ecdabb95692bc9e037c92970c6b4df0bc3c0"}, {"aliases": ["Dungeons & Dragons Online"], "description": "Play as Humans, Dwarves, Elves, Halflings, and more in this 2006 MMO based on the beloved pen-and-paper RPG, and developed by Turbine, Inc.", "developers": [{"id": "521816685502791730", "name": "Turbine, Inc."}], "executables": [{"is_launcher": false, "name": "dndclient64.exe", "os": "win32"}, {"is_launcher": false, "name": "dndclient.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "912cd5d13f5198da6c7dad065f11e373", "id": "496579889063919616", "name": "Dungeons & Dragons Online\u00ae", "publishers": [{"id": "521816753920016388", "name": "Atari SA"}, {"id": "521816754356486154", "name": "Standing Stone Games, LLC"}, {"id": "521816754356486155", "name": "Turbine, Inc"}], "splash": "c08ef95a1da02edeab71fdc9d2aea424", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "206480", "sku": "206480"}], "type": 1, "verify_key": "a8c0079c6023af07b814a16134095257976826cb6b63a99472a0581cb2dc6d80"}, {"description": "In the fantasy world of Falana, a mysterious swordsman named Dust, armed with a living sword called Ahrah and a quirky companion named Fidget, seeks to free a village from oppression while uncovering the truth behind his past.", "developers": [{"id": "521816762472202251", "name": "Humble Hearts"}], "executables": [{"is_launcher": false, "name": "dustaet.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "202e4097bbdd52a7c61564ffacde0268", "id": "496580906916511764", "name": "Dust: An Elysian Tail", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}, {"id": "521816762472202250", "name": "Humble Hearts LLC"}], "splash": "e3019e9e9c65fa34214b3add97cc377b", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "236090", "sku": "236090"}], "type": 1, "verify_key": "7c857317559478ef573690e5945ea5a71e4cbc66862865223ff096ab8f51dd2e"}, {"description": "Dustforce is a platformer by indie developer Hitbox Team in which ninja janitors dust and sweep their way through the environment.", "developers": [{"id": "521816590673641482", "name": "Hitbox Team"}], "executables": [{"is_launcher": false, "name": "dustforce.app", "os": "darwin"}, {"is_launcher": false, "name": "dustforce.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0764a770ffd78e161f177a64a7a04574", "id": "496581169639587850", "name": "Dustforce", "publishers": [{"id": "521816590673641482", "name": "Hitbox Team"}], "splash": "d441e36dd3b55e84c5f7cb76470a8e48", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "65300", "sku": "65300"}], "type": 1, "verify_key": "3717f2af0db4d6fff8fdad9d10ec99d311efacdb808917c5f4ecc63a1bd42cc8"}, {"description": "Entropia Universe is a sci-fi first person MMORPG that uses a \"real cash economy\" where players can exchange real money for in game currency.", "developers": [{"id": "521816634562969630", "name": "MindArk PE AB"}], "executables": [{"is_launcher": false, "name": "entropia.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "05a0225ccae7d4ae2e7f8325d1898d33", "id": "496581460438941716", "name": "Entropia Universe", "publishers": [{"id": "521816634562969630", "name": "MindArk PE AB"}], "summary": "", "type": 1, "verify_key": "c482daa8363d416ca444f6988a413a79ba3658474b61a6700ce1cefba5c68b71"}, {"description": "EverQuest II is a full-fledged sequel to the MMORPG that defined the genre. Set 500 years after the original game, a cataclysmic event has changed the face of Norrath forever.", "developers": [{"id": "521816500974256130", "name": "Daybreak Games"}], "executables": [{"is_launcher": false, "name": "everquest2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2f703f71d4d67c46234fc0587ec9bde6", "id": "496582384863412249", "name": "EverQuest II", "publishers": [{"id": "521816682155737088", "name": "Sony Online Entertainment"}, {"id": "521816717291421726", "name": "Daybreak Game Company"}, {"id": "521816500974256130", "name": "Daybreak Games"}], "splash": "089320b5af16f0695bce941552f04ad5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "201230", "sku": "201230"}], "type": 1, "verify_key": "a1675f0746af3a6e3b3fa227ced04dead95d4d621c7ac65ff411ed28301f616f"}, {"description": "A spiritual sequel to the art-style changing game Evoland, Evoland II sends players through 2D, 3D and all the various bit-eras across turn-based and action RPGs fighting game, platformer and shoot 'em up genres.", "developers": [{"id": "521816589570408450", "name": "Shiro Games"}], "executables": [{"is_launcher": false, "name": "evoland2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d04cf6143a32e8d10b9e469227a301ed", "id": "496583339986387004", "name": "Evoland 2", "publishers": [{"id": "521816589570408450", "name": "Shiro Games"}], "splash": "08274c11dcad6fc1fa9710b2160b1b86", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "359310", "sku": "359310"}], "type": 1, "verify_key": "c500ea68cf532e67d2fad1813df181cc5be34fe65e47b14ef7950fa5b0bcb991"}, {"description": "Evolve is a class-based cooperative-competitive game in which a team of four hunters chase after an evolving monster, also controlled by a player.", "developers": [{"id": "521816522977574922", "name": "Turtle Rock Studios, Inc."}], "executables": [{"is_launcher": false, "name": "evolve.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1f6fbcafcfaa2771ffebac7a09b37459", "id": "496739105481293869", "name": "Evolve", "publishers": [{"id": "521816779509465098", "name": "Turtle Rock Studios"}, {"id": "521816504392482816", "name": "2K Games"}], "splash": "60b3131fd2d9db4244e81d1685c5e032", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "273350", "sku": "273350"}], "type": 1, "verify_key": "fb70fea706c5040b2e8a33b5aa7db2e9c9900fcba3e10e08ff6cf059b50a63df"}, {"description": "Debut RPG for Compile Heart's Galapagos RPG brand.", "developers": [{"id": "521816535304503320", "name": "Compile Heart, Inc."}], "executables": [{"is_launcher": false, "name": "fairyfencer.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d6ea58b434701cec7775c52710e0e82d", "id": "496739512446091284", "name": "Fairy Fencer F", "publishers": [{"id": "521816535304503320", "name": "Compile Heart, Inc."}, {"id": "521816626203459620", "name": "Idea Factory"}], "splash": "ded2d1547d68235c2b38362dc2f0cf86", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "347830", "sku": "347830"}], "type": 1, "verify_key": "bdf46761c18ae39afb00ce569ddfb086ceffd77bbf5f1d8bdcd61742f0f11078"}, {"description": "EA's annual soccer release is back for the year 2014.", "developers": [{"id": "521816499950714880", "name": "EA Canada"}], "executables": [{"is_launcher": false, "name": "fifa15.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "edcddaf8887c9afb5deb3b11a945cff3", "id": "496740139633213490", "name": "FIFA 15", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "summary": "", "third_party_skus": [{"distributor": "origin", "id": null, "sku": null}], "type": 1, "verify_key": "3fb96e4109a5acc1067be855fcbd4b8bca2526902f40075643c265875f3231e7"}, {"aliases": ["FINAL FANTASY III"], "description": "Unreleased outside of Japan for 16 years, this remake of Final Fantasy III features newly designed characters, a more robust Job system, new abilities, and Nintendo Wi-Fi support.", "developers": [{"id": "521816539746271243", "name": "Matrix Software"}], "executables": [{"is_launcher": false, "name": "ff3_win32.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ff8591507140cf497755c4fc9054459d", "id": "496740365072728064", "name": "Final Fantasy III", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "239120", "sku": "239120"}], "type": 1, "verify_key": "0c70db0785c8354b1e085da2bb23dd5e5b6deaa41b8f85fdcf287308b3cde99d"}, {"aliases": ["Final Fantasy V"], "description": "Join Bartz and his friends on an epic journey spanning the globe in an attempt to stop four mystical crystals from shattering, with a character-customizing Job system that some consider to be the \"father\" of similar RPGs to come.", "developers": [{"id": "521816676157751326", "name": "Squaresoft"}], "executables": [{"is_launcher": false, "name": "ffv_game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "549fc501ce55fc47a8d6e937103eb40d", "id": "496740745085059112", "name": "FINAL FANTASY V", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}], "splash": "7d60b2199d8dde4322596581be27d515", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "382890", "sku": "382890"}], "type": 1, "verify_key": "1b9f0fb9c437d21b87474f67cd09cf4715dd3feb8d205d13391d3cb3e2882a5f"}, {"description": "Formerly known as Final Fantasy III in North America, Final Fantasy VI follows a diverse group of heroes as they fight to defeat Kefka, a megalomaniac intent on using a combination of long-lost magic and technology to take over the world.", "developers": [{"id": "521816626904170510", "name": "TOSE Co., Ltd."}], "executables": [{"is_launcher": false, "name": "ff6.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "78b96c1e5e8fb977f44413028ac4b48d", "id": "496742764344639488", "name": "FINAL FANTASY VI", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}], "splash": "85d3395ecc1f6110193aaf04d6edef98", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "382900", "sku": "382900"}], "type": 1, "verify_key": "b39255a81991bb69f07e507ff1bfdda645779e46fc4daf8909397fc574a06c9a"}, {"aliases": ["Final Fantasy VIII"], "description": "Squall and his band of mercenaries fight to save their world from conquest and destruction in the eighth numbered Final Fantasy title. It introduced several new concepts to the franchise, including a subplot with an alternate main character, level-scaling enemies and the Junction system.", "developers": [{"id": "521816676157751326", "name": "Squaresoft"}], "executables": [{"is_launcher": false, "name": "ff8_es.exe", "os": "win32"}, {"is_launcher": false, "name": "ff8_fr.exe", "os": "win32"}, {"is_launcher": false, "name": "ff8_en.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3cbb617add029b412b36bbe0245f2c4e", "id": "496757203596869652", "name": "FINAL FANTASY VIII", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}, {"id": "521816676157751326", "name": "Squaresoft"}], "splash": "9e770ef9befbd851bdd7533429f7e4c3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "39150", "sku": "39150"}], "type": 1, "verify_key": "d5296d90f921642468b6cf6abb54827eb81ba0e5e7f03ff2f86479765ad74da3"}, {"aliases": ["Final Fantasy XIII"], "description": "This entry into the Final Fantasy universe is set in the worlds of Pulse and Cocoon. Players take control of multiple characters who are caught in a war between these worlds.", "developers": [{"id": "521816526920351761", "name": "Square Enix"}], "executables": [{"is_launcher": false, "name": "ffxiiiimg.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8ef268f05a47e8fafc7f02a07bba480b", "id": "496757542479724554", "name": "FINAL FANTASY XIII", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}], "splash": "d943ebf23a6a9595d0957938b74dc124", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "292120", "sku": "292120"}], "type": 1, "verify_key": "a587ade8c98596e2b5e302457d256c73a2fb832aa71836943ecf30d458918b88"}, {"aliases": ["Final Fantasy XIII-2"], "description": "Final Fantasy XIII-2 is a direct sequel to Final Fantasy XIII released by Square Enix in early 2012.", "developers": [{"id": "521816526920351761", "name": "Square Enix"}], "executables": [{"is_launcher": false, "name": "ffxiii2img.exe", "os": "win32"}, {"is_launcher": false, "name": "ffxiii2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c28c5ad15e5ba30bbdf95feffdf2f272", "id": "496757852069822504", "name": "FINAL FANTASY XIII-2", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}], "splash": "fa826b8fab639eb197fb860fb8220e8f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "292140", "sku": "292140"}], "type": 1, "verify_key": "923b5452069ec197ea584b78c6e73e8d6588461ccdb3271389c68adb47353523"}, {"description": "Firefall is a massively multiplayer online role-player game with action-based combat that can be played from a third- or a first-person perspective. It's a free-to-play game with a sci-fi theme that pits mechanized humans in battle armor against alien invaders.", "developers": [{"id": "521816543261360128", "name": "Red 5 Studios"}], "executables": [{"is_launcher": false, "name": "firefallclient.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6cde8ff017f4b23244fa6d3911540fb4", "id": "496758262797172736", "name": "Firefall", "publishers": [{"id": "521816543261360128", "name": "Red 5 Studios"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "227700", "sku": "227700"}], "type": 1, "verify_key": "979ce1db50d7299421bdf1f9d643c580cee6fd40912d992ee7ee88242f2fcdcf"}, {"description": "A fantasy action roguelike where each run features a generated hero's quest to restore Pyrion, God of Fire, atop the pantheon. Blends arena action with FTL inspired overworld mechanics and quick but deep character progression and build options.", "developers": [{"id": "521816672781336576", "name": "Nimbly Games"}], "executables": [{"is_launcher": false, "name": "flamebreak.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4d42e1deb4cbd33150434396397a7d03", "id": "496758379583242291", "name": "Flamebreak", "publishers": [{"id": "521816672781336576", "name": "Nimbly Games"}], "splash": "52963573f8fdf1a13629f85d319cedf0", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "399640", "sku": "399640"}], "type": 1, "verify_key": "4ba9a6e6270c5808cee861a88318d8dd534febdd0e8a142bcb32cc4285748f47"}, {"description": "Flyff is a Free MMO developed by AeonSoft and released in 2004.", "developers": [{"id": "521816663214129154", "name": "Aeon Electronic Entertainment, Inc."}], "executables": [{"is_launcher": false, "name": "flyff/neuz.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "68f48a00694cc5ff2d217c415b62ca20", "id": "496758691064709120", "name": "Flyff", "publishers": [{"id": "521816663214129153", "name": "Playpark"}, {"id": "521816663214129154", "name": "Aeon Electronic Entertainment, Inc."}, {"id": "521816663214129155", "name": "WEBZEN Inc"}], "summary": "", "type": 1, "verify_key": "04578a2bf66dd1aeaaa0fcecfabf83d9abb62a83e0e4e7ec5f47040d36cacc0c"}, {"description": "A football management game with new features and improvements.", "developers": [{"id": "521816521731735570", "name": "Sports Interactive Limited"}], "executables": [{"is_launcher": false, "name": "football manager 2014/fm.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e29e2af3b7af55c5b2ff782cc96e5f6e", "id": "496758937039929370", "name": "Football Manager 2014", "publishers": [{"id": "521816507676885010", "name": "Sega"}, {"id": "521816521731735569", "name": "Sports Interactive"}], "splash": "24784907d28a3c1046d39ff13dc1da04", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "231670", "sku": "231670"}], "type": 1, "verify_key": "36fbcec6df9eb22f45bb373c3b4690cac4a5d54793f765b6f56213edc0a810e7"}, {"description": "The 2016 edition of Sports Interactive's annual Football Management series.", "developers": [{"id": "521816521731735570", "name": "Sports Interactive Limited"}], "executables": [{"is_launcher": false, "name": "football manager 2016/fm.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2fb6d6e7943d5c5be0c6ebf93590e7c1", "id": "496760317875978256", "name": "Football Manager 2016", "publishers": [{"id": "521816507676885010", "name": "Sega"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "378120", "sku": "378120"}], "type": 1, "verify_key": "e7cca8f4add8555c954bdc745fb9d77dd8c01489dcfc81100d7c9996a89952e5"}, {"description": "The Horizon Festival goes to Australia.", "developers": [{"id": "521816775248183306", "name": "Playground Games"}], "executables": [{"is_launcher": false, "name": "forza_x64_release_final.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0669d06865047303c201c20a3825ef81", "id": "496760939052269583", "name": "Forza Horizon 3", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}], "summary": "", "type": 1, "verify_key": "70148e7680a40410eb67fe040a86939757022e7d7a16278e1cef9c30a586d305"}, {"description": "Forza is back and in 4K.", "developers": [{"id": "521816679085506591", "name": "Turn 10 Studios"}], "executables": [{"is_launcher": false, "name": "forzamotorsport7.exe", "os": "win32"}], "flags": 0, "guild_id": "428691939861463042", "hook": true, "icon": "fecef4940b9c36029c20a27ad2c77930", "id": "496761344603979796", "name": "Forza Motorsport 7", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}], "summary": "", "type": 1, "verify_key": "0cecda1d9ae1b1ae002efa12562972e91fcc61e2a94319e51f5f419697b87b54"}, {"description": "A story driven psychological horror point and click adventure game.", "developers": [{"id": "521816559031812098", "name": "Killmonday Games"}], "executables": [{"is_launcher": false, "name": "fran bow.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "edc5d5ee05f8e9c03cb20938be56c351", "id": "496761451738955804", "name": "Fran Bow", "publishers": [{"id": "521816559031812096", "name": "Killmonday Games AB"}], "splash": "46f2362cd827b9147aefe60438ece7ef", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "362680", "sku": "362680"}], "type": 1, "verify_key": "921e087e8c17226ee4d5195b65fc76e01b5675539d59231c7d7dfaff369e51f8"}, {"aliases": ["Free To Play"], "description": "", "executables": [{"is_launcher": false, "name": "free to play/ftp.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ff6547aab4f98eabd0c419c52e15a17c", "id": "496761815548559360", "name": "Free to Play", "publishers": [{"id": "521816507102003200", "name": "Valve"}], "splash": "8c5b0cce14212e8c6443e70966c9adc5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "245550", "sku": "245550"}], "type": 1, "verify_key": "e0a7d988505c2ede8b1c2b70258cf61d3b1b0f844b610819e3fe2530c44402b1"}, {"description": "An independently developed 2D platformer that shares many similarities to the early Sonic games, as well as Ristar and Gunstar Heroes.", "developers": [{"id": "521816576446693399", "name": "GalaxyTrail Games"}], "executables": [{"is_launcher": false, "name": "freedom planet/fp.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1e8dcee503f4041768699abdd432e31b", "id": "496761999708127232", "name": "Freedom Planet", "publishers": [{"id": "521816576446693399", "name": "GalaxyTrail Games"}], "splash": "0b5a99b981601118e152e952d544511a", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "248310", "sku": "248310"}], "type": 1, "verify_key": "a0062f3bba67a8028cea515343bc73ce252490ccb934ca1a0133344b7e3b0817"}, {"description": "Create your own story amidst the dusty wastelands of the Wild West. Found cities, become a master hunter, or create your own mansion... experience the Frontier how it was supposed to be,,,", "executables": [{"is_launcher": false, "name": "frontier/client.jar", "os": "win32"}, {"is_launcher": false, "name": "frontier.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5a9287a8c4391c8386bb8550f330b2fa", "id": "496762504291155998", "name": "Frontier", "publishers": [{"id": "521816775977861120", "name": "Lacuna Corporation"}], "splash": "5dff5cc19569d5cb0f2da6c9ccba37b2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "439950", "sku": "439950"}], "type": 1, "verify_key": "45a6eb9b287a467cd9f7a34503bb2b10ff5847d8c0db66c8f5e4fe8e77c081ce"}, {"description": "Furcadia is a fantasy world of magic and creation, alive with adorable animals and mythical creatures. Choose your favorite customizable avatar and start exploring this friendly, user-empowering Online Social Game with rich player-driven content.", "executables": [{"is_launcher": false, "name": "furcadia.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "60449bee3e86458ef449b457e3b25505", "id": "496763066889797674", "name": "Furcadia", "publishers": [{"id": "521816640195788800", "name": "Dragon's Eye Productions, Inc."}], "summary": "", "type": 1, "verify_key": "f3cbf8a77c7a25d22ad3f80043c13d354d662ff923705c2c713eaaed0d70a6fb"}, {"description": "Twenty five years have passed since the decimation of the Locust & Lambent threats on the planet Sera. However a new race of monsters have taken their place and JD Fenix, son of series protagonist Marcus Fenix, has taken up the mantle in helping to protect humanity.", "developers": [{"id": "521816666053672985", "name": "The Coalition"}], "executables": [{"is_launcher": false, "name": "geargame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6d8af3e4fe66b8ca65178ae12b6da856", "id": "496763396558159892", "name": "Gears of War 4", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}], "summary": "", "type": 1, "verify_key": "640f2ee1e4af1246ed8f0bddfa530473643619d1be816bab0be6281158b41453"}, {"description": "Granado Espada", "executables": [{"is_launcher": false, "name": "ge.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5cf5c47e861765001d8171385dafec4e", "id": "496771607386259456", "name": "Granado Espada", "publishers": [{"id": "521816551955890206", "name": "HANBITSOFT, INC."}], "splash": "f952855ccbd5d8088a8306d6d3d3c058", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "319730", "sku": "319730"}], "type": 1, "verify_key": "40c57b55608625c41690ac0606f26e35d0f972abb53f707cb44a7c573d3fc2a3"}, {"aliases": ["Grav"], "description": "GRAV is an early access game released on Steam on January 8th 2015. GRAV is an open world survival game in space featuring harvesting, looting caves and dungeons, and building bases. Developed and Published by BitMonster games.", "developers": [{"id": "521816565096775691", "name": "BitMonster Games"}], "executables": [{"is_launcher": false, "name": "caggameserver.exe", "os": "win32"}, {"is_launcher": false, "name": "caggame-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "cf7f3b8eb445c590cdc9c933a0352491", "id": "496771913280913424", "name": "GRAV", "publishers": [{"id": "521816565096775690", "name": "BitMonster, Inc."}], "splash": "2ff452dc1194aacf7beffafb8040623e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "332500", "sku": "332500"}], "type": 1, "verify_key": "29bfc3b27303923323359c412edb93e856ae26f64accde0e53b7a536ebd22dc6"}, {"description": "A real-time strategy game by Petroglyph, an indie developer founded by ex-employees of Westwood Studios. It aims to emphasize broad \"macro\" strategy over micromanagement, emulating the design of early RTS games like the Command & Conquer series.", "developers": [{"id": "521816672248791061", "name": "Petroglyph Games Inc."}], "executables": [{"is_launcher": false, "name": "goog.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "14bcad78be8d53180efcdd51871cd11f", "id": "496772084379418637", "name": "Grey Goo", "publishers": [{"id": "521816628980219917", "name": "Grey Box"}], "splash": "8f43c8a2284fe6b9d7447552113f80ce", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "290790", "sku": "290790"}], "type": 1, "verify_key": "6b065e4a6064349ff8039ad4656f3e91d7097a0e3743ea3f7c9a54734fdccfbc"}, {"description": "Chris Crawford-designed simulation of a nuclear reactor. The basis of this model was the nuclear reactor at 3-Mile Island, which had recently suffered a near-meltdown and was probably a direct inspiration for the creation of this simulation.", "developers": [{"id": "521816526362247173", "name": "Chris Crawford Games"}], "executables": [{"is_launcher": false, "name": "scram.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "40dcacf888a9d3281d12858d2dbfa65a", "id": "496772185864667146", "name": "scram", "publishers": [{"id": "521816526362247171", "name": "Atari"}], "splash": "02a317a547a5c49a61053a78df394747", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "773920", "sku": "773920"}], "type": 1, "verify_key": "6e55c8b3bde722d51933744a7fc7cfeee89e7d7160d8265e82d3b9f299e32fc5"}, {"description": "A rhythm game developed by the Taito team behind Space Invaders Infinity Gene.", "developers": [{"id": "521816661788065792", "name": "Taito Corporation"}], "executables": [{"is_launcher": false, "name": "gcst.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "028f814bcecaadd048518c21958eaf78", "id": "496772271088730112", "name": "Groove Coaster", "publishers": [{"id": "521816661788065792", "name": "Taito Corporation"}], "splash": "cdc72ff1fe450dfc57ff79c6ca56d051", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "744060", "sku": "744060"}], "type": 1, "verify_key": "7e86e4d48e1a4a9cf5daac3da5880845bc9baeee32ec67286081e0da47b19851"}, {"description": "Grow Home is a climbing game starring B.U.D. (a Botanical Utility Droid) who is researching the elusive Star plant & helping it bloom.", "developers": [{"id": "521816510172233759", "name": "Ubisoft Reflections"}], "executables": [{"is_launcher": false, "name": "growhome.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c2a657ac64a26a8bc494c33f14542b3e", "id": "496772402219319316", "name": "Grow Home", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "d281d2c9f1dcd5ffbc16b35e4bc97a92", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "323320", "sku": "323320"}], "type": 1, "verify_key": "79a8319c7d9f0b110cc59671131caccee7769beb1f9d082a719435cb511e4cf2"}, {"description": "Guardians of Ember", "executables": [{"is_launcher": false, "name": "guardians of ember/client_x86.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "28da82f4074972f72ddcdff0e148fe45", "id": "496772734744002580", "name": "Guardians of Ember", "publishers": [{"id": "521816563024920610", "name": "Runewaker"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "463680", "sku": "463680"}], "type": 1, "verify_key": "96ca2f5fecd92fb43b2f253077977e538b56f490e8d81e056b4d009765ced59a"}, {"aliases": ["Guilty Gear XX Accent Core Plus R"], "description": "Guilty Gear XX Accent Core Plus R is the final installment of the cult favorite Guilty Gear XX series of fighting games. It rebalances two console bonus characters to be tournament-legal, adding them to the arcade release, and refines all of the existing characters , in an effort to create the best feeling version of the game to date.", "developers": [{"id": "521816536743149599", "name": "Arc System Works Co., Ltd."}], "executables": [{"is_launcher": false, "name": "ggxxacpr_win.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a77a7cd3230f33a31cbc6a9d033c8cde", "id": "496773998517026816", "name": "GUILTY GEAR XX ACCENT CORE PLUS R", "publishers": [{"id": "521816536743149599", "name": "Arc System Works Co., Ltd."}], "splash": "8a8f4bbc946c5476edaf3ff14173b70a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "348550", "sku": "348550"}], "type": 1, "verify_key": "4fc30d5fb0e928db90dda38b864196f103f0425afba6ed358e7e22423e1f0551"}, {"description": "The fourth game in the Guitar Hero series adds drums and vocals to the mix, along with a music studio that you can use to create new tracks and share them online.", "developers": [{"id": "521816783670476800", "name": "Budcat Creations"}], "executables": [{"is_launcher": false, "name": "ghwt.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6e105ce199cee19855176ba2b333a263", "id": "496774309042192384", "name": "Guitar Hero World Tour", "publishers": [{"id": "521816501544550404", "name": "Activision"}], "summary": "", "type": 1, "verify_key": "5335b5234490c2eb5deb2230bc0579b6f7c59c0c40e2166fa1047c33139ec741"}, {"description": "The first game in the Halo series of sci-fi first-person shooters. Halo: Combat Evolved is considered largely responsible for pioneering console shooters.", "developers": [{"id": "521816529453449247", "name": "Bungie"}], "executables": [{"is_launcher": false, "name": "haloce.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "33bcd098a7df21c40aafe4ee563a665b", "id": "496775885249314885", "name": "Halo Custom Edition", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}], "summary": "", "type": 1, "verify_key": "ddaacb4ce7141cf7fa5504fca1224e42caafdb5aaca4600b13ec6eb322e4b37a"}, {"description": "The first game in the Halo series of sci-fi first-person shooters. Halo: Combat Evolved is considered largely responsible for pioneering console shooters.", "developers": [{"id": "521816529453449247", "name": "Bungie"}], "executables": [{"is_launcher": false, "name": "halo.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "33bcd098a7df21c40aafe4ee563a665b", "id": "496776262136758277", "name": "Halo: Combat Evolved", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}], "summary": "", "type": 1, "verify_key": "980b8f79760225c877c259b765c753e20f290e32d8e3bb9a455d92f14289c9c7"}, {"description": "A tarot card driven roguelike action role playing game, by Defiant Development from Brisbane, Australia.", "developers": [{"id": "521816763839545354", "name": "Defiant Development"}], "executables": [{"is_launcher": false, "name": "hand of fate.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e3d489da9547f1414ebd29c3612b1c8e", "id": "496776430110113843", "name": "Hand of Fate", "publishers": [{"id": "521816763839545354", "name": "Defiant Development"}], "splash": "e03666d0eac093e0edab632e7a304c13", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "266510", "sku": "266510"}], "type": 1, "verify_key": "3d5d874f715e4157ff5c925778d389612df09722f110c2d385ef393fb4dafa59"}, {"description": "A turn-based tactics game with RPG elements set in the \"Weird West\".", "developers": [{"id": "521816530866929706", "name": "CreativeForge Games"}], "executables": [{"is_launcher": false, "name": "hardwest.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "80119ce387d1408823602fdcb020c1a0", "id": "496776675351330846", "name": "Hard West", "publishers": [{"id": "521816530866929705", "name": "Good Shepherd Entertainment"}], "splash": "482fc6268d828664d5c05b893a506d77", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "307670", "sku": "307670"}], "type": 1, "verify_key": "b6156356717f3941161c278f1a5d7da147c068ae6060d793a65b1fdbe1658f44"}, {"description": "Hate Plus is a direct sequel to Analogue: A Hate Story that explores the backstory of the character *Mute. It will take players' save data from the previous game and continue the story from there.", "developers": [{"id": "521816654611611665", "name": "Love Conquers All Games"}], "executables": [{"is_launcher": false, "name": "hate plus.app", "os": "darwin"}, {"is_launcher": false, "name": "hate plus.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "03982da463cf6a4b8389d4dd75374e70", "id": "496776818855116811", "name": "Hate Plus", "publishers": [{"id": "521816654611611665", "name": "Love Conquers All Games"}], "splash": "69a1cc0591ae1653ddfc92440e916652", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "239700", "sku": "239700"}], "type": 1, "verify_key": "293d4ff3939242523e6f458d5c68f51fa1a3c84c1e37df9e92dcd6ca395034e2"}, {"description": "A visual novel dating sim where players control a human girl attending a high school for pigeons.", "developers": [{"id": "521816729849036802", "name": "PigeoNation Inc."}], "executables": [{"is_launcher": false, "name": "hatoful.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "76dde0c1218b205bb1304117192e3d1a", "id": "496777244090302490", "name": "Hatoful Boyfriend", "publishers": [{"id": "521816729849036802", "name": "PigeoNation Inc."}], "splash": "703a136fc6eec0cd52489bbd2a11b8ef", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "310080", "sku": "310080"}], "type": 1, "verify_key": "6ec8b8d52ecd1af6f402bd49b331f789f2fe2ba45d54b23b7fa14c1acf425813"}, {"aliases": ["Hawken"], "description": "Hawken is a free to play, multiplayer-only first-person shooter featuring enormous mechs and micro-transactions from independent studio Adhesive Games.", "developers": [{"id": "521816540186935348", "name": "Adhesive Games"}], "executables": [{"is_launcher": false, "name": "hawkengame-win64-shipping.exe", "os": "win32"}, {"is_launcher": false, "name": "hawkengame-win32-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e19eeb6a612d5f68fdd19eeb1b77a925", "id": "496778224433627156", "name": "HAWKEN", "publishers": [{"id": "521816540186935346", "name": "Reloaded Games"}, {"id": "521816540186935347", "name": "Meteor Entertainment"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "271290", "sku": "271290"}], "type": 1, "verify_key": "d5411249fb1ebd58d70c4242865d3713cffb7d951e849343f2e61725f7fb437a"}, {"aliases": ["Hex: Shards of Fate"], "description": "Cryptozoic Entertainment, makers of the World of Warcraft Trading Card Game, have entered the world of video games with their upcoming free-to-play MMOTCG, HEX: Shards of Fate.", "developers": [{"id": "521816645774082051", "name": "Cryptozoic Entertainment"}], "executables": [{"is_launcher": false, "name": "hex.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4cd9dcac5dac5133172827abc157dbd7", "id": "496778870104653824", "name": "HEX: Shards of Fate", "publishers": [{"id": "521816645774082051", "name": "Cryptozoic Entertainment"}], "splash": "e699624be3dc8d4e5abdc5fd473fb37c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "410380", "sku": "410380"}], "type": 1, "verify_key": "f14586507cd1ff994cd5b74a4d7caf8d0830cfeae1cf059f573d24d6cc1acb9e"}, {"cover_image": "d8901128fddf64b1de502c94f64344dc", "description": "Hitman: Blood Money is a 3rd person action-adventure game released by Eidos in 2006. The game is a continuation of the popular Hitman franchise in which the player takes control of the mysterious assassin, Agent 47.", "developers": [{"id": "521816647678558211", "name": "IO Interactive"}], "executables": [{"is_launcher": false, "name": "hitmanbloodmoney.exe", "os": "win32"}], "flags": 0, "guild_id": "451879555523805195", "hook": true, "icon": "d8901128fddf64b1de502c94f64344dc", "id": "496779049524265010", "name": "Hitman: Blood Money", "overlay": true, "overlay_compatibility_hook": true, "primary_sku_id": "496779049524265010", "publishers": [{"id": "521816647678558211", "name": "IO Interactive"}], "slug": "hitman-blood-money", "splash": "3a8f5c995657aadeb865cddb32fb99d3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "6860", "sku": "6860"}], "type": 1, "verify_key": "dc3366def5587d23d3bb21d2e6ae5de7999e28f59c8ed4af7b5f2c133ccd63e4"}, {"description": "", "executables": [{"is_launcher": false, "name": "hoshimemo.exe", "os": "win32"}, {"is_launcher": false, "name": "memoria.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "abf33d674ebbbcafbc0709b9ff89fee9", "id": "496779855950774272", "name": "Hoshizora no Memoria -Wish upon a Shooting Star-", "publishers": [{"id": "521816762904477708", "name": "Favorite"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "715580", "sku": "715580"}], "type": 1, "verify_key": "ec9fb2b99d9f8c87926b6de7e40ada65ec10fc8ec54c5ac05d1a21e085b24d16"}, {"description": "Abstract puzzle-platformer focused on two player co-op.", "developers": [{"id": "521816713746972682", "name": "Sparpweed"}], "executables": [{"is_launcher": false, "name": "ibbobb.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d97db81a0a7237cb9bf97a3ae5726489", "id": "496838264506941473", "name": "ibb & obb", "publishers": [{"id": "521816713746972682", "name": "Sparpweed"}], "splash": "7fc68d678c7814bc3c6f4da9613ed2c9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "95400", "sku": "95400"}], "type": 1, "verify_key": "ec35bea9f629247f54fb52dc88482bd2700754c6f11bfc3b79321c38712a8114"}, {"description": "A VR Shooter with Roguelike elements, launching Early Access on Steam and Oculus Home.", "developers": [{"id": "521816794068025354", "name": "Solfar Studios"}], "executables": [{"is_launcher": false, "name": "indeath-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "79044688685e9dca3ee7255a25fd5dd6", "id": "496838571735384122", "name": "In Death", "publishers": [{"id": "521816794068025354", "name": "Solfar Studios"}], "splash": "1ad4dbb169bf6a9b6bf57d6da64fb789", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "605450", "sku": "605450"}], "type": 1, "verify_key": "63a28224d8a159e49e9bd2f029a8afa96ac47b8ab413b4f58366afa038b02ed1"}, {"cover_image": "1835230fecb8beb2012f65fb45bb396f", "description": "Intruder is a Squad-Based First-Person Stealth Shooter with deadly gunplay, interactive environments, and spatial audio.", "developers": [{"id": "638895525848154112", "name": "Superboss Games Inc."}], "executables": [{"is_launcher": false, "name": "intruder.exe", "os": "win32"}], "flags": 0, "guild_id": "103933666417217536", "hook": true, "icon": "f3e9c48de966038092f6d41d3ae0ff83", "id": "496838818813706270", "name": "Intruder", "publishers": [{"id": "638895525848154112", "name": "Superboss Games Inc."}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "518150", "sku": "518150"}], "type": 1, "verify_key": "9074622082943d117f21186d8c428af71464c009da713b253d0c92d5821a2467"}, {"aliases": ["Jade Empire"], "description": "", "executables": [{"is_launcher": false, "name": "jadeempire.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "eac6fe73f0a3143d155bde750300fbb0", "id": "496839367621476352", "name": "Jade Empire: Special Edition", "publishers": [{"id": "521816712211857408", "name": "BioWare Corporation"}], "splash": "4262b7deff8624bdef2afd45ada49f3a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "7110", "sku": "7110"}], "type": 1, "verify_key": "c19ebb47e73468415909b27a84a8b88c4df00dbc23c41d6b46f9dc6c8e8b8b63"}, {"aliases": ["Jurassic Park The Game"], "description": "Telltale Games continue on from the events of the first Jurassic Park film with this cinematic adventure game.", "developers": [{"id": "521816542258790401", "name": "Telltale Games"}], "executables": [{"is_launcher": false, "name": "jurassicpark100.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d50da088f4eba94ca6551aaff0f53c6c", "id": "496839741812113408", "name": "Jurassic Park: The Game", "publishers": [{"id": "521816542258790401", "name": "Telltale Games"}], "splash": "79d787af63ed98643500e2993839f69d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "201830", "sku": "201830"}], "type": 1, "verify_key": "e22c482180216a81e83978dfd20fdad8ff19a1d8200aa3d427cf9d3ee12b9963"}, {"description": "An adult visual novel about a girl who meets two ghosts on the roof of her academy.", "developers": [{"id": "521816786832982049", "name": "Liar-soft"}], "executables": [{"is_launcher": false, "name": "kindredspirits.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6c9cf9838c1a2ec7eb63ef361035f377", "id": "496845813461418005", "name": "Kindred Spirits on the Roof", "publishers": [{"id": "521816666489749523", "name": "MangaGamer"}], "splash": "b80b2344065188b17ab511ed71459ced", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "402620", "sku": "402620"}], "type": 1, "verify_key": "404cd578719e00f331f72ca648e1ed1bb29b03a63f3dd62fc9cdbfc15729704d"}, {"description": "King Arthur's Gold is a game in the vein of Terraria/Minecraft, but with a focus on PVP; two teams build, fight, and compete to collect the most gold.", "developers": [{"id": "521816655374843944", "name": "TransHuman Design"}], "executables": [{"is_launcher": false, "name": "kag.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "66bc26ef082289cb8958f26e7c466f63", "id": "496845988154048541", "name": "King Arthur's Gold", "publishers": [{"id": "521816655374843942", "name": "Transhuman Design"}], "splash": "3ad28d7a7d1e76c53c37f7ce7e8a8112", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "219830", "sku": "219830"}], "type": 1, "verify_key": "c813fcd01f6c55a0a52f32452d97ec53656eb68c8e475b0c0c1f67b9c2c5d6e1"}, {"description": "", "executables": [{"is_launcher": false, "name": "krosmaster arena.exe", "os": "win32"}, {"is_launcher": false, "name": "krosmaster.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4f09a4cf9f9bfcebda04bbecec0f34e7", "id": "496846515382517770", "name": "Krosmaster Arena", "publishers": [{"id": "521816760387764252", "name": "Ankama"}, {"id": "521816760387764255", "name": "Ankama Studio"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "329790", "sku": "329790"}], "type": 1, "verify_key": "352945662e4a068330eb9b7faa3ee284330945465cfee82cc2062a4d042416ee"}, {"description": "A free-to-play sandbox game by SOE in which players can use detailed editing tools to create items, structures, and worlds in collaboration with thousands of other players. The game started as an EverQuest side project with some user-created content intended to carry over to EverQuest Next. But EQ Next was canceled.", "developers": [{"id": "521816500974256130", "name": "Daybreak Games"}], "executables": [{"is_launcher": false, "name": "landmark/launchpad.exe", "os": "win32"}, {"is_launcher": false, "name": "landmark64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3629e6a5f8ec545a679be15d2fb5f4a6", "id": "496846777023070218", "name": "Landmark", "publishers": [{"id": "521816500974256130", "name": "Daybreak Games"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "297810", "sku": "297810"}], "type": 1, "verify_key": "e41c9a169b9dfc7bdad5050f5a9cb02dce19c9976cd799ba217e3931a877b67f"}, {"description": "A departure from the usual gameplay of the Tomb Raider franchise, this download-only game features a fixed, isometric camera angle and concentrates on co-op combat, platforming, and puzzle solving.", "developers": [{"id": "521816535753555988", "name": "Crystal Dynamics, Inc."}], "executables": [{"is_launcher": false, "name": "lcgol.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4092303c9c31130a31d6bd46be5bd646", "id": "496846884787191834", "name": "Lara Croft and the Guardian of Light", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}], "splash": "79c17885f9213289051844127b630bab", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "35130", "sku": "35130"}], "type": 1, "verify_key": "6b920738cd2ed12422a40aca5b153f5e1406cdf50e0a90a701bb950f5a06eb57"}, {"description": "Legend of Dungeon is a roguelike beat 'em up with dynamic lighting. It also has up to 4 player local Co-Op.", "developers": [{"id": "521816718956560417", "name": "RobotLovesKitty"}], "executables": [{"is_launcher": false, "name": "legendofdungeon.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "cc00c451d4b08609fbeaedc9bcb99a3a", "id": "496847055793422336", "name": "Legend of Dungeon", "publishers": [{"id": "521816718956560416", "name": "Robot Loves Kitty"}], "splash": "fe1fcbb37857d7fdd222db3e3e1f4ec1", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "238280", "sku": "238280"}], "type": 1, "verify_key": "0f521f66f0ccf01e0e6fa0b770c0712c253a61874af9443e465940ef621a0441"}, {"aliases": ["Lightning Returns: Final Fantasy XIII"], "description": "The final game in Lightning's story arc in the Final Fantasy XIII universe.", "developers": [{"id": "521816526920351761", "name": "Square Enix"}], "executables": [{"is_launcher": false, "name": "lrff13.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "441e41a1a6448b06343aafba37d2396a", "id": "496847425680572455", "name": "LIGHTNING RETURNS: FINAL FANTASY XIII", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}], "splash": "2963a899a24bad3b8cf2cd3fd40dda3b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "345350", "sku": "345350"}], "type": 1, "verify_key": "8e1b0d8fc062a75ff25a8885e7d511989e0d9ee9b006bd81bc42ee19ae61a4a4"}, {"description": "", "executables": [{"is_launcher": false, "name": "lro.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "05a0225ccae7d4ae2e7f8325d1898d33", "id": "496847615456051220", "name": "Limit Ragnarok Online", "publishers": [{"id": "521816600723324930", "name": "Lite Games"}], "summary": "", "type": 1, "verify_key": "0ed2499c065fe81808b0cafa084c092d493ab10b1e4cf2b89ba9ce25bbed4904"}, {"description": "A Lineage II game for mobile devices.", "developers": [{"id": "521816684957270026", "name": "Netmarble"}], "executables": [{"is_launcher": false, "name": "lineage.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7fdbd1c198c301359ca38901a1b338aa", "id": "496848201773482004", "name": "Lineage", "publishers": [{"id": "521816684957270026", "name": "Netmarble"}], "summary": "", "type": 1, "verify_key": "9004738c30bfed40e5a4e988182b9b666ce0a055608ae89eafb7221629335d69"}, {"aliases": ["Locomotion"], "description": "A business sim all about building and expanding a Transport Company.", "developers": [{"id": "521816507102003203", "name": "Chris Sawyer Productions"}], "executables": [{"is_launcher": false, "name": "atari/locomotion/loco.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c3b34c17fd60280d7317c8757b396870", "id": "496848465301733376", "name": "Chris Sawyer's Locomotion", "publishers": [{"id": "521816601691947038", "name": "Akella"}], "splash": "1d11e70e1e189ae1db3b642389ddb71e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "356430", "sku": "356430"}], "type": 1, "verify_key": "bcb0636af2ecb9961e5675f3c05429d1f322ea5bb62195d369b15577bd40ba74"}, {"aliases": ["Long Live the Queen"], "description": "As the princess, the player must contend with political intrigue, assassination attempts, and decide how to best run or ruin her kingdom while avoiding other dangers in this Princess Maker inspired game.", "developers": [{"id": "521816615025901570", "name": "Hanako Games"}], "executables": [{"is_launcher": false, "name": "longlivethequeen.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6dc4ed78bf63893e7e7697ae455fce55", "id": "496848705027178496", "name": "Long Live The Queen", "publishers": [{"id": "521816615025901570", "name": "Hanako Games"}], "splash": "62e97e7c500871b32074964631602f8f", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "251990", "sku": "251990"}], "type": 1, "verify_key": "b96658315aa3f97e6212b83a45d8cf38d305c6b24523d538289732f8d5d31851"}, {"description": "Lovely Planet is a first-person shooter set in a cutesy, colorful world. Players dodge enemy bullets and shoot their way to the end of each level.", "developers": [{"id": "521816524952961035", "name": "QUICKTEQUILA"}], "executables": [{"is_launcher": false, "name": "lovelyplanet.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2b757cba334f1f4cfc11c30863db67c2", "id": "496851684396630035", "name": "Lovely Planet", "publishers": [{"id": "521816524952961034", "name": "tinyBuild"}], "splash": "38a88e68423ee33126eeac63322e2d40", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "298600", "sku": "298600"}], "type": 1, "verify_key": "ec2dd007436fe32ce61f59e01ce8064ece1067bfd606792a6cd234624e30cd10"}, {"description": "A single or 2 to 4Plo-player co-op micro-platformer where the players must control a pink spaceship by interacting with systems inside of the ship.", "developers": [{"id": "521816660584169476", "name": "Asteroid Base"}], "executables": [{"is_launcher": false, "name": "loversinadangerousspacetime.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "77d7acda21f8ca3e50e2269c54ca120c", "id": "496851934339268622", "name": "Lovers in a Dangerous Spacetime", "publishers": [{"id": "521816660584169475", "name": "Super Rare Games"}], "splash": "8d1e8418090f43caa0f66e6447a8227b", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "252110", "sku": "252110"}], "type": 1, "verify_key": "8b73f45b36ba4e3c12bcdddadc389ebf3b9ae50cdcde655207208626b01502f7"}, {"description": "Lumini is a relaxing flow-adventure game in which you take your swarm of flying creatures out on an adventure to save your planet.", "developers": [{"id": "521816733200416778", "name": "Speelbaars"}], "executables": [{"is_launcher": false, "name": "lumini_win64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "05db3b55e548267a080a0d7e7bb5fc5f", "id": "496852060256337920", "name": "Lumini", "publishers": [{"id": "521816519332855818", "name": "Rising Star Games"}], "splash": "3dcb709c6b8d958fe5e006451fb06ec1", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "360840", "sku": "360840"}], "type": 1, "verify_key": "0b335e74983e19aed157c0bc6268ef097fffcee87c770e8c87fcb003ef36e3a7"}, {"description": "A puzzle game from Thomas Bowker.", "developers": [{"id": "521816644985683968", "name": "Thomas Bowker"}], "executables": [{"is_launcher": false, "name": "lyne.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d99b50d65073c0c7f3836ceb37d278c3", "id": "496852270080851977", "name": "LYNE", "publishers": [{"id": "521816644985683968", "name": "Thomas Bowker"}], "splash": "831b63def91802fc6203a34336d28bb7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "266010", "sku": "266010"}], "type": 1, "verify_key": "2fc28d685f7f1e15d05c12ec3b8b0c055de3aaafdc8dd2ff190d9422b4d40d76"}, {"description": "", "executables": [{"is_launcher": false, "name": "mro-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "73823e7b84af71eec54bd2032ea3f4d8", "id": "496852479615565834", "name": "Magic Realm: Online", "publishers": [{"id": "521816573485514763", "name": "ITC Studio"}], "splash": "82fa43d38fa04fa9fc1cb8537d3bb182", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "864610", "sku": "864610"}], "type": 1, "verify_key": "bec24e28b5237672fc2d9fa8b9ef0beb6317768c26fedbde9068f5d407ffcc7a"}, {"description": "Marvel Heroes was a free-to-play online action-RPG originally lead by one of the key people behind Diablo and Diablo 2, David Brevik. It featured many playable heroes from various Marvel properties. Both Marvel Heroes and it's developer, Gazillion Entertainment, shut down on November 24th, 2017.", "developers": [{"id": "521816689004904470", "name": "Gazillion Entertainment"}], "executables": [{"is_launcher": false, "name": "marvelheroes2015.exe", "os": "win32"}, {"is_launcher": false, "name": "marvelheroesomega.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8e8fe7ad2b261ce88d43ec7f2979d84d", "id": "496852775406141450", "name": "Marvel Heroes 2015", "publishers": [{"id": "521816689004904470", "name": "Gazillion Entertainment"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "226320", "sku": "226320"}], "type": 1, "verify_key": "272cf1245f844cd75897b399c86279248654f16f681580188a9a511991de4bc8"}, {"description": "Marvel Heroes was a free-to-play online action-RPG originally lead by one of the key people behind Diablo and Diablo 2, David Brevik. It featured many playable heroes from various Marvel properties. Both Marvel Heroes and it's developer, Gazillion Entertainment, shut down on November 24th, 2017.", "developers": [{"id": "521816689004904470", "name": "Gazillion Entertainment"}], "executables": [{"is_launcher": false, "name": "marvelheroesomega.exe", "os": "win32"}, {"is_launcher": false, "name": "marvelheroes2016.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9ef9ade89f43604c1e84b28a50f0eb1f", "id": "496853043103662080", "name": "Marvel Heroes 2016", "publishers": [{"id": "521816689004904470", "name": "Gazillion Entertainment"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "226320", "sku": "226320"}], "type": 1, "verify_key": "523f4a15ba4a2dd8f96edaab65dca5b7faf2540236e5a4d25aa63d3d3f8a1150"}, {"description": "A single-player turn-based tactical strategy game developed by Double Fine Productions.", "developers": [{"id": "521816518871220235", "name": "Double Fine Productions, Inc."}], "executables": [{"is_launcher": false, "name": "massive.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e1c9a50846eda737308557624f067b62", "id": "496853196346621982", "name": "Massive", "publishers": [{"id": "521816518871220235", "name": "Double Fine Productions, Inc."}], "splash": "91072ca7519192d3875154957229b49e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "461400", "sku": "461400"}], "type": 1, "verify_key": "387decaf6543f0c081a9c43a922c170f03319c86b740443df9086403733f82de"}, {"description": "Master Reboot is a psychological first person puzzle game by Wales Interactive.", "developers": [{"id": "521816645774082055", "name": "Wales Interactive"}], "executables": [{"is_launcher": false, "name": "masterreboot.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8cc0b628d5d7768ebc736ff9f66bf0b0", "id": "496853347505012746", "name": "Master Reboot", "publishers": [{"id": "521816645774082055", "name": "Wales Interactive"}], "splash": "2516d684aa5c91759a5a14afcf28bd30", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "251850", "sku": "251850"}], "type": 1, "verify_key": "d0aa7fcb4eac4c3e917f74743d793b22bfee3adc40ab274a3c2b254d1e79b2bb"}, {"description": "A Taiwanese visual novel about a college student who is suddenly able to see three feline humanoid spirits.", "executables": [{"is_launcher": false, "name": "nekojishi.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7493ea899554d4d4b3b59e68a51cea4a", "id": "497121061339529226", "name": "Nekojishi", "publishers": [{"id": "521816765186048038", "name": "Team Nekojishi"}], "splash": "1d619aff0240944eeb4b1e2d62ad1704", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "570840", "sku": "570840"}], "type": 1, "verify_key": "775e714b555edb9157c3d18c323988174f9bf4100ef2e35791d61ad497e497ab"}, {"description": "How to Survive is an isometric zombie survival game with hunger mechanics, RPG stat mechanics, crafting and multiple playable characters along with local and online multiplayer options.", "developers": [{"id": "521816670004576266", "name": "Eko Software"}], "executables": [{"is_launcher": false, "name": "howtosurvive.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "619e0c2ce90e1f0ce7909b3abb469047", "id": "497169068466634792", "name": "How to Survive", "publishers": [{"id": "521816570520141824", "name": "505 Games"}], "splash": "8851c9bd2a84fb2403be2ec513b6fad9", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "250400", "sku": "250400"}], "type": 1, "verify_key": "d5e8d77f0aed177c6609c2c841221281330ec03614a4df2916366745d8de7380"}, {"description": "Isometric single-player RPG based on the Pathfinder Roleplaying Game Kingmaker Adventure Path.", "developers": [{"id": "521816691479674882", "name": "Owlcat Games"}], "executables": [{"is_launcher": false, "name": "kingmaker.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c47e8f5a424dd9c235e40d47b8a54b56", "id": "497389403832844298", "name": "Pathfinder: Kingmaker", "publishers": [{"id": "521816691479674882", "name": "Owlcat Games"}, {"id": "521816524403638274", "name": "Deep Silver"}], "splash": "999684d3ae98a1e652df3281309f928d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "640820", "sku": "640820"}], "type": 1, "verify_key": "26d05ebab5776152cafe9e30fe9ca08b5563f6f61d8de739af013f1e20e58cba"}, {"aliases": ["Nekopara Vol. 0"], "description": "A fandisc of Nekopara Vol.1 published by Sekai Project.", "developers": [{"id": "521816576895352838", "name": "NEKO WORKs"}], "executables": [{"is_launcher": false, "name": "nekopara_vol0.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a7822d5f861c79e485bf18e9ef64808e", "id": "497660949260664832", "name": "NEKOPARA Vol. 0", "publishers": [{"id": "521816532288798739", "name": "Sekai Project"}], "splash": "81112a7b920cd2ceefe89e7ded79f6a5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "385800", "sku": "385800"}], "type": 1, "verify_key": "660bb6c784656b0898f0c5298958c00bd8cbc3920596d9f3b410dd5a26ee4d65"}, {"description": "Necropolis is a run based third-person combat rogue-lite dungeon crawler developed by Harebrained Schemes.", "developers": [{"id": "521816521249521698", "name": "Harebrained Schemes"}], "executables": [{"is_launcher": false, "name": "necropolis.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4aa36cdc65a5afa95b41fbaee437ef0f", "id": "497830439298400256", "name": "Necropolis", "publishers": [{"id": "521816521249521698", "name": "Harebrained Schemes"}], "splash": "2886b1230bde7d0653b27c85221216c7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "384490", "sku": "384490"}], "type": 1, "verify_key": "f1e2a091d103276322e7c40784a01c6ef8bc051d40d3d9dafb605be1d89143b1"}, {"aliases": ["Assassin's Creed: Odyssey"], "description": "Assassin's Creed Odyssey brings the franchise to Greece in 431 BCE, the earliest setting in the series thus far.", "developers": [{"id": "521816510730338327", "name": "Ubisoft Quebec"}], "executables": [{"is_launcher": false, "name": "acodyssey.exe", "os": "win32"}], "flags": 0, "guild_id": "215838530889318401", "hook": true, "icon": "7e8926a9de441adc0d78cda2df1fc490", "id": "497898978466070528", "name": "Assassin's Creed Odyssey", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}, {"id": "521816510730338325", "name": "Ubisoft"}, {"id": "521816510730338327", "name": "Ubisoft Quebec"}], "splash": "ea8a53fd1866a596031c9de676ed4022", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "812140", "sku": "812140"}, {"distributor": "uplay", "id": "5059", "sku": "5059"}], "type": 1, "verify_key": "16a0e02bd42e4a41e4a1f18804e73ba0858bd92c6ecb0768a971d29ede7dfd4c"}, {"description": "Craft The World is a strategy/RPG game from Dekovir Entertainment.", "developers": [{"id": "521816763839545366", "name": "Dekovir Entertainment"}], "executables": [{"is_launcher": false, "name": "crafttheworld/craftworld.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5e12eabeab7bc365d76d3b7cb046ff6a", "id": "498216676744101891", "name": "Craft The World", "publishers": [{"id": "521816763839545362", "name": "Black Maple Games"}], "splash": "5f97eefc77de869fbd0793d857b0d771", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "248390", "sku": "248390"}], "type": 1, "verify_key": "5436c77b687140964ee77b2b5d56a86a803b89edcbe3dc494f1456134ac6facf"}, {"description": "Ultra fast-paced first-person shooter featuring high-flying freedom of movement, physics-based weaponry, and impactful player choice.", "developers": [{"id": "521816553080094727", "name": "Archetype Studios"}], "executables": [{"is_launcher": false, "name": "midair-win64-test.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b95e54250e533f12653e9129401113c2", "id": "498457066738810890", "name": "Midair", "publishers": [{"id": "521816553080094727", "name": "Archetype Studios"}], "splash": "87bc80eba5e9735298799db820d339eb", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "439370", "sku": "439370"}], "type": 1, "verify_key": "123b1daf9debc6a1649bd22ca0db859e8e4761995418ce0a287df465d8cfff97"}, {"description": "", "developers": [{"id": "521816594675138611", "name": "Radical Fish Games"}], "executables": [{"is_launcher": false, "name": "crosscode-beta.exe", "os": "win32"}], "flags": 0, "guild_id": "143364538958348288", "hook": true, "icon": "a8447b2a0f5052529cc93aa6def4d3ba", "id": "498640615744077864", "name": "CrossCode", "primary_sku_id": "498690780836134912", "publishers": [{"id": "521816594675138610", "name": "Deck13 Interactive GmbH"}], "slug": "crosscode", "splash": "9effd00a96cec32ee5a82d2a06c210b7", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "498690780836134912", "sku": "498690780836134912"}, {"distributor": "steam", "id": "368340", "sku": "368340"}], "type": 1, "verify_key": "8db2b65b58026b67cc49e533e10cdba5b5a907bd7e570f4aec51580831bd6247"}, {"description": "Play Thora, a Viking warrior who died an inglorious death and must prove herself to the Gods to enter Valhalla. Impress the Gods!", "developers": [{"id": "521816587041505293", "name": "Thunder Lotus Games "}], "executables": [{"is_launcher": false, "name": "jotun.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c27f19ac71aa714c32bcbaa493fa7684", "id": "498640773999362050", "name": "Jotun", "primary_sku_id": "498691662705328138", "publishers": [{"id": "521816587041505293", "name": "Thunder Lotus Games "}], "slug": "jotun", "splash": "39b3e48748293b5fa283e7bb667d50d0", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "323580", "sku": "323580"}, {"distributor": "discord", "id": "498691662705328138", "sku": "498691662705328138"}], "type": 1, "verify_key": "e444a0878674091b30285b0618c67a1028e606866390ede35a50204bbc3b43dc"}, {"description": "", "developers": [{"id": "521816546943828002", "name": "Nerdook Productions"}], "executables": [{"is_launcher": false, "name": "monster slayers/monster slayers db.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "90ec66deaf076043ed018863ed7cf20c", "id": "498641288250392600", "name": "Monster Slayers", "primary_sku_id": "498692825915850753", "publishers": [{"id": "521816546943828000", "name": "Digerati Distribution"}], "slug": "monster-slayers", "splash": "a83ab34a75da0e7e28707e9a60c62c24", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "496620", "sku": "496620"}, {"distributor": "discord", "id": "498692825915850753", "sku": "498692825915850753"}], "type": 1, "verify_key": "e3cd6301d14f2cd4cb28c6320f5db068a50778c5fcd6b3f2815f5f6266bc98fa"}, {"description": "We Happy Few is a game from Compulsion Games, makers of Contrast. It is a first-person survival game set in a drug-fuelled, retro-futuristic city in an alternative 1960s England.", "developers": [{"id": "521816801537949718", "name": "Compulsion Games"}], "executables": [{"is_launcher": false, "name": "glimpsegame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "80d3684358dcc4fbf3124fd166b041cf", "id": "498728807881113620", "name": "We Happy Few", "publishers": [{"id": "521816801537949718", "name": "Compulsion Games"}], "splash": "1c6e66ed31343b98c8cddb19b0bdea80", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "320240", "sku": "320240"}], "type": 1, "verify_key": "c380bca303b8fbae22b9d790f3d91929499ce8af1c652029728029adad3acdf0"}, {"aliases": ["Lost Saga"], "description": "", "executables": [{"is_launcher": false, "name": "lostsaga.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "251fceb97a6404394521384b0de9ab86", "id": "498938615934615552", "name": "Lost Saga North America", "publishers": [{"id": "521816791249322004", "name": "G4Box"}, {"id": "521816791249322005", "name": "IO Entertainment"}], "splash": "0f58b6ab747db5e5b99876f41697a18f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "266150", "sku": "266150"}], "type": 1, "verify_key": "974bc4ff058a1178a3254b9e2cdcbb2ea19347072bbefa065b0f33ca492780bf"}, {"aliases": ["Men Of War: Assault Squad"], "description": "A stand-alone expansion for Men of War, which places heavier emphasis upon co-operative skirmishes and introduces the Imperial Japanese.", "developers": [{"id": "521816663679565844", "name": "Digitalmindsoft"}], "executables": [{"is_launcher": false, "name": "mow_assault_squad_ed.exe", "os": "win32"}, {"is_launcher": false, "name": "mow_assault_squad.exe", "os": "win32"}, {"is_launcher": false, "name": "mow_assualt_squad.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3f86d034c2e6e746f8d2af7356541493", "id": "498941421814939648", "name": "Men of War: Assault Squad", "publishers": [{"id": "521816663679565844", "name": "Digitalmindsoft"}, {"id": "521816548059643905", "name": "1C Company"}], "splash": "7032901558ba9736b20291d768442a6e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "64000", "sku": "64000"}], "type": 1, "verify_key": "a0b4ec6e9a1c10cf6223e1528f1c256608f078eab250a040f020a127580840fe"}, {"description": "Might & Magic Heroes VI is the sixth installment in the long running spin-off of the Might & Magic saga. This is the first game of the series to be developed by Black Hole Entertainment.", "developers": [{"id": "521816802674737163", "name": "Black Hole Entertainment"}], "executables": [{"is_launcher": false, "name": "might & magic heroes vi.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4c8d6bd6e35765b307e73dce5d28f404", "id": "498942150042451978", "name": "Might & Magic Heroes VI", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "summary": "", "third_party_skus": [{"distributor": "uplay", "id": "44", "sku": "44"}], "type": 1, "verify_key": "5a5b03b5741992f0f209caf789553e5a2eac35349b25d49345db30756c424a4c"}, {"description": "The new entry in the Might and Magic: Heroes franchise. Taking inspiration from Heroes of Might and Magic III and Heroes of Might and Magic V and developed by Limbic Entertainment, developers of Might and Magic X.", "developers": [{"id": "521816585602859008", "name": "Limbic Entertainment GmbH"}], "executables": [{"is_launcher": false, "name": "mmh7game-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "43b1da256e053970e5d80dabb601db84", "id": "498942455903944704", "name": "Might & Magic Heroes VII", "publishers": [{"id": "521816583585136660", "name": "Ubisoft S.A."}, {"id": "521816585132834835", "name": "Limbic Entertainment"}], "splash": "5555829327422f0357ad96b700e029dc", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "321960", "sku": "321960"}], "type": 1, "verify_key": "3b8ad0f0f270251504a2c29b2b66e01ebf6504fe4a510a39ce28ca07f3f5de57"}, {"description": "Mothergunship is a first-person bullet hell game from Grip Digital and Terrible Posture Games.", "developers": [{"id": "521816763332165656", "name": "Terrible Posture Games"}], "executables": [{"is_launcher": false, "name": "towerofguns2-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fb4aa81b7d73c835438364410e148a37", "id": "498942846032805908", "name": "MOTHERGUNSHIP", "publishers": [{"id": "521816762904477709", "name": "Grip Digital"}], "splash": "190ef822da1f32c784deffb81c38ab92", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "574090", "sku": "574090"}], "type": 1, "verify_key": "21c05a2031ba6e7c79f0bb2236ee53ee0af15fd7257310bbaa7248d15a8e4401"}, {"description": "A 'mountain simulator' from David O'Reilly.", "developers": [{"id": "521816786321014822", "name": "David O'Reilly"}], "executables": [{"is_launcher": false, "name": "mountain.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ef674ca6c7ee5102b468839520294b18", "id": "498943265475657728", "name": "Mountain", "publishers": [{"id": "521816745099395082", "name": "Double Fine Presents"}], "splash": "9ad94882fc4a73f6eeea20d75708d9e1", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "313340", "sku": "313340"}], "type": 1, "verify_key": "9d10753f6ed54050882f46a044df92566e79285765ccd2f5d1c57fe6bc32cf49"}, {"description": "", "executables": [{"is_launcher": false, "name": "mudlet.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6dceb804773c37f8081a1730b0d89f63", "id": "498943730817171476", "name": "Mudlet", "publishers": [{"id": "521816693719302144", "name": "Mudlet makers"}], "summary": "", "type": 1, "verify_key": "42bcfcc25cc721b963e394d0bfc75a8076b1c08d1d463fd4742e437dfe96eafa"}, {"description": "A PS3-exclusive free-roaming RPG developed by Compile Heart. It is unrelated to MUGEN, the popular open source fighting game engine.", "developers": [{"id": "521816535304503320", "name": "Compile Heart, Inc."}], "executables": [{"is_launcher": false, "name": "mugensouls.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0e3c140da242d31add971ff41985a7e7", "id": "498943830582755368", "name": "Mugen Souls", "publishers": [{"id": "521816535304503320", "name": "Compile Heart, Inc."}], "splash": "ac3a9910f7e4fde0a9359cecc811c728", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "389870", "sku": "389870"}], "type": 1, "verify_key": "273cee62e0f0413e945af6ba11ac58fdffe77339cdd2b9465ffb569a4e3936fc"}, {"aliases": ["NARUTO SHIPPUDEN Ultimate Ninja STORM 3 Full Burst", "Naruto Shippuden Ultimate Ninja Storm 3 Full Burst"], "description": "A director's cut edition of Naruto Shippuden: Ultimate Ninja Storm 3, and Naruto's official PC game debut.", "developers": [{"id": "521816579797811203", "name": "CyberConnect2 Co., Ltd."}], "executables": [{"is_launcher": false, "name": "nsuns3.exe", "os": "win32"}, {"is_launcher": false, "name": "ns3fb.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "59faeeecba10fdac74a99998a52f47f5", "id": "498948228146921472", "name": "NARUTO SHIPPUDEN: Ultimate Ninja STORM 3 Full Burst", "publishers": [{"id": "521816632801361927", "name": "Black Beard"}, {"id": "521816537653444610", "name": "Bandai Namco Entertainment"}, {"id": "521816632801361928", "name": "CyberConnect 2"}, {"id": "521816632801361929", "name": "CyberConnect2 Co. Ltd."}], "splash": "47d1be681cdff97a61bec694399c4e4d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "234670", "sku": "234670"}], "type": 1, "verify_key": "e860b81cf4758616b4c25273e3973aad99f6f977ef2111d62de7f7c2c8a5d134"}, {"aliases": ["Naruto Shippuden Ultimate Ninja Storm Revolution"], "description": "The Fourth Shinobi World War continues in the fifth installment of the Ultimate Ninja Storm series.", "developers": [{"id": "521816579797811203", "name": "CyberConnect2 Co., Ltd."}], "executables": [{"is_launcher": false, "name": "nsunsr.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d5af7ef389897f91d824968d6213753a", "id": "498971059291291648", "name": "NARUTO SHIPPUDEN: Ultimate Ninja STORM Revolution", "publishers": [{"id": "521816537653444610", "name": "Bandai Namco Entertainment"}, {"id": "521816579797811203", "name": "CyberConnect2 Co., Ltd."}], "splash": "756df7f83b1acc1a75a372cf3f945f39", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "272510", "sku": "272510"}], "type": 1, "verify_key": "4a5a584ca2464b359c6f82cf2df29385743c2838fc310db11b3ccf703b7d9776"}, {"description": "The successor to Need for Speed: Most Wanted brought a continued storyline and new race types, but now with a lesser focus on police chases.", "developers": [{"id": "521816648739454978", "name": "EA Black Box"}], "executables": [{"is_launcher": false, "name": "nfsc.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e10ac83457027712739a94650c67d4ef", "id": "498971474841960450", "name": "Need for Speed: Carbon", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "summary": "", "type": 1, "verify_key": "a8de945a7284b9ea4db9e1fa5e34da7b07878e960503292adf9960888ad2bdfc"}, {"aliases": ["Neo Scavenger"], "description": "Neo Scavenger is a post apocalyptic turn-based roleplaying survial game.", "developers": [{"id": "521816576010223617", "name": "Blue Bottle Games"}], "executables": [{"is_launcher": false, "name": "neoscavenger.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "06bbe97fba1302d1ae2c6ebfde60e835", "id": "498971609764200478", "name": "NEO Scavenger", "publishers": [{"id": "521816576010223617", "name": "Blue Bottle Games"}], "splash": "63efbda0692db08d3b0b44f501009f42", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "248860", "sku": "248860"}], "type": 1, "verify_key": "e5dfb5c30eb2fa9466c67e66a0c8f6bb7053780696c411e01a53ebb2bd567866"}, {"description": "", "executables": [{"is_launcher": false, "name": "neocronclient.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9afc928ae224ece0d71235ed83f26312", "id": "498971892968062976", "name": "Neocron Evolution", "publishers": [{"id": "521816566543810560", "name": "Neocron Support Team"}], "summary": "", "type": 1, "verify_key": "f6b90f6eb1e72dc2178125cdadf279d78f1e849500087150e9bf432a1c2c15e7"}, {"description": "", "executables": [{"is_launcher": false, "name": "wreckfest_x64.exe", "os": "win32"}, {"is_launcher": false, "name": "wreckfest.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "16cc668e8cb42d9efe6f149912392308", "id": "498971974945603587", "name": "Next Car Game: Wreckfest", "publishers": [{"id": "521816515113385984", "name": "Bugbear"}], "splash": "a5f569f511c8e5f2e6c7555705215fbd", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "228380", "sku": "228380"}], "type": 1, "verify_key": "7e60dcafb22b73089794430445ac98480b746987c469071306266be19893a25b"}, {"aliases": ["Nicole (Otome Version)"], "description": "", "executables": [{"is_launcher": false, "name": "nicole.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7c3b3da1657596e74cd1d2b2bb410e4f", "id": "498972346078461982", "name": "Nicole (otome version)", "publishers": [{"id": "521816546943827998", "name": "Winter Wolves"}], "splash": "21944dd1e71e5816b84ac3c75952797e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "307190", "sku": "307190"}], "type": 1, "verify_key": "7fbbae7e27dd8472ccf58c0abe6cb36032d9db603839fa3aeb98cb7bc355be56"}, {"description": "Nosgoth was an online competitive multiplayer PC game being developed by Psyonix. The game was cancelled by Square Enix on 8 April 2016.", "developers": [{"id": "521816547430236211", "name": "Psyonix Studios"}], "executables": [{"is_launcher": false, "name": "nosgoth.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f0e984eb76d841c9c0b1a34454212f5c", "id": "498972985403899960", "name": "Nosgoth", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "200110", "sku": "200110"}], "type": 1, "verify_key": "0f10e9a1f3e35cb4de33a4348e673eafe77c08b2f1e1164537248b173ed78114"}, {"aliases": ["One Piece Pirate Warriors 3"], "description": "Koei-Tecmo's One Piece action-brawler series reaches its third installment and marks the series' debut on PlayStation 4 and PC.", "developers": [{"id": "521816634562969633", "name": "Omega Force"}], "executables": [{"is_launcher": false, "name": "oppw3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0c542cb3bafbb7dd5accb2b8e72c4566", "id": "498973375595675688", "name": "ONE PIECE PIRATE WARRIORS 3", "publishers": [{"id": "521816634562969632", "name": "Koei Tecmo"}], "splash": "c3c768cae85ce67f3331f5fcbbe1a990", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "331600", "sku": "331600"}], "type": 1, "verify_key": "39266c8e49e1cc2ea466f5350eaf4d306dcc879b4fe0f6cd5e71c57d049c2111"}, {"aliases": ["Oni"], "description": "A heavily anime-inspired third person action game, Oni attempts to blend gun play and traditional brawler gameplay together.", "developers": [{"id": "521816529453449247", "name": "Bungie"}], "executables": [{"is_launcher": false, "name": "oni.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a92fddb2f2b4649fed931fe98d9eb7cc", "id": "498979842277113857", "name": "ONI", "publishers": [{"id": "521816529453449246", "name": "Take-Two Interactive Software, Inc."}], "summary": "", "type": 1, "verify_key": "ddd38a86961963977093e409d83e19fa58f4ddf61b6d155288502dff019505b2"}, {"description": "A game by PopCap Games, similar to Breakout and Pachinko machines.", "developers": [{"id": "521816596633747478", "name": "PopCap Games, Inc."}], "executables": [{"is_launcher": false, "name": "peggle/popcapgame1.exe", "os": "win32"}, {"is_launcher": false, "name": "peggle deluxe/peggle.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "574b1222a17532e12bb460fe1dd92124", "id": "498980232938651648", "name": "Peggle Deluxe", "publishers": [{"id": "521816714317660197", "name": "Pop Software"}], "splash": "38be236f007343f524acfb838a256b24", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "3480", "sku": "3480"}], "type": 1, "verify_key": "a2b434ee8aa5308baa598a0801bff74f638bee279d6a3b8a3d0485fe4ca314fb"}, {"description": "Peggle Extreme is the shorter version of Peggle which was created specially for the Orange Box's release. Players must aim to get the highest score they can and clear a level of \"pegs\" in the hopes of advancing to the next stage.", "developers": [{"id": "521816596633747478", "name": "PopCap Games, Inc."}], "executables": [{"is_launcher": false, "name": "peggleextreme/popcapgame1.exe", "os": "win32"}, {"is_launcher": false, "name": "peggleextreme.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "574b1222a17532e12bb460fe1dd92124", "id": "498980339470041123", "name": "Peggle Extreme", "publishers": [{"id": "521816596633747478", "name": "PopCap Games, Inc."}], "splash": "49cfc4382df2609fdafe5fdc62a00a19", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "3483", "sku": "3483"}], "type": 1, "verify_key": "892332a55e7cc68c74995d18d7ea182131528934a1c4d9815f9aff82ead1b9f1"}, {"description": "Official virtual recreations of numerous pinball tables from some of the largest manufacturers of pinball machines in history.", "developers": [{"id": "521816502983196705", "name": "FarSight Studios"}], "executables": [{"is_launcher": false, "name": "pinballarcade.exe", "os": "win32"}, {"is_launcher": false, "name": "pinaball arcade.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "52c310b649dcff2f94ccbf1065a3786b", "id": "498980583096057905", "name": "Pinball Arcade", "publishers": [{"id": "521816502983196704", "name": "Crave Entertainment"}], "splash": "32cda4fa7767187c438fc2f4c4ba17d3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "238260", "sku": "238260"}], "type": 1, "verify_key": "1981fdcc2c6b1eba7a223b88d1d57ffdbe3b00f54365e1b23d1e4fd0393f3390"}, {"description": "Pixel Dungeon is a traditional roguelike for Android developed by Watabou, it draws inspiration from Brogue. A beta version of the game was released on October 12th 2012.", "developers": [{"id": "521816540186935350", "name": "Watabou"}], "executables": [{"is_launcher": false, "name": "pixel_dungeons.exe", "os": "win32"}, {"is_launcher": false, "name": "pixel dungeon/pd.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fdb60c01988f05c39dc42a7c6c77f127", "id": "498981118410752020", "name": "Pixel Dungeon", "publishers": [{"id": "521816540186935349", "name": "Retronic Games"}], "splash": "1eb2ba93cf8d3d62511d4fcb8a531a49", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "365900", "sku": "365900"}], "type": 1, "verify_key": "ad94b81c232687db5dcc291b349f6c8ac777881b3df3a7ab2fb9e4342d555bf5"}, {"description": "", "executables": [{"is_launcher": false, "name": "shooterultimate.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": null, "id": "498981476050927653", "name": "PixelJunk Shooter Ultimate", "summary": "", "type": 1, "verify_key": "a74e5b33a85ce1da95696c77e5be56aff0edda6d362db97b51db540501e78a7c"}, {"description": "An upgraded compilation release of PixelJunk Shooter and its sequel developed by Double Eleven for the PS4 and Vita.", "developers": [{"id": "521816743182598175", "name": "Double Eleven"}], "executables": [{"is_launcher": false, "name": "shooterultimate.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2471cfbca12dfb165897ede28048fda0", "id": "498981634339635253", "name": "PixelJunk\u2122 Shooter Ultimate", "publishers": [{"id": "521816743182598175", "name": "Double Eleven"}], "splash": "06668b12866f919bebe16bc5bbe87bfe", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "332330", "sku": "332330"}], "type": 1, "verify_key": "96ae3a173a2c790849cdb7b84744e76470d020eb4cba0cfde30b74a60106b234"}, {"description": "MechWarrior: Living Legends (MWLL) is a total conversion multiplayer mod for Crysis, using CryEngine 2 as its engine and set in the Battletech universe. It is one of the few mods to have been sanctioned by Microsoft.", "executables": [{"is_launcher": false, "name": "crysis wars/bin64/crysis.exe", "os": "win32"}, {"is_launcher": false, "name": "mwlllauncher.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "542a74fe683878550d65019d55992d91", "id": "498984088418516992", "name": "MechWarrior: Living Legends", "summary": "", "type": 1, "verify_key": "7746ef4a7c960f61e32991e56731a0edbe4691df3a50798082906337cbd25d30"}, {"aliases": ["Plants vs. Zombies"], "description": "", "executables": [{"is_launcher": false, "name": "plants vs. zombies/popcapgame1.exe", "os": "win32"}, {"is_launcher": false, "name": "plantsvszombies.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "dd45a5fece060f28d321caadebfb6fba", "id": "498985095378632704", "name": "Plants vs. Zombies: Game of the Year", "publishers": [{"id": "521816596633747478", "name": "PopCap Games, Inc."}], "splash": "e4984b2cd3f38d52753286d4a3efacc6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "3590", "sku": "3590"}], "type": 1, "verify_key": "e52ed06a31126137ea53eed30f8b4b330b6756ec6565ba23d6740f50d9420df6"}, {"description": "Poi is a 3D adventure platformer throwback to the 90s era of classic platforming games. Explore big worlds, compete in challenge levels, meet quirky characters and pull off classic platforming feats on a journey to become a Master Explorer.", "developers": [{"id": "521816502001991691", "name": "PolyKid"}], "executables": [{"is_launcher": false, "name": "poi.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4d8e9f18c55b3e54ce41db7d61ab3dca", "id": "498985543586021376", "name": "Poi", "publishers": [{"id": "521816502001991691", "name": "PolyKid"}], "splash": "364763c6bc329669ea860809b91b325e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "401810", "sku": "401810"}], "type": 1, "verify_key": "37d1a102b59030958b2715f0487e080aad056afc63a4a91d032afabb5bd5581f"}, {"description": "", "executables": [{"is_launcher": false, "name": "pokemmo.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4aa302a6f9c094b1750c9f6cbc1d17a9", "id": "498985820221603840", "name": "PokeMMO", "publishers": [{"id": "521816649264005125", "name": "PokeMMO"}], "summary": "", "type": 1, "verify_key": "5d5feb2c141851bd28359dd05c38d8a9fad1acdfd3c72eb31289c2ff78b9a63f"}, {"description": "", "executables": [{"is_launcher": false, "name": "pokerstars.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "99da081f26fafa7e9a12196e3ed37d29", "id": "498986175512576058", "name": "PokerStars", "publishers": [{"id": "521816715760500737", "name": "PokerStars"}], "summary": "", "type": 1, "verify_key": "de4f6ba13a1adfc8893d07229b85c7d0a7602500fd46345ab24b2e3835b18a6a"}, {"description": "Lockheed Martin: Prepar3D is a simulation software game.", "developers": [{"id": "521816670969397269", "name": "Lockheed Martin"}], "executables": [{"is_launcher": false, "name": "prepar3d.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "918cc9f4e77d0f7dc3e6d64d4a19c35a", "id": "498986525757800468", "name": "Prepar3D", "publishers": [{"id": "521816670969397269", "name": "Lockheed Martin"}], "summary": "", "type": 1, "verify_key": "502070f007e3e5216a688ac7533acabf1ab97679be58dbd7e197effbe90f6c87"}, {"description": "Primal Carnage is a class-based online multiplayer game that places players as either humans or dinosaurs and pits them against each other.", "developers": [{"id": "521816600031002636", "name": "Lukewarm Media"}], "executables": [{"is_launcher": false, "name": "primalcarnagegame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f912ec00fe6b76f4149a41ee6ad6081b", "id": "498986661104058378", "name": "Primal Carnage", "publishers": [{"id": "521816600031002635", "name": "Reverb Communications Inc."}], "splash": "14e1e98e7917bf4d3fa1b6a36efe3d90", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "215470", "sku": "215470"}], "type": 1, "verify_key": "a496e82b3bc70920f44a4e378d40007205052b44a49652bdca0daa146b6c6eb0"}, {"description": "Join the war between technology and magic in Prime World, the new online action strategy game from the creators of Heroes of Might & Magic V, Blitzkrieg, and Etherlords. Choose from dozens of characters and fight your friends in a battle for victory, glory, and priceless Prime!", "developers": [{"id": "521816529948639232", "name": "Nival Entertainment"}], "executables": [{"is_launcher": false, "name": "pw_game.exe", "os": "win32"}, {"is_launcher": false, "name": "prime world/castle/castle.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "84d77178bff3e8c2f12f6d151ec7bcf5", "id": "498986815227822080", "name": "Prime World", "publishers": [{"id": "521816529948639232", "name": "Nival Entertainment"}, {"id": "521816529948639233", "name": "Nival"}], "splash": "9732e5aa5f5cddfb06006623a54130f2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "235340", "sku": "235340"}], "type": 1, "verify_key": "a7c04f2f63541c6927638e7ddb1abb7c4c450fbd03a4095b2b176249768fd8ab"}, {"description": "A purely movement-oriented trickjumping game featuring aspects from Quake/defrag, Counter-Strike Surf, Warsow, and a whole lot more.", "executables": [{"is_launcher": false, "name": "rik.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9d664c3d8c50cc72419c417a9057210a", "id": "498987268048945162", "name": "ProjectRIK", "publishers": [{"id": "521816757044772877", "name": "RIK Dev Team"}], "summary": "", "type": 1, "verify_key": "4b9ac3543e266134136bf184d16d747214f4a0b3809c177f83dda625134c053c"}, {"description": "In Proteus, the player awakens in the sea off the shore of a peaceful island, and simply explores the island in different seasons, enjoying the procedurally-generated sights, the way their surroundings shape the low-key soundtrack, and the simple graphical style.", "developers": [{"id": "521816692511211520", "name": "Ed Key"}], "executables": [{"is_launcher": false, "name": "proteus.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ab9810888368c63a917442c3b609a148", "id": "498987388891299859", "name": "Proteus", "publishers": [{"id": "521816692079329283", "name": "Curve Digital"}], "splash": "9ca320692de9d926d5a5ed268efc3fc8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "219680", "sku": "219680"}], "type": 1, "verify_key": "c3dfb5c52ecb666dd548fae19ab3c7b482acbeb5af9176b8e2e8a3ec749e581f"}, {"description": "Pyrite Heart is a free ren'ai adventure game that is available with or without voice acting.", "developers": [{"id": "521816532288798741", "name": "Winged Cloud"}], "executables": [{"is_launcher": false, "name": "pyrite heart.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9eacf6e5665ecd8a1905c74d1f039f33", "id": "498987613416456220", "name": "Pyrite Heart", "publishers": [{"id": "521816532288798739", "name": "Sekai Project"}], "splash": "08914ba4fb1585796358f4c244df0de0", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "324170", "sku": "324170"}], "type": 1, "verify_key": "156ba991370ba5d7dbe137cc34b130abb691f9e1564c12b0712de2358aa41332"}, {"description": "The second game in id Software's Quake series. Not actually a direct sequel to Quake, Quake II tells a story of an alien invasion. It casts the player as a lone space marine named Bitterman who must fight the villainous alien Strogg on their home planet of Stroggos.", "developers": [{"id": "521816563024920606", "name": "id Software"}], "executables": [{"is_launcher": false, "name": "quake2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "694027f4545195a485bec39770fd8e64", "id": "498987709629464586", "name": "Quake II", "publishers": [{"id": "521816501544550404", "name": "Activision"}], "splash": "df239bf24e9f572dfee83aee750f7a34", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "2320", "sku": "2320"}], "type": 1, "verify_key": "8d8a1468d72f5ceed0d1b36b451e365daf9a7c8c2a64f6d150a7842f75a42d09"}, {"description": "An improvisational party game for up to eight players (each using their own device, such as smartphones and computers) from the creators of the Jackbox Party Pack.", "developers": [{"id": "521816532737851443", "name": "Jackbox Games"}], "executables": [{"is_launcher": false, "name": "quiplash.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "28ca2238d900521019b41e86458c0b06", "id": "498988229798920242", "name": "Quiplash", "publishers": [{"id": "521816532737851443", "name": "Jackbox Games"}], "splash": "ca3f606888c084e082a5b0bc06c1863e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "351510", "sku": "351510"}], "type": 1, "verify_key": "d2106cece5d6361948619bf78f01af1ad65507a2256bb5fe96f10bbaf1901666"}, {"description": "Race the Sun puts players in a solar-powered aircraft that must avoid obstacles at increasing speeds in an attempt to stay airborne as long as possible in a race against the setting sun. Supports the Oculus Rift for PC.", "developers": [{"id": "521816572088811556", "name": "Flippfly"}], "executables": [{"is_launcher": false, "name": "racethesun.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "75dbef70aca52c9a1949b78b5c64502a", "id": "498988774169116711", "name": "Race The Sun", "publishers": [{"id": "521816572088811556", "name": "Flippfly"}], "splash": "3506e7b342e352bbcb92325489da9e23", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "253030", "sku": "253030"}], "type": 1, "verify_key": "eae674f04eb91e3c150c7b1e527a8ce8cddfff80f47ff6aa92093e803cb9dcde"}, {"aliases": ["Ragnarok Online Classic"], "description": "Ragnarok Online is a Korean MMORPG based around the Norse Mythology but with influences from Christianity and Asian Cultures too. It is based off the Korean Manwha \"Ragnarok\".", "developers": [{"id": "521816611036856322", "name": "Gravity Co., Ltd."}], "executables": [{"is_launcher": false, "name": "ragexe.exe", "os": "win32"}, {"is_launcher": false, "name": "clragexe.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "244ecef6723f14a7cb6ca7611d8aab20", "id": "498990766643740692", "name": "Ragnarok Online", "publishers": [{"id": "521816610600779778", "name": "Gravity Interactive, Inc."}, {"id": "521816611036856320", "name": "Innova Systems"}, {"id": "521816611036856321", "name": "Gravity CIS, Inc."}], "summary": "", "type": 1, "verify_key": "48be0a8911eaaa3a0d4758f28aca55a39ed9088389145ba850613f541ee2db92"}, {"description": "A free to play MMO developed by Gpotato. Features a cash shop allowing players to buy items to use in-game.", "executables": [{"is_launcher": false, "name": "rappelz/sframe.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ad3ed30e33f6f95e993bd8545d62cbb8", "id": "498991137214955531", "name": "Rappelz", "publishers": [{"id": "521816562542313483", "name": "gPotato"}], "summary": "", "type": 1, "verify_key": "c127ea5236a4a78c43f09ea67c0c3525606f65261e753332c3b2d117e9c61ee0"}, {"aliases": ["Rayman 2: The Great Escape"], "description": "Help to repair the damage done to the world and repel an evil pirate invasion in this critically acclaimed platforming adventure.", "developers": [{"id": "521816592674193443", "name": "Ubisoft Montpellier Studios"}], "executables": [{"is_launcher": false, "name": "rayman2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4e6de5789e873e519cd8a9fbbce5a983", "id": "498991556724916225", "name": "Rayman 2 - The Great Escape", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}, {"id": "521816510730338325", "name": "Ubisoft"}], "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "15060", "sku": "15060"}], "type": 1, "verify_key": "0c1e0a866c3d2fe6d828eec511db0f17a0e3a0464f98f27a112be2205762603c"}, {"description": "Since its release in 1999, Re-Volt steadily shows its strength with fast & addictive gameplay. Including numerous tracks, unique cars, special weapons and even a track editor, the official release package features everything an RC Car racing fan could wish for.", "developers": [{"id": "521816504824758293", "name": "Big Bit Ltd"}], "executables": [{"is_launcher": false, "name": "revolt.exe", "os": "win32"}, {"is_launcher": false, "name": "rvgl.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5a5b29ab7a7fcb1547663bf74137dca2", "id": "498994022048727050", "name": "Re-Volt", "publishers": [{"id": "521816504392482822", "name": "GOG.com"}, {"id": "521816504824758292", "name": "Game Factory Interactive Ltd."}], "summary": "", "type": 1, "verify_key": "b2cca269b41194146c75129dacb96f777ed4d309edf3fb7e63269c453d5817c8"}, {"description": "Reassembly is a geometric, spaceship building and combat game.", "developers": [{"id": "521816577344012288", "name": "Anisoptera Games"}], "executables": [{"is_launcher": false, "name": "reassemblyrelease.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5d2f300eb6d161f6fd907aa0d8d605d5", "id": "498997425965367313", "name": "Reassembly", "publishers": [{"id": "521816577344012288", "name": "Anisoptera Games"}], "splash": "019d073cad34267e801e2068e1ae74b0", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "329130", "sku": "329130"}], "type": 1, "verify_key": "717c217460fd0fdbc6e4ae6aa0420bf046376d386307850193420b08781fe253"}, {"description": "", "executables": [{"is_launcher": false, "name": "recore.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "adf4081a1ed9fc05cc9283c6fc568ee0", "id": "498999413172207653", "name": "ReCore", "publishers": [{"id": "521816741156880404", "name": "Armature Studio"}], "splash": "e52323d90ca088728647de1f761828dc", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "537450", "sku": "537450"}], "type": 1, "verify_key": "c9670d759c49d0ab6c3226d7fd3f62e5bf286b4b0fc09e17a02293bda4f38a55"}, {"aliases": ["RESIDENT EVIL REVELATIONS", "Resident Evil Revelations"], "description": "", "executables": [{"is_launcher": false, "name": "rerev.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "86567776ef4d2c4e886b80ef3cc07a47", "id": "499004687719202816", "name": "Resident Evil Revelations / Biohazard Revelations", "publishers": [{"id": "521816574512857088", "name": "Capcom"}], "splash": "c8eab963b07efb1c00c7a19f8d60b470", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "222480", "sku": "222480"}], "type": 1, "verify_key": "32fb17455eae70486c47857f0afa15a9f6a6f697fff6c18717b2f4c8e616fc58"}, {"description": "A hidden object game similar to Where's Waldo, but the world is animated.", "developers": [{"id": "521816603210285068", "name": "Adriaan de Jongh"}], "executables": [{"is_launcher": false, "name": "hidden folks.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5778fbc92a5f8f9ae7bbe9aa6820cf47", "id": "499303420512174080", "name": "Hidden Folks", "publishers": [{"id": "521816603210285068", "name": "Adriaan de Jongh"}], "splash": "d6ff18044cab0ad9afaed4c60b3297a2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "435400", "sku": "435400"}], "type": 1, "verify_key": "b3223968e1da79867679bad51caab4efd58ed1c8682bdcb724a76e8d0393b4f2"}, {"description": "A VR/Non-VR \"escape the room\" game.", "executables": [{"is_launcher": false, "name": "talesofescape.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a300705e3d2fdf5ce6b6ca5f767249dc", "id": "499330427455012874", "name": "Tales of Escape", "publishers": [{"id": "521816660584169472", "name": "OnSkull Games"}], "splash": "2580073fed3cb98f7348648a04728653", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "587860", "sku": "587860"}], "type": 1, "verify_key": "8c06d27f73f1aa7b182241b8e095d066adecaa142fd0997e123f4ffa75a15d68"}, {"description": "", "executables": [{"is_launcher": false, "name": "blockpost.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1f97eb13bb20e86bb73b482201215eab", "id": "499743985045078036", "name": "BLOCKPOST", "publishers": [{"id": "521816524403638273", "name": "Skullcap Studios"}], "splash": "01570a3cca036d7727d94c5097bac35f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "706990", "sku": "706990"}], "type": 1, "verify_key": "63f00a724f33cb081e44663c839795292b5c74e9711e925fe3ffa85b4ac3070f"}, {"cover_image": "d9c8b13239ae2be1eb6ab9909a2bc7d9", "description": "Create your own legend in a 1 to 4 player co-operative personality test. Explore a mystical Mesopotamian-inspired world that's different every time you play.", "developers": [{"id": "521816647191756811", "name": "Kitfox Games"}], "executables": [{"is_launcher": false, "name": "moonhunters.exe", "os": "win32"}], "flags": 0, "guild_id": "329272032778780672", "hook": true, "icon": "76e67efaedf797a61dc5e6c018296363", "id": "500645675642388480", "name": "Moon Hunters", "publishers": [{"id": "521816647191756811", "name": "Kitfox Games"}], "splash": "f62efcfe20545f669dc8ea464e16f331", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "320040", "sku": "320040"}], "type": 1, "verify_key": "dffc286cf412ebb718456af9e9b6b14fbb85f2f7dbc061f4531dc701a39186ba"}, {"description": "Serious Sam II ramps up the over-the-top shooting and humor the series is known for with more ridiculous weapons and enemies.", "developers": [{"id": "521816609518518284", "name": "Croteam Ltd."}], "executables": [{"is_launcher": false, "name": "sam2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "08b520e899c5b101e872da0ec0430c27", "id": "500769428753874947", "name": "Serious Sam 2", "publishers": [{"id": "521816609518518283", "name": "Sold Out Sales & Marketing Ltd."}], "splash": "f416caf4410bccad874492e61508a0d3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "204340", "sku": "204340"}], "type": 1, "verify_key": "db58fcf6157016ff72c270d40072de2b182851efe38f4f76dc33e6bda349ccd1"}, {"aliases": ["Resident Evil HD"], "description": "", "executables": [{"is_launcher": false, "name": "bhd.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8354553c0039f6582b32dced30a7b3a6", "id": "500804924007907348", "name": "Resident Evil / biohazard HD REMASTER", "publishers": [{"id": "521816514106621968", "name": "CAPCOM Co., Ltd."}], "splash": "09411782130d6e3c487fec7fa21cbff6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "304240", "sku": "304240"}], "type": 1, "verify_key": "d1ed6a33a799cd9a5353f0f292e854c0d15f9adfdc3918444d22686780918235"}, {"aliases": ["The Walking Dead Season Two"], "description": "After separating from her friend Lee, young orphan Clementine must survive through the undead apocalypse with a new roaming group of survivors in this sequel to Telltale's adaptation of the comic book of the same name.", "developers": [{"id": "521816542258790401", "name": "Telltale Games"}], "executables": [{"is_launcher": false, "name": "thewalkingdead2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2c57a405153ec1fc342c1b7dcc35de17", "id": "500830174590271509", "name": "The Walking Dead: Season Two", "publishers": [{"id": "521816542258790401", "name": "Telltale Games"}], "splash": "373fe1d00fcdabfe1622a312b2f65f4c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "261030", "sku": "261030"}], "type": 1, "verify_key": "68138795d48ff62754a0e03b1d54113a0362e6d51c2d2e422c5df2994603847e"}, {"description": ".", "executables": [{"is_launcher": false, "name": "pla_toon-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9ea8ca319ed56a7e30b50d5fe19862bc", "id": "501063306065346580", "name": "pla_toon", "publishers": [{"id": "521816574949326850", "name": "SoundAndFuryGames"}], "splash": "110d9c0bf4922938db90f2238f2c603f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "891220", "sku": "891220"}], "type": 1, "verify_key": "d6ecfcf7b587bbcf638d97856c12bee12a1f0c5f9241598024131a484278ca76"}, {"description": "Darkwood is a horror game.", "developers": [{"id": "521816577344012290", "name": "Acid Wizard Studio"}], "executables": [{"is_launcher": false, "name": "darkwood.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b455ab2677ba1e1624192694714f86da", "id": "501209864333164546", "name": "Darkwood", "publishers": [{"id": "521816577344012290", "name": "Acid Wizard Studio"}], "splash": "8c82f66e1a32fdc24a4f2075cf2fe978", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "274520", "sku": "274520"}], "type": 1, "verify_key": "57c18164381ea55b26e741fddd3720344558fa2620ac4a09790007f6e1d4b8f6"}, {"description": "The 2018 release from 2k's simulation franchise", "developers": [{"id": "521816587586633731", "name": "Visual Concepts"}], "executables": [{"is_launcher": false, "name": "nba2k19.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "09a9eb230dc7dbf9ffc3afbcd7988afc", "id": "501373821886922752", "name": "NBA 2K19", "publishers": [{"id": "521816531324370967", "name": "2K Sports"}], "splash": "50e1bf7fabd5ea7ec73e1be8e6896b39", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "841370", "sku": "841370"}], "type": 1, "verify_key": "ec237c897c5f39dd05ea167dee6cd2a9af3458400cd77a6cbbe30659c95b0843"}, {"description": "A game from the team that made Surgeon Simulator. In I Am Bread, the player assumes the role of a piece of bread as it explores the house around it.", "developers": [{"id": "521816516593975297", "name": "Bossa Studios"}], "executables": [{"is_launcher": false, "name": "iambread.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6923de08a0574f27e375eaa80d250346", "id": "501542797430489098", "name": "I am Bread", "publishers": [{"id": "521816516593975297", "name": "Bossa Studios"}], "splash": "afb6beff5303d1c15c5fc02bccd4f411", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "327890", "sku": "327890"}], "type": 1, "verify_key": "d59f4da3a9ae6e19479f78f02331bf1342a1895c0faf11d9b0c05a0adf29cd51"}, {"description": "Creative Destruction ", "developers": [{"id": "521816694797369364", "name": "ZuoMasterDeveloper"}], "executables": [{"is_launcher": false, "name": "creativedestruction/client.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a8efab1e3feafb782232df1cc54a71da", "id": "501792352898121743", "name": "CreativeDestruction", "publishers": [{"id": "521816694797369360", "name": "Titan Studio"}], "splash": "c55a4c178727e6ac1f187e39cbc2ff37", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "893520", "sku": "893520"}], "type": 1, "verify_key": "5cb021d7d5220ed2193d3d3d43948bd18f896086c033897133f8404a3df4dba1"}, {"description": "", "executables": [{"is_launcher": false, "name": "bigscreen.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fe533a4318a97d0d3269bc4dc2ddfd6e", "id": "501925376747110440", "name": "Bigscreen Beta", "publishers": [{"id": "521816772534337537", "name": "Bigscreen, Inc."}], "splash": "da11d534da8a7278ce87fbb6457ea00f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "457550", "sku": "457550"}], "type": 1, "verify_key": "2b2d5bb3446d7e720011e8f03d169f768f0d14d0c77189edf949fb4033f519a3"}, {"description": "Insomniac's first multiplatform game tells the story of OverStrike 9, a band of special-agent misfits working together to thwart a threat to mankind.", "developers": [{"id": "521816729379405825", "name": "Insomniac Games"}], "executables": [{"is_launcher": false, "name": "fuse.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2a0068dc458bafcdc75ec0ca09be89f0", "id": "502281428168343573", "name": "Fuse", "publishers": [{"id": "521816538202767363", "name": "EA Games"}], "splash": "37eeb05a3095f95b1941327bdcdeda12", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "257400", "sku": "257400"}], "type": 1, "verify_key": "48398f4e1ff53f60970fe84a1a6e8cc155b8c6ae717aa54ba24953a7bd0c2f5a"}, {"description": "Old school and new school collide in this 20th Anniversary celebration of the Sonic franchise.", "developers": [{"id": "521816507676885013", "name": "Sonic Team"}], "executables": [{"is_launcher": false, "name": "sonicgenerations.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d571406dcb1aa84e60c1e8060921e103", "id": "502406586895958026", "name": "Sonic Generations", "publishers": [{"id": "521816507676885010", "name": "Sega"}], "splash": "62c3821670d8612d3b02c62943a220fa", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "71340", "sku": "71340"}], "type": 1, "verify_key": "f60963d62603299a4c1d4064b664ac5c733afce851a835553687298b56a7da6a"}, {"description": "Zeus' Battlegrounds is a forthcoming PvP battle-royale game based on the Greek Olympian gods.", "developers": [{"id": "521816556720619552", "name": "Industry Games"}], "executables": [{"is_launcher": false, "name": "zeus-win64-shipping.exe", "os": "win32"}], "flags": 0, "guild_id": "384789588478132224", "hook": true, "icon": "fa6e9d616fe8dd16b99455adb2d3c6a7", "id": "502879677782818820", "name": "Zeus' Battlegrounds", "publishers": [{"id": "521816556720619552", "name": "Industry Games"}], "splash": "57176b537f9eeffa007fcd2845ab650a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "682290", "sku": "682290"}], "type": 1, "verify_key": "01ccea62d0eec4de80e02256215794b97f53fd32de144b241953f47cdbbcac0f"}, {"description": "The Misfits", "executables": [{"is_launcher": false, "name": "themisfits.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3e3b6eddf07e78051cd63166a531f286", "id": "502910350413266954", "name": "The Misfits", "publishers": [{"id": "521816606318264332", "name": "PigDogGames,LLC"}], "splash": "12ed0cac46543c7f5f1481d406c251c1", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "614940", "sku": "614940"}], "type": 1, "verify_key": "ec2f1401b6575bd2751ababefb7f3d01bf2c01b8c1ee6650c1ecddcfb9fe86df"}, {"description": "World War 3 is a multiplayer FPS.", "developers": [{"id": "521816748744245258", "name": "The Farm 51"}], "executables": [{"is_launcher": false, "name": "ww3-win64-shipping.exe", "os": "win32"}], "flags": 0, "guild_id": "453170682277134347", "hook": true, "icon": "7500a68325d968a32561875797d01d43", "id": "503228350761009162", "name": "World War 3", "publishers": [{"id": "521816748744245258", "name": "The Farm 51"}], "splash": "5674a7f81cb3e7a3a73fb636a8607fdd", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "674020", "sku": "674020"}], "type": 1, "verify_key": "4863543d851af1d4d973ad67dd6c7fb0b29325ceadb2f54aae9395efa78b9029"}, {"description": "Namco's sword-slashing fighting game makes its first appearance on eight-generation game consoles (as well as the PC) and re-tells the events of the original Soulcalibur.", "developers": [{"id": "521816787487162390", "name": "Project Soul"}], "executables": [{"is_launcher": false, "name": "soulcaliburvi.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "795e8408354c85a5f11b384cf27e74ee", "id": "503340646946308096", "name": "SOULCALIBUR VI", "publishers": [{"id": "521816537653444610", "name": "Bandai Namco Entertainment"}, {"id": "521816787487162389", "name": "BANDAI NAMCO Studios"}], "splash": "0fb8f5e82eda7dae694bbbe884ed8d72", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "544750", "sku": "544750"}], "type": 1, "verify_key": "bc0cd4a84d4e52c92658f6fa1963f7d7452584e3b9f4703a8450db0eab237b4a"}, {"description": "Inspired by Monty Python's Dead Parrot sketch, Oh...Sir! The Insult Simulator is a remake of the original Game Jam game, Oh...Sir!.", "developers": [{"id": "521816649264005127", "name": "Vile Monarch"}], "executables": [{"is_launcher": false, "name": "oh...sir! the insult simulator/ohsir.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "bd5e16f66ee69d8dcf4116dbd6dadaad", "id": "503362822957432832", "name": "Oh...Sir! The Insult Simulator", "publishers": [{"id": "521816530866929705", "name": "Good Shepherd Entertainment"}], "splash": "4ab8ed722bd922a1601e84d76d1744db", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "512250", "sku": "512250"}], "type": 1, "verify_key": "c352f67d77b84e9623780fbf6f2e68fa579698824e5d412e15774a22b11a926a"}, {"description": "A group of students trapped on the island of Jabberwock must murder their classmates in order to win a cruel game run by the diabolical Monokuma. An action-adventure visual novel game developed by Spike for the PSP.", "developers": [{"id": "521816739286351887", "name": "Spike Chunsoft"}], "executables": [{"is_launcher": false, "name": "dr2_us.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d2465e13aba43cbfca81da001c38ad9f", "id": "503578473227354112", "name": "Danganronpa 2: Goodbye Despair", "publishers": [{"id": "521816739286351887", "name": "Spike Chunsoft"}], "splash": "11cbe7322d5ceaa077701063ab19f36f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "413420", "sku": "413420"}], "type": 1, "verify_key": "ffe025c2e425544c3b3fa6ec340327d9bfe74f8b3d77c5d872aed1377446abf5"}, {"description": "", "executables": [{"is_launcher": false, "name": "otwd-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e63b7fdf632ca20da778a7e9cf6ffc45", "id": "503632655137374219", "name": "OVERKILL's The Walking Dead - BETA", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "952440", "sku": "952440"}], "type": 1, "verify_key": "ffb55b777a5c28573c37936bc61a2c60e4c0368bd61c82ac8c03b33de94ddfc3"}, {"description": "", "developers": [{"id": "521816537653444608", "name": "Cyanide Studio"}], "executables": [{"is_launcher": false, "name": "callofcthulhu.exe", "os": "win32"}], "flags": 0, "guild_id": "309974409135915009", "hook": true, "icon": "c79d71a5f7d01e2abcf56e5b22b59945", "id": "503982482664849408", "name": "Call of Cthulhu", "primary_sku_id": "503982482664849408", "publishers": [{"id": "521816537192202247", "name": "Focus Home Interactive"}], "slug": "call-of-cthulhu", "splash": "53dea89aaf60b3c924afc1406957ded5", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "503982482664849408", "sku": "503982482664849408"}, {"distributor": "steam", "id": "399810", "sku": "399810"}], "type": 1, "verify_key": "55920cf8750cd31dc2b310d28c9d48f02d7779a20d3077f16c3813017547d525"}, {"description": "A notable early MMORPG and the chief rival to EverQuest prior to the release of World of Warcraft.", "developers": [{"id": "521816685502791730", "name": "Turbine, Inc."}], "executables": [{"is_launcher": false, "name": "acclient.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b5cfe70a63954ab5a1e6bd9baabfc7cd", "id": "504021888805240914", "name": "Asheron's Call", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}], "summary": "", "type": 1, "verify_key": "cdb2d53de27e0c3eb75c0853fe1e00300d32ee0c1ab4ff6567cd9063904332a7"}, {"aliases": ["REFLEX", "Reflex"], "description": "Reflex Arena is a competitive Arena FPS that wants to bring back the feel of old-school shooters, along with modern features and tech.", "developers": [{"id": "521816548537663503", "name": "Turbo Pixel Studios"}], "executables": [{"is_launcher": false, "name": "reflex.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5176ab0f6f7f2f37fc6406e50c329fe8", "id": "504024478100095016", "name": "Reflex Arena", "publishers": [{"id": "521816548537663503", "name": "Turbo Pixel Studios"}], "splash": "b5767f33ecbec48c081f7427323fd536", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "328070", "sku": "328070"}], "type": 1, "verify_key": "92f6ad2412313a3a2cc5600b323fdd42e90c2fb119bf2e6986549a0fcbff1455"}, {"aliases": ["Retro City Rampage"], "description": "An action-packed, deliberately-retro parody of video games and pop culture from the era of 8-bit game consoles, Retro City Rampage is a nostalgic twist on the mass-mayhem open-world action of Grand Theft Auto.", "developers": [{"id": "521816576446693397", "name": "Vblank Entertainment"}], "executables": [{"is_launcher": false, "name": "retrocityrampage.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5d325326ed886ca4a371a176671ec094", "id": "504026620068233235", "name": "Retro City Rampage\u2122 DX", "publishers": [{"id": "521816576446693397", "name": "Vblank Entertainment"}], "splash": "710b88000f5ee02595e7d4bcc39cbf5e", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "204630", "sku": "204630"}], "type": 1, "verify_key": "2dded86c1341199337b88304daa52f6db7cbda4758e00b20774a1c314d4d157b"}, {"description": "A 2D god game for PC and Mac. It is the debut game of the Dutch independent studio, Abbey Games.", "developers": [{"id": "521816723263979523", "name": "Abbey Games"}], "executables": [{"is_launcher": false, "name": "reus.app", "os": "darwin"}, {"is_launcher": false, "name": "reus.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "806c83602c8a55df34d9dc47b3de645a", "id": "504027911213285423", "name": "Reus", "publishers": [{"id": "521816723263979523", "name": "Abbey Games"}], "splash": "760003115aaacec1f0de990dff89f694", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "222730", "sku": "222730"}], "type": 1, "verify_key": "94fdfa60d316097e47128695202833d00a73e4542369076c2102dc7eba9b59dc"}, {"description": "An MMORPG from My.com", "developers": [{"id": "521816803228254219", "name": "NetEase"}], "executables": [{"is_launcher": false, "name": "tianyu.exe", "os": "win32"}], "flags": 0, "guild_id": "118875840514752513", "hook": true, "icon": "877413e783ccd52ce5c53ddf72952b1f", "id": "504028382317772859", "name": "Revelation Online", "publishers": [{"id": "521816512085098549", "name": "My.com"}, {"id": "521816544939081735", "name": "Netease Games"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "876330", "sku": "876330"}], "type": 1, "verify_key": "be309dae91d5a0a51d22512f6acbdcaf8164712ba551ebec525ebbcea305f592"}, {"description": "rFactor is a racing simulator designed for the PC. It is designed as an open ended world designed with the modding community and real work accuracy top of mind. The Physics engine is based on 15 degrees of freedom, complex aerodynamics, and advanced tire modelling.", "developers": [{"id": "521816675008380948", "name": "Image Space Inc."}], "executables": [{"is_launcher": false, "name": "rfactor.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "52d2443d1bdd7f3480731b440648d9e3", "id": "504028685322551296", "name": "rFactor", "publishers": [{"id": "521816675008380948", "name": "Image Space Inc."}], "splash": "3f86487cf377046f88d605e5baaf3a2e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "339790", "sku": "339790"}], "type": 1, "verify_key": "51ce38bab3d5030b80a7ddeb82b2790b9af6f0d5bc0f50e4ac01d8559aae5722"}, {"description": "rFactor 2 is the sequel to ISI's racing simulator rFactor.", "developers": [{"id": "521816675008380948", "name": "Image Space Inc."}], "executables": [{"is_launcher": false, "name": "rfactor2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2d6296f730892e4d4e9f30d24cc493f8", "id": "504029217650901040", "name": "rFactor 2", "publishers": [{"id": "521816675008380948", "name": "Image Space Inc."}], "splash": "909e5e37846b2ed350d97cd8bec95ed7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "365960", "sku": "365960"}], "type": 1, "verify_key": "ecdf4e3508c0a2335ad0b1f5c68ff097a6d092d792f9245c6c839efb9bb03736"}, {"description": "Rogue System is an upcoming space combat simulator with an emphasis on hard science fiction.", "developers": [{"id": "521816675008380949", "name": "Digits Crossed Interactive"}], "executables": [{"is_launcher": false, "name": "roguesystemsim.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fcdb8d3868df061898e0088d9a881a75", "id": "504029616151986198", "name": "Rogue System", "publishers": [{"id": "521816675008380948", "name": "Image Space Inc."}], "splash": "a2ec66fd8ae22d42fa39e68c42cd6e13", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "366000", "sku": "366000"}], "type": 1, "verify_key": "138048fe2f4d499d92437d67cfa9d946faae981ea809225799a734d9fdcb7751"}, {"description": "A romantic and comedic visual novel from the creators of Sakura Spirit.", "developers": [{"id": "521816532288798741", "name": "Winged Cloud"}], "executables": [{"is_launcher": false, "name": "sakura angels.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5b087542b5db154e28d5e70e5ee72f79", "id": "504029936697344048", "name": "Sakura Angels", "publishers": [{"id": "521816532288798739", "name": "Sekai Project"}], "splash": "d6c21ceae899c7bef54eccad5b19b5bc", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "342380", "sku": "342380"}], "type": 1, "verify_key": "42ddd6901ae7a4709f6261ad6fde198468462a02017ba06d4b3c25da09f0b176"}, {"description": "A free-to-play clicker game developed by Winged Cloud. The objective of the game is to click and defeat hordes of moaning enemies, featuring 800+ moans!", "developers": [{"id": "521816532288798741", "name": "Winged Cloud"}], "executables": [{"is_launcher": false, "name": "sakura clicker.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a561455a141228555910979fd0dab4d5", "id": "504030053017845805", "name": "Sakura Clicker", "publishers": [{"id": "521816532288798739", "name": "Sekai Project"}], "splash": "f6ca6773c9c6634192be0b7ff72d2e4e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "383080", "sku": "383080"}], "type": 1, "verify_key": "699afd61559c70715e173ac56285013c72b660b2bd6a9936954eaf44b68c34fc"}, {"description": "Sakura Spirit is a visual novel game published by Sekai Project.", "developers": [{"id": "521816532288798741", "name": "Winged Cloud"}], "executables": [{"is_launcher": false, "name": "sakura spirit.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0e1e3afdd03163abb77e14c5c87d7a89", "id": "504030205481058304", "name": "Sakura Spirit", "publishers": [{"id": "521816532288798739", "name": "Sekai Project"}], "splash": "efb8dd9a44eb212ba63ad52f6a6cc229", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "313740", "sku": "313740"}], "type": 1, "verify_key": "ccdbd02f87763e66dde2b246c512a6ba2784014e3c258d1324ffe111de03fd82"}, {"description": "A split-screen, multiplayer first-person shooter in which all players are invisible, and must \"screen look\" - analyze what the other players are seeing - to locate their opponents.", "developers": [{"id": "521816668666855432", "name": "Samurai Punk"}], "executables": [{"is_launcher": false, "name": "screencheat.exe", "os": "win32"}], "flags": 0, "guild_id": "360994319848570881", "hook": true, "icon": "931e202689ce044fc53dad6cf6a3c539", "id": "504030375606091776", "name": "Screencheat", "publishers": [{"id": "521816625020928007", "name": "Fellow Traveller"}], "splash": "fd2b9354a241f428ceb88170044de360", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "301970", "sku": "301970"}], "type": 1, "verify_key": "f15b2d75db115cbcc90a1cf292609e4b0380c6417c5b2800f3fb95672bdc9d9b"}, {"description": "", "executables": [{"is_launcher": false, "name": "scrivener.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ba15cc87d61fab3d8d0716e3febfc1b6", "id": "504030662911590425", "name": "Scrivener", "publishers": [{"id": "521816523430428675", "name": "Literature and Latte"}], "summary": "", "type": 1, "verify_key": "13f290a3f7ae025ce012d7008600f507027d1f20df84a4dabcd8d957d612229a"}, {"description": "Secret Ponchos is a downloadable, competitive twin-stick shooter focused on skill-based combat and its unique cast of Spaghetti-western inspired characters.", "developers": [{"id": "521816539087896599", "name": "Switchblade Monkeys"}], "executables": [{"is_launcher": false, "name": "secretponchosd3d11.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e7ca4a919a79c0654ca747d1520d375c", "id": "504030792184496148", "name": "Secret Ponchos", "publishers": [{"id": "521816539087896598", "name": "Switchblade Monkeys Entertainment"}], "splash": "8c1a1cfa11ecabb12ce6c646cb47055e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "265750", "sku": "265750"}], "type": 1, "verify_key": "d7008a3b6a5b269537228b45d2ed843fd89d3e0fdc4389b32505f443e00b489f"}, {"description": "Secrets of Grindea is an upcoming action RPG designed to pay tribute to classic SNES RPGs.", "developers": [{"id": "521816611980705793", "name": "Pixel Ferrets"}], "executables": [{"is_launcher": false, "name": "secrets of grindea.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d900c2abc4aba7b8b1234069bb96bef2", "id": "504030959654535198", "name": "Secrets of Grindea", "publishers": [{"id": "521816611980705793", "name": "Pixel Ferrets"}], "splash": "4f64ccdb58305986e67e7f5397a21b14", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "269770", "sku": "269770"}], "type": 1, "verify_key": "8fe9cf9181cc621738e08d3fa3e49a5ccda411fb199bd47c1721e12077df443e"}, {"description": "Shadowgrounds is a top-down shooter set in space where you must defend a colony from an invasion of hideous creatures in primarily dark environments.", "developers": [{"id": "521816611980705792", "name": "Frozenbyte, Inc."}], "executables": [{"is_launcher": false, "name": "shadowgrounds.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "81eed3223173c2aea25051849f5a3a3a", "id": "504031323443167273", "name": "Shadowgrounds", "publishers": [{"id": "521816503465803791", "name": "dtp entertainment AG"}], "splash": "233fb3dc193fefc8fe0a9e86b6dc507a", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "2500", "sku": "2500"}], "type": 1, "verify_key": "5627f530cb346a857b554666abe90cefb977661bb670ca5ec9aac5dbd2377b07"}, {"description": "A follow-up to Frozenbyte's alien-themed co-op shooter Shadowgrounds.", "developers": [{"id": "521816611980705792", "name": "Frozenbyte, Inc."}], "executables": [{"is_launcher": false, "name": "survivor.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "27eb19b5ea1bf4d6ae8527d61815f7cd", "id": "504031813619154974", "name": "Shadowgrounds: Survivor", "publishers": [{"id": "521816660152287235", "name": "CDV Software Entertainment AG"}], "splash": "3727031c17ea87ad547bacf6c511bf4b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "11200", "sku": "11200"}], "type": 1, "verify_key": "3a9c2fcf3d17782fd93c8708ede89f69a360aaccbe81a2960c6155f71fad3809"}, {"description": "An online-focused shooter based on the tabletop RPG of the same name, giving players modern weapons as well as various magic abilities. It was the first game to allow cross-platform play between Xbox 360 and PC players on the same servers.", "developers": [{"id": "521816735280660492", "name": "FASA Studio"}], "executables": [{"is_launcher": false, "name": "shadowrun.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "32cbbe0cb110bd1cfe54abcdce6c2bb7", "id": "504032333532364840", "name": "Shadowrun", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}], "summary": "", "type": 1, "verify_key": "928d7be66bb242c55d6993d433f23f8c2fef23d40943a91923a52d0f4d0ea691"}, {"description": "The third entry in WayForward's Shantae series, and the first to see a release on home consoles. Shantae is forced to work with her archenemy Risky Boots to stop an even more evil pirate.", "developers": [{"id": "521816699574419457", "name": "WayForward Technologies"}], "executables": [{"is_launcher": false, "name": "shantae and the pirate's curse.exe", "os": "win32"}, {"is_launcher": false, "name": "shantaecurse.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "39c0366373cd953d841cdd6e5c3d16a5", "id": "504032449173389372", "name": "Shantae and the Pirate's Curse", "publishers": [{"id": "521816699574419457", "name": "WayForward Technologies"}], "splash": "2b85d4076999aa5db84cd540089348bb", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "345820", "sku": "345820"}], "type": 1, "verify_key": "2602581301b98c05a97a4e15b6ba884114a57684f3421c94aa7dc67703baae85"}, {"description": "Shattered Skies is a new looter shooter survival game being published by Free Reign Entertainment coming out on PC.", "developers": [{"id": "521816716293046277", "name": "Free Reign Entertainment"}], "executables": [{"is_launcher": false, "name": "shatteredskies.exe", "os": "win32"}, {"is_launcher": false, "name": "shatteredskies/lms.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "95e4aacd32fd9642f1a3fa9640ca0a77", "id": "504033280149159986", "name": "Shattered Skies", "publishers": [{"id": "521816716293046277", "name": "Free Reign Entertainment"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "447500", "sku": "447500"}], "type": 1, "verify_key": "a618f8c41a1204baab050c8cadd01ce5ad8c05f4297e9a61b645bd21290a5f91"}, {"description": "Sid Meier's Railroads! is a tycoon simulation game which allows you to play 19th-20th century railroad baron and become the captain of industry while enjoying the great playground that is unfettered capitalism and vertical monopoly.", "developers": [{"id": "521816573485514765", "name": "Firaxis Games"}], "executables": [{"is_launcher": false, "name": "railroads.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "42b12806157a78553cea459b5f72e30a", "id": "504033484919144452", "name": "Sid Meier's Railroads!", "publishers": [{"id": "521816548059643905", "name": "1C Company"}], "splash": "9d26f12d19f7eb8a9a68d8783c55df10", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "7600", "sku": "7600"}], "type": 1, "verify_key": "196aeef3b3e83cef3f3fe2bb29c65291d025253d4160d416630d6dea5494dbf0"}, {"description": "SinaRun is a minimalist 3D platform/racing game.", "executables": [{"is_launcher": false, "name": "sinarun.app", "os": "darwin"}, {"is_launcher": false, "name": "sinarun.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "32ace2d56ee99adf6b4d0c6a97277aa7", "id": "504033675940200448", "name": "SinaRun", "publishers": [{"id": "521816606901534726", "name": "Princesseuh"}], "splash": "6d05a644216b7a6d8aa77c7222366738", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "324470", "sku": "324470"}], "type": 1, "verify_key": "4539816fbf4a21b657c6d9622e99d2d15311f51ff8f103bdf8839f2304def11e"}, {"description": "", "executables": [{"is_launcher": false, "name": "slime ccg.exe", "os": "win32"}, {"is_launcher": false, "name": "los-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6ff39161e184c64f58488ce3580788e7", "id": "504037755018412033", "name": "Slime CCG", "publishers": [{"id": "521816690540019735", "name": "Slime Studios"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "863560", "sku": "863560"}], "type": 1, "verify_key": "823c884434dd955e95e2e1f8e6b4f43ae4b1dff4ce06ed6555fde9a0be5c3112"}, {"description": "", "executables": [{"is_launcher": false, "name": "snes9x.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d3e300c2f2fc1efafd449db9273e7179", "id": "504041310605410315", "name": "Snes9x", "publishers": [{"id": "521816675516153859", "name": "Snes9x"}], "summary": "", "type": 1, "verify_key": "fc9058374cd279a6ece46bc39b7101409ef9befa74cbd4ffa71f09386654cb83"}, {"description": "Songbringer is an indie adventure RPG from Wizard Fu Games.", "developers": [{"id": "521816743182598176", "name": "Wizard Fu"}], "executables": [{"is_launcher": false, "name": "songbringer.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c6919e1923df2a51412247e13fa5d36e", "id": "504042287345434624", "name": "Songbringer", "publishers": [{"id": "521816743182598175", "name": "Double Eleven"}], "splash": "971696997bfa21d0769ac9d4dabe2a72", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "367080", "sku": "367080"}], "type": 1, "verify_key": "bf161f5d2a51bb52ce506d33c8198fb46066040ce865f704cf400dadcd076986"}, {"description": "Sonic Adventure DX: Director's Cut is a port of the Dreamcast hit to the Gamecube, and in turn, ported to PC.", "developers": [{"id": "521816507676885013", "name": "Sonic Team"}], "executables": [{"is_launcher": false, "name": "sonic adventure dx.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "98c6e25823562d181a0d4f83b3275db1", "id": "504042667714543626", "name": "Sonic Adventure DX", "publishers": [{"id": "521816507676885010", "name": "Sega"}], "splash": "bae9a7b8fb093aa55192ae4233d23cc2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "71250", "sku": "71250"}], "type": 1, "verify_key": "da513a233a1bdb6c331826ff872fa79566d8bea96a2a048b4e9a8bb02b542aae"}, {"description": "Sonic and Dr. Eggman unite to take down the Deadly Six as they explore the Lost World in a new platformer exclusive to Nintendo systems.", "developers": [{"id": "521816507676885013", "name": "Sonic Team"}], "executables": [{"is_launcher": false, "name": "slw.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8c226da48c49d749aa29ceb04b71e78e", "id": "504044826954694780", "name": "Sonic Lost World", "publishers": [{"id": "521816507676885010", "name": "Sega"}], "splash": "669097e726df772d17d46756fada714e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "329440", "sku": "329440"}], "type": 1, "verify_key": "fdd1520e2f03274b039a752e633b06d32c244cf8853df56c5dcd59e39c53dcab"}, {"description": "Soul Axiom is a futuristic first-person adventure game from Wales Interactive.", "developers": [{"id": "521816645774082055", "name": "Wales Interactive"}], "executables": [{"is_launcher": false, "name": "soulaxiom.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "62065b79bb1b545b8e5ee670d61b43d5", "id": "504046230028943380", "name": "Soul Axiom", "publishers": [{"id": "521816645774082055", "name": "Wales Interactive"}], "splash": "e6e86e1c88a8a30ff57a212cc0206c8d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "279900", "sku": "279900"}], "type": 1, "verify_key": "b583ef20106123116f8ecba4a28d52fdf6f1912624b5a52ef28adeaf0241bdbb"}, {"description": "Space Pirates and Zombies is an action spaceship combat strategy game with RPG elements.", "developers": [{"id": "521816637956161559", "name": "MinMax Games LTD"}], "executables": [{"is_launcher": false, "name": "spazgame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5d4377b945fd083f12010a15d31f40f2", "id": "504046366302142494", "name": "Space Pirates and Zombies", "publishers": [{"id": "521816637956161559", "name": "MinMax Games LTD"}], "splash": "7fd647edb082e6863c57fc9f7dae60bd", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "107200", "sku": "107200"}], "type": 1, "verify_key": "33f37ec46159d6f394280ae484a133ebe371ee68cf82f984be4f73bcce03b4b5"}, {"description": "Put your engineering and fake chemistry skills to the test in SpaceChem, a scientific puzzler set in colonial space.", "developers": [{"id": "521816702321819671", "name": "Zachtronics Industries"}], "executables": [{"is_launcher": false, "name": "spacechem.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "71c340c37307b0cbc7824e3a4918bceb", "id": "504046850584739850", "name": "SpaceChem", "publishers": [{"id": "521816702321819671", "name": "Zachtronics Industries"}], "splash": "f9eb7f20883f9b13b0fb9311098a2500", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "92800", "sku": "92800"}], "type": 1, "verify_key": "0c2a08a803cac04d95be753a2a4fe3682badeb8ca1facd7ee697e6da260608b8"}, {"description": "The web-slinging, joke cracking, Spider-Man is back. The third game in the movie tie-in series sees Spider-Man battle more foes than ever and even get a new makeover, and of course, it offers plenty of swinging around the city. ", "developers": [{"id": "521816513561493528", "name": "Vicarious Visions"}], "executables": [{"is_launcher": false, "name": "spider-man 3/game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "80476859463a79784e8a729539e225d4", "id": "504047615139119143", "name": "Spider-Man 3", "publishers": [{"id": "521816501544550404", "name": "Activision"}], "summary": "", "type": 1, "verify_key": "2d52772880165d7e20b53b5b2f06712352db7e654090b00abe640f794e73573e"}, {"description": "Sprint Vector is a first-person racing platformer for VR.", "developers": [{"id": "521816667232403457", "name": "Survios"}], "executables": [{"is_launcher": false, "name": "sprintvector-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3dd82b193758a7ec9fc48ef2689ffb4c", "id": "504050983400374292", "name": "Sprint Vector", "publishers": [{"id": "521816667232403457", "name": "Survios"}], "splash": "e602327f78c48b5149b2c0438669b26d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "590690", "sku": "590690"}], "type": 1, "verify_key": "d364436376fad3ae153e3c1cfacd074443486b7ab3e3b84f6269bd1d45b85436"}, {"description": "Startup Company is a sandbox business themed simulation game from 8seven.", "developers": [{"id": "521816796441870354", "name": "Hovgaard Games"}], "executables": [{"is_launcher": false, "name": "startupcompany.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a8b090d7fe79743b891ba4fc628c3cdf", "id": "504052120543166505", "name": "Startup Company", "publishers": [{"id": "521816796441870354", "name": "Hovgaard Games"}], "splash": "aafaa4f1538159ba5f5158a5616af168", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "606800", "sku": "606800"}, {"distributor": "gog", "id": null, "sku": null}], "type": 1, "verify_key": "043222951a33448f3ff5d8d2bf15e20cb65a4546bb2ab1ec462bb40978efdecd"}, {"description": "Ocean-based warfare MMO.", "executables": [{"is_launcher": false, "name": "seagame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f05171068f83b4a911a441fd36a2a1ee", "id": "504052334960050176", "name": "Steel Ocean", "publishers": [{"id": "521816679085506590", "name": "ICE Entertainment"}], "splash": "9277d7fca37bb1ac42c27086e2b12e5f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "390670", "sku": "390670"}], "type": 1, "verify_key": "0864549a9f18eb69f6b47d750f5ef8bd8e39a9aa18c95f748ddf8e1d5261bd29"}, {"aliases": ["Steins;Gate"], "description": "The second, and most popular, entry in the Science Adventure series of visual novels. Centers around a group of friends who accidentally invent a device that can send text messages back in time, sparking a pandemonium of alternate timelines and conspiracies. El Psy Kongroo.", "developers": [{"id": "521816754989694996", "name": "5pb."}], "executables": [{"is_launcher": false, "name": "steins;gate/game.exe", "os": "win32"}, {"is_launcher": false, "name": "steinsgate.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c61a00ff15aa2bbde5af4e009e0b6639", "id": "504052730042646579", "name": "STEINS;GATE", "publishers": [{"id": "521816806176980996", "name": "Nitroplus"}, {"id": "521816754989694996", "name": "5pb."}], "splash": "b62d51025374c4f7d43623198ad735a2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "412830", "sku": "412830"}], "type": 1, "verify_key": "a31c0e73492f6d8f316d3ddc3a003f39fda00b8b13a6b6db85d6d187077a627e"}, {"description": "A space pixel SHMUP developed by Pixelnest Studio. The game hits Steam Early Access on May 18, 2015.", "developers": [{"id": "521816795250950145", "name": "Pixelnest Studio "}], "executables": [{"is_launcher": false, "name": "steredenn.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "edcb9a05fb735ea8aff4ba9b27e3c0ed", "id": "504053684494401540", "name": "Steredenn", "publishers": [{"id": "521816795250950144", "name": "Plug in Digital"}], "splash": "9ced7697b047186a6d04757f6c020764", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "347160", "sku": "347160"}], "type": 1, "verify_key": "4e339668a8e0e3d42ba168933d0ad35490ef9701631c13c7254a11dd0801e6fa"}, {"aliases": ["STRAFE: Millennium Editio"], "description": "A retro-styled roguelike shooter, the future of video games is here. Strafe is the fastest, bloodiest, deadliest, most adjective-abusing, action-packed first-person shooter of 1996!", "developers": [{"id": "521816633870647314", "name": "Pixel Titans"}], "executables": [{"is_launcher": false, "name": "strafe.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7c907be63a2535b473295353342f1dab", "id": "504054126280310794", "name": "STRAFE", "publishers": [{"id": "521816510730338331", "name": "Devolver Digital"}], "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "twitch", "id": null, "sku": null}, {"distributor": "steam", "id": "442780", "sku": "442780"}], "type": 1, "verify_key": "b5df58c322a9c0f08a7a7d90b7bf97ba38222dcd3bb08f3ca278ed587a3a8b28"}, {"description": "Genre veterans S2 Games deliver a \"second generation MOBA\" designed from the ground up to reduce player toxicity.", "developers": [{"id": "521816592674193435", "name": "S2 Games, LLC"}], "executables": [{"is_launcher": false, "name": "strife.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "086553454551539bb4f5512d79aea07b", "id": "504055085177765907", "name": "Strife", "publishers": [{"id": "521816592674193435", "name": "S2 Games, LLC"}], "splash": "682a6b177ac28ebfd56006106692e81c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "339280", "sku": "339280"}], "type": 1, "verify_key": "764b06e9ef18db5de3a48479fea2ff105e2b465b3e2e67a3cb588ef1ace3ce65"}, {"description": "", "executables": [{"is_launcher": false, "name": "strife-ve.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b7d9d703fc4cae415d6ba8f86b160bde", "id": "504055223543922708", "name": "Strife: Veteran Edition", "publishers": [{"id": "521816594675138612", "name": "Rogue Entertainment"}], "splash": "54b3814c45d69c1be0a49b0bd7773f2f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "317040", "sku": "317040"}], "type": 1, "verify_key": "52c03a2122ce58935a2f359fbb40dd7a5068edbd5e62aaa5c5d70e98ebb88640"}, {"description": "A stealth and infiltration game, with elements of RPG. The game is a spin-off from Cyanide Studio's Of Orcs and Men featuring the goblin protagonist Styx.", "developers": [{"id": "521816537653444608", "name": "Cyanide Studio"}], "executables": [{"is_launcher": false, "name": "styxgame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9680245ef769f87136887c4e3ca27d98", "id": "504055375880912946", "name": "Styx: Master of Shadows", "publishers": [{"id": "521816537192202247", "name": "Focus Home Interactive"}], "splash": "c552d4d4f3c5b9e5762c5d9896ef6964", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "242640", "sku": "242640"}], "type": 1, "verify_key": "413033f84010c50648760bfacd9994855a3d8b7f139f5a2cd203f19b4d67df2a"}, {"description": "The first game in the SUGURI series.", "developers": [{"id": "521816753341333506", "name": "Orange_Juice"}], "executables": [{"is_launcher": false, "name": "suguri.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d542c96fea9abe6b488f2b8039abd52d", "id": "504055570483904522", "name": "Suguri", "publishers": [{"id": "521816753341333506", "name": "Orange_Juice"}], "splash": "14d37b6046139cea29168e7d239dc35b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "262240", "sku": "262240"}], "type": 1, "verify_key": "23e872af7116cd147e23ec572e4d13a049139737ad63cf6e4c9750693cb393ad"}, {"description": "The deadly futuristic sport of Monday Night Combat returned with a free-to-play sequel, bringing with it new combatants and environments. It was later discontinued on May 24, 2018.", "developers": [{"id": "521816559031812104", "name": "Uber Entertainment"}], "executables": [{"is_launcher": false, "name": "supermncgameclient.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "68dfef81edd08fd398b2bc1eaab3913b", "id": "504055809962147840", "name": "Super Monday Night Combat", "publishers": [{"id": "521816559031812104", "name": "Uber Entertainment"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "104700", "sku": "104700"}], "type": 1, "verify_key": "a3298707938e6f96dfb834803f838a0ed65e13aa938ee931f05e89bee3def33c"}, {"description": "Superbrothers: Sword & Sworcery EP is an adventure game from Capybara Games. As the Scythian, the player seeks the mysterious Megatome in a beautiful fantasy world rendered in a distinctive pixel art style. \"EP\" is a music reference; the soundtrack is part of the package and gameplay.", "developers": [{"id": "521816567030218768", "name": "Capy"}], "executables": [{"is_launcher": false, "name": "swordandsworcery_pc.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "818c8bc17bd76ccd14cd48b89a07edd8", "id": "504056145854464000", "name": "Superbrothers: Sword & Sworcery EP", "publishers": [{"id": "521816567030218768", "name": "Capy"}], "splash": "7c246216737b6e1d4b9e34d15b9cf320", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "204060", "sku": "204060"}], "type": 1, "verify_key": "775757cf5a50d2ff2d2edfd8c3803b325e26f9ec677cc92ee532556adf1b435a"}, {"description": "SURV1V3", "executables": [{"is_launcher": false, "name": "survive-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ae7d3e0737ccd8adde0e67de9819cfc9", "id": "504056431176056852", "name": "SURV1V3", "publishers": [{"id": "521816700715401236", "name": "Candymakers"}], "splash": "440e00568dd29605f84b4b323ca3456c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "722180", "sku": "722180"}], "type": 1, "verify_key": "0989393cba931989178456cb4d8c25afe301792ab6f349fdf7b215b96e6601ed"}, {"aliases": ["Swat 4", "Swat 4: The Stetchkov Syndicate"], "description": "SWAT 4 is a first-person tactical shooter that puts the player in command of a Special Weapons and Tactics team. The campaign consists of 13 deployments that range from simple warrant service to hostage situations involving heavily-armed terrorists, and it is the player's duty to minimize casualties on all sides.", "developers": [{"id": "521816521731735572", "name": "Irrational Games"}], "executables": [{"is_launcher": false, "name": "swat4.exe", "os": "win32"}, {"is_launcher": false, "name": "swat4x.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6b35aabbc1c730931b8e5a7bfae60f98", "id": "504056709015404544", "name": "SWAT 4", "publishers": [{"id": "521816549666062336", "name": "Sierra"}, {"id": "521816693094481942", "name": "Sierra Entertainment, Inc."}], "summary": "", "type": 1, "verify_key": "79055a48d0f1912ca05dfa5e18301edc0037c9e21d0f2ff40ec8b428efffeed2"}, {"description": "In the style of the classic Baldur's Gate games, Sword Coast Legends is an all new D&D-licensed party-based RPG set in the Forgotten Realms campaign setting.", "developers": [{"id": "521816678430933003", "name": "n-Space, Inc."}], "executables": [{"is_launcher": false, "name": "swordcoast.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "95386e56215102209722f121cd5c1167", "id": "504056938439507968", "name": "Sword Coast Legends", "publishers": [{"id": "521816584612872203", "name": "Digital Extremes"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "325600", "sku": "325600"}], "type": 1, "verify_key": "03af81cb818d564986a207cb70abc38988eef9e6296b54608a61089bdb9745d7"}, {"description": "The Sword of Asumi is a visual novel developed by AJTilley.", "developers": [{"id": "521816673855209493", "name": "AJTilley.com"}], "executables": [{"is_launcher": false, "name": "sword of asumi.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "330d56229917d02d729c1d847c1089e3", "id": "504057095109214247", "name": "Sword of Asumi", "publishers": [{"id": "521816673855209492", "name": "Dharker Studio"}], "splash": "778150781df7a90d3ac44289f0c6c3dc", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "326950", "sku": "326950"}], "type": 1, "verify_key": "47f90fc44c68b2a9dc5dd949583a7bd9abc9db2dd4f352061e11a7d2fc51046d"}, {"aliases": ["Synthetik"], "description": "A fast and brutal top-down shooter rogue-lite.", "developers": [{"id": "521816569152798720", "name": " Flow Fire Games"}], "executables": [{"is_launcher": false, "name": "synthetik.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "dd32a26f880b5ab128b3d9af307af2fb", "id": "504057233756389376", "name": "SYNTHETIK", "publishers": [{"id": "521816569152798720", "name": " Flow Fire Games"}], "splash": "4e5aaca4c283cfb2dda6de34e5374ff7", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "528230", "sku": "528230"}], "type": 1, "verify_key": "4ac03c4057867aa026dff77b621366daf2b39409856668646f5dc0d17d9f929a"}, {"description": "A simulation game from Bohemia Interactive", "developers": [{"id": "521816510172233760", "name": "Bohemia Interactive Studio"}], "executables": [{"is_launcher": false, "name": "tkom.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2626976801cd0d150793365367fd8976", "id": "504057417194143754", "name": "Take On Mars", "publishers": [{"id": "521816510172233760", "name": "Bohemia Interactive Studio"}], "splash": "42bfb519941ad322feb4c817400a9436", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "244030", "sku": "244030"}], "type": 1, "verify_key": "27e6a5eb07eca495ff2ea3faf1e5fdb29f2821f2b97535aa5a4212322791f8d8"}, {"description": "A spin-off of the Borderlands series of first-person shooters, Tales from the Borderlands is an episodic adventure game where a reluctant group of civilians try to strike it rich in the hostile world of Pandora.", "developers": [{"id": "521816542258790401", "name": "Telltale Games"}], "executables": [{"is_launcher": false, "name": "tales from the borderlands/borderlands.exe", "os": "win32"}, {"is_launcher": false, "name": "b24f49f9-d7fe-40b6-8f4d-65b0c6bf6a6b/borderlands.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f1217e5e0af6c05067815ab8e27e54f7", "id": "504057675286315028", "name": "Tales from the Borderlands", "publishers": [{"id": "521816542258790401", "name": "Telltale Games"}], "splash": "db4c51253450c83706c23ea98e63c6a9", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "twitch", "id": null, "sku": null}, {"distributor": "steam", "id": "330830", "sku": "330830"}], "type": 1, "verify_key": "e63f62a4c0c8e24b8694e4b710f7b432c96d60182926e84c90e9e7d1134fce60"}, {"description": "Previously known as Tales of Middle Earth, Tales of Maj'Eyal is a roguelike dungeon crawler with a heavy focus on cooldown-based abilities, randomized loot and tactical combat.", "developers": [{"id": "521816717291421728", "name": "DarkGod"}], "executables": [{"is_launcher": false, "name": "t-engine.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d54750bcda82ecb1fbf69183d3709635", "id": "504065891043115008", "name": "Tales of Maj'Eyal", "publishers": [{"id": "521816717291421728", "name": "DarkGod"}], "splash": "ec0d870d236a499d9bbcbbcd4792457b", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "259680", "sku": "259680"}], "type": 1, "verify_key": "6359f59540a3b1d267506addb5f02f755d3db6aa1f74adfd1e139b56cd38b1e3"}, {"aliases": ["Tales of Monkey Island: Chapter 1 - Launch of the Screaming Narwhal", "Tales of Monkey Island: Chapter 2 - The Siege of Spinner Cay", "Tales of Monkey Island: Chapter 3 - Lair of the Leviathan", "Tales of Monkey Island: Chapter 4 - The Trial and Execution of Guybrush Threepwood", "Tales of Monkey Island: Chapter 5 - Rise of the Pirate God"], "description": "Telltale resurrects the much-loved pirate adventure franchise with Tales of Monkey Island, a five-part episodic series continuing the adventures of Guybrush Threepwood, this being the first.", "developers": [{"id": "521816542258790401", "name": "Telltale Games"}], "executables": [{"is_launcher": false, "name": "monkeyisland104.exe", "os": "win32"}, {"is_launcher": false, "name": "monkeyisland102.exe", "os": "win32"}, {"is_launcher": false, "name": "monkeyisland103.exe", "os": "win32"}, {"is_launcher": false, "name": "monkeyisland101.exe", "os": "win32"}, {"is_launcher": false, "name": "monkeyisland105.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "32e598449c15ac224e379b85844b5119", "id": "504067053481754634", "name": "Tales of Monkey Island", "publishers": [{"id": "521816542258790401", "name": "Telltale Games"}], "splash": "2c2129b940d1beca82dd12f1fa1311ec", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "31170", "sku": "31170"}, {"distributor": "steam", "id": "31210", "sku": "31210"}, {"distributor": "steam", "id": "31180", "sku": "31180"}, {"distributor": "steam", "id": "31190", "sku": "31190"}, {"distributor": "steam", "id": "31200", "sku": "31200"}], "type": 1, "verify_key": "56c1caf98660ca81ef1571cbc298f19ac4b2247e6073a4272739d4422717aa8a"}, {"description": "The fifteenth flagship title in the long running Tales series.", "developers": [{"id": "521816537653444610", "name": "Bandai Namco Entertainment"}], "executables": [{"is_launcher": false, "name": "tales of zestiria.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f0ca2409b30f480c8cc7440fac31f5df", "id": "504070466948956160", "name": "Tales of Zestiria", "publishers": [{"id": "521816537653444610", "name": "Bandai Namco Entertainment"}], "splash": "9ee46ffdc33a5f013ddea007c768ba00", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "351970", "sku": "351970"}], "type": 1, "verify_key": "34d2e6045386b06148da2a55ab338134d939ce50c1ea48d83a5927ff5e8b74bf"}, {"description": "A racing game where you can run online with other people, own a farm, hang out at a park, and harvest your dreams.", "developers": [{"id": "521816620771835956", "name": "Rhaon Entertainment"}], "executables": [{"is_launcher": false, "name": "trgame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c1710673b38fbe2247c71c3a9d642e24", "id": "504071115799265280", "name": "Tales Runner", "overlay": true, "publishers": [{"id": "521816620771835955", "name": "OGPlanet"}], "splash": "700fc06271e68e7ce6da665e8cf872ed", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "328060", "sku": "328060"}], "type": 1, "verify_key": "9ca246df064fc719cf32fd81d52b0685e97e0bcc442f3452fc0fc80f01c2bb59"}, {"description": "", "developers": [{"id": "521816587586633731", "name": "Visual Concepts"}], "executables": [{"is_launcher": false, "name": "taskforce/binaries/win64/taskforce.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0561d08417fe89a122daa6137702340b", "id": "504071248888987676", "name": "Task Force", "publishers": [{"id": "521816779006279683", "name": "Britannica Software"}], "splash": "7f77a28c0303b0b98b927373c3443903", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "611300", "sku": "611300"}], "type": 1, "verify_key": "3ab454ced5f373956951558c8b915f27fbcfa9ccab11c0fbc9a34f008559de1c"}, {"description": "Tetris for a new generation, designed to celebrate the series' 30th anniversary.", "developers": [{"id": "521816759079010334", "name": "SoMa Play Inc."}], "executables": [{"is_launcher": false, "name": "tetrisultimate.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9713c722f19a66c9758b6a6170a54d8e", "id": "504071743963529226", "name": "Tetris\u00ae Ultimate", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "c0bb658af9a76f52d6ca0ee04952aa34", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "316750", "sku": "316750"}], "type": 1, "verify_key": "b9aebb3356259a7ad94496f6cb0ef842aed2c8166b03e4907eee6399a8a80f3e"}, {"description": "A Tetris variant for the CD-i.", "executables": [{"is_launcher": false, "name": "tetris.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d7e4a0ca7304c82a9ece5bc31e5cdabd", "id": "504071879993196544", "name": "Tetris", "publishers": [{"id": "521816759083204610", "name": "Philips Interactive Media, Inc."}], "summary": "", "type": 1, "verify_key": "02bb31bf41e2b4bb2f52d334f60245cf1581fe228405632ad7a3df732bc1f83c"}, {"description": "A narrative-focused video game from the creator of The Stanley Parable.", "developers": [{"id": "521816626203459612", "name": "Everything Unlimited Ltd."}], "executables": [{"is_launcher": false, "name": "beginnersguide.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5ec11808a2936febc928a481bdfe67f0", "id": "504073562785579018", "name": "The Beginner's Guide", "publishers": [{"id": "521816626203459612", "name": "Everything Unlimited Ltd."}], "splash": "b77253fe1bc054846fd4261e00c7784f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "303210", "sku": "303210"}], "type": 1, "verify_key": "63119b5cf56b1d9e288c80f67f917b66aaa0f3d11b08ba507951b2b750017c14"}, {"description": "Travel the continent of Tamriel, defend the land against Oblivion's Daedra hordes, and help fill the empty throne of Cyrodiil in the fourth installment of the Elder Scrolls series.", "developers": [{"id": "521816775248183304", "name": "4J Studios"}], "executables": [{"is_launcher": false, "name": "oblivion.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "022b2e346ba2e255104f532696075a33", "id": "504074409628401690", "name": "The Elder Scrolls IV: Oblivion", "overlay": true, "publishers": [{"id": "521816519768932355", "name": "Bethesda Game Studios"}, {"id": "521816504392482816", "name": "2K Games"}], "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "22330", "sku": "22330"}], "type": 1, "verify_key": "38fb533d27d0ff70f762ae60c2a28ada638e28dee5b720ff2fce60b952fe1592"}, {"description": "The Forgettable Dungeon is a dungeon crawler with inspiration from roguelikes, Zelda, and arcade brawlers.", "developers": [{"id": "521816637956161557", "name": "Happy Box Games"}], "executables": [{"is_launcher": false, "name": "forgettabledungeon.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7c4f9ea21a1e33b8f955da3cae0236e3", "id": "504075021677887541", "name": "The Forgettable Dungeon", "publishers": [{"id": "521816637956161556", "name": "Anthony Rotondo"}], "splash": "564393290bb52bb1904d95ca6eb12209", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "375810", "sku": "375810"}], "type": 1, "verify_key": "12a14402e7f7c6b5121b4117546c304628d9eb02552586a44ab514948452d660"}, {"aliases": ["The King Of Fighters 2002 Unlimited Match", "The King of Fighters 2002 Unlimited Match"], "description": "The King of Fighters 2002 Unlimited Match is an enhanced remake of the original KOF2002 that includes every character from the \"NESTS Saga.\"", "developers": [{"id": "521816564564230163", "name": "SNK"}], "executables": [{"is_launcher": false, "name": "kingoffighters2002um.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "777d9cc0fb17b3548d451e87626fd8e3", "id": "504075299877683230", "name": "THE KING OF FIGHTERS 2002 UNLIMITED MATCH", "publishers": [{"id": "521816564564230159", "name": "PLAZA"}, {"id": "521816564564230163", "name": "SNK"}], "splash": "7ff5c381f260fd10f60188dab4e551e0", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "222440", "sku": "222440"}], "type": 1, "verify_key": "7c6124a9b727382f6b76ba57ea7c0bf07896a259b4345231657383dad34a1994"}, {"description": "The Marvellous Miss Take is a stealth game from Wonderstruck.", "developers": [{"id": "521816519332855819", "name": "Wonderstruck"}], "executables": [{"is_launcher": false, "name": "misstake.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1b4f590a139e3e998c0ee6c4f313afd7", "id": "504076592218112047", "name": "The Marvellous Miss Take", "publishers": [{"id": "521816519332855818", "name": "Rising Star Games"}], "splash": "e0893b878158efdecd1fea8222785277", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "327310", "sku": "327310"}], "type": 1, "verify_key": "e3edc533d02b0a1a62ff588d744524c8de5f3463e7ead0b29e0f44b0371b167d"}, {"description": "The Park is a first person psychological horror game from the developers of The Secret World.", "developers": [{"id": "521816542258790405", "name": "Funcom Productions A/S"}], "executables": [{"is_launcher": false, "name": "thepark.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e1f4263083d52c98449a5bda5c77d80a", "id": "504076991759384596", "name": "The Park", "publishers": [{"id": "521816542258790405", "name": "Funcom Productions A/S"}], "splash": "7017c9d3483115a21d2f64184d742b92", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "402020", "sku": "402020"}], "type": 1, "verify_key": "caca99a7d3ecbf5c0794ce8eadba99298d99aaff85e1af7cdedd4033f154cceb"}, {"description": "A Japanese indie RPG developed by AlphaNuts about the adventures of a team of wannabe thieves.", "developers": [{"id": "521816772979195916", "name": "AlphaNuts"}], "executables": [{"is_launcher": false, "name": "the sacred tears true.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "cbd5b419571c813cac3a296a7de413a0", "id": "504077161246883850", "name": "The Sacred Tears TRUE", "publishers": [{"id": "521816772979195916", "name": "AlphaNuts"}], "splash": "6a37df5b92d00852f22d38f7644e52f4", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "316840", "sku": "316840"}], "type": 1, "verify_key": "67180e7fed093428bedf819cbed73e68caf48243a897a340c4216ad2e9063c94"}, {"description": "Developed by Funcom, The Secret World is an MMORPG influenced by ancient mythology and legend.", "developers": [{"id": "521816542258790405", "name": "Funcom Productions A/S"}], "executables": [{"is_launcher": false, "name": "thesecretworld.exe", "os": "win32"}, {"is_launcher": false, "name": "secretworldlegendsdx11.exe", "os": "win32"}, {"is_launcher": false, "name": "thesecretworlddx11.exe", "os": "win32"}, {"is_launcher": false, "name": "secretworldlegends.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f2b40a3c29990580c0ad7c4fb8d0b152", "id": "504077629175889923", "name": "The Secret World", "publishers": [{"id": "521816606318264330", "name": "Funcom"}, {"id": "521816542258790405", "name": "Funcom Productions A/S"}], "splash": "95de71900b941eb592fbd285b3ac187f", "summary": "", "third_party_skus": [{"distributor": "origin", "id": null, "sku": null}, {"distributor": "steam", "id": "215280", "sku": "215280"}], "type": 1, "verify_key": "63f29c929ba8f45a39fc2490c75e7351a39a6dfc49111e444ae075326cd40c44"}, {"description": "Settlers 7: Paths to a Kingdom is the seventh installment in this long running light real time strategy / kingdom management series.", "developers": [{"id": "521816707132555285", "name": "Ubisoft Blue Byte"}], "executables": [{"is_launcher": false, "name": "settlers7r.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "803f9fc8880e038ac471baa361dbcd1e", "id": "504078051358015516", "name": "The Settlers 7: Paths to a Kingdom", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "5513ec0f43d53bde36547d8f76b839a2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "48120", "sku": "48120"}], "type": 1, "verify_key": "062dc330b6edf41c13165422d74cf9f7d3023a3d0555cc85b754b9b8d835250c"}, {"description": "A modernization of the classic series which allows you to create bustling cities in which you can watch any settler go about their daily life interactions.", "developers": [{"id": "521816804323098635", "name": "4HEAD Studios"}], "executables": [{"is_launcher": false, "name": "settlers6.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9f7c2e860d7e43cd6c2aada8d410c4a5", "id": "504078174875942939", "name": "The Settlers: Rise of an Empire", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "splash": "8dcfde4572a6eb95c0fb77cd127ac191", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "15330", "sku": "15330"}], "type": 1, "verify_key": "6974b891c1a4a8f35825dca340c84f487aa4935669c2ff7f910d8dd28a181fd1"}, {"description": "An adventure game from The Astronauts \u2013 a development team comprised of People Can Fly veterans.", "developers": [{"id": "521816694352510978", "name": "The Astronauts"}], "executables": [{"is_launcher": false, "name": "astronautsgame-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "338a1d4724bbbe18f1b66892245b1084", "id": "504078553445302330", "name": "The Vanishing of Ethan Carter", "publishers": [{"id": "521816694352510978", "name": "The Astronauts"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "258520", "sku": "258520"}], "type": 1, "verify_key": "a34be85e3d08260c5e5b539f9bb2d6c1eb4880f064493061e7af2453a2879258"}, {"description": "", "executables": [{"is_launcher": false, "name": "ethancarter-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1a1fab23d631f74aa01150ecc623ebf5", "id": "504078762292543506", "name": "The Vanishing of Ethan Carter Redux", "publishers": [{"id": "521816694352510978", "name": "The Astronauts"}], "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "400430", "sku": "400430"}], "type": 1, "verify_key": "a2a17d7256c043de9181355bc4d046f97b29587c71e12edc4143baf8324fdd84"}, {"aliases": ["There Was A Caveman"], "description": "A prehistoric, retro-inspired, indie action platformer.", "developers": [{"id": "521816699008319495", "name": "Nauris Amatnieks"}], "executables": [{"is_launcher": false, "name": "therewasacaveman.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "cc94fbe8c42725319fc1b133f3edfd42", "id": "504079332512235573", "name": "There Was a Caveman", "publishers": [{"id": "521816699008319495", "name": "Nauris Amatnieks"}], "splash": "5bb2719fd99ace2ab212434830ccb45f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "407290", "sku": "407290"}], "type": 1, "verify_key": "fc4a5d8818bae989e3c7e4b095636bdf29402f535e71d217f10602b22124a963"}, {"aliases": ["Thomas was Alone"], "description": "An indie minimalist puzzle platformer.", "developers": [{"id": "521816692079329283", "name": "Curve Digital"}], "executables": [{"is_launcher": false, "name": "thomaswasalone.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "df7aced4f9afa2239148e6ed2de095f7", "id": "504079439726903336", "name": "Thomas Was Alone", "publishers": [{"id": "521816692079329283", "name": "Curve Digital"}], "splash": "a2c59608c351f70446ff0d438733f205", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "220780", "sku": "220780"}], "type": 1, "verify_key": "0ce9194d51c21cf6451d48d88cbd4e958d725f33dbce997409896d7b40fd8403"}, {"description": "TIS-100 is a programming puzzle game developed by Zachtronics.", "developers": [{"id": "521816702321819671", "name": "Zachtronics Industries"}], "executables": [{"is_launcher": false, "name": "tis100.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0f53ddfedd0ba403405e540caa9bab5c", "id": "504079649702412295", "name": "TIS-100", "publishers": [{"id": "521816562542313484", "name": "Zachtronics"}], "splash": "b6a6a7b61bddef996fc2b30668bd6492", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "370360", "sku": "370360"}], "type": 1, "verify_key": "c9dc0643ad1d142841addfd8a72cbe78208d72be860c3fcb9eb5f5cd20d82e1c"}, {"description": "The second title in the Tomb Raider franchise. Lara Croft races against the forces of Marco Bartoli in search of clues that will lead her to the Dagger of Xian, a powerful relic that allowed the Emperor of China to command his armies.", "developers": [{"id": "521816511178997818", "name": "Core Design Ltd."}], "executables": [{"is_launcher": false, "name": "tomb2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b2072b617738f0e9753ba2004cea52c9", "id": "504079864681332739", "name": "Tomb Raider II", "publishers": [{"id": "521816520817639456", "name": "Eidos Interactive"}], "splash": "071e3c6baa3bc9fc08cf7c2dcdee1392", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "225300", "sku": "225300"}], "type": 1, "verify_key": "89edd1e345f8628129c1e254cd647ffcc2b2daba28e3e400c012c7987fefd349"}, {"description": "The third game in the Tomb Raider series. Lara travels the world to find four meteorite stones.", "developers": [{"id": "521816511178997818", "name": "Core Design Ltd."}], "executables": [{"is_launcher": false, "name": "tomb3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "16455cc2edfca9ef9fadc2b1d2b9e6cc", "id": "504080259151298560", "name": "Tomb Raider III: Adventures of Lara Croft", "publishers": [{"id": "521816609518518283", "name": "Sold Out Sales & Marketing Ltd."}], "splash": "24f09b3f107d5f224dfc962df490ac17", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "225320", "sku": "225320"}], "type": 1, "verify_key": "a1a4dcba4db325b6061cac31922c014129c861d3fef773ad6ab369b76db4ea12"}, {"description": "Anniversary is a remake of the original Tomb Raider game, running in the engine from Tomb Raider: Legend. Join Lara Croft as she travels the world on her very first adventure all over again!", "developers": [{"id": "521816535753555988", "name": "Crystal Dynamics, Inc."}], "executables": [{"is_launcher": false, "name": "tra.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "865521656b13a4eecb24afb84bfd346e", "id": "504080427569643550", "name": "Tomb Raider: Anniversary", "publishers": [{"id": "521816520817639456", "name": "Eidos Interactive"}], "splash": "5358c9b7230e94fb7f9fcb1368cbc151", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "8000", "sku": "8000"}], "type": 1, "verify_key": "94769d479cef633e51bdd6459c8ea2d768dda5db79aa3ef722c805fb751cd6ea"}, {"description": "The fifth entry in the popular Tomb Raider series delves into Lara's past to reveal some of her previously unwitnessed adventuring exploits.", "developers": [{"id": "521816511178997818", "name": "Core Design Ltd."}], "executables": [{"is_launcher": false, "name": "pctomb5.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9048d4fdf1f95896c84e275fbec71701", "id": "504080609598111771", "name": "Tomb Raider: Chronicles", "publishers": [{"id": "521816511178997817", "name": "Aspyr Media, Inc."}], "splash": "d53e0e704a7a844cc5034fbcab29cc18", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "225000", "sku": "225000"}], "type": 1, "verify_key": "a8693949d1b891733b912d2b640a833ef0dcb7024e099df7ee68c9695b2ba1ed"}, {"description": "Lara travels across the world in search of a legendary artifact. Legend is the first entry in the 2006 reboot of the series and is the first Tomb Raider game developed by Crystal Dynamics after they took over the role from Core Design.", "developers": [{"id": "521816535753555988", "name": "Crystal Dynamics, Inc."}], "executables": [{"is_launcher": false, "name": "tomb raider legend/trl.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5196ffc80fa8bb244f6953b328571a12", "id": "504080831396970511", "name": "Tomb Raider: Legend", "publishers": [{"id": "521816520817639456", "name": "Eidos Interactive"}], "splash": "fa6bba4d301ee1648834c6728c9e4909", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "7000", "sku": "7000"}], "type": 1, "verify_key": "0aaf1aa65d2f1ba9c2e05c0c3ead4bfaf9698b53aad362ff1cf25bf65dd1c156"}, {"description": "When Lara Croft accidentally releases the Egyptian god Set, she must quickly find a way to entomb him once again before he unleashes the apocalypse.", "developers": [{"id": "521816511178997818", "name": "Core Design Ltd."}], "executables": [{"is_launcher": false, "name": "tomb4.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "170fb0e803327bf324e1911d3508b825", "id": "504081066848681984", "name": "Tomb Raider: The Last Revelation", "publishers": [{"id": "521816609518518283", "name": "Sold Out Sales & Marketing Ltd."}], "splash": "f0dc15384ab0daa2a40b6434eaf2b5f0", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "224980", "sku": "224980"}], "type": 1, "verify_key": "6ab9f4c5a7372aaccd0177150f8ecf087ead6f1751354650d20cf2a1d6b7c692"}, {"description": "With an improved graphics engine, Lara Croft is back and is looking better than ever. This time around she'll be going on an adventure to find the sacred Mayan underworld of Xibalba in Southern Mexico.", "developers": [{"id": "521816535753555988", "name": "Crystal Dynamics, Inc."}], "executables": [{"is_launcher": false, "name": "tru.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2043200d8266d5bdf10f6a8dcad5ffc6", "id": "504081253314723874", "name": "Tomb Raider: Underworld", "publishers": [{"id": "521816520817639456", "name": "Eidos Interactive"}], "splash": "3808ad77df2e32ba904c44e59bd8dc66", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "8140", "sku": "8140"}], "type": 1, "verify_key": "02e0535143c7a463bab5092ca84e6ef21e23019deaeccaf3fb2cb17dcadf910d"}, {"description": "Go from a local unknown to a superstar skater in the fifth installment of the Tony Hawk franchise, adding a new story mode, new tricks (including wallplanting and the ability to travel on foot), and enhanced character creation (including face mapping and trick creation).", "developers": [{"id": "521816545433878550", "name": "Neversoft Entertainment"}], "executables": [{"is_launcher": false, "name": "thug.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0df3c28623af69c1a8214e0b6fcab67c", "id": "504081569405730826", "name": "Tony Hawk's Underground", "publishers": [{"id": "521816501544550404", "name": "Activision"}], "summary": "", "type": 1, "verify_key": "9c3b4aa146308c01438c0c0c68442ba4aa00489d4b7a812da600c5e863908bd8"}, {"description": "Join Tony Hawk and his pro skater team as they try to beat Bam Margera's group of misfits in the over-the-top World Destruction Tour.", "developers": [{"id": "521816545433878550", "name": "Neversoft Entertainment"}], "executables": [{"is_launcher": false, "name": "thug2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b774f87a9a347cfc9f2f345d8e41fa36", "id": "504081807340470291", "name": "Tony Hawk's Underground 2", "publishers": [{"id": "521816548059643905", "name": "1C Company"}], "summary": "", "type": 1, "verify_key": "616b3257035600373c598de04e732313450bbb2a3c2fca2bf261ab8763a74082"}, {"description": "Trackday Manager is a simulation game where players take control of a manager of a racing team.", "developers": [{"id": "521816597569208329", "name": "Arctic Hazard Game Studio"}], "executables": [{"is_launcher": false, "name": "trackday manager.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a53bd1b5072523dfe70c714b21437c98", "id": "504082602848813087", "name": "Trackday Manager", "publishers": [{"id": "521816597569208326", "name": "Arctic Hazard Game Studio a/s"}], "splash": "712ae432e132b366a6bdce9100c15499", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "348030", "sku": "348030"}], "type": 1, "verify_key": "59571dcf769ca48557f1ec7b4ae85fc413a2f87f05e6b7a9782da12e7c2a6824"}, {"description": "", "executables": [{"is_launcher": false, "name": "transforbest.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": null, "id": "504082814350655518", "name": "TransforBest", "publishers": [{"id": "521816662723526657", "name": "TransforBest"}], "summary": "", "type": 1, "verify_key": "127c330148e8fb179761df3136709dd226b19d729e3c6fb7ace3dda1e30be0b9"}, {"description": "Triple Town is a match-three game by Spry Fox for iOS, Android, Kindle, and social networks such as Facebook and Google+. The game focuses on creating a town by matching objects of different types.", "developers": [{"id": "521816722127192064", "name": "Spry Fox"}], "executables": [{"is_launcher": false, "name": "tripletown.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "cfa3e10dae33bd68c5ec4f9182391461", "id": "504083025211162677", "name": "Triple Town", "publishers": [{"id": "521816722127192064", "name": "Spry Fox"}], "splash": "f32143fce9e6390803a7e269b13578f6", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "209950", "sku": "209950"}], "type": 1, "verify_key": "00ba758bee5f522f343a92950e7c7698992fc1f6ec5b655ff3fa9f1600f489f1"}, {"aliases": ["UNRAVEL"], "description": "A puzzle-platformer featuring a yarn cat, developed by Coldwood Interactive and published by Electronic Arts.", "developers": [{"id": "521816542707449858", "name": "Coldwood Interactive AB"}], "executables": [{"is_launcher": false, "name": "unravel.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "90062d8bca0e8f697f110b9ef7bf34c6", "id": "504084141319520299", "name": "Unravel", "publishers": [{"id": "521816542707449857", "name": "Coldwood Interactive"}, {"id": "521816499464306692", "name": "Electronic Arts"}], "summary": "", "type": 1, "verify_key": "43004338ac1535bd59f76fe516f998e2cc9492b30fbf303d35123dcc738aad46"}, {"description": "A multiplayer-focused spin-off of the 1998 first-person shooter Unreal, bringing a new assortment of gameplay options, weaponry, arenas, and playable characters.", "developers": [{"id": "521816615457783818", "name": "Epic Games"}], "executables": [{"is_launcher": false, "name": "unrealtournament.exe", "os": "win32"}], "flags": 0, "guild_id": "109891165154738176", "hook": true, "icon": "3b530bfa987a9bf6834fca0112df054c", "id": "504084447797313537", "name": "Unreal Tournament", "publishers": [{"id": "521816543777128455", "name": "GT Interactive Software Corp."}], "summary": "", "type": 1, "verify_key": "e3bab92bbbe5d13aa1c4d659a6e64b9899976739de216963e59dff4cf8236dbf"}, {"aliases": ["Unreal Tournament 3: Black Edition"], "description": "The third main installment of the fast-paced arena-based first-person shooter brings its futuristic world to the Unreal Engine 3 game engine while adding a grimy aesthetic and a new story-based single-player campaign (involving a crew of mercenaries set out to avenge their fallen colony against the Necris).", "developers": [{"id": "521816615457783818", "name": "Epic Games"}], "executables": [{"is_launcher": false, "name": "ut3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8ec2190491678d56dfd1c8f0f89dc76d", "id": "504084581989744679", "name": "Unreal Tournament 3", "publishers": [{"id": "521816519332855821", "name": "Epic Games, Inc."}, {"id": "521816523954978816", "name": "Midway Games"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "13210", "sku": "13210"}], "type": 1, "verify_key": "aa7bc0c5f93105503961f52d05eafda11acb58c0766df5d771eb8742f835f7b8"}, {"description": "Take on the role of a hacker in the year 2010.", "developers": [{"id": "521816530397298691", "name": "Introversion Software Limited"}], "executables": [{"is_launcher": false, "name": "uplink.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ca0ea1c6f009683df500f4496a440ee1", "id": "504085139983433774", "name": "Uplink", "publishers": [{"id": "521816534205857810", "name": "Ambrosia Software, Inc."}], "splash": "194bb81e72ca0f0b88090686ab75047d", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "1510", "sku": "1510"}], "type": 1, "verify_key": "d9aa07c6a3745ba11526d08f1da41cd238063c309a279d59fcdc1235330bfa58"}, {"aliases": ["War For the Overworld"], "description": "War for the Overworld is an RTS god game where players command a dungeon. It was inspired by games like Dungeon Keeper, Overlord, StarCraft and Evil Genius.", "developers": [{"id": "521816688073637899", "name": "Subterranean Games"}], "executables": [{"is_launcher": false, "name": "wftogame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "69b033f8abfe5f35dbcca650ba21a6e0", "id": "504085687155425286", "name": "War for the Overworld", "publishers": [{"id": "521816688073637899", "name": "Subterranean Games"}], "splash": "fdba269f18cfa6d9a6390a49099ec2ff", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "230190", "sku": "230190"}], "type": 1, "verify_key": "1aa3a373471ee32fba9b56a34b3a8acc7f90b2d5a11837645c7a53160cb473fe"}, {"description": "Warsow is a free FPS, focusing on fast, competitive online play. Combining a featherweight engine with cartoony, celshaded graphics, this open source game could produce some of the fastest gameplay you will ever see.", "executables": [{"is_launcher": false, "name": "warsow_x86.exe", "os": "win32"}, {"is_launcher": false, "name": "warsow_x64.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a081ae638eb6e9f69da667650c96420c", "id": "504086535079985181", "name": "Warsow", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}], "type": 1, "verify_key": "3a0e61d5eb8f152f881fd8a187f1d2f983ad3257275167bcc9ed66d40b227a2d"}, {"description": "A Kickstarter-funded platformer that utilizes movement inspired by Super Smash Bros. Melee.", "developers": [{"id": "521816787952599061", "name": "rologfos"}], "executables": [{"is_launcher": false, "name": "waveland.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b760863b41ee7bdd56d26cb867d0f167", "id": "504086615132733450", "name": "WaveLand", "publishers": [{"id": "521816787952599061", "name": "rologfos"}], "splash": "1727318af7705bb8c9748ded756706d4", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "532170", "sku": "532170"}], "type": 1, "verify_key": "fb6ac8d8f8cb7c57881e8328baf7b1bf20c3f95aa1c13818b84b14922d5a8f00"}, {"description": "Wings of Vi is a platformer developed by Grynsoft.", "developers": [{"id": "521816616028078090", "name": "Grynsoft"}], "executables": [{"is_launcher": false, "name": "wings of vi.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "93d38dcac8480f7348d74b7330a1b4b8", "id": "504086961498226688", "name": "Wings of Vi", "publishers": [{"id": "521816616028078090", "name": "Grynsoft"}], "splash": "0a76e674bcd481989e5ee32a2e8f316a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "318530", "sku": "318530"}], "type": 1, "verify_key": "8c9bba037837617420510fd6aa6d5e45c889ba371dd0035d04aafc869be679b5"}, {"description": "A standalone expansion and prequel to the 2014 game Wolfenstein: The New Order, loosely recreating the story in Return to Castle Wolfenstein.", "developers": [{"id": "521816549666062338", "name": "MachineGames"}], "executables": [{"is_launcher": false, "name": "wolfoldblood_x32.exe", "os": "win32"}, {"is_launcher": false, "name": "wolfoldblood_x64.exe", "os": "win32"}, {"is_launcher": false, "name": "wolfoldblood_x86.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ff688030301f350ee49b94f77c787d4c", "id": "504087375618506772", "name": "Wolfenstein: The Old Blood", "publishers": [{"id": "521816549666062338", "name": "MachineGames"}, {"id": "521816500508819469", "name": "Bethesda Softworks"}], "splash": "5e4738e51c7900b8d2b6675a5412146a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "350080", "sku": "350080"}], "type": 1, "verify_key": "d621b6d0c994be0ebeb4a0eb6ba8e57648a77add2f42e5964f3c3a850d0d3de7"}, {"description": "A supercharged mini-golf game set in outer space.", "developers": [{"id": "521816512512786452", "name": "Rightstick Studios"}], "executables": [{"is_launcher": false, "name": "wonder wickets.exe", "os": "win32"}, {"is_launcher": false, "name": "wonderwickets-release.exe", "os": "win32"}], "flags": 0, "guild_id": "272207804297773068", "hook": true, "icon": "dcb35c42f5e9c1fbe2126d80c82e2f57", "id": "504087681635188766", "name": "Wonder Wickets", "publishers": [{"id": "521816512512786448", "name": "ANIM\u2022ACE"}], "splash": "aa2752f7c642fc133ae595354a2ca63f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "598640", "sku": "598640"}], "type": 1, "verify_key": "627f4e92bcbd58e691385d172ddd90c495898fb52baf0718ac42f0e2b6332e78"}, {"description": "X-Plane 11 is a flight simulator.", "developers": [{"id": "521816566007070781", "name": "Laminar Research"}], "executables": [{"is_launcher": false, "name": "x-plane.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7d569e4995bfb134d999e58b67293114", "id": "504087790032650290", "name": "X-Plane 11", "publishers": [{"id": "521816566007070781", "name": "Laminar Research"}], "splash": "d597d408ffe238ebddecab7894a23cdb", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "269950", "sku": "269950"}], "type": 1, "verify_key": "844930cd051bb23f04e7cc4b0b1fb614bff5d28a76a06de8a27b50505ea3a6a4"}, {"description": "A \"strategic planetary defense simulation\" in a cold war setting, inspired by the original X-Com.", "developers": [{"id": "521816509111336962", "name": "Goldhawk Interactive"}], "executables": [{"is_launcher": false, "name": "xenonauts.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d29b9292ff3927b280d54268f53db123", "id": "504088140139462686", "name": "Xenonauts", "publishers": [{"id": "521816509111336962", "name": "Goldhawk Interactive"}], "splash": "6f0a8a4d496639863a9513706025fb08", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "223830", "sku": "223830"}], "type": 1, "verify_key": "3e05e64b57ae710ce5a30cfb9af74322b63ff64c8c666b0a1287ba010ee07625"}, {"description": "", "executables": [{"is_launcher": false, "name": "zandronum.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": null, "id": "504088311594483722", "name": "Zandronum", "publishers": [{"id": "521816539087896600", "name": "Zandronum"}], "summary": "", "type": 1, "verify_key": "db411e5b860d3566ef014f21931e28f9765b24f0c25287fe69be185c71de56c7"}, {"aliases": ["Zombi"], "description": "A first-person survival horror game set in London during a modern-day zombie apocalypse. As a launch title for the Wii U, it features extensive use of the system's GamePad.", "developers": [{"id": "521816592674193443", "name": "Ubisoft Montpellier Studios"}], "executables": [{"is_launcher": false, "name": "zombi.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b9cd242715c296a9da80542a1f747183", "id": "504088792223842314", "name": "ZOMBI", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}, {"id": "521816510730338325", "name": "Ubisoft"}], "splash": "db27f92ccd164f6c158a12b4ba8dfa05", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "339230", "sku": "339230"}, {"distributor": "uplay", "id": "1653", "sku": "1653"}], "type": 1, "verify_key": "47dfd96e813f799f6c5234b10afdc4812118d9340948200ff354ee1352a7ab5e"}, {"description": "A Free 2 Play Gears of War-style game for PC.", "developers": [{"id": "521816616028078096", "name": "Epic Games China"}], "executables": [{"is_launcher": false, "name": "zmr/unrealengine3/binaries/win32/marsgame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9cfb11762ffd856aaf65e1e88b9fcd1d", "id": "504089133900103714", "name": "Zombies Monsters Robots", "publishers": [{"id": "521816616028078094", "name": "En Masse Entertainment"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "306830", "sku": "306830"}], "type": 1, "verify_key": "8c975bc193babfd9fcf2647d24f65111510938cc927e4f0b01f48b5d15e4bb18"}, {"description": "MMORPG set in ancient China.", "executables": [{"is_launcher": false, "name": "9dragons/rfstl.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e70e4e6205ba9e56870cc6ebaaad0842", "id": "504399459426369587", "name": "9Dragons", "publishers": [{"id": "521816780826607616", "name": "JoongWon Games"}], "splash": "de96caa88e1fe3fa499be8513efb847a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "390100", "sku": "390100"}], "type": 1, "verify_key": "35d4d38d89d5a9a245359830afbcd8b3b4f4101befb73ca90b735de97af1573a"}, {"description": "", "executables": [{"is_launcher": false, "name": "age of wushu/bin/fxgame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": null, "id": "504422264599609344", "name": "Age of Wushu", "publishers": [{"id": "521816522302423051", "name": "Snail Games USA"}], "summary": "", "type": 1, "verify_key": "15d117d73dbc9739fa3f38308a6cae6d7cb0910ed1dccfd6bf025826b8b73cee"}, {"description": "When famous novelist Alan Wake goes on vacation with his wife Alice, he has no idea that the idyllic town of Bright Falls will soon be the site of a terrible battle between light and dark that could threaten everything, even Wake's own sanity.", "developers": [{"id": "521816609518518282", "name": "Remedy Entertainment Ltd."}], "executables": [{"is_launcher": false, "name": "alanwake.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "273bfc2d59f648f5185783dd9eedad84", "id": "504423339104796672", "name": "Alan Wake", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}], "splash": "fa5b0f2dc5d37d0b97118af8a871dd03", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "108710", "sku": "108710"}], "type": 1, "verify_key": "8917abeee57929e8095f49cecaeff5b4f45aff90ef5f6d9a6cf56827cbcf93b8"}, {"aliases": ["Argentum"], "description": "Argentum Online is an open source 2-D Massively Multiplayer Online RPG.", "executables": [{"is_launcher": false, "name": "argentum.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "27cc1f9343e9c94e8e59804eb1395045", "id": "504424067877699614", "name": "Argentum Online", "summary": "", "type": 1, "verify_key": "10fd20862d2f1eebf35151bc9f0d4aa290cf1df534721774ae96a43cf8c7ba03"}, {"aliases": ["Azure Striker"], "description": "A 2D sidescrolling action game developed by Inti Creates under direction by Yoshihisa Tsuda, designer of Mega Man Zero 2 and 3, for the Nintendo 3DS eShop.", "developers": [{"id": "521816667756560387", "name": "Inti Creates Co., Ltd."}], "executables": [{"is_launcher": false, "name": "azure striker gunvolt/exe/gv_win.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "86a7fe6bce094acac6a3c1ccf94d1e84", "id": "504426985305538600", "name": "Azure Striker Gunvolt", "publishers": [{"id": "521816667756560387", "name": "Inti Creates Co., Ltd."}], "splash": "6a37eca58a55cb813adf89cf7c227dfb", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "388800", "sku": "388800"}], "type": 1, "verify_key": "e028901d30380026c6118568723acb55c18faac9e78d56020358335dbd402dfa"}, {"aliases": ["Allegiance"], "description": "Allegiance is a hybrid RTS/action space sim originally developed by Microsoft Research Games, made open source in 2004 and now completely free and community-maintained. The game features 2 or more teams building bases and dogfighting it out with a variety of ships over multiple star sectors.", "developers": [{"id": "521816598017867788", "name": "Microsoft Research Games"}], "executables": [{"is_launcher": false, "name": "allegiance.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9e47f6f6fa1ab144fa4b6eb93b748e19", "id": "504444177413701632", "name": "Microsoft Allegiance", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}], "splash": "1a60053a29fa2ba53ab49ab36f19904a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "700480", "sku": "700480"}], "type": 1, "verify_key": "328fc69dc8f23b51bf351a0044e78d0eb5436164f40787ef15de58cb42552931"}, {"description": "", "developers": [{"id": "521816520267923475", "name": "Adult Swim Games"}], "executables": [{"is_launcher": false, "name": "shodn.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "169e61d5edc4fc8198a865cd087d3425", "id": "504468643384524800", "name": "Super House of Dead Ninjas", "primary_sku_id": "504468643384524800", "publishers": [{"id": "521816710106447877", "name": "Megadev"}], "slug": "super-house-of-dead-ninjas", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "224820", "sku": "224820"}, {"distributor": "discord", "id": "504468643384524800", "sku": "504468643384524800"}], "type": 1, "verify_key": "1dd97baa669d18b960e6742e888fb1c3dc7a443357e441f7c296561058bb7900"}, {"description": "", "executables": [{"is_launcher": false, "name": "aseprite.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0553b1f1dea19ec0d0cc1bf7d3614330", "id": "504605035162763294", "name": "Aseprite", "publishers": [{"id": "521816766163451905", "name": "David Capello"}], "splash": "95276a90e70b699d0455fc548f84123d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "431730", "sku": "431730"}], "type": 1, "verify_key": "6b2abe16e836d6c846dee93dc30a9880ed714962a9678f5664e999a1183eb049"}, {"cover_image": "499a4bdddcfd046e862d30e2041e0cbd", "description": "From the creators of Rogue Legacy comes a \"true-cooperative\" action RPG. FULL METAL FURIES puts an emphasis on team play with a unique combat system where everyone is important. Work together to defeat special enemies, string organics combos to deal massive damage, and save a wartorn world that is battling itself to extinction.", "developers": [{"id": "521816517071994890", "name": "Cellar Door Games"}], "executables": [{"is_launcher": false, "name": "full metal furies/brawler2d.exe", "os": "win32"}], "flags": 0, "guild_id": "403607175638941706", "hook": true, "icon": "4c7ef2b100ed7e3cd6ce96fdb8cd6f26", "id": "504743823281487882", "name": "Full Metal Furies", "primary_sku_id": "504743823281487882", "publishers": [{"id": "521816517071994890", "name": "Cellar Door Games"}], "slug": "full-metal-furies", "splash": "10e0a780ee213f06554173b6e270520d", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "504743823281487882", "sku": "504743823281487882"}, {"distributor": "steam", "id": "416600", "sku": "416600"}], "type": 1, "verify_key": "c454a6be51f360e2390e3050e45a9549afe01b392bacfebe3436099551b28a45"}, {"aliases": ["Ao no Kanata no Four Rhythm"], "description": "Ao no Kanata no Four Rhythm is a visual novel developed by Japanese developer sprite for the PC, PlayStation Vita, PS4 and Switch. The story follows Hinata Masaya who, as a child, loved the sky sport Flying Circus but after suffering a terrible defeat he loses all motivation for it. Years later he regains his passion after meeting a new transfer student whom he agrees to train in Flying Circus.", "developers": [{"id": "521816556720619544", "name": "sprite"}], "executables": [{"is_launcher": false, "name": "\u84bc\u306e\u5f7c\u65b9\u306e\u30d5\u30a9\u30fc\u30ea\u30ba\u30e0.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ac6f4828ebbd41f5971f8ebf2846ac37", "id": "504764773167136768", "name": "\u84bc\u306e\u5f7c\u65b9\u306e\u30d5\u30a9\u30fc\u30ea\u30ba\u30e0", "publishers": [{"id": "521816556720619544", "name": "sprite"}], "summary": "", "type": 1, "verify_key": "1b470d5877ae580ff928e7cb7d9fb6008ed1428fa0aa23cf1ed4d7c20d3a1c1b"}, {"aliases": ["Avalon Lords"], "description": "Avalon Lords: Dawn Rises is the prequel RTS to the MMO Avalon Lords.", "developers": [{"id": "521816799411568645", "name": "Animus Interactive"}], "executables": [{"is_launcher": false, "name": "avalonlords.app", "os": "darwin"}, {"is_launcher": false, "name": "avalonlords.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "88691df2e73b6793cb6ca05ae298c0d5", "id": "504765148481716224", "name": "Avalon Lords: Dawn Rises", "publishers": [{"id": "521816799411568643", "name": "Animus Interactive Inc"}], "splash": "cf6efc01423b08c336b8563097033dbc", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "329280", "sku": "329280"}], "type": 1, "verify_key": "deec97a46c9ce1a1db6f19d6e5dc74489f8fd1145d4755662c2d21a2d68d056b"}, {"aliases": ["BlackShot SEA", "Blackshot SEA"], "description": "", "executables": [{"is_launcher": false, "name": "blackshot.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0332603516e59e5a7260fd241e6a3fc0", "id": "504767731825115176", "name": "BlackShot: Mercenary Warfare FPS", "publishers": [{"id": "521816725793275925", "name": "Vertigo Games America"}], "splash": "5cbc125c4c454c7165b92c4cbacc20aa", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "433350", "sku": "433350"}], "type": 1, "verify_key": "4e3d4cdf6f71bf5433c00c533921737d8c17d95c2c4ba3b2728377fb0c2d413d"}, {"aliases": ["BlazBlue Continuum Shift Extend"], "description": "Yet another updated version of \"BlazBlue Continuum Shift\", this time for the PS Vita, PS3 & Xbox 360. Features a new playable character and additional features.", "developers": [{"id": "521816536743149599", "name": "Arc System Works Co., Ltd."}], "executables": [{"is_launcher": false, "name": "bbcse.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e51f28df7d7fc94b2d8cd1dd7023f045", "id": "504768003469082655", "name": "BlazBlue: Continuum Shift Extend", "publishers": [{"id": "521816553080094726", "name": "H2 Interactive Co. Ltd."}], "splash": "224c994d938dd41ba8aa39bbff6f21f2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "294810", "sku": "294810"}], "type": 1, "verify_key": "c25fbb23f6a47d938784ac548c488c8619b24d35d986bc1c65a21351f91aeb46"}, {"description": "", "executables": [{"is_launcher": false, "name": "blobby.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5d9deaf7f7e6fc087554404b968d10ca", "id": "504768329651585035", "name": "Blobby Volley 2", "summary": "", "type": 1, "verify_key": "66a661c8399e5bf0418b464ccaf505eb776704374a4513a37978dd631c4db674"}, {"description": "Explore, build, fight and survive the universe of Boundless. A new voxel MMORPG sandbox built and shaped by real players. Explore the vast universe as different character races. Mine, gather, craft weapons and equipment. Claim land, start a guild, amass gold, power and become loved\u2026 or feared.", "developers": [{"id": "521816519332855819", "name": "Wonderstruck"}], "executables": [{"is_launcher": false, "name": "boundless.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f5c24d5ff325b3766a569ac00648e5b3", "id": "504768467724140544", "name": "Boundless", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}], "splash": "07c9758e9c7ba909cf17ce3c13270f96", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "324510", "sku": "324510"}], "type": 1, "verify_key": "587e48ca1ef40900c1bbf97c19ef0bf30c12e9bc6319212ccfc404ce770be445"}, {"description": "", "executables": [{"is_launcher": false, "name": "cabal2main.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "80d328af02b693388504d24f00d1cd7a", "id": "504769131615223838", "name": "Cabal 2", "summary": "", "type": 1, "verify_key": "d257d32388b3c282c6a85ce74f12d5ee2b506f04ddcc14e6761ea649c8caf848"}, {"description": "", "executables": [{"is_launcher": false, "name": "cataclysm-tiles.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "277cf985b427b54596fbc59d40e959bc", "id": "504785474901114920", "name": "Cataclysm: Dark Days Ahead", "publishers": [{"id": "521816697448038410", "name": "Cataclysm DDA"}], "summary": "", "type": 1, "verify_key": "abc0df25edf2f9833286fa46c25d0f4ed09a7d9250d8dea27d102bf370edce7c"}, {"aliases": ["Chaos Code: New Sign of Catastrophe"], "description": "An updated version of Chaos Code featuring a number of balance tweaks and additional characters.", "developers": [{"id": "521816676644159500", "name": "FK Digital"}], "executables": [{"is_launcher": false, "name": "chaoscode_nsoc/chaoscode.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "04a7ff062dc7b92f06219c6d9fc1fb62", "id": "504788636525395998", "name": "CHAOS CODE -NEW SIGN OF CATASTROPHE-", "publishers": [{"id": "521816676644159500", "name": "FK Digital"}], "splash": "71de7546f3b04aeec45d8525114125c8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "536560", "sku": "536560"}], "type": 1, "verify_key": "f9407d759b2a5492eeb1c3fb1d06b2ada1defd6c4a346764fc144bd295d53b95"}, {"aliases": ["Chronicle - Runescape Legends"], "description": "A collectible card game set in the same universe as Runescape. The game shut down on August 6th, 2018.", "developers": [{"id": "521816499950714881", "name": "Jagex Ltd."}], "executables": [{"is_launcher": false, "name": "chronicle.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7f11c02a1c8aef3d9afdd4317de374c9", "id": "504790398984781834", "name": "Chronicle: RuneScape Legends", "publishers": [{"id": "521816499950714881", "name": "Jagex Ltd."}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "205890", "sku": "205890"}], "type": 1, "verify_key": "2bf846f4b84799f094d3cb764511422595d05bfb9d6f8d8ad9163e3fb7a111c1"}, {"aliases": ["Combat Mission: Black Sea"], "description": "Battlefront.com's latest entry in the Combat Mission modern warfare simulator depicts a 2017 conflict between NATO and Russia.", "developers": [{"id": "521816536743149596", "name": "Battlefront.com"}], "executables": [{"is_launcher": false, "name": "cm black sea.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "74cf375f6e6d371ca7e8503cab69af56", "id": "504801397825470464", "name": "Combat Mission Black Sea", "publishers": [{"id": "521816536743149596", "name": "Battlefront.com"}], "summary": "", "type": 1, "verify_key": "a7b04fe2b9cdfa10689e1a93ac191e8da77467cd6484b39a772353e61158dcd6"}, {"aliases": ["Combat Mission: Shock Force"], "description": "Battlefront.com enters the 21st century with Combat Mission: Shock Force. This tactical wargame is set in a hypothetical war between NATO forces and Syria.\n", "developers": [{"id": "521816536743149596", "name": "Battlefront.com"}], "executables": [{"is_launcher": false, "name": "cm shock force.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1e5cfcc7ccdd23610356c14a345e4f0f", "id": "504801527219617808", "name": "Combat Mission Shock Force", "publishers": [{"id": "521816521249521702", "name": "Paradox Interactive AB"}], "summary": "", "type": 1, "verify_key": "8b0113b1137c473d9799243ad988ea1aef454ed435723a296af716a48d3e94ce"}, {"aliases": ["Command & Conquer: Red Alert 2"], "description": "Take command of Yuri's devastating army in his goal of total domination with the official expansion pack of Command & Conquer: Red Alert 2.", "developers": [{"id": "521816745099395084", "name": "Westwood Studios, Inc."}], "executables": [{"is_launcher": false, "name": "gamemd.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "390c280b69114d0325498eac5fec078c", "id": "504801959954612274", "name": "Command & Conquer\u2122 Red Alert 2 and Yuri\u2019s Revenge", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "summary": "", "type": 1, "verify_key": "24f3dead087f8f532e4e109af451934dbc173d15b7c822c5a987a7ff5f190983"}, {"aliases": ["Command: Modern Air/Naval Operations"], "description": "", "executables": [{"is_launcher": false, "name": "command modern air naval operations/command.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "88df384b95162fdfbdbc31fc3cd99848", "id": "504802253413154846", "name": "Command: Modern Air / Naval Operations WOTY", "publishers": [{"id": "521816770797895695", "name": "WarfareSims"}], "splash": "a4774d6686ad948c31ffa9718c081ee4", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "321410", "sku": "321410"}], "type": 1, "verify_key": "85daf27058505f633520aca7e862a89e88525ec7622fffe114f65016e966f3f0"}, {"description": "Space-themed tower defence game.", "developers": [{"id": "521816757044772876", "name": "16bit Nights"}], "executables": [{"is_launcher": false, "name": "cosmic dust & rust/cosmic.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "dd6ed9795b016f0d5b91ef16731b2e6e", "id": "504802641763762176", "name": "Cosmic Dust & Rust", "publishers": [{"id": "521816757044772875", "name": "Back To Basics Gaming"}], "splash": "3c79fa026efe742e59c9c0e9b2b320f2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "473560", "sku": "473560"}], "type": 1, "verify_key": "59ebe98482641aebe14bc6df5903272cfb7072908140a9bdf9d7d4c965b4249f"}, {"aliases": ["Cosmic Break"], "description": "A mech battle MMO from Japan", "developers": [{"id": "521816514630778884", "name": "CyberStep"}], "executables": [{"is_launcher": false, "name": "cosmic.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b318928941bd2d5c58efe4b874f38dd3", "id": "504802978784346122", "name": "CosmicBreak", "publishers": [{"id": "521816514630778884", "name": "CyberStep"}], "summary": "", "type": 1, "verify_key": "13ed5bb64b2ea24286493f9e16442545fd8af553b60dc915b918f3a335ac311b"}, {"aliases": ["Cosmic Break 2"], "description": "", "executables": [{"is_launcher": false, "name": "cosmicbreak2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a7c236728816d95b08a59416d0d9135e", "id": "504803174880903188", "name": "CosmicBreak2", "publishers": [{"id": "521816589050445825", "name": "CyberStep, Inc."}], "summary": "", "type": 1, "verify_key": "bf9467427ac59c9d06c689178e1f0cfa3fde0b9ad8340b16e29913c0f8cf4500"}, {"aliases": ["Cosmic League"], "description": "", "executables": [{"is_launcher": false, "name": "cosmicleague.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "bd98b2d9172e2933caccac995b4e389f", "id": "504803374613528600", "name": "CosmicLeague_US", "publishers": [{"id": "521816589050445825", "name": "CyberStep, Inc."}], "summary": "", "type": 1, "verify_key": "5e97e935800d34478a9f7f93b3705849ef54d8adbb3e1376d19e0310d7a8033f"}, {"aliases": ["Creeper World 2: Redemption"], "description": "Eschewing the top-down perspective of its predecessor, Creeper World 2 remains a strategy title where the main enemy is a deadly fluid flowing around the map.", "developers": [{"id": "521816577876951046", "name": "Knuckle Cracker"}], "executables": [{"is_launcher": false, "name": "creeper world 2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1a9ca691dea8708d42661f7e8a33f7e2", "id": "504803589898633216", "name": "Creeper World 2", "publishers": [{"id": "521816577876951046", "name": "Knuckle Cracker"}], "summary": "", "type": 1, "verify_key": "ced63c0b63f18ff55eb53343fd6190c49c2da868d2e5d57a31e082815ea4207c"}, {"aliases": ["Carrier Command Gaea Mission"], "description": "A sequel to the classic 1988 strategy game Carrier Command, Gaea Mission is based on the second book of the Gaea Universe trilogy and is licensed and endorsed by the creators of the original game.", "developers": [{"id": "521816510172233760", "name": "Bohemia Interactive Studio"}], "executables": [{"is_launcher": false, "name": "carrier.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6d867faa340110ca9dbec14dc697f445", "id": "504824168861270033", "name": "Carrier Command: Gaea Mission", "publishers": [{"id": "521816519332855818", "name": "Rising Star Games"}], "splash": "2c9d9b62241667b4b8de7c30bbec093e", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "65740", "sku": "65740"}], "type": 1, "verify_key": "6d1ceeb9e2b65e4827cdc77fb1d2396a27146f3e04acd90e73eb4aaec1c897b9"}, {"aliases": ["Demul"], "description": "", "executables": [{"is_launcher": false, "name": "demul.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3c2842a851e51dba9339aba5073fe7c6", "id": "505116958086266920", "name": "Demul version 0.5.6.3", "summary": "", "type": 1, "verify_key": "bed6459bc33320d42584caa2d16a3de9856c8e06b2b8b74af37c0cd2324b5919"}, {"aliases": ["Desert of Kharak"], "description": "A Sci-Fi strategy game by Blackbird Interactive; a Canadian studio made up of ex-Relic Entertainment developers and creators of the Homeworld franchise.", "developers": [{"id": "521816607408914451", "name": "Blackbird Interactive"}], "executables": [{"is_launcher": false, "name": "desertsofkharak64.exe", "os": "win32"}, {"is_launcher": false, "name": "desertsofkharak32.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "cf339162c1dad67ac4050dfaa624fc0c", "id": "505117107097174062", "name": "Homeworld: Deserts of Kharak", "publishers": [{"id": "521816607408914450", "name": "Gearbox Software LLC"}], "splash": "f3b3413ee55ff8fc890295ca60e25344", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "281610", "sku": "281610"}], "type": 1, "verify_key": "f7d83d1127c5e19a8e7564bc6e565effd0d264e1dcc56cb7ea07595f8f2daed6"}, {"aliases": ["Disgaea "], "description": "", "executables": [{"is_launcher": false, "name": "disgaea pc/dis1_st.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2a9b3219af09780f1fb8ad846c5a82a9", "id": "505123261546496000", "name": "Disgaea PC", "publishers": [{"id": "521816533270396929", "name": "Nippon Ichi Software, Inc."}], "splash": "79b77b103e5b9732f6de4de1b1fc978a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "405900", "sku": "405900"}], "type": 1, "verify_key": "eee4f019173d10a0f655d57e2379de1f9208f901f55679cb7231e408f0629040"}, {"aliases": ["Disney Infinity"], "description": "", "executables": [{"is_launcher": false, "name": "disneyinfinity3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "40680402d07ba6cad44390a4eced90c5", "id": "505123562756112405", "name": "Disney Infinity 3.0: Gold Edition", "publishers": [{"id": "521816591139078166", "name": "Avalanche Software"}], "splash": "99a917c5cf6451df468ad3e3485f310b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "541670", "sku": "541670"}], "type": 1, "verify_key": "eba6dab61002a821f8514cc1934b44733d26c2ce3236fe7bf2153f57f4b348af"}, {"description": "", "executables": [{"is_launcher": false, "name": "disneyinfinity2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5330eb25e9edb0343bf9b3ede7af9c88", "id": "505123882232053810", "name": "Disney Infinity 2.0: Gold Edition", "publishers": [{"id": "521816591139078166", "name": "Avalanche Software"}], "splash": "11ddf1872c8573f24154a1d45b8a8654", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "541660", "sku": "541660"}], "type": 1, "verify_key": "1b5ea16614406e3fbdd7a30cee56487d915ac5365e38c5b9f8ea344399dd4d9e"}, {"aliases": ["Dragon Quest X: Mezameshi Itsutsu no Shuzoku Online"], "description": "", "executables": [{"is_launcher": false, "name": "dqxgame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e636c0810de07fbd394f70bde87086af", "id": "505125120960888877", "name": "\u30c9\u30e9\u30b4\u30f3\u30af\u30a8\u30b9\u30c8\uff38\u3000\u3044\u306b\u3057\u3048\u306e\u7adc\u306e\u4f1d\u627f\u3000\u30aa\u30f3\u30e9\u30a4\u30f3", "publishers": [{"id": "521816626203459608", "name": "SQUARE ENIX CO., LTD."}], "summary": "", "type": 1, "verify_key": "0567169292b949548e5f6d96277401ac2d6f6d070ed6e3a97559ac092047e3a4"}, {"aliases": ["E.Y.E.: Divine Cybermancy"], "description": "Based on the roleplaying board game, A.V.A, E.Y.E: Divine Cybermancy is an FPS-RPG set in a \"dark cyberpunk world.\"", "developers": [{"id": "521816672248791063", "name": "Streum On Studio"}], "executables": [{"is_launcher": false, "name": "eye.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1b1bd0582f849e739bd0917635c79b49", "id": "505129908562034716", "name": "E.Y.E: Divine Cybermancy", "publishers": [{"id": "521816672248791063", "name": "Streum On Studio"}], "splash": "5d78ef0615122b1a6c7897dbe23163b4", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "91700", "sku": "91700"}], "type": 1, "verify_key": "2216c4a36c76518b1335fb081ec181c28729c362373d915b66e028ec4c9e433e"}, {"aliases": ["EZ Quake"], "description": "", "executables": [{"is_launcher": false, "name": "ezquake.exe", "os": "win32"}, {"is_launcher": false, "name": "ezquake-gl.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d51a9de6acdce17d83c87690e2ff8a7b", "id": "505131009583480844", "name": "nQuake", "publishers": [{"id": "521816696345067521", "name": "Empezar (mpezar@gmail.com)"}, {"id": "521816696345067522", "name": "Empezar (empezar@quake.world)"}], "summary": "", "type": 1, "verify_key": "6f99264330e3d0f6aa19ce713850ad69f9e96b1f511350106c7114bd9ea7c4f6"}, {"aliases": ["Fable: The Lost Chapters"], "description": "A remake of the original Fable featuring additional quests, armor, weapons, and explorable areas.", "developers": [{"id": "521816588169510932", "name": "Lionhead Studios Ltd."}], "executables": [{"is_launcher": false, "name": "fable.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1862a0a2a5cf39ab7a5b491cb7844120", "id": "505133560391401472", "name": "Fable - The Lost Chapters", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}], "splash": "5b5275a62397d504d3e9a11034ff29bb", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "204030", "sku": "204030"}], "type": 1, "verify_key": "c490756beab7061a7e2856b8e11f6fc3851fe9ffd10ee25ab5b777a02d041a71"}, {"aliases": ["Fantastic Danmaku Festival"], "description": "", "executables": [{"is_launcher": false, "name": "thmhj.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "50febf39fa2cac977c62a6a33a2eeada", "id": "505133803258249253", "name": "TouHou Makuka Sai ~ Fantastic Danmaku Festival", "publishers": [{"id": "521816616602959884", "name": "\u6771\u65b9\u5e55\u83ef\u796d\u5236\u4f5c\u7ec4"}], "splash": "b9f24cd6c408a02bf06d867b2cd7d972", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "882710", "sku": "882710"}], "type": 1, "verify_key": "1477143b4c49c281fb8b8c27b984f9c43ef4285008bab10ef1ad46066d049f7c"}, {"aliases": ["FCEUX"], "description": "", "executables": [{"is_launcher": false, "name": "fceux.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "789de8df52d312851a53d348599079c6", "id": "505134014034870283", "name": "FCEUX 2.2.3", "publishers": [{"id": "521816621732462601", "name": "FCEUX"}], "summary": "", "type": 1, "verify_key": "0f174f4bdeab357d6526ee4d0176ae56e3c5dee4953562ae695a450fe2618fb8"}, {"description": "The fourth expansion in the Final Fantasy XI Online series adds new areas along with the ability to go back in time. Wings of the Goddess also introduces two new jobs to the game.", "developers": [{"id": "521816526920351761", "name": "Square Enix"}], "executables": [{"is_launcher": false, "name": "pol.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "428600c7139cd64ea79d718ce2c6bdf1", "id": "505134378138075144", "name": "FINAL FANTASY XI", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "23390", "sku": "23390"}], "type": 1, "verify_key": "2204df8a62627559971118b045e0e2f420ba55e65952fe89bd3d92457c4482ed"}, {"aliases": ["Gahkthun of the Golden Lightning"], "description": "", "executables": [{"is_launcher": false, "name": "gahkthun.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "95cb29a01951cf38aa91b42bb185cd3d", "id": "505134723543203851", "name": "Gahkthun of the Golden Lightning Steam Edition", "publishers": [{"id": "521816786832982049", "name": "Liar-soft"}], "splash": "0a999fdcb2702e287dbdf6b0ee27e49b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "458380", "sku": "458380"}], "type": 1, "verify_key": "841bcbc7d1895a26bf5b91ad2c48549c01178aaa496ba128277fbbdf3e457eb0"}, {"aliases": ["Garfield Kart"], "description": "Garfield Kart is a racing game by Micro\u00efds.", "developers": [{"id": "521816533731639318", "name": "Ravenscourt"}], "executables": [{"is_launcher": false, "name": "garfieldkartnomulti.exe", "os": "win32"}, {"is_launcher": false, "name": "garfield_master7.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "95e11fc94679106133d0f8b1b66e9634", "id": "505134938354352128", "name": "Garfield Kart", "publishers": [{"id": "521816533731639316", "name": "Artefacts Studios"}, {"id": "521816533731639317", "name": "Micro\u00efds"}], "splash": "99f1f6d96bd2e5427a23029b5968f68c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "362930", "sku": "362930"}], "type": 1, "verify_key": "51d73a883340781dc5913246b9960f9a49cade4e458f2092b1001e80ae707e63"}, {"aliases": ["Gensou SkyDrift"], "description": "SkyDrift is an arcade style, aerial racing game that was released Sept. 7, 2011 on XBLM and PS3N.\nIt was later released on Nov.21, 2011 on Steam.", "developers": [{"id": "521816681228664848", "name": "Digital Reality, Ltd."}], "executables": [{"is_launcher": false, "name": "skydrift.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "72e41c3e26d08759eb297838003842f4", "id": "505135507907543070", "name": "SkyDrift", "publishers": [{"id": "521816681228664848", "name": "Digital Reality, Ltd."}], "splash": "46ceb02e3aab7b0962689e6012c35f84", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "91100", "sku": "91100"}], "type": 1, "verify_key": "d9070ae49254d4767acdf818317c1ac247b8f08798dc2bda9d91ae91f9ca3510"}, {"aliases": ["Grandia 2"], "description": "", "executables": [{"is_launcher": false, "name": "grandia2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "936077bdbf1082793476a66bdd25e52d", "id": "505135738719961143", "name": "Grandia II Anniversary Edition", "publishers": [{"id": "521816576010223621", "name": "GAME ARTS Co., Ltd."}], "splash": "559404ae65ab63499ae840b11bf7e97d", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "330390", "sku": "330390"}], "type": 1, "verify_key": "5a4f98d28c626be98cc71674d3d460620f784ce2b4fb51157eec6e73d16a0dde"}, {"aliases": ["GRID: Autosport"], "description": "Catering more closely to the core fanbase, Codemasters promises for a more responsive release after listening to fan feedback. This is the next game in the GRID series and descendant of TOCA Touring Cars.", "developers": [{"id": "521816499464306689", "name": "Codemasters Racing"}], "executables": [{"is_launcher": false, "name": "gridautosport_avx.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5c78b0eabb61dcc0d408359b6af5ceab", "id": "505135989694398512", "name": "GRID Autosport", "publishers": [{"id": "521816499464306688", "name": "Codemasters"}], "splash": "1341d6708a02419bb9ed8dc34addc41d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "255220", "sku": "255220"}], "type": 1, "verify_key": "f4f31ec3f525f75892e53b81a62cc4bfdf9317c5cf2e2250bcf81b0ce4545487"}, {"aliases": ["Grisaia no Kajitsu"], "description": "A visual novel about a boy who becomes the first male student at Mihama Academy, a private school aimed at helping youths who have trouble fitting into society.", "developers": [{"id": "521816679785824268", "name": "Front Wing"}], "executables": [{"is_launcher": false, "name": "grisaia.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "aa28b2f9ecb0421004bb14c0347f219d", "id": "505136406109356032", "name": "The Fruit of Grisaia", "publishers": [{"id": "521816679785824267", "name": "Prototype"}], "splash": "cdf7aefc6fa3f75fd57916b57512780f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "345610", "sku": "345610"}], "type": 1, "verify_key": "cb89538f810fda6241ee0dc82b23e9bd2d89cd395e0956bc2be29ddcaa844a76"}, {"aliases": ["Grisaia Phantom Trigger"], "description": "", "executables": [{"is_launcher": false, "name": "gpt_vol2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8cb450537d6592dd5cf0c4e97f5b0e2d", "id": "505136671138906132", "name": "Grisaia Phantom Trigger Vol.2", "publishers": [{"id": "521816701860577324", "name": "Frontwing"}], "splash": "56fa103f3beee372e2618288047d56a2", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "606520", "sku": "606520"}], "type": 1, "verify_key": "f08847fb979dc6bbf895985a2d1698643f396d259ce07845f98c2c7fbcfe2b0f"}, {"aliases": ["Halo Trial"], "description": "", "executables": [{"is_launcher": false, "name": "halo trial/halo.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "33bcd098a7df21c40aafe4ee563a665b", "id": "505137576256995328", "name": "Microsoft Halo Trial", "publishers": [{"id": "521816795938684933", "name": "Microsoft"}], "summary": "", "type": 1, "verify_key": "16182ce92c0a127cc33af81c80c735678890b462712c5297d4cec8da15102b32"}, {"aliases": ["Heavy Weapon"], "description": "", "developers": [{"id": "521816596633747478", "name": "PopCap Games, Inc."}], "executables": [{"is_launcher": false, "name": "heavyweapon.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3ad279ddc79593cb62007f6f6eb5fbcd", "id": "505137992642592815", "name": "Heavy Weapon Deluxe", "publishers": [{"id": "521816596633747478", "name": "PopCap Games, Inc."}], "summary": "", "type": 1, "verify_key": "9c8a2e12ba0dcfb414eb9b84b8f309bef26764766432a0e9a325710353f0cc75"}, {"aliases": ["Hyperdimension Neptunia Re;Birth2"], "description": "A remake of Hyperdimension Neptunia mk2 for the Vita, with new features, content and a revised cast of characters.", "developers": [{"id": "521816535304503322", "name": "Felistella"}], "executables": [{"is_launcher": false, "name": "neptuniarebirth2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "cd638309a02b6f0777b5128e6c2f92af", "id": "505138235937259549", "name": "Hyperdimension Neptunia Re;Birth2 Sisters Generation", "publishers": [{"id": "521816535304503320", "name": "Compile Heart, Inc."}], "splash": "d4a41339b665b5137557a0e173e8b0ac", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "351710", "sku": "351710"}], "type": 1, "verify_key": "e6abda4c945e5d098ab1c9b432b756a8524527be7978558b08a437eb696c13cd"}, {"aliases": ["Hyperdimension Neptunia Re;Birth3"], "description": "", "executables": [{"is_launcher": false, "name": "neptuniarebirth3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0022555d7db6c0a25fa459b79a2ec084", "id": "505138532700913671", "name": "Hyperdimension Neptunia Re;Birth3 V Generation", "publishers": [{"id": "521816626203459620", "name": "Idea Factory"}], "splash": "6b67f549f4d297e7569b7c3f039ae077", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "353270", "sku": "353270"}], "type": 1, "verify_key": "3f20b9e7f0e395b89fd3ad1c1afbc6aae31c03f4ce747a638e621b800f5e32f7"}, {"description": "", "executables": [{"is_launcher": false, "name": "illarion/jre/bin/java.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1914d98bd3d875b33d07bd4700ed496e", "id": "505138979264528414", "name": "Illarion", "publishers": [{"id": "521816769640529962", "name": "Illarion e.V."}], "summary": "", "type": 1, "verify_key": "f58a949164bd7fdf9b20dcaf93c47f1879aa53ac04c876092360c38bb42f9dfd"}, {"aliases": ["In The Groove 2"], "description": "", "executables": [{"is_launcher": false, "name": "openitg-pc.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ea3654f24c43a325885fdc202f121d95", "id": "505139561995829278", "name": "OpenITG", "summary": "", "type": 1, "verify_key": "7d58f2c08f4c8bf9ef320ac81835cb0665dd594cae2ca0adf05629080fb7d099"}, {"aliases": ["Invisible Inc."], "description": "A spy and espionage themed turn-based tactics game from Klei Entertainment.", "developers": [{"id": "521816520817639454", "name": "Klei Entertainment Inc."}], "executables": [{"is_launcher": false, "name": "invisibleinc.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a4d2477b49ed2932a1a071a06cfdb12d", "id": "505139793940709376", "name": "Invisible, Inc.", "publishers": [{"id": "521816520817639454", "name": "Klei Entertainment Inc."}], "splash": "6f264b8e1fe7d38e8f79d58cf3238ec7", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "243970", "sku": "243970"}], "type": 1, "verify_key": "dc2b5a3cf580e805d1397349d75d0a25b9f86b774b5fe5bc93e60e35287fcf01"}, {"aliases": ["IvAc - IVAO vATC"], "description": "", "executables": [{"is_launcher": false, "name": "ivac.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e27cdeeaced4f2dcc7454922d47473b5", "id": "505139956017266688", "name": "IvAc", "publishers": [{"id": "521816700153495554", "name": "IVAO"}], "summary": "", "type": 1, "verify_key": "9ba6d7e006ab5f1bad99356b153488c5456c84419c4b08a4e1305ed8ab59ea68"}, {"description": "Just Cause is an open-world action game that has you play as Rico Rodriguez, a black-ops agent helping guerrillas to overthrow the government of San Esperito.", "developers": [{"id": "521816537192202241", "name": "Avalanche Studios"}], "executables": [{"is_launcher": false, "name": "justcause.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8a64de74d2c82c4a2fdaf7c38cb53af9", "id": "505140295931920404", "name": "Just Cause", "publishers": [{"id": "521816520817639456", "name": "Eidos Interactive"}], "splash": "437968c85b47888c162bde4e9198d772", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "6880", "sku": "6880"}], "type": 1, "verify_key": "618614afa3e4215ee1f7d19019c5b1e6353af76e98210224d0e71993c6037c0a"}, {"aliases": ["Kamidori Alchemy Meister"], "description": "", "executables": [{"is_launcher": false, "name": "age.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "85daaf2f14b2be02e1bebfece27e977d", "id": "505140655501213696", "name": "\u795e\u63a1\u308a\u30a2\u30eb\u30b1\u30df\u30fc\u30de\u30a4\u30b9\u30bf\u30fc", "publishers": [{"id": "521816737310572544", "name": "Eushully"}], "summary": "", "type": 1, "verify_key": "5bb73d50cdb244f9bcc326beb9bb6e9101cd54b1644220df8d9b0aefad7a533a"}, {"aliases": ["Kara no Shoujo 2"], "description": "", "executables": [{"is_launcher": false, "name": "kara no shojo 2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0418456957a719fc80273120f2b87e33", "id": "505140834644000812", "name": "Kara no Shojo 2", "publishers": [{"id": "521816666489749523", "name": "MangaGamer"}], "summary": "", "type": 1, "verify_key": "a999f53f93a59e3447ce576e8e23838776c3a26ae87a0d71c42fdfae6cd44d5a"}, {"aliases": ["Knights of Pen & Paper II"], "description": "Sequel to Knights of Pen and Paper, a turn-based, pixel-art game.", "developers": [{"id": "521816630355951628", "name": "Kyy Games"}], "executables": [{"is_launcher": false, "name": "kopp2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "26cc63cf0febe28c9660e4726c82a137", "id": "505141441388085298", "name": "Knights of Pen and Paper 2", "publishers": [{"id": "521816521249521702", "name": "Paradox Interactive AB"}], "splash": "ffe53833f953d364b46cee05faf5e6d6", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "310060", "sku": "310060"}], "type": 1, "verify_key": "1155b70ffa81f1f57a322662cd8994ae28eb379e4b57876e6048809b77fe9811"}, {"aliases": ["Magic the Gathering Arena"], "description": "", "executables": [{"is_launcher": false, "name": "mtga.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "fa51a2322c5a1678cb0442ae3c6b4a9f", "id": "505142532297064468", "name": "MTGArena", "publishers": [{"id": "521816786321014825", "name": "Wizards of the Coast"}], "summary": "", "type": 1, "verify_key": "1f993d3b7c5ded8c534e4974dd72e1f2c923fb9ec971a5448772dbe0394a1bad"}, {"aliases": ["Magical Battle Arena NEXT"], "description": "", "executables": [{"is_launcher": false, "name": "mban_f.exe", "os": "win32"}, {"is_launcher": false, "name": "mban_m.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c2d77cbbaaeb2f5e1b7f8204770e50e0", "id": "505142782654939150", "name": "\u30de\u30b8\u30ab\u30eb\u30d0\u30c8\u30eb\u30a2\u30ea\u30fc\u30caNEXT\u30fb\u5e7b\u60f3\u90f7\u7a7a\u9583\u59eb", "summary": "", "type": 1, "verify_key": "1894dbeddb15752a9bd843b42895df7a1904c63adb726109ca38f028673233d1"}, {"aliases": ["Maschine"], "description": "", "executables": [{"is_launcher": false, "name": "maschine 2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d66fd46c06ba96bae3574c1c6e32b906", "id": "505143168287899676", "name": "Native Instruments Maschine 2", "publishers": [{"id": "521816722127192066", "name": "Native Instruments"}], "summary": "", "type": 1, "verify_key": "3b2cd1830620256690dbf2f6e0b3f86159c16c39e67649323b91f340f5aa527c"}, {"aliases": ["Melty Blood Actress Again: Current Code"], "description": "The followup to Actress Again, Current Code is the 4th installment in the Melty Blood series of fighting games.", "developers": [{"id": "521816628477034508", "name": "Type-Moon"}], "executables": [{"is_launcher": false, "name": "mbaa.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9796f73fef8f2d450d3d430a3f8d3377", "id": "505143546244890691", "name": "MELTY BLOOD Actress Again Current Code", "publishers": [{"id": "521816628477034507", "name": "Ecole Software"}], "splash": "9fe69d23b31d973a6c2c5120682f093d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "411370", "sku": "411370"}], "type": 1, "verify_key": "3a7435be4c6a50b6b2d27309959f30b5166f7ca07b09363b11c40b7d44328c32"}, {"aliases": ["Metal Gear Solid 2: Substance"], "description": "Metal Gear Solid 2: Substance is an updated version of Metal Gear Solid 2: Sons of Liberty containing the original game while adding hundreds of VR missions, a theatre mode and more. It was originally released on the Xbox and later made it onto PS2 and PC.", "developers": [{"id": "521816566543810562", "name": "Konami Computer Entertainment Japan, Inc."}], "executables": [{"is_launcher": false, "name": "mgs2_sse.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2e27611ec8b6d27d6cd90cef67a6fa30", "id": "505146559835406352", "name": "Metal Gear Solid 2 Substance", "publishers": [{"id": "521816513074692111", "name": "Konami"}], "summary": "", "type": 1, "verify_key": "96cf1810333a509cc2a056fa92b25e4adcd73d66bc9acbec19fa891789b64789"}, {"aliases": ["Modlands"], "description": "", "executables": [{"is_launcher": false, "name": "modlands.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2c8f529ca7005eb4838fe1117bb81f8a", "id": "505147819255136297", "name": "Modlands 0.512a version 0.512a", "publishers": [{"id": "521816550102138910", "name": "Triplejump"}], "summary": "", "type": 1, "verify_key": "18fbf59600aad360297a57d8a7c8acb038e7a3a90dcd9d9f6e7ea50e4005855b"}, {"aliases": ["NEO AQUARIUM - The King of Crustaceans"], "description": "A competitive 3D shooter where lobsters, crabs and barnacles battle for evolutionary superiority.", "developers": [{"id": "521816571103019009", "name": "Nussoft"}], "executables": [{"is_launcher": false, "name": "neoaquarium.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4ce0920868778b9c81a10a412a7cf20f", "id": "505150034698960952", "name": "NEO AQUARIUM - The King of Crustaceans -", "publishers": [{"id": "521816571103019009", "name": "Nussoft"}], "splash": "ef493490173c177c7b35d0f443ac387a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "355240", "sku": "355240"}], "type": 1, "verify_key": "678784edcbb83e7e02ee3610304637aabbed6dbbb17825875343a99b5a172af9"}, {"aliases": ["Offspring Fling"], "description": "A forest creature must rescue all of her children in this indie puzzle-platformer.", "developers": [{"id": "521816793644531722", "name": "Kyle Pulver"}], "executables": [{"is_launcher": false, "name": "offspring fling.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a50dd52a193c1526f3451fe5ba4d27de", "id": "505150420377665566", "name": "Offspring Fling!", "publishers": [{"id": "521816793644531722", "name": "Kyle Pulver"}], "splash": "a1c4016e6e5324bc321ab3626b4edfd8", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "211360", "sku": "211360"}], "type": 1, "verify_key": "97ae56f5c2cf46f5c45aebfdb02a86a41e8bea89c04268625349eba3cad6464b"}, {"aliases": ["OlliOlli2"], "description": "", "executables": [{"is_launcher": false, "name": "olliolli2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "dc1a45790aa5b6ec57555634050c7898", "id": "505150905696649216", "name": "OlliOlli2: Welcome to Olliwood", "publishers": [{"id": "521816670004576270", "name": "Roll7"}], "splash": "e289a97ff19acc2327cf3bee515ffddb", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "365660", "sku": "365660"}], "type": 1, "verify_key": "e27cd81c0eb1d13049203e9e70ad8ebf3bd425e8e4e93926f6867645dbdd9c3c"}, {"aliases": ["Organ Trail"], "description": "A zombified parody of The Oregon Trail, swapping Western pioneers with survivors of a zombie apocalypse. Expanded off the original browser game, the director's cut boasts new challenges and significant changes to the original gameplay.", "developers": [{"id": "521816741693620225", "name": "The Men Who Wear Many Hats"}], "executables": [{"is_launcher": false, "name": "organtrail.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d7e202a900abb593522fd73d4750532e", "id": "505151146722197504", "name": "Organ Trail: Director's Cut", "publishers": [{"id": "521816741693620225", "name": "The Men Who Wear Many Hats"}], "splash": "a9625a409010af9f92517a7b5d6c0788", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "233740", "sku": "233740"}], "type": 1, "verify_key": "1175471cdd0e24dcf54ce7c712b264727a8af89002398d4ce7b705b2f47e1365"}, {"aliases": ["PangYa!"], "description": "", "executables": [{"is_launcher": false, "name": "projectg.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b06ed7443e1f900892db01bf8e3afaea", "id": "505151476427915283", "name": "PangYa (NtreevSoft)", "summary": "", "type": 1, "verify_key": "6223fab4d9c40d4d1d6875da437362cf00434660c5d78807e4153ecd6c90b1de"}, {"aliases": ["Perpetuum Online"], "description": "A Sci-Fi Mech MMORPG, currently in Beta. The game mimics many of the aspects of Eve, though being ground based with Mech combat differentiates it from other MMOs currently available. ", "executables": [{"is_launcher": false, "name": "perpetuum.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "66a2a4d1e66eac19e10f215fc66b4b78", "id": "505151662151958530", "name": "Perpetuum", "publishers": [{"id": "521816611980705795", "name": "Avatar Creations"}], "splash": "7eb08d2c2c49e8c6c4a59a3d5e1f0d7a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "223410", "sku": "223410"}], "type": 1, "verify_key": "ae12733a4d1e045b3a91c330ce324f41e259802da9784abee21e44094d3c3091"}, {"aliases": ["Phantasy Star Online: Blue Burst"], "description": "Phantasy Star Online: Blue Burst is an expanded version of Phantasy Star Online that offers more content in the form of Episode 4 and also features improved graphics and more items to collect. ", "developers": [{"id": "521816507676885013", "name": "Sonic Team"}], "executables": [{"is_launcher": false, "name": "psobb.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c9a7ff130c57010bc088f3a1cf024b3b", "id": "505152925115482112", "name": "Phantasy Star Online Blue Burst", "publishers": [{"id": "521816507676885010", "name": "Sega"}], "summary": "", "type": 1, "verify_key": "52e6b060deab16d3331babe027c0108e3f64de20568cedd8943c86ce9d26ae41"}, {"aliases": ["Phantom Break: Battle Grounds"], "description": "Phantom Breaker: Battle Grounds is a beat-em-up that was released on XBLA, and is slated for release on the PlayStation Vita and PlayStation 4. It is a spinoff of 5pb's 2D fighting game.", "developers": [{"id": "521816754989694997", "name": "Division2"}], "executables": [{"is_launcher": false, "name": "pbbg_win32.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3ab530df69847810a4cca938857de515", "id": "505153286840516649", "name": "Phantom Breaker: Battle Grounds", "publishers": [{"id": "521816754989694996", "name": "5pb."}], "splash": "ce738355d33a173956e4e0da3cf38b2c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "329490", "sku": "329490"}], "type": 1, "verify_key": "06268329e9fd4bef7da3e4c9f64828bb828c20bb410ae41be5c37f84587f911d"}, {"aliases": ["Project Hedra"], "description": "Project hedra is a rouguelike game with RPG elements to it, open-world, replayable, quest-orientated are some of the features that best describe it.", "developers": [{"id": "621984260638769152", "name": "Zaphyk"}], "executables": [{"is_launcher": false, "name": "hedra.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e5aef2c7f0cc2480fbbf1eeb5c64fc8f", "id": "505153723941781523", "name": "Project Hedra", "publishers": [{"id": "621984260638769152", "name": "Zaphyk"}], "summary": "", "type": 1, "verify_key": "4fe592509bf3635454ebb3e3511007030da4e2f8f31859cade3f1f43a7548eac"}, {"description": "A fast-paced platform fighting game developed by Wavedash Games, which consists of the developers of a Super Smash Bros. mod called Project M.", "developers": [{"id": "521816635326201857", "name": "Wavedash Games"}], "executables": [{"is_launcher": false, "name": "icons combat arena/icons.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2c1490b71c8c6172b1e3bb4499983a15", "id": "505187200011337738", "name": "Icons: Combat Arena", "publishers": [{"id": "521816635326201857", "name": "Wavedash Games"}], "splash": "df858f15ace6c4becfa6969d68f7db4f", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "684200", "sku": "684200"}], "type": 1, "verify_key": "083ea38d9d4bc4519d7731698b252885b00188b8a16894cbb622c2c19fbf3f0c"}, {"description": "A free-to-play, hack and slash roguelike, developed by Grasshopper Manufacture and published by Gung-Ho Entertainment for the PlayStation 4.", "developers": [{"id": "521816539746271242", "name": "Grasshopper Manufacture inc."}], "executables": [{"is_launcher": false, "name": "brggame-steam.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5360e438d48b9c6c19416cae8c2e6a35", "id": "505256510453186560", "name": "LET IT DIE", "publishers": [{"id": "521816539746271241", "name": "GungHo Online Entertainment"}], "splash": "bb7e7df6f41d9a8f6b5843067a64016d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "794600", "sku": "794600"}], "type": 1, "verify_key": "f37d9ac0825232d3f9c70dcfc4ecc34a52a7954e48bbe44e843b299afe50f063"}, {"description": "DIRT 2 is part of the long-running rally-racing-series from Codemasters.", "developers": [{"id": "521816499464306688", "name": "Codemasters"}], "executables": [{"is_launcher": false, "name": "dirt2_game.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4a070f5fd0a48e7b0af18f6d31b12557", "id": "505486620468838447", "name": "DiRT 2", "publishers": [{"id": "521816499464306688", "name": "Codemasters"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "12840", "sku": "12840"}], "type": 1, "verify_key": "185c033ad41df3ad1100e666d8e075fcc87687662d091563100bbe81d542236c"}, {"description": "Mabinogi is an anime-style MMORPG based on Celtic mythology.", "developers": [{"id": "521816511610880011", "name": "Nexon Corporation"}], "executables": [{"is_launcher": false, "name": "mabinogi/client.exe", "os": "win32"}, {"is_launcher": false, "name": "nexon/library/mabinogi/appdata/client.exe", "os": "win32"}, {"is_launcher": false, "name": "mabinogi/nxsteam.exe", "os": "win32"}, {"is_launcher": false, "name": "mabinogi.exe", "os": "win32"}], "flags": 0, "guild_id": "278742874097582081", "hook": true, "icon": "3e669fd4a1c749ad3afca1e67f73f088", "id": "505489300545208340", "name": "Mabinogi", "publishers": [{"id": "521816511610880011", "name": "Nexon Corporation"}, {"id": "521816641340964881", "name": "NEXON Korea Corp."}], "splash": "07a8bb17b223e97566ab9718a9f44081", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "212200", "sku": "212200"}], "type": 1, "verify_key": "139c400585ed02b339adb31c677b7c402b0fa3f1de5db540326c2b403237cbf6"}, {"description": "Originally titled Metal Gear Solid: Ghost Babel, Metal Gear Solid is a Game Boy Color spinoff of the popular stealth action game, Metal Gear Solid.", "developers": [{"id": "521816513074692111", "name": "Konami"}], "executables": [{"is_launcher": false, "name": "mgsi.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "332a586a449a05d387fac50313632ae1", "id": "505489991175110676", "name": "Metal Gear Solid", "publishers": [{"id": "521816513074692111", "name": "Konami"}], "summary": "", "type": 1, "verify_key": "fabab2f6d7187026ed5173883b363acd0c2cef2bf02a5f0b96338b90c70287e5"}, {"description": "Released in 2013, MapleRoyals is the most popular reincarnation of the widely successful MMORPG MapleStory as it was back in 2007. It has been lovingly developed using custom assets allowing it to become the only legitimate MapleStory abandonware without any copyright infringement.", "executables": [{"is_launcher": false, "name": "mapleroyals.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "88fcbd912890a46f449d50379cb26bdd", "id": "505490321174560783", "name": "MapleRoyals", "publishers": [{"id": "521816509111336960", "name": "MapleRoyals"}], "summary": "", "type": 1, "verify_key": "e6202b0251c2619c95eff0f1cd433ca8722388d855a45010edcc6349e26ac7c9"}, {"description": "", "executables": [{"is_launcher": false, "name": "hindie.steam.exe", "os": "win32"}, {"is_launcher": false, "name": "hindie.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e9a004e39e00c776a2a9b6466d81a594", "id": "505490535629324318", "name": "Houdini Indie", "splash": "387d037cd483b7904d12ee5ad4397c31", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "502570", "sku": "502570"}], "type": 1, "verify_key": "0d0528040b3f40605198dcc024768637f2269e63acb994bf37398efbc6a5ac23"}, {"description": "Infantry is an online-only isometric view tactical war game, with game types ranging from capture the flag to football on hoverbikes.", "executables": [{"is_launcher": false, "name": "tds.exe", "os": "win32"}, {"is_launcher": false, "name": "infantry.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7e66f9809fbc93b0cac00bd278ffd183", "id": "505490756782391338", "name": "Infantry", "publishers": [{"id": "521816500974256130", "name": "Daybreak Games"}], "splash": "c905b85ebc79d4c2df3ac26714d38d7b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "670050", "sku": "670050"}], "type": 1, "verify_key": "92f2a9a5511985d363663f64897b92a499c4766da9bfd140df7b186a127021b1"}, {"description": "", "executables": [{"is_launcher": false, "name": "helbreath.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "dbc0d3836aafd16c3a68c7b4a52bf080", "id": "505490939008122940", "name": "Helbreath Apocalypse", "publishers": [{"id": "521816508167487489", "name": "PlayHelbreath"}], "summary": "", "type": 1, "verify_key": "f199bc222a66e593e2c44a3408300fd74161df7575a8682b97a8280ce0219413"}, {"cover_image": "2a75a4151c553c882721101199cf6cac", "description": "Flash Flash Revolution is a free online 4-key rhythm game, with over 2,000 songs to play using your keyboard.", "developers": [{"id": "558138156952715266", "name": "Jonathan White"}, {"id": "558138157346979861", "name": "Max Proske"}, {"id": "558138157145784321", "name": "arcnmx"}, {"id": "558138157305036800", "name": "Adam Bryant"}, {"id": "558138157200048131", "name": "James Webb"}], "executables": [{"is_launcher": false, "name": "r3air.exe", "os": "win32"}, {"is_launcher": false, "name": "ffr.exe", "os": "win32"}], "flags": 0, "guild_id": "196381154880782336", "hook": true, "icon": "a3fa0791374177c30878459d76b44a31", "id": "505491268755914772", "name": "Flash Flash Revolution", "primary_sku_id": "505491268755914772", "publishers": [{"id": "558138157246185472", "name": "Flash Flash Revolution"}], "slug": "flash-flash-revolution", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "771630", "sku": "771630"}], "type": 1, "verify_key": "7862cdcb546327cac1aa94c595c879d15b4baaf0c944a1985e18710861554d60"}, {"description": "Dwarf Fortress is a single-player, high fantasy simulation game in the style of old ASCII Roguelikes. You can control either a Dwarven clan attempting to build a settlement or a single adventurer in a randomly generated and persistent world complete with its own unique history.", "developers": [{"id": "521816733728768033", "name": "Bay 12 Games"}], "executables": [{"is_launcher": false, "name": "dwarf fortress.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "f700a19a352ab17aeb31c19812afdcba", "id": "505491707253620739", "name": "Dwarf Fortress", "publishers": [{"id": "521816733728768033", "name": "Bay 12 Games"}], "summary": "", "type": 1, "verify_key": "2fc536c84cb50af538aa3437a44b0db38af105a613f5cacaa9fc4b7b5fd7bed1"}, {"aliases": ["Quake III"], "description": "Quake III: Team Arena is an expansion pack released for Quake III Arena in December 2000 by id Software. It features new modes focused on teamplay, as well as new weapons, items, player models, and maps.", "developers": [{"id": "521816563024920606", "name": "id Software"}], "executables": [{"is_launcher": false, "name": "quake3.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4cf84c68f6b2b05bbc6faf434cb89ae6", "id": "505493023031951411", "name": "Quake III", "publishers": [{"id": "521816563024920606", "name": "id Software"}], "summary": "", "type": 1, "verify_key": "49a73f013a3664b36112ffddca597710e4cecd845c7048700a86083f240666cb"}, {"aliases": ["King Of Fighters XIII"], "description": "Expanding on the revamped visual style of The King of Fighters XII, the thirteenth main installment of the tag-team fighting game series concludes the three-part story of Ash Crimson and the mysterious Those From The Past organization.", "developers": [{"id": "521816564564230163", "name": "SNK"}], "executables": [{"is_launcher": false, "name": "kofxiii.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9a2af357700a6399c41fbf393dfe9c5d", "id": "505493399688839170", "name": "King of Fighters XIII", "publishers": [{"id": "521816564564230163", "name": "SNK"}], "summary": "", "type": 1, "verify_key": "49bd2fbfedd02518a9514d4f53f642057c9d29b94bdb4cf027266ad599274793"}, {"description": "Nitronic Rush is an experimental survival driving game developed by students at DigiPen Institute of Technology.", "executables": [{"is_launcher": false, "name": "nitronicrush.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4d3409d74d43b58c8640ffcf4365383b", "id": "505494175702188032", "name": "Nitronic Rush", "publishers": [{"id": "521816545433878549", "name": "DigiPen Institute of Technology"}], "summary": "", "type": 1, "verify_key": "10bd8370421a52cc8a4c7739428b5160777b9b6913478227f88582ff9e82e657"}, {"description": "", "executables": [{"is_launcher": false, "name": "pcsx2-r5875.exe", "os": "win32"}, {"is_launcher": false, "name": "pcsx2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "69163c3e441a971306eeef04fa62c126", "id": "505494914872770583", "name": "PCSX2", "publishers": [{"id": "521816612626497541", "name": "PCSX2"}], "summary": "", "type": 1, "verify_key": "eafbfc26a8a2fa9b4c6323c0125d5e7857a1eb05e3d1785c6ba096d3495ef479"}, {"description": "Rhythm game created for Windows.", "executables": [{"is_launcher": false, "name": "phase_shift.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "838d9433f112c7e83b4c48e759cfb1a8", "id": "505495076974231588", "name": "Phase Shift", "splash": "252c0c4888d70cc22c2c180f94b92796", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "865250", "sku": "865250"}], "type": 1, "verify_key": "6a93b0bb47fb925f5ef6df3a84edc2a32977c059ba4582d7254a9702e7b52b42"}, {"description": "An isometric RPG using Bioware's Infinity Engine, Planescape: Torment is set in the Planescape universe and tells the dark and provocative tale of The Nameless One, an immortal searching for his identity.", "developers": [{"id": "521816563456802817", "name": "Black Isle Studios"}], "executables": [{"is_launcher": false, "name": "torment.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2f659a101fc20e2c0bf2e678b7c88ca9", "id": "505495215856025620", "name": "Planescape: Torment", "publishers": [{"id": "521816563024920612", "name": "Interplay Entertainment Corp."}], "summary": "", "type": 1, "verify_key": "e1d07534f04ee7c217ff6a7716e1e64e6689dac2904e008e6aca7011f6080ff7"}, {"aliases": ["QUBE"], "description": "An enhanced version of the first person puzzle game, Q.U.B.E., for PC, PS3, Wii U and Xbox One with an all-new story, new puzzles and a new Time Trial mode.", "developers": [{"id": "521816676644159498", "name": "Toxic Games"}], "executables": [{"is_launcher": false, "name": "qubegame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "eaeee63b69f9b47cf036bc2dd3f60a69", "id": "505496236548292648", "name": "Q.U.B.E: Director's Cut", "publishers": [{"id": "521816676644159498", "name": "Toxic Games"}], "splash": "b4cc391b3ce5a3cc61c18c8284bfdd46", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "239430", "sku": "239430"}], "type": 1, "verify_key": "7e46df6b17e677ee2b24efeb3b4e5f48b28dcec2487341977a9690f27c816fed"}, {"description": "", "developers": [{"id": "521816572088811559", "name": "Corrupted Pixel LLC"}], "executables": [{"is_launcher": false, "name": "reboundarena.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d817b102363ab23c0bfa89f222b8aed9", "id": "505496835721396254", "name": "Rebound Arena", "publishers": [{"id": "521816572088811559", "name": "Corrupted Pixel LLC"}], "splash": "d6b236c6a0098891036d2a08eb054296", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "701260", "sku": "701260"}], "type": 1, "verify_key": "b968f4f4cfc86ac1f7243b95101599741769503e876de50ab9b7aea3e61687ec"}, {"aliases": ["Regen"], "description": "Hero Generations: ReGen", "executables": [{"is_launcher": false, "name": "regen.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3ddca10ddcee4db4bdd6033a0fa0aec3", "id": "505496955095482387", "name": "REGEN", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "746040", "sku": "746040"}], "type": 1, "verify_key": "012328cb8f60ef3f8fdff99e22e1f6fb2c4e14c6178c0bfa64455ed65512e8c3"}, {"description": "", "executables": [{"is_launcher": false, "name": "retroarch.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ff37b238154c434a541680844d74459b", "id": "505497615748694018", "name": "RetroArch", "publishers": [{"id": "521816677625757713", "name": "libretro"}], "summary": "", "type": 1, "verify_key": "c163d6595970c33057281b6609e4e896445fda4efe420b534378c764c359571d"}, {"aliases": ["Return to Castle Wolfenstein"], "description": "B.J. Blazkowicz returns to fight elite Nazi troopers, supernatural creatures, and mechanized super soldiers in this reboot of the original 1991 classic Wolfenstein 3D.", "developers": [{"id": "521816800560939009", "name": "Gray Matter Interactive Studios, Inc."}], "executables": [{"is_launcher": false, "name": "wolfmp.exe", "os": "win32"}, {"is_launcher": false, "name": "wolfsp.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "dfe66d021c254119db8a0e5c6e34bd4d", "id": "505497930292133908", "name": "Return To Castle Wolfenstein", "publishers": [{"id": "521816563024920606", "name": "id Software"}, {"id": "521816800560939008", "name": "Master Media"}], "summary": "", "type": 1, "verify_key": "6b4a16d1b519f7b2432acdf5bf5f6bc3f7e92265ed16b8d1d908348afc19ef28"}, {"aliases": ["Darkfall Rise of Agon", "Rise of Agon"], "bot_public": true, "bot_require_code_grant": false, "cover_image": "c881aac74aa7082e605ff1ea22349188", "description": "Rise of Agon is a fantasy MMORPG from Big Picture Games.", "developers": [{"id": "521816761516163075", "name": "Big Picture Games"}], "executables": [{"is_launcher": false, "name": "darkfall roa/darkfall_roa.exe", "os": "win32"}, {"is_launcher": false, "name": "darkfallroa/darkfall_roa.exe", "os": "win32"}, {"is_launcher": false, "name": "darkfall_roa.exe", "os": "win32"}, {"is_launcher": false, "name": "data/darkfall.exe", "os": "win32"}, {"is_launcher": false, "name": "darkfall.exe", "os": "win32"}, {"is_launcher": false, "name": "darkfall roa/data/darkfall.exe", "os": "win32"}], "flags": 8429568, "guild_id": "113215880963371008", "hook": true, "icon": "8f75321f16848965b2487382539cfcf1", "id": "505498499043819520", "name": "Rise of Agon", "publishers": [{"id": "521816761516163075", "name": "Big Picture Games"}], "summary": "", "type": 1, "verify_key": "bb7c2c78e3f85b1ca4b7f2a2f39a8eefdc934bae1d855d7d3b7dc240ce49b26b"}, {"aliases": ["Rosenkreuzstilette Grollschwert"], "description": "RosenkreuzStilette is a video game released by the Japanese developer erka:es. Gameplay-wise, RosenkreuzStilette is largely inspired by the NES Mega Man games. This game spawned one sequel named RosenkreuzStilette Freudenstachel.", "developers": [{"id": "521816735792234516", "name": "[erka:es]"}], "executables": [{"is_launcher": false, "name": "rks.exe", "os": "win32"}, {"is_launcher": false, "name": "rks_e.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "47be7eadb5eb6d2a070e45cefeaef9b5", "id": "505498725297422351", "name": "Rosenkreuzstilette", "publishers": [{"id": "521816735792234516", "name": "[erka:es]"}], "splash": "ac8d99bba054f47576fc7b279154905a", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "564150", "sku": "564150"}], "type": 1, "verify_key": "24a6efd72cc88f044a64abf5eb2c3be96343870d49510d4e14deddc8b4ea366a"}, {"description": "A game very similliar to GunZ: The Duel which pits players against players in a futuristic action packed battles.", "developers": [{"id": "521816718457176115", "name": "Pentavision Entertainment"}], "executables": [{"is_launcher": false, "name": "s4league/s4client.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ef3396b54ef558497a96b30f1d6e38c7", "id": "505498926443528202", "name": "S4 League", "publishers": [{"id": "521816718457176115", "name": "Pentavision Entertainment"}], "summary": "", "type": 1, "verify_key": "941e7b25a32b29e190d83edd718b83c1f788085e043a4fca303c8e58317cfdab"}, {"aliases": ["SC2VN: The e-sport Visual Novel"], "description": "", "executables": [{"is_launcher": false, "name": "sc2vn.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "6b8bea20b2a4fca4f98c3361c03a4d64", "id": "505499045079416833", "name": "SC2VN - The eSports Visual Novel", "publishers": [{"id": "521816575481872388", "name": "Team Eleven Eleven"}], "splash": "60397b88f85e977f0ead429a16c9bf06", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "404480", "sku": "404480"}], "type": 1, "verify_key": "d2c1721a920f0c509ca19dc66aaf2925c7c6da73256b993cd447e36aed7e14cd"}, {"aliases": ["Shadow Complex"], "description": "", "executables": [{"is_launcher": false, "name": "shadowcomplex-win32-egl.exe", "os": "win32"}, {"is_launcher": false, "name": "shadowcomplex-win32.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "29a97185209b211a5cfa56bd7e538421", "id": "505500036214292545", "name": "Shadow Complex Remastered", "publishers": [{"id": "521816619689967618", "name": "ChAIR Entertainment"}], "splash": "d054f6986c520b907d4c8409d63909e8", "summary": "", "third_party_skus": [{"distributor": "epic", "id": "Viper", "sku": "Viper"}, {"distributor": "steam", "id": "385560", "sku": "385560"}], "type": 1, "verify_key": "422c6c4c52fd2bd47528f120111175e75dfe52d04396755b03d0a8fdff950cbd"}, {"description": "A sequel to the 2010 kart racer featuring Sega mascots driving vehicles that adapt to land, sea and air.", "developers": [{"id": "521816726996779018", "name": "Sumo Digital Ltd."}], "executables": [{"is_launcher": false, "name": "asn_app_pcdx9_final.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a3b2113053a33b4030a00263d49670b8", "id": "505500365404373004", "name": "Sonic & All Stars Racing Transformed", "publishers": [{"id": "521816507676885010", "name": "Sega"}], "summary": "", "type": 1, "verify_key": "7b81a1885f6b901010d6edbb818807c20efad47d5ef08f3804fe7c50947f7035"}, {"aliases": ["Sony Playstation Emulator"], "description": "", "executables": [{"is_launcher": false, "name": "epsxe.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9ad67a2b9deab113549e7abc5b9d528e", "id": "505500770683322399", "name": "ePSXe", "summary": "", "type": 1, "verify_key": "537bf6a1a69133857e798e9b94b0974efd21af3dea9852abb45ca41ce7cbd7e4"}, {"description": "", "executables": [{"is_launcher": false, "name": "soulworker100.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e84fa7cfb72e2dbb26e373d49491dd48", "id": "505501322947199006", "name": "SoulWorker", "publishers": [{"id": "521816716766871572", "name": "WeMade Online Co., Ltd."}], "summary": "", "type": 1, "verify_key": "791fda61e153ddb0c12081dd8942d14e3052d8dbcd15b000d69e56117f28990d"}, {"aliases": ["Spy Party"], "bot_public": false, "bot_require_code_grant": false, "description": "SpyParty is a competitive espionage game about subtle human behavior. A Spy hides in plain sight at a fancy cocktail party, trying to accomplish missions while blending in with the other guests, while a Sniper with a single bullet looks inward, searching for the Spy.", "developers": [{"id": "521816630808805385", "name": "Chris Hecker"}, {"id": "634913929952493587", "name": "John Cimino"}], "executables": [{"is_launcher": false, "name": "spyparty.exe", "os": "win32"}], "flags": 524288, "guild_id": "83138207679516672", "hook": true, "icon": "a6f9922ecbd9eee2b61dcd5b71ad1fa9", "id": "505502210117861387", "name": "SpyParty", "publishers": [{"id": "521816630808805385", "name": "Chris Hecker"}], "splash": "5b5e89e16637def16d2e86e18d295caa", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "329070", "sku": "329070"}], "type": 1, "verify_key": "a1dbc860e4566f281166c510f2beb0d8b6ef2ba0f80962d2417f0783d9c71630"}, {"aliases": ["Super Smash Flash 1"], "description": "", "executables": [{"is_launcher": false, "name": "ssfexe.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0e9991bb80c2ef956dcabf5d8186e281", "id": "505502693113200640", "name": "Super Smash Flash EXE Version 1.0", "publishers": [{"id": "521816585132834834", "name": "McLeodGaming, Inc."}], "summary": "", "type": 1, "verify_key": "97cc9b60930eea8ce5eb002d4a93ca1154fa57e2a93770f1752ca7626bd98658"}, {"aliases": ["Super Smash Flash 2"], "description": "", "executables": [{"is_launcher": false, "name": "ssf2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2e95b93ee210689898e24701847113d3", "id": "505502904640208902", "name": "Super Smash Flash 2 Beta", "publishers": [{"id": "521816585132834834", "name": "McLeodGaming, Inc."}], "summary": "", "type": 1, "verify_key": "672d8f38090c12528f3f8a639c6b2f96fac19ea17a045842c367831f5e024195"}, {"description": "", "executables": [{"is_launcher": false, "name": "tfil.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "cc68a51ef7f6a098cfb4ee6f3e9ad6db", "id": "505503697799872532", "name": "The Floor is Lava", "publishers": [{"id": "521816741156880402", "name": "RandoMixs"}], "splash": "befc46c44ead68531ed685da6065d24c", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "809430", "sku": "809430"}], "type": 1, "verify_key": "b8acafea0f9f7405690f946230c7c9fe71045cd8e9d789b557cfb33b6132b9f4"}, {"description": "Last Remnant is a Square Enix-developed RPG with a new and unique combat system that invites the gamers to an exciting experience.", "developers": [{"id": "521816526920351761", "name": "Square Enix"}], "executables": [{"is_launcher": false, "name": "tlr.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c4d4f1255a41213e1c5f0cf699ecc71b", "id": "505503999403884544", "name": "The Last Remnant", "publishers": [{"id": "521816526920351761", "name": "Square Enix"}], "splash": "7a7b202bef6029c2d2a196758bc174db", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "23310", "sku": "23310"}], "type": 1, "verify_key": "a818152b2c8be3605d81125feaeddf3f467f5492ed45826a250487f240495e27"}, {"aliases": ["The Simpsons: Hit & Run"], "description": "", "executables": [{"is_launcher": false, "name": "simpsons.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ea66f1dcac92cea0a7eca8ad88a2c0f8", "id": "505504523012276234", "name": "The Simpsons Hit & Run(TM)", "summary": "", "type": 1, "verify_key": "8cae49976de66ffebe9e4accc563ddf2db7ac6cd3129a333f3bb2c772461aaf5"}, {"aliases": ["Thrillville Off the Rails "], "description": "Thrillville: Off the Rails is a theme park simulation video game developed by Frontier Developments. The sequel to the 2006 game Thrillville, it is again published by LucasArts. It was released in North America on October 16, 2007. ", "developers": [{"id": "521816604175106063", "name": "Frontier Developments Ltd."}], "executables": [{"is_launcher": false, "name": "thrillville07.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d4337d1c1ce973b258d56e2f1267104f", "id": "505504809437364244", "name": "Thrillville: Off the Rails", "publishers": [{"id": "521816522977574923", "name": "LucasArts Entertainment Company LLC"}], "splash": "5af5cda40af74c9db028b65a1e9c5c70", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "6080", "sku": "6080"}], "type": 1, "verify_key": "715c4d2152b8b0a6474bf6717fb8a20e8c704c85d0adf4296655927e6adf31d6"}, {"aliases": ["Titanfall"], "description": "Set in a far-flung, mech-filled future, Titanfall is the first first-person shooter built by Respawn Entertainment, the studio formed by ex-employees of Call of Duty developer Infinity Ward.", "developers": [{"id": "521816569601458178", "name": "Respawn Entertainment"}], "executables": [{"is_launcher": false, "name": "titanfall.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "692d9b99a63fa71894d85b207458b554", "id": "505505165705609246", "name": "Titanfall\u2122", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "summary": "", "third_party_skus": [{"distributor": "origin", "id": null, "sku": null}], "type": 1, "verify_key": "4e3031833600cdb4bdcee17ce47e903680567ea1f5859b3a5689eef31bfe1efe"}, {"aliases": ["TMNT 2"], "description": "This is the second game based on the 2003 TMNT series.", "developers": [{"id": "521816698018332682", "name": "Konami Studios"}], "executables": [{"is_launcher": false, "name": "tmnt2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "25bccbd929cef054ffeb7a2788de3cab", "id": "505505520417767425", "name": "TMNT 2 - Battle Nexus", "publishers": [{"id": "521816513074692111", "name": "Konami"}], "summary": "", "type": 1, "verify_key": "76ab8d807696dc3c97fc79563f114c7d3c03a90d5caca7877f6369d4a574fa79"}, {"aliases": ["Tomb Raider: Angel of Darkness"], "description": "", "executables": [{"is_launcher": false, "name": "traod_p4.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0768989597e93d6331c513061b3ed067", "id": "505505686705405962", "name": "Tomb Raider (VI): The Angel of Darkness", "publishers": [{"id": "521816706268659713", "name": "Core Design"}], "splash": "6ce6ffa97032aa055735533db18d672d", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "225020", "sku": "225020"}], "type": 1, "verify_key": "238ec480e2e3f6b5acd70e8727d676b5fed82d4a4a42b4ceffc11e4583669c47"}, {"aliases": ["Tomoyo After ~It's a Wonderful Life~"], "description": "", "executables": [{"is_launcher": false, "name": "tomoyo after ~it's a wonderful life~ english edition/realliveen.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "800590e7088e32d3094a24987e645272", "id": "505505972899414046", "name": "Tomoyo After ~It's a Wonderful Life~ English Edition", "publishers": [{"id": "521816632801361926", "name": "VisualArts/Key"}], "splash": "f2e798749d7737ccd95d3bf527e357ef", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "462990", "sku": "462990"}], "type": 1, "verify_key": "541e061a1916c3ddadccbc037a5ca3c7e7dabb0e88eeb2bf467042fb63a42b03"}, {"description": "", "executables": [{"is_launcher": false, "name": "th10e.exe", "os": "win32"}, {"is_launcher": false, "name": "th10.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8841020c08064a7e63a7a4a19c37c688", "id": "505506583304732695", "name": "Touhou 10: Mountain of Faith", "publishers": [{"id": "521816534205857807", "name": "Touhou-Online"}], "summary": "", "type": 1, "verify_key": "bbf3c02da9a77725454ce027511ac6c84fa219d354777de8f5b7f8bc3ea3cd5b"}, {"description": "The 10.5th game in the Touhou Project, which returns to the versus fighing game style from Touhou 7.5, with more added features.", "developers": [{"id": "521816668196831234", "name": "Team Shanghai Alice"}], "executables": [{"is_launcher": false, "name": "th105e.exe", "os": "win32"}, {"is_launcher": false, "name": "th105.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0c57a3e84ab72bd9587b3cae0bb3f901", "id": "505506928596877352", "name": "Touhou 10.5: Scarlet Weather Rhapsody", "publishers": [{"id": "521816668196831234", "name": "Team Shanghai Alice"}], "summary": "", "type": 1, "verify_key": "e4f61bb434457598f2d9d617e28fa23ccafc1c9d94aaf73f9359c77c8385f6ed"}, {"description": "", "executables": [{"is_launcher": false, "name": "th11e.exe", "os": "win32"}, {"is_launcher": false, "name": "th11.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "afaed2b35d5535a7f692329761bbd70e", "id": "505507257224658987", "name": "Touhou 11: Subterranean Animism", "publishers": [{"id": "521816534205857807", "name": "Touhou-Online"}], "summary": "", "type": 1, "verify_key": "3f76793f0920f3843af8901ec5384009156e4403bc81d4ffceb5e6d93c52cd99"}, {"description": "", "executables": [{"is_launcher": false, "name": "th12.exe", "os": "win32"}, {"is_launcher": false, "name": "th12e.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "69a7fc0699197cd2f88d9d7e2808b7fa", "id": "505512749149716480", "name": "Touhou 12: Undefined Fantastic Object", "publishers": [{"id": "521816534205857807", "name": "Touhou-Online"}], "summary": "", "type": 1, "verify_key": "465d972fd7a3b0a6d152940824d06bbc81b0afa8ba9613b2d4dcb224afb3f8b7"}, {"description": "", "executables": [{"is_launcher": false, "name": "th123.exe", "os": "win32"}, {"is_launcher": false, "name": "th123e.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1ba356d1a13b7dff7cf0c6627d02d5ac", "id": "505513116302573578", "name": "Touhou 12.3: Hisoutensoku", "publishers": [{"id": "521816550596935690", "name": "\u9ec4\u660f\u30d5\u30ed\u30f3\u30c6\u30a3\u30a2"}], "summary": "", "type": 1, "verify_key": "df461c1857cc59796666d9a469ba34bbbd2444806f945a9f3031a2cefa776b75"}, {"description": "", "executables": [{"is_launcher": false, "name": "th125.exe", "os": "win32"}, {"is_launcher": false, "name": "th125e.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b7a22023654e151e361721036e39695a", "id": "505513477645926430", "name": "Touhou 12.5: Double Spoiler", "summary": "", "type": 1, "verify_key": "593485b67aa723a081eaad49148075cb320c3904bebc02e2e9ad971128de1536"}, {"description": "", "executables": [{"is_launcher": false, "name": "th128e.exe", "os": "win32"}, {"is_launcher": false, "name": "th128.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1c8b81de5d919b4bb6d96b6e3c7c2ead", "id": "505513776607395868", "name": "Touhou 12.8: Great Fairy Wars", "publishers": [{"id": "521816534205857807", "name": "Touhou-Online"}], "summary": "", "type": 1, "verify_key": "ab2b3c145939dcf68070eaf1cd9de343298352a7d0e6b4b7d7a1501b6ad3d9d1"}, {"description": "", "executables": [{"is_launcher": false, "name": "th13.exe", "os": "win32"}, {"is_launcher": false, "name": "th13e.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "78f4b2fb35af9fd224601f755bfa8bf4", "id": "505514028341395495", "name": "Touhou 13: Ten Desires", "publishers": [{"id": "521816534205857807", "name": "Touhou-Online"}], "summary": "", "type": 1, "verify_key": "ffce143f49ae0a2a33effb862285c294e19e8429c32b255fd9611da094f705a3"}, {"description": "", "executables": [{"is_launcher": false, "name": "th135.exe", "os": "win32"}, {"is_launcher": false, "name": "th135e.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5bbcf1fb52629879b88c4e98bf5e308b", "id": "505514368520290305", "name": "Touhou 13.5 Hopeless Mascarade", "publishers": [{"id": "521816550596935690", "name": "\u9ec4\u660f\u30d5\u30ed\u30f3\u30c6\u30a3\u30a2"}], "summary": "", "type": 1, "verify_key": "bc29ba7526edbf203592c19eecf790375e823369eaa18ceadb6b97fd1111c391"}, {"description": "", "executables": [{"is_launcher": false, "name": "th14e.exe", "os": "win32"}, {"is_launcher": false, "name": "th14.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2f2fe3a733dc73ae06db1b9d71f59e29", "id": "505514719885393960", "name": "Touhou 14: Double Dealing Character", "publishers": [{"id": "521816534205857807", "name": "Touhou-Online"}], "summary": "", "type": 1, "verify_key": "e4a16c7aff3dc470653af04e0db3a0840bca39e72c381f606a50551737ada381"}, {"description": "", "executables": [{"is_launcher": false, "name": "th143e.exe", "os": "win32"}, {"is_launcher": false, "name": "th143.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a2810be3d6d57555d7cbb2d685345a0e", "id": "505515309726433328", "name": "Touhou 14.3: Impossible Spell Card", "summary": "", "type": 1, "verify_key": "6c7fe4b5f70bc70ec2ad7cec24222d47b965bba7ca96ace89fd3d81ff8017759"}, {"description": "", "executables": [{"is_launcher": false, "name": "th145e.exe", "os": "win32"}, {"is_launcher": false, "name": "th145.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "59c7dbc57b030d8f7be0f12054016ded", "id": "505515610667614232", "name": "Touhou 14.5: Urban Legend in Limbo", "publishers": [{"id": "521816550596935690", "name": "\u9ec4\u660f\u30d5\u30ed\u30f3\u30c6\u30a3\u30a2"}], "summary": "", "type": 1, "verify_key": "98af45d64503886fc23215694c69000786477d5e472de0f76fa040fb9a3654f2"}, {"description": "", "executables": [{"is_launcher": false, "name": "th15.exe", "os": "win32"}, {"is_launcher": false, "name": "th15e.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a557691839bdb8a7b5a6b5d13ec5a228", "id": "505515966289936393", "name": "Touhou 15: Legacy of Lunatic Kingdom", "publishers": [{"id": "521816534205857807", "name": "Touhou-Online"}], "summary": "", "type": 1, "verify_key": "1af889a0ff18e943b6a4262fc87c5997f94e8023c89265c4cc1f65eebe8660ba"}, {"description": "", "executables": [{"is_launcher": false, "name": "th155.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "beb1c3a6803ccea7c1578cf13d740723", "id": "505516276115046415", "name": "Touhou 15.5: Antinomy of Common Flowers", "publishers": [{"id": "521816550596935690", "name": "\u9ec4\u660f\u30d5\u30ed\u30f3\u30c6\u30a3\u30a2"}], "splash": "f0bfaeac0ddf313d52f648d15b29c710", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "716710", "sku": "716710"}], "type": 1, "verify_key": "1c9acaf0cf0daaeba041ecb8bbedc38c8e9e579bcf5d4667c6ae704a654b8f1b"}, {"description": "", "executables": [{"is_launcher": false, "name": "th07.exe", "os": "win32"}, {"is_launcher": false, "name": "th07e.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "45298828f3c1e31541b1d879f7cb409f", "id": "505516832590004244", "name": "Touhou 7: Perfect Cherry Blossom", "publishers": [{"id": "521816534205857807", "name": "Touhou-Online"}], "summary": "", "type": 1, "verify_key": "245ca7c4ce751f1b60f02546cce3bec2ae573c0e5aa55f0b08ec28d6cc0d13b7"}, {"description": "", "executables": [{"is_launcher": false, "name": "th075.exe", "os": "win32"}, {"is_launcher": false, "name": "th075e.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ef2e3dd6e9e0970498dcbfdaa233ef60", "id": "505517064601993254", "name": "Touhou 7.5: Immaterial and Missing Power", "publishers": [{"id": "521816572533276712", "name": "Tasogare Frontier"}], "summary": "", "type": 1, "verify_key": "01481ba038079029c9b7d3b40367bf6504128b31ded40548599391cd4f127359"}, {"description": "", "executables": [{"is_launcher": false, "name": "th08.exe", "os": "win32"}, {"is_launcher": false, "name": "th08e.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "40ceac14ae2ad0e01a16628bece7db15", "id": "505517586327535646", "name": "Touhou 8: Imperishable Night", "publishers": [{"id": "521816534205857807", "name": "Touhou-Online"}], "summary": "", "type": 1, "verify_key": "bc575647039bf8fac75f0f32103a570d9e32199edec4c26fb0c932c3c298ca25"}, {"description": "", "executables": [{"is_launcher": false, "name": "th09.exe", "os": "win32"}, {"is_launcher": false, "name": "th09e.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1ab8458061f3e41495cd0fcaeb1a389a", "id": "505517882873085952", "name": "Touhou 9: Phantasmagoria Of Flower View", "publishers": [{"id": "521816534205857807", "name": "Touhou-Online"}], "summary": "", "type": 1, "verify_key": "80f8ac4e27a9acd54d812847634207964fa069c8475ebf4f71b92245c93cda57"}, {"description": "", "executables": [{"is_launcher": false, "name": "th095.exe", "os": "win32"}, {"is_launcher": false, "name": "th095e.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5abf9e0276c2e26ed3fb9a0f3b5a96b2", "id": "505518102545432605", "name": "Touhou 9.5: Shoot the Bullet", "publishers": [{"id": "521816534205857807", "name": "Touhou-Online"}], "summary": "", "type": 1, "verify_key": "47f4f4acc0d76cfcd39b374c4155bd7bb8edef1e0e491f4e6853bef066426ce0"}, {"description": "", "executables": [{"is_launcher": false, "name": "gn_enbu.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "5887b550e72ac27397883e43ea5be1a5", "id": "505518371333472276", "name": "Touhou Puppet Dance Performance", "publishers": [{"id": "521816759913938946", "name": "FocasLens"}], "summary": "", "type": 1, "verify_key": "0f0eb43ba7ebc31bc4e92c777dcd5984a063ddd4a62454dfdb754237795f14c7"}, {"aliases": ["Touhou Sky Arena"], "description": "", "executables": [{"is_launcher": false, "name": "tsa.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": null, "id": "505518699395022867", "name": "Touhou Sky Arena", "summary": "", "type": 1, "verify_key": "58dc5579745ebfa4feff772427daf14d7083ce3a766cb2a7de31a14b8ca37ce7"}, {"aliases": ["Trails in the Sky FC"], "description": "The first game in the Legend of Heroes VI Sora no Kiseki trilogy. Follow Estelle and Joshua Bright on their journey to become Senior Bracers.", "developers": [{"id": "521816761516163073", "name": "Nihon Falcom Corp."}], "executables": [{"is_launcher": false, "name": "ed6_win_dx9.exe", "os": "win32"}, {"is_launcher": false, "name": "ed6_win.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e7034bf67d84e3bf51fa242a1fb58ceb", "id": "505519194146603009", "name": "The Legend of Heroes: Trails in the Sky", "publishers": [{"id": "521816761516163072", "name": "Nihon Falcom"}, {"id": "521816761516163073", "name": "Nihon Falcom Corp."}], "splash": "8e502db9c894a456ff364577a8311ae3", "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "251150", "sku": "251150"}], "type": 1, "verify_key": "3031d264459b7cc93e102a67aad3385ed781d985e693a09a9ef9593f420dd2db"}, {"aliases": ["Trails in the Sky SC"], "description": "The direct sequel to The Legend of Heroes: Trails in the Sky and the seventh entry in Falcom's Legend of Heroes series.", "developers": [{"id": "521816761516163073", "name": "Nihon Falcom Corp."}], "executables": [{"is_launcher": false, "name": "ed6_win2.exe", "os": "win32"}, {"is_launcher": false, "name": "ed6_win2_dx9.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "16deb7599f12224033bac36793c084b2", "id": "505519505091592222", "name": "The Legend of Heroes: Trails in the Sky SC", "publishers": [{"id": "521816761516163072", "name": "Nihon Falcom"}, {"id": "521816761516163073", "name": "Nihon Falcom Corp."}], "splash": "ee57e2b9518abd60b64567697b9728e0", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "251290", "sku": "251290"}], "type": 1, "verify_key": "18855db0f085259cba90fcf16f59ec2eba1216f4d1013a337103a00096bd6a0e"}, {"aliases": ["VA-11 Hall-A"], "description": "A cyberpunk bar tending simulator in which players interact with a bunch of alcohol-deprived characters in a dystopian setting.", "developers": [{"id": "521816545433878548", "name": "Sukeban Games"}], "executables": [{"is_launcher": false, "name": "va-11 hall a.exe", "os": "win32"}, {"is_launcher": false, "name": "va-11 hall-a/runner\"", "os": "linux"}], "flags": 0, "hook": true, "icon": "db5c064c0d8d4991bad142350df7647c", "id": "505520072870199335", "name": "VA-11 HALL-A", "publishers": [{"id": "521816544939081739", "name": "Ysbryd Games"}], "splash": "942054f155ee7bdffe566744d6a67b13", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "447530", "sku": "447530"}], "type": 1, "verify_key": "6323a032de38e5b85a4c80c43de1bb0db161fab11c0eddb8a0e64a4ca2417f41"}, {"description": "", "executables": [{"is_launcher": false, "name": "visualboyadvance.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "a3deb1a1ccfa6810e2ceb1aa695b73aa", "id": "505520145997889546", "name": "VisualBoyAdvance", "publishers": [{"id": "521816720969826304", "name": "ngemu"}], "summary": "", "type": 1, "verify_key": "7f08439e150daf13da49af042899f255eb1a23e8a3e79991f67f74596ee2ed27"}, {"cover_image": "afcb26f23ae1f44c6d091fccfd908f71", "description": "Rebuild mankind out of the ashes of nuclear winter as you attempt to recover pre-collapse artifacts and discover the true cause of the nuclear devastation.", "developers": [{"id": "524352200231616538", "name": "Warzone 2100 Project"}, {"id": "521816541763993600", "name": "Pumpkin Studios"}], "executables": [{"is_launcher": false, "name": "wz2100.exe", "os": "win32"}, {"is_launcher": false, "name": "warzone2100.exe", "os": "win32"}, {"is_launcher": false, "name": "wz2100.app", "os": "darwin"}], "flags": 0, "guild_id": "684098359874814041", "hook": true, "icon": "d45341872e8f7aec8ab37a2dbd60c35a", "id": "505520727521361941", "name": "Warzone 2100", "publishers": [{"id": "524352200231616538", "name": "Warzone 2100 Project"}, {"id": "521816520817639456", "name": "Eidos Interactive"}], "summary": "", "type": 1, "verify_key": "922949f77e9c7fea333832f614cd2a9afe31710bc1a588330bf3ddac5b980835"}, {"description": "Xonotic is an open-source, multiplayer first-person shooter built using a modified version of the Quake engine.", "executables": [{"is_launcher": false, "name": "xonotic.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3e8657c44d87712e9740874e4a49194a", "id": "505520839303757848", "name": "Xonotic", "publishers": [{"id": "521816695887626242", "name": "Xonotic"}], "summary": "", "type": 1, "verify_key": "7c1731a967b17f924450ee531827787a9289adb843774011ee0b164825596eb4"}, {"aliases": ["Yu-gi-oh Pro"], "description": "", "executables": [{"is_launcher": false, "name": "ygopro.app", "os": "darwin"}, {"is_launcher": false, "name": "ygopro_vs.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0fda6b3c1a5ca8c1e94710f164d0a1bb", "id": "505520955649556490", "name": "YGOPro", "publishers": [{"id": "521816655374843946", "name": "Gruntmods Studios"}], "summary": "", "type": 1, "verify_key": "b6811847514f2cd85761db3f28b8e3c1da0c7b829f8dadf97fabcd90ea503d44"}, {"aliases": ["ZSNES"], "description": "", "executables": [{"is_launcher": false, "name": "zsnesw.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "afcb71922b6a00633cd9aa299748cb18", "id": "505521162042736657", "name": "ZSNESw", "publishers": [{"id": "521816695397023746", "name": "ZSNESw"}], "summary": "", "type": 1, "verify_key": "3713de03877fbb25cb98c756f1855fc9a0bba9c89a15568cbc2cc8c00d256444"}, {"description": "", "executables": [{"is_launcher": false, "name": "zwiftapp.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "42977af1438d22557119ba6edcf50cca", "id": "505523904517898240", "name": "Zwift", "publishers": [{"id": "521816515989733378", "name": "Zwift, LLC"}], "summary": "", "type": 1, "verify_key": "6519977556dfa8535a90b810ef682c14bd9d50a2eadb6001ae9b1876ece0e2d8"}, {"description": "", "executables": [{"is_launcher": false, "name": "aogame.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b8aa257e387845a4ce7e16748a84997a", "id": "505531160990973952", "name": "Allods Online", "publishers": [{"id": "521816500974256132", "name": "Allods Team"}], "splash": "a9fb7f701ed7732dfd7c7e402c0b2d00", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "459160", "sku": "459160"}], "type": 1, "verify_key": "ad79ea72449145c405de219d1525a0faf878b85144dce00b26e49423e0c4b83e"}, {"description": "Murderous Pursuits is an 8-player stealth action game from Blazing Griffin.", "developers": [{"id": "521816711104823311", "name": "Blazing Griffin"}], "executables": [{"is_launcher": false, "name": "murderouspursuits.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ad17ef3012862897eada5f44cdc18c18", "id": "505801835613913098", "name": "Murderous Pursuits", "publishers": [{"id": "521816711104823311", "name": "Blazing Griffin"}], "splash": "67307ab2f0c3986b11a15ea8f366ca91", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "638070", "sku": "638070"}], "type": 1, "verify_key": "473552934b72078d336b7b26d75c5d8a2fa56ac1782667c5a250c1630cc94e59"}, {"description": "", "executables": [{"is_launcher": false, "name": "sao_hr.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3119cfda751acbd4c17acc1957a77a70", "id": "506057315485483008", "name": "Sword Art Online: Hollow Realization Deluxe Edition", "publishers": [{"id": "521816753920016386", "name": "AQURIA"}], "splash": "e6963cd7cd555f790f67cce2948db4d5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "607890", "sku": "607890"}], "type": 1, "verify_key": "d7cd9d1c3109eccdae1ccb6742ee9a77ad6774dddf88b3f9b223696d59a83928"}, {"description": "A survival-focused spin-off of the Metal Gear series, as one of Big Boss's loyal soldiers must traverse a hostile alternate dimension filled with zombie-like creatures.", "developers": [{"id": "521816513074692111", "name": "Konami"}], "executables": [{"is_launcher": false, "name": "mgv.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "1db23ac12b79383fd2f7dc86b34239eb", "id": "506873722745913355", "name": "METAL GEAR SURVIVE", "publishers": [{"id": "521816513074692111", "name": "Konami"}], "splash": "8b515c802c973a491774ff36735c3515", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "543900", "sku": "543900"}], "type": 1, "verify_key": "56f8e44eb08b92f08e3a8cdc3ae9d6fe216127c4623f3f81e9f510d658b61259"}, {"description": "Get better at aiming in first-person shooters.", "executables": [{"is_launcher": false, "name": "aimlab_tb.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "14793cc1393f167f816642690710d59c", "id": "506950362461110273", "name": "Aim Lab", "publishers": [{"id": "521816561216913408", "name": "Statespace"}], "splash": "172f9eb99e935d9231bf2b512cf32fa0", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "714010", "sku": "714010"}], "type": 1, "verify_key": "20c0278f994834fb65dc70a61ea12e0764bd356c996733875b8913f9cfdb7b81"}, {"description": "The latest installment in the science fiction strategy franchise.", "developers": [{"id": "521816676157751316", "name": "Stardock Corporation"}], "executables": [{"is_launcher": false, "name": "galactic civilizations iii/galciv3.exe", "os": "win32"}], "flags": 0, "guild_id": "299942486095167489", "hook": true, "icon": "980fe63a686535756b81be281b1e8589", "id": "507674068498120714", "name": "Galactic Civilizations III", "publishers": [{"id": "521816676157751316", "name": "Stardock Corporation"}], "splash": "ad4ba0df139f80a8f2413a25c9a23d48", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "226860", "sku": "226860"}], "type": 1, "verify_key": "63271532bf4bf505474d492694842712e635335093eae270cf0e2c9e8f89d40d"}, {"cover_image": "6e760cc2c262ffa1d8e96272305fc1b9", "description": "Parkasaurus is a zany Dinosaur Park management game, that challenges the player not only to provide guests with a unique dinosaur zoo experience, but to care for their dino friends by crafting the perfect exhibits, gifting them the cutest hats, and travelling back in time to rescue them from their demise!", "developers": [{"id": "612675234914631680", "name": "Washbear Studio"}], "executables": [{"is_launcher": false, "name": "parkasaurus/parkasaurus.exe", "os": "win32"}], "flags": 0, "guild_id": "388052142239252511", "hook": true, "icon": "4606c6feaa803e7c3a9ac53f20b8c92e", "id": "508008071411400724", "name": "Parkasaurus", "primary_sku_id": "508008071411400724", "publishers": [{"id": "612675235015032892", "name": "WashBear Studio"}], "slug": "parkasaurus", "splash": "7e63ca5a83cb88250e1f4522fdde1095", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "508008071411400724", "sku": "508008071411400724"}, {"distributor": "steam", "id": "591460", "sku": "591460"}], "type": 1, "verify_key": "50db38f5dfdd51f2a486c5c1660b7501a79961c815e585caf25523de545da94f"}, {"description": "Visage is a first-person psychological horror game. Explore a mysterious ever-changing house in a slow-paced, atmospheric world that combines both uncannily comforting and horrifyingly realistic environments, and enjoy a genuinely terrifying experience.", "developers": [{"id": "521816657060954133", "name": "SadSquare Studio"}], "executables": [{"is_launcher": false, "name": "visage-win64-shipping.exe", "os": "win32"}], "flags": 0, "guild_id": "506974721598947339", "hook": true, "icon": "607f8ad7c01c8f6e18c4716231ad3ccc", "id": "508057374875975682", "name": "Visage", "primary_sku_id": "508057374875975682", "publishers": [{"id": "521816657060954133", "name": "SadSquare Studio"}], "slug": "visage", "splash": "1458bcfff1c9ce9c84cb8e0c20f02ded", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "508057374875975682", "sku": "508057374875975682"}, {"distributor": "steam", "id": "594330", "sku": "594330"}], "type": 1, "verify_key": "d1fcbd28c2be07bebbe66a0e5bb629fbbec27471538647f31ddd5882768d6c12"}, {"description": "", "developers": [{"id": "521816524952961036", "name": "PixelCount Studios"}], "executables": [{"is_launcher": false, "name": "kynseed/kynseed.exe", "os": "win32"}], "flags": 0, "guild_id": "350412853284700161", "hook": true, "icon": "82b8b45931abe40381eeccc54ec13930", "id": "510199020782747732", "name": "Kynseed", "primary_sku_id": "510199020782747732", "publishers": [{"id": "521816524952961036", "name": "PixelCount Studios"}], "slug": "kynseed", "splash": "232a47bf94b531f997369228293cdfd3", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "758870", "sku": "758870"}, {"distributor": "discord", "id": "510199020782747732", "sku": "510199020782747732"}], "type": 1, "verify_key": "4d97e35564bc322e63ec747dce081270ba16223c435bb56d26db59e3fc4122aa"}, {"aliases": ["Thronebreaker: The Witcher Tales"], "description": ".", "developers": [{"id": "521816596172505089", "name": "CD Projekt Red"}], "executables": [{"is_launcher": false, "name": "thronebreaker.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4e70e7961f122ee72e3bba536605e2fc", "id": "511619499053678668", "name": "Thronebreaker", "publishers": [{"id": "521816596172505088", "name": "CD PROJEKT RED"}], "summary": "", "third_party_skus": [{"distributor": "gog", "id": null, "sku": null}, {"distributor": "steam", "id": "973760", "sku": "973760"}], "type": 1, "verify_key": "7b4e300c951aa7a1da0c1a53b417a0aeae3918a7d3771580102f735b23f004d5"}, {"description": "", "flags": 0, "hook": true, "icon": null, "id": "512498684211232768", "name": "Paladins Strike", "primary_sku_id": "512498684211232768", "slug": "paladins-strike", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "512498684211232768", "sku": "512498684211232768"}], "type": 1, "verify_key": "810dd3a1d5ae83a0ea43891c2e5b00295415fe61b18f42373327beea90ec89d1"}, {"description": "", "developers": [{"id": "521816519768932355", "name": "Bethesda Game Studios"}], "executables": [{"is_launcher": false, "name": "fallout76.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "048e617c226b87c168c0025f27307e8e", "id": "512501896896970762", "name": "Fallout 76", "publishers": [{"id": "521816500508819469", "name": "Bethesda Softworks"}], "summary": "", "type": 1, "verify_key": "35142fd0ec939f4472c166c73f0da0449d19d84f5314dae12d8da2d7857557e1"}, {"description": "Battlefield V sees the series return to a World War II setting for the first time in nearly a decade.", "developers": [{"id": "521816575481872391", "name": "DICE"}], "executables": [{"is_launcher": false, "name": "battlefield v/bfv.exe", "os": "win32"}], "flags": 0, "guild_id": "140933721929940992", "hook": true, "icon": "5f70bb592b9efbad9b5973404b9b7d01", "id": "512699108809637890", "name": "Battlefield\u2122 V", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "summary": "", "type": 1, "verify_key": "366d31ac02d906799684b41655e3449ad54fad6769c5fa6cb2e93e98f89a0d76"}, {"description": "", "developers": [{"id": "521816727710072834", "name": "Trinket Studios"}], "executables": [{"is_launcher": false, "name": "battlechefbrigade.exe", "os": "win32"}], "flags": 0, "guild_id": "384047687051378700", "hook": true, "icon": "e954e6049eff0bb89a9248095b6bf929", "id": "512789120234422301", "name": "Battle Chef Brigade", "primary_sku_id": "512789120234422301", "publishers": [{"id": "521816520267923475", "name": "Adult Swim Games"}], "slug": "battle-chef-brigade", "splash": "948b62d21351c080488bcfcbcd2cd099", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "512789120234422301", "sku": "512789120234422301"}, {"distributor": "steam", "id": "452570", "sku": "452570"}], "type": 1, "verify_key": "ccfe673a68a7618cd6c84b5e10d26cc7c03ac1d94c8e170e09ad35cdfa4ec09e"}, {"description": "", "developers": [{"id": "521816789449965595", "name": "Andrew Morrish\t"}], "executables": [{"is_launcher": false, "name": "kingsway/kingsway.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9ecf331d50e371c0c400ffe528b180c3", "id": "512789343157485602", "name": "Kingsway", "primary_sku_id": "512789343157485602", "publishers": [{"id": "521816520267923475", "name": "Adult Swim Games"}], "slug": "kingsway", "splash": "b974b53e877f24d0f2d30cd198c006d1", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "588950", "sku": "588950"}, {"distributor": "discord", "id": "512789343157485602", "sku": "512789343157485602"}], "type": 1, "verify_key": "53fc5ba6a065a1c27ba03f9e9bde03a069fe503a11db28cec8d2920b8f43c78e"}, {"description": "", "developers": [{"id": "521816753920016384", "name": "bitHuffel"}], "executables": [{"is_launcher": false, "name": "zenzizenzic/zenzizenzic.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "af13f6fdab66e91bae0a224ddb1a6cd6", "id": "512789427462995988", "name": "Zenzizenzic", "primary_sku_id": "512789427462995988", "publishers": [{"id": "521816520267923475", "name": "Adult Swim Games"}], "slug": "zenzizenzic", "splash": "761368f9db4b424418c80a2b3d3ea6f5", "summary": "", "third_party_skus": [{"distributor": "discord", "id": "512789427462995988", "sku": "512789427462995988"}, {"distributor": "steam", "id": "327500", "sku": "327500"}], "type": 1, "verify_key": "f6e1b7c46a6daf3d2d8e1ab07a3ebfefd22ea1c01f37afef1db1669b6eec7cde"}, {"aliases": ["Borderlands\u00ae 3"], "cover_image": "5c14ce7bb5a5e1552d5de0478ca37835", "description": "Borderlands 3 is an action role-playing first-person shooter video game developed by Gearbox Software and published by 2K Games. It is the sequel to 2012's Borderlands 2, and the fourth main entry in the Borderlands series.", "executables": [{"is_launcher": false, "name": "Borderlands3.exe", "os": "win32"}], "flags": 0, "guild_id": "132671445376565248", "hook": true, "icon": "5c14ce7bb5a5e1552d5de0478ca37835", "id": "514228311661084682", "name": "Borderlands 3", "overlay": true, "summary": "", "type": 1, "verify_key": "a5ad4bc2d3e4a7865ce7ee35f409e1269e40d777e5da785e6c1c300003e365cd"}, {"bot_public": true, "bot_require_code_grant": false, "cover_image": "feddbb0a1ad88879bba3c09ef9e1d019", "description": "Conquer the Realm in this fantasy Battle Royale! Choose a class, then loot, or craft, deadly weapons and powerful abilities to forge your own victory. Explore a fantasy world from horseback while outrunning the deadly fog. Can you survive the first 100-person fantasy Battle Royale?", "developers": [{"id": "565247282044338196", "name": "Heroic Leap Games"}], "executables": [{"is_launcher": false, "name": "realm royale/binaries/win64/realmeac.exe", "os": "win32"}, {"is_launcher": false, "name": "realm royale/binaries/win64/realm.exe", "os": "win32"}], "flags": 0, "guild_id": "418821423293923328", "hook": true, "icon": "0143015e3fc06c24b799e6607acd4725", "id": "518088627234930688", "name": "Realm Royale", "primary_sku_id": "518088627234930688", "publishers": [{"id": "521816544939081737", "name": "Hi-Rez Studios"}], "slug": "realm-royale", "splash": "f75b8c85be0b20d1929f50cc3b460826", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "813820", "sku": "813820"}], "type": 1, "verify_key": "ddaf4497f6b562b43303e528b27e3fa311647c321e435b63535d04dafda4cb3a"}, {"description": "", "flags": 0, "hook": true, "icon": null, "id": "519644267212177418", "name": "Turok", "summary": "", "type": 1, "verify_key": "cb15275deb728aded829794f926b6ea3ec60bdd35219e23aea99239951e943d2"}, {"description": "", "developers": [{"id": "522565612111790108", "name": "Propaganda Games"}], "flags": 0, "hook": true, "icon": "a53196a49c72a83456b98009e4fbe8c4", "id": "519644368735567873", "name": "Turok 2: Seeds of Evil", "publishers": [{"id": "522565612111790106", "name": "Disney Interactive"}], "summary": "", "type": 1, "verify_key": "fbb31bddfa168ff8d6746835d191ef13b3895faaa4c02f31ef6dd7fa299a21e9"}, {"description": "", "executables": [{"is_launcher": false, "name": "ashen-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "15db2ed400f95292034c829f5ef5e85d", "id": "520453007578628124", "name": "Ashen", "publishers": [{"id": "521816677625757707", "name": "Aurora44"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "649950", "sku": "649950"}], "type": 1, "verify_key": "51a1dfd0e1e1a40960418e3eca188adad51ddbfefa5dd788b2b4208f8708c9a9"}, {"description": "", "developers": [{"id": "521816498017271833", "name": "Supergiant Games"}], "executables": [{"is_launcher": false, "name": "hades.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "81a59c97fc11c857267a7dbfcb2515c2", "id": "520462578061803588", "name": "Hades", "publishers": [{"id": "521816498017271833", "name": "Supergiant Games"}], "summary": "", "third_party_skus": [{"distributor": "epic", "id": "Min", "sku": "Min"}], "type": 1, "verify_key": "4f9ba45220b89e8f749ad9f25199d8481efd0ae286d65fd2e6b896994c00287d"}, {"description": "", "flags": 0, "hook": true, "icon": null, "id": "521842831262875670", "name": "Nitro", "summary": "", "type": null, "verify_key": "93661a9eefe452d12f51e129e8d9340e7ca53a770158c0ec7970e701534b7420"}, {"aliases": ["Far Cry New Dawn"], "cover_image": "ea473e6c8dfff113b6d725a82f3a86f1", "description": "", "executables": [{"is_launcher": false, "name": "farcrynewdawn.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "ea473e6c8dfff113b6d725a82f3a86f1", "id": "523154344187789312", "name": "Far Cry New Dawn", "overlay": true, "publishers": [{"id": "521816654095843331", "name": "Ubisoft Montreal"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "939960", "sku": "939960"}], "type": null, "verify_key": "8e33efa771cfdb7a78b6cd677d8102274e39e33659651ede1edfe8828c4ce1c5"}, {"description": "ATLAS is a survival MMO from Studio Wildcard.", "developers": [{"id": "521816690540019737", "name": "Studio Wildcard"}], "executables": [{"is_launcher": false, "name": "atlasgame_be.exe", "os": "win32"}], "flags": 0, "guild_id": "519203887492890627", "hook": true, "icon": "edffe5a84ac41f10b01f7d696d4d92e0", "id": "526489929631531009", "name": "ATLAS", "publishers": [{"id": "521816690540019737", "name": "Studio Wildcard"}], "splash": "300b8b001b6f928d5161df263cb6cbf5", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "834910", "sku": "834910"}], "type": 1, "verify_key": "365e8debad69ea3fdbcc400a8dfac8d5dab5bcb81e962f603463aaa5dc5570c7"}, {"bot_public": true, "bot_require_code_grant": false, "cover_image": "02d30a18c27cd6965211ac2edd0fd954", "description": "Join 35+ million players in Paladins, the free-to-play fantasy team-based shooter sensation. Wield guns and magic as a legendary Champion of the Realm, customizing your core set of abilities to play exactly how you want to play.", "developers": [{"id": "562713786377568260", "name": "Evil Mojo Games"}], "executables": [{"is_launcher": false, "name": "paladins.exe", "os": "win32"}, {"is_launcher": false, "name": "paladinseac.exe", "os": "win32"}], "flags": 0, "guild_id": "551143380948746251", "hook": true, "icon": "02d30a18c27cd6965211ac2edd0fd954", "id": "528145079819436043", "name": "Paladins", "primary_sku_id": "528145079819436043", "publishers": [{"id": "521816544939081737", "name": "Hi-Rez Studios"}], "slug": "paladins", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "444090", "sku": "444090"}], "type": 1, "verify_key": "12c6ea36414fae641edb3aaeffe1818e932c9c00a771cf4ab9f53d2f70280f66"}, {"description": "", "flags": 0, "hook": true, "icon": null, "id": "530454325214969866", "name": "Metro Exodus", "primary_sku_id": "530454325214969866", "slug": "metro-exodus", "summary": "", "type": null, "verify_key": "42307e6e3120211a78921b58eaa1288323739c18791b711f1240c0b0ec0c1da4"}, {"description": "Set in an era of classic piracy, Sea of Thieves is a first-person open-world game where players form a crew of pirates and sail off to find treasure. As it is a \"shared world\" game, pirate crews can encounter other crews and engage in epic maritime skirmishes.", "developers": [{"id": "524351477704032270", "name": "Rare, Ltd."}], "executables": [{"is_launcher": false, "name": "sotgame.exe", "os": "win32"}], "flags": 0, "guild_id": "423075122610700288", "hook": true, "icon": "4e7da84318a42170af8d916dacf1988f", "id": "535371564850479134", "name": "Sea of Thieves", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}], "summary": "", "type": 1, "verify_key": "232ebed94a64e6465812955090d7834b1d5c726eaa87659614849e008b983ad6"}, {"description": "This second installment concludes TT Games' LEGO-based take on the Harry Potter heptalogy, offering more of the standard LEGO smashing, building, and collecting mayhem.", "developers": [{"id": "521816611506880523", "name": "TT Games"}, {"id": "524352288249348097", "name": "TT Fusion"}, {"id": "521816542707449856", "name": "Traveller's Tales Ltd."}], "executables": [{"is_launcher": false, "name": "harry2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "76684936adbfa380dde68bd368e0598c", "id": "535384357536399404", "name": "LEGO Harry Potter: Years 5-7", "publishers": [{"id": "521816499464306690", "name": "WB Games"}], "splash": "4ff6de8702ade1bae8a2f6effb47ef53", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "204120", "sku": "204120"}], "type": 1, "verify_key": "72d2755b9fca61d16633628412f349ebe07d71a5ef64b796154d424cbad33d7b"}, {"aliases": ["Subnautica: Below Zero"], "description": "Dive into a freezing underwater adventure on an alien planet. Set one year after the original Subnautica, Below Zero challenges you to survive a disaster at an alien research station on Planet 4546B. Craft tools, scavenge for supplies, and unravel the next chapter in the Subnautica story.", "developers": [{"id": "521816602728071191", "name": "Unknown Worlds"}], "executables": [{"is_launcher": false, "name": "subnauticazero.exe", "os": "win32"}, {"is_launcher": false, "name": "subnauticazero/subnauticazero.exe", "os": "win32"}], "flags": 0, "guild_id": "85342800492634112", "hook": true, "icon": "9deb9e8f286d689e7cb2f8bc33ae9297", "id": "535869836748783616", "name": "Subnautica: Below Zero", "primary_sku_id": "535869836748783616", "publishers": [{"id": "521816602728071191", "name": "Unknown Worlds"}, {"id": "608077209952976936", "name": "Unknown Worlds Entertainment"}, {"id": "608077209952976936", "name": "Unknown Worlds Entertainment"}], "slug": "subnautica-below-zero", "splash": "3282b400f42e47808aea3bd505468f35", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "848450", "sku": "848450"}], "type": 1, "verify_key": "745d115d0e98b3aa1688413b29ddbaf96b23b0347da1a75a93b7e722392ba84e"}, {"aliases": ["Ghost Recon Breakpoint"], "cover_image": "436feb813d4342cb66661496b910bac5", "description": "", "executables": [{"is_launcher": false, "name": "grb.exe", "os": "win32"}, {"is_launcher": false, "name": "grb_upp.exe", "os": "win32"}, {"is_launcher": false, "name": "grb_vulkan.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "53535ec6a104658b0ac426c22799cd31", "id": "540120593576493057", "name": "Ghost Recon Breakpoint", "overlay": true, "publishers": [{"id": "521816510730338325", "name": "Ubisoft"}], "summary": "", "third_party_skus": [{"distributor": "uplay", "id": "11903", "sku": "11903"}], "type": null, "verify_key": "9e0b460e1bd74728f8511dd2ce598086572d16c5c998a695a2e0f118da156147"}, {"description": "", "executables": [{"is_launcher": false, "name": "apex/r5apex.exe", "os": "win32"}], "flags": 0, "guild_id": "541484311354933258", "hook": true, "icon": "7564e6f23704870d70480f172f127677", "id": "542075586886107149", "name": "Apex Legends", "publishers": [{"id": "542075586886107157", "name": "Electronic Arts, Inc."}], "summary": "", "third_party_skus": [{"distributor": "origin", "id": null, "sku": null}], "type": 1, "verify_key": "09ec3fea255d2f025b9b8aaa3aa39446d2428524830803d020483d628f06065c"}, {"description": "Farming Simulator 19 is the 8th major installment of the Farming Simulator franchise.", "developers": [{"id": "521816627767934979", "name": "GIANTS Software GmbH"}], "executables": [{"is_launcher": false, "name": "x64/farmingsimulator2019game.exe", "os": "win32"}], "flags": 0, "guild_id": "299449702599098368", "hook": true, "icon": "37b18c2d5633628d936dd3b2b083785b", "id": "542474758835535872", "name": "Farming Simulator 19", "publishers": [{"id": "521816627767934979", "name": "GIANTS Software GmbH"}, {"id": "521816537192202247", "name": "Focus Home Interactive"}], "splash": "feb5890e7f553a2bfbb87e631617d359", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "787860", "sku": "787860"}], "type": 1, "verify_key": "bbba1d6e8a9506f6b721ae413f4c6b72acfaf183dcdb7aac64e85bdff000cdd4"}, {"description": "The rat-like Skaven hordes are teaming up with the Chaos menace from the north to invade the Empire, and it's up to the five Heroes of Ubersreik to fend them off.", "developers": [{"id": "521816633392627715", "name": "Fatshark AB"}], "executables": [{"is_launcher": false, "name": "binaries/vermintide2.exe", "os": "win32"}], "flags": 0, "guild_id": "283579612695625729", "hook": true, "icon": "3cba3f7745778fc9dba79f7b6a487def", "id": "542475118396309528", "name": "Warhammer: Vermintide 2", "publishers": [{"id": "521816633392627715", "name": "Fatshark AB"}], "splash": "39db623620249b09f27bb9ed94d481f4", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "552500", "sku": "552500"}], "type": 1, "verify_key": "6e508442b8ac570e953f52a1a1434a93541ef247c54263cc9199ba2e59e05c0f"}, {"description": "A multiplayer-focused third-person action RPG from the studio behind Mass Effect and Dragon Age, featuring fully-customizable exo-suits (known as Javelins) with a wide variety of special abilities.", "developers": [{"id": "521816589570408449", "name": "BioWare"}], "executables": [{"is_launcher": false, "name": "anthem.exe", "os": "win32"}], "flags": 0, "guild_id": "323187591702773763", "hook": true, "icon": "4a0b14af7ed47532e7e4676b637bdf3f", "id": "546175179542364160", "name": "Anthem\u2122", "publishers": [{"id": "521816499464306692", "name": "Electronic Arts"}], "summary": "", "type": 1, "verify_key": "f2c1e691676ea81e3f7ecf1efc06727b3dd102cb29f0a79a581aa060f5f21b02"}, {"description": "Spellbreak", "developers": [{"id": "524352243445661701", "name": "Proletariat Inc."}], "executables": [{"is_launcher": false, "name": "spellbreak.exe", "os": "win32"}], "flags": 0, "guild_id": "116173324647661575", "hook": true, "icon": "f032c1b8a6e649aa5adbb210ada28e00", "id": "549512435585908756", "name": "Spellbreak", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "803370", "sku": "803370"}], "type": 1, "verify_key": "95793930ad4382954c9da2bc9c0326e3b993f4901c34fbffe9a4507865f610cb"}, {"bot_public": true, "bot_require_code_grant": false, "cover_image": "0e2e80a049ab7970146f35671360babb", "description": "Heroes & Generals WWII is a full on, all-out WAR experience. Thousands of players fighting one massive clash of nations. The first to capture 15 cities takes the glory. Fight alongside newfound brothers from all over the world in multiple battles raging persistently as Generals strategize and deploy resources to assist their men. As a soldier everything you do influences the war.", "developers": [{"id": "562226517950726164", "name": "RETO MOTO"}], "executables": [{"is_launcher": false, "name": "hng.exe", "os": "win32"}, {"is_launcher": false, "name": "heroesandgeneralsdesktop.exe", "os": "win32"}], "flags": 0, "guild_id": "351987983223750656", "hook": true, "icon": "5ef40d1e2e0f8de9e533c3b8976f8ea2", "id": "550277544025522176", "name": "Heroes & Generals WWII", "primary_sku_id": "550277544025522176", "publishers": [{"id": "562226517950726164", "name": "RETO MOTO"}], "slug": "heroes-generals-wwii", "splash": "2107c405872885eeafad5dd7a29e6ee1", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "227940", "sku": "227940"}], "type": 1, "verify_key": "c5883e27271d83659c4f31da7bef91a9f5ebe0d5f0a7153d4bd910ffb969c912"}, {"description": "Control a settlement of humans and guide them through 10,000 years of human prehistory.", "developers": [{"id": "521816794722205696", "name": "Madruga Works"}], "executables": [{"is_launcher": false, "name": "dawnofman.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "8883c48e470f5b737de0e50cd4f97163", "id": "553697181249437716", "name": "Dawn of Man", "publishers": [{"id": "521816794722205696", "name": "Madruga Works"}], "splash": "073d43f43a93e6a4be72c83ae5d6dc5b", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "858810", "sku": "858810"}], "type": 1, "verify_key": "3c862a0832d3d29fa4c1aa0c4172f89ac80ceaea2877584ee6723dff83ebe0be"}, {"bot_public": true, "bot_require_code_grant": false, "cover_image": "afcdc55df02219027c6041333470d7e3", "description": "Warface is a free-to-play MMO first person shooter from the creators of Far Cry and Crysis. It is packed with cooperative and competitive action, a range of game modes and a wealth of weapons for you to get your hands on.", "developers": [{"id": "586470256608804893", "name": "MY.GAMES"}], "executables": [{"is_launcher": false, "name": "gamecenter/bin32release/game.exe", "os": "win32"}, {"is_launcher": false, "name": "warface/bin32release/game.exe", "os": "win32"}], "flags": 0, "guild_id": "309400144967761931", "hook": true, "icon": "afcdc55df02219027c6041333470d7e3", "id": "554573307161214977", "name": "Warface", "primary_sku_id": "554573307161214977", "publishers": [{"id": "586470256583770122", "name": "MY.GAMES"}], "slug": "warface", "splash": "7f74d5a9a8ccc7d41ef6e9f55f41e596", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "291480", "sku": "291480"}], "type": 1, "verify_key": "67d74b53f6bf8c3b87c18ebc0008d8e15d64aa07ccb3563aafcc2d2a52d03331"}, {"description": "An online-only open-world shooter-RPG sequel that will build upon and improve things from the first game.", "developers": [{"id": "521816652745277460", "name": "Massive Entertainment"}, {"id": "521816681228664844", "name": "Ubisoft Annecy Studios"}, {"id": "521816510172233759", "name": "Ubisoft Reflections"}, {"id": "521816515113385985", "name": "Ubisoft Bucharest"}, {"id": "521816583585136661", "name": "Ubisoft Shanghai Studios"}, {"id": "521816551955890205", "name": "Ubisoft Sofia"}, {"id": "524351571421691909", "name": "Red Storm Entertainment, Inc."}], "executables": [{"is_launcher": false, "name": "tom clancy's the division 2/thedivision2.exe", "os": "win32"}], "flags": 0, "guild_id": "477210626742288384", "hook": true, "icon": "aadb17a9cb43c0d24bd270406fecb87d", "id": "554921822626381879", "name": "Tom Clancy's The Division 2", "publishers": [{"id": "521816502500982841", "name": "Ubisoft Entertainment"}], "summary": "", "third_party_skus": [{"distributor": "uplay", "id": "4932", "sku": "4932"}], "type": 1, "verify_key": "cfa4d0d5ff434c000d3df2146196dd08e5bf193530e41086c063ce25a72d6363"}, {"aliases": ["Temtem"], "bot_public": false, "bot_require_code_grant": false, "description": "Temtem is a massively multiplayer creature-collection adventure inspired by Pok\u00e9mon. Seek adventure in the lovely Airborne Archipelago alongside your Temtem squad. Catch every Temtem, battle other tamers, customize your house, join a friend's adventure or explore the dynamic online world.", "developers": [{"id": "558551525182406665", "name": "Crema"}], "executables": [{"is_launcher": false, "name": "temtem.exe", "os": "win32"}], "flags": 0, "guild_id": "417595319849713664", "hook": true, "icon": "43fe04e3711f462168f2cb644416d0b3", "id": "558547388583772201", "name": "Temtem", "primary_sku_id": "558547388583772201", "publishers": [{"id": "524352726985998339", "name": "Humble Bundle"}], "slug": "temtem", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "745920", "sku": "745920"}], "type": 1, "verify_key": "02b9200a712ecbb2c34d66c7b82def60de9402e09ca775246f7a55a6ae68ac83"}, {"aliases": ["Mutant Year Zero: Road to Eden"], "bot_public": true, "bot_require_code_grant": false, "cover_image": "28b68b11a117db6a9cd2ee436b10bad2", "description": "A tactical game combining the turn-based combat of XCOM with story, exploration, stealth, and strategy. Take control of a team of Mutants navigating a post-human Earth. Created by a team including former HITMAN leads and the designer of PAYDAY.", "developers": [{"id": "600373288446984202", "name": "The Bearded Ladies"}], "executables": [{"is_launcher": false, "name": "zoneue4-win64-shipping.exe", "os": "win32"}, {"is_launcher": false, "name": "win64/zoneue4-win64-shipping.exe", "os": "win32"}], "flags": 0, "guild_id": "603552792266932264", "hook": true, "icon": "f8e8d0310bfcff96b794041752966816", "id": "560781100197216267", "name": "Mutant Year Zero: Road to Eden", "primary_sku_id": "560781100197216267", "publishers": [{"id": "521816606318264330", "name": "Funcom"}], "slug": "mutant-year-zero-road-to-eden", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "760060", "sku": "760060"}], "type": null, "verify_key": "d4f14a60e38f724c890429b2eb31952bbab11fee80f008a76bd53edef547e545"}, {"aliases": ["Bloodstained: Ritual of the Night"], "description": "Bloodstained: Ritual of the Night - A gothic horror action side-scrolling RPG by Koji igarashi.", "executables": [{"is_launcher": false, "name": "bloodstainedrotn-win64-shipping.exe", "os": "win32"}, {"is_launcher": false, "name": "win64/bloodstainedrotn-win64-shipping.exe", "os": "win32"}], "flags": 0, "guild_id": "192789663528910849", "hook": true, "icon": "242528ffb1975443aa395ea69f33896e", "id": "565341641427124244", "name": "Bloodstained: Ritual of the Night", "publishers": [{"id": "524352765888036874", "name": "ArtPlay"}, {"id": "524352765888036874", "name": "ArtPlay"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "692850", "sku": "692850"}], "type": null, "verify_key": "b027943c7c8e2578a0d6b1a93493ea1605e8c531924c91838f02a5a235e58920"}, {"aliases": ["Sekiro\u2122: Shadows Die Twice"], "description": "", "executables": [{"is_launcher": false, "name": "sekiro/sekiro.exe", "os": "win32"}, {"is_launcher": false, "name": "sekiro.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "c07bcb25fbd8f645213c541c8d6ba064", "id": "569008830701240340", "name": "Sekiro\u2122: Shadows Die Twice", "publishers": [{"id": "521816800560939010", "name": "FromSoftware"}, {"id": "521816800560939010", "name": "FromSoftware"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "814380", "sku": "814380"}], "type": null, "verify_key": "75438929b8d28f68fba11f602f9362317c66489cd268e8da74495aa1cdd89a6d"}, {"aliases": ["Risk of Rain 2"], "description": "", "executables": [{"is_launcher": false, "name": "risk of rain 2/risk of rain 2.exe", "os": "win32"}, {"is_launcher": false, "name": "risk of rain 2.exe", "os": "win32"}], "flags": 0, "guild_id": "417739215355510784", "hook": true, "icon": "b838c4c744b9cb9f8dd4c8afb82b085f", "id": "569253958967885828", "name": "Risk of Rain 2", "publishers": [{"id": "521816623976415265", "name": "Hopoo Games"}, {"id": "521816623976415265", "name": "Hopoo Games"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "632360", "sku": "632360"}], "type": null, "verify_key": "8040fa7504a966c327da9b629e5d9b9f9db2401a6513f5ddf8fab1bf6523215e"}, {"aliases": ["Satisfactory"], "description": "", "executables": [{"is_launcher": false, "name": "win64/factorygame-win64-shipping.exe", "os": "win32"}, {"is_launcher": false, "name": "factorygame-win64-shipping.exe", "os": "win32"}], "flags": 0, "guild_id": "370472939054956546", "hook": true, "icon": "6c79b34ca44fc2bf906925038d03a2b5", "id": "572456126872944651", "name": "Satisfactory", "publishers": [{"id": "572491148766216192", "name": "Larian Studios (Coop-Land)"}, {"id": "572491148766216192", "name": "Larian Studios (Coop-Land)"}], "summary": "", "type": null, "verify_key": "8f465ffc6ddb3beeec6628d76f243fe5b7389f062023b920c4bb6757b958e0d0"}, {"aliases": ["MORDHAU"], "description": "", "executables": [{"is_launcher": false, "name": "mordhau-win64-shipping.exe", "os": "win32"}, {"is_launcher": false, "name": "win64/mordhau-win64-shipping.exe", "os": "win32"}], "flags": 0, "guild_id": "275436245318893568", "hook": true, "icon": "ca732f9bf6364da1afffa1c8a7eb3dd0", "id": "575412499399180288", "name": "MORDHAU", "publishers": [{"id": "524352802995175437", "name": "Triternion"}, {"id": "524352802995175437", "name": "Triternion"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "629760", "sku": "629760"}], "type": null, "verify_key": "e289f8f7856e21f3109f28d7d55cac6ba0b025eebd1be4e40d5e675a398ed7bc"}, {"aliases": ["Baba Is You"], "description": "", "executables": [{"is_launcher": false, "name": "baba is you/baba is you.exe", "os": "win32"}, {"is_launcher": false, "name": "baba is you.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "40d6927b11783dcf281759a0c3f5f645", "id": "576482762446602270", "name": "Baba Is You", "publishers": [{"id": "524352839536082947", "name": "Hempuli Oy"}, {"id": "524352839536082947", "name": "Hempuli Oy"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "736260", "sku": "736260"}], "type": null, "verify_key": "4f421077e849a6e570cd57feee2d98fa0a0d47525d7eaa17eb136b927f1db48d"}, {"aliases": ["Staxel"], "description": "", "executables": [{"is_launcher": false, "name": "staxel.steamlauncher.exe", "os": "win32"}, {"is_launcher": false, "name": "staxel.modmanager.exe", "os": "win32"}, {"is_launcher": false, "name": "staxel.client.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": null, "id": "584069374462394368", "name": "Staxel", "publishers": [{"id": "584069374982357013", "name": "Plukit"}, {"id": "584069374982357013", "name": "Plukit"}, {"id": "584069374982357013", "name": "Plukit"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "405710", "sku": "405710"}], "type": null, "verify_key": "e7e6c0e2be36b66b3efbacab1e30c24e98d0120280e2aff048fa92de7385a49d"}, {"aliases": ["Supreme Ruler Ultimate"], "cover_image": "4a6d0d9e84fdf0a49001da1c0463d898", "description": "Real-Time Strategy/Wargame. From World War II through the Cold War and into the future, re-live or re-imagine the tensions and crises of our recent history! Guide your nation through the era of your choice in Campaigns, Scenarios, and Sandboxes, as you make every effort to become Supreme Ruler!", "developers": [{"id": "524351803945385984", "name": "Battlegoat Studios"}], "executables": [{"is_launcher": false, "name": "supremerulerultimate.exe", "os": "win32"}], "flags": 0, "guild_id": "322424469438201876", "hook": true, "icon": "5decaa5a70a2fd6ab0d1147033e93bc0", "id": "588739017718366208", "name": "Supreme Ruler Ultimate", "publishers": [{"id": "524351803945385984", "name": "Battlegoat Studios"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "314980", "sku": "314980"}], "type": 1, "verify_key": "d4436fd59db21bd7256b757a6ca6961d35d12c1621fac7e114ed7ffa3a444772"}, {"aliases": ["Dota Underlords"], "description": "", "executables": [{"is_launcher": false, "name": "underlords.exe", "os": "win32"}, {"is_launcher": false, "name": "win64/underlords.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b08a5d13589f76a63f465b09f0b399b2", "id": "592976500802846750", "name": "Dota Underlords", "publishers": [{"id": "521816507102003200", "name": "Valve"}, {"id": "521816507102003200", "name": "Valve"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "1046930", "sku": "1046930"}], "type": null, "verify_key": "2cbd674438bd03db00fafdce91530d7ad1168cae1938acbbb92b75417a8a3f14"}, {"aliases": ["PUBG Lite"], "cover_image": "73239bbc0e0acb6c3c679fd0504f2f40", "description": "PUBG LITE is a Battle Royale shooter that you can enjoy on your laptop and even low-end PCs.", "executables": [{"is_launcher": false, "name": "pubglite/launcher.exe", "os": "win32"}, {"is_launcher": false, "name": "pubglite.exe", "os": "win32"}, {"is_launcher": false, "name": "pubglite/pubg lite.exe", "os": "win32"}, {"is_launcher": false, "name": "pubglite/launcher_updater.exe", "os": "win32"}, {"is_launcher": false, "name": "win64/pubglite-win64-shipping.exe", "os": "win32"}, {"is_launcher": false, "name": "pubglite-win64-shipping.exe", "os": "win32"}], "flags": 0, "guild_id": "583165155454746654", "hook": true, "icon": "8ecc61c6b6ddbb017fe82342192054c0", "id": "597588168178663434", "name": "PUBG LITE", "overlay": true, "publishers": [{"id": "521816684407947265", "name": "Bluehole, Inc."}, {"id": "521816684407947266", "name": "PUBG Corporation"}, {"id": "521816684407947266", "name": "PUBG Corporation"}, {"id": "521816684407947266", "name": "PUBG Corporation"}, {"id": "521816684407947265", "name": "Bluehole, Inc."}, {"id": "521816684407947266", "name": "PUBG Corporation"}, {"id": "521816684407947266", "name": "PUBG Corporation"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "578080", "sku": "578080"}], "type": 1, "verify_key": "b00bfc16183134902936b93e50d9891ea26a3d921590bb30e17016b50c6830d2"}, {"aliases": ["Swords of Gurrah"], "cover_image": "5e345394650b16f97235a85fd63df1ac", "description": "Swords of Gurrah is a VR Swordfighting game set in the far future. Robots fighting Robots for the entertainment of the vast crowds that watch!", "developers": [{"id": "597860020935327790", "name": "Devster, LLC"}], "executables": [{"is_launcher": false, "name": "gurrah-win64-shipping.exe", "os": "win32"}, {"is_launcher": false, "name": "gurrah.exe", "os": "win32"}], "flags": 0, "guild_id": "432298669857964042", "hook": true, "icon": "5e345394650b16f97235a85fd63df1ac", "id": "597860020935327787", "name": "Swords of Gurrah", "primary_sku_id": "597860020935327787", "publishers": [{"id": "597860020935327790", "name": "Devster, LLC"}, {"id": "597860020935327790", "name": "Devster, LLC"}], "slug": "swords-of-gurrah", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "833090", "sku": "833090"}], "type": null, "verify_key": "bd81019f402c3126bfc52a965ac5275fccb29d5529cb7f02ba64459417f73920"}, {"aliases": ["Lethal League Blaze"], "cover_image": "c9c951284749adc5eaa6fb0d9860f00c", "description": "Banging beats and mad style, Lethal League Blaze is the most intense ball game you can play online with up to 4 players.", "executables": [{"is_launcher": false, "name": "llblaze.exe", "os": "win32"}, {"is_launcher": false, "name": "llblaze/llblaze.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "19dcc7f3c4c5864f2828a58cc9b19e03", "id": "606163888052109312", "name": "Lethal League Blaze", "publishers": [{"id": "521816753341333510", "name": "Team Reptile"}, {"id": "521816753341333510", "name": "Team Reptile"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "553310", "sku": "553310"}], "type": null, "verify_key": "dfde5caffa8c3329b3228f8b8acc80d650f04dbc0bca2c9c0469aa3c338ba501"}, {"aliases": ["Bloons TD 6"], "cover_image": "ba35fab3925cc6cee14d84791930ba58", "description": "The Bloons are back and better than ever! Get ready for a massive 3D tower defense game designed to give you hours and hours of the best strategy gaming available.", "developers": [{"id": "521816733728768032", "name": "Ninja Kiwi"}], "executables": [{"is_launcher": false, "name": "bloonstd6.exe", "os": "win32"}, {"is_launcher": false, "name": "bloonstd6/bloonstd6.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "964bba45cea807405b9919863052277c", "id": "614380482620293151", "name": "Bloons TD 6", "publishers": [{"id": "521816733728768032", "name": "Ninja Kiwi"}], "summary": "", "third_party_skus": [{"distributor": "google_play", "id": "com.ninjakiwi.bloonstd6", "sku": "com.ninjakiwi.bloonstd6"}, {"distributor": "steam", "id": "960090", "sku": "960090"}], "type": 1, "verify_key": "f33f299680a4d2b300c9e0d42c841466f1798bff9e764adc82d452819839d134"}, {"aliases": ["Bloons Adventure Time TD"], "cover_image": "516d2a9ab85b64c98396d12f01bedd4e", "description": "The Bloons have invaded the Land of Ooo and it\u2019s up to Finn, Jake and the monkeys to stop them! Bloons Adventure Time TD is an awesome crossover between the award-winning animated series Adventure Time and the #1 Tower Defense game, Bloons TD!", "developers": [{"id": "521816733728768032", "name": "Ninja Kiwi"}], "executables": [{"is_launcher": false, "name": "btdadventuretime.exe", "os": "win32"}, {"is_launcher": false, "name": "bloons adventure time td/btdadventuretime.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3ca95883382eece466bb7bda81cb5062", "id": "614448244260339712", "name": "Bloons Adventure Time TD", "publishers": [{"id": "521816733728768032", "name": "Ninja Kiwi"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "979060", "sku": "979060"}, {"distributor": "google_play", "id": "com.ninjakiwi.btdadventuretime", "sku": "com.ninjakiwi.btdadventuretime"}], "type": 1, "verify_key": "a7db260cfc717c170598e7f8c20beead09e010b0acea514599575d6b2496b9dd"}, {"aliases": ["World of Warcraft\u2122 Classic"], "description": "World of Warcraft is an MMORPG that takes place in Blizzard Entertainment's Warcraft universe; at its peak, it boasted a player base of over 12.5 million subscribers, making it the most popular MMO of all time.", "developers": [{"id": "521816523430428673", "name": "Blizzard Entertainment"}], "executables": [{"is_launcher": false, "name": "wowclassic.exe", "os": "win32"}], "flags": 0, "guild_id": "376400768225378320", "hook": true, "icon": "fc92f820c44e72085dc6205e5e746850", "id": "615752773690064908", "name": "World of Warcraft Classic", "overlay": true, "publishers": [{"id": "521816523430428673", "name": "Blizzard Entertainment"}], "summary": "", "third_party_skus": [{"distributor": "battlenet", "id": "WoW", "sku": "WoW"}], "type": 1, "verify_key": "726404d154c19639da4eb71acc4736d9e0140846c2289b59f6f46a4ef692e7e9"}, {"aliases": ["Tower Keepers"], "cover_image": "28e21a707fb200d1a32fbcfb3a25bc63", "description": "Train an epic army of heroes and defend your tower against all enemies. Embark on more than 75 unique missions against 70+ monster types, each with their own special attacks. Loot your foes, discover hidden treasure chests, and complete quests to unlock new skills, weapons, and armor for each hero. Enchant your items or craft new ones to maximize your power, then enter Hero Battles and pit your be", "developers": [{"id": "521816733728768032", "name": "Ninja Kiwi"}], "executables": [{"is_launcher": false, "name": "tower keepers/tower keepers.exe", "os": "win32"}, {"is_launcher": false, "name": "tower keepers.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "bbc6dc22a5589ba490b37dc8716526a9", "id": "618575278339260467", "name": "Tower Keepers", "publishers": [{"id": "521816733728768032", "name": "Ninja Kiwi"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "881490", "sku": "881490"}, {"distributor": "google_play", "id": "com.ninjakiwi.towerkeepers", "sku": "com.ninjakiwi.towerkeepers"}], "type": 1, "verify_key": "e231d818e0bc06ec4c119db4caeb49d383579032c1eeec44f7a692d4165c6233"}, {"aliases": ["Gears 5"], "description": "As humanity goes to war against the Swarm, Kait Diaz sets out to uncover her own connection to Sera's enemies of the past and present.", "developers": [{"id": "521816666053672985", "name": "The Coalition"}], "executables": [{"is_launcher": false, "name": "gears5.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "13dcc442669b8f2c5e8d5ee912cc969c", "id": "620685135066693642", "name": "Gears 5", "publishers": [{"id": "521816504824758295", "name": "Microsoft Studios"}], "splash": "25465485f47807d1148712579a9f8314", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "1097840", "sku": "1097840"}], "type": 1, "verify_key": "a881a38a419ec97119043a637887c1224212564a7f026c288a5669fc2da68f93"}, {"aliases": ["CONTROL"], "description": "", "executables": [{"is_launcher": false, "name": "control_dx12.exe", "os": "win32"}, {"is_launcher": false, "name": "control/control_dx11.exe", "os": "win32"}, {"is_launcher": false, "name": "control_dx11.exe", "os": "win32"}], "flags": 0, "guild_id": "437914731131568129", "hook": true, "icon": "2ee005575dcb597f237c61feb21a2384", "id": "620758922940383242", "name": "Control", "publishers": [{"id": "521816635749695508", "name": "Remedy Entertainment"}, {"id": "521816635749695508", "name": "Remedy Entertainment"}, {"id": "521816635749695508", "name": "Remedy Entertainment"}], "summary": "", "type": null, "verify_key": "8642ece11cc260dcf572f33b21776dad97c8df5c289ee1212842d4a753fd2f1f"}, {"aliases": ["Call of Duty Modern Warfare", "Call of Duty: Modern Warfare"], "cover_image": "d6fef6748f631e91707a8f866bdf9396", "description": "Infinity Ward's 2019 reboot of the Modern Warfare franchise.", "developers": [{"id": "521816501544550406", "name": "Infinity Ward"}], "executables": [{"is_launcher": false, "name": "call of duty modern warfare/modernwarfare.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d6fef6748f631e91707a8f866bdf9396", "id": "631914894446297148", "name": "Call of Duty\u00ae: Modern Warfare\u00ae", "overlay": true, "publishers": [{"id": "521816501544550404", "name": "Activision"}], "summary": "", "third_party_skus": [{"distributor": "battlenet", "id": null, "sku": null}], "type": 1, "verify_key": "49c9895a8fe1de71e51c202dad1567c3874e205c2a81f5fa2797386a7e34b37d"}, {"description": "Set in the world of League of Legends, Legends of Runeterra is the strategy card game where skill, creativity, and cleverness determine your success. Choose your champions and combine cards from different regions\u2014each with their own style and strategic advantage\u2014then build the perfect deck to take down the rest.", "executables": [{"is_launcher": false, "name": "riot games/lor/live/game/lor.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4f42c52dac4e8d8943cdeb055338754b", "id": "633832498614370323", "name": "Legends of Runeterra", "summary": "", "type": 1, "verify_key": "1ea540b400de1979c6bf9c19a7ce1d3c67593683a31e545d5002d1d676261a6c"}, {"aliases": ["The Outer Worlds"], "description": "", "executables": [{"is_launcher": false, "name": "indianaepicgamestore-win64-shipping.exe", "os": "win32"}, {"is_launcher": false, "name": "win64/indianaepicgamestore-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "598ea1149cb3577a1c4b3f3d623071ed", "id": "637382434089861160", "name": "The Outer Worlds", "summary": "", "type": null, "verify_key": "81519c5e8f8b9dd5519e1e732a1c8d3bcf2a6b5c80cd887c93f9641f83903507"}, {"description": "The third game in Rockstar's Wild West-themed series is a prequel to the events of Red Dead Redemption, returning to the open-world action of its predecessor.", "developers": [{"id": "521816560537567257", "name": "Rockstar Games"}], "executables": [{"is_launcher": false, "name": "red dead redemption 2/rdr2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "7a1ea902d81d392bfc057e3507498863", "id": "643897785271189524", "name": "Red Dead Redemption 2", "publishers": [{"id": "521816560537567257", "name": "Rockstar Games"}], "splash": "b68121c4ece68d5ab313f797a5ca1107", "summary": "", "type": 1, "verify_key": "125e27e185dbcbead0b1f012deb08dfa2d06cc16749dd88e4bac190edd59d8bb"}, {"aliases": ["STAR WARS Jedi: Fallen Order\u2122"], "description": "", "executables": [{"is_launcher": false, "name": "starwarsjedifallenorder.exe", "os": "win32"}, {"is_launcher": false, "name": "win64/starwarsjedifallenorder.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "547a421b3058f4edc772a7ad3e80d9f9", "id": "649511727641133066", "name": "STAR WARS Jedi: Fallen Order\u2122", "publishers": [{"id": "521816569601458178", "name": "Respawn Entertainment"}, {"id": "521816569601458178", "name": "Respawn Entertainment"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "1172380", "sku": "1172380"}], "type": null, "verify_key": "429841c8e6787cf3ed5e907825ca49a115bbc8e30101bc69399c018713c45f6e"}, {"cover_image": "9ade2a78199d3628e55f93a3155fcd8a", "description": "Pirates of the Burning Sea, the classic Sony MMO, now Free-to-Play! Come, hoist sail and carve out your own legend upon the Burning Sea!", "executables": [{"is_launcher": false, "name": "pirates of the burning sea/potbs.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "3ec238055e597b52772f271d4691cd4a", "id": "651923442286985217", "name": "Pirates of the Burning Sea", "summary": "", "type": 1, "verify_key": "95ddc38ac9b5c66003d8a2938ee758b60548dd6e3706806ae3ad85ef78b1f2b8"}, {"aliases": ["Halo: The Master Chief Collection"], "description": "", "executables": [{"is_launcher": false, "name": "mcc-win64-shipping.exe", "os": "win32"}, {"is_launcher": false, "name": "win64/mcc-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": null, "id": "653432003798106122", "name": "Halo: The Master Chief Collection", "publishers": [{"id": "524352028818800643", "name": "343 Industries"}, {"id": "524352028818800643", "name": "343 Industries"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "976730", "sku": "976730"}], "type": null, "verify_key": "7659e87b177da8cce5523f783b4605602b65773cddf9071bcc7771c5d1b0553e"}, {"aliases": ["Forza Horizon 4"], "description": "", "developers": [{"id": "521816775248183306", "name": "Playground Games"}], "executables": [{"is_launcher": false, "name": "forzahorizon4.exe", "os": "win32"}], "flags": 0, "hook": false, "icon": "e023b3314301eeaf0bcd0a565b2b023e", "id": "656353816370741248", "name": "Forza Horizon 4", "publishers": [{"id": "521816679085506591", "name": "Turn 10 Studios"}], "summary": "", "type": 1, "verify_key": "8dba56fbdd8f4f76bede1cbf529abfa1446b04e34d0c98aae8107bcc76394d79"}, {"aliases": ["DOOM Eternal"], "description": "", "executables": [{"is_launcher": false, "name": "doometernal/doometernalx64vk.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": null, "id": "693016355007496202", "name": "DOOM Eternal", "publishers": [{"id": "521816563024920606", "name": "id Software"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "782330", "sku": "782330"}], "type": null, "verify_key": "394747259562a34e45b3aec8baabd9f99bd72974bd04cb6a6c1ed13be268cd3d"}, {"aliases": ["Return of the Obra Dinn"], "description": "", "executables": [{"is_launcher": false, "name": "obradinn/obradinn.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "b36e78e41cb56c9d1e089193c187556e", "id": "696065774061879446", "name": "Return of the Obra Dinn", "publishers": [{"id": "521816540853698567", "name": "Lucas Pope"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "653530", "sku": "653530"}], "type": null, "verify_key": "f5a3ca6c101d7b9b4e796c830ce3dfb9c2b79a669da38e05454a646c3bf1bcd3"}, {"aliases": ["VALORANT"], "description": "", "executables": [{"is_launcher": false, "name": "win64/valorant-win64-shipping.exe", "os": "win32"}], "flags": 0, "guild_id": "679875946597056683", "hook": true, "icon": "e55fc8259df1548328f977d302779ab7", "id": "700136079562375258", "name": "VALORANT", "overlay": true, "publishers": [{"id": "521816780168232961", "name": "Riot Games, Inc"}], "summary": "", "type": null, "verify_key": "9c0c5c972af9029b85743a3d1c756ef6286058699029c63fbc22dc7d28607748"}, {"aliases": ["Age of Empires: Definitive Edition"], "description": "", "executables": [{"is_launcher": false, "name": "aoede/aoede_s.exe", "os": "win32"}, {"is_launcher": false, "name": "aoede_s.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": null, "id": "700150526729519165", "name": "Age of Empires: Definitive Edition", "publishers": [{"id": "700150527622643742", "name": "Forgotten Empires"}, {"id": "700150527622643742", "name": "Forgotten Empires"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "1017900", "sku": "1017900"}], "type": null, "verify_key": "77055e5eb29bf413f1abcbbdcd6004de6bf507efce7354bac86f8b04aec35b08"}, {"aliases": ["Age of Empires II: Definitive Edition"], "description": "", "executables": [{"is_launcher": false, "name": "aoe2de/aoe2de_s.exe", "os": "win32"}, {"is_launcher": false, "name": "aoe2de_s.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": null, "id": "700150779050459157", "name": "Age of Empires II: Definitive Edition", "publishers": [{"id": "700150527622643742", "name": "Forgotten Empires"}, {"id": "700150527622643742", "name": "Forgotten Empires"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "813780", "sku": "813780"}], "type": null, "verify_key": "8712925d45aa2aab146817dc3220dac83bbac79633d7ed77e12a9c8bb2bfa76f"}, {"aliases": ["Wurm Online"], "description": "Wurm Online. The Ultimate Sandbox MMORPG.\nDeveloped around the idea that sandboxes should give ultimate freedom, Wurm Online aims to hold true to the original sandbox vision.\n\nWith sprawling seamless lands, no instances, and a true open-world experience Wurm Online offers limitless opportunities for you to write your story.\n\nYour journey starts here. ", "executables": [{"is_launcher": false, "name": "wurmlauncher64.exe", "os": "win32"}, {"is_launcher": false, "name": "wurm online/wurmlauncher64.exe", "os": "win32"}], "flags": 0, "guild_id": "202801255024689153", "hook": true, "icon": "36803256819004c1bba31531a2f0a192", "id": "714975833495830608", "name": "Wurm Online", "overlay": true, "publishers": [{"id": "524352473570345034", "name": "Code Club AB"}, {"id": "524352473570345034", "name": "Code Club AB"}], "summary": "", "type": 1, "verify_key": "ec409fc434adc981c1d39aea9aa7c4eb9a71e11475f6a397cbcd366638aa4b1a"}, {"aliases": ["Age of Empires: Definitive Edition"], "cover_image": "1877359b4a2072badf387c676b517b04", "description": "Age of Empires, the pivotal real-time strategy game that launched a 20-year legacy returns with modernized gameplay, all-new 4K visuals, 8-person multiplayer battles and a host of other new features. Welcome back to history.", "executables": [{"is_launcher": false, "name": "age of empires - definitive edition/aoede_s.exe", "os": "win32"}, {"is_launcher": false, "name": "aoede_s.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "70afb8485fa303d9479b4fb6c0d921a6", "id": "720771267149561936", "name": "Age of Empires: Definitive Edition", "summary": "", "type": null, "verify_key": "4c9b95c8163a6aed6629e3c89e064a5b7df47c6237eaf6d4a908958c30da008d"}, {"aliases": ["Age of Empires II: Definitive Edition"], "cover_image": "479d98514a15ead4dcf0ca3290ba8b83", "description": "Age of Empires II: Definitive Edition celebrates the 20th anniversary of one of the most popular strategy games ever with stunning 4K Ultra HD graphics, a new and fully remastered soundtrack, and brand-new content, \u201cThe Last Khans\u201d with 3 new campaigns and 4 new civilizations.", "executables": [{"is_launcher": false, "name": "age of empires ii definitive edition/aoe2de_s.exe", "os": "win32"}, {"is_launcher": false, "name": "aoe2de_s.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2217db08e18c9f5cb546ba1dd444f843", "id": "720771660768084008", "name": "Age of Empires II: Definitive Edition", "summary": "", "third_party_skus": [{"distributor": "steam", "id": null, "sku": null}], "type": null, "verify_key": "cd2771a5da3d759afdba1b25741c6b6e2b58b0495893e82b3eb29e6717387e38"}, {"aliases": ["The Surge 2"], "description": "", "executables": [{"is_launcher": false, "name": "bin/thesurge2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": null, "id": "733854133471150151", "name": "The Surge 2", "publishers": [{"id": "733854134301753396", "name": "Deck13"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "644830", "sku": "644830"}], "type": null, "verify_key": "81d6733e51bf9f7483d5ee00c38613ed79c22f9d455d0d55fdcc7a1cd37c11eb"}, {"aliases": ["DEATH STRANDING"], "description": "", "executables": [{"is_launcher": false, "name": "death stranding/ds.exe", "os": "win32"}, {"is_launcher": false, "name": "ds.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": null, "id": "734286565114904586", "name": "DEATH STRANDING", "publishers": [{"id": "521816572088811558", "name": "Kojima Productions"}, {"id": "521816572088811558", "name": "Kojima Productions"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "1190460", "sku": "1190460"}], "type": null, "verify_key": "9acd0ffbc0b34d170bb555dd6940e79806c1d36d13759ebe2d00146b558413c3"}, {"aliases": ["Rogue Company"], "description": "", "executables": [{"is_launcher": false, "name": "win64/roguecompany.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": null, "id": "737391147659558963", "name": "Rogue Company", "summary": "", "third_party_skus": [{"distributor": "steam", "id": "872200", "sku": "872200"}], "type": null, "verify_key": "2986b62a6e5965ec6520bf501f2446807563ae6bc416ecbed6e8543c9e5202ef"}, {"aliases": ["Grounded"], "description": "", "executables": [{"is_launcher": false, "name": "win64/maine-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": null, "id": "738856512868450314", "name": "Grounded", "publishers": [{"id": "521816588169510930", "name": "Obsidian Entertainment"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "962130", "sku": "962130"}], "type": null, "verify_key": "b8643564000c06c34e5fadb3e7582d7282833641d98b081311302a5e5396ce89"}, {"aliases": ["Fall Guys"], "description": "", "executables": [{"is_launcher": false, "name": "fall guys/fallguys_client.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "4abfab12a5b69e66d558d51b855f7fc8", "id": "742897755160313986", "name": "Fall Guys", "publishers": [{"id": "524352083227574277", "name": "Mediatonic"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "1097150", "sku": "1097150"}], "type": null, "verify_key": "7406b69f9334d5d204b66020e9541be0523a7bd2ece2bf3172fbf63003d2f7df"}, {"aliases": ["Microsoft Flight Simulator"], "description": "", "executables": [{"is_launcher": false, "name": "flightsimulator.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "d82578c6150138e1cd8714e19a47e449", "id": "750925046729670796", "name": "Microsoft Flight Simulator", "publishers": [{"id": "524351662345814046", "name": "Asobo Studio"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "1250410", "sku": "1250410"}], "type": null, "verify_key": "542aaabd78d31eff878e8162b8c7f97c2922abcaab557ede89350bc6061b0f1d"}, {"bot_public": false, "bot_require_code_grant": false, "cover_image": "6e018ba6b632385031697110947e3286", "description": "Spellcraft for live server", "executables": [{"is_launcher": false, "name": "spellcraft-gamelab/game/run/tap.exe", "os": "win32"}, {"is_launcher": true, "name": "spellcraft-gamelab.exe", "os": "win32"}, {"is_launcher": true, "name": "spellcraft-staging.exe", "os": "win32"}, {"is_launcher": false, "name": "spellcraft-staging/game/run/tap.exe", "os": "win32"}, {"is_launcher": false, "name": "spellcraft-live/game/run/tap.exe", "os": "win32"}, {"is_launcher": true, "name": "spellcraft-live.exe", "os": "win32"}], "flags": 557056, "hook": true, "icon": "6e824a5f986e303e70b7f2231f929940", "id": "760174052760354875", "name": "Spellcraft", "privacy_policy_url": "https://www.playspellcraft.com/privacy-policy/", "summary": "", "tags": ["Fun", "Gaming", "Social", "Spellcraft", "Strategy"], "terms_of_service_url": "https://www.playspellcraft.com/terms-of-service/", "third_party_skus": [{"distributor": "steam", "id": "1806210", "sku": "1806210"}], "type": 1, "verify_key": "1101a0a95fef2867904b56d1c3fbccbc2984d80702d2fe0ecaff565b5a3822d3"}, {"aliases": ["Genshin Impact"], "description": "", "executables": [{"is_launcher": false, "name": "genshinimpact.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "eb0e25b739e4fa38c1671a3d1edcd1e0", "id": "762434991303950386", "name": "Genshin Impact", "publishers": [{"id": "761445206977150976", "name": "miHoYo Co.,Ltd"}], "summary": "", "type": 1, "verify_key": "6695f96ea0defeb461bb51bd04bfd58618531ebe3582905b4a378d97adeb6403"}, {"cover_image": "96e0cd3d86c0af9289f400e4d49b6924", "description": "", "executables": [{"is_launcher": false, "name": "/haloinfinite.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "96e0cd3d86c0af9289f400e4d49b6924", "id": "770314100885422095", "name": "Halo Infinite", "overlay": true, "summary": "", "type": null, "verify_key": "474d55ea954317826e0ec43d5986e17da1865f5170c9bdde7871a01e4cbeef9f"}, {"aliases": ["Assassin's Creed Valhalla"], "description": "", "executables": [{"is_launcher": false, "name": "acvalhalla.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "605cc6df7de5c999c15ac96819df7698", "id": "775754545778786314", "name": "Assassin's Creed Valhalla", "publishers": [{"id": "521816510730338325", "name": "Ubisoft"}], "summary": "", "third_party_skus": [{"distributor": "uplay", "id": "13504", "sku": "13504"}], "type": null, "verify_key": "09103ffe36096c03497c0e91adde936efcc98dd9f79b651d432e280e882712f6"}, {"aliases": ["IL-2 Sturmovik: Battle of Stalingrad"], "description": "", "executables": [{"is_launcher": false, "name": "il-2.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "9070cc0e06d5c4d21d6571e8894bb8c4", "id": "777681581917601792", "name": "IL-2 Sturmovik: Battle of Stalingrad", "publishers": [{"id": "524353275915534349", "name": "1C Game Studios"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "307960", "sku": "307960"}], "type": null, "verify_key": "53089449a8b9c0c1c70bfec2d1a80fa22099329e051fc460773b79759f6dee32"}, {"aliases": ["Call of Duty Black Ops Cold War"], "description": "", "executables": [{"is_launcher": false, "name": "blackopscoldwar.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "cefe4242931c2efcf104b8d9e34801ed", "id": "783440677958189096", "name": "Call of Duty\u00ae: Black Ops Cold War", "overlay": true, "publishers": [{"id": "521816523430428673", "name": "Blizzard Entertainment"}], "summary": "", "third_party_skus": [{"distributor": "battlenet", "id": null, "sku": null}], "type": 1, "verify_key": "599bf81980bfd72a89147a13de746f044372a0c0b7437965a47ddc52f3b376c2"}, {"aliases": ["Cyberpunk 2077"], "description": "", "executables": [{"is_launcher": false, "name": "cyberpunk2077.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "e1042cfe3bb845f3c1f4fffd6227f4cf", "id": "787443973538971748", "name": "Cyberpunk 2077", "overlay": true, "publishers": [{"id": "521816596172505089", "name": "CD Projekt Red"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "1091500", "sku": "1091500"}], "type": null, "verify_key": "4c0b2f474c34674b875ac2d9dfd8ffd0b08950c7c983eec63b0e83a1ea7b8c0a"}, {"aliases": ["STAR WARS Battlefront", "STAR WARS\u2122 Battlefront\u2122", "Star Wars Battlefront"], "description": "A team-based multiplayer-focused first-person/third-person shooter focusing on large-scale infantry battles in the Star Wars universe.", "developers": [{"id": "521816651793039390", "name": "Pandemic Studios"}], "executables": [{"is_launcher": false, "name": "battlefront.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "941ab85f20f110abb0289bc6c42f99df", "id": "788507043358834698", "name": "STAR WARS\u2122 Battlefront\u2122 (classic)", "publishers": [{"id": "521816522977574923", "name": "LucasArts Entertainment Company LLC"}], "summary": "", "third_party_skus": [{"distributor": "origin", "id": null, "sku": null}], "type": 1, "verify_key": "fe9df6145a8db8bd9f434939858490b87f9f20a97e59af38a488707326cc99bf"}, {"aliases": ["STAR WARS\u2122 Battlefront\u2122 II", "Star Wars Battlefront II"], "description": "The sequel to Star Wars: Battlefront, adding new game modes, new playable classes and abilities, revamped single-player modes, and huge space battles.", "developers": [{"id": "521816651793039390", "name": "Pandemic Studios"}], "executables": [{"is_launcher": false, "name": "battlefrontii.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0dcb47f4e8d8a55e6ba0a5686c27c299", "id": "788511984575316028", "name": "Star Wars: Battlefront 2 (Classic, 2005)", "overlay": true, "publishers": [{"id": "521816522977574923", "name": "LucasArts Entertainment Company LLC"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "6060", "sku": "6060"}], "type": 1, "verify_key": "284ffd1c7e483e7fda172ce0246d6dfbb9b9bc79efdf5b4f79afe7dccdba3acb"}, {"aliases": ["OUTRIDERS"], "description": "", "executables": [{"is_launcher": false, "name": "outriders-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "acac02335ce36094b7fdb1ff0d869c20", "id": "828186715994849280", "name": "OUTRIDERS", "overlay": true, "publishers": [{"id": "521816615457783829", "name": "People Can Fly"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "680420", "sku": "680420"}], "type": null, "verify_key": "0efb65e787a135200b483cfe9bddd8175ab8439933076f449de43c958f0583ea"}, {"aliases": ["Tribes of Midgard"], "description": "", "executables": [{"is_launcher": false, "name": "win64/tom-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "407a87416c9c7b966969f3451d39f60e", "id": "874492645689397258", "name": "Tribes of Midgard", "publishers": [{"id": "874492649359425536", "name": "Norsfell"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "858820", "sku": "858820"}], "type": null, "verify_key": "41a8c246f8e741426e62e3358df083fe32fa73835ecb2caed88932bdfbce64f1"}, {"aliases": ["Disco Elysium"], "description": "", "executables": [{"is_launcher": false, "name": "disco elysium/disco.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "74fb89f3bc80e76f8b2add2f0accbe90", "id": "876570707306381342", "name": "Disco Elysium", "publishers": [{"id": "876570708862451772", "name": "ZA/UM"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "632470", "sku": "632470"}], "type": null, "verify_key": "195969982b0ea3dab0e14cd741c922698c2609f46341913122faeaf84b8a0fa1"}, {"aliases": ["New World"], "description": "", "executables": [{"is_launcher": false, "name": "newworldlauncher.exe", "os": "win32"}, {"is_launcher": false, "name": "new world/newworldlauncher.exe", "os": "win32"}, {"is_launcher": false, "name": "newworld.exe", "os": "win32"}, {"is_launcher": false, "name": "bin64/newworld.exe", "os": "win32"}], "flags": 0, "guild_id": "854475600080928768", "hook": true, "icon": "e53fac6bebee68e171701973688d4bb3", "id": "892480701583204422", "name": "New World", "publishers": [{"id": "892480703382577152", "name": "Amazon Games"}, {"id": "892480703382577152", "name": "Amazon Games"}, {"id": "892480703382577152", "name": "Amazon Games"}, {"id": "892480703382577152", "name": "Amazon Games"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "1063730", "sku": "1063730"}], "type": null, "verify_key": "70dfc170d4c1dfd123012bd6a4dcaddeb3525c95185f460e9d5b9bed76f50c50"}, {"aliases": ["Forza Horizon 5"], "description": "", "executables": [{"is_launcher": false, "name": "forzahorizon5.exe", "os": "win32"}], "flags": 0, "hook": false, "icon": null, "id": "905961880789590076", "name": "Forza Horizon 5", "publishers": [{"id": "521816775248183306", "name": "Playground Games"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "1551360", "sku": "1551360"}], "type": null, "verify_key": "dfa5876e005df8060a775550eac5253f103bfa3651571ae08ea09a2d6fc909f7"}, {"aliases": ["Lost Ark Closed Technical Alpha"], "description": "", "executables": [{"is_launcher": false, "name": "win64/lostark.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "2df369a2ad4ceeb1fe50c89adc21f442", "id": "940810636273795162", "name": "Lost Ark", "overlay": true, "publishers": [{"id": "940810638438039593", "name": "Smilegate RPG"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "1599340", "sku": "1599340"}], "type": null, "verify_key": "e67b487ef9fd2568dd71e8b939cd4d4418cab831d1563bc9372989dc52fe2a8a"}, {"aliases": ["ELDEN RING"], "description": "", "executables": [{"is_launcher": false, "name": "game/eldenring.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": "0a0c0a0be069dddfc3f1fbede4e34bfd", "id": "946609449680908348", "name": "ELDEN RING", "overlay": true, "publishers": [{"id": "946609454957338724", "name": "FromSoftware Inc."}, {"id": "946609454957338724", "name": "FromSoftware Inc."}, {"id": "946609454957338724", "name": "FromSoftware Inc."}, {"id": "946609454957338724", "name": "FromSoftware Inc."}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "1245620", "sku": "1245620"}], "type": null, "verify_key": "b4f72a8c737a8e9157ccbaddbd1e705af195d8cec53e5642f6ec7869e841cb34"}, {"aliases": ["MONSTER HUNTER RISE"], "description": "", "executables": [{"is_launcher": false, "name": "monsterhunterrise/monsterhunterrise.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": null, "id": "1022248949865791588", "name": "MONSTER HUNTER RISE", "publishers": [{"id": "521816514106621968", "name": "CAPCOM Co., Ltd."}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "1446780", "sku": "1446780"}], "type": 1, "verify_key": "27082b1f7c23829fa7a896a1de3edbafcfccb0867950ea0a09fc440b3ab9c0be"}, {"aliases": ["Omega Strikers"], "description": "", "executables": [{"is_launcher": false, "name": "prometheus/prometheus.exe", "os": "win32"}, {"is_launcher": false, "name": "win64/prometheus-win64-shipping.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": null, "id": "1022250405255708788", "name": "Omega Strikers", "publishers": [{"id": "1022250405998112788", "name": "Odyssey Interactive"}, {"id": "1022250405998112788", "name": "Odyssey Interactive"}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "1869590", "sku": "1869590"}], "type": 1, "verify_key": "10d8e5350bcc62daaacd06b9402834c5f57110854eac4250f525f78a93848069"}, {"aliases": ["MONSTER HUNTER RISE: SUNBREAK DEMO"], "description": "", "executables": [{"is_launcher": false, "name": "monster hunter rise sunbreak demo/mhrisesunbreakdemo.exe", "os": "win32"}], "flags": 0, "hook": true, "icon": null, "id": "1025084469306200064", "name": "MONSTER HUNTER RISE: SUNBREAK DEMO", "publishers": [{"id": "521816514106621968", "name": "CAPCOM Co., Ltd."}], "summary": "", "third_party_skus": [{"distributor": "steam", "id": "1836450", "sku": "1836450"}], "type": null, "verify_key": "33302832039ff1da1d438eec74385e6c937d37e9850b3ac3899c31e4cad4958d"}] \ No newline at end of file diff --git a/src/util/arRPC/process/index.js b/src/util/arRPC/process/index.js deleted file mode 100644 index 6293439..00000000 --- a/src/util/arRPC/process/index.js +++ /dev/null @@ -1,102 +0,0 @@ -'use strict'; - -const rgb = (r, g, b, msg) => `\x1b[38;2;${r};${g};${b}m${msg}\x1b[0m`; -const log = (...args) => console.log(`[${rgb(88, 101, 242, 'arRPC')} > ${rgb(237, 66, 69, 'process')}]`, ...args); -const { setInterval } = require('node:timers'); -const process = require('process'); -const DetectableDB = require('./detectable.json'); -const Natives = require('./native/index.js'); - -const Native = Natives[process.platform]; - -const timestamps = {}, - names = {}, - pids = {}; -module.exports = class ProcessServer { - constructor(handlers, debug = false) { - this.debug = debug; - if (!Native) return; // Log('unsupported platform:', process.platform); - - this.handlers = handlers; - - this.scan = this.scan.bind(this); - - this.scan(); - setInterval(this.scan, 5000).unref(); - - if (this.debug) log('started'); - } - - async scan() { - const processes = await Native.getProcesses(); - const ids = []; - - for (const [pid, _path] of processes) { - const path = _path.toLowerCase().replaceAll('\\', '/'); - const toCompare = [path.split('/').pop(), path.split('/').slice(-2).join('/')]; - - for (const p of toCompare.slice()) { - // Add more possible tweaked paths for less false negatives - toCompare.push(p.replace('64', '')); // Remove 64bit identifiers-ish - toCompare.push(p.replace('.x64', '')); - toCompare.push(p.replace('x64', '')); - } - - for (const { executables, id, name } of DetectableDB) { - if (executables?.some(x => !x.isLauncher && toCompare.some(y => x.name === y))) { - names[id] = name; - pids[id] = pid; - - ids.push(id); - if (!timestamps[id]) { - // eslint-disable-next-line max-depth - if (this.debug) log('detected game!', name); - timestamps[id] = Date.now(); - - this.handlers.message( - { - socketId: id, - }, - { - cmd: 'SET_ACTIVITY', - args: { - activity: { - application_id: id, - name, - timestamps: { - start: timestamps[id], - }, - }, - pid, - }, - }, - ); - } - } - } - } - - for (const id in timestamps) { - if (!ids.includes(id)) { - if (this.debug) log('lost game!', names[id]); - delete timestamps[id]; - - this.handlers.message( - { - socketId: id, - }, - { - cmd: 'SET_ACTIVITY', - args: { - activity: null, - pid: pids[id], - }, - }, - ); - } - } - - // If (this.debug) log(`finished scan in ${(performance.now() - startTime).toFixed(2)}ms`); - // process.stdout.write(`\r${' '.repeat(100)}\r[${rgb(88, 101, 242, 'arRPC')} > ${rgb(237, 66, 69, 'process')}] scanned (took ${(performance.now() - startTime).toFixed(2)}ms)`); - } -}; diff --git a/src/util/arRPC/process/native/index.js b/src/util/arRPC/process/native/index.js deleted file mode 100644 index 130490d..00000000 --- a/src/util/arRPC/process/native/index.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -const linux = require('./linux.js'); -const win32 = require('./win32.js'); -module.exports = { win32, linux }; diff --git a/src/util/arRPC/process/native/linux.js b/src/util/arRPC/process/native/linux.js deleted file mode 100644 index c075fc0..00000000 --- a/src/util/arRPC/process/native/linux.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict'; - -const { exec } = require('child_process'); -const { readlink } = require('fs/promises'); - -const getProcesses = () => - new Promise(res => - exec(`ps a -o "%p;%c;%a"`, async (e, out) => { - res( - ( - await Promise.all( - out - .toString() - .split('\n') - .slice(1, -1) - - .map(async x => { - const split = x.trim().split(';'); - // If (split.length === 1) return; - - const pid = parseInt(split[0].trim()); - /* Unused - const cmd = split[1].trim(); - const argv = split.slice(2).join(';').trim(); - */ - - const path = await readlink(`/proc/${pid}/exe`).catch(() => {}); // Read path from /proc/{pid}/exe symlink - - return [pid, path]; - }), - ) - ).filter(x => x && x[1]), - ); - }), - ); - -module.exports = { getProcesses }; diff --git a/src/util/arRPC/process/native/win32.js b/src/util/arRPC/process/native/win32.js deleted file mode 100644 index c8831a5..00000000 --- a/src/util/arRPC/process/native/win32.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -const { exec } = require('child_process'); - -const getProcesses = () => - new Promise(res => - exec(`wmic process get ProcessID,ExecutablePath /format:csv`, (e, out) => { - res( - out - .toString() - .split('\r\n') - .slice(2) - - .map(x => { - // eslint-disable-next-line newline-per-chained-call - const parsed = x.trim().split(',').slice(1).reverse(); - parsed[0] = parseInt(parsed[0]) || parsed[0]; // Pid to int - return parsed; - }) - .filter(x => x[1]), - ); - }), - ); - -module.exports = { getProcesses }; diff --git a/src/util/arRPC/transports/ipc.js b/src/util/arRPC/transports/ipc.js deleted file mode 100644 index aa47cfc..00000000 --- a/src/util/arRPC/transports/ipc.js +++ /dev/null @@ -1,281 +0,0 @@ -'use strict'; - -const rgb = (r, g, b, msg) => `\x1b[38;2;${r};${g};${b}m${msg}\x1b[0m`; -const log = (...args) => console.log(`[${rgb(88, 101, 242, 'arRPC')} > ${rgb(254, 231, 92, 'ipc')}]`, ...args); - -const { Buffer } = require('buffer'); -const { unlinkSync } = require('fs'); -const { createServer, createConnection } = require('net'); -const { setTimeout } = require('node:timers'); -const { join } = require('path'); -const { platform, env } = require('process'); - -const SOCKET_PATH = - platform === 'win32' - ? '\\\\?\\pipe\\discord-ipc' - : join(env.XDG_RUNTIME_DIR || env.TMPDIR || env.TMP || env.TEMP || '/tmp', 'discord-ipc'); - -// Enums for various constants -const Types = { - // Types of packets - HANDSHAKE: 0, - FRAME: 1, - CLOSE: 2, - PING: 3, - PONG: 4, -}; - -const CloseCodes = { - // Codes for closures - CLOSE_NORMAL: 1000, - CLOSE_UNSUPPORTED: 1003, - CLOSE_ABNORMAL: 1006, -}; - -const ErrorCodes = { - // Codes for errors - INVALID_CLIENTID: 4000, - INVALID_ORIGIN: 4001, - RATELIMITED: 4002, - TOKEN_REVOKED: 4003, - INVALID_VERSION: 4004, - INVALID_ENCODING: 4005, -}; - -let uniqueId = 0; - -const encode = (type, data) => { - data = JSON.stringify(data); - const dataSize = Buffer.byteLength(data); - - const buf = Buffer.alloc(dataSize + 8); - buf.writeInt32LE(type, 0); // Type - buf.writeInt32LE(dataSize, 4); // Data size - buf.write(data, 8, dataSize); // Data - - return buf; -}; - -const read = socket => { - let resp = socket.read(8); - if (!resp) return; - - resp = Buffer.from(resp); - const type = resp.readInt32LE(0); - const dataSize = resp.readInt32LE(4); - - if (type < 0 || type >= Object.keys(Types).length) throw new Error('invalid type'); - - let data = socket.read(dataSize); - if (!data) throw new Error('failed reading data'); - - data = JSON.parse(Buffer.from(data).toString()); - - switch (type) { - case Types.PING: - socket.emit('ping', data); - socket.write(encode(Types.PONG, data)); - break; - - case Types.PONG: - socket.emit('pong', data); - break; - - case Types.HANDSHAKE: - if (socket._handshook) throw new Error('already handshook'); - - socket._handshook = true; - socket.emit('handshake', data); - break; - - case Types.FRAME: - if (!socket._handshook) throw new Error('need to handshake first'); - - socket.emit('request', data); - break; - - case Types.CLOSE: - socket.end(); - socket.destroy(); - break; - } - - read(socket); -}; - -const socketIsAvailable = async socket => { - socket.pause(); - socket.on('readable', () => { - try { - read(socket); - } catch (e) { - // Debug: log('error whilst reading', e); - socket.end( - encode(Types.CLOSE, { - code: CloseCodes.CLOSE_UNSUPPORTED, - message: e.message, - }), - ); - socket.destroy(); - } - }); - - const stop = () => { - try { - socket.end(); - socket.destroy(); - } catch { - // Debug - } - }; - - const possibleOutcomes = Promise.race([ - new Promise(res => socket.on('error', res)), // Errored - // eslint-disable-next-line prefer-promise-reject-errors - new Promise((res, rej) => socket.on('pong', () => rej('socket ponged'))), // Ponged - // eslint-disable-next-line prefer-promise-reject-errors - new Promise((res, rej) => setTimeout(() => rej('timed out'), 1000).unref()), // Timed out - ]).then( - () => true, - e => e, - ); - - socket.write(encode(Types.PING, ++uniqueId)); - - const outcome = await possibleOutcomes; - stop(); - // Debug: log('checked if socket is available:', outcome === true, outcome === true ? '' : `- reason: ${outcome}`); - - return outcome === true; -}; - -const getAvailableSocket = async (tries = 0) => { - if (tries > 9) { - throw new Error('ran out of tries to find socket', tries); - } - - const path = `${SOCKET_PATH}-${tries}`; - const socket = createConnection(path); - - // Debug: log('checking', path); - - if (await socketIsAvailable(socket)) { - if (platform !== 'win32') { - try { - unlinkSync(path); - } catch { - // Debug - } - } - - return path; - } - - // Debug: log(`not available, trying again (attempt ${tries + 1})`); - return getAvailableSocket(tries + 1); -}; - -module.exports = class IPCServer { - constructor(handers, debug = false) { - // eslint-disable-next-line no-async-promise-executor - return new Promise(async res => { - this.debug = debug; - this.handlers = handers; - - this.onConnection = this.onConnection.bind(this); - this.onMessage = this.onMessage.bind(this); - - const server = createServer(this.onConnection); - server.on('error', e => { - if (this.debug) log('server error', e); - }); - - const socketPath = await getAvailableSocket(); - server.listen(socketPath, () => { - if (this.debug) log('listening at', socketPath); - this.server = server; - - res(this); - }); - }); - } - - onConnection(socket) { - if (this.debug) log('new connection!'); - - socket.pause(); - socket.on('readable', () => { - try { - read(socket); - } catch (e) { - if (this.debug) log('error whilst reading', e); - - socket.end( - encode(Types.CLOSE, { - code: CloseCodes.CLOSE_UNSUPPORTED, - message: e.message, - }), - ); - socket.destroy(); - } - }); - - socket.once('handshake', params => { - if (this.debug) log('handshake:', params); - - const ver = parseInt(params.v ?? 1); - const clientId = params.client_id ?? ''; - // Encoding is always json for ipc - - socket.close = (code = CloseCodes.CLOSE_NORMAL, message = '') => { - socket.end( - encode(Types.CLOSE, { - code, - message, - }), - ); - socket.destroy(); - }; - - if (ver !== 1) { - if (this.debug) log('unsupported version requested', ver); - - socket.close(ErrorCodes.INVALID_VERSION); - return; - } - - if (clientId === '') { - if (this.debug) log('client id required'); - - socket.close(ErrorCodes.INVALID_CLIENTID); - return; - } - - socket.on('error', e => { - if (this.debug) log('socket error', e); - }); - - socket.on('close', e => { - if (this.debug) log('socket closed', e); - this.handlers.close(socket); - }); - - socket.on('request', this.onMessage.bind(this, socket)); - - socket._send = socket.send; - socket.send = msg => { - if (this.debug) log('sending', msg); - socket.write(encode(Types.FRAME, msg)); - }; - - socket.clientId = clientId; - - this.handlers.connection(socket); - }); - } - - onMessage(socket, msg) { - if (this.debug) log('message', msg); - this.handlers.message(socket, msg); - } -}; diff --git a/src/util/arRPC/transports/websocket.js b/src/util/arRPC/transports/websocket.js deleted file mode 100644 index d6bb372..00000000 --- a/src/util/arRPC/transports/websocket.js +++ /dev/null @@ -1,128 +0,0 @@ -'use strict'; - -const rgb = (r, g, b, msg) => `\x1b[38;2;${r};${g};${b}m${msg}\x1b[0m`; -const log = (...args) => console.log(`[${rgb(88, 101, 242, 'arRPC')} > ${rgb(235, 69, 158, 'websocket')}]`, ...args); - -const { createServer } = require('http'); -const { parse } = require('querystring'); -const { WebSocketServer } = require('ws'); - -const portRange = [6463, 6472]; // Ports available/possible: 6463-6472 - -module.exports = class WSServer { - constructor(handlers, debug = false) { - return (async () => { - this.debug = debug; - - this.handlers = handlers; - - this.onConnection = this.onConnection.bind(this); - this.onMessage = this.onMessage.bind(this); - - let port = portRange[0]; - - let http, wss; - while (port <= portRange[1]) { - if (this.debug) log('trying port', port); - - if ( - await new Promise(res => { - http = createServer(); - http.on('error', e => { - // Log('http error', e); - - if (e.code === 'EADDRINUSE') { - if (this.debug) log(port, 'in use!'); - res(false); - } - }); - - wss = new WebSocketServer({ server: http }); - // eslint-disable-next-line no-unused-vars - wss.on('error', e => { - // Debug: Log('wss error', e); - }); - - wss.on('connection', this.onConnection); - - http.listen(port, '127.0.0.1', () => { - if (this.debug) log('listening on', port); - - this.http = http; - this.wss = wss; - - res(true); - }); - }) - ) { - break; - } - port++; - } - - return this; - })(); - } - - onConnection(socket, req) { - const params = parse(req.url.split('?')[1]); - const ver = parseInt(params.v ?? 1); - const encoding = params.encoding ?? 'json'; // Json | etf (erlpack) - const clientId = params.client_id ?? ''; - - const origin = req.headers.origin ?? ''; - - if (this.debug) log(`new connection! origin:`, origin, JSON.parse(JSON.stringify(params))); - - if ( - origin !== '' && - !['https://discord.com', 'https://ptb.discord.com', 'https://canary.discord.com/'].includes(origin) - ) { - if (this.debug) log('disallowed origin', origin); - - socket.close(); - return; - } - - if (encoding !== 'json') { - if (this.debug) log('unsupported encoding requested', encoding); - - socket.close(); - return; - } - - if (ver !== 1) { - if (this.debug) log('unsupported version requested', ver); - - socket.close(); - return; - } - - socket.clientId = clientId; - socket.encoding = encoding; - - socket.on('error', e => { - if (this.debug) log('socket error', e); - }); - - socket.on('close', (e, r) => { - if (this.debug) log('socket closed', e, r); - this.handlers.close(socket); - }); - - socket.on('message', this.onMessage.bind(this, socket)); - - socket._send = socket.send; - socket.send = msg => { - if (this.debug) log('sending', msg); - socket._send(JSON.stringify(msg)); - }; - - this.handlers.connection(socket); - } - - onMessage(socket, msg) { - if (this.debug) log('message', JSON.parse(msg)); - this.handlers.message(socket, JSON.parse(msg)); - } -}; From 14f24cbe0354e7ff88ef0347bf4fcc803952904e Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sat, 6 Jan 2024 09:08:19 +0700 Subject: [PATCH 08/60] Update UserContextMenuInteraction.js --- src/structures/UserContextMenuInteraction.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/structures/UserContextMenuInteraction.js b/src/structures/UserContextMenuInteraction.js index 98dad00..ba857f3 100644 --- a/src/structures/UserContextMenuInteraction.js +++ b/src/structures/UserContextMenuInteraction.js @@ -8,7 +8,7 @@ const ContextMenuInteraction = require('./ContextMenuInteraction'); */ class UserContextMenuInteraction extends ContextMenuInteraction { /** - * The user this interaction was sent from + * The target user from this interaction * @type {User} * @readonly */ @@ -17,7 +17,7 @@ class UserContextMenuInteraction extends ContextMenuInteraction { } /** - * The member this interaction was sent from + * The target member from this interaction * @type {?(GuildMember|APIGuildMember)} * @readonly */ From 783388c7e00d28efa21d753ff9d07034c19524f8 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sat, 6 Jan 2024 09:10:00 +0700 Subject: [PATCH 09/60] break: old SelectMenu --- src/structures/SelectMenuInteraction.js | 153 +----------------------- 1 file changed, 2 insertions(+), 151 deletions(-) diff --git a/src/structures/SelectMenuInteraction.js b/src/structures/SelectMenuInteraction.js index f0663cf..42ef0c1 100644 --- a/src/structures/SelectMenuInteraction.js +++ b/src/structures/SelectMenuInteraction.js @@ -1,11 +1,9 @@ 'use strict'; -const { Collection } = require('@discordjs/collection'); const MessageComponentInteraction = require('./MessageComponentInteraction'); -const { Events } = require('../util/Constants'); /** - * Represents any select menu interaction. + * Represents a select menu interaction. * @extends {MessageComponentInteraction} */ class SelectMenuInteraction extends MessageComponentInteraction { @@ -20,151 +18,4 @@ class SelectMenuInteraction extends MessageComponentInteraction { } } -module.exports.SelectMenuInteraction = SelectMenuInteraction; - -/** - * Represents a CHANNEL_SELECT interaction. - * @extends {SelectMenuInteraction} - */ -class ChannelSelectInteraction extends SelectMenuInteraction { - constructor(client, data) { - super(client, data); - - const { channels } = data.data.resolved ?? {}; - - /** - * Collection of the selected channels - * @type {Collection} - */ - this.channels = new Collection(); - for (const channel of Object.values(channels)) { - this.channel.set(channel.id, this.client.channels._add(channel)); - } - } -} - -module.exports.ChannelSelectInteraction = ChannelSelectInteraction; - -/** - * Represents a ROLE_SELECT interaction. - * @extends {SelectMenuInteraction} - */ -class RoleSelectInteraction extends SelectMenuInteraction { - constructor(client, data) { - super(client, data); - - const { roles } = data.data.resolved ?? {}; - - /** - * Collection of the selected roles - * @type {Collection} - */ - this.roles = new Collection(); - for (const role of Object.values(roles)) { - this.roles.set(role.id, this.guild?.roles._add(role) ?? role); - } - } -} - -module.exports.RoleSelectInteraction = RoleSelectInteraction; - -/** - * Represents a USER_SELECT interaction. - * @extends {SelectMenuInteraction} - */ -class UserSelectInteraction extends SelectMenuInteraction { - constructor(client, data) { - super(client, data); - - const { members, users } = data.data.resolved ?? {}; - - /** - * Collection of the selected users - * @type {Collection} - */ - this.users = new Collection(); - for (const user of Object.values(users)) { - this.users.set(user.id, this.client.users._add(user)); - } - - if (members) { - /** - * Collection of the selected members - * @type {Collection} - */ - this.members = new Collection(); - for (const [id, member] of Object.entries(members)) { - const user = users[id]; - if (!user) { - this.client.emit(Events.DEBUG, `[SelectMenuInteraction] Received a member without a user, skipping ${id}`); - continue; - } - this.members.set(id, this.guild?.members._add({ user, ...member }) ?? { user, ...member }); - } - } - } -} - -module.exports.UserSelectInteraction = UserSelectInteraction; - -/** - * Represents a MENTIONABLE_SELECT interaction. - * @extends {SelectMenuInteraction} - */ -class MentionableSelectInteraction extends SelectMenuInteraction { - constructor(client, data) { - super(client, data); - - const { members, users, roles, channels } = data.data.resolved ?? {}; - - if (channels) { - /** - * Collection of the selected channels - * @type {Collection} - */ - this.channels = new Collection(); - for (const channel of Object.values(channels)) { - this.channels.set(channel.id, this.client?.channels._add(channel) ?? channel); - } - } - - if (members) { - /** - * Collection of the selected members - * @type {Collection} - */ - this.members = new Collection(); - for (const [id, member] of Object.entries(members)) { - const user = users[id]; - if (!user) { - this.client.emit(Events.DEBUG, `[SelectMenuInteraction] Received a member without a user, skipping ${id}`); - continue; - } - this.members.set(id, this.guild?.members._add({ user, ...member }) ?? { user, ...member }); - } - } - - if (roles) { - /** - * Collection of the selected roles - * @type {Collection} - */ - this.roles = new Collection(); - for (const role of Object.values(roles)) { - this.roles.set(role.id, this.guild?.roles._add(role) ?? role); - } - } - - if (users) { - /** - * Collection of the selected users - * @type {Collection} - */ - this.users = new Collection(); - for (const user of Object.values(users)) { - this.users.set(user.id, this.client.users._add(user)); - } - } - } -} -module.exports.MentionableSelectInteraction = MentionableSelectInteraction; +module.exports = SelectMenuInteraction; From 811773e6347d0d49c28c3939fca864ff66a028b0 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sat, 6 Jan 2024 09:10:54 +0700 Subject: [PATCH 10/60] Update MessageMentions.js --- src/structures/MessageMentions.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/structures/MessageMentions.js b/src/structures/MessageMentions.js index a2438e5..8c9c710 100644 --- a/src/structures/MessageMentions.js +++ b/src/structures/MessageMentions.js @@ -211,12 +211,13 @@ class MessageMentions { */ has(data, { ignoreDirect = false, ignoreRoles = false, ignoreRepliedUser = false, ignoreEveryone = false } = {}) { const user = this.client.users.resolve(data); + if (!ignoreEveryone && user && this.everyone) return true; const userWasRepliedTo = user && this.repliedUser?.id === user.id; if (!ignoreRepliedUser && userWasRepliedTo && this.users.has(user.id)) return true; - if (!ignoreRepliedUser && this.users.has(this.repliedUser?.id) && this.repliedUser?.id === user?.id) return true; + if (!ignoreDirect) { if (user && (!ignoreRepliedUser || this.parsedUsers.has(user.id)) && this.users.has(user.id)) return true; @@ -226,7 +227,7 @@ class MessageMentions { const channel = this.client.channels.resolve(data); if (channel && this.channels.has(channel.id)) return true; } - if (user && !ignoreEveryone && this.everyone) return true; + if (!ignoreRoles) { const member = this.guild?.members.resolve(data); if (member) { From 2f0b55e22f21070698c99f6ae6ca01e5409328aa Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sat, 6 Jan 2024 09:11:09 +0700 Subject: [PATCH 11/60] Update MessageEmbed.js --- src/structures/MessageEmbed.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/structures/MessageEmbed.js b/src/structures/MessageEmbed.js index ae2c847..d872555 100644 --- a/src/structures/MessageEmbed.js +++ b/src/structures/MessageEmbed.js @@ -8,7 +8,7 @@ let deprecationEmittedForSetAuthor = false; let deprecationEmittedForSetFooter = false; let deprecationEmittedForAddField = false; -// TODO: Remove the deprecated code for `setAuthor()`, `setFooter()` and `addField()`. +// TODO: Remove the deprecated code for `setAuthor()` and `setFooter()`. /** * Represents an embed in a message (image/video preview, rich embed, etc.) From e6a55fae796edca4a0065b36c9964b6530048a71 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sat, 6 Jan 2024 09:12:34 +0700 Subject: [PATCH 12/60] break: old SelectMenu --- src/structures/BaseMessageComponent.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/structures/BaseMessageComponent.js b/src/structures/BaseMessageComponent.js index 8ae40df..4075827 100644 --- a/src/structures/BaseMessageComponent.js +++ b/src/structures/BaseMessageComponent.js @@ -76,11 +76,7 @@ class BaseMessageComponent { component = data instanceof MessageButton ? data : new MessageButton(data); break; } - case MessageComponentTypes.STRING_SELECT: - case MessageComponentTypes.USER_SELECT: - case MessageComponentTypes.ROLE_SELECT: - case MessageComponentTypes.MENTIONABLE_SELECT: - case MessageComponentTypes.CHANNEL_SELECT: { + case MessageComponentTypes.SELECT_MENU: { const MessageSelectMenu = require('./MessageSelectMenu'); component = data instanceof MessageSelectMenu ? data : new MessageSelectMenu(data); break; From 12c731f77e4f471de27c080d1b1e38567e039792 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sat, 6 Jan 2024 09:24:51 +0700 Subject: [PATCH 13/60] feat: remove ClientApplication --- src/structures/ClientApplication.js | 233 ---------------------------- 1 file changed, 233 deletions(-) delete mode 100644 src/structures/ClientApplication.js diff --git a/src/structures/ClientApplication.js b/src/structures/ClientApplication.js deleted file mode 100644 index c54c853..00000000 --- a/src/structures/ClientApplication.js +++ /dev/null @@ -1,233 +0,0 @@ -'use strict'; - -const { Collection } = require('@discordjs/collection'); -const { ApplicationRoleConnectionMetadata } = require('./ApplicationRoleConnectionMetadata'); -const Team = require('./Team'); -const Application = require('./interfaces/Application'); -const ApplicationCommandManager = require('../managers/ApplicationCommandManager'); -const ApplicationFlags = require('../util/ApplicationFlags'); -const { ApplicationRoleConnectionMetadataTypes } = require('../util/Constants'); -const Permissions = require('../util/Permissions'); - -/** - * @typedef {Object} ClientApplicationInstallParams - * @property {InviteScope[]} scopes The scopes to add the application to the server with - * @property {Readonly} permissions The permissions this bot will request upon joining - */ - -/** - * Represents a client application. - * @extends {Application} - */ -class ClientApplication extends Application { - constructor(client, data, user) { - super(client, data); - - /** - * The application command manager for this application - * @type {ApplicationCommandManager} - */ - this.commands = new ApplicationCommandManager(this.client, undefined, user); - } - - _patch(data) { - super._patch(data); - - /** - * The tags this application has (max of 5) - * @type {string[]} - */ - this.tags = data.tags ?? []; - - if ('install_params' in data) { - /** - * Settings for this application's default in-app authorization - * @type {?ClientApplicationInstallParams} - */ - this.installParams = { - scopes: data.install_params.scopes, - permissions: new Permissions(data.install_params.permissions).freeze(), - }; - } else { - this.installParams ??= null; - } - - if ('custom_install_url' in data) { - /** - * This application's custom installation URL - * @type {?string} - */ - this.customInstallURL = data.custom_install_url; - } else { - this.customInstallURL = null; - } - - if ('flags' in data) { - /** - * The flags this application has - * @type {ApplicationFlags} - */ - this.flags = new ApplicationFlags(data.flags).freeze(); - } - - if ('approximate_guild_count' in data) { - /** - * An approximate amount of guilds this application is in. - * @type {?number} - */ - this.approximateGuildCount = data.approximate_guild_count; - } else { - this.approximateGuildCount ??= null; - } - - if ('guild_id' in data) { - /** - * The id of the guild associated with this application. - * @type {?Snowflake} - */ - this.guildId = data.guild_id; - } else { - this.guildId ??= null; - } - - if ('cover_image' in data) { - /** - * The hash of the application's cover image - * @type {?string} - */ - this.cover = data.cover_image; - } else { - this.cover ??= null; - } - - if ('rpc_origins' in data) { - /** - * The application's RPC origins, if enabled - * @type {string[]} - */ - this.rpcOrigins = data.rpc_origins; - } else { - this.rpcOrigins ??= []; - } - - if ('bot_require_code_grant' in data) { - /** - * If this application's bot requires a code grant when using the OAuth2 flow - * @type {?boolean} - */ - this.botRequireCodeGrant = data.bot_require_code_grant; - } else { - this.botRequireCodeGrant ??= null; - } - - if ('bot_public' in data) { - /** - * If this application's bot is public - * @type {?boolean} - */ - this.botPublic = data.bot_public; - } else { - this.botPublic ??= null; - } - - if ('popular_application_command_ids' in data) { - /** - * List of popular command - * @type {?Collection} - */ - this.popularCommands = new Collection(); - data.popular_application_command_ids.forEach(id => { - this.popularCommands.set(id, this.commands?.cache?.get(id)); - }); - } - - /** - * The owner of this OAuth application - * @type {?(User|Team)} - */ - this.owner = data.team - ? new Team(this.client, data.team) - : data.owner - ? this.client.users._add(data.owner) - : this.owner ?? null; - } - - /** - * The guild associated with this application. - * @type {?Guild} - * @readonly - */ - get guild() { - return this.client.guilds.cache.get(this.guildId) ?? null; - } - - /** - * Whether this application is partial - * @type {boolean} - * @readonly - */ - get partial() { - return !this.name; - } - - /** - * Obtains this application from Discord. - * @returns {Promise} - */ - async fetch() { - const app = await this.client.api.oauth2.authorize.get({ - query: { - client_id: this.id, - scope: 'bot applications.commands', - }, - }); - const user = this.client.users._add(app.bot); - user._partial = false; - this._patch(app.application); - return this; - } - - /** - * Gets this application's role connection metadata records - * @returns {Promise} - */ - async fetchRoleConnectionMetadataRecords() { - const metadata = await this.client.api.applications(this.id)('role-connections').metadata.get(); - return metadata.map(data => new ApplicationRoleConnectionMetadata(data)); - } - - /** - * Data for creating or editing an application role connection metadata. - * @typedef {Object} ApplicationRoleConnectionMetadataEditOptions - * @property {string} name The name of the metadata field - * @property {?Object} [nameLocalizations] The name localizations for the metadata field - * @property {string} description The description of the metadata field - * @property {?Object} [descriptionLocalizations] The description localizations for the metadata field - * @property {string} key The dictionary key of the metadata field - * @property {ApplicationRoleConnectionMetadataType} type The type of the metadata field - */ - - /** - * Updates this application's role connection metadata records - * @param {ApplicationRoleConnectionMetadataEditOptions[]} records The new role connection metadata records - * @returns {Promise} - */ - async editRoleConnectionMetadataRecords(records) { - const newRecords = await this.client.api - .applications(this.client.user.id)('role-connections') - .metadata.put({ - data: records.map(record => ({ - type: typeof record.type === 'string' ? ApplicationRoleConnectionMetadataTypes[record.type] : record.type, - key: record.key, - name: record.name, - name_localizations: record.nameLocalizations, - description: record.description, - description_localizations: record.descriptionLocalizations, - })), - }); - - return newRecords.map(data => new ApplicationRoleConnectionMetadata(data)); - } -} - -module.exports = ClientApplication; From 9bc00229a16cf7a610a8d66628ec6acb54891426 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sun, 7 Jan 2024 20:05:28 +0700 Subject: [PATCH 14/60] Create UserNoteManager.js --- src/managers/UserNoteManager.js | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/managers/UserNoteManager.js diff --git a/src/managers/UserNoteManager.js b/src/managers/UserNoteManager.js new file mode 100644 index 00000000..d31bf07 --- /dev/null +++ b/src/managers/UserNoteManager.js @@ -0,0 +1,33 @@ +'use strict'; + +const { Collection } = require('@discordjs/collection'); +const BaseManager = require('./BaseManager'); + +/** + * Manages API methods for Client and stores their cache. + * @extends {BaseManager} + */ +class UserNoteManager extends BaseManager { + constructor(client, data = {}) { + super(client); + /** + * Cache User Note + * @type {Collection} + */ + this.cache = new Collection(Object.entries(data)); + } + + _reload(data = {}) { + this.cache = new Collection(Object.entries(data)); + return this; + } + + async updateNote(id, note = null) { + await this.client.api.users['@me'].notes(id).put({ data: { note } }); + if (!note) this.cache.delete(id, note); + else this.cache.set(id, note); + return this; + } +} + +module.exports = UserNoteManager; From d05b19e89bae9dd4e51b9ffc9537de3d3176afc8 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sun, 7 Jan 2024 20:05:32 +0700 Subject: [PATCH 15/60] Create GroupDMChannel.js --- src/structures/GroupDMChannel.js | 315 +++++++++++++++++++++++++++++++ 1 file changed, 315 insertions(+) create mode 100644 src/structures/GroupDMChannel.js diff --git a/src/structures/GroupDMChannel.js b/src/structures/GroupDMChannel.js new file mode 100644 index 00000000..207715e --- /dev/null +++ b/src/structures/GroupDMChannel.js @@ -0,0 +1,315 @@ +'use strict'; + +const { Collection } = require('@discordjs/collection'); +const { Channel } = require('./Channel'); +const Invite = require('./Invite'); +const TextBasedChannel = require('./interfaces/TextBasedChannel'); +const MessageManager = require('../managers/MessageManager'); +const DataResolver = require('../util/DataResolver'); + +/** + * Represents a Group DM Channel on Discord. + * @extends {Channel} + * @implements {TextBasedChannel} + */ +class GroupDMChannel extends Channel { + constructor(client, data) { + super(client, data); + // Override the channel type so partials have a known type + this.type = 'GROUP_DM'; + + /** + * A manager of the messages belonging to this channel + * @type {MessageManager} + */ + this.messages = new MessageManager(this); + } + + _patch(data) { + super._patch(data); + + if ('recipients' in data && Array.isArray(data.recipients)) { + this._recipients = data.recipients; + data.recipients.forEach(u => this.client.users._add(u)); + } else { + this._recipients = []; + } + + if ('last_message_id' in data) { + /** + * The channel's last message id, if one was sent + * @type {?Snowflake} + */ + this.lastMessageId = data.last_message_id; + } + + if ('last_pin_timestamp' in data) { + /** + * The timestamp when the last pinned message was pinned, if there was one + * @type {?number} + */ + this.lastPinTimestamp = new Date(data.last_pin_timestamp).getTime(); + } else { + this.lastPinTimestamp ??= null; + } + + if ('owner_id' in data) { + /** + * Owner ID + * @type {Snowflake} + */ + this.ownerId = data.owner_id; + } + + if ('name' in data) { + /** + * The name of this Group DM Channel + * @type {?string} + */ + this.name = data.name; + } + + if ('icon' in data) { + /** + * The hash of the channel icon + * @type {?string} + */ + this.icon = data.icon; + } + } + + /** + * The URL to this channel's icon. + * @param {StaticImageURLOptions} [options={}] Options for the Image URL + * @returns {?string} + */ + iconURL({ format, size } = {}) { + return this.icon && this.client.rest.cdn.GDMIcon(this.id, this.icon, format, size); + } + + /** + * The recipients of this Group DM Channel. + * @type {Collection} + * @readonly + */ + get recipients() { + const collect = new Collection(); + this._recipients.map(recipient => collect.set(recipient.id, this.client.users.cache.get(recipient.id))); + collect.set(this.client.user.id, this.client.user); + return collect; + } + + /** + * The owner of this Group DM Channel + * @type {?User} + * @readonly + */ + get owner() { + return this.client.users.cache.get(this.ownerId); + } + + /** + * Whether this DMChannel is a partial + * @type {boolean} + * @readonly + */ + get partial() { + return typeof this.lastMessageId === 'undefined'; + } + + /** + * Leave this Group DM Channel. + * @param {?boolean} slient Leave without notifying other members + * @returns {Promise} + * @example + * // Delete the channel + * channel.delete() + * .then(console.log) + * .catch(console.error); + */ + async delete(slient = false) { + if (typeof slient === 'boolean' && slient) { + await this.client.api.channels[this.id].delete({ + query: { + silent: true, + }, + }); + } else { + await this.client.api.channels[this.id].delete(); + } + return this; + } + + /** + * When concatenated with a string, this automatically returns the recipient's mention instead of the + * GroupDMChannel object. + * @returns {string} + * @example + * // Logs: Hello from Group Test! + * console.log(`Hello from ${channel}!`); + */ + toString() { + return ( + this.name ?? + this._recipients + .filter(user => user.id !== this.client.user.id) + .map(user => user.username) + .join(', ') + ); + } + + toJSON() { + const json = super.toJSON({ + createdTimestamp: true, + }); + json.iconURL = this.iconURL(); + return json; + } + + /** + * The data for editing a channe;. + * @typedef {Object} GroupDMChannelEditData + * @property {string} [name] The name of the channel + * @property {?(BufferResolvable|Base64Resolvable)} [icon] The icon of the channel + * @property {GuildMemberResolvable} [owner] The owner of the channel + */ + + /** + * Edit channel data + * @param {GroupDMChannelEditData} data Data + * @returns {Promise} + * @example + * // Set the channel name + * channel.edit({ + * name: 'Group Test', + * }) + * .then(updated => console.log(`New channel name ${updated}`)) + * .catch(console.error); + */ + async edit(data) { + const _data = {}; + if ('name' in data) _data.name = data.name?.trim() ?? null; + if (typeof data.icon !== 'undefined') { + _data.icon = await DataResolver.resolveImage(data.icon); + } + if ('owner' in data) { + _data.owner = data.owner; + } + const newData = await this.client.api.channels[this.id].patch({ + data: _data, + }); + + return this.client.actions.ChannelUpdate.handle(newData).updated; + } + + /** + * Renames this Group DM Channel. + * @param {?string} name Name of the channel + * @returns {Promise} + */ + setName(name) { + return this.edit({ name }); + } + + /** + * Sets the icon of this Group DM Channel. + * @param {?(Base64Resolvable|BufferResolvable)} icon Icon of the channel + * @returns {Promise} + */ + setIcon(icon) { + return this.edit({ icon }); + } + + /** + * Changes the owner of this Group DM Channel. + * @param {UserResolvable} user User to transfer ownership to + * @returns {Promise} + */ + setOwner(user) { + const id = this.client.users.resolveId(user); + if (this.ownerId === id) { + return Promise.resolve(this); + } + return this.edit({ owner: id }); + } + + /** + * Adds a user to this Group DM Channel. + * @param {UserResolvable} user User to add to the group + * @returns {Promise} + */ + async addUser(user) { + user = this.client.users.resolveId(user); + await this.client.api.channels[this.id].recipients[user].put(); + return this; + } + + /** + * Removes a user from this Group DM Channel. + * @param {UserResolvable} user User to remove from the group + * @returns {Promise} + */ + async removeUser(user) { + user = this.client.users.resolveId(user); + await this.client.api.channels[this.id].recipients[user].delete(); + return this; + } + + /** + * Gets the invite for this Group DM Channel. + * @returns {Promise} + */ + async getInvite() { + const inviteCode = await this.client.api.channels(this.id).invites.post({ + data: { + max_age: 86400, + }, + }); + return new Invite(this.client, inviteCode); + } + + /** + * Get all the invites for this Group DM Channel. + * @returns {Promise>} + */ + async fetchAllInvite() { + const invites = await this.client.api.channels(this.id).invites.get(); + return new Collection(invites.map(invite => [invite.code, new Invite(this.client, invite)])); + } + + /** + * Delete invites from this Group DM Channel. + * @param {InviteResolvable} invite Invite to add to the channel + * @returns {Promise} + */ + async removeInvite(invite) { + // Resolve + let code = invite?.code; + if (!code && URL.canParse(invite)) code = new URL(invite).pathname.slice(1); + else code = invite; + await this.client.api.channels(this.id).invites[invite].delete(); + return this; + } + + // These are here only for documentation purposes - they are implemented by TextBasedChannel + /* eslint-disable no-empty-function */ + get lastMessage() {} + get lastPinAt() {} + send() {} + sendTyping() {} + createMessageCollector() {} + awaitMessages() {} + createMessageComponentCollector() {} + awaitMessageComponent() {} + // Doesn't work on DM channels; setRateLimitPerUser() {} + // Doesn't work on DM channels; setNSFW() {} +} + +TextBasedChannel.applyToClass(GroupDMChannel, true, [ + 'fetchWebhooks', + 'createWebhook', + 'setRateLimitPerUser', + 'setNSFW', +]); + +module.exports = GroupDMChannel; From 5283455b9d385aeb62515f4eea32a664020c3527 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sun, 7 Jan 2024 20:06:14 +0700 Subject: [PATCH 16/60] remove --- src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUNDS_UPDATE.js | 0 src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_CREATE.js | 0 src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_DELETE.js | 0 src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_UPDATE.js | 0 4 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUNDS_UPDATE.js delete mode 100644 src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_CREATE.js delete mode 100644 src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_DELETE.js delete mode 100644 src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_UPDATE.js diff --git a/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUNDS_UPDATE.js b/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUNDS_UPDATE.js deleted file mode 100644 index e69de29..00000000 diff --git a/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_CREATE.js b/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_CREATE.js deleted file mode 100644 index e69de29..00000000 diff --git a/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_DELETE.js b/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_DELETE.js deleted file mode 100644 index e69de29..00000000 diff --git a/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_UPDATE.js b/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_UPDATE.js deleted file mode 100644 index e69de29..00000000 From 547f9ca7c63ac36dfb4f843363cdb6c8343dc0ea Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sun, 7 Jan 2024 20:06:23 +0700 Subject: [PATCH 17/60] remove 2 --- src/util/Voice.js | 1456 --------------------------------------------- 1 file changed, 1456 deletions(-) delete mode 100644 src/util/Voice.js diff --git a/src/util/Voice.js b/src/util/Voice.js deleted file mode 100644 index 8861b88..00000000 --- a/src/util/Voice.js +++ /dev/null @@ -1,1456 +0,0 @@ -'use strict'; -var NoSubscriberBehavior2, - AudioPlayerStatus2, - EndBehaviorType2, - VoiceConnectionStatus2, - VoiceConnectionDisconnectReason2, - StreamType2, - audioCycleInterval, - __create = Object.create, - __defProp = Object.defineProperty, - __getOwnPropDesc = Object.getOwnPropertyDescriptor, - __getOwnPropNames = Object.getOwnPropertyNames, - __getProtoOf = Object.getPrototypeOf, - __hasOwnProp = Object.prototype.hasOwnProperty, - __defNormalProp = (e, t, s) => - t in e ? __defProp(e, t, { enumerable: !0, configurable: !0, writable: !0, value: s }) : (e[t] = s), - __name = (e, t) => __defProp(e, 'name', { value: t, configurable: !0 }), - __export = (e, t) => { - for (var s in t) __defProp(e, s, { get: t[s], enumerable: !0 }); - }, - __copyProps = (e, t, s, i) => { - if ((t && 'object' == typeof t) || 'function' == typeof t) - for (let o of __getOwnPropNames(t)) - __hasOwnProp.call(e, o) || - o === s || - __defProp(e, o, { get: () => t[o], enumerable: !(i = __getOwnPropDesc(t, o)) || i.enumerable }); - return e; - }, - __toESM = (e, t, s) => ( - (s = null != e ? __create(__getProtoOf(e)) : {}), - __copyProps(!t && e && e.__esModule ? s : __defProp(s, 'default', { value: e, enumerable: !0 }), e) - ), - __toCommonJS = e => __copyProps(__defProp({}, '__esModule', { value: !0 }), e), - __publicField = (e, t, s) => (__defNormalProp(e, 'symbol' != typeof t ? t + '' : t, s), s), - src_exports = {}; -__export(src_exports, { - AudioPlayer: () => AudioPlayer, - AudioPlayerError: () => AudioPlayerError, - AudioPlayerStatus: () => AudioPlayerStatus, - AudioReceiveStream: () => AudioReceiveStream, - AudioResource: () => AudioResource, - EndBehaviorType: () => EndBehaviorType, - NoSubscriberBehavior: () => NoSubscriberBehavior, - PlayerSubscription: () => PlayerSubscription, - SSRCMap: () => SSRCMap, - SpeakingMap: () => SpeakingMap, - StreamType: () => StreamType, - VoiceConnection: () => VoiceConnection, - VoiceConnectionDisconnectReason: () => VoiceConnectionDisconnectReason, - VoiceConnectionStatus: () => VoiceConnectionStatus, - VoiceReceiver: () => VoiceReceiver, - createAudioPlayer: () => createAudioPlayer, - createAudioResource: () => createAudioResource, - createDefaultAudioReceiveStreamOptions: () => createDefaultAudioReceiveStreamOptions, - demuxProbe: () => demuxProbe, - entersState: () => entersState, - generateDependencyReport: () => generateDependencyReport, - getGroups: () => getGroups, - getVoiceConnection: () => getVoiceConnection, - getVoiceConnections: () => getVoiceConnections, - joinVoiceChannel: () => joinVoiceChannel, - validateDiscordOpusHead: () => validateDiscordOpusHead, - version: () => version2, -}), - (module.exports = __toCommonJS(src_exports)); -var import_node_events7 = require('events'), - import_v10 = require('discord-api-types/v10'); -function createJoinVoiceChannelPayload(e) { - return { - op: import_v10.GatewayOpcodes.VoiceStateUpdate, - d: { guild_id: e.guildId, channel_id: e.channelId, self_deaf: e.selfDeaf, self_mute: e.selfMute }, - }; -} -__name(createJoinVoiceChannelPayload, 'createJoinVoiceChannelPayload'); -var groups = new Map(); -function getOrCreateGroup(e) { - let t = groups.get(e); - if (t) return t; - let s = new Map(); - return groups.set(e, s), s; -} -function getGroups() { - return groups; -} -function getVoiceConnections(e = 'default') { - return groups.get(e); -} -function getVoiceConnection(e, t = 'default') { - return getVoiceConnections(t)?.get(e); -} -function untrackVoiceConnection(e) { - return getVoiceConnections(e.joinConfig.group)?.delete(e.joinConfig.guildId); -} -function trackVoiceConnection(e) { - return getOrCreateGroup(e.joinConfig.group).set(e.joinConfig.guildId, e); -} -groups.set('default', new Map()), - __name(getOrCreateGroup, 'getOrCreateGroup'), - __name(getGroups, 'getGroups'), - __name(getVoiceConnections, 'getVoiceConnections'), - __name(getVoiceConnection, 'getVoiceConnection'), - __name(untrackVoiceConnection, 'untrackVoiceConnection'), - __name(trackVoiceConnection, 'trackVoiceConnection'); -var FRAME_LENGTH = 20, - nextTime = -1, - audioPlayers = []; -function audioCycleStep() { - if (-1 === nextTime) return; - nextTime += FRAME_LENGTH; - let e = audioPlayers.filter(e => e.checkPlayable()); - for (let t of e) t._stepDispatch(); - prepareNextAudioFrame(e); -} -function prepareNextAudioFrame(e) { - let t = e.shift(); - if (!t) { - -1 !== nextTime && (audioCycleInterval = setTimeout(() => audioCycleStep(), nextTime - Date.now())); - return; - } - t._stepPrepare(), setImmediate(() => prepareNextAudioFrame(e)); -} -function hasAudioPlayer(e) { - return audioPlayers.includes(e); -} -function addAudioPlayer(e) { - return ( - hasAudioPlayer(e) || - (audioPlayers.push(e), - 1 === audioPlayers.length && ((nextTime = Date.now()), setImmediate(() => audioCycleStep()))), - e - ); -} -function deleteAudioPlayer(e) { - let t = audioPlayers.indexOf(e); - -1 !== t && - (audioPlayers.splice(t, 1), - 0 === audioPlayers.length && ((nextTime = -1), void 0 !== audioCycleInterval && clearTimeout(audioCycleInterval))); -} -__name(audioCycleStep, 'audioCycleStep'), - __name(prepareNextAudioFrame, 'prepareNextAudioFrame'), - __name(hasAudioPlayer, 'hasAudioPlayer'), - __name(addAudioPlayer, 'addAudioPlayer'), - __name(deleteAudioPlayer, 'deleteAudioPlayer'); -var import_node_buffer3 = require('buffer'), - import_node_events3 = require('events'), - import_v42 = require('discord-api-types/voice/v4'), - import_node_buffer = require('buffer'), - libs = { - 'sodium-native': e => ({ - open(t, s, i) { - if (t) { - let o = import_node_buffer.Buffer.allocUnsafe(t.length - e.crypto_box_MACBYTES); - if (e.crypto_secretbox_open_easy(o, t, s, i)) return o; - } - return null; - }, - close(t, s, i) { - let o = import_node_buffer.Buffer.allocUnsafe(t.length + e.crypto_box_MACBYTES); - return e.crypto_secretbox_easy(o, t, s, i), o; - }, - random: (t, s = import_node_buffer.Buffer.allocUnsafe(t)) => (e.randombytes_buf(s), s), - }), - sodium: e => ({ - open: e.api.crypto_secretbox_open_easy, - close: e.api.crypto_secretbox_easy, - random: (t, s = import_node_buffer.Buffer.allocUnsafe(t)) => (e.api.randombytes_buf(s), s), - }), - 'libsodium-wrappers': e => ({ - open: e.crypto_secretbox_open_easy, - close: e.crypto_secretbox_easy, - random: e.randombytes_buf, - }), - tweetnacl: e => ({ open: e.secretbox.open, close: e.secretbox, random: e.randomBytes }), - }, - fallbackError = __name(() => { - throw Error(`Cannot play audio as no valid encryption package is installed. -- Install sodium, libsodium-wrappers, or tweetnacl. -- Use the generateDependencyReport() function for more information. -`); - }, 'fallbackError'), - methods = { open: fallbackError, close: fallbackError, random: fallbackError }; -(async () => { - for (let e of Object.keys(libs)) - try { - let t = require(e); - 'libsodium-wrappers' === e && t.ready && (await t.ready), Object.assign(methods, libs[e](t)); - break; - } catch {} -})(); -var noop = __name(() => {}, 'noop'), - import_node_buffer2 = require('buffer'), - import_node_dgram = require('dgram'), - import_node_events = require('events'), - import_node_net = require('net'); -function parseLocalPacket(e) { - let t = import_node_buffer2.Buffer.from(e), - s = t.slice(8, t.indexOf(0, 8)).toString('utf8'); - if (!(0, import_node_net.isIPv4)(s)) throw Error('Malformed IP address'); - let i = t.readUInt16BE(t.length - 2); - return { ip: s, port: i }; -} -__name(parseLocalPacket, 'parseLocalPacket'); -var KEEP_ALIVE_INTERVAL = 5e3, - MAX_COUNTER_VALUE = 4294967296 - 1, - VoiceUDPSocket = class extends import_node_events.EventEmitter { - socket; - remote; - keepAliveCounter = 0; - keepAliveBuffer; - keepAliveInterval; - ping; - constructor(e) { - super(), - (this.socket = (0, import_node_dgram.createSocket)('udp4')), - this.socket.on('error', e => this.emit('error', e)), - this.socket.on('message', e => this.onMessage(e)), - this.socket.on('close', () => this.emit('close')), - (this.remote = e), - (this.keepAliveBuffer = import_node_buffer2.Buffer.alloc(8)), - (this.keepAliveInterval = setInterval(() => this.keepAlive(), KEEP_ALIVE_INTERVAL)), - setImmediate(() => this.keepAlive()); - } - onMessage(e) { - this.emit('message', e); - } - keepAlive() { - this.keepAliveBuffer.writeUInt32LE(this.keepAliveCounter, 0), - this.send(this.keepAliveBuffer), - this.keepAliveCounter++, - this.keepAliveCounter > MAX_COUNTER_VALUE && (this.keepAliveCounter = 0); - } - send(e) { - this.socket.send(e, this.remote.port, this.remote.ip); - } - destroy() { - try { - this.socket.close(); - } catch {} - clearInterval(this.keepAliveInterval); - } - async performIPDiscovery(e) { - return new Promise((t, s) => { - let i = __name(e => { - try { - if (2 !== e.readUInt16BE(0)) return; - let s = parseLocalPacket(e); - this.socket.off('message', i), t(s); - } catch {} - }, 'listener'); - this.socket.on('message', i), - this.socket.once('close', () => s(Error('Cannot perform IP discovery - socket closed'))); - let o = import_node_buffer2.Buffer.alloc(74); - o.writeUInt16BE(1, 0), o.writeUInt16BE(70, 2), o.writeUInt32BE(e, 4), this.send(o); - }); - } - }; -__name(VoiceUDPSocket, 'VoiceUDPSocket'); -var import_node_events2 = require('events'), - import_v4 = require('discord-api-types/voice/v4'), - import_ws = __toESM(require('ws')), - VoiceWebSocket = class extends import_node_events2.EventEmitter { - heartbeatInterval; - lastHeartbeatAck; - lastHeartbeatSend; - missedHeartbeats = 0; - ping; - debug; - ws; - constructor(e, t) { - super(), - (this.ws = new import_ws.default(e)), - (this.ws.onmessage = e => this.onMessage(e)), - (this.ws.onopen = e => this.emit('open', e)), - (this.ws.onerror = e => this.emit('error', e instanceof Error ? e : e.error)), - (this.ws.onclose = e => this.emit('close', e)), - (this.lastHeartbeatAck = 0), - (this.lastHeartbeatSend = 0), - (this.debug = t ? e => this.emit('debug', e) : null); - } - destroy() { - try { - this.debug?.('destroyed'), this.setHeartbeatInterval(-1), this.ws.close(1e3); - } catch (e) { - this.emit('error', e); - } - } - onMessage(e) { - if ('string' != typeof e.data) return; - this.debug?.(`<< ${e.data}`); - let t; - try { - t = JSON.parse(e.data); - } catch (s) { - this.emit('error', s); - return; - } - t.op === import_v4.VoiceOpcodes.HeartbeatAck && - ((this.lastHeartbeatAck = Date.now()), - (this.missedHeartbeats = 0), - (this.ping = this.lastHeartbeatAck - this.lastHeartbeatSend)), - this.emit('packet', t); - } - sendPacket(e) { - try { - let t = JSON.stringify(e); - this.debug?.(`>> ${t}`), this.ws.send(t); - return; - } catch (s) { - this.emit('error', s); - } - } - sendHeartbeat() { - (this.lastHeartbeatSend = Date.now()), this.missedHeartbeats++; - let e = this.lastHeartbeatSend; - this.sendPacket({ op: import_v4.VoiceOpcodes.Heartbeat, d: e }); - } - setHeartbeatInterval(e) { - void 0 !== this.heartbeatInterval && clearInterval(this.heartbeatInterval), - e > 0 && - (this.heartbeatInterval = setInterval(() => { - 0 !== this.lastHeartbeatSend && - this.missedHeartbeats >= 3 && - (this.ws.close(), this.setHeartbeatInterval(-1)), - this.sendHeartbeat(); - }, e)); - } - }; -__name(VoiceWebSocket, 'VoiceWebSocket'); -var CHANNELS = 2, - TIMESTAMP_INC = 480 * CHANNELS, - MAX_NONCE_SIZE = 4294967296 - 1, - SUPPORTED_ENCRYPTION_MODES = ['xsalsa20_poly1305_lite', 'xsalsa20_poly1305_suffix', 'xsalsa20_poly1305'], - nonce = import_node_buffer3.Buffer.alloc(24); -function stringifyState(e) { - return JSON.stringify({ ...e, ws: Reflect.has(e, 'ws'), udp: Reflect.has(e, 'udp') }); -} -function chooseEncryptionMode(e) { - let t = e.find(e => SUPPORTED_ENCRYPTION_MODES.includes(e)); - if (!t) throw Error(`No compatible encryption modes. Available include: ${e.join(', ')}`); - return t; -} -function randomNBit(e) { - return Math.floor(Math.random() * 2 ** e); -} -__name(stringifyState, 'stringifyState'), - __name(chooseEncryptionMode, 'chooseEncryptionMode'), - __name(randomNBit, 'randomNBit'); -var Networking = class extends import_node_events3.EventEmitter { - _state; - debug; - constructor(e, t) { - super(), - (this.onWsOpen = this.onWsOpen.bind(this)), - (this.onChildError = this.onChildError.bind(this)), - (this.onWsPacket = this.onWsPacket.bind(this)), - (this.onWsClose = this.onWsClose.bind(this)), - (this.onWsDebug = this.onWsDebug.bind(this)), - (this.onUdpDebug = this.onUdpDebug.bind(this)), - (this.onUdpClose = this.onUdpClose.bind(this)), - (this.debug = t ? e => this.emit('debug', e) : null), - (this._state = { code: 0, ws: this.createWebSocket(e.endpoint), connectionOptions: e }); - } - destroy() { - this.state = { code: 6 }; - } - get state() { - return this._state; - } - set state(e) { - let t = Reflect.get(this._state, 'ws'), - s = Reflect.get(e, 'ws'); - t && - t !== s && - (t.off('debug', this.onWsDebug), - t.on('error', noop), - t.off('error', this.onChildError), - t.off('open', this.onWsOpen), - t.off('packet', this.onWsPacket), - t.off('close', this.onWsClose), - t.destroy()); - let i = Reflect.get(this._state, 'udp'), - o = Reflect.get(e, 'udp'); - i && - i !== o && - (i.on('error', noop), - i.off('error', this.onChildError), - i.off('close', this.onUdpClose), - i.off('debug', this.onUdpDebug), - i.destroy()); - let n = this._state; - (this._state = e), - this.emit('stateChange', n, e), - this.debug?.(`state change: -from ${stringifyState(n)} -to ${stringifyState(e)}`); - } - createWebSocket(e) { - let t = new VoiceWebSocket(`wss://${e}?v=4`, Boolean(this.debug)); - return ( - t.on('error', this.onChildError), - t.once('open', this.onWsOpen), - t.on('packet', this.onWsPacket), - t.once('close', this.onWsClose), - t.on('debug', this.onWsDebug), - t - ); - } - onChildError(e) { - this.emit('error', e); - } - onWsOpen() { - if (0 === this.state.code) { - let e = { - op: import_v42.VoiceOpcodes.Identify, - d: { - server_id: this.state.connectionOptions.serverId, - user_id: this.state.connectionOptions.userId, - session_id: this.state.connectionOptions.sessionId, - token: this.state.connectionOptions.token, - }, - }; - this.state.ws.sendPacket(e), (this.state = { ...this.state, code: 1 }); - } else if (5 === this.state.code) { - let t = { - op: import_v42.VoiceOpcodes.Resume, - d: { - server_id: this.state.connectionOptions.serverId, - session_id: this.state.connectionOptions.sessionId, - token: this.state.connectionOptions.token, - }, - }; - this.state.ws.sendPacket(t); - } - } - onWsClose({ code: e }) { - (4015 === e || e < 4e3) && 4 === this.state.code - ? (this.state = { ...this.state, code: 5, ws: this.createWebSocket(this.state.connectionOptions.endpoint) }) - : 6 !== this.state.code && (this.destroy(), this.emit('close', e)); - } - onUdpClose() { - 4 === this.state.code && - (this.state = { ...this.state, code: 5, ws: this.createWebSocket(this.state.connectionOptions.endpoint) }); - } - onWsPacket(e) { - if (e.op === import_v42.VoiceOpcodes.Hello && 6 !== this.state.code) - this.state.ws.setHeartbeatInterval(e.d.heartbeat_interval); - else if (e.op === import_v42.VoiceOpcodes.Ready && 1 === this.state.code) { - let { ip: t, port: s, ssrc: i, modes: o } = e.d, - n = new VoiceUDPSocket({ ip: t, port: s }); - n.on('error', this.onChildError), - n.on('debug', this.onUdpDebug), - n.once('close', this.onUdpClose), - n - .performIPDiscovery(i) - .then(e => { - 2 === this.state.code && - (this.state.ws.sendPacket({ - op: import_v42.VoiceOpcodes.SelectProtocol, - d: { protocol: 'udp', data: { address: e.ip, port: e.port, mode: chooseEncryptionMode(o) } }, - }), - (this.state = { ...this.state, code: 3 })); - }) - .catch(e => this.emit('error', e)), - (this.state = { ...this.state, code: 2, udp: n, connectionData: { ssrc: i } }); - } else if (e.op === import_v42.VoiceOpcodes.SessionDescription && 3 === this.state.code) { - let { mode: r, secret_key: a } = e.d; - this.state = { - ...this.state, - code: 4, - connectionData: { - ...this.state.connectionData, - encryptionMode: r, - secretKey: new Uint8Array(a), - sequence: randomNBit(16), - timestamp: randomNBit(32), - nonce: 0, - nonceBuffer: import_node_buffer3.Buffer.alloc(24), - speaking: !1, - packetsPlayed: 0, - }, - }; - } else - e.op === import_v42.VoiceOpcodes.Resumed && - 5 === this.state.code && - ((this.state = { ...this.state, code: 4 }), (this.state.connectionData.speaking = !1)); - } - onWsDebug(e) { - this.debug?.(`[WS] ${e}`); - } - onUdpDebug(e) { - this.debug?.(`[UDP] ${e}`); - } - prepareAudioPacket(e) { - let t = this.state; - if (4 === t.code) return (t.preparedPacket = this.createAudioPacket(e, t.connectionData)), t.preparedPacket; - } - dispatchAudio() { - let e = this.state; - return ( - 4 === e.code && - void 0 !== e.preparedPacket && - (this.playAudioPacket(e.preparedPacket), (e.preparedPacket = void 0), !0) - ); - } - playAudioPacket(e) { - let t = this.state; - if (4 !== t.code) return; - let { connectionData: s } = t; - s.packetsPlayed++, - s.sequence++, - (s.timestamp += TIMESTAMP_INC), - s.sequence >= 65536 && (s.sequence = 0), - s.timestamp >= 4294967296 && (s.timestamp = 0), - this.setSpeaking(!0), - t.udp.send(e); - } - setSpeaking(e) { - let t = this.state; - 4 === t.code && - t.connectionData.speaking !== e && - ((t.connectionData.speaking = e), - t.ws.sendPacket({ - op: import_v42.VoiceOpcodes.Speaking, - d: { speaking: e ? 1 : 0, delay: 0, ssrc: t.connectionData.ssrc }, - })); - } - createAudioPacket(e, t) { - let s = import_node_buffer3.Buffer.alloc(12); - (s[0] = 128), (s[1] = 120); - let { sequence: i, timestamp: o, ssrc: n } = t; - return ( - s.writeUIntBE(i, 2, 2), - s.writeUIntBE(o, 4, 4), - s.writeUIntBE(n, 8, 4), - s.copy(nonce, 0, 0, 12), - import_node_buffer3.Buffer.concat([s, ...this.encryptOpusPacket(e, t)]) - ); - } - encryptOpusPacket(e, t) { - let { secretKey: s, encryptionMode: i } = t; - if ('xsalsa20_poly1305_lite' === i) - return ( - t.nonce++, - t.nonce > MAX_NONCE_SIZE && (t.nonce = 0), - t.nonceBuffer.writeUInt32BE(t.nonce, 0), - [methods.close(e, t.nonceBuffer, s), t.nonceBuffer.slice(0, 4)] - ); - if ('xsalsa20_poly1305_suffix' === i) { - let o = methods.random(24, t.nonceBuffer); - return [methods.close(e, o, s), o]; - } - return [methods.close(e, nonce, s)]; - } -}; -__name(Networking, 'Networking'); -var import_node_buffer5 = require('buffer'), - import_v43 = require('discord-api-types/voice/v4'), - import_node_stream = require('stream'), - import_node_buffer4 = require('buffer'), - import_node_events4 = require('events'), - AudioPlayerError = class extends Error { - resource; - constructor(e, t) { - super(e.message), (this.resource = t), (this.name = e.name), (this.stack = e.stack); - } - }; -__name(AudioPlayerError, 'AudioPlayerError'); -var PlayerSubscription = class { - connection; - player; - constructor(e, t) { - (this.connection = e), (this.player = t); - } - unsubscribe() { - this.connection.onSubscriptionRemoved(this), this.player.unsubscribe(this); - } -}; -__name(PlayerSubscription, 'PlayerSubscription'); -var SILENCE_FRAME = import_node_buffer4.Buffer.from([248, 255, 254]), - NoSubscriberBehavior = - (((NoSubscriberBehavior2 = NoSubscriberBehavior || {}).Pause = 'pause'), - (NoSubscriberBehavior2.Play = 'play'), - (NoSubscriberBehavior2.Stop = 'stop'), - NoSubscriberBehavior2), - AudioPlayerStatus = - (((AudioPlayerStatus2 = AudioPlayerStatus || {}).AutoPaused = 'autopaused'), - (AudioPlayerStatus2.Buffering = 'buffering'), - (AudioPlayerStatus2.Idle = 'idle'), - (AudioPlayerStatus2.Paused = 'paused'), - (AudioPlayerStatus2.Playing = 'playing'), - AudioPlayerStatus2); -function stringifyState2(e) { - return JSON.stringify({ ...e, resource: Reflect.has(e, 'resource'), stepTimeout: Reflect.has(e, 'stepTimeout') }); -} -__name(stringifyState2, 'stringifyState'); -var AudioPlayer = class extends import_node_events4.EventEmitter { - _state; - subscribers = []; - behaviors; - debug; - constructor(e = {}) { - super(), - (this._state = { status: 'idle' }), - (this.behaviors = { noSubscriber: 'pause', maxMissedFrames: 5, ...e.behaviors }), - (this.debug = !1 === e.debug ? null : e => this.emit('debug', e)); - } - get playable() { - return this.subscribers.filter(({ connection: e }) => 'ready' === e.state.status).map(({ connection: e }) => e); - } - subscribe(e) { - let t = this.subscribers.find(t => t.connection === e); - if (!t) { - let s = new PlayerSubscription(e, this); - return this.subscribers.push(s), setImmediate(() => this.emit('subscribe', s)), s; - } - return t; - } - unsubscribe(e) { - let t = this.subscribers.indexOf(e), - s = -1 !== t; - return s && (this.subscribers.splice(t, 1), e.connection.setSpeaking(!1), this.emit('unsubscribe', e)), s; - } - get state() { - return this._state; - } - set state(e) { - let t = this._state, - s = Reflect.get(e, 'resource'); - 'idle' !== t.status && - t.resource !== s && - (t.resource.playStream.on('error', noop), - t.resource.playStream.off('error', t.onStreamError), - (t.resource.audioPlayer = void 0), - t.resource.playStream.destroy(), - t.resource.playStream.read()), - 'buffering' === t.status && - ('buffering' !== e.status || e.resource !== t.resource) && - (t.resource.playStream.off('end', t.onFailureCallback), - t.resource.playStream.off('close', t.onFailureCallback), - t.resource.playStream.off('finish', t.onFailureCallback), - t.resource.playStream.off('readable', t.onReadableCallback)), - 'idle' === e.status && (this._signalStopSpeaking(), deleteAudioPlayer(this)), - s && addAudioPlayer(this); - let i = 'idle' !== t.status && 'playing' === e.status && t.resource !== e.resource; - (this._state = e), - this.emit('stateChange', t, this._state), - (t.status !== e.status || i) && this.emit(e.status, t, this._state), - this.debug?.(`state change: -from ${stringifyState2(t)} -to ${stringifyState2(e)}`); - } - play(e) { - if (e.ended) throw Error('Cannot play a resource that has already ended.'); - if (e.audioPlayer) { - if (e.audioPlayer === this) return; - throw Error('Resource is already being played by another audio player.'); - } - e.audioPlayer = this; - let t = __name(t => { - 'idle' !== this.state.status && this.emit('error', new AudioPlayerError(t, this.state.resource)), - 'idle' !== this.state.status && this.state.resource === e && (this.state = { status: 'idle' }); - }, 'onStreamError'); - if ((e.playStream.once('error', t), e.started)) - this.state = { status: 'playing', missedFrames: 0, playbackDuration: 0, resource: e, onStreamError: t }; - else { - let s = __name(() => { - 'buffering' === this.state.status && - this.state.resource === e && - (this.state = { status: 'playing', missedFrames: 0, playbackDuration: 0, resource: e, onStreamError: t }); - }, 'onReadableCallback'), - i = __name(() => { - 'buffering' === this.state.status && this.state.resource === e && (this.state = { status: 'idle' }); - }, 'onFailureCallback'); - e.playStream.once('readable', s), - e.playStream.once('end', i), - e.playStream.once('close', i), - e.playStream.once('finish', i), - (this.state = { - status: 'buffering', - resource: e, - onReadableCallback: s, - onFailureCallback: i, - onStreamError: t, - }); - } - } - pause(e = !0) { - return ( - 'playing' === this.state.status && - ((this.state = { ...this.state, status: 'paused', silencePacketsRemaining: e ? 5 : 0 }), !0) - ); - } - unpause() { - return 'paused' === this.state.status && ((this.state = { ...this.state, status: 'playing', missedFrames: 0 }), !0); - } - stop(e = !1) { - return ( - 'idle' !== this.state.status && - (e || 0 === this.state.resource.silencePaddingFrames - ? (this.state = { status: 'idle' }) - : -1 === this.state.resource.silenceRemaining && - (this.state.resource.silenceRemaining = this.state.resource.silencePaddingFrames), - !0) - ); - } - checkPlayable() { - let e = this._state; - return ( - 'idle' !== e.status && - 'buffering' !== e.status && - (!!e.resource.readable || ((this.state = { status: 'idle' }), !1)) - ); - } - _stepDispatch() { - let e = this._state; - if ('idle' !== e.status && 'buffering' !== e.status) for (let t of this.playable) t.dispatchAudio(); - } - _stepPrepare() { - let e = this._state; - if ('idle' === e.status || 'buffering' === e.status) return; - let t = this.playable; - if ( - ('autopaused' === e.status && t.length > 0 && (this.state = { ...e, status: 'playing', missedFrames: 0 }), - 'paused' === e.status || 'autopaused' === e.status) - ) { - e.silencePacketsRemaining > 0 && - (e.silencePacketsRemaining--, - this._preparePacket(SILENCE_FRAME, t, e), - 0 === e.silencePacketsRemaining && this._signalStopSpeaking()); - return; - } - if (0 === t.length) { - if ('pause' === this.behaviors.noSubscriber) { - this.state = { ...e, status: 'autopaused', silencePacketsRemaining: 5 }; - return; - } - 'stop' === this.behaviors.noSubscriber && this.stop(!0); - } - let s = e.resource.read(); - 'playing' === e.status && - (s - ? (this._preparePacket(s, t, e), (e.missedFrames = 0)) - : (this._preparePacket(SILENCE_FRAME, t, e), - e.missedFrames++, - e.missedFrames >= this.behaviors.maxMissedFrames && this.stop())); - } - _signalStopSpeaking() { - for (let { connection: e } of this.subscribers) e.setSpeaking(!1); - } - _preparePacket(e, t, s) { - for (let i of ((s.playbackDuration += 20), t)) i.prepareAudioPacket(e); - } -}; -function createAudioPlayer(e) { - return new AudioPlayer(e); -} -__name(AudioPlayer, 'AudioPlayer'), __name(createAudioPlayer, 'createAudioPlayer'); -var EndBehaviorType = - (((EndBehaviorType2 = EndBehaviorType || {})[(EndBehaviorType2.Manual = 0)] = 'Manual'), - (EndBehaviorType2[(EndBehaviorType2.AfterSilence = 1)] = 'AfterSilence'), - (EndBehaviorType2[(EndBehaviorType2.AfterInactivity = 2)] = 'AfterInactivity'), - EndBehaviorType2); -function createDefaultAudioReceiveStreamOptions() { - return { end: { behavior: 0 } }; -} -__name(createDefaultAudioReceiveStreamOptions, 'createDefaultAudioReceiveStreamOptions'); -var AudioReceiveStream = class extends import_node_stream.Readable { - end; - endTimeout; - constructor({ end: e, ...t }) { - super({ ...t, objectMode: !0 }), (this.end = e); - } - push(e) { - return ( - e && - (2 === this.end.behavior || - (1 === this.end.behavior && (0 !== e.compare(SILENCE_FRAME) || void 0 === this.endTimeout))) && - this.renewEndTimeout(this.end), - super.push(e) - ); - } - renewEndTimeout(e) { - this.endTimeout && clearTimeout(this.endTimeout), (this.endTimeout = setTimeout(() => this.push(null), e.duration)); - } - _read() {} -}; -__name(AudioReceiveStream, 'AudioReceiveStream'); -var import_node_events5 = require('events'), - SSRCMap = class extends import_node_events5.EventEmitter { - map; - constructor() { - super(), (this.map = new Map()); - } - update(e) { - let t = this.map.get(e.audioSSRC), - s = { ...this.map.get(e.audioSSRC), ...e }; - this.map.set(e.audioSSRC, s), t || this.emit('create', s), this.emit('update', t, s); - } - get(e) { - if ('number' == typeof e) return this.map.get(e); - for (let t of this.map.values()) if (t.userId === e) return t; - } - delete(e) { - if ('number' == typeof e) { - let t = this.map.get(e); - return t && (this.map.delete(e), this.emit('delete', t)), t; - } - for (let [s, i] of this.map.entries()) if (i.userId === e) return this.map.delete(s), this.emit('delete', i), i; - } - }; -__name(SSRCMap, 'SSRCMap'); -var import_node_events6 = require('events'), - _SpeakingMap = class extends import_node_events6.EventEmitter { - users; - speakingTimeouts; - constructor() { - super(), (this.users = new Map()), (this.speakingTimeouts = new Map()); - } - onPacket(e) { - let t = this.speakingTimeouts.get(e); - t ? clearTimeout(t) : (this.users.set(e, Date.now()), this.emit('start', e)), this.startTimeout(e); - } - startTimeout(e) { - this.speakingTimeouts.set( - e, - setTimeout(() => { - this.emit('end', e), this.speakingTimeouts.delete(e), this.users.delete(e); - }, _SpeakingMap.DELAY), - ); - } - }, - SpeakingMap = _SpeakingMap; -__name(SpeakingMap, 'SpeakingMap'), __publicField(SpeakingMap, 'DELAY', 100); -var VoiceReceiver = class { - voiceConnection; - ssrcMap; - subscriptions; - connectionData; - speaking; - constructor(e) { - (this.voiceConnection = e), - (this.ssrcMap = new SSRCMap()), - (this.speaking = new SpeakingMap()), - (this.subscriptions = new Map()), - (this.connectionData = {}), - (this.onWsPacket = this.onWsPacket.bind(this)), - (this.onUdpMessage = this.onUdpMessage.bind(this)); - } - onWsPacket(e) { - e.op === import_v43.VoiceOpcodes.ClientDisconnect && 'string' == typeof e.d?.user_id - ? this.ssrcMap.delete(e.d.user_id) - : e.op === import_v43.VoiceOpcodes.Speaking && 'string' == typeof e.d?.user_id && 'number' == typeof e.d?.ssrc - ? this.ssrcMap.update({ userId: e.d.user_id, audioSSRC: e.d.ssrc }) - : e.op === import_v43.VoiceOpcodes.ClientConnect && - 'string' == typeof e.d?.user_id && - 'number' == typeof e.d?.audio_ssrc && - this.ssrcMap.update({ - userId: e.d.user_id, - audioSSRC: e.d.audio_ssrc, - videoSSRC: 0 === e.d.video_ssrc ? void 0 : e.d.video_ssrc, - }); - } - decrypt(e, t, s, i) { - let o; - 'xsalsa20_poly1305_lite' === t - ? (e.copy(s, 0, e.length - 4), (o = e.length - 4)) - : 'xsalsa20_poly1305_suffix' === t - ? (e.copy(s, 0, e.length - 24), (o = e.length - 24)) - : e.copy(s, 0, 0, 12); - let n = methods.open(e.slice(12, o), s, i); - if (n) return import_node_buffer5.Buffer.from(n); - } - parsePacket(e, t, s, i) { - let o = this.decrypt(e, t, s, i); - if (o) { - if (190 === o[0] && 222 === o[1]) { - let n = o.readUInt16BE(2); - o = o.subarray(4 + 4 * n); - } - return o; - } - } - onUdpMessage(e) { - if (e.length <= 8) return; - let t = e.readUInt32BE(8), - s = this.ssrcMap.get(t); - if (!s) return; - this.speaking.onPacket(s.userId); - let i = this.subscriptions.get(s.userId); - if (i && this.connectionData.encryptionMode && this.connectionData.nonceBuffer && this.connectionData.secretKey) { - let o = this.parsePacket( - e, - this.connectionData.encryptionMode, - this.connectionData.nonceBuffer, - this.connectionData.secretKey, - ); - o ? i.push(o) : i.destroy(Error('Failed to parse packet')); - } - } - subscribe(e, t) { - let s = this.subscriptions.get(e); - if (s) return s; - let i = new AudioReceiveStream({ ...createDefaultAudioReceiveStreamOptions(), ...t }); - return i.once('close', () => this.subscriptions.delete(e)), this.subscriptions.set(e, i), i; - } -}; -__name(VoiceReceiver, 'VoiceReceiver'); -var VoiceConnectionStatus = - (((VoiceConnectionStatus2 = VoiceConnectionStatus || {}).Connecting = 'connecting'), - (VoiceConnectionStatus2.Destroyed = 'destroyed'), - (VoiceConnectionStatus2.Disconnected = 'disconnected'), - (VoiceConnectionStatus2.Ready = 'ready'), - (VoiceConnectionStatus2.Signalling = 'signalling'), - VoiceConnectionStatus2), - VoiceConnectionDisconnectReason = - (((VoiceConnectionDisconnectReason2 = VoiceConnectionDisconnectReason || {})[ - (VoiceConnectionDisconnectReason2.WebSocketClose = 0) - ] = 'WebSocketClose'), - (VoiceConnectionDisconnectReason2[(VoiceConnectionDisconnectReason2.AdapterUnavailable = 1)] = - 'AdapterUnavailable'), - (VoiceConnectionDisconnectReason2[(VoiceConnectionDisconnectReason2.EndpointRemoved = 2)] = 'EndpointRemoved'), - (VoiceConnectionDisconnectReason2[(VoiceConnectionDisconnectReason2.Manual = 3)] = 'Manual'), - VoiceConnectionDisconnectReason2), - VoiceConnection = class extends import_node_events7.EventEmitter { - rejoinAttempts; - _state; - joinConfig; - packets; - receiver; - debug; - constructor(e, t) { - super(), - (this.debug = t.debug ? e => this.emit('debug', e) : null), - (this.rejoinAttempts = 0), - (this.receiver = new VoiceReceiver(this)), - (this.onNetworkingClose = this.onNetworkingClose.bind(this)), - (this.onNetworkingStateChange = this.onNetworkingStateChange.bind(this)), - (this.onNetworkingError = this.onNetworkingError.bind(this)), - (this.onNetworkingDebug = this.onNetworkingDebug.bind(this)); - let s = t.adapterCreator({ - onVoiceServerUpdate: e => this.addServerPacket(e), - onVoiceStateUpdate: e => this.addStatePacket(e), - destroy: () => this.destroy(!1), - }); - (this._state = { status: 'signalling', adapter: s }), - (this.packets = { server: void 0, state: void 0 }), - (this.joinConfig = e); - } - get state() { - return this._state; - } - set state(e) { - let t = this._state, - s = Reflect.get(t, 'networking'), - i = Reflect.get(e, 'networking'), - o = Reflect.get(t, 'subscription'), - n = Reflect.get(e, 'subscription'); - if ( - (s !== i && - (s && - (s.on('error', noop), - s.off('debug', this.onNetworkingDebug), - s.off('error', this.onNetworkingError), - s.off('close', this.onNetworkingClose), - s.off('stateChange', this.onNetworkingStateChange), - s.destroy()), - i && this.updateReceiveBindings(i.state, s?.state)), - 'ready' === e.status) - ) - this.rejoinAttempts = 0; - else if ('destroyed' === e.status) for (let r of this.receiver.subscriptions.values()) r.destroyed || r.destroy(); - 'destroyed' !== t.status && 'destroyed' === e.status && t.adapter.destroy(), - (this._state = e), - o && o !== n && o.unsubscribe(), - this.emit('stateChange', t, e), - t.status !== e.status && this.emit(e.status, t, e); - } - addServerPacket(e) { - (this.packets.server = e), - e.endpoint - ? this.configureNetworking() - : 'destroyed' !== this.state.status && (this.state = { ...this.state, status: 'disconnected', reason: 2 }); - } - addStatePacket(e) { - (this.packets.state = e), - void 0 !== e.self_deaf && (this.joinConfig.selfDeaf = e.self_deaf), - void 0 !== e.self_mute && (this.joinConfig.selfMute = e.self_mute), - e.channel_id && (this.joinConfig.channelId = e.channel_id); - } - updateReceiveBindings(e, t) { - let s = Reflect.get(t ?? {}, 'ws'), - i = Reflect.get(e, 'ws'), - o = Reflect.get(t ?? {}, 'udp'), - n = Reflect.get(e, 'udp'); - s !== i && (s?.off('packet', this.receiver.onWsPacket), i?.on('packet', this.receiver.onWsPacket)), - o !== n && (o?.off('message', this.receiver.onUdpMessage), n?.on('message', this.receiver.onUdpMessage)), - (this.receiver.connectionData = Reflect.get(e, 'connectionData') ?? {}); - } - configureNetworking() { - let { server: e, state: t } = this.packets; - if (!e || !t || 'destroyed' === this.state.status || !e.endpoint) return; - let s = new Networking( - { - endpoint: e.endpoint, - serverId: e.guild_id ?? e.channel_id, - token: e.token, - sessionId: t.session_id, - userId: t.user_id, - }, - Boolean(this.debug), - ); - s.once('close', this.onNetworkingClose), - s.on('stateChange', this.onNetworkingStateChange), - s.on('error', this.onNetworkingError), - s.on('debug', this.onNetworkingDebug), - (this.state = { ...this.state, status: 'connecting', networking: s }); - } - onNetworkingClose(e) { - 'destroyed' === this.state.status || - (4014 === e - ? (this.state = { ...this.state, status: 'disconnected', reason: 0, closeCode: e }) - : ((this.state = { ...this.state, status: 'signalling' }), - this.rejoinAttempts++, - this.state.adapter.sendPayload(createJoinVoiceChannelPayload(this.joinConfig)) || - (this.state = { ...this.state, status: 'disconnected', reason: 1 }))); - } - onNetworkingStateChange(e, t) { - this.updateReceiveBindings(t, e), - e.code !== t.code && - ('connecting' === this.state.status || 'ready' === this.state.status) && - (4 === t.code - ? (this.state = { ...this.state, status: 'ready' }) - : 6 !== t.code && (this.state = { ...this.state, status: 'connecting' })); - } - onNetworkingError(e) { - this.emit('error', e); - } - onNetworkingDebug(e) { - this.debug?.(`[NW] ${e}`); - } - prepareAudioPacket(e) { - let t = this.state; - if ('ready' === t.status) return t.networking.prepareAudioPacket(e); - } - dispatchAudio() { - let e = this.state; - if ('ready' === e.status) return e.networking.dispatchAudio(); - } - playOpusPacket(e) { - let t = this.state; - if ('ready' === t.status) return t.networking.prepareAudioPacket(e), t.networking.dispatchAudio(); - } - destroy(e = !0) { - if ('destroyed' === this.state.status) - throw Error('Cannot destroy VoiceConnection - it has already been destroyed'); - getVoiceConnection(this.joinConfig.guildId, this.joinConfig.group) === this && untrackVoiceConnection(this), - e && this.state.adapter.sendPayload(createJoinVoiceChannelPayload({ ...this.joinConfig, channelId: null })), - (this.state = { status: 'destroyed' }); - } - disconnect() { - return ( - 'destroyed' !== this.state.status && - 'signalling' !== this.state.status && - (((this.joinConfig.channelId = null), - this.state.adapter.sendPayload(createJoinVoiceChannelPayload(this.joinConfig))) - ? ((this.state = { adapter: this.state.adapter, reason: 3, status: 'disconnected' }), !0) - : ((this.state = { - adapter: this.state.adapter, - subscription: this.state.subscription, - status: 'disconnected', - reason: 1, - }), - !1)) - ); - } - rejoin(e) { - if ('destroyed' === this.state.status) return !1; - let t = 'ready' !== this.state.status; - return (t && this.rejoinAttempts++, - Object.assign(this.joinConfig, e), - this.state.adapter.sendPayload(createJoinVoiceChannelPayload(this.joinConfig))) - ? (t && (this.state = { ...this.state, status: 'signalling' }), !0) - : ((this.state = { - adapter: this.state.adapter, - subscription: this.state.subscription, - status: 'disconnected', - reason: 1, - }), - !1); - } - setSpeaking(e) { - return 'ready' === this.state.status && this.state.networking.setSpeaking(e); - } - subscribe(e) { - if ('destroyed' === this.state.status) return; - let t = e.subscribe(this); - return (this.state = { ...this.state, subscription: t }), t; - } - get ping() { - return 'ready' === this.state.status && 4 === this.state.networking.state.code - ? { ws: this.state.networking.state.ws.ping, udp: this.state.networking.state.udp.ping } - : { ws: void 0, udp: void 0 }; - } - onSubscriptionRemoved(e) { - 'destroyed' !== this.state.status && - this.state.subscription === e && - (this.state = { ...this.state, subscription: void 0 }); - } - }; -function createVoiceConnection(e, t) { - let s = createJoinVoiceChannelPayload(e), - i = getVoiceConnection(e.guildId, e.group); - if (i && 'destroyed' !== i.state.status) - return ( - 'disconnected' === i.state.status - ? i.rejoin({ channelId: e.channelId, selfDeaf: e.selfDeaf, selfMute: e.selfMute }) - : i.state.adapter.sendPayload(s) || (i.state = { ...i.state, status: 'disconnected', reason: 1 }), - i - ); - let o = new VoiceConnection(e, t); - return ( - trackVoiceConnection(o), - 'destroyed' === o.state.status || - o.state.adapter.sendPayload(s) || - (o.state = { ...o.state, status: 'disconnected', reason: 1 }), - o - ); -} -function joinVoiceChannel(e) { - let t = { selfDeaf: !0, selfMute: !1, group: 'default', ...e }; - return createVoiceConnection(t, { adapterCreator: e.adapterCreator, debug: e.debug }); -} -__name(VoiceConnection, 'VoiceConnection'), - __name(createVoiceConnection, 'createVoiceConnection'), - __name(joinVoiceChannel, 'joinVoiceChannel'); -var import_node_stream2 = require('stream'), - import_prism_media2 = __toESM(require('prism-media')), - import_prism_media = __toESM(require('prism-media')), - FFMPEG_PCM_ARGUMENTS = ['-analyzeduration', '0', '-loglevel', '0', '-f', 's16le', '-ar', '48000', '-ac', '2'], - FFMPEG_OPUS_ARGUMENTS = [ - '-analyzeduration', - '0', - '-loglevel', - '0', - '-acodec', - 'libopus', - '-f', - 'opus', - '-ar', - '48000', - '-ac', - '2', - ], - StreamType = - (((StreamType2 = StreamType || {}).Arbitrary = 'arbitrary'), - (StreamType2.OggOpus = 'ogg/opus'), - (StreamType2.Opus = 'opus'), - (StreamType2.Raw = 'raw'), - (StreamType2.WebmOpus = 'webm/opus'), - StreamType2), - Node = class { - edges = []; - type; - constructor(e) { - this.type = e; - } - addEdge(e) { - this.edges.push({ ...e, from: this }); - } - }; -__name(Node, 'Node'); -var NODES = new Map(); -for (const streamType of Object.values(StreamType)) NODES.set(streamType, new Node(streamType)); -function getNode(e) { - let t = NODES.get(e); - if (!t) throw Error(`Node type '${e}' does not exist!`); - return t; -} -__name(getNode, 'getNode'), - getNode('raw').addEdge({ - type: 'opus encoder', - to: getNode('opus'), - cost: 1.5, - transformer: () => new import_prism_media.default.opus.Encoder({ rate: 48e3, channels: 2, frameSize: 960 }), - }), - getNode('opus').addEdge({ - type: 'opus decoder', - to: getNode('raw'), - cost: 1.5, - transformer: () => new import_prism_media.default.opus.Decoder({ rate: 48e3, channels: 2, frameSize: 960 }), - }), - getNode('ogg/opus').addEdge({ - type: 'ogg/opus demuxer', - to: getNode('opus'), - cost: 1, - transformer: () => new import_prism_media.default.opus.OggDemuxer(), - }), - getNode('webm/opus').addEdge({ - type: 'webm/opus demuxer', - to: getNode('opus'), - cost: 1, - transformer: () => new import_prism_media.default.opus.WebmDemuxer(), - }); -var FFMPEG_PCM_EDGE = { - type: 'ffmpeg pcm', - to: getNode('raw'), - cost: 2, - transformer: e => - new import_prism_media.default.FFmpeg({ - args: 'string' == typeof e ? ['-i', e, ...FFMPEG_PCM_ARGUMENTS] : FFMPEG_PCM_ARGUMENTS, - }), -}; -function canEnableFFmpegOptimizations() { - try { - return import_prism_media.default.FFmpeg.getInfo().output.includes('--enable-libopus'); - } catch {} - return !1; -} -if ( - (getNode('arbitrary').addEdge(FFMPEG_PCM_EDGE), - getNode('ogg/opus').addEdge(FFMPEG_PCM_EDGE), - getNode('webm/opus').addEdge(FFMPEG_PCM_EDGE), - getNode('raw').addEdge({ - type: 'volume transformer', - to: getNode('raw'), - cost: 0.5, - transformer: () => new import_prism_media.default.VolumeTransformer({ type: 's16le' }), - }), - __name(canEnableFFmpegOptimizations, 'canEnableFFmpegOptimizations'), - canEnableFFmpegOptimizations()) -) { - let e = { - type: 'ffmpeg ogg', - to: getNode('ogg/opus'), - cost: 2, - transformer: e => - new import_prism_media.default.FFmpeg({ - args: 'string' == typeof e ? ['-i', e, ...FFMPEG_OPUS_ARGUMENTS] : FFMPEG_OPUS_ARGUMENTS, - }), - }; - getNode('arbitrary').addEdge(e), getNode('ogg/opus').addEdge(e), getNode('webm/opus').addEdge(e); -} -function findPath(e, t, s = getNode('opus'), i = [], o = 5) { - if (e === s && t(i)) return { cost: 0 }; - if (0 === o) return { cost: Number.POSITIVE_INFINITY }; - let n; - for (let r of e.edges) { - if (n && r.cost > n.cost) continue; - let a = findPath(r.to, t, s, [...i, r], o - 1), - c = r.cost + a.cost; - (!n || c < n.cost) && (n = { cost: c, edge: r, next: a }); - } - return n ?? { cost: Number.POSITIVE_INFINITY }; -} -function constructPipeline(e) { - let t = [], - s = e; - for (; s?.edge; ) t.push(s.edge), (s = s.next); - return t; -} -function findPipeline(e, t) { - return constructPipeline(findPath(getNode(e), t)); -} -__name(findPath, 'findPath'), __name(constructPipeline, 'constructPipeline'), __name(findPipeline, 'findPipeline'); -var AudioResource = class { - playStream; - edges; - metadata; - volume; - encoder; - audioPlayer; - playbackDuration = 0; - started = !1; - silencePaddingFrames; - silenceRemaining = -1; - constructor(e, t, s, i) { - for (let o of ((this.edges = e), - (this.playStream = t.length > 1 ? (0, import_node_stream2.pipeline)(t, noop) : t[0]), - (this.metadata = s), - (this.silencePaddingFrames = i), - t)) - o instanceof import_prism_media2.default.VolumeTransformer - ? (this.volume = o) - : o instanceof import_prism_media2.default.opus.Encoder && (this.encoder = o); - this.playStream.once('readable', () => (this.started = !0)); - } - get readable() { - if (0 === this.silenceRemaining) return !1; - let e = this.playStream.readable; - return ( - e || - (-1 === this.silenceRemaining && (this.silenceRemaining = this.silencePaddingFrames), 0 !== this.silenceRemaining) - ); - } - get ended() { - return this.playStream.readableEnded || this.playStream.destroyed || 0 === this.silenceRemaining; - } - read() { - if (0 === this.silenceRemaining) return null; - if (this.silenceRemaining > 0) return this.silenceRemaining--, SILENCE_FRAME; - let e = this.playStream.read(); - return e && (this.playbackDuration += 20), e; - } -}; -__name(AudioResource, 'AudioResource'); -var VOLUME_CONSTRAINT = __name(e => e.some(e => 'volume transformer' === e.type), 'VOLUME_CONSTRAINT'), - NO_CONSTRAINT = __name(() => !0, 'NO_CONSTRAINT'); -function inferStreamType(e) { - if (e instanceof import_prism_media2.default.opus.Encoder) return { streamType: 'opus', hasVolume: !1 }; - if (e instanceof import_prism_media2.default.opus.Decoder) return { streamType: 'raw', hasVolume: !1 }; - if (e instanceof import_prism_media2.default.VolumeTransformer) return { streamType: 'raw', hasVolume: !0 }; - if (e instanceof import_prism_media2.default.opus.OggDemuxer) return { streamType: 'opus', hasVolume: !1 }; - if (e instanceof import_prism_media2.default.opus.WebmDemuxer) return { streamType: 'opus', hasVolume: !1 }; - return { streamType: 'arbitrary', hasVolume: !1 }; -} -function createAudioResource(e, t = {}) { - let s = t.inputType, - i = Boolean(t.inlineVolume); - if ('string' == typeof e) s = 'arbitrary'; - else if (void 0 === s) { - let o = inferStreamType(e); - (s = o.streamType), (i = i && !o.hasVolume); - } - let n = findPipeline(s, i ? VOLUME_CONSTRAINT : NO_CONSTRAINT); - if (0 === n.length) { - if ('string' == typeof e) throw Error(`Invalid pipeline constructed for string resource '${e}'`); - return new AudioResource([], [e], t.metadata ?? null, t.silencePaddingFrames ?? 5); - } - let r = n.map(t => t.transformer(e)); - return 'string' != typeof e && r.unshift(e), new AudioResource(n, r, t.metadata ?? null, t.silencePaddingFrames ?? 5); -} -__name(inferStreamType, 'inferStreamType'), __name(createAudioResource, 'createAudioResource'); -var import_node_path = require('path'), - import_prism_media3 = __toESM(require('prism-media')); -function findPackageJSON(e, t, s) { - if (0 === s) return; - let i = (0, import_node_path.resolve)(e, './package.json'); - try { - let o = require(i); - if (o.name !== t) throw Error('package.json does not match'); - return o; - } catch { - return findPackageJSON((0, import_node_path.resolve)(e, '..'), t, s - 1); - } -} -function version(e) { - try { - if ('@discordjs/voice' === e) return '0.16.0'; - let t = findPackageJSON((0, import_node_path.dirname)(require.resolve(e)), e, 3); - return t?.version ?? 'not found'; - } catch { - return 'not found'; - } -} -function generateDependencyReport() { - let e = [], - t = __name(t => e.push(`- ${t}: ${version(t)}`), 'addVersion'); - e.push('Core Dependencies'), - t('@discordjs/voice'), - t('prism-media'), - e.push(''), - e.push('Opus Libraries'), - t('@discordjs/opus'), - t('opusscript'), - e.push(''), - e.push('Encryption Libraries'), - t('sodium-native'), - t('sodium'), - t('libsodium-wrappers'), - t('tweetnacl'), - e.push(''), - e.push('FFmpeg'); - try { - let s = import_prism_media3.default.FFmpeg.getInfo(); - e.push(`- version: ${s.version}`), e.push(`- libopus: ${s.output.includes('--enable-libopus') ? 'yes' : 'no'}`); - } catch { - e.push('- not found'); - } - return ['-'.repeat(50), ...e, '-'.repeat(50)].join('\n'); -} -__name(findPackageJSON, 'findPackageJSON'), - __name(version, 'version'), - __name(generateDependencyReport, 'generateDependencyReport'); -var import_node_events8 = require('events'); -function abortAfter(e) { - let t = new AbortController(), - s = setTimeout(() => t.abort(), e); - return t.signal.addEventListener('abort', () => clearTimeout(s)), [t, t.signal]; -} -async function entersState(e, t, s) { - if (e.state.status !== t) { - let [i, o] = 'number' == typeof s ? abortAfter(s) : [void 0, s]; - try { - await (0, import_node_events8.once)(e, t, { signal: o }); - } finally { - i?.abort(); - } - } - return e; -} -__name(abortAfter, 'abortAfter'), __name(entersState, 'entersState'); -var import_node_buffer6 = require('buffer'), - import_node_process = __toESM(require('process')), - import_node_stream3 = require('stream'), - import_prism_media4 = __toESM(require('prism-media')); -function validateDiscordOpusHead(e) { - let t = e.readUInt8(9), - s = e.readUInt32LE(12); - return 2 === t && 48e3 === s; -} -async function demuxProbe(e, t = 1024, s = validateDiscordOpusHead) { - return new Promise((i, o) => { - if (e.readableObjectMode) { - o(Error('Cannot probe a readable stream in object mode')); - return; - } - if (e.readableEnded) { - o(Error('Cannot probe a stream that has ended')); - return; - } - let n = import_node_buffer6.Buffer.alloc(0), - r, - a = __name(t => { - e.off('data', l), - e.off('close', p), - e.off('end', p), - e.pause(), - (r = t), - e.readableEnded - ? i({ stream: import_node_stream3.Readable.from(n), type: t }) - : (n.length > 0 && e.push(n), i({ stream: e, type: t })); - }, 'finish'), - c = __name( - e => t => { - s(t) && a(e); - }, - 'foundHead', - ), - d = new import_prism_media4.default.opus.WebmDemuxer(); - d.once('error', noop), d.on('head', c('webm/opus')); - let u = new import_prism_media4.default.opus.OggDemuxer(); - u.once('error', noop), u.on('head', c('ogg/opus')); - let p = __name(() => { - r || a('arbitrary'); - }, 'onClose'), - l = __name(s => { - (n = import_node_buffer6.Buffer.concat([n, s])), - d.write(s), - u.write(s), - n.length >= t && (e.off('data', l), e.pause(), import_node_process.default.nextTick(p)); - }, 'onData'); - e.once('error', o), e.on('data', l), e.once('close', p), e.once('end', p); - }); -} -__name(validateDiscordOpusHead, 'validateDiscordOpusHead'), __name(demuxProbe, 'demuxProbe'); -var version2 = '0.16.0'; From 552a060c9b5587a8e81f5092c9846ae80c3be968 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sun, 7 Jan 2024 20:06:33 +0700 Subject: [PATCH 18/60] Delete PartialGroupDMChannel.js --- src/structures/PartialGroupDMChannel.js | 449 ------------------------ 1 file changed, 449 deletions(-) delete mode 100644 src/structures/PartialGroupDMChannel.js diff --git a/src/structures/PartialGroupDMChannel.js b/src/structures/PartialGroupDMChannel.js deleted file mode 100644 index 0545b1a..00000000 --- a/src/structures/PartialGroupDMChannel.js +++ /dev/null @@ -1,449 +0,0 @@ -'use strict'; - -const { Collection } = require('@discordjs/collection'); -const { joinVoiceChannel, entersState, VoiceConnectionStatus } = require('@discordjs/voice'); -const { Channel } = require('./Channel'); -const Invite = require('./Invite'); -const TextBasedChannel = require('./interfaces/TextBasedChannel'); -const { Error } = require('../errors'); -const MessageManager = require('../managers/MessageManager'); -const { Status, Opcodes } = require('../util/Constants'); -const DataResolver = require('../util/DataResolver'); - -/** - * Represents a Partial Group DM Channel on Discord. - * @extends {Channel} - */ -class PartialGroupDMChannel extends Channel { - constructor(client, data) { - super(client, data); - - // No flags are present when fetching partial group DM channels. - this.flags = null; - - /** - * The name of this Group DM Channel - * @type {?string} - */ - this.name = null; - - /** - * The hash of the channel icon - * @type {?string} - */ - this.icon = null; - - /** - * Messages data - * @type {Collection} - */ - this.messages = new MessageManager(this); - - /** - * Last Message ID - * @type {?Snowflake} - */ - this.lastMessageId = null; - - /** - * Last Pin Timestamp - * @type {UnixTimestamp} - */ - this.lastPinTimestamp = null; - - /** - * Owner ID - * @type {?Snowflake} - */ - this.ownerId = null; - - /** - * Invites fetch - * @type {Collection} - */ - this.invites = new Collection(); - - this._recipients = []; - - this._patch(data); - } - - /** - * The recipients of this Group DM Channel. - * @type {Collection} - * @readonly - */ - get recipients() { - const collect = new Collection(); - this._recipients.map(recipient => collect.set(recipient.id, this.client.users._add(recipient))); - collect.set(this.client.user.id, this.client.user); - return collect; - } - - /** - * The owner of this Group DM Channel - * @type {?User} - * @readonly - */ - get owner() { - return this.client.users.cache.get(this.ownerId); - } - - /** - * - * @param {Object} data Channel Data - * @private - */ - _patch(data) { - super._patch(data); - if ('recipients' in data && Array.isArray(data.recipients)) { - this._recipients = data.recipients; - } - if ('last_pin_timestamp' in data) { - const date = new Date(data.last_pin_timestamp); - this.lastPinTimestamp = date.getTime(); - } - if ('last_message_id' in data) { - this.lastMessageId = data.last_message_id; - } - if ('owner_id' in data) { - this.ownerId = data.owner_id; - } - if ('name' in data) { - this.name = data.name; - } - if ('icon' in data) { - this.icon = data.icon; - } - } - - /** - * Edit channel data - * @param {Object} data name, icon owner - * @returns {Promise} - * @private - */ - async edit(data) { - const _data = {}; - if ('name' in data) _data.name = data.name?.trim() ?? null; - if (typeof data.icon !== 'undefined') { - _data.icon = await DataResolver.resolveImage(data.icon); - } - if ('owner' in data) { - _data.owner = data.owner; - } - const newData = await this.client.api.channels(this.id).patch({ - data: _data, - }); - - return this.client.actions.ChannelUpdate.handle(newData).updated; - } - - /** - * The URL to this channel's icon. - * @param {StaticImageURLOptions} [options={}] Options for the Image URL - * @returns {?string} - */ - iconURL({ format, size } = {}) { - return this.icon && this.client.rest.cdn.GDMIcon(this.id, this.icon, format, size); - } - - /** - * Adds a user to this Group DM Channel. - * @param {UserResolvable} user User to add to the group - * @returns {Promise} - */ - async addMember(user) { - const userId = this.client.users.resolveId(user); - user = this.client.users.resolve(userId); - if (!userId) { - return Promise.reject(new TypeError('User is not a User or User ID')); - } - // API - // if (this.recipients.get(userId)) return Promise.reject(new Error('USER_ALREADY_IN_GROUP_DM_CHANNEL')); // Fails sometimes if member leaves recently (ex. user leave msg's channel used for adding) - await this.client.api.channels[this.id].recipients[userId].put(); - this._recipients.push(user); - return this; - } - - /** - * Removes a user from this Group DM Channel. - * @param {UserResolvable} user User to remove from the group - * @returns {Promise} - */ - async removeMember(user) { - if (this.ownerId !== this.client.user.id) { - return Promise.reject(new Error('NOT_OWNER_GROUP_DM_CHANNEL')); - } - user = this.client.users.resolveId(user); - if (!user) { - return Promise.reject(new TypeError('User is not a User or User ID')); - } - // API - // if (!this.recipients.get(user)) return Promise.reject(new Error('USER_NOT_IN_GROUP_DM_CHANNEL')); - await this.client.api.channels[this.id].recipients[user].delete(); - this._recipients = this._recipients.filter(r => r.id !== user); - return this; - } - - /** - * Renames this Group DM Channel. - * @param {?string} name Name of the channel - * @returns {Promise} - */ - setName(name) { - return this.edit({ name }); - } - - /** - * Sets the icon of this Group DM Channel. - * @param {?(Base64Resolvable|BufferResolvable)} icon Icon of the channel - * @returns {Promise} - */ - setIcon(icon) { - return this.edit({ icon }); - } - - /** - * Changes the owner of this Group DM Channel. - * @param {UserResolvable} user User to transfer ownership to - * @returns {Promise} - */ - setOwner(user) { - const id = this.client.users.resolveId(user); - if (!id) { - throw new TypeError('User is not a User or User ID'); - } - if (this.ownerId !== this.client.user.id) { - throw new Error('NOT_OWNER_GROUP_DM_CHANNEL'); - } - if (this.ownerId === id) { - return this; - } - return this.edit({ owner: id }); - } - - /** - * Gets the invite for this Group DM Channel. - * @returns {Promise} - */ - async getInvite() { - const inviteCode = await this.client.api.channels(this.id).invites.post({ - data: { - max_age: 86400, - }, - }); - const invite = new Invite(this.client, inviteCode); - this.invites.set(invite.code, invite); - return invite; - } - - /** - * Get all the invites for this Group DM Channel. - * @param {boolean} force Using API to fetch invites or cache - * @returns {Promise>} - */ - async fetchInvite(force = false) { - if (this.ownerId !== this.client.user.id) { - return Promise.reject(new Error('NOT_OWNER_GROUP_DM_CHANNEL')); - } - if (!force && this.invites.size) return this.invites; - const invites = await this.client.api.channels(this.id).invites.get(); - await Promise.all(invites.map(invite => this.invites.set(invite.code, new Invite(this.client, invite)))); - return this.invites; - } - - /** - * Delete invites from this Group DM Channel. - * @param {Invite} invite Invite to add to the channel - * @returns {Promise} - */ - async removeInvite(invite) { - if (this.ownerId !== this.client.user.id) { - return Promise.reject(new Error('NOT_OWNER_GROUP_DM_CHANNEL')); - } - if (!(invite instanceof Invite)) { - return Promise.reject(new TypeError('Invite is not an instance of Discord.Invite')); - } - await this.client.api.channels(this.id).invites[invite.code].delete(); - this.invites.delete(invite.code); - return this; - } - - /** - * Leave this Group DM Channel. - * @param {?boolean} slient Leave without notifying other members - * @returns {Promise} - * @example - * // Delete the channel - * channel.delete() - * .then(console.log) - * .catch(console.error); - */ - async delete(slient = false) { - if (typeof slient === 'boolean' && slient) { - await this.client.api.channels(this.id).delete({ - query: { - silent: true, - }, - }); - } else { - await this.client.api.channels(this.id).delete(); - } - return this; - } - - // These are here only for documentation purposes - they are implemented by TextBasedChannel - /* eslint-disable no-empty-function */ - get lastMessage() {} - get lastPinAt() {} - send() {} - sendTyping() {} - - /** - * @typedef {Object} CallOptions - * @property {boolean} [selfDeaf] Whether to deafen yourself - * @property {boolean} [selfMute] Whether to mute yourself - * @property {boolean} [ring=true] Emit a ringtone - */ - // Testing feature: Call - // URL: https://discord.com/api/v9/channels/DMchannelId/call/ring - /** - * Call this Group DMChannel. Return discordjs/voice VoiceConnection - * @param {CallOptions} options Options for the call - * @returns {Promise} - */ - call(options = {}) { - options = Object.assign( - { - ring: true, - }, - options || {}, - ); - return new Promise((resolve, reject) => { - if (!this.client.options.patchVoice) { - reject( - new Error( - 'VOICE_NOT_PATCHED', - 'Enable voice patching in client options\nhttps://discordjs-self-v13.netlify.app/#/docs/docs/main/typedef/ClientOptions', - ), - ); - } else { - if (options.ring) { - this.client.api.channels(this.id).call.ring.post({ - data: { - recipients: null, - }, - }); - } - const connection = joinVoiceChannel({ - channelId: this.id, - guildId: null, - adapterCreator: this.voiceAdapterCreator, - selfDeaf: options.selfDeaf ?? false, - selfMute: options.selfMute ?? false, - }); - entersState(connection, VoiceConnectionStatus.Ready, 30000) - .then(connection => { - resolve(connection); - }) - .catch(err => { - connection.destroy(); - reject(err); - }); - } - }); - } - - /** - * Ring the user's phone / PC (call) - * @param {UserResolvable[]} recipients Array of recipients - * @returns {Promise} - */ - ring(recipients) { - if (!recipients || !Array.isArray(recipients) || recipients.length == 0) recipients = null; - recipients = recipients.map(r => this.client.users.resolveId(r)).filter(r => r && this.recipients.get(r)); - return this.client.api.channels(this.id).call.ring.post({ - data: { - recipients, - }, - }); - } - - /** - * Sync VoiceState of this Group DMChannel. - * @returns {undefined} - */ - sync() { - this.client.ws.broadcast({ - op: Opcodes.DM_UPDATE, - d: { - channel_id: this.id, - }, - }); - } - /** - * The user in this voice-based channel - * @type {Collection} - * @readonly - */ - get voiceUsers() { - const coll = new Collection(); - for (const state of this.client.voiceStates.cache.values()) { - if (state.channelId === this.id && state.user) { - coll.set(state.id, state.user); - } - } - return coll; - } - /** - * Get connection to current call - * @type {?VoiceConnection} - * @readonly - */ - get voiceConnection() { - const check = this.client.callVoice?.joinConfig?.channelId == this.id; - if (check) { - return this.client.callVoice; - } - return null; - } - /** - * Get current shard - * @type {WebSocketShard} - * @readonly - */ - get shard() { - return this.client.ws.shards.first(); - } - /** - * The voice state adapter for this client that can be used with @discordjs/voice to play audio in DM / Group DM channels. - * @type {?Function} - * @readonly - */ - get voiceAdapterCreator() { - return methods => { - this.client.voice.adapters.set(this.id, methods); - return { - sendPayload: data => { - if (this.shard.status !== Status.READY) return false; - this.shard.send(data); - return true; - }, - destroy: () => { - this.client.voice.adapters.delete(this.id); - }, - }; - }; - } -} - -TextBasedChannel.applyToClass(PartialGroupDMChannel, true, [ - 'bulkDelete', - 'fetchWebhooks', - 'createWebhook', - 'setRateLimitPerUser', - 'setNSFW', -]); - -module.exports = PartialGroupDMChannel; From 186bb682d81e7336bdabcc9e2519b6a4b3a3b37a Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sun, 7 Jan 2024 20:06:51 +0700 Subject: [PATCH 19/60] Delete VOICE_CHANNEL_EFFECT_SEND.js --- src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.js diff --git a/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.js b/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.js deleted file mode 100644 index e69de29..00000000 From 41ce609791c85a4a9d4728e6fefd16455aa1ae79 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sun, 7 Jan 2024 20:07:19 +0700 Subject: [PATCH 20/60] Delete SOUNDBOARD_SOUNDS.js --- src/client/websocket/handlers/SOUNDBOARD_SOUNDS.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/client/websocket/handlers/SOUNDBOARD_SOUNDS.js diff --git a/src/client/websocket/handlers/SOUNDBOARD_SOUNDS.js b/src/client/websocket/handlers/SOUNDBOARD_SOUNDS.js deleted file mode 100644 index e69de29..00000000 From 8e92d3a444fb41562ef0989c7cc1580195abf4b3 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sun, 7 Jan 2024 20:07:37 +0700 Subject: [PATCH 21/60] remove 3 --- Document/API.md | 93 ------------------------------------ Document/DiscordClientRPC.md | 18 ------- Document/Guild.md | 87 --------------------------------- 3 files changed, 198 deletions(-) delete mode 100644 Document/API.md delete mode 100644 Document/DiscordClientRPC.md delete mode 100644 Document/Guild.md diff --git a/Document/API.md b/Document/API.md deleted file mode 100644 index da72ee4..00000000 --- a/Document/API.md +++ /dev/null @@ -1,93 +0,0 @@ -# Extending Discord.js-selfbot-v13 -> `credit: Discum` - -How to add extra API wraps to Discord.js-selfbot-v13? -# Table of Contents -- [HTTP APIs](#HTTP-APIs) -- [Gateway APIs](#Gateway-APIs) - -### HTTP APIs: - -```js -URL example: -'https://discord.com/api/v9/users/@me' -const url = client.api.users['@me']; -/* Method: GET | POST | PUT | PATCH | DELETE */ -Option: -#1 -query: Object - -- example: https://discord.com/api/v9/users/@me?abc=123&xyz=ok (GET) - -client.api.users['@me'].get({ - query: { - abc: 123, - xyz: 'ok', - } -}); - -#2 - -body + files: Object + Array --> 'content-type': FormData (POST) - -#3 - -data: Object --> 'content-type': 'application/json' - -... - -``` - - -###### GET: -```js -await client.api.users['@me'].get({ versioned: true }); -/* Request: https://discord.com/api/v9/users/@me */ -await client.api.users['@me'].get({ versioned: false }); -/* Request: https://discord.com/api/users/@me */ -``` -###### POST: -```js -await client.api.channels[channel.id].messages.post({ versioned: true, data: {}, files: [] }); -/* Request: https://discord.com/api/v9/channels/{channel.id}/messages */ -``` -###### PUT: -```js -await client.api - .guilds(guild.id) - .bans(user.id) - .put({ - versioned: true, - data: {}, - }); -/* Request: https://discord.com/api/guilds/{guild.id}/bans/{user.id} */ -``` -###### PATCH: -```js -await client.api.users['@me'].patch({ versioned: true, data: {} }); -/* Request: https://discord.com/api/v9/users/@me */ -``` -###### DELETE: -```js -await client.api.hypesquad.online.delete({ versioned: true }); -/* Request: https://discord.com/api/v9/hypesquad/online */ -``` -### Gateway APIs -You need to send data to the port and listen for an event. This is quite complicated but if you want to use an existing event, here are the instructions - -###### SEND: -```js -const { Constants } = require('discord.js-selfbot-v13'); -// Global gateway (example update presence) -client.ws.broadcast({ - op: Constants.Opcodes.STATUS_UPDATE, - d: {}, -}); -// Guild gateway (example get all members) -guild.shard.send({ - op: Constants.Opcodes.REQUEST_GUILD_MEMBERS, - d: {}, -}); -``` \ No newline at end of file diff --git a/Document/DiscordClientRPC.md b/Document/DiscordClientRPC.md deleted file mode 100644 index eeadf37..00000000 --- a/Document/DiscordClientRPC.md +++ /dev/null @@ -1,18 +0,0 @@ -## Discord's local RPC servers (~ discord app) - -```js -const { Client, RichPresence, DiscordRPCServer } = require('discord.js-selfbot-v13'); - -const client = new Client(); - -client.once('ready', async () => { - const server = await new DiscordRPCServer(client, false) - server.on('activity', async data => { - if (!data.activity) return; - const activity = new RichPresence(client, data.activity); - client.user.setActivity(activity); - }); -}); - -client.login('token'); -``` \ No newline at end of file diff --git a/Document/Guild.md b/Document/Guild.md deleted file mode 100644 index 1617e2b..00000000 --- a/Document/Guild.md +++ /dev/null @@ -1,87 +0,0 @@ -# Quick Links: -- [Set Guild Folder and Position](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/Guild.md#discord-guild-set-position) -- [DM group](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/Guild.md#group-dm) -- [Join Guild](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/Guild.md#join-guild-using-invite) -- [Community](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/Guild.md#set-community) - -## Discord Guild set position -
-Click to show - -Code: -```js -guild.setPosition(position, type, folderID); -// Position: The guild's index in the directory or out of the directory -// Type: -// + 'FOLDER': Move guild to folder -// + 'HOME': Move the guild out of the directory -// FolderID: The folder's ID , if you want to move the guild to a folder -``` -Response -```js -Guild {} -``` -
- -## Group DM -
-Click to show - -Code: -```js -/* Create */ -const memberAdd = [ - client.users.cache.get('id1'), - client.users.cache.get('id2'), - ... - client.users.cache.get('id9') -] -// Max member add to Group: 9, Min: 2 -await client.channels.createGroupDM(memberAdd); -/* Edit */ -const groupDM = client.channels.cache.get('id'); -await groupDM.setName('New Name'); -await groupDM.setIcon('iconURL'); -await groupDM.getInvite(); -await groupDM.fetchInvite(); -await groupDM.removeInvite(invite); -await groupDM.addMember(user); -await groupDM.removeMember(user); -/* Text Channel not Bulk delete */ -await groupDM.send('Hello World'); -await groupDM.delete(); // Leave -/* Voice Channel */ -await groupDM.call() -``` - -
- - -## Join Guild using Invite -
-Click to show - -```js -await client.fetchInvite('code').then(async invite => { - await invite.acceptInvite(true); -}); -``` -`invite.acceptInvite(true);` => Auto skip verify screen - - - -But if you are blocked by HCaptcha, this will not work -
- -## Set Community -
-Click to show - -```js -await guild.setCommunity(stats: boolean, publicUpdatesChannel: TextChannelResolvable, rulesChannel: TextChannelResolvable, reason?: string): Promise; -// Enable with default -await guild.setCommunity(true); -// Disable -await guild.setCommunity(false); -``` -
From da9a85d56da0dd0ab1bf17d8ee938a365b9c19cb Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sun, 7 Jan 2024 20:17:21 +0700 Subject: [PATCH 22/60] hmm --- .npmrc | 5 - LICENSE | 805 +++++++++++++++++++++++++++++++++++++++---------- docs/main.json | 1 + package.json | 4 +- 4 files changed, 647 insertions(+), 168 deletions(-) delete mode 100644 .npmrc create mode 100644 docs/main.json diff --git a/.npmrc b/.npmrc deleted file mode 100644 index 91c338d..00000000 --- a/.npmrc +++ /dev/null @@ -1,5 +0,0 @@ -audit=false -fund=false -legacy-peer-deps=true -tag-version-prefix="" -message="chore(Release): %s" diff --git a/LICENSE b/LICENSE index 52b53d4..16a0271 100644 --- a/LICENSE +++ b/LICENSE @@ -1,191 +1,674 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ +GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + Copyright (C) 2022 aiko-chan-ai and discordjs + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. - 1. Definitions. + Preamble - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. + The GNU General Public License is a free, copyleft license for +software and other kinds of works. - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. + 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. - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. + The precise terms and conditions for copying, distribution and +modification follow. - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. + TERMS AND CONDITIONS - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. + 0. Definitions. - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: + "This License" refers to version 3 of the GNU General Public License. - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and + "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. - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and + 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. - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. + A "covered work" means either the unmodified Program or a work based +on the Program. - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. + 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. - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. + 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. - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. + 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. - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. + 1. Source Code. - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. + 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. - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. + 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. - END OF TERMS AND CONDITIONS + 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. - Copyright 2015 - 2021 Noel Buechler - Copyright 2015 - 2021 Amish Shah + 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. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. - http://www.apache.org/licenses/LICENSE-2.0 + The Corresponding Source for a work in source code form is that +same work. - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/docs/main.json b/docs/main.json new file mode 100644 index 00000000..d31ea41 --- /dev/null +++ b/docs/main.json @@ -0,0 +1 @@ +{"meta":{"generator":"0.11.1","format":20,"date":1699882442263},"custom":{"general":{"name":"General","files":{"welcome":{"name":"Welcome","type":"md","content":"
\r\n
\r\n

\r\n \"discord.js\"\r\n

\r\n
\r\n

\r\n \"Discord\r\n \"npm\r\n \"npm\r\n \"Tests\r\n

\r\n
\r\n\r\n## About\r\n\r\nWelcome to `discord.js-selfbot-v13@v2.15`, based on `discord.js@13.17`\r\n\r\n- discord.js-selfbot-v13 is a [Node.js](https://nodejs.org) module that allows user accounts to interact with the Discord API v9.\r\n\r\n\r\n
\r\n

\r\n \"npm\r\n \"npm\r\n \"Tests\r\n

\r\n
\r\n\r\n### I don't take any responsibility for blocked Discord accounts that used this module.\r\n### Using this on a user account is prohibited by the [Discord TOS](https://discord.com/terms) and can lead to the account block.\r\n\r\n## Project Status\r\n\r\n`discord.js-selfbot-v13` is currently in maintenance mode. New features are not actively being added but existing features and new versions of discord are supported as possible. There are some major architectural changes which need to be added to improve the stability and security of the project. I don't have as much spare time as I did when I started this project, so there is not currently any plan for these improvements.\r\n\r\n### [Document Website (recommend)](https://discordjs-self-v13.netlify.app/)\r\n\r\n### [Extend Document (With Example)](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/tree/main/Document)\r\n\r\n## Features (User)\r\n- [x] Message: Embeds (WebEmbed)\r\n- [x] User: Settings, Status, Activity, DeveloperPortal, RemoteAuth, etc.\r\n- [X] Guild: Fetch Members, Join / Leave, Top emojis, ...\r\n- [X] Interactions: Slash Commands, Click Buttons, Menu, Modal, Context Menu, ...\r\n- [X] Captcha Handler (2captcha, capmonster, custom)\r\n- [X] Documentation\r\n- [x] Voice & [Video stream](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/issues/293)\r\n- [ ] Everything\r\n\r\n### Optional packages\r\n\r\n- [2captcha](https://www.npmjs.com/package/2captcha) for solving captcha (`npm install 2captcha`)\r\n- [node-capmonster](https://www.npmjs.com/package/node-capmonster) for solving captcha (`npm install node-capmonster`)\r\n\r\n## Installation\r\n\r\n**Node.js 16.6.0 or newer is required**\r\n\r\n> Recommended Node.js version: 18 (LTS)\r\n\r\n```sh-session\r\nnpm install discord.js-selfbot-v13@latest\r\n```\r\n\r\n## Example\r\n\r\n```js\r\nconst { Client } = require('discord.js-selfbot-v13');\r\nconst client = new Client({\r\n\t// See other options here\r\n\t// https://discordjs-self-v13.netlify.app/#/docs/docs/main/typedef/ClientOptions\r\n\t// All partials are loaded automatically\r\n});\r\n\r\nclient.on('ready', async () => {\r\n console.log(`${client.user.username} is ready!`);\r\n})\r\n\r\nclient.login('token');\r\n```\r\n\r\n## Get Token ?\r\n\r\nRun code (Discord Console - [Ctrl + Shift + I])\r\n\r\n```js\r\nwindow.webpackChunkdiscord_app.push([\r\n [Math.random()],\r\n {},\r\n req => {\r\n for (const m of Object.keys(req.c)\r\n .map(x => req.c[x].exports)\r\n .filter(x => x)) {\r\n if (m.default && m.default.getToken !== undefined) {\r\n return copy(m.default.getToken());\r\n }\r\n if (m.getToken !== undefined) {\r\n return copy(m.getToken());\r\n }\r\n }\r\n },\r\n]);\r\nconsole.log('%cWorked!', 'font-size: 50px');\r\nconsole.log(`%cYou now have your token in the clipboard!`, 'font-size: 16px');\r\n```\r\n\r\nCredit: \".\" [hxr404](https://github.com/hxr404/Discord-Console-hacks)\r\n\r\n\r\n## Contributing\r\n\r\n- Before creating an issue, please ensure that it hasn't already been reported/suggested, and double-check the\r\n[documentation](https://discord.js.org/#/docs). \r\n- See [the contribution guide](https://github.com/discordjs/discord.js/blob/main/.github/CONTRIBUTING.md) if you'd like to submit a PR.\r\n\r\n## Need help?\r\nGithub Discussion: [Here](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/discussions)\r\n\r\n## Credits\r\n- [Discord.js](https://github.com/discordjs/discord.js)\r\n\r\n## \".\" Other project(s)\r\n\r\n- 📘 [***aiko-chan-ai/DiscordBotClient***](https://github.com/aiko-chan-ai/DiscordBotClient)
\r\n A patched version of discord, with bot login support\r\n- 📕 [***aiko-chan-ai/Discord-Markdown***](https://github.com/aiko-chan-ai/Discord-Markdown)
\r\n Better Markdown to text chat Discord.\r\n- 📗 ...\r\n\r\n## Star History\r\n\r\n[![Star History Chart](https://api.star-history.com/svg?repos=aiko-chan-ai/discord.js-selfbot-v13&type=Date)](https://star-history.com/#aiko-chan-ai/discord.js-selfbot-v13&Date)\r\n\r\n\r\n# From Github with love 💕","path":"README.md"}}}},"classes":[{"name":"BaseClient","description":"The base class for all clients.","extends":[[["EventEmitter"]]],"props":[{"name":"options","description":"The options the client was instantiated with","type":[[["ClientOptions"]]],"meta":{"line":26,"file":"BaseClient.js","path":"src/client"}},{"name":"rest","description":"The REST manager of the client","access":"private","type":[[["RESTManager"]]],"meta":{"line":33,"file":"BaseClient.js","path":"src/client"}},{"name":"api","description":"API shortcut","access":"private","readonly":true,"type":[[["Object"]]],"meta":{"line":42,"file":"BaseClient.js","path":"src/client"}}],"methods":[{"name":"destroy","description":"Destroys all assets used by the base client.","returns":[[["void"]]],"meta":{"line":50,"file":"BaseClient.js","path":"src/client"}},{"name":"incrementMaxListeners","description":"Increments max listeners by one, if they are not zero.","access":"private","meta":{"line":58,"file":"BaseClient.js","path":"src/client"}},{"name":"decrementMaxListeners","description":"Decrements max listeners by one, if they are not zero.","access":"private","meta":{"line":69,"file":"BaseClient.js","path":"src/client"}}],"events":[{"name":"debug","description":"Emitted for general debugging information.","params":[{"name":"info","description":"The debug information","type":[[["string"]]]}],"meta":{"line":83,"file":"BaseClient.js","path":"src/client"}},{"name":"rateLimit","description":"Emitted when the client hits a rate limit while making a request","params":[{"name":"rateLimitData","description":"Object containing the rate limit info","type":[[["RateLimitData"]]]}],"meta":{"line":137,"file":"RequestHandler.js","path":"src/rest"}},{"name":"apiRequest","description":"Emitted before every API request.\nThis event can emit several times for the same request, e.g. when hitting a rate limit.\nThis is an informational event that is emitted quite frequently,\nit is highly recommended to check `request.path` to filter the data.","params":[{"name":"request","description":"The request that is about to be sent","type":[[["APIRequest"]]]}],"meta":{"line":188,"file":"RequestHandler.js","path":"src/rest"}},{"name":"apiResponse","description":"Emitted after every API request has received a response.\nThis event does not necessarily correlate to completion of the request, e.g. when hitting a rate limit.\nThis is an informational event that is emitted quite frequently,\nit is highly recommended to check `request.path` to filter the data.","params":[{"name":"request","description":"The request that triggered this response","type":[[["APIRequest"]]]},{"name":"response","description":"The response received from the Discord API","type":[[["Response"]]]}],"meta":{"line":220,"file":"RequestHandler.js","path":"src/rest"}},{"name":"invalidRequestWarning","description":"Emitted periodically when the process sends invalid requests to let users avoid the\n10k invalid requests in 10 minutes threshold that causes a ban","params":[{"name":"invalidRequestWarningData","description":"Object containing the invalid request info","type":[[["InvalidRequestWarningData"]]]}],"meta":{"line":297,"file":"RequestHandler.js","path":"src/rest"}}],"meta":{"line":13,"file":"BaseClient.js","path":"src/client"}},{"name":"Client","description":"The main hub for interacting with the Discord API, and the starting point for any bot.","extends":[[["BaseClient"]]],"construct":{"name":"Client","params":[{"name":"options","description":"Options for the client","type":[[["ClientOptions"]]]}]},"props":[{"name":"_cleanups","description":"Functions called when a cache is garbage collected or the Client is destroyed","access":"private","type":[[["Set","<"],["function","()>"]]],"meta":{"line":96,"file":"Client.js","path":"src/client"}},{"name":"_finalizers","description":"The finalizers used to cleanup items.","access":"private","type":[[["FinalizationRegistry"]]],"meta":{"line":103,"file":"Client.js","path":"src/client"}},{"name":"ws","description":"The WebSocket manager of the client","type":[[["WebSocketManager"]]],"meta":{"line":109,"file":"Client.js","path":"src/client"}},{"name":"actions","description":"The action manager of the client","access":"private","type":[[["ActionsManager"]]],"meta":{"line":116,"file":"Client.js","path":"src/client"}},{"name":"voice","description":"The voice manager of the client","type":[[["ClientVoiceManager"]]],"meta":{"line":122,"file":"Client.js","path":"src/client"}},{"name":"voiceStates","description":"A manager of the voice states of this client (Support DM / Group DM)","type":[[["VoiceStateManager"]]],"meta":{"line":128,"file":"Client.js","path":"src/client"}},{"name":"shard","description":"Shard helpers for the client (only if the process was spawned from a {@link ShardingManager})","nullable":true,"type":[[["ShardClientUtil"]]],"meta":{"line":134,"file":"Client.js","path":"src/client"}},{"name":"users","description":"All of the {@link User} objects that have been cached at any point, mapped by their ids","type":[[["UserManager"]]],"meta":{"line":142,"file":"Client.js","path":"src/client"}},{"name":"relationships","description":"All of the relationships {@link User}","type":[[["RelationshipManager"]]],"meta":{"line":149,"file":"Client.js","path":"src/client"}},{"name":"settings","description":"All of the settings {@link Object}","type":[[["ClientUserSettingManager"]]],"meta":{"line":154,"file":"Client.js","path":"src/client"}},{"name":"guilds","description":"All of the guilds the client is currently handling, mapped by their ids -\nas long as sharding isn't being used, this will be *every* guild the bot is a member of","type":[[["GuildManager"]]],"meta":{"line":160,"file":"Client.js","path":"src/client"}},{"name":"billing","description":"Manages the API methods","type":[[["BillingManager"]]],"meta":{"line":166,"file":"Client.js","path":"src/client"}},{"name":"sessions","description":"All of the sessions of the client","type":[[["SessionManager"]]],"meta":{"line":172,"file":"Client.js","path":"src/client"}},{"name":"channels","description":"All of the {@link Channel}s that the client is currently handling, mapped by their ids -\nas long as sharding isn't being used, this will be *every* channel in *every* guild the bot\nis a member of. Note that DM channels will not be initially cached, and thus not be present\nin the Manager without their explicit fetching or use.","type":[[["ChannelManager"]]],"meta":{"line":181,"file":"Client.js","path":"src/client"}},{"name":"sweepers","description":"The sweeping functions and their intervals used to periodically sweep caches","type":[[["Sweepers"]]],"meta":{"line":187,"file":"Client.js","path":"src/client"}},{"name":"developerPortal","description":"The developer portal manager of the client","type":[[["DeveloperPortalManager"]]],"meta":{"line":193,"file":"Client.js","path":"src/client"}},{"name":"presence","description":"The presence of the Client","access":"private","type":[[["ClientPresence"]]],"meta":{"line":200,"file":"Client.js","path":"src/client"}},{"name":"token","description":"Authorization token for the logged in bot.\nIf present, this defaults to `process.env.DISCORD_TOKEN` when instantiating the client\nThis should be kept private at all times.","nullable":true,"type":[[["string"]]],"meta":{"line":210,"file":"Client.js","path":"src/client"}},{"name":"user","description":"User that the client is logged in as","nullable":true,"type":[[["ClientUser"]]],"meta":{"line":221,"file":"Client.js","path":"src/client"}},{"name":"application","description":"The application of this bot","nullable":true,"type":[[["ClientApplication"]]],"meta":{"line":227,"file":"Client.js","path":"src/client"}},{"name":"readyAt","description":"Time at which the client was last regarded as being in the `READY` state\n(each time the client disconnects and successfully reconnects, this will be overwritten)","nullable":true,"type":[[["Date"]]],"meta":{"line":234,"file":"Client.js","path":"src/client"}},{"name":"password","description":"Password cache","nullable":true,"type":[[["string"]]],"meta":{"line":240,"file":"Client.js","path":"src/client"}},{"name":"sessionId","description":"Session ID","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":259,"file":"Client.js","path":"src/client"}},{"name":"emojis","description":"All custom emojis that the client has access to, mapped by their ids","readonly":true,"type":[[["BaseGuildEmojiManager"]]],"meta":{"line":268,"file":"Client.js","path":"src/client"}},{"name":"readyTimestamp","description":"Timestamp of the time the client was last `READY` at","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":281,"file":"Client.js","path":"src/client"}},{"name":"uptime","description":"How long it has been since the client last entered the `READY` state in milliseconds","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":290,"file":"Client.js","path":"src/client"}},{"name":"callVoice","description":"Get connection to current call","readonly":true,"nullable":true,"type":[[["VoiceConnection"]]],"meta":{"line":303,"file":"Client.js","path":"src/client"}},{"name":"options","description":"The options the client was instantiated with","type":[[["ClientOptions"]]],"meta":{"line":26,"file":"BaseClient.js","path":"src/client"}},{"name":"rest","description":"The REST manager of the client","access":"private","type":[[["RESTManager"]]],"meta":{"line":33,"file":"BaseClient.js","path":"src/client"}},{"name":"api","description":"API shortcut","access":"private","readonly":true,"type":[[["Object"]]],"meta":{"line":42,"file":"BaseClient.js","path":"src/client"}}],"methods":[{"name":"login","description":"Logs the client in, establishing a WebSocket connection to Discord.","examples":["client.login('my token');"],"params":[{"name":"token","description":"Token of the account to log in with","optional":true,"default":"this.token","type":[[["string"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["string",">"]]],"description":"Token of the account used"},"meta":{"line":314,"file":"Client.js","path":"src/client"}},{"name":"normalLogin","description":"Login Discord with Username and Password","params":[{"name":"username","description":"Email or Phone Number","type":[[["string"]]]},{"name":"password","description":"Password","nullable":true,"type":[[["string"]]]},{"name":"mfaCode","description":"2FA Code / Backup Code","nullable":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["string",">"]]],"meta":{"line":356,"file":"Client.js","path":"src/client"}},{"name":"switchUser","description":"Switch the user","params":[{"name":"token","description":"User Token","type":[[["string"]]]}],"returns":[[["Promise","<"],["string",">"]]],"meta":{"line":411,"file":"Client.js","path":"src/client"}},{"name":"QRLogin","description":"Sign in with the QR code on your phone.","examples":["client.QRLogin();"],"params":[{"name":"options","description":"Options","type":[[["DiscordAuthWebsocketOptions"]]]}],"returns":[[["DiscordAuthWebsocket"]]],"meta":{"line":430,"file":"Client.js","path":"src/client"}},{"name":"remoteAuth","description":"Implement `remoteAuth`, like using your phone to scan a QR code","params":[{"name":"url","description":"URL from QR code","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":441,"file":"Client.js","path":"src/client"}},{"name":"createToken","description":"Create a new token based on the current token","returns":{"types":[[["Promise","<"],["string",">"]]],"description":"New Discord Token"},"meta":{"line":470,"file":"Client.js","path":"src/client"}},{"name":"checkUpdate","description":"Check for updates","async":true,"returns":[[["Promise","<"],["Client",">"]]],"meta":{"line":508,"file":"Client.js","path":"src/client"}},{"name":"isReady","description":"Returns whether the client has logged in, indicative of being able to access\nproperties such as `user` and `application`.","returns":[[["boolean"]]],"meta":{"line":528,"file":"Client.js","path":"src/client"}},{"name":"destroy","description":"Logs out, terminates the connection to Discord, and destroys the client.","returns":[[["void"]]],"meta":{"line":536,"file":"Client.js","path":"src/client"}},{"name":"logout","description":"Logs out, terminates the connection to Discord, destroys the client and destroys the token.","async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":554,"file":"Client.js","path":"src/client"}},{"name":"fetchInvite","description":"Obtains an invite from Discord.","examples":["client.fetchInvite('https://discord.gg/djs')\n .then(invite => console.log(`Obtained invite with code: ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"invite","description":"Invite code or URL","type":[[["InviteResolvable"]]]},{"name":"options","description":"Options for fetching the invite","optional":true,"type":[[["ClientFetchInviteOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":581,"file":"Client.js","path":"src/client"}},{"name":"acceptInvite","description":"Join this Guild using this invite (fast)","examples":["await client.acceptInvite('https://discord.gg/genshinimpact')"],"params":[{"name":"invite","description":"Invite code or URL","type":[[["InviteResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":596,"file":"Client.js","path":"src/client"}},{"name":"redeemNitro","description":"Redeem nitro from code or url.","params":[{"name":"nitro","description":"Nitro url or code","type":[[["string"]]]},{"name":"channel","description":"Channel that the code was sent in","type":[[["TextChannelResolvable"]]]},{"name":"paymentSourceId","description":"Payment source id","optional":true,"type":[[["Snowflake"]]]}],"returns":[[["Promise","<"],["any",">"]]],"meta":{"line":620,"file":"Client.js","path":"src/client"}},{"name":"fetchGuildTemplate","description":"Obtains a template from Discord.","examples":["client.fetchGuildTemplate('https://discord.new/FKvmczH2HyUf')\n .then(template => console.log(`Obtained template with code: ${template.code}`))\n .catch(console.error);"],"params":[{"name":"template","description":"Template code or URL","type":[[["GuildTemplateResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["GuildTemplate",">"]]],"meta":{"line":643,"file":"Client.js","path":"src/client"}},{"name":"fetchWebhook","description":"Obtains a webhook from Discord.","examples":["client.fetchWebhook('id', 'token')\n .then(webhook => console.log(`Obtained webhook with name: ${webhook.name}`))\n .catch(console.error);"],"params":[{"name":"id","description":"The webhook's id","type":[[["Snowflake"]]]},{"name":"token","description":"Token for the webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Webhook",">"]]],"meta":{"line":659,"file":"Client.js","path":"src/client"}},{"name":"fetchVoiceRegions","description":"Obtains the available voice regions from Discord.","examples":["client.fetchVoiceRegions()\n .then(regions => console.log(`Available regions are: ${regions.map(region => region.name).join(', ')}`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Collection","<"],["string",", "],["VoiceRegion",">>"]]],"meta":{"line":672,"file":"Client.js","path":"src/client"}},{"name":"fetchSticker","description":"Obtains a sticker from Discord.","examples":["client.fetchSticker('id')\n .then(sticker => console.log(`Obtained sticker with name: ${sticker.name}`))\n .catch(console.error);"],"params":[{"name":"id","description":"The sticker's id","type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["Sticker",">"]]],"meta":{"line":688,"file":"Client.js","path":"src/client"}},{"name":"fetchPremiumStickerPacks","description":"Obtains the list of sticker packs available to Nitro subscribers from Discord.","examples":["client.fetchPremiumStickerPacks()\n .then(packs => console.log(`Available sticker packs are: ${packs.map(pack => pack.name).join(', ')}`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["StickerPack",">>"]]],"meta":{"line":701,"file":"Client.js","path":"src/client"}},{"name":"_finalize","description":"A last ditch cleanup function for garbage collection.","access":"private","params":[{"name":"options.cleanup","description":"The function called to GC","type":[[["function"]]]},{"name":"options.message","description":"The message to send after a successful GC","optional":true,"type":[[["string"]]]},{"name":"options.name","description":"The name of the item being GCed","optional":true,"type":[[["string"]]]}],"meta":{"line":712,"file":"Client.js","path":"src/client"}},{"name":"_clearCache","description":"Clear a cache","access":"private","params":[{"name":"cache","description":"The cache to clear","type":[[["Collection"]]]}],"returns":{"types":[[["number"]]],"description":"The number of removed entries"},"meta":{"line":730,"file":"Client.js","path":"src/client"}},{"name":"sweepMessages","description":"Sweeps all text-based channels' messages and removes the ones older than the max message lifetime.\nIf the message has been edited, the time of the edit is used rather than the time of the original message.","examples":["// Remove all messages older than 1800 seconds from the messages cache\nconst amount = client.sweepMessages(1800);\nconsole.log(`Successfully removed ${amount} messages from the cache.`);"],"params":[{"name":"lifetime","description":"Messages that are older than this (in seconds)\nwill be removed from the caches. The default is based on {@link ClientOptions#messageCacheLifetime}","optional":true,"default":"this.options.messageCacheLifetime","type":[[["number"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of messages that were removed from the caches,\nor -1 if the message cache lifetime is unlimited"},"meta":{"line":746,"file":"Client.js","path":"src/client"}},{"name":"fetchGuildPreview","description":"Obtains a guild preview from Discord, available for all guilds the bot is in and all Discoverable guilds.","params":[{"name":"guild","description":"The guild to fetch the preview for","type":[[["GuildResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["GuildPreview",">"]]],"meta":{"line":765,"file":"Client.js","path":"src/client"}},{"name":"fetchGuildWidget","description":"Obtains the widget data of a guild from Discord, available for guilds with the widget enabled.","params":[{"name":"guild","description":"The guild to fetch the widget data for","type":[[["GuildResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["Widget",">"]]],"meta":{"line":777,"file":"Client.js","path":"src/client"}},{"name":"generateInvite","description":"Generates a link that can be used to invite the bot to a guild.","examples":["const link = client.generateInvite({\n scopes: ['applications.commands'],\n});\nconsole.log(`Generated application invite link: ${link}`);","const link = client.generateInvite({\n permissions: [\n Permissions.FLAGS.SEND_MESSAGES,\n Permissions.FLAGS.MANAGE_GUILD,\n Permissions.FLAGS.MENTION_EVERYONE,\n ],\n scopes: ['bot'],\n});\nconsole.log(`Generated bot invite link: ${link}`);"],"params":[{"name":"options","description":"Options for the invite","optional":true,"default":"{}","type":[[["InviteGenerationOptions"]]]}],"returns":[[["string"]]],"meta":{"line":813,"file":"Client.js","path":"src/client"}},{"name":"_eval","description":"Calls {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval} on a script\nwith the client as `this`.","access":"private","params":[{"name":"script","description":"Script to eval","type":[[["string"]]]}],"returns":[["*"]],"meta":{"line":868,"file":"Client.js","path":"src/client"}},{"name":"customStatusAuto","description":"Sets the client's presence. (Sync Setting).","access":"private","params":[{"name":"client","description":"Discord Client","type":[[["Client"]]]}],"meta":{"line":877,"file":"Client.js","path":"src/client"}},{"name":"authorizeURL","description":"Authorize an application.","examples":["client.authorizeURL(`https://discord.com/api/oauth2/authorize?client_id=botID&permissions=8&scope=applications.commands%20bot`, {\n guild_id: \"guildID\",\n permissions: \"62221393\", // your permissions\n authorize: true\n })"],"params":[{"name":"url","description":"Discord Auth URL","type":[[["string"]]]},{"name":"options","description":"Oauth2 options","type":[[["OAuth2AuthorizeOptions"]]]}],"returns":[[["Promise","<"],["Object",">"]]],"meta":{"line":920,"file":"Client.js","path":"src/client"}},{"name":"sleep","description":"Makes waiting time for Client.","params":[{"name":"miliseconds","description":"Sleeping time as milliseconds.","type":[[["number"]]]}],"returns":[[["Promise","<"],["void",">"]],[["null"]]],"meta":{"line":944,"file":"Client.js","path":"src/client"}},{"name":"_validateOptions","description":"Validates the client options.","access":"private","params":[{"name":"options","description":"Options to validate","optional":true,"default":"this.options","type":[[["ClientOptions"]]]}],"meta":{"line":953,"file":"Client.js","path":"src/client"}},{"name":"incrementMaxListeners","description":"Increments max listeners by one, if they are not zero.","access":"private","inherits":"BaseClient#incrementMaxListeners","inherited":true,"meta":{"line":58,"file":"BaseClient.js","path":"src/client"}},{"name":"decrementMaxListeners","description":"Decrements max listeners by one, if they are not zero.","access":"private","inherits":"BaseClient#decrementMaxListeners","inherited":true,"meta":{"line":69,"file":"BaseClient.js","path":"src/client"}}],"events":[{"name":"applicationCommandPermissionsUpdate","description":"Emitted whenever permissions for an application command in a guild were updated.\nThis includes permission updates for other applications in addition to the logged in client,\ncheck `data.applicationId` to verify which application the update is for","params":[{"name":"data","description":"The updated permissions","type":[[["ApplicationCommandPermissionsUpdateData"]]]}],"meta":{"line":18,"file":"ApplicationCommandPermissionsUpdate.js","path":"src/client/actions"}},{"name":"autoModerationActionExecution","description":"Emitted whenever an auto moderation rule is triggered.\nThis event requires the {@link Permissions.FLAGS.MANAGE_GUILD} permission.","params":[{"name":"autoModerationActionExecution","description":"The data of the execution","type":[[["AutoModerationActionExecution"]]]}],"meta":{"line":13,"file":"AutoModerationActionExecution.js","path":"src/client/actions"}},{"name":"autoModerationRuleCreate","description":"Emitted whenever an auto moderation rule is created.\nThis event requires the {@link Permissions.FLAGS.MANAGE_GUILD} permission.","params":[{"name":"autoModerationRule","description":"The created auto moderation rule","type":[[["AutoModerationRule"]]]}],"meta":{"line":14,"file":"AutoModerationRuleCreate.js","path":"src/client/actions"}},{"name":"autoModerationRuleDelete","description":"Emitted whenever an auto moderation rule is deleted.\nThis event requires the {@link Permissions.FLAGS.MANAGE_GUILD} permission.","params":[{"name":"autoModerationRule","description":"The deleted auto moderation rule","type":[[["AutoModerationRule"]]]}],"meta":{"line":17,"file":"AutoModerationRuleDelete.js","path":"src/client/actions"}},{"name":"autoModerationRuleUpdate","description":"Emitted whenever an auto moderation rule gets updated.\nThis event requires the {@link Permissions.FLAGS.MANAGE_GUILD} permission.","params":[{"name":"oldAutoModerationRule","description":"The auto moderation rule before the update","nullable":true,"type":[[["AutoModerationRule"]]]},{"name":"newAutoModerationRule","description":"The auto moderation rule after the update","type":[[["AutoModerationRule"]]]}],"meta":{"line":15,"file":"AutoModerationRuleUpdate.js","path":"src/client/actions"}},{"name":"channelCreate","description":"Emitted whenever a guild channel is created.","params":[{"name":"channel","description":"The channel that was created","type":[[["GuildChannel"]]]}],"meta":{"line":12,"file":"ChannelCreate.js","path":"src/client/actions"}},{"name":"channelDelete","description":"Emitted whenever a channel is deleted.","params":[{"name":"channel","description":"The channel that was deleted","type":[[["DMChannel"]],[["GuildChannel"]]]}],"meta":{"line":27,"file":"ChannelDelete.js","path":"src/client/actions"}},{"name":"guildAuditLogEntryCreate","description":"Emitted whenever a guild audit log entry is created.","params":[{"name":"auditLogEntry","description":"The entry that was created","type":[[["GuildAuditLogsEntry"]]]},{"name":"guild","description":"The guild where the entry was created","type":[[["Guild"]]]}],"meta":{"line":16,"file":"GuildAuditLogEntryCreate.js","path":"src/client/actions"}},{"name":"guildBanAdd","description":"Emitted whenever a member is banned from a guild.","params":[{"name":"ban","description":"The ban that occurred","type":[[["GuildBan"]]]}],"meta":{"line":11,"file":"GuildBanAdd.js","path":"src/client/actions"}},{"name":"guildBanRemove","description":"Emitted whenever a member is unbanned from a guild.","params":[{"name":"ban","description":"The ban that was removed","type":[[["GuildBan"]]]}],"meta":{"line":12,"file":"GuildBanRemove.js","path":"src/client/actions"}},{"name":"guildUnavailable","description":"Emitted whenever a guild becomes unavailable, likely due to a server outage.","params":[{"name":"guild","description":"The guild that has become unavailable","type":[[["Guild"]]]}],"meta":{"line":23,"file":"GuildDelete.js","path":"src/client/actions"}},{"name":"guildDelete","description":"Emitted whenever a guild kicks the client or the guild is deleted/left.","params":[{"name":"guild","description":"The guild that was deleted","type":[[["Guild"]]]}],"meta":{"line":44,"file":"GuildDelete.js","path":"src/client/actions"}},{"name":"emojiCreate","description":"Emitted whenever a custom emoji is created in a guild.","params":[{"name":"emoji","description":"The emoji that was created","type":[[["GuildEmoji"]]]}],"meta":{"line":10,"file":"GuildEmojiCreate.js","path":"src/client/actions"}},{"name":"emojiDelete","description":"Emitted whenever a custom emoji is deleted in a guild.","params":[{"name":"emoji","description":"The emoji that was deleted","type":[[["GuildEmoji"]]]}],"meta":{"line":11,"file":"GuildEmojiDelete.js","path":"src/client/actions"}},{"name":"emojiUpdate","description":"Emitted whenever a custom emoji is updated in a guild.","params":[{"name":"oldEmoji","description":"The old emoji","type":[[["GuildEmoji"]]]},{"name":"newEmoji","description":"The new emoji","type":[[["GuildEmoji"]]]}],"meta":{"line":9,"file":"GuildEmojiUpdate.js","path":"src/client/actions"}},{"name":"guildIntegrationsUpdate","description":"Emitted whenever a guild integration is updated","params":[{"name":"guild","description":"The guild whose integrations were updated","type":[[["Guild"]]]}],"meta":{"line":10,"file":"GuildIntegrationsUpdate.js","path":"src/client/actions"}},{"name":"guildMemberRemove","description":"Emitted whenever a member leaves a guild, or is kicked.","deprecated":"See {@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/issues/197 this issue} for more information.","params":[{"name":"member","description":"The member that has left/been kicked from the guild","type":[[["GuildMember"]]]}],"meta":{"line":18,"file":"GuildMemberRemove.js","path":"src/client/actions"}},{"name":"guildMemberUpdate","description":"Emitted whenever a guild member changes - i.e. new role, removed role, nickname.","deprecated":"See {@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/issues/197 this issue} for more information.","params":[{"name":"oldMember","description":"The member before the update","type":[[["GuildMember"]]]},{"name":"newMember","description":"The member after the update","type":[[["GuildMember"]]]}],"meta":{"line":23,"file":"GuildMemberUpdate.js","path":"src/client/actions"}},{"name":"guildMemberAvailable","description":"Emitted whenever a member becomes available.","params":[{"name":"member","description":"The member that became available","type":[[["GuildMember"]]]}],"meta":{"line":33,"file":"GuildMemberUpdate.js","path":"src/client/actions"}},{"name":"roleCreate","description":"Emitted whenever a role is created.","params":[{"name":"role","description":"The role that was created","type":[[["Role"]]]}],"meta":{"line":14,"file":"GuildRoleCreate.js","path":"src/client/actions"}},{"name":"roleDelete","description":"Emitted whenever a guild role is deleted.","params":[{"name":"role","description":"The role that was deleted","type":[[["Role"]]]}],"meta":{"line":18,"file":"GuildRoleDelete.js","path":"src/client/actions"}},{"name":"roleUpdate","description":"Emitted whenever a guild role is updated.","params":[{"name":"oldRole","description":"The role before the update","type":[[["Role"]]]},{"name":"newRole","description":"The role after the update","type":[[["Role"]]]}],"meta":{"line":17,"file":"GuildRoleUpdate.js","path":"src/client/actions"}},{"name":"guildScheduledEventCreate","description":"Emitted whenever a guild scheduled event is created.","params":[{"name":"guildScheduledEvent","description":"The created guild scheduled event","type":[[["GuildScheduledEvent"]]]}],"meta":{"line":13,"file":"GuildScheduledEventCreate.js","path":"src/client/actions"}},{"name":"guildScheduledEventDelete","description":"Emitted whenever a guild scheduled event is deleted.","params":[{"name":"guildScheduledEvent","description":"The deleted guild scheduled event","type":[[["GuildScheduledEvent"]]]}],"meta":{"line":16,"file":"GuildScheduledEventDelete.js","path":"src/client/actions"}},{"name":"guildScheduledEventUpdate","description":"Emitted whenever a guild scheduled event gets updated.","params":[{"name":"oldGuildScheduledEvent","description":"The guild scheduled event object before the update","nullable":true,"type":[[["GuildScheduledEvent"]]]},{"name":"newGuildScheduledEvent","description":"The guild scheduled event object after the update","type":[[["GuildScheduledEvent"]]]}],"meta":{"line":15,"file":"GuildScheduledEventUpdate.js","path":"src/client/actions"}},{"name":"guildScheduledEventUserAdd","description":"Emitted whenever a user subscribes to a guild scheduled event","params":[{"name":"guildScheduledEvent","description":"The guild scheduled event","type":[[["GuildScheduledEvent"]]]},{"name":"user","description":"The user who subscribed","type":[[["User"]]]}],"meta":{"line":16,"file":"GuildScheduledEventUserAdd.js","path":"src/client/actions"}},{"name":"guildScheduledEventUserRemove","description":"Emitted whenever a user unsubscribes from a guild scheduled event","params":[{"name":"guildScheduledEvent","description":"The guild scheduled event","type":[[["GuildScheduledEvent"]]]},{"name":"user","description":"The user who unsubscribed","type":[[["User"]]]}],"meta":{"line":16,"file":"GuildScheduledEventUserRemove.js","path":"src/client/actions"}},{"name":"stickerCreate","description":"Emitted whenever a custom sticker is created in a guild.","params":[{"name":"sticker","description":"The sticker that was created","type":[[["Sticker"]]]}],"meta":{"line":10,"file":"GuildStickerCreate.js","path":"src/client/actions"}},{"name":"stickerDelete","description":"Emitted whenever a custom sticker is deleted in a guild.","params":[{"name":"sticker","description":"The sticker that was deleted","type":[[["Sticker"]]]}],"meta":{"line":11,"file":"GuildStickerDelete.js","path":"src/client/actions"}},{"name":"stickerUpdate","description":"Emitted whenever a custom sticker is updated in a guild.","params":[{"name":"oldSticker","description":"The old sticker","type":[[["Sticker"]]]},{"name":"newSticker","description":"The new sticker","type":[[["Sticker"]]]}],"meta":{"line":9,"file":"GuildStickerUpdate.js","path":"src/client/actions"}},{"name":"guildUpdate","description":"Emitted whenever a guild is updated - e.g. name change.","params":[{"name":"oldGuild","description":"The guild before the update","type":[[["Guild"]]]},{"name":"newGuild","description":"The guild after the update","type":[[["Guild"]]]}],"meta":{"line":13,"file":"GuildUpdate.js","path":"src/client/actions"}},{"name":"interactionCreate","description":"Emitted when an interaction is created.","params":[{"name":"interaction","description":"The interaction which was created.","type":[[["InteractionResponseBody"]],[["Interaction"]]]}],"meta":{"line":95,"file":"InteractionCreate.js","path":"src/client/actions"}},{"name":"interaction","description":"Emitted when an interaction is created.","deprecated":"Use {@link Client#event:interactionCreate} instead","params":[{"name":"interaction","description":"The interaction which was created","type":[[["Interaction"]]]}],"meta":{"line":102,"file":"InteractionCreate.js","path":"src/client/actions"}},{"name":"inviteCreate","description":"Emitted when an invite is created.\n This event only triggers if the client has `MANAGE_GUILD` permissions for the guild,\nor `MANAGE_CHANNELS` permissions for the channel.","params":[{"name":"invite","description":"The invite that was created","type":[[["Invite"]]]}],"meta":{"line":16,"file":"InviteCreate.js","path":"src/client/actions"}},{"name":"inviteDelete","description":"Emitted when an invite is deleted.\n This event only triggers if the client has `MANAGE_GUILD` permissions for the guild,\nor `MANAGE_CHANNELS` permissions for the channel.","params":[{"name":"invite","description":"The invite that was deleted","type":[[["Invite"]]]}],"meta":{"line":18,"file":"InviteDelete.js","path":"src/client/actions"}},{"name":"messageCreate","description":"Emitted whenever a message is created.","params":[{"name":"message","description":"The created message","type":[[["Message"]]]}],"meta":{"line":36,"file":"MessageCreate.js","path":"src/client/actions"}},{"name":"message","description":"Emitted whenever a message is created.","deprecated":"Use {@link Client#event:messageCreate} instead","params":[{"name":"message","description":"The created message","type":[[["Message"]]]}],"meta":{"line":43,"file":"MessageCreate.js","path":"src/client/actions"}},{"name":"messageDelete","description":"Emitted whenever a message is deleted.","params":[{"name":"message","description":"The deleted message","type":[[["Message"]]]}],"meta":{"line":19,"file":"MessageDelete.js","path":"src/client/actions"}},{"name":"messageDeleteBulk","description":"Emitted whenever messages are deleted in bulk.","params":[{"name":"messages","description":"The deleted messages, mapped by their id","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]]]}],"meta":{"line":34,"file":"MessageDeleteBulk.js","path":"src/client/actions"}},{"name":"messageReactionAdd","description":"Emitted whenever a reaction is added to a cached message.","params":[{"name":"messageReaction","description":"The reaction object","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that applied the guild or reaction emoji","type":[[["User"]]]}],"meta":{"line":44,"file":"MessageReactionAdd.js","path":"src/client/actions"}},{"name":"messageReactionRemove","description":"Emitted whenever a reaction is removed from a cached message.","params":[{"name":"messageReaction","description":"The reaction object","type":[[["MessageReaction"]]]},{"name":"user","description":"The user whose emoji or reaction emoji was removed","type":[[["User"]]]}],"meta":{"line":33,"file":"MessageReactionRemove.js","path":"src/client/actions"}},{"name":"messageReactionRemoveAll","description":"Emitted whenever all reactions are removed from a cached message.","params":[{"name":"message","description":"The message the reactions were removed from","type":[[["Message"]]]},{"name":"reactions","description":"The cached message reactions that were removed.","type":[[["Collection","<("],["string","|"],["Snowflake","), "],["MessageReaction",">"]]]}],"meta":{"line":26,"file":"MessageReactionRemoveAll.js","path":"src/client/actions"}},{"name":"messageReactionRemoveEmoji","description":"Emitted when a bot removes an emoji reaction from a cached message.","params":[{"name":"reaction","description":"The reaction that was removed","type":[[["MessageReaction"]]]}],"meta":{"line":18,"file":"MessageReactionRemoveEmoji.js","path":"src/client/actions"}},{"name":"presenceUpdate","description":"Emitted whenever a guild member's presence (e.g. status, activity) is changed.","params":[{"name":"oldPresence","description":"The presence before the update, if one at all","nullable":true,"type":[[["Presence"]]]},{"name":"newPresence","description":"The presence after the update","type":[[["Presence"]]]}],"meta":{"line":32,"file":"PresenceUpdate.js","path":"src/client/actions"}},{"name":"stageInstanceCreate","description":"Emitted whenever a stage instance is created.","params":[{"name":"stageInstance","description":"The created stage instance","type":[[["StageInstance"]]]}],"meta":{"line":14,"file":"StageInstanceCreate.js","path":"src/client/actions"}},{"name":"stageInstanceDelete","description":"Emitted whenever a stage instance is deleted.","params":[{"name":"stageInstance","description":"The deleted stage instance","type":[[["StageInstance"]]]}],"meta":{"line":18,"file":"StageInstanceDelete.js","path":"src/client/actions"}},{"name":"stageInstanceUpdate","description":"Emitted whenever a stage instance gets updated - e.g. change in topic or privacy level","params":[{"name":"oldStageInstance","description":"The stage instance before the update","nullable":true,"type":[[["StageInstance"]]]},{"name":"newStageInstance","description":"The stage instance after the update","type":[[["StageInstance"]]]}],"meta":{"line":15,"file":"StageInstanceUpdate.js","path":"src/client/actions"}},{"name":"threadCreate","description":"Emitted whenever a thread is created or when the client user is added to a thread.","params":[{"name":"thread","description":"The thread that was created","type":[[["ThreadChannel"]]]},{"name":"newlyCreated","description":"Whether the thread was newly created","type":[[["boolean"]]]}],"meta":{"line":12,"file":"ThreadCreate.js","path":"src/client/actions"}},{"name":"threadDelete","description":"Emitted whenever a thread is deleted.","params":[{"name":"thread","description":"The thread that was deleted","type":[[["ThreadChannel"]]]}],"meta":{"line":20,"file":"ThreadDelete.js","path":"src/client/actions"}},{"name":"threadListSync","description":"Emitted whenever the client user gains access to a text or news channel that contains threads","params":[{"name":"threads","description":"The threads that were synced","type":[[["Collection","<"],["Snowflake",", "],["ThreadChannel",">"]]]}],"meta":{"line":38,"file":"ThreadListSync.js","path":"src/client/actions"}},{"name":"threadMembersUpdate","description":"Emitted whenever members are added or removed from a thread. Requires `GUILD_MEMBERS` privileged intent","params":[{"name":"oldMembers","description":"The members before the update","type":[[["Collection","<"],["Snowflake",", "],["ThreadMember",">"]]]},{"name":"newMembers","description":"The members after the update","type":[[["Collection","<"],["Snowflake",", "],["ThreadMember",">"]]]}],"meta":{"line":22,"file":"ThreadMembersUpdate.js","path":"src/client/actions"}},{"name":"threadMemberUpdate","description":"Emitted whenever the client user's thread member is updated.","params":[{"name":"oldMember","description":"The member before the update","type":[[["ThreadMember"]]]},{"name":"newMember","description":"The member after the update","type":[[["ThreadMember"]]]}],"meta":{"line":18,"file":"ThreadMemberUpdate.js","path":"src/client/actions"}},{"name":"typingStart","description":"Emitted whenever a user starts typing in a channel.","params":[{"name":"typing","description":"The typing state","type":[[["Typing"]]]}],"meta":{"line":19,"file":"TypingStart.js","path":"src/client/actions"}},{"name":"userUpdate","description":"Emitted whenever a user's details (e.g. username) are changed.\nTriggered by the Discord gateway events USER_UPDATE, GUILD_MEMBER_UPDATE, and PRESENCE_UPDATE.","params":[{"name":"oldUser","description":"The user before the update","type":[[["User"]]]},{"name":"newUser","description":"The user after the update","type":[[["User"]]]}],"meta":{"line":14,"file":"UserUpdate.js","path":"src/client/actions"}},{"name":"voiceStateUpdate","description":"Emitted whenever a member changes voice state - e.g. joins/leaves a channel, mutes/unmutes.","params":[{"name":"oldState","description":"The voice state before the update","type":[[["VoiceState"]]]},{"name":"newState","description":"The voice state after the update","type":[[["VoiceState"]]]}],"meta":{"line":32,"file":"VoiceStateUpdate.js","path":"src/client/actions"}},{"name":"webhookUpdate","description":"Emitted whenever a channel has its webhooks changed.","params":[{"name":"channel","description":"The channel that had a webhook update","type":[[["TextChannel"]],[["NewsChannel"]],[["VoiceChannel"]],[["StageChannel"]],[["ForumChannel"]]]}],"meta":{"line":10,"file":"WebhooksUpdate.js","path":"src/client/actions"}},{"name":"warn","description":"Emitted for general warnings.","params":[{"name":"info","description":"The warning","type":[[["string"]]]}],"meta":{"line":1092,"file":"Client.js","path":"src/client"}},{"name":"update","description":"Emitted whenever clientOptions.checkUpdate = false","params":[{"name":"oldVersion","description":"Current version","type":[[["string"]]]},{"name":"newVersion","description":"Latest version","type":[[["string"]]]}],"meta":{"line":497,"file":"Client.js","path":"src/client"}},{"name":"applicationCommandAutocompleteResponse","description":"Emitted when receiving a response from Discord","deprecated":"Test only","params":[{"name":"data","description":"Data","type":[[["AutocompleteResponse"]]]}],"meta":{"line":16,"file":"APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE.js","path":"src/client/websocket/handlers"}},{"name":"applicationCommandCreate","description":"Emitted when a guild application command is created.","deprecated":"See {@link https://github.com/discord/discord-api-docs/issues/3690 this issue} for more information.","params":[{"name":"command","description":"The command which was created","type":[[["ApplicationCommand"]]]}],"meta":{"line":11,"file":"APPLICATION_COMMAND_CREATE.js","path":"src/client/websocket/handlers"}},{"name":"applicationCommandDelete","description":"Emitted when a guild application command is deleted.","deprecated":"See {@link https://github.com/discord/discord-api-docs/issues/3690 this issue} for more information.","params":[{"name":"command","description":"The command which was deleted","type":[[["ApplicationCommand"]]]}],"meta":{"line":13,"file":"APPLICATION_COMMAND_DELETE.js","path":"src/client/websocket/handlers"}},{"name":"applicationCommandUpdate","description":"Emitted when a guild application command is updated.","deprecated":"See {@link https://github.com/discord/discord-api-docs/issues/3690 this issue} for more information.","params":[{"name":"oldCommand","description":"The command before the update","nullable":true,"type":[[["ApplicationCommand"]]]},{"name":"newCommand","description":"The command after the update","type":[[["ApplicationCommand"]]]}],"meta":{"line":12,"file":"APPLICATION_COMMAND_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"callCreate","description":"Emitted whenever received a call","params":[{"name":"call","description":"Call","type":[[["Call"]]]}],"meta":{"line":8,"file":"CALL_CREATE.js","path":"src/client/websocket/handlers"}},{"name":"callDelete","description":"Emitted whenever delete a call","params":[{"name":"call","description":"Call","type":[[["Call"]]]}],"meta":{"line":5,"file":"CALL_DELETE.js","path":"src/client/websocket/handlers"}},{"name":"callUpdate","description":"Emitted whenever update a call","params":[{"name":"call","description":"Call","type":[[["Call"]]]}],"meta":{"line":5,"file":"CALL_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"channelPinsUpdate","description":"Emitted whenever the pins of a channel are updated. Due to the nature of the WebSocket event,\nnot much information can be provided easily here - you need to manually check the pins yourself.","params":[{"name":"channel","description":"The channel that the pins update occurred in","type":[[["TextBasedChannels"]]]},{"name":"time","description":"The time of the pins update","type":[[["Date"]]]}],"meta":{"line":13,"file":"CHANNEL_PINS_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"channelRecipientAdd","description":"Emitted whenever a recipient is added from a group DM.","params":[{"name":"channel","description":"Group DM channel","type":[[["PartialGroupDMChannel"]]]},{"name":"user","description":"User","type":[[["User"]]]}],"meta":{"line":4,"file":"CHANNEL_RECIPIENT_ADD.js","path":"src/client/websocket/handlers"}},{"name":"channelRecipientRemove","description":"Emitted whenever a recipient is removed from a group DM.","params":[{"name":"channel","description":"Group DM channel","type":[[["PartialGroupDMChannel"]]]},{"name":"user","description":"User","type":[[["User"]]]}],"meta":{"line":4,"file":"CHANNEL_RECIPIENT_REMOVE.js","path":"src/client/websocket/handlers"}},{"name":"channelUpdate","description":"Emitted whenever a channel is updated - e.g. name change, topic change, channel type change.","params":[{"name":"oldChannel","description":"The channel before the update","type":[[["DMChannel"]],[["GuildChannel"]]]},{"name":"newChannel","description":"The channel after the update","type":[[["DMChannel"]],[["GuildChannel"]]]}],"meta":{"line":8,"file":"CHANNEL_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"guildAvailable","description":"Emitted whenever a guild becomes available.","params":[{"name":"guild","description":"The guild that became available","type":[[["Guild"]]]}],"meta":{"line":32,"file":"GUILD_CREATE.js","path":"src/client/websocket/handlers"}},{"name":"guildCreate","description":"Emitted whenever the client joins a guild.","params":[{"name":"guild","description":"The created guild","type":[[["Guild"]]]}],"meta":{"line":44,"file":"GUILD_CREATE.js","path":"src/client/websocket/handlers"}},{"name":"guildMemberAdd","description":"Emitted whenever a user joins a guild.","deprecated":"See {@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/issues/197 this issue} for more information.","params":[{"name":"member","description":"The member that has joined a guild","type":[[["GuildMember"]]]}],"meta":{"line":11,"file":"GUILD_MEMBER_ADD.js","path":"src/client/websocket/handlers"}},{"name":"guildMemberListUpdate","description":"Emitted whenever a guild member list (sidebar) is updated.","params":[{"name":"members","description":"Members that were updated","type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]]},{"name":"guild","description":"Guild","type":[[["Guild"]]]},{"name":"type","description":"Type of update (INVALIDATE | UPDATE | INSERT | DELETE | SYNC)","type":[[["string"]]]},{"name":"raw","description":"Raw data","type":[[["data"]]]}],"meta":{"line":46,"file":"GUILD_MEMBER_LIST_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"guildMembersChunk","description":"Emitted whenever a chunk of guild members is received (all members come from the same guild).","params":[{"name":"members","description":"The members in the chunk","type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]]},{"name":"guild","description":"The guild related to the member chunk","type":[[["Guild"]]]},{"name":"chunk","description":"Properties of the received chunk","type":[[["GuildMembersChunk"]]]}],"meta":{"line":26,"file":"GUILD_MEMBERS_CHUNK.js","path":"src/client/websocket/handlers"}},{"name":"interactionFailure","description":"Emitted whenever client user send interaction and error","params":[{"name":"data","description":"data","type":[[["InteractionResponseBody"]]]}],"meta":{"line":5,"file":"INTERACTION_FAILURE.js","path":"src/client/websocket/handlers"}},{"name":"interactionModalCreate","description":"Emitted whenever client user receive interaction.showModal()","params":[{"name":"modal","description":"The modal (extended)","type":[[["Modal"]]]}],"meta":{"line":5,"file":"INTERACTION_MODAL_CREATE.js","path":"src/client/websocket/handlers"}},{"name":"interactionSuccess","description":"Emitted whenever client user send interaction and success","params":[{"name":"data","description":"data","type":[[["InteractionResponseBody"]]]}],"meta":{"line":5,"file":"INTERACTION_SUCCESS.js","path":"src/client/websocket/handlers"}},{"name":"messageAck","description":"Emitted whenever message is acknowledged (mark read / unread)","params":[{"name":"channel","description":"Channel","type":[[["TextChannel"]]]},{"name":"message_id","description":"Message ID","type":[[["Snowflake"]]]},{"name":"isRead","description":"Whether the message is read","type":[[["boolean"]]]},{"name":"raw","description":"Raw data","type":[[["Object"]]]}],"meta":{"line":7,"file":"MESSAGE_ACK.js","path":"src/client/websocket/handlers"}},{"name":"messageUpdate","description":"Emitted whenever a message is updated - e.g. embed or content change.","params":[{"name":"oldMessage","description":"The message before the update","type":[[["Message"]]]},{"name":"newMessage","description":"The message after the update","type":[[["Message"]]]}],"meta":{"line":8,"file":"MESSAGE_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"relationshipAdd","description":"Emitted whenever a relationship is updated.","params":[{"name":"user","description":"The userID that was updated","type":[[["Snowflake"]]]},{"name":"type","description":"The new relationship type","type":[[["RelationshipTypes"]]]}],"meta":{"line":10,"file":"RELATIONSHIP_ADD.js","path":"src/client/websocket/handlers"}},{"name":"relationshipRemove","description":"Emitted whenever a relationship is delete.","params":[{"name":"user","description":"The userID that was updated","type":[[["Snowflake"]]]},{"name":"type","description":"The type of the old relationship","type":[[["RelationshipTypes"]]]}],"meta":{"line":8,"file":"RELATIONSHIP_REMOVE.js","path":"src/client/websocket/handlers"}},{"name":"relationshipUpdate","description":"Emitted whenever a relationship is updated.","params":[{"name":"user","description":"The userID that was updated","type":[[["Snowflake"]]]},{"name":"type","description":"The new relationship type","type":[[["RelationshipTypes"]]]},{"name":"data","description":"The raw data","type":[[["Object"]]]}],"meta":{"line":7,"file":"RELATIONSHIP_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"shardResume","description":"Emitted when a shard resumes successfully.","params":[{"name":"id","description":"The shard id that resumed","type":[[["number"]]]},{"name":"replayedEvents","description":"The amount of replayed events","type":[[["number"]]]}],"meta":{"line":7,"file":"RESUMED.js","path":"src/client/websocket/handlers"}},{"name":"threadUpdate","description":"Emitted whenever a thread is updated - e.g. name change, archive state change, locked state change.","params":[{"name":"oldThread","description":"The thread before the update","type":[[["ThreadChannel"]]]},{"name":"newThread","description":"The thread after the update","type":[[["ThreadChannel"]]]}],"meta":{"line":8,"file":"THREAD_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"userGuildSettingsUpdate","description":"Emitted whenever guild settings are updated","params":[{"name":"guild","description":"Guild","type":[[["Guild"]]]}],"meta":{"line":6,"file":"USER_GUILD_SETTINGS_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"shardReady","description":"Emitted when a shard turns ready.","params":[{"name":"id","description":"The shard id that turned ready","type":[[["number"]]]},{"name":"unavailableGuilds","description":"Set of unavailable guild ids, if any","nullable":true,"type":[[["Set","<"],["Snowflake",">"]]]}],"meta":{"line":200,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"shardDisconnect","description":"Emitted when a shard's WebSocket disconnects and will no longer reconnect.","params":[{"name":"event","description":"The WebSocket close event","type":[[["CloseEvent"]]]},{"name":"id","description":"The shard id that disconnected","type":[[["number"]]]}],"meta":{"line":214,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"shardReconnecting","description":"Emitted when a shard is attempting to reconnect or re-identify.","params":[{"name":"id","description":"The shard id that is attempting to reconnect","type":[[["number"]]]}],"meta":{"line":230,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"invalidated","description":"Emitted when the client's session becomes invalidated.\nYou are expected to handle closing the process gracefully and preventing a boot loop\nif you are listening to this event.","meta":{"line":304,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"unhandledPacket","description":"Emitted whenever a packet isn't handled.","params":[{"name":"packet","description":"The packet (t: Event name, d: Data)","type":[[["Object"]]]},{"name":"shard","description":"The shard that received the packet (Auto = 0)","type":[[["Number"]]]}],"meta":{"line":368,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"ready","description":"Emitted when the client becomes ready to start working.","params":[{"name":"client","description":"The client","type":[[["Client"]]]}],"meta":{"line":401,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"shardError","description":"Emitted whenever a shard's WebSocket encounters a connection error.","params":[{"name":"error","description":"The encountered error","type":[[["Error"]]]},{"name":"shardId","description":"The shard that encountered this error","type":[[["number"]]]}],"meta":{"line":345,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"captchaRequired","description":"Emitted when a request is blocked by a captcha","params":[{"name":"request","description":"The request that was blocked","type":[[["Request"]]]},{"name":"data","description":"The data returned by Discord","type":[[["Captcha"]]]}],"meta":{"line":358,"file":"RequestHandler.js","path":"src/rest"}},{"name":"error","description":"Emitted when the client encounters an error.","params":[{"name":"error","description":"The error encountered","type":[[["Error"]]]}],"meta":{"line":211,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"debug","description":"Emitted for general debugging information.","params":[{"name":"info","description":"The debug information","type":[[["string"]]]}],"meta":{"line":83,"file":"BaseClient.js","path":"src/client"}},{"name":"rateLimit","description":"Emitted when the client hits a rate limit while making a request","params":[{"name":"rateLimitData","description":"Object containing the rate limit info","type":[[["RateLimitData"]]]}],"meta":{"line":137,"file":"RequestHandler.js","path":"src/rest"}},{"name":"apiRequest","description":"Emitted before every API request.\nThis event can emit several times for the same request, e.g. when hitting a rate limit.\nThis is an informational event that is emitted quite frequently,\nit is highly recommended to check `request.path` to filter the data.","params":[{"name":"request","description":"The request that is about to be sent","type":[[["APIRequest"]]]}],"meta":{"line":188,"file":"RequestHandler.js","path":"src/rest"}},{"name":"apiResponse","description":"Emitted after every API request has received a response.\nThis event does not necessarily correlate to completion of the request, e.g. when hitting a rate limit.\nThis is an informational event that is emitted quite frequently,\nit is highly recommended to check `request.path` to filter the data.","params":[{"name":"request","description":"The request that triggered this response","type":[[["APIRequest"]]]},{"name":"response","description":"The response received from the Discord API","type":[[["Response"]]]}],"meta":{"line":220,"file":"RequestHandler.js","path":"src/rest"}},{"name":"invalidRequestWarning","description":"Emitted periodically when the process sends invalid requests to let users avoid the\n10k invalid requests in 10 minutes threshold that causes a ban","params":[{"name":"invalidRequestWarningData","description":"Object containing the invalid request info","type":[[["InvalidRequestWarningData"]]]}],"meta":{"line":297,"file":"RequestHandler.js","path":"src/rest"}}],"meta":{"line":49,"file":"Client.js","path":"src/client"}},{"name":"ClientVoiceManager","description":"Manages voice connections for the client","props":[{"name":"client","description":"The client that instantiated this voice manager","readonly":true,"type":[[["Client"]]],"meta":{"line":10,"file":"ClientVoiceManager.js","path":"src/client/voice"}},{"name":"adapters","description":"Maps guild ids to voice adapters created for use with @discordjs/voice.","type":[[["Map","<"],["Snowflake",", "],["Object",">"]]],"meta":{"line":22,"file":"ClientVoiceManager.js","path":"src/client/voice"}}],"meta":{"line":8,"file":"ClientVoiceManager.js","path":"src/client/voice"}},{"name":"WebhookClient","description":"The webhook client.","extends":[[["BaseClient"]]],"implements":[[["Webhook"]]],"construct":{"name":"WebhookClient","params":[{"name":"data","description":"The data of the webhook","type":[[["WebhookClientData"]]]},{"name":"options","description":"Options for the client","optional":true,"type":[[["ClientOptions"]]]}]},"props":[{"name":"id","description":"The webhook's id","type":[[["Snowflake"]]],"meta":{"line":55,"file":"Webhook.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the webhook was created at","readonly":true,"type":[[["number"]]],"meta":{"line":394,"file":"Webhook.js","path":"src/structures"}},{"name":"createdAt","description":"The time the webhook was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":403,"file":"Webhook.js","path":"src/structures"}},{"name":"url","description":"The URL of this webhook","readonly":true,"type":[[["string"]]],"meta":{"line":412,"file":"Webhook.js","path":"src/structures"}},{"name":"options","description":"The options the client was instantiated with","type":[[["ClientOptions"]]],"meta":{"line":26,"file":"BaseClient.js","path":"src/client"}},{"name":"rest","description":"The REST manager of the client","access":"private","type":[[["RESTManager"]]],"meta":{"line":33,"file":"BaseClient.js","path":"src/client"}},{"name":"api","description":"API shortcut","access":"private","readonly":true,"type":[[["Object"]]],"meta":{"line":42,"file":"BaseClient.js","path":"src/client"}}],"methods":[{"name":"send","description":"Sends a message with this webhook.","implements":["Webhook#send"],"examples":["// Send a basic message\nwebhook.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a basic message in a thread\nwebhook.send({ content: 'hello!', threadId: '836856309672348295' })\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nwebhook.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nwebhook.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg'\n }]\n})\n .then(console.log)\n .catch(console.error);","// Send an embed with a local image inside\nwebhook.send({\n content: 'This is an embed',\n embeds: [{\n thumbnail: {\n url: 'attachment://file.jpg'\n }\n }],\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["WebhookMessageOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":185,"file":"Webhook.js","path":"src/structures"}},{"name":"sendSlackMessage","description":"Sends a raw slack message with this webhook.","see":["{@link https://api.slack.com/messaging/webhooks}"],"implements":["Webhook#sendSlackMessage"],"examples":["// Send a slack message\nwebhook.sendSlackMessage({\n 'username': 'Wumpus',\n 'attachments': [{\n 'pretext': 'this looks pretty cool',\n 'color': '#F0F',\n 'footer_icon': 'http://snek.s3.amazonaws.com/topSnek.png',\n 'footer': 'Powered by sneks',\n 'ts': Date.now() / 1_000\n }]\n}).catch(console.error);"],"params":[{"name":"body","description":"The raw body to send","type":[[["Object"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":225,"file":"Webhook.js","path":"src/structures"}},{"name":"edit","description":"Edits this webhook.","implements":["Webhook#edit"],"params":[{"name":"options","description":"Options for editing the webhook","type":[[["WebhookEditData"]]]},{"name":"reason","description":"Reason for editing the webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Webhook",">"]]],"meta":{"line":252,"file":"Webhook.js","path":"src/structures"}},{"name":"fetchMessage","description":"Gets a message that was sent by this webhook.","implements":["Webhook#fetchMessage"],"params":[{"name":"message","description":"The id of the message to fetch","type":[[["Snowflake"]],[["original","'"]]]},{"name":"cacheOrOptions","description":"The options to provide to fetch the message.\nA **deprecated** boolean may be passed instead to specify whether to cache the message.","optional":true,"default":"{}","type":[[["WebhookFetchMessageOptions"]],[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"description":"Returns the raw message data if the webhook was instantiated as a\n{@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned"},"meta":{"line":286,"file":"Webhook.js","path":"src/structures"}},{"name":"editMessage","description":"Edits a message that was sent by this webhook.","implements":["Webhook#editMessage"],"params":[{"name":"message","description":"The message to edit","type":[[["MessageResolvable"]],[["original","'"]]]},{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["WebhookEditMessageOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"description":"Returns the raw message data if the webhook was instantiated as a\n{@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned"},"meta":{"line":322,"file":"Webhook.js","path":"src/structures"}},{"name":"delete","description":"Deletes the webhook.","implements":["Webhook#delete"],"params":[{"name":"reason","description":"Reason for deleting this webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":364,"file":"Webhook.js","path":"src/structures"}},{"name":"deleteMessage","description":"Delete a message that was sent by this webhook.","implements":["Webhook#deleteMessage"],"params":[{"name":"message","description":"The message to delete","type":[[["MessageResolvable"]],[["original","'"]]]},{"name":"threadId","description":"The id of the thread this message belongs to","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":374,"file":"Webhook.js","path":"src/structures"}},{"name":"destroy","description":"Destroys all assets used by the base client.","inherits":"BaseClient#destroy","inherited":true,"returns":[[["void"]]],"meta":{"line":50,"file":"BaseClient.js","path":"src/client"}},{"name":"incrementMaxListeners","description":"Increments max listeners by one, if they are not zero.","access":"private","inherits":"BaseClient#incrementMaxListeners","inherited":true,"meta":{"line":58,"file":"BaseClient.js","path":"src/client"}},{"name":"decrementMaxListeners","description":"Decrements max listeners by one, if they are not zero.","access":"private","inherits":"BaseClient#decrementMaxListeners","inherited":true,"meta":{"line":69,"file":"BaseClient.js","path":"src/client"}}],"events":[{"name":"debug","description":"Emitted for general debugging information.","params":[{"name":"info","description":"The debug information","type":[[["string"]]]}],"meta":{"line":83,"file":"BaseClient.js","path":"src/client"}},{"name":"rateLimit","description":"Emitted when the client hits a rate limit while making a request","params":[{"name":"rateLimitData","description":"Object containing the rate limit info","type":[[["RateLimitData"]]]}],"meta":{"line":137,"file":"RequestHandler.js","path":"src/rest"}},{"name":"apiRequest","description":"Emitted before every API request.\nThis event can emit several times for the same request, e.g. when hitting a rate limit.\nThis is an informational event that is emitted quite frequently,\nit is highly recommended to check `request.path` to filter the data.","params":[{"name":"request","description":"The request that is about to be sent","type":[[["APIRequest"]]]}],"meta":{"line":188,"file":"RequestHandler.js","path":"src/rest"}},{"name":"apiResponse","description":"Emitted after every API request has received a response.\nThis event does not necessarily correlate to completion of the request, e.g. when hitting a rate limit.\nThis is an informational event that is emitted quite frequently,\nit is highly recommended to check `request.path` to filter the data.","params":[{"name":"request","description":"The request that triggered this response","type":[[["APIRequest"]]]},{"name":"response","description":"The response received from the Discord API","type":[[["Response"]]]}],"meta":{"line":220,"file":"RequestHandler.js","path":"src/rest"}},{"name":"invalidRequestWarning","description":"Emitted periodically when the process sends invalid requests to let users avoid the\n10k invalid requests in 10 minutes threshold that causes a ban","params":[{"name":"invalidRequestWarningData","description":"Object containing the invalid request info","type":[[["InvalidRequestWarningData"]]]}],"meta":{"line":297,"file":"RequestHandler.js","path":"src/rest"}}],"meta":{"line":12,"file":"WebhookClient.js","path":"src/client"}},{"name":"WebSocketManager","description":"The WebSocket manager for this client.\nThis class forwards raw dispatch events,\nread more about it here {@link https://discord.com/developers/docs/topics/gateway}","extends":[[["EventEmitter"]]],"props":[{"name":"client","description":"The client that instantiated this WebSocketManager","readonly":true,"type":[[["Client"]]],"meta":{"line":40,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"gateway","description":"The gateway this manager uses","nullable":true,"type":[[["string"]]],"meta":{"line":52,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"totalShards","description":"The amount of shards this manager handles","access":"private","type":[[["number"]]],"meta":{"line":59,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"shards","description":"A collection of all shards this manager handles","type":[[["Collection","<"],["number",", "],["WebSocketShard",">"]]],"meta":{"line":65,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"shardQueue","description":"An array of shards to be connected or that need to reconnect","access":"private","type":[[["Set","<"],["WebSocketShard",">"]]],"meta":{"line":67,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"packetQueue","description":"An array of queued events before this WebSocketManager became ready","access":"private","type":[[["Array","<"],["Object",">"]]],"meta":{"line":75,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"status","description":"The current status of this WebSocketManager","type":[[["Status"]]],"meta":{"line":87,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"destroyed","description":"If this manager was destroyed. It will prevent shards from reconnecting","access":"private","type":[[["boolean"]]],"meta":{"line":94,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"reconnecting","description":"If this manager is currently reconnecting one or multiple shards","access":"private","type":[[["boolean"]]],"meta":{"line":101,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"ping","description":"The average ping of all WebSocketShards","readonly":true,"type":[[["number"]]],"meta":{"line":109,"file":"WebSocketManager.js","path":"src/client/websocket"}}],"methods":[{"name":"debug","description":"Emits a debug message.","access":"private","params":[{"name":"message","description":"The debug message","type":[[["string"]]]},{"name":"shard","description":"The shard that emitted this message, if any","optional":true,"nullable":true,"type":[[["WebSocketShard"]]]}],"meta":{"line":120,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"connect","description":"Connects this manager to the gateway.","access":"private","async":true,"meta":{"line":128,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"createShards","description":"Handles the creation of a shard.","access":"private","async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":190,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"reconnect","description":"Handles reconnects for this manager.","access":"private","async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":289,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"broadcast","description":"Broadcasts a packet to every shard this manager handles.","access":"private","params":[{"name":"packet","description":"The packet to send","type":[[["Object"]]]}],"meta":{"line":327,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"destroy","description":"Destroys this manager and all its shards.","access":"private","meta":{"line":335,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"handlePacket","description":"Processes a packet and queues it if this WebSocketManager is not ready.","access":"private","params":[{"name":"packet","description":"The packet to be handled","optional":true,"type":[[["Object"]]]},{"name":"shard","description":"The shard that will handle this packet","optional":true,"type":[[["WebSocketShard"]]]}],"returns":[[["boolean"]]],"meta":{"line":350,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"checkShardsReady","description":"Checks whether the client is ready to be marked as ready.","access":"private","meta":{"line":383,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"triggerClientReady","description":"Causes the client to be marked as ready and emits the ready event.","access":"private","meta":{"line":396,"file":"WebSocketManager.js","path":"src/client/websocket"}}],"meta":{"line":36,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"WebSocketShard","description":"Represents a Shard's WebSocket connection","props":[{"name":"manager","description":"The WebSocketManager of the shard","type":[[["WebSocketManager"]]],"meta":{"line":29,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"id","description":"The shard's id","type":[[["number"]]],"meta":{"line":35,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"status","description":"The current status of the shard","type":[[["Status"]]],"meta":{"line":41,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"sequence","description":"The current sequence of the shard","access":"private","type":[[["number"]]],"meta":{"line":48,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"closeSequence","description":"The sequence of the shard after close","access":"private","type":[[["number"]]],"meta":{"line":55,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"sessionId","description":"The current session id of the shard","access":"private","nullable":true,"type":[[["string"]]],"meta":{"line":62,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"resumeURL","description":"URL to use when resuming","access":"private","nullable":true,"type":[[["string"]]],"meta":{"line":69,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"ping","description":"The previous heartbeat ping of the shard","type":[[["number"]]],"meta":{"line":75,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"lastPingTimestamp","description":"The last time a ping was sent (a timestamp)","access":"private","type":[[["number"]]],"meta":{"line":82,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"lastHeartbeatAcked","description":"If we received a heartbeat ack back. Used to identify zombie connections","access":"private","type":[[["boolean"]]],"meta":{"line":89,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"closeEmitted","description":"Used to prevent calling {@link WebSocketShard#event:close} twice while closing or terminating the WebSocket.","access":"private","type":[[["boolean"]]],"meta":{"line":96,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"ratelimit","description":"Contains the rate limit queue and metadata","access":"private","type":[[["Object"]]],"meta":{"line":98,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"connection","description":"The WebSocket connection for the current shard","access":"private","nullable":true,"type":[[["WebSocket"]]],"meta":{"line":114,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"inflate","description":"The compression to use","access":"private","nullable":true,"type":[[["Inflate"]]],"meta":{"line":127,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"helloTimeout","description":"The HELLO timeout","access":"private","nullable":true,"type":[[["NodeJSTimeout"]]],"meta":{"line":135,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"wsCloseTimeout","description":"The WebSocket timeout.","access":"private","nullable":true,"type":[[["NodeJSTimeout"]]],"meta":{"line":143,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"eventsAttached","description":"If the manager attached its event handlers on the shard","access":"private","type":[[["boolean"]]],"meta":{"line":151,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"expectedGuilds","description":"A set of guild ids this shard expects to receive","access":"private","nullable":true,"type":[[["Set","<"],["string",">"]]],"meta":{"line":159,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"readyTimeout","description":"The ready timeout","access":"private","nullable":true,"type":[[["NodeJSTimeout"]]],"meta":{"line":167,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"connectedAt","description":"Time when the WebSocket connection was opened","access":"private","type":[[["number"]]],"meta":{"line":175,"file":"WebSocketShard.js","path":"src/client/websocket"}}],"methods":[{"name":"debug","description":"Emits a debug event.","access":"private","params":[{"name":"message","description":"The debug message","type":[[["string"]]]}],"meta":{"line":189,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"connect","description":"Connects the shard to the gateway.","access":"private","returns":{"types":[[["Promise","<"],["void",">"]]],"description":"A promise that will resolve if the shard turns ready successfully,\nor reject if we couldn't connect"},"meta":{"line":199,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"onOpen","description":"Called whenever a connection is opened to the gateway.","access":"private","meta":{"line":300,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"onMessage","description":"Called whenever a message is received.","access":"private","params":[{"name":"event","description":"Event received","type":[[["MessageEvent"]]]}],"meta":{"line":310,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"onError","description":"Called whenever an error occurs with the WebSocket.","access":"private","params":[{"name":"event","description":"The error that occurred","type":[[["ErrorEvent"]]]}],"meta":{"line":341,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"onClose","description":"Called whenever a connection to the gateway is closed.","access":"private","params":[{"name":"event","description":"Close event that was received","type":[[["CloseEvent"]]]}],"meta":{"line":374,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"emitClose","description":"This method is responsible to emit close event for this shard.\nThis method helps the shard reconnect.","params":[{"name":"event","description":"Close event that was received","optional":true,"type":[[["CloseEvent"]]]}],"meta":{"line":397,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"onPacket","description":"Called whenever a packet is received.","access":"private","params":[{"name":"packet","description":"The received packet","type":[[["Object"]]]}],"meta":{"line":422,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"checkReady","description":"Checks if the shard can be marked as ready","access":"private","meta":{"line":511,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"setHelloTimeout","description":"Sets the HELLO packet timeout.","access":"private","params":[{"name":"time","description":"If set to -1, it will clear the hello timeout","optional":true,"type":[[["number"]]]}],"meta":{"line":563,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"setWsCloseTimeout","description":"Sets the WebSocket Close timeout.\nThis method is responsible for detecting any zombie connections if the WebSocket fails to close properly.","access":"private","params":[{"name":"time","description":"If set to -1, it will clear the timeout","optional":true,"type":[[["number"]]]}],"meta":{"line":585,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"setHeartbeatTimer","description":"Sets the heartbeat timer for this shard.","access":"private","params":[{"name":"time","description":"If -1, clears the interval, any other number sets an interval","type":[[["number"]]]}],"meta":{"line":624,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"sendHeartbeat","description":"Sends a heartbeat to the WebSocket.\nIf this shard didn't receive a heartbeat last time, it will destroy it and reconnect","access":"private","params":[{"name":"tag","description":"What caused this heartbeat to be sent","optional":true,"default":"'HeartbeatTimer'","type":[[["string"]]]},{"name":"ignoreHeartbeatAck","description":"If we should send the heartbeat forcefully.","optional":true,"type":[[["boolean"]]]}],"meta":{"line":646,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"ackHeartbeat","description":"Acknowledges a heartbeat.","access":"private","meta":{"line":674,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"identify","description":"Identifies the client on the connection.","access":"private","returns":[[["void"]]],"meta":{"line":686,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"identifyNew","description":"Identifies as a new connection on the gateway.","access":"private","meta":{"line":694,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"identifyResume","description":"Resumes a session on the gateway.","access":"private","meta":{"line":729,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"send","description":"Adds a packet to the queue to be sent to the gateway.\nIf you use this method, make sure you understand that you need to provide\na full [Payload](https://discord.com/developers/docs/topics/gateway-events#payload-structure).\nDo not use this method if you don't know what you're doing.","params":[{"name":"data","description":"The full packet to send","type":[[["Object"]]]},{"name":"important","description":"If this packet should be added first in queue","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":757,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"_send","description":"Sends data, bypassing the queue.","access":"private","params":[{"name":"data","description":"Packet to send","type":[[["Object"]]]}],"returns":[[["void"]]],"meta":{"line":768,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"processQueue","description":"Processes the current WebSocket queue.","access":"private","returns":[[["void"]]],"meta":{"line":785,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"destroy","description":"Destroys this shard and closes its WebSocket connection.","access":"private","params":[{"name":"options","description":"Options for destroying the shard","optional":true,"default":"{ closeCode: 1000, reset: false, emit: true, log: true }","type":[[["Object"]]]}],"meta":{"line":807,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"_cleanupConnection","description":"Cleans up the WebSocket connection listeners.","access":"private","meta":{"line":886,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"_emitDestroyed","description":"Emits the DESTROYED event on the shard","access":"private","meta":{"line":895,"file":"WebSocketShard.js","path":"src/client/websocket"}}],"events":[{"name":"close","description":"Emitted when a shard's WebSocket closes.","params":[{"name":"event","description":"The received event","type":[[["CloseEvent"]]]}],"meta":{"line":408,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"ready","description":"Emitted when the shard receives the READY payload and is now waiting for guilds","meta":{"line":430,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"resumed","description":"Emitted when the shard resumes successfully","meta":{"line":445,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"invalidSession","description":"Emitted when the session has been invalidated.","meta":{"line":486,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"allReady","description":"Emitted when the shard is fully ready.\nThis event is emitted if:\n* all guilds were received by this shard\n* the ready timeout expired, and some guilds are unavailable","params":[{"name":"unavailableGuilds","description":"Set of unavailable guilds, if any","nullable":true,"type":[[["Set","<"],["string",">"]]]}],"meta":{"line":522,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"destroyed","description":"Emitted when a shard is destroyed, but no WebSocket connection was present.","meta":{"line":896,"file":"WebSocketShard.js","path":"src/client/websocket"}}],"meta":{"line":21,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"ApplicationCommandManager","description":"Manages API methods for application commands and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"permissions","description":"The manager for permissions of arbitrary commands on arbitrary guilds","type":[[["ApplicationCommandPermissionsManager"]]],"meta":{"line":23,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["ApplicationCommand",">"]]],"meta":{"line":27,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"commandPath","description":"The APIRouter path to the commands","access":"private","params":[{"name":"options.id","description":"The application command's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options.guildId","description":"The guild's id to use in the path,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"returns":[[["Object"]]],"meta":{"line":45,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or multiple application commands from Discord, or the cache if it's already available.","examples":["// Fetch a single command\nclient.application.commands.fetch('123456789012345678')\n .then(command => console.log(`Fetched command ${command.name}`))\n .catch(console.error);","// Fetch all commands\nguild.commands.fetch()\n .then(commands => console.log(`Fetched ${commands.size} commands`))\n .catch(console.error);"],"params":[{"name":"id","description":"The application command's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["FetchApplicationCommandOptions"]]]}],"async":true,"returns":[[["Promise","<("],["ApplicationCommand","|"],["Collection","<"],["Snowflake",", "],["ApplicationCommand",">)>"]]],"meta":{"line":96,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"create","description":"Creates an application command.","examples":["// Create a new command\nclient.application.commands.create({\n name: 'test',\n description: 'A test command',\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"command","description":"The command","type":[[["ApplicationCommandDataResolvable"]]]},{"name":"guildId","description":"The guild's id to create this command in,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":134,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"set","description":"Sets all the commands for this application or guild.","examples":["// Set all commands to just this one\nclient.application.commands.set([\n {\n name: 'test',\n description: 'A test command',\n },\n])\n .then(console.log)\n .catch(console.error);","// Remove all commands\nguild.commands.set([])\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"commands","description":"The commands","type":[[["Array","<"],["ApplicationCommandDataResolvable",">"]]]},{"name":"guildId","description":"The guild's id to create the commands in,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["ApplicationCommand",">>"]]],"meta":{"line":164,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"edit","description":"Edits an application command.","examples":["// Edit an existing command\nclient.application.commands.edit('123456789012345678', {\n description: 'New description',\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"command","description":"The command to edit","type":[[["ApplicationCommandResolvable"]]]},{"name":"data","description":"The data to update the command with","type":[[["Partial","<"],["ApplicationCommandDataResolvable",">"]]]},{"name":"guildId","description":"The guild's id where the command registered,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":187,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes an application command.","examples":["// Delete a command\nguild.commands.delete('123456789012345678')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"command","description":"The command to delete","type":[[["ApplicationCommandResolvable"]]]},{"name":"guildId","description":"The guild's id where the command is registered,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise",""]]],"meta":{"line":210,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}},{"name":"transformCommand","description":"Transforms an {@link ApplicationCommandData} object into something that can be used with the API.","scope":"static","access":"private","params":[{"name":"command","description":"The command to transform","type":[[["ApplicationCommandDataResolvable"]]]}],"returns":[[["APIApplicationCommand"]]],"meta":{"line":228,"file":"ApplicationCommandManager.js","path":"src/managers"}}],"meta":{"line":15,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"ApplicationCommandPermissionsManager","description":"Manages API methods for permissions of Application Commands.","extends":[[["BaseManager"]]],"props":[{"name":"manager","description":"The manager or command that this manager belongs to","access":"private","type":[[["ApplicationCommandManager"]],[["ApplicationCommand"]]],"meta":{"line":21,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"guild","description":"The guild that this manager acts on","nullable":true,"type":[[["Guild"]]],"meta":{"line":27,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"guildId","description":"The id of the guild that this manager acts on","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":33,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"commandId","description":"The id of the command this manager acts on","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":39,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"permissionsPath","description":"The APIRouter path to the commands","access":"private","params":[{"name":"guildId","description":"The guild's id to use in the path,","type":[[["Snowflake"]]]},{"name":"commandId","description":"The application command's id","optional":true,"type":[[["Snowflake"]]]}],"returns":[[["Object"]]],"meta":{"line":51,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches the permissions for one or multiple commands.","examples":["// Fetch permissions for one command\nguild.commands.permissions.fetch({ command: '123456789012345678' })\n .then(perms => console.log(`Fetched permissions for ${perms.length} users`))\n .catch(console.error);","// Fetch permissions for all commands in a guild\nclient.application.commands.permissions.fetch({ guild: '123456789012345678' })\n .then(perms => console.log(`Fetched permissions for ${perms.size} commands`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options used to fetch permissions","optional":true,"type":[[["BaseApplicationCommandPermissionsOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Array","<"],["ApplicationCommandPermissions",">|"],["Collection","<"],["Snowflake",", "],["Array","<"],["ApplicationCommandPermissions",">>)>"]]],"meta":{"line":100,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"set","description":"Sets the permissions for one or more commands.","examples":["// Set the permissions for one command\nclient.application.commands.permissions.set({ guild: '892455839386304532', command: '123456789012345678',\n permissions: [\n {\n id: '876543210987654321',\n type: 'USER',\n permission: false,\n },\n]})\n .then(console.log)\n .catch(console.error);","// Set the permissions for all commands\nguild.commands.permissions.set({ fullPermissions: [\n {\n id: '123456789012345678',\n permissions: [{\n id: '876543210987654321',\n type: 'USER',\n permission: false,\n }],\n },\n]})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options used to set permissions","type":[[["SetApplicationCommandPermissionsOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Array","<"],["ApplicationCommandPermissions",">|"],["Collection","<"],["Snowflake",", "],["Array","<"],["ApplicationCommandPermissions",">>)>"]]],"meta":{"line":166,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"add","description":"Add permissions to a command.","examples":["// Block a role from the command permissions\nguild.commands.permissions.add({ command: '123456789012345678', permissions: [\n {\n id: '876543211234567890',\n type: 'ROLE',\n permission: false\n },\n]})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options used to add permissions","type":[[["AddApplicationCommandPermissionsOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationCommandPermissions",">>"]]],"meta":{"line":228,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"remove","description":"Remove permissions from a command.","examples":["// Remove a user permission from this command\nguild.commands.permissions.remove({ command: '123456789012345678', users: '876543210123456789' })\n .then(console.log)\n .catch(console.error);","// Remove multiple roles from this command\nguild.commands.permissions.remove({\n command: '123456789012345678', roles: ['876543210123456789', '765432101234567890']\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options used to remove permissions","type":[[["RemoveApplicationCommandPermissionsOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationCommandPermissions",">>"]]],"meta":{"line":280,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"has","description":"Check whether a permission exists for a user or role","examples":["// Check whether a user has permission to use a command\nguild.commands.permissions.has({ command: '123456789012345678', permissionId: '876543210123456789' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options used to check permissions","type":[[["AddApplicationCommandPermissionsOptions"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":356,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"transformPermissions","description":"Transforms an {@link ApplicationCommandPermissionData} object into something that can be used with the API.","scope":"static","access":"private","params":[{"name":"permissions","description":"The permissions to transform","type":[[["ApplicationCommandPermissionData"]]]},{"name":"received","description":"Whether these permissions have been received from Discord","optional":true,"type":[[["boolean"]]]}],"returns":[[["APIApplicationCommandPermissions"]]],"meta":{"line":407,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"AutoModerationRuleManager","description":"Manages API methods for auto moderation rules and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to.","type":[[["Guild"]]],"meta":{"line":25,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of items for this manager.","abstract":true,"type":[[["Collection"]]],"meta":{"line":49,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves an {@link AutoModerationRuleResolvable} to an {@link AutoModerationRule} object.","params":[{"name":"autoModerationRule","description":"The AutoModerationRule resolvable to resolve","type":[[["AutoModerationRuleResolvable"]]]}],"returns":{"types":[[["AutoModerationRule"]]],"nullable":true},"meta":{"line":28,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves an {@link AutoModerationRuleResolvable} to a {@link AutoModerationRule} id.","params":[{"name":"autoModerationRule","description":"The AutoModerationRule resolvable to resolve","type":[[["AutoModerationRuleResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":37,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"create","description":"Creates a new auto moderation rule.","params":[{"name":"options","description":"Options for creating the auto moderation rule","type":[[["AutoModerationRuleCreateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":108,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"edit","description":"Edits an auto moderation rule.","params":[{"name":"autoModerationRule","description":"The auto moderation rule to edit","type":[[["AutoModerationRuleResolvable"]]]},{"name":"options","description":"Options for editing the auto moderation rule","type":[[["AutoModerationRuleEditOptions"]]]}],"async":true,"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":174,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches auto moderation rules from Discord.","examples":["// Fetch all auto moderation rules from a guild without caching\nguild.autoModerationRules.fetch({ cache: false })\n .then(console.log)\n .catch(console.error);","// Fetch a single auto moderation rule\nguild.autoModerationRules.fetch('979083472868098119')\n .then(console.log)\n .catch(console.error);","// Fetch a single auto moderation rule without checking cache and without caching\nguild.autoModerationRules.fetch({ autoModerationRule: '979083472868098119', cache: false, force: true })\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"options","description":"Options for fetching auto moderation rule(s)","optional":true,"type":[[["AutoModerationRuleResolvable"]],[["FetchAutoModerationRuleOptions"]],[["FetchAutoModerationRulesOptions"]]]}],"returns":[[["Promise","<("],["AutoModerationRule","|"],["Collection","<"],["Snowflake",", "],["AutoModerationRule",">)>"]]],"meta":{"line":255,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes an auto moderation rule.","params":[{"name":"autoModerationRule","description":"The auto moderation rule to delete","type":[[["AutoModerationRuleResolvable"]]]},{"name":"reason","description":"The reason for deleting the auto moderation rule","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":290,"file":"AutoModerationRuleManager.js","path":"src/managers"}}],"meta":{"line":17,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"BaseGuildEmojiManager","description":"Holds methods to resolve GuildEmojis and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"cache","description":"The cache of GuildEmojis","type":[[["Collection","<"],["Snowflake",", "],["GuildEmoji",">"]]],"meta":{"line":17,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves an EmojiResolvable to an Emoji object.","params":[{"name":"emoji","description":"The Emoji resolvable to identify","type":[[["EmojiResolvable"]]]}],"returns":{"types":[[["GuildEmoji"]]],"nullable":true},"meta":{"line":36,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves an EmojiResolvable to an Emoji id string.","params":[{"name":"emoji","description":"The Emoji resolvable to identify","type":[[["EmojiResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":46,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"resolveIdentifier","description":"Resolves an EmojiResolvable to an emoji identifier.","params":[{"name":"emoji","description":"The emoji resolvable to resolve","type":[[["EmojiIdentifierResolvable"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":64,"file":"BaseGuildEmojiManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"BaseManager","description":"Manages the API methods of a data model.","abstract":true,"props":[{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"meta":{"line":7,"file":"BaseManager.js","path":"src/managers"}},{"name":"BillingManager","description":"Manages the API methods of a data model.","extends":[[["CachedManager"]]],"props":[{"name":"paymentSources","description":"All the payment sources of the client","type":[[["Collection","<"],["Snowflake",", "],["Object",">"]]],"meta":{"line":18,"file":"BillingManager.js","path":"src/managers"}},{"name":"guildBoosts","description":"All the guild boosts of the client","type":[[["Collection","<"],["Snowflake",", "],["GuildBoost",">"]]],"meta":{"line":23,"file":"BillingManager.js","path":"src/managers"}},{"name":"currentSubscription","description":"The current subscription of the client","type":[[["Collection","<"],["Snowflake",", "],["Object",">"]]],"meta":{"line":28,"file":"BillingManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of items for this manager.","abstract":true,"type":[[["Collection"]]],"meta":{"line":49,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetchPaymentSources","description":"Fetches all the payment sources of the client","async":true,"returns":[[["Collection","<"],["Snowflake",", "],["Object",">"]]],"meta":{"line":35,"file":"BillingManager.js","path":"src/managers"}},{"name":"fetchGuildBoosts","description":"Fetches all the guild boosts of the client","async":true,"returns":[[["Collection","<"],["Snowflake",", "],["GuildBoost",">"]]],"meta":{"line":47,"file":"BillingManager.js","path":"src/managers"}},{"name":"fetchCurrentSubscription","description":"Fetches the current subscription of the client","async":true,"returns":[[["Collection","<"],["Snowflake",", "],["Object",">"]]],"meta":{"line":58,"file":"BillingManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":11,"file":"BillingManager.js","path":"src/managers"}},{"name":"CachedManager","description":"Manages the API methods of a data model with a mutable cache of instances.","extends":[[["DataManager"]]],"abstract":true,"props":[{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of items for this manager.","abstract":true,"type":[[["Collection"]]],"meta":{"line":49,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":11,"file":"CachedManager.js","path":"src/managers"}},{"name":"ChannelManager","description":"A manager of channels belonging to a client","extends":[[["CachedManager"]]],"props":[{"name":"cache","description":"The cache of Channels","type":[[["Collection","<"],["Snowflake",", "],["Channel",">"]]],"meta":{"line":30,"file":"ChannelManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a ChannelResolvable to a Channel object.","params":[{"name":"channel","description":"The channel resolvable to resolve","type":[[["ChannelResolvable"]]]}],"returns":{"types":[[["Channel"]]],"nullable":true},"meta":{"line":73,"file":"ChannelManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a ChannelResolvable to a channel id string.","params":[{"name":"channel","description":"The channel resolvable to resolve","type":[[["ChannelResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":82,"file":"ChannelManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains a channel from Discord, or the channel cache if it's already available.","examples":["// Fetch a channel by its id\nclient.channels.fetch('222109930545610754')\n .then(channel => console.log(channel.name))\n .catch(console.error);"],"params":[{"name":"id","description":"The channel's id","type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["FetchChannelOptions"]]]}],"async":true,"returns":[[["Promise",""]]],"meta":{"line":109,"file":"ChannelManager.js","path":"src/managers"}},{"name":"createGroupDM","description":"Create Group DM","params":[{"name":"recipients","description":"Array of recipients","type":[[["Array","<"],["UserResolvable",">"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["PartialGroupDMChannel",">"]]],"description":"Channel"},"meta":{"line":125,"file":"ChannelManager.js","path":"src/managers"}}],"meta":{"line":14,"file":"ChannelManager.js","path":"src/managers"}},{"name":"ClientUserSettingManager","description":"Manages API methods for users and stores their cache.","see":["{@link https://luna.gitlab.io/discord-unofficial-docs/user_settings.html}"],"extends":[[["BaseManager"]]],"props":[{"name":"rawSetting","description":"Raw data","type":[[["Object"]]],"meta":{"line":22,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"locale","description":"Language","nullable":true,"type":[[["string"]]],"meta":{"line":27,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"activityDisplay","description":"From: Setting => ACTIVITY SETTINGS => Activity Status => Display current activity as a status message","nullable":true,"type":[[["boolean"]]],"meta":{"line":32,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"disableDMfromServer","description":"Disable Direct Message from servers","type":[[["Collection","<"],["Snowflake",", "],["boolean",">"]]],"meta":{"line":37,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"DMfromServerMode","description":"Allow direct messages from server members","nullable":true,"type":[[["boolean"]]],"meta":{"line":42,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"displayImage","description":"Display images","nullable":true,"type":[[["boolean"]]],"meta":{"line":47,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"linkedImageDisplay","description":"Display linked images","nullable":true,"type":[[["boolean"]]],"meta":{"line":52,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"autoplayGIF","description":"From: Setting => APP SETTINGS => Accessibility => Automatically play GIFs when Discord is focused.","nullable":true,"type":[[["boolean"]]],"meta":{"line":57,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"previewLink","description":"Show embeds and preview website links pasted into chat","nullable":true,"type":[[["boolean"]]],"meta":{"line":62,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"animatedEmojis","description":"From: Setting => APP SETTINGS => Accessibility => Play Animated Emojis","nullable":true,"type":[[["boolean"]]],"meta":{"line":67,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"allowTTS","description":"From: Setting => APP SETTINGS => Accessibility => Text-to-speech => Allow playback","nullable":true,"type":[[["boolean"]]],"meta":{"line":72,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"compactMode","description":"From: Setting => APP SETTINGS => Appearance => Message Display => Compact Mode","nullable":true,"type":[[["boolean"]]],"meta":{"line":77,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"convertEmoticons","description":"From: Setting => APP SETTINGS => Text & Images => Emoji => Convert Emoticons","nullable":true,"type":[[["boolean"]]],"meta":{"line":82,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"DMScanLevel","description":"SAFE DIRECT MESSAGING","nullable":true,"type":[[["DMScanLevel"]]],"meta":{"line":87,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"theme","description":"From: Setting => APP SETTINGS => Appearance => Theme","type":[[["dark","'"]],[["light","'"]],[["null"]]],"meta":{"line":92,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"developerMode","description":"Developer Mode (Copy ID, etc.)","nullable":true,"type":[[["boolean"]]],"meta":{"line":97,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"afkTimeout","description":"AFK timeout (receives notifications)","nullable":true,"type":[[["number"]]],"meta":{"line":102,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"stickerAnimationMode","description":"Sticker animation mode","nullable":true,"type":[[["stickerAnimationMode"]]],"meta":{"line":107,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"addFriendFrom","description":"WHO CAN ADD YOU AS A FRIEND ?","see":["{@link https://luna.gitlab.io/discord-unofficial-docs/user_settings.html#friend-source-flags-structure}"],"nullable":true,"type":[[["object"]]],"meta":{"line":113,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"showEmojiReactions","description":"From: Setting => APP SETTINGS => Text & Images => Emoji => Show emoji reactions","nullable":true,"type":[[["boolean"]]],"meta":{"line":122,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"customStatus","description":"Custom Stauts","see":["{@link https://luna.gitlab.io/discord-unofficial-docs/custom_status.html#customstatus-structure}"],"nullable":true,"type":[[["object"]]],"meta":{"line":128,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"guildFolder","description":"Guild folder and position","type":[[["GuildFolderManager"]]],"meta":{"line":133,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"_patch","description":"Patch data file\nhttps://github.com/Merubokkusu/Discord-S.C.U.M/blob/master/discum/user/user.py","access":"private","params":[{"name":"data","description":"Raw Data to patch","type":[[["Object"]]]}],"meta":{"line":142,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"edit","description":"Edit data","access":"private","params":[{"name":"data","description":"Data to edit","type":[[["Object"]]]}],"async":true,"meta":{"line":226,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"setDisplayCompactMode","description":"Set compact mode","params":[{"name":"value","description":"Compact mode enable or disable","type":[[["boolean"]],[["null"]]]}],"async":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"setTheme","description":"Discord Theme","params":[{"name":"value","description":"Theme to set","type":[[["null"]],[["dark"]],[["light"]]]}],"async":true,"returns":[[["theme"]]],"meta":{"line":252,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"setCustomStatus","description":"Set custom status","params":[{"name":"options","description":"CustomStatus","type":[[["CustomStatus"]],[["CustomStatusOption"]]]}],"meta":{"line":280,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"setLocale","description":"* Locale Setting, must be one of:\n* `DANISH`\n* `GERMAN`\n* `ENGLISH_UK`\n* `ENGLISH_US`\n* `SPANISH`\n* `FRENCH`\n* `CROATIAN`\n* `ITALIAN`\n* `LITHUANIAN`\n* `HUNGARIAN`\n* `DUTCH`\n* `NORWEGIAN`\n* `POLISH`\n* `BRAZILIAN_PORTUGUESE`\n* `ROMANIA_ROMANIAN`\n* `FINNISH`\n* `SWEDISH`\n* `VIETNAMESE`\n* `TURKISH`\n* `CZECH`\n* `GREEK`\n* `BULGARIAN`\n* `RUSSIAN`\n* `UKRAINIAN`\n* `HINDI`\n* `THAI`\n* `CHINA_CHINESE`\n* `JAPANESE`\n* `TAIWAN_CHINESE`\n* `KOREAN`","params":[{"name":"value","description":"Locale to set","type":[[["localeSetting"]]]}],"async":true,"returns":[[["locale"]]],"meta":{"line":369,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"_move","access":"private","params":[{"name":"array","description":"Array","type":[[["Array"]]]},{"name":"from","description":"Index1","type":[[["number"]]]},{"name":"to","description":"Index2","type":[[["number"]]]}],"returns":[[["Array"]]],"meta":{"line":389,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"guildChangePosition","description":"Change Guild Position (from * to Folder or Home)","access":"private","params":[{"name":"guildId","description":"guild.id","type":[[["GuildIDResolve"]]]},{"name":"newPosition","description":"Guild Position\n* **WARNING**: Type = `FOLDER`, newPosition is the guild's index in the Folder.","type":[[["number"]]]},{"name":"type","description":"Move to folder or home\n* `FOLDER`: 1\n* `HOME`: 2","type":[[["number"]]]},{"name":"folderId","description":"If you want to move to folder","type":[[["FolderID"]]]}],"meta":{"line":409,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"restrictedGuilds","description":"Restricted guilds setting","params":[{"name":"status","description":"Restricted status","type":[[["boolean"]]]}],"returns":[[["Promise"]]],"meta":{"line":455,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"addRestrictedGuild","description":"Add a guild to the list of restricted guilds.","params":[{"name":"guildId","description":"The guild to add","type":[[["GuildIDResolve"]]]}],"returns":[[["Promise"]]],"meta":{"line":469,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"removeRestrictedGuild","description":"Remove a guild from the list of restricted guilds.","params":[{"name":"guildId","description":"The guild to remove","type":[[["GuildIDResolve"]]]}],"returns":[[["Promise"]]],"meta":{"line":484,"file":"ClientUserSettingManager.js","path":"src/managers"}}],"meta":{"line":15,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"DataManager","description":"Manages the API methods of a data model along with a collection of instances.","extends":[[["BaseManager"]]],"abstract":true,"props":[{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of items for this manager.","abstract":true,"type":[[["Collection"]]],"meta":{"line":30,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a data entry to a data Object.","params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":11,"file":"DataManager.js","path":"src/managers"}},{"name":"DeveloperPortalManager","description":"Manages API methods for users and stores their cache.","extends":[[["BaseManager"]]],"props":[{"name":"applications","description":"A collection of all the applications the client has.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["DeveloperPortalApplication",">"]]],"meta":{"line":20,"file":"DeveloperPortalManager.js","path":"src/managers"}},{"name":"teams","description":"A collection of all the teams the client has.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Team",">"]]],"meta":{"line":26,"file":"DeveloperPortalManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetch","description":"Fetches all the applications & teams the client has.","async":true,"returns":[[["Promise","<"],["DeveloperPortalManager",">"]]],"meta":{"line":32,"file":"DeveloperPortalManager.js","path":"src/managers"}},{"name":"createTeam","description":"Creates a new Team.","params":[{"name":"name","description":"Name of the team","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Team",">"]]],"meta":{"line":54,"file":"DeveloperPortalManager.js","path":"src/managers"}},{"name":"createApplication","description":"Creates a new application.","params":[{"name":"name","description":"Name of the application","type":[[["string"]]]},{"name":"teamId","description":"The team to create the application in","default":null,"type":[[["Snowflake"]],[["Team"]]]}],"async":true,"returns":[[["Promise","<"],["DeveloperPortalApplication",">"]]],"meta":{"line":71,"file":"DeveloperPortalManager.js","path":"src/managers"}},{"name":"deleteApplication","description":"Deletes an application.","params":[{"name":"id","description":"Application ID","type":[[["Snowflake"]]]},{"name":"MFACode","description":"2FA code (if 2FA is enabled)","nullable":true,"type":[[["number"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":89,"file":"DeveloperPortalManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"DeveloperPortalManager.js","path":"src/managers"}},{"name":"GuildApplicationCommandManager","description":"An extension for guild-specific application commands.","extends":[[["ApplicationCommandManager"]]],"props":[{"name":"guild","description":"The guild that this manager belongs to","type":[[["Guild"]]],"meta":{"line":18,"file":"GuildApplicationCommandManager.js","path":"src/managers"}},{"name":"permissions","description":"The manager for permissions of arbitrary commands on this guild","type":[[["ApplicationCommandPermissionsManager"]]],"meta":{"line":24,"file":"GuildApplicationCommandManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["ApplicationCommand",">"]]],"meta":{"line":27,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"commandPath","description":"The APIRouter path to the commands","access":"private","inherits":"ApplicationCommandManager#commandPath","inherited":true,"params":[{"name":"options.id","description":"The application command's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options.guildId","description":"The guild's id to use in the path,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"returns":[[["Object"]]],"meta":{"line":45,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or multiple application commands from Discord, or the cache if it's already available.","inherits":"ApplicationCommandManager#fetch","inherited":true,"examples":["// Fetch a single command\nclient.application.commands.fetch('123456789012345678')\n .then(command => console.log(`Fetched command ${command.name}`))\n .catch(console.error);","// Fetch all commands\nguild.commands.fetch()\n .then(commands => console.log(`Fetched ${commands.size} commands`))\n .catch(console.error);"],"params":[{"name":"id","description":"The application command's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["FetchApplicationCommandOptions"]]]}],"async":true,"returns":[[["Promise","<("],["ApplicationCommand","|"],["Collection","<"],["Snowflake",", "],["ApplicationCommand",">)>"]]],"meta":{"line":96,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"create","description":"Creates an application command.","inherits":"ApplicationCommandManager#create","inherited":true,"examples":["// Create a new command\nclient.application.commands.create({\n name: 'test',\n description: 'A test command',\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"command","description":"The command","type":[[["ApplicationCommandDataResolvable"]]]},{"name":"guildId","description":"The guild's id to create this command in,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":134,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"set","description":"Sets all the commands for this application or guild.","inherits":"ApplicationCommandManager#set","inherited":true,"examples":["// Set all commands to just this one\nclient.application.commands.set([\n {\n name: 'test',\n description: 'A test command',\n },\n])\n .then(console.log)\n .catch(console.error);","// Remove all commands\nguild.commands.set([])\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"commands","description":"The commands","type":[[["Array","<"],["ApplicationCommandDataResolvable",">"]]]},{"name":"guildId","description":"The guild's id to create the commands in,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["ApplicationCommand",">>"]]],"meta":{"line":164,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"edit","description":"Edits an application command.","inherits":"ApplicationCommandManager#edit","inherited":true,"examples":["// Edit an existing command\nclient.application.commands.edit('123456789012345678', {\n description: 'New description',\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"command","description":"The command to edit","type":[[["ApplicationCommandResolvable"]]]},{"name":"data","description":"The data to update the command with","type":[[["Partial","<"],["ApplicationCommandDataResolvable",">"]]]},{"name":"guildId","description":"The guild's id where the command registered,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":187,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes an application command.","inherits":"ApplicationCommandManager#delete","inherited":true,"examples":["// Delete a command\nguild.commands.delete('123456789012345678')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"command","description":"The command to delete","type":[[["ApplicationCommandResolvable"]]]},{"name":"guildId","description":"The guild's id where the command is registered,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise",""]]],"meta":{"line":210,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"GuildApplicationCommandManager.js","path":"src/managers"}},{"name":"GuildBanManager","description":"Manages API methods for GuildBans and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this Manager belongs to","type":[[["Guild"]]],"meta":{"line":24,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["GuildBan",">"]]],"meta":{"line":27,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a GuildBanResolvable to a GuildBan object.","params":[{"name":"ban","description":"The ban that is in the guild","type":[[["GuildBanResolvable"]]]}],"returns":{"types":[[["GuildBan"]]],"nullable":true},"meta":{"line":49,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches ban(s) from Discord.","examples":["// Fetch multiple bans from a guild\nguild.bans.fetch()\n .then(console.log)\n .catch(console.error);","// Fetch a maximum of 5 bans from a guild without caching\nguild.bans.fetch({ limit: 5, cache: false })\n .then(console.log)\n .catch(console.error);","// Fetch a single ban\nguild.bans.fetch('351871113346809860')\n .then(console.log)\n .catch(console.error);","// Fetch a single ban without checking cache\nguild.bans.fetch({ user, force: true })\n .then(console.log)\n .catch(console.error)","// Fetch a single ban without caching\nguild.bans.fetch({ user, cache: false })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for fetching guild ban(s)","optional":true,"type":[[["UserResolvable"]],[["FetchBanOptions"]],[["FetchBansOptions"]]]}],"returns":[[["Promise","<("],["GuildBan","|"],["Collection","<"],["Snowflake",", "],["GuildBan",">)>"]]],"meta":{"line":98,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"create","description":"Bans a user from the guild.","examples":["// Ban a user by id (or with a user/guild member object)\nguild.bans.create('84484653687267328')\n .then(banInfo => console.log(`Banned ${banInfo.user?.tag ?? banInfo.tag ?? banInfo}`))\n .catch(console.error);"],"params":[{"name":"user","description":"The user to ban","type":[[["UserResolvable"]]]},{"name":"options","description":"Options for the ban","optional":true,"type":[[["BanOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["GuildMember","|"],["User","|"],["Snowflake",")>"]]],"description":"Result object will be resolved as specifically as possible.\nIf the GuildMember cannot be resolved, the User will instead be attempted to be resolved. If that also cannot\nbe resolved, the user id will be the result."},"meta":{"line":151,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"remove","description":"Unbans a user from the guild.","examples":["// Unban a user by id (or with a user/guild member object)\nguild.bans.remove('84484653687267328')\n .then(user => console.log(`Unbanned ${user.username} from ${guild.name}`))\n .catch(console.error);"],"params":[{"name":"user","description":"The user to unban","type":[[["UserResolvable"]]]},{"name":"reason","description":"Reason for unbanning user","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise",""]]],"meta":{"line":196,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":16,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"GuildChannelManager","description":"Manages API methods for GuildChannels and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this Manager belongs to","type":[[["Guild"]]],"meta":{"line":50,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"channelCountWithoutThreads","description":"The number of channels in this managers cache excluding thread channels\nthat do not count towards a guild's maximum channels restriction.","readonly":true,"type":[[["number"]]],"meta":{"line":59,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", ("],["GuildChannel","|"],["ThreadChannel",")>"]]],"meta":{"line":66,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a GuildChannelResolvable to a Channel object.","params":[{"name":"channel","description":"The GuildChannel resolvable to resolve","type":[[["GuildChannelResolvable"]]]}],"returns":{"types":[[["GuildChannel"]],[["ThreadChannel"]]],"nullable":true},"meta":{"line":92,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a GuildChannelResolvable to a channel id.","params":[{"name":"channel","description":"The GuildChannel resolvable to resolve","type":[[["GuildChannelResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":102,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"create","description":"Creates a new channel in the guild.","examples":["// Create a new text channel\nguild.channels.create('new-general', { reason: 'Needed a cool new channel' })\n .then(console.log)\n .catch(console.error);","// Create a new channel with permission overwrites\nguild.channels.create('new-voice', {\n type: 'GUILD_VOICE',\n permissionOverwrites: [\n {\n id: message.author.id,\n deny: [Permissions.FLAGS.VIEW_CHANNEL],\n },\n ],\n})"],"params":[{"name":"name","description":"The name of the new channel","type":[[["string"]]]},{"name":"options","description":"Options for creating the new channel","optional":true,"default":"{}","type":[[["GuildChannelCreateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":135,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","examples":["// Create a webhook for the current channel\nguild.channels.createWebhook('222197033908436994', 'Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"channel","description":"The channel to create the webhook for","type":[[["GuildChannelResolvable"]]]},{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":217,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"addFollower","description":"Adds the target channel to a channel's followers.","params":[{"name":"channel","description":"The channel to follow","type":[[["NewsChannel"]],[["Snowflake"]]]},{"name":"targetChannel","description":"The channel where published announcements will be posted at","type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for creating the webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Snowflake",">"]]],"description":"Returns created target webhook id."},"meta":{"line":240,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"edit","description":"Edits the channel.","examples":["// Edit a channel\nguild.channels.edit('222197033908436994', { name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"channel","description":"The channel to edit","type":[[["GuildChannelResolvable"]]]},{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":290,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","examples":["// Set a new channel position\nguild.channels.setPosition('222078374472843266', 2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The channel to set the position for","type":[[["GuildChannelResolvable"]]]},{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":359,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or more guild channels from Discord, or the channel cache if they're already available.","examples":["// Fetch all channels from the guild (excluding threads)\nmessage.guild.channels.fetch()\n .then(channels => console.log(`There are ${channels.size} channels.`))\n .catch(console.error);","// Fetch a single channel\nmessage.guild.channels.fetch('222197033908436994')\n .then(channel => console.log(`The channel name is: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"id","description":"The channel's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<(?"],["GuildChannel","|"],["ThreadChannel","|"],["Collection","<"],["Snowflake",", ?"],["GuildChannel",">)>"]]],"meta":{"line":394,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","examples":["// Fetch webhooks\nguild.channels.fetchWebhooks('769862166131245066')\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The channel to fetch webhooks for","type":[[["GuildChannelResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":423,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"setPositions","description":"Batch-updates the guild's channels' positions.\nOnly one channel's parent can be changed at a time","examples":["guild.channels.setPositions([{ channel: channelId, position: newChannelIndex }])\n .then(guild => console.log(`Updated channel positions for ${guild}`))\n .catch(console.error);"],"params":[{"name":"channelPositions","description":"Channel positions to update","type":[[["Array","<"],["ChannelPosition",">"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":456,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"fetchActiveThreads","description":"Obtains all active thread channels in the guild from Discord","examples":["// Fetch all threads from the guild\nmessage.guild.channels.fetchActiveThreads()\n .then(fetched => console.log(`There are ${fetched.threads.size} threads.`))\n .catch(console.error);"],"params":[{"name":"cache","description":"Whether to cache the fetched data","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":481,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes the channel.","examples":["// Delete the channel\nguild.channels.delete('858850993013260338', 'making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"channel","description":"The channel to delete","type":[[["GuildChannelResolvable"]]]},{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":497,"file":"GuildChannelManager.js","path":"src/managers"}}],"meta":{"line":31,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"GuildEmojiManager","description":"Manages API methods for GuildEmojis and stores their cache.","extends":[[["BaseGuildEmojiManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":21,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of GuildEmojis","type":[[["Collection","<"],["Snowflake",", "],["GuildEmoji",">"]]],"meta":{"line":17,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"create","description":"Creates a new custom emoji in the guild.","examples":["// Create a new emoji from a URL\nguild.emojis.create('https://i.imgur.com/w3duR07.png', 'rip')\n .then(emoji => console.log(`Created new emoji with name ${emoji.name}!`))\n .catch(console.error);","// Create a new emoji from a file on your computer\nguild.emojis.create('./memes/banana.png', 'banana')\n .then(emoji => console.log(`Created new emoji with name ${emoji.name}!`))\n .catch(console.error);"],"params":[{"name":"attachment","description":"The image for the emoji","type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"name","description":"The name for the emoji","type":[[["string"]]]},{"name":"options","description":"Options for creating the emoji","optional":true,"type":[[["GuildEmojiCreateOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Emoji",">"]]],"description":"The created emoji"},"meta":{"line":52,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or more emojis from Discord, or the emoji cache if they're already available.","examples":["// Fetch all emojis from the guild\nmessage.guild.emojis.fetch()\n .then(emojis => console.log(`There are ${emojis.size} emojis.`))\n .catch(console.error);","// Fetch a single emoji\nmessage.guild.emojis.fetch('222078108977594368')\n .then(emoji => console.log(`The emoji name is: ${emoji.name}`))\n .catch(console.error);"],"params":[{"name":"id","description":"The emoji's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<("],["GuildEmoji","|"],["Collection","<"],["Snowflake",", "],["GuildEmoji",">)>"]]],"meta":{"line":89,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes an emoji.","params":[{"name":"emoji","description":"The Emoji resolvable to delete","type":[[["EmojiResolvable"]]]},{"name":"reason","description":"Reason for deleting the emoji","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":111,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"edit","description":"Edits an emoji.","params":[{"name":"emoji","description":"The Emoji resolvable to edit","type":[[["EmojiResolvable"]]]},{"name":"data","description":"The new data for the emoji","type":[[["GuildEmojiEditData"]]]},{"name":"reason","description":"Reason for editing this emoji","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":124,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"fetchAuthor","description":"Fetches the author for this emoji","params":[{"name":"emoji","description":"The emoji to fetch the author of","type":[[["EmojiResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":152,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves an EmojiResolvable to an Emoji object.","inherits":"BaseGuildEmojiManager#resolve","inherited":true,"params":[{"name":"emoji","description":"The Emoji resolvable to identify","type":[[["EmojiResolvable"]]]}],"returns":{"types":[[["GuildEmoji"]]],"nullable":true},"meta":{"line":36,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves an EmojiResolvable to an Emoji id string.","inherits":"BaseGuildEmojiManager#resolveId","inherited":true,"params":[{"name":"emoji","description":"The Emoji resolvable to identify","type":[[["EmojiResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":46,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"resolveIdentifier","description":"Resolves an EmojiResolvable to an emoji identifier.","inherits":"BaseGuildEmojiManager#resolveIdentifier","inherited":true,"params":[{"name":"emoji","description":"The emoji resolvable to resolve","type":[[["EmojiIdentifierResolvable"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":64,"file":"BaseGuildEmojiManager.js","path":"src/managers"}}],"meta":{"line":13,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"GuildEmojiRoleManager","description":"Manages API methods for roles belonging to emojis and stores their cache.","extends":[[["DataManager"]]],"props":[{"name":"emoji","description":"The emoji belonging to this manager","type":[[["GuildEmoji"]]],"meta":{"line":20,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"guild","description":"The guild belonging to this manager","type":[[["Guild"]]],"meta":{"line":25,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of roles belonging to this emoji","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":33,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"add","description":"Adds a role (or multiple roles) to the list of roles that can use this emoji.","params":[{"name":"roleOrRoles","description":"The role or roles to add","type":[[["RoleResolvable"]],[["Array","<"],["RoleResolvable",">"]],[["Collection","<"],["Snowflake",", "],["Role",">"]]]}],"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":42,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"remove","description":"Removes a role (or multiple roles) from the list of roles that can use this emoji.","params":[{"name":"roleOrRoles","description":"The role or roles to remove","type":[[["RoleResolvable"]],[["Array","<"],["RoleResolvable",">"]],[["Collection","<"],["Snowflake",", "],["Role",">"]]]}],"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":63,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"set","description":"Sets the role(s) that can use this emoji.","examples":["// Set the emoji's roles to a single role\nguildEmoji.roles.set(['391156570408615936'])\n .then(console.log)\n .catch(console.error);","// Remove all roles from an emoji\nguildEmoji.roles.set([])\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"roles","description":"The roles or role ids to apply","type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]}],"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":94,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"_patch","description":"Patches the roles for this manager's cache","access":"private","params":[{"name":"roles","description":"The new roles","type":[[["Array","<"],["Snowflake",">"]]]}],"meta":{"line":109,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"GuildFolderManager","description":"Manages API methods for users and stores their cache.","extends":[[["BaseManager"]]],"props":[{"name":"cache","description":"The guild folder cache (Index, GuildFolder)","type":[[["Collection","<"],["number",", "],["GuildFolder",">"]]],"meta":{"line":17,"file":"GuildFolderManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"GuildFolderManager.js","path":"src/managers"}},{"name":"GuildForumThreadManager","description":"Manages API methods for threads in forum channels and stores their cache.","extends":[[["ThreadManager"]]],"props":[{"name":"channel","description":"The channel this Manager belongs to","type":[[["ForumChannel"]]],"meta":{"line":13,"file":"GuildForumThreadManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["ThreadChannel",">"]]],"meta":{"line":23,"file":"ThreadManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"create","description":"Creates a new thread in the channel.","examples":["// Create a new forum post\nforum.threads\n .create({\n name: 'Food Talk',\n autoArchiveDuration: 60,\n message: {\n content: 'Discuss your favorite food!',\n },\n reason: 'Needed a separate thread for food',\n })\n .then(threadChannel => console.log(threadChannel))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to create a new thread","optional":true,"type":[[["GuildForumThreadCreateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":51,"file":"GuildForumThreadManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a {@link ThreadChannelResolvable} to a {@link ThreadChannel} object.","inherits":"ThreadManager#resolve","inherited":true,"params":[{"name":"thread","description":"The ThreadChannel resolvable to resolve","type":[[["ThreadChannelResolvable"]]]}],"returns":{"types":[[["ThreadChannel"]]],"nullable":true},"meta":{"line":43,"file":"ThreadManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link ThreadChannelResolvable} to a {@link ThreadChannel} id.","inherits":"ThreadManager#resolveId","inherited":true,"params":[{"name":"thread","description":"The ThreadChannel resolvable to resolve","type":[[["ThreadChannelResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":52,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains a thread from Discord, or the channel cache if it's already available.","inherits":"ThreadManager#fetch","inherited":true,"examples":["// Fetch a thread by its id\nchannel.threads.fetch('831955138126104859')\n .then(channel => console.log(channel.name))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to fetch threads. If it is a\nThreadChannelResolvable then the specified thread will be fetched. Fetches all active threads if `undefined`","optional":true,"type":[[["ThreadChannelResolvable"]],[["FetchChannelThreadsOptions"]],[["FetchThreadsOptions"]]]},{"name":"cacheOptions","description":"Additional options for this fetch. The `force` field gets ignored\nif `options` is not a {@link ThreadChannelResolvable}","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise",""]]],"meta":{"line":80,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetchArchived","description":"Obtains a set of archived threads from Discord, requires `READ_MESSAGE_HISTORY` in the parent channel.","inherits":"ThreadManager#fetchArchived","inherited":true,"params":[{"name":"options","description":"The options to fetch archived threads","optional":true,"type":[[["FetchChannelThreadsOptions"]]]},{"name":"cache","description":"Whether to cache the new thread objects if they aren't already","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":122,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetchActive","description":"Obtains the accessible active threads from Discord, requires `READ_MESSAGE_HISTORY` in the parent channel.","inherits":"ThreadManager#fetchActive","inherited":true,"params":[{"name":"cache","description":"Whether to cache the new thread objects if they aren't already","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"options","description":"Options for self-bots where advanced users can specify further options","optional":true,"default":null,"type":[[["FetchChannelThreadsOptions"]]]}],"async":true,"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":168,"file":"ThreadManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"GuildForumThreadManager.js","path":"src/managers"}},{"name":"GuildInviteManager","description":"Manages API methods for GuildInvites and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this Manager belongs to","type":[[["Guild"]]],"meta":{"line":21,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["string",", "],["Invite",">"]]],"meta":{"line":24,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves an InviteResolvable to an Invite object.","params":[{"name":"invite","description":"The invite resolvable to resolve","type":[[["InviteResolvable"]]]}],"returns":{"types":[[["Invite"]]],"nullable":true},"meta":{"line":53,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves an InviteResolvable to an invite code string.","params":[{"name":"invite","description":"The invite resolvable to resolve","type":[[["InviteResolvable"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":62,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches invite(s) from Discord.","examples":["// Fetch all invites from a guild\nguild.invites.fetch()\n .then(console.log)\n .catch(console.error);","// Fetch all invites from a guild without caching\nguild.invites.fetch({ cache: false })\n .then(console.log)\n .catch(console.error);","// Fetch all invites from a channel\nguild.invites.fetch({ channelId: '222197033908436994' })\n .then(console.log)\n .catch(console.error);","// Fetch a single invite\nguild.invites.fetch('bRCvFy9')\n .then(console.log)\n .catch(console.error);","// Fetch a single invite without checking cache\nguild.invites.fetch({ code: 'bRCvFy9', force: true })\n .then(console.log)\n .catch(console.error)","// Fetch a single invite without caching\nguild.invites.fetch({ code: 'bRCvFy9', cache: false })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for fetching guild invite(s)","optional":true,"type":[[["InviteResolvable"]],[["FetchInviteOptions"]],[["FetchInvitesOptions"]]]}],"returns":[[["Promise","<("],["Invite","|"],["Collection","<"],["string",", "],["Invite",">)>"]]],"meta":{"line":122,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"create","description":"Create an invite to the guild from the provided channel.","examples":["// Create an invite to a selected channel\nguild.invites.create('599942732013764608')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"channel","description":"The options for creating the invite from a channel.","type":[[["GuildInvitableChannelResolvable"]]]},{"name":"options","description":"The options for creating the invite from a channel.","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":178,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes an invite.","params":[{"name":"invite","description":"The invite to delete","type":[[["InviteResolvable"]]]},{"name":"reason","description":"Reason for deleting the invite","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":206,"file":"GuildInviteManager.js","path":"src/managers"}}],"meta":{"line":13,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"GuildManager","description":"Manages API methods for Guilds and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["Guild",">"]]],"meta":{"line":46,"file":"GuildManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a GuildResolvable to a Guild object.","params":[{"name":"guild","description":"The guild resolvable to identify","type":[[["GuildResolvable"]]]}],"returns":{"types":[[["Guild"]]],"nullable":true},"meta":{"line":104,"file":"GuildManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link GuildResolvable} to a {@link Guild} id string.","params":[{"name":"guild","description":"The guild resolvable to identify","type":[[["GuildResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":125,"file":"GuildManager.js","path":"src/managers"}},{"name":"create","description":"Creates a guild.\nThis is only available to bots in fewer than 10 guilds.","params":[{"name":"name","description":"The name of the guild","type":[[["string"]]]},{"name":"options","description":"Options for creating the guild","optional":true,"type":[[["GuildCreateOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Guild",">"]]],"description":"The guild that was created"},"meta":{"line":170,"file":"GuildManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or multiple guilds from Discord, or the guild cache if it's already available.","params":[{"name":"options","description":"The guild's id or options","optional":true,"type":[[["GuildResolvable"]],[["FetchGuildOptions"]],[["FetchGuildsOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Guild","|"],["Collection","<"],["Snowflake",", "],["OAuth2Guild",">)>"]]],"meta":{"line":286,"file":"GuildManager.js","path":"src/managers"}}],"meta":{"line":34,"file":"GuildManager.js","path":"src/managers"}},{"name":"GuildMemberManager","description":"Manages API methods for GuildMembers and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":31,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":34,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"me","description":"The client user as a GuildMember of this guild","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":131,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a {@link GuildMemberResolvable} to a {@link GuildMember} object.","params":[{"name":"member","description":"The user that is part of the guild","type":[[["GuildMemberResolvable"]]]}],"returns":{"types":[[["GuildMember"]]],"nullable":true},"meta":{"line":56,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link GuildMemberResolvable} to a member id.","params":[{"name":"member","description":"The user that is part of the guild","type":[[["GuildMemberResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":69,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"add","description":"Adds a user to the guild using OAuth2. Requires the `CREATE_INSTANT_INVITE` permission.","params":[{"name":"user","description":"The user to add to the guild","type":[[["UserResolvable"]]]},{"name":"options","description":"Options for adding the user to the guild","type":[[["AddGuildMemberOptions"]]]}],"async":true,"returns":[[["Promise","<("],["GuildMember","|"],["null",")>"]]],"meta":{"line":96,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches member(s) from Discord, even if they're offline.","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/FetchGuildMember.md}"],"examples":["// Fetch all members from a guild\nguild.members.fetch()\n .then(console.log)\n .catch(console.error);","// Fetch a single member\nguild.members.fetch('66564597481480192')\n .then(console.log)\n .catch(console.error);","// Fetch a single member without checking cache\nguild.members.fetch({ user, force: true })\n .then(console.log)\n .catch(console.error)","// Fetch a single member without caching\nguild.members.fetch({ user, cache: false })\n .then(console.log)\n .catch(console.error);","// Fetch by an array of users including their presences\nguild.members.fetch({ user: ['66564597481480192', '191615925336670208'], withPresences: true })\n .then(console.log)\n .catch(console.error);","// Fetch by query\nguild.members.fetch({ query: 'hydra', limit: 1 })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"If a UserResolvable, the user to fetch.\nIf undefined, fetches all members.\nIf a query, it limits the results to users with similar usernames.","optional":true,"type":[[["UserResolvable"]],[["FetchMemberOptions"]],[["FetchMembersOptions"]]]}],"returns":[[["Promise","<("],["GuildMember","|"],["Collection","<"],["Snowflake",", "],["GuildMember",">)>"]]],"meta":{"line":196,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"fetchMe","description":"Fetches the client user as a GuildMember of the guild.","params":[{"name":"options","description":"The options for fetching the member","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":234,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"search","description":"Searches for members in the guild based on a query.","params":[{"name":"options","description":"Options for searching members","type":[[["GuildSearchMembersOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["GuildMember",">>"]]],"meta":{"line":251,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"list","description":"Lists up to 1000 members of the guild.","params":[{"name":"options","description":"Options for listing members","optional":true,"type":[[["GuildListMembersOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["GuildMember",">>"]]],"meta":{"line":269,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"edit","description":"Edits a member of the guild.\nThe user must be a member of the guild","params":[{"name":"user","description":"The member to edit","type":[[["UserResolvable"]]]},{"name":"data","description":"The data to edit the member with","type":[[["GuildMemberEditData"]]]},{"name":"reason","description":"Reason for editing this user","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":299,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"prune","description":"Prunes members from the guild based on how long they have been inactive.","examples":["// See how many members will be pruned\nguild.members.prune({ dry: true })\n .then(pruned => console.log(`This will prune ${pruned} people!`))\n .catch(console.error);","// Actually prune the members\nguild.members.prune({ days: 1, reason: 'too many people!' })\n .then(pruned => console.log(`I just pruned ${pruned} people!`))\n .catch(console.error);","// Include members with a specified role\nguild.members.prune({ days: 7, roles: ['657259391652855808'] })\n .then(pruned => console.log(`I just pruned ${pruned} people!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options for pruning","optional":true,"type":[[["GuildPruneMembersOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["number","|"],["null",")>"]]],"description":"The number of members that were/will be kicked"},"meta":{"line":381,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"kick","description":"Kicks a user from the guild.\nThe user must be a member of the guild","examples":["// Kick a user by id (or with a user/guild member object)\nguild.members.kick('84484653687267328')\n .then(kickInfo => console.log(`Kicked ${kickInfo.user?.tag ?? kickInfo.tag ?? kickInfo}`))\n .catch(console.error);"],"params":[{"name":"user","description":"The member to kick","type":[[["UserResolvable"]]]},{"name":"reason","description":"Reason for kicking","optional":true,"type":[[["string"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["GuildMember","|"],["User","|"],["Snowflake",")>"]]],"description":"Result object will be resolved as specifically as possible.\nIf the GuildMember cannot be resolved, the User will instead be attempted to be resolved. If that also cannot\nbe resolved, the user's id will be the result."},"meta":{"line":422,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"ban","description":"Bans a user from the guild.","examples":["// Ban a user by id (or with a user/guild member object)\nguild.members.ban('84484653687267328')\n .then(banInfo => console.log(`Banned ${banInfo.user?.tag ?? banInfo.tag ?? banInfo}`))\n .catch(console.error);"],"params":[{"name":"user","description":"The user to ban","type":[[["UserResolvable"]]]},{"name":"options","description":"Options for the ban","optional":true,"type":[[["BanOptions"]]]}],"returns":{"types":[[["Promise","<("],["GuildMember","|"],["User","|"],["Snowflake",")>"]]],"description":"Result object will be resolved as specifically as possible.\nIf the GuildMember cannot be resolved, the User will instead be attempted to be resolved. If that also cannot\nbe resolved, the user id will be the result.\nInternally calls the GuildBanManager#create method."},"meta":{"line":445,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"unban","description":"Unbans a user from the guild. Internally calls the {@link GuildBanManager#remove} method.","examples":["// Unban a user by id (or with a user/guild member object)\nguild.members.unban('84484653687267328')\n .then(user => console.log(`Unbanned ${user.username} from ${guild.name}`))\n .catch(console.error);"],"params":[{"name":"user","description":"The user to unban","type":[[["UserResolvable"]]]},{"name":"reason","description":"Reason for unbanning user","optional":true,"type":[[["string"]]]}],"returns":{"types":[[["Promise",""]]],"description":"The user that was unbanned"},"meta":{"line":460,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"fetchBruteforce","description":"Fetches multiple members from the guild.","see":["https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/FetchGuildMember.md"],"examples":["guild.members.fetchBruteforce()\n.then(members => console.log(`Fetched ${members.size} members`))\n.catch(console.error);"],"params":[{"name":"options","description":"Options for the bruteforce","type":[[["BruteforceOptions"]]]}],"returns":{"types":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"description":"(All) members in the guild"},"meta":{"line":492,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"fetchByMemberSafety","description":"Experimental method to fetch members from the guild.\nLists up to 10000 members of the guild.","params":[{"name":"timeout","description":"Timeout for receipt of members in ms","optional":true,"default":"15_000","type":[[["number"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["GuildMember",">>"]]],"meta":{"line":547,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"fetchMemberList","description":"Fetches multiple members from the guild in the channel.","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/FetchGuildMember.md}"],"examples":["const guild = client.guilds.cache.get('id');\nconst channel = guild.channels.cache.get('id');\n// Overlap (slow)\nfor (let index = 0; index <= guild.memberCount; index += 100) {\n await guild.members.fetchMemberList(channel, index, index !== 100).catch(() => {});\n await client.sleep(500);\n}\n// Non-overlap (fast)\nfor (let index = 0; index <= guild.memberCount; index += 200) {\n await guild.members.fetchMemberList(channel, index == 0 ? 100 : index, index !== 100).catch(() => {});\n await client.sleep(500);\n}\nconsole.log(guild.members.cache.size); // will print the number of members in the guild"],"params":[{"name":"channel","description":"The channel to get members from (Members has VIEW_CHANNEL permission)","type":[[["GuildTextChannelResolvable"]]]},{"name":"offset","description":"Start index of the members to get","optional":true,"default":0,"type":[[["number"]]]},{"name":"double","description":"Whether to use double range","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"retryMax","description":"Number of retries","optional":true,"default":3,"type":[[["number"]]]},{"name":"time","description":"Timeout for receipt of members","optional":true,"default":"10e3","type":[[["number"]]]}],"returns":{"types":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"description":"Members in the guild"},"meta":{"line":610,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"addRole","description":"Adds a role to a member.","params":[{"name":"user","description":"The user to add the role from","type":[[["GuildMemberResolvable"]]]},{"name":"role","description":"The role to add","type":[[["RoleResolvable"]]]},{"name":"reason","description":"Reason for adding the role","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<("],["GuildMember","|"],["User","|"],["Snowflake",")>"]]],"meta":{"line":696,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"removeRole","description":"Removes a role from a member.","params":[{"name":"user","description":"The user to remove the role from","type":[[["UserResolvable"]]]},{"name":"role","description":"The role to remove","type":[[["RoleResolvable"]]]},{"name":"reason","description":"Reason for removing the role","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<("],["GuildMember","|"],["User","|"],["Snowflake",")>"]]],"meta":{"line":712,"file":"GuildMemberManager.js","path":"src/managers"}}],"meta":{"line":23,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"GuildMemberRoleManager","description":"Manages API methods for roles of a GuildMember and stores their cache.","extends":[[["DataManager"]]],"props":[{"name":"member","description":"The GuildMember this manager belongs to","type":[[["GuildMember"]]],"meta":{"line":20,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"guild","description":"The Guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":26,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"cache","description":"The roles of this member","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":34,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"hoist","description":"The role of the member used to hoist them in a separate category in the users list","readonly":true,"nullable":true,"type":[[["Role"]]],"meta":{"line":44,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"icon","description":"The role of the member used to set their role icon","readonly":true,"nullable":true,"type":[[["Role"]]],"meta":{"line":55,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"color","description":"The role of the member used to set their color","readonly":true,"nullable":true,"type":[[["Role"]]],"meta":{"line":66,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"highest","description":"The role of the member with the highest position","readonly":true,"type":[[["Role"]]],"meta":{"line":77,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"premiumSubscriberRole","description":"The premium subscriber role of the guild, if present on the member","readonly":true,"nullable":true,"type":[[["Role"]]],"meta":{"line":86,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"botRole","description":"The managed role this member created when joining the guild, if any\nOnly ever available on bots","readonly":true,"nullable":true,"type":[[["Role"]]],"meta":{"line":96,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"add","description":"Adds a role (or multiple roles) to the member.","params":[{"name":"roleOrRoles","description":"The role or roles to add","type":[[["RoleResolvable"]],[["Array","<"],["RoleResolvable",">"]],[["Collection","<"],["Snowflake",", "],["Role",">"]]]},{"name":"reason","description":"Reason for adding the role(s)","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":107,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"remove","description":"Removes a role (or multiple roles) from the member.","params":[{"name":"roleOrRoles","description":"The role or roles to remove","type":[[["RoleResolvable"]],[["Array","<"],["RoleResolvable",">"]],[["Collection","<"],["Snowflake",", "],["Role",">"]]]},{"name":"reason","description":"Reason for removing the role(s)","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":138,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"set","description":"Sets the roles applied to the member.","examples":["// Set the member's roles to a single role\nguildMember.roles.set(['391156570408615936'])\n .then(console.log)\n .catch(console.error);","// Remove all the roles from a member\nguildMember.roles.set([])\n .then(member => console.log(`Member roles is now of ${member.roles.cache.size} size`))\n .catch(console.error);"],"params":[{"name":"roles","description":"The roles or role ids to apply","type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"reason","description":"Reason for applying the roles","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":180,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"GuildScheduledEventManager","description":"Manages API methods for GuildScheduledEvents and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":22,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["GuildScheduledEvent",">"]]],"meta":{"line":25,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"create","description":"Creates a new guild scheduled event.","params":[{"name":"options","description":"Options for creating the guild scheduled event","type":[[["GuildScheduledEventCreateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":69,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or more guild scheduled events from Discord, or the guild cache if it's already available.","params":[{"name":"options","description":"The id of the guild scheduled event or options","optional":true,"type":[[["GuildScheduledEventResolvable"]],[["FetchGuildScheduledEventOptions"]],[["FetchGuildScheduledEventsOptions"]]]}],"async":true,"returns":[[["Promise","<("],["GuildScheduledEvent","|"],["Collection","<"],["Snowflake",", "],["GuildScheduledEvent",">)>"]]],"meta":{"line":136,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"edit","description":"Edits a guild scheduled event.","params":[{"name":"guildScheduledEvent","description":"The guild scheduled event to edit","type":[[["GuildScheduledEventResolvable"]]]},{"name":"options","description":"Options to edit the guild scheduled event","type":[[["GuildScheduledEventEditOptions"]]]}],"async":true,"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":189,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes a guild scheduled event.","params":[{"name":"guildScheduledEvent","description":"The guild scheduled event to delete","type":[[["GuildScheduledEventResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"fetchSubscribers","description":"Fetches subscribers of a guild scheduled event.","params":[{"name":"guildScheduledEvent","description":"The guild scheduled event to fetch subscribers of","type":[[["GuildScheduledEventResolvable"]]]},{"name":"options","description":"Options for fetching the subscribers","optional":true,"default":"{}","type":[[["FetchGuildScheduledEventSubscribersOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["GuildScheduledEventUser",">>"]]],"meta":{"line":274,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":14,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"GuildSettingManager","description":"Manages API methods for users and stores their cache.","see":["{@link https://luna.gitlab.io/discord-unofficial-docs/user_settings.html}"],"extends":[[["BaseManager"]]],"props":[{"name":"rawSetting","description":"Raw data","type":[[["Object"]]],"meta":{"line":16,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"guildId","description":"Guild Id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":21,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"guild","description":"Get the guild","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":28,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"suppressEveryone","description":"Notification setting > Suppress `@everyone` and `@here`","nullable":true,"type":[[["boolean"]]],"meta":{"line":43,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"suppressRoles","description":"Notification setting > Suppress all role `@mention`","nullable":true,"type":[[["boolean"]]],"meta":{"line":50,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"muteScheduledEvents","description":"Notification setting > Mute new events","nullable":true,"type":[[["boolean"]]],"meta":{"line":57,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"messageNotifications","description":"Notification setting > Message notifications\n* `0` = All messages\n* `1` = Only @mentions\n* `2` = Nothing","nullable":true,"type":[[["number"]]],"meta":{"line":67,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"flags","description":"Flags (unknown)","nullable":true,"type":[[["number"]]],"meta":{"line":74,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"mobilePush","description":"Notification setting > Mobile push notifications","nullable":true,"type":[[["boolean"]]],"meta":{"line":81,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"muted","description":"Mute server","nullable":true,"type":[[["boolean"]]],"meta":{"line":88,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"muteConfig","description":"Mute config (muted = true)\n* `muteConfig.endTime`: End time (Date)\n* `muteConfig.selectedTimeWindow`: Selected time window (seconds) (number)","nullable":true,"type":[[["Object"]]],"meta":{"line":97,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"hideMutedChannels","description":"Hide muted channels","nullable":true,"type":[[["boolean"]]],"meta":{"line":109,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"channelOverrides","description":"Channel overrides (unknown)","nullable":true,"type":[[["Array"]]],"meta":{"line":116,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"notifyHighlights","description":"Notification setting > Suppress highlights\n* `0` = ??? (unknown)\n* `1` = Enable\n* `2` = Disable","nullable":true,"type":[[["number"]]],"meta":{"line":126,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"version","description":"Version (unknown)","nullable":true,"type":[[["number"]]],"meta":{"line":133,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"_patch","description":"Patch data file","access":"private","params":[{"name":"data","description":"Raw Data to patch","type":[[["Object"]]]}],"meta":{"line":36,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"edit","description":"Edit guild settings","params":[{"name":"data","description":"Data to edit","type":[[["Object"]]]}],"async":true,"returns":[[["Promise","<"],["GuildSettingManager",">"]]],"meta":{"line":141,"file":"GuildSettingManager.js","path":"src/managers"}}],"meta":{"line":9,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"GuildStickerManager","description":"Manages API methods for Guild Stickers and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":21,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of Guild Stickers","type":[[["Collection","<"],["Snowflake",", "],["Sticker",">"]]],"meta":{"line":24,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"create","description":"Creates a new custom sticker in the guild.","examples":["// Create a new sticker from a URL\nguild.stickers.create('https://i.imgur.com/w3duR07.png', 'rip', 'headstone')\n .then(sticker => console.log(`Created new sticker with name ${sticker.name}!`))\n .catch(console.error);","// Create a new sticker from a file on your computer\nguild.stickers.create('./memes/banana.png', 'banana', 'banana')\n .then(sticker => console.log(`Created new sticker with name ${sticker.name}!`))\n .catch(console.error);"],"params":[{"name":"file","description":"The file for the sticker","type":[[["BufferResolvable"]],[["Stream"]],[["FileOptions"]],[["MessageAttachment"]]]},{"name":"name","description":"The name for the sticker","type":[[["string"]]]},{"name":"tags","description":"The Discord name of a unicode emoji representing the sticker's expression","type":[[["string"]]]},{"name":"options","description":"Options","optional":true,"type":[[["GuildStickerCreateOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Sticker",">"]]],"description":"The created sticker"},"meta":{"line":59,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a StickerResolvable to a Sticker object.","params":[{"name":"sticker","description":"The Sticker resolvable to identify","type":[[["StickerResolvable"]]]}],"returns":{"types":[[["Sticker"]]],"nullable":true},"meta":{"line":79,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a StickerResolvable to a Sticker id string.","params":[{"name":"sticker","description":"The Sticker resolvable to identify","type":[[["StickerResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":88,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"edit","description":"Edits a sticker.","params":[{"name":"sticker","description":"The sticker to edit","type":[[["StickerResolvable"]]]},{"name":"data","description":"The new data for the sticker","optional":true,"type":[[["GuildStickerEditData"]]]},{"name":"reason","description":"Reason for editing this sticker","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Sticker",">"]]],"meta":{"line":104,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes a sticker.","params":[{"name":"sticker","description":"The sticker to delete","type":[[["StickerResolvable"]]]},{"name":"reason","description":"Reason for deleting this sticker","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":128,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or more stickers from Discord, or the sticker cache if they're already available.","examples":["// Fetch all stickers from the guild\nmessage.guild.stickers.fetch()\n .then(stickers => console.log(`There are ${stickers.size} stickers.`))\n .catch(console.error);","// Fetch a single sticker\nmessage.guild.stickers.fetch('222078108977594368')\n .then(sticker => console.log(`The sticker name is: ${sticker.name}`))\n .catch(console.error);"],"params":[{"name":"id","description":"The Sticker's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Sticker","|"],["Collection","<"],["Snowflake",", "],["Sticker",">)>"]]],"meta":{"line":151,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"fetchUser","description":"Fetches the user who uploaded this sticker, if this is a guild sticker.","params":[{"name":"sticker","description":"The sticker to fetch the user for","type":[[["StickerResolvable"]]]}],"async":true,"returns":[[["Promise",""]]],"meta":{"line":170,"file":"GuildStickerManager.js","path":"src/managers"}}],"meta":{"line":13,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"GuildTextThreadManager","description":"Manages API methods for {@link ThreadChannel} objects and stores their cache.","extends":[[["ThreadManager"]]],"props":[{"name":"channel","description":"The channel this Manager belongs to","type":[[["TextChannel"]],[["NewsChannel"]]],"meta":{"line":13,"file":"GuildTextThreadManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["ThreadChannel",">"]]],"meta":{"line":23,"file":"ThreadManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"create","description":"Creates a new thread in the channel.","examples":["// Create a new public thread\nchannel.threads\n .create({\n name: 'food-talk',\n autoArchiveDuration: 60,\n reason: 'Needed a separate thread for food',\n })\n .then(threadChannel => console.log(threadChannel))\n .catch(console.error);","// Create a new private thread\nchannel.threads\n .create({\n name: 'mod-talk',\n autoArchiveDuration: 60,\n type: 'GUILD_PRIVATE_THREAD',\n reason: 'Needed a separate thread for moderation',\n })\n .then(threadChannel => console.log(threadChannel))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to create a new thread","optional":true,"type":[[["GuildTextThreadCreateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":58,"file":"GuildTextThreadManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a {@link ThreadChannelResolvable} to a {@link ThreadChannel} object.","inherits":"ThreadManager#resolve","inherited":true,"params":[{"name":"thread","description":"The ThreadChannel resolvable to resolve","type":[[["ThreadChannelResolvable"]]]}],"returns":{"types":[[["ThreadChannel"]]],"nullable":true},"meta":{"line":43,"file":"ThreadManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link ThreadChannelResolvable} to a {@link ThreadChannel} id.","inherits":"ThreadManager#resolveId","inherited":true,"params":[{"name":"thread","description":"The ThreadChannel resolvable to resolve","type":[[["ThreadChannelResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":52,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains a thread from Discord, or the channel cache if it's already available.","inherits":"ThreadManager#fetch","inherited":true,"examples":["// Fetch a thread by its id\nchannel.threads.fetch('831955138126104859')\n .then(channel => console.log(channel.name))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to fetch threads. If it is a\nThreadChannelResolvable then the specified thread will be fetched. Fetches all active threads if `undefined`","optional":true,"type":[[["ThreadChannelResolvable"]],[["FetchChannelThreadsOptions"]],[["FetchThreadsOptions"]]]},{"name":"cacheOptions","description":"Additional options for this fetch. The `force` field gets ignored\nif `options` is not a {@link ThreadChannelResolvable}","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise",""]]],"meta":{"line":80,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetchArchived","description":"Obtains a set of archived threads from Discord, requires `READ_MESSAGE_HISTORY` in the parent channel.","inherits":"ThreadManager#fetchArchived","inherited":true,"params":[{"name":"options","description":"The options to fetch archived threads","optional":true,"type":[[["FetchChannelThreadsOptions"]]]},{"name":"cache","description":"Whether to cache the new thread objects if they aren't already","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":122,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetchActive","description":"Obtains the accessible active threads from Discord, requires `READ_MESSAGE_HISTORY` in the parent channel.","inherits":"ThreadManager#fetchActive","inherited":true,"params":[{"name":"cache","description":"Whether to cache the new thread objects if they aren't already","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"options","description":"Options for self-bots where advanced users can specify further options","optional":true,"default":null,"type":[[["FetchChannelThreadsOptions"]]]}],"async":true,"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":168,"file":"ThreadManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"GuildTextThreadManager.js","path":"src/managers"}},{"name":"InteractionManager","description":"Manages API methods for InteractionResponse and holds their cache.","extends":[[["CachedManager"]]],"props":[{"name":"channel","description":"The channel that the messages belong to","type":[[["TextBasedChannels"]]],"meta":{"line":18,"file":"InteractionManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of InteractionResponse","type":[[["Collection","<"],["Snowflake",", "],["InteractionResponse",">"]]],"meta":{"line":21,"file":"InteractionManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"InteractionManager.js","path":"src/managers"}},{"name":"MessageManager","description":"Manages API methods for Messages and holds their cache.","extends":[[["CachedManager"]]],"props":[{"name":"channel","description":"The channel that the messages belong to","type":[[["TextBasedChannels"]]],"meta":{"line":22,"file":"MessageManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of Messages","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]]],"meta":{"line":25,"file":"MessageManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetch","description":"Gets a message, or messages, from this channel.\nThe returned Collection does not contain reaction users of the messages if they were not cached.\nThose need to be fetched separately in such a case.","examples":["// Get message\nchannel.messages.fetch('99539446449315840')\n .then(message => console.log(message.content))\n .catch(console.error);","// Get messages\nchannel.messages.fetch({ limit: 10 })\n .then(messages => console.log(`Received ${messages.size} messages`))\n .catch(console.error);","// Get messages and filter by user id\nchannel.messages.fetch()\n .then(messages => console.log(`${messages.filter(m => m.author.id === '84484653687267328').size} messages`))\n .catch(console.error);"],"params":[{"name":"message","description":"The id of the message to fetch, or query parameters.","optional":true,"type":[[["Snowflake"]],[["ChannelLogsQueryOptions"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["Collection","<"],["Snowflake",", "],["Message",">)>"]]],"meta":{"line":68,"file":"MessageManager.js","path":"src/managers"}},{"name":"fetchPinned","description":"Fetches the pinned messages of this channel and returns a collection of them.\nThe returned Collection does not contain any reaction data of the messages.\nThose need to be fetched separately.","examples":["// Get pinned messages\nchannel.messages.fetchPinned()\n .then(messages => console.log(`Received ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"cache","description":"Whether to cache the message(s)","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":84,"file":"MessageManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a {@link MessageResolvable} to a {@link Message} object.","params":[{"name":"message","description":"The message resolvable to resolve","type":[[["MessageResolvable"]]]}],"returns":{"types":[[["Message"]]],"nullable":true},"meta":{"line":98,"file":"MessageManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link MessageResolvable} to a {@link Message} id.","params":[{"name":"message","description":"The message resolvable to resolve","type":[[["MessageResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":107,"file":"MessageManager.js","path":"src/managers"}},{"name":"edit","description":"Edits a message, even if it's not cached.","params":[{"name":"message","description":"The message to edit","type":[[["MessageResolvable"]]]},{"name":"options","description":"The options to edit the message","type":[[["string"]],[["MessageEditOptions"]],[["MessagePayload"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":122,"file":"MessageManager.js","path":"src/managers"}},{"name":"crosspost","description":"Publishes a message in an announcement channel to all channels following it, even if it's not cached.","params":[{"name":"message","description":"The message to publish","type":[[["MessageResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":173,"file":"MessageManager.js","path":"src/managers"}},{"name":"pin","description":"Pins a message to the channel's pinned messages, even if it's not cached.","params":[{"name":"message","description":"The message to pin","type":[[["MessageResolvable"]]]},{"name":"reason","description":"Reason for pinning","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":187,"file":"MessageManager.js","path":"src/managers"}},{"name":"unpin","description":"Unpins a message from the channel's pinned messages, even if it's not cached.","params":[{"name":"message","description":"The message to unpin","type":[[["MessageResolvable"]]]},{"name":"reason","description":"Reason for unpinning","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":200,"file":"MessageManager.js","path":"src/managers"}},{"name":"react","description":"Adds a reaction to a message, even if it's not cached.","params":[{"name":"message","description":"The message to react to","type":[[["MessageResolvable"]]]},{"name":"emoji","description":"The emoji to react with","type":[[["EmojiIdentifierResolvable"]]]},{"name":"burst","description":"Super Reactions (Discord Nitro only)","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":214,"file":"MessageManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes a message, even if it's not cached.","params":[{"name":"message","description":"The message to delete","type":[[["MessageResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":242,"file":"MessageManager.js","path":"src/managers"}},{"name":"search","description":"Search Messages in the channel.","params":[{"name":"options","description":"Performs a search within the channel.","type":[[["MessageSearchOptions"]]]}],"async":true,"returns":[[["MessageSearchResult"]]],"meta":{"line":304,"file":"MessageManager.js","path":"src/managers"}}],"meta":{"line":14,"file":"MessageManager.js","path":"src/managers"}},{"name":"PermissionOverwriteManager","description":"Manages API methods for guild channel permission overwrites and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"channel","description":"The channel of the permission overwrite this manager belongs to","type":[[["GuildChannel"]]],"meta":{"line":32,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["PermissionOverwrites",">"]]],"meta":{"line":41,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"set","description":"Replaces the permission overwrites in this channel.","examples":["message.channel.permissionOverwrites.set([\n {\n id: message.author.id,\n deny: [Permissions.FLAGS.VIEW_CHANNEL],\n },\n], 'Needed to change permissions');"],"params":[{"name":"overwrites","description":"Permission overwrites the channel gets updated with","type":[[["Array","<"],["OverwriteResolvable",">"]],[["Collection","<"],["Snowflake",", "],["OverwriteResolvable",">"]]]},{"name":"reason","description":"Reason for updating the channel overwrites","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":65,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"upsert","description":"Creates or edits permission overwrites for a user or role in this channel.","access":"private","params":[{"name":"userOrRole","description":"The user or role to update","type":[[["RoleResolvable"]],[["UserResolvable"]]]},{"name":"options","description":"The options for the update","type":[[["PermissionOverwriteOptions"]]]},{"name":"overwriteOptions","description":"The extra information for the update","optional":true,"type":[[["GuildChannelOverwriteOptions"]]]},{"name":"existing","description":"The existing overwrites to merge with this update","optional":true,"type":[[["PermissionOverwrites"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":91,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"create","description":"Creates permission overwrites for a user or role in this channel, or replaces them if already present.","examples":["// Create or Replace permission overwrites for a message author\nmessage.channel.permissionOverwrites.create(message.author, {\n SEND_MESSAGES: false\n})\n .then(channel => console.log(channel.permissionOverwrites.cache.get(message.author.id)))\n .catch(console.error);"],"params":[{"name":"userOrRole","description":"The user or role to update","type":[[["RoleResolvable"]],[["UserResolvable"]]]},{"name":"options","description":"The options for the update","type":[[["PermissionOverwriteOptions"]]]},{"name":"overwriteOptions","description":"The extra information for the update","optional":true,"type":[[["GuildChannelOverwriteOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":126,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"edit","description":"Edits permission overwrites for a user or role in this channel, or creates an entry if not already present.","examples":["// Edit or Create permission overwrites for a message author\nmessage.channel.permissionOverwrites.edit(message.author, {\n SEND_MESSAGES: false\n})\n .then(channel => console.log(channel.permissionOverwrites.cache.get(message.author.id)))\n .catch(console.error);"],"params":[{"name":"userOrRole","description":"The user or role to update","type":[[["RoleResolvable"]],[["UserResolvable"]]]},{"name":"options","description":"The options for the update","type":[[["PermissionOverwriteOptions"]]]},{"name":"overwriteOptions","description":"The extra information for the update","optional":true,"type":[[["GuildChannelOverwriteOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":144,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes permission overwrites for a user or role in this channel.","params":[{"name":"userOrRole","description":"The user or role to delete","type":[[["UserResolvable"]],[["RoleResolvable"]]]},{"name":"reason","description":"The reason for deleting the overwrite","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":157,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":17,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"PresenceManager","description":"Manages API methods for Presences and holds their cache.","extends":[[["CachedManager"]]],"props":[{"name":"cache","description":"The cache of Presences","type":[[["Collection","<"],["Snowflake",", "],["Presence",">"]]],"meta":{"line":15,"file":"PresenceManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a {@link PresenceResolvable} to a {@link Presence} object.","params":[{"name":"presence","description":"The presence resolvable to resolve","type":[[["PresenceResolvable"]]]}],"returns":{"types":[[["Presence"]]],"nullable":true},"meta":{"line":38,"file":"PresenceManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link PresenceResolvable} to a {@link Presence} id.","params":[{"name":"presence","description":"The presence resolvable to resolve","type":[[["PresenceResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"PresenceManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"PresenceManager.js","path":"src/managers"}},{"name":"ReactionManager","description":"Manages API methods for reactions and holds their cache.","extends":[[["CachedManager"]]],"props":[{"name":"message","description":"The message that this manager belongs to","type":[[["Message"]]],"meta":{"line":18,"file":"ReactionManager.js","path":"src/managers"}},{"name":"cache","description":"The reaction cache of this manager","type":[[["Collection","<("],["string","|"],["Snowflake","), "],["MessageReaction",">"]]],"meta":{"line":25,"file":"ReactionManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a {@link MessageReactionResolvable} to a {@link MessageReaction} object.","params":[{"name":"reaction","description":"The MessageReaction to resolve","type":[[["MessageReactionResolvable"]]]}],"returns":{"types":[[["MessageReaction"]]],"nullable":true},"meta":{"line":39,"file":"ReactionManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link MessageReactionResolvable} to a {@link MessageReaction} id.","params":[{"name":"reaction","description":"The MessageReaction to resolve","type":[[["MessageReactionResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":48,"file":"ReactionManager.js","path":"src/managers"}},{"name":"removeAll","description":"Removes all reactions from a message.","async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":61,"file":"ReactionManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"ReactionManager.js","path":"src/managers"}},{"name":"ReactionUserManager","description":"Manages API methods for users who reacted to a reaction and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"reaction","description":"The reaction that this manager belongs to","type":[[["MessageReaction"]]],"meta":{"line":20,"file":"ReactionUserManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["DiscordUser",">"]]],"meta":{"line":23,"file":"ReactionUserManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetch","description":"Fetches all the users that gave this reaction. Resolves with a collection of users, mapped by their ids.","params":[{"name":"options","description":"Options for fetching the users","optional":true,"type":[[["FetchReactionUsersOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["DiscordUser",">>"]]],"meta":{"line":41,"file":"ReactionUserManager.js","path":"src/managers"}},{"name":"remove","description":"Removes a user from this reaction.","params":[{"name":"user","description":"The user to remove the reaction of","optional":true,"default":"this.client.user","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["MessageReaction",">"]]],"meta":{"line":60,"file":"ReactionUserManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"ReactionUserManager.js","path":"src/managers"}},{"name":"RelationshipManager","description":"Manages API methods for Relationships and stores their cache.","props":[{"name":"client","description":"The client that instantiated this manager.","type":[[["Client"]]],"meta":{"line":20,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"cache","description":"A collection of users this manager is caching. (Type: Number)","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["RelationshipTypes",">"]]],"meta":{"line":26,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"friendCache","description":"Get all friends","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":35,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"blockedCache","description":"Get all blocked users","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":47,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"incomingCache","description":"Get all incoming friend requests","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":59,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"outgoingCache","description":"Get all outgoing friend requests","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":71,"file":"RelationshipManager.js","path":"src/managers"}}],"methods":[{"name":"toArray","description":"Return array of cache","returns":[[["Array","<{"],["id",": "],["Snowflake",", "],["type",": "],["RelationshipTypes","}>"]]],"meta":{"line":82,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"_setup","access":"private","params":[{"name":"users","description":"An array of users to add to the cache","type":[[["Array","<"],["User",">"]]]}],"returns":[[["void"]]],"meta":{"line":91,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link UserResolvable} to a {@link User} id.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":104,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains a user from Discord, or the user cache if it's already available.","params":[{"name":"user","description":"The user to fetch","optional":true,"type":[[["UserResolvable"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<("],["RelationshipTypes","|"],["RelationshipManager",")>"]]],"meta":{"line":118,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"deleteFriend","description":"Deletes a friend relationship with a client user.","params":[{"name":"user","description":"Target","type":[[["UserResolvable"]]]}],"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":140,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"deleteBlocked","description":"Deletes a blocked relationship with a client user.","params":[{"name":"user","description":"Target","type":[[["UserResolvable"]]]}],"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":152,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"sendFriendRequest","description":"Sends a friend request.","params":[{"name":"username","description":"Username of the user to send the request to","type":[[["string"]]]},{"name":"discriminator","description":"Discriminator of the user to send the request to","nullable":true,"type":[[["number"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":165,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"cancelFriendRequest","description":"Cancels a friend request.","params":[{"name":"user","description":"the user you want to delete","type":[[["UserResolvable"]]]}],"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":183,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"addFriend","description":"Accepts a friend request.","params":[{"name":"user","description":"The user to add as a friend","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":203,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"setNickname","description":"Changes the nickname of a friend.","params":[{"name":"user","description":"The user to change the nickname","type":[[["UserResolvable"]]]},{"name":"nickname","description":"New nickname","nullable":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":226,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"addBlocked","description":"Blocks a user.","params":[{"name":"user","description":"User to block","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":242,"file":"RelationshipManager.js","path":"src/managers"}}],"meta":{"line":14,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"RoleManager","description":"Manages API methods for roles and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild belonging to this manager","type":[[["Guild"]]],"meta":{"line":34,"file":"RoleManager.js","path":"src/managers"}},{"name":"cache","description":"The role cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":37,"file":"RoleManager.js","path":"src/managers"}},{"name":"everyone","description":"The `@everyone` role of the guild","readonly":true,"type":[[["Role"]]],"meta":{"line":329,"file":"RoleManager.js","path":"src/managers"}},{"name":"premiumSubscriberRole","description":"The premium subscriber role of the guild, if any","readonly":true,"nullable":true,"type":[[["Role"]]],"meta":{"line":338,"file":"RoleManager.js","path":"src/managers"}},{"name":"highest","description":"The role with the highest position in the cache","readonly":true,"type":[[["Role"]]],"meta":{"line":347,"file":"RoleManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetch","description":"Obtains a role from Discord, or the role cache if they're already available.","examples":["// Fetch all roles from the guild\nmessage.guild.roles.fetch()\n .then(roles => console.log(`There are ${roles.size} roles.`))\n .catch(console.error);","// Fetch a single role\nmessage.guild.roles.fetch('222078108977594368')\n .then(role => console.log(`The role color is: ${role.color}`))\n .catch(console.error);"],"params":[{"name":"id","description":"The role's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<(?"],["Role","|"],["Collection","<"],["Snowflake",", "],["Role",">)>"]]],"meta":{"line":63,"file":"RoleManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a {@link RoleResolvable} to a {@link Role} object.","params":[{"name":"role","description":"The role resolvable to resolve","type":[[["RoleResolvable"]]]}],"returns":{"types":[[["Role"]]],"nullable":true},"meta":{"line":83,"file":"RoleManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link RoleResolvable} to a {@link Role} id.","params":[{"name":"role","description":"The role resolvable to resolve","type":[[["RoleResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":92,"file":"RoleManager.js","path":"src/managers"}},{"name":"create","description":"Creates a new role in the guild with given information.\nThe position will silently reset to 1 if an invalid one is provided, or none.","examples":["// Create a new role\nguild.roles.create()\n .then(console.log)\n .catch(console.error);","// Create a new role with data and a reason\nguild.roles.create({\n name: 'Super Cool Blue People',\n color: 'BLUE',\n reason: 'we needed a role for Super Cool People',\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for creating the new role","optional":true,"type":[[["CreateRoleOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":137,"file":"RoleManager.js","path":"src/managers"}},{"name":"edit","description":"Edits a role of the guild.","examples":["// Edit a role\nguild.roles.edit('222079219327434752', { name: 'buddies' })\n .then(updated => console.log(`Edited role name to ${updated.name}`))\n .catch(console.error);"],"params":[{"name":"role","description":"The role to edit","type":[[["RoleResolvable"]]]},{"name":"data","description":"The new data for the role","type":[[["RoleData"]]]},{"name":"reason","description":"Reason for editing this role","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":179,"file":"RoleManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes a role.","examples":["// Delete a role\nguild.roles.delete('222079219327434752', 'The role needed to go')\n .then(() => console.log('Deleted the role.'))\n .catch(console.error);"],"params":[{"name":"role","description":"The role to delete","type":[[["RoleResolvable"]]]},{"name":"reason","description":"Reason for deleting the role","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":220,"file":"RoleManager.js","path":"src/managers"}},{"name":"setPosition","description":"Sets the new position of the role.","examples":["// Set the position of the role\nguild.roles.setPosition('222197033908436994', 1)\n .then(updated => console.log(`Role position: ${updated.position}`))\n .catch(console.error);"],"params":[{"name":"role","description":"The role to change the position of","type":[[["RoleResolvable"]]]},{"name":"position","description":"The new position for the role","type":[[["number"]]]},{"name":"options","description":"Options for setting the position","optional":true,"type":[[["SetRolePositionOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":238,"file":"RoleManager.js","path":"src/managers"}},{"name":"setPositions","description":"Batch-updates the guild's role positions","examples":["guild.roles.setPositions([{ role: roleId, position: updatedRoleIndex }])\n .then(guild => console.log(`Role positions updated for ${guild}`))\n .catch(console.error);"],"params":[{"name":"rolePositions","description":"Role positions to update","type":[[["Array","<"],["GuildRolePosition",">"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":273,"file":"RoleManager.js","path":"src/managers"}},{"name":"comparePositions","description":"Compares the positions of two roles.","params":[{"name":"role1","description":"First role to compare","type":[[["RoleResolvable"]]]},{"name":"role2","description":"Second role to compare","type":[[["RoleResolvable"]]]}],"returns":{"types":[[["number"]]],"description":"Negative number if the first role's position is lower (second role's is higher),\npositive number if the first's is higher (second's is lower), 0 if equal"},"meta":{"line":297,"file":"RoleManager.js","path":"src/managers"}},{"name":"botRoleFor","description":"Gets the managed role a user created when joining the guild, if any\nOnly ever available for bots","params":[{"name":"user","description":"The user to access the bot role for","type":[[["UserResolvable"]]]}],"returns":{"types":[[["Role"]]],"nullable":true},"meta":{"line":318,"file":"RoleManager.js","path":"src/managers"}}],"meta":{"line":19,"file":"RoleManager.js","path":"src/managers"}},{"name":"SessionManager","description":"Manages API methods for users and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"cache","description":"The cache of Sessions","type":[[["Collection","<"],["string",", "],["Session",">"]]],"meta":{"line":14,"file":"SessionManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetch","description":"Fetch all sessions of the client.","returns":[[["Promise","<"],["SessionManager",">"]]],"meta":{"line":24,"file":"SessionManager.js","path":"src/managers"}},{"name":"logoutAllDevices","description":"Logout the client (remote).","params":[{"name":"mfaCode","description":"MFA code (if 2FA is enabled)","type":[[["string"]],[["null"]]]}],"returns":[[["Promise","<"],["undefined",">"]]],"meta":{"line":45,"file":"SessionManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"SessionManager.js","path":"src/managers"}},{"name":"StageInstanceManager","description":"Manages API methods for {@link StageInstance} objects and holds their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":20,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["StageInstance",">"]]],"meta":{"line":23,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"create","description":"Creates a new stage instance.","examples":["// Create a stage instance\nguild.stageInstances.create('1234567890123456789', {\n topic: 'A very creative topic',\n privacyLevel: 'GUILD_ONLY'\n})\n .then(stageInstance => console.log(stageInstance))\n .catch(console.error);"],"params":[{"name":"channel","description":"The stage channel to associate the created stage instance to","type":[[["StageChannelResolvable"]]]},{"name":"options","description":"The options to create the stage instance","type":[[["StageInstanceCreateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":60,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches the stage instance associated with a stage channel, if it exists.","examples":["// Fetch a stage instance\nguild.stageInstances.fetch('1234567890123456789')\n .then(stageInstance => console.log(stageInstance))\n .catch(console.error);"],"params":[{"name":"channel","description":"The stage channel whose associated stage instance is to be fetched","type":[[["StageChannelResolvable"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":93,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"edit","description":"Edits an existing stage instance.","examples":["// Edit a stage instance\nguild.stageInstances.edit('1234567890123456789', { topic: 'new topic' })\n .then(stageInstance => console.log(stageInstance))\n .catch(console.error);"],"params":[{"name":"channel","description":"The stage channel whose associated stage instance is to be edited","type":[[["StageChannelResolvable"]]]},{"name":"options","description":"The options to edit the stage instance","type":[[["StageInstanceEditOptions"]]]}],"async":true,"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":124,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes an existing stage instance.","params":[{"name":"channel","description":"The stage channel whose associated stage instance is to be deleted","type":[[["StageChannelResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":154,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"ThreadManager","description":"Manages API methods for {@link ThreadChannel} objects and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"channel","description":"The channel this Manager belongs to","type":[[["NewsChannel"]],[["TextChannel"]]],"meta":{"line":20,"file":"ThreadManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["ThreadChannel",">"]]],"meta":{"line":23,"file":"ThreadManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a {@link ThreadChannelResolvable} to a {@link ThreadChannel} object.","params":[{"name":"thread","description":"The ThreadChannel resolvable to resolve","type":[[["ThreadChannelResolvable"]]]}],"returns":{"types":[[["ThreadChannel"]]],"nullable":true},"meta":{"line":43,"file":"ThreadManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link ThreadChannelResolvable} to a {@link ThreadChannel} id.","params":[{"name":"thread","description":"The ThreadChannel resolvable to resolve","type":[[["ThreadChannelResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":52,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains a thread from Discord, or the channel cache if it's already available.","examples":["// Fetch a thread by its id\nchannel.threads.fetch('831955138126104859')\n .then(channel => console.log(channel.name))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to fetch threads. If it is a\nThreadChannelResolvable then the specified thread will be fetched. Fetches all active threads if `undefined`","optional":true,"type":[[["ThreadChannelResolvable"]],[["FetchChannelThreadsOptions"]],[["FetchThreadsOptions"]]]},{"name":"cacheOptions","description":"Additional options for this fetch. The `force` field gets ignored\nif `options` is not a {@link ThreadChannelResolvable}","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise",""]]],"meta":{"line":80,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetchArchived","description":"Obtains a set of archived threads from Discord, requires `READ_MESSAGE_HISTORY` in the parent channel.","params":[{"name":"options","description":"The options to fetch archived threads","optional":true,"type":[[["FetchChannelThreadsOptions"]]]},{"name":"cache","description":"Whether to cache the new thread objects if they aren't already","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":122,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetchActive","description":"Obtains the accessible active threads from Discord, requires `READ_MESSAGE_HISTORY` in the parent channel.","params":[{"name":"cache","description":"Whether to cache the new thread objects if they aren't already","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"options","description":"Options for self-bots where advanced users can specify further options","optional":true,"default":null,"type":[[["FetchChannelThreadsOptions"]]]}],"async":true,"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":168,"file":"ThreadManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"ThreadManager.js","path":"src/managers"}},{"name":"ThreadMemberManager","description":"Manages API methods for GuildMembers and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"thread","description":"The thread this manager belongs to","type":[[["ThreadChannel"]]],"meta":{"line":23,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["ThreadMember",">"]]],"meta":{"line":26,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"me","description":"The client user as a ThreadMember of this ThreadChannel","readonly":true,"nullable":true,"type":[[["ThreadMember"]]],"meta":{"line":56,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetchMe","description":"Fetches the client user as a ThreadMember of the thread.","params":[{"name":"options","description":"The options for fetching the member","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise","<"],["ThreadMember",">"]]],"meta":{"line":47,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a {@link ThreadMemberResolvable} to a {@link ThreadMember} object.","params":[{"name":"member","description":"The user that is part of the thread","type":[[["ThreadMemberResolvable"]]]}],"returns":{"types":[[["GuildMember"]]],"nullable":true},"meta":{"line":72,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link ThreadMemberResolvable} to a {@link ThreadMember} id string.","params":[{"name":"member","description":"The user that is part of the guild","type":[[["ThreadMemberResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":85,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"add","description":"Adds a member to the thread.","params":[{"name":"member","description":"The member to add","type":[[["UserResolvable"]],[["me","'"]]]},{"name":"reason","description":"The reason for adding this member","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Snowflake",">"]]],"meta":{"line":98,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"remove","description":"Remove a user from the thread.","params":[{"name":"id","description":"The id of the member to remove","type":[[["Snowflake"]],[["me","'"]]]},{"name":"reason","description":"The reason for removing this member from the thread","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Snowflake",">"]]],"meta":{"line":111,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches member(s) for the thread from Discord.","params":[{"name":"member","description":"The member to fetch. If `undefined`, all members\nin the thread are fetched, and will be cached based on `options.cache`.","optional":true,"type":[[["UserResolvable"]],[["FetchThreadMembersOptions"]],[["boolean"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["FetchThreadMemberOptions"]],[["FetchThreadMembersOptions"]]]}],"returns":[[["Promise","<("],["ThreadMember","|"],["Collection","<"],["Snowflake",", "],["ThreadMember",">)>"]]],"meta":{"line":171,"file":"ThreadMemberManager.js","path":"src/managers"}}],"meta":{"line":15,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"UserManager","description":"Manages API methods for users and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"cache","description":"The cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":19,"file":"UserManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"dmChannel","description":"The DM between the client's user and a user","access":"private","params":[{"name":"userId","description":"The user id","type":[[["Snowflake"]]]}],"returns":{"types":[[["DMChannel"]]],"nullable":true},"meta":{"line":41,"file":"UserManager.js","path":"src/managers"}},{"name":"createDM","description":"Creates a {@link DMChannel} between the client and a user.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":51,"file":"UserManager.js","path":"src/managers"}},{"name":"deleteDM","description":"Deletes a {@link DMChannel} (if one exists) between the client and a user. Resolves with the channel if successful.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":77,"file":"UserManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains a user from Discord, or the user cache if it's already available.","params":[{"name":"user","description":"The user to fetch","type":[[["UserResolvable"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]},{"name":"options.guildId","description":"The guild ID to fetch the member for","optional":true,"nullable":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":93,"file":"UserManager.js","path":"src/managers"}},{"name":"fetchFlags","description":"Fetches a user's flags.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<"],["UserFlags",">"]]],"meta":{"line":112,"file":"UserManager.js","path":"src/managers"}},{"name":"send","description":"Sends a message to a user.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]},{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":122,"file":"UserManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a {@link UserResolvable} to a {@link User} object.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]}],"returns":{"types":[[["User"]]],"nullable":true},"meta":{"line":131,"file":"UserManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link UserResolvable} to a {@link User} id.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":142,"file":"UserManager.js","path":"src/managers"}}],"meta":{"line":14,"file":"UserManager.js","path":"src/managers"}},{"name":"VoiceStateManager","description":"Manages API methods for VoiceStates and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":18,"file":"VoiceStateManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["VoiceState",">"]]],"meta":{"line":21,"file":"VoiceStateManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"VoiceStateManager.js","path":"src/managers"}},{"name":"DiscordAPIError","description":"Represents an error from the Discord API.","extends":[[["Error"]]],"props":[{"name":"method","description":"The HTTP method used for the request","type":[[["string"]]],"meta":{"line":18,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"path","description":"The path of the request relative to the HTTP endpoint","type":[[["string"]]],"meta":{"line":24,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"code","description":"HTTP error code returned by Discord","type":[[["number"]],[["string"]]],"meta":{"line":30,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"httpStatus","description":"The HTTP status code","type":[[["number"]]],"meta":{"line":36,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"captcha","description":"Captcha response data if the request requires a captcha","type":[[["Captcha"]],[["null"]]],"meta":{"line":51,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"requestData","description":"The data associated with the request that caused this error","type":[[["HTTPErrorData"]]],"meta":{"line":57,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"retries","description":"The number of times this request has been retried","type":[[["number"]]],"meta":{"line":66,"file":"DiscordAPIError.js","path":"src/rest"}}],"methods":[{"name":"flattenErrors","description":"Flattens an errors object returned from the API into an array.","scope":"static","access":"private","params":[{"name":"obj","description":"Discord errors object","type":[[["APIError"]]]},{"name":"key","description":"Used internally to determine key names of nested fields","optional":true,"type":[[["string"]]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":76,"file":"DiscordAPIError.js","path":"src/rest"}}],"meta":{"line":7,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"HTTPError","description":"Represents an HTTP error from a request.","extends":[[["Error"]]],"props":[{"name":"name","description":"The name of the error","type":[[["string"]]],"meta":{"line":15,"file":"HTTPError.js","path":"src/rest"}},{"name":"code","description":"HTTP error code returned from the request","type":[[["number"]]],"meta":{"line":21,"file":"HTTPError.js","path":"src/rest"}},{"name":"method","description":"The HTTP method used for the request","type":[[["string"]]],"meta":{"line":27,"file":"HTTPError.js","path":"src/rest"}},{"name":"path","description":"The path of the request relative to the HTTP endpoint","type":[[["string"]]],"meta":{"line":33,"file":"HTTPError.js","path":"src/rest"}},{"name":"requestData","description":"The data associated with the request that caused this error","type":[[["HTTPErrorData"]]],"meta":{"line":54,"file":"HTTPError.js","path":"src/rest"}}],"meta":{"line":7,"file":"HTTPError.js","path":"src/rest"}},{"name":"RateLimitError","description":"Represents a RateLimit error from a request.","extends":[[["Error"]]],"props":[{"name":"name","description":"The name of the error","type":[[["string"]]],"meta":{"line":15,"file":"RateLimitError.js","path":"src/rest"}},{"name":"timeout","description":"Time until this rate limit ends, in milliseconds","type":[[["number"]]],"meta":{"line":21,"file":"RateLimitError.js","path":"src/rest"}},{"name":"method","description":"The HTTP method used for the request","type":[[["string"]]],"meta":{"line":27,"file":"RateLimitError.js","path":"src/rest"}},{"name":"path","description":"The path of the request relative to the HTTP endpoint","type":[[["string"]]],"meta":{"line":33,"file":"RateLimitError.js","path":"src/rest"}},{"name":"route","description":"The route of the request relative to the HTTP endpoint","type":[[["string"]]],"meta":{"line":39,"file":"RateLimitError.js","path":"src/rest"}},{"name":"global","description":"Whether this rate limit is global","type":[[["boolean"]]],"meta":{"line":45,"file":"RateLimitError.js","path":"src/rest"}},{"name":"limit","description":"The maximum amount of requests of this endpoint","type":[[["number"]]],"meta":{"line":51,"file":"RateLimitError.js","path":"src/rest"}}],"meta":{"line":7,"file":"RateLimitError.js","path":"src/rest"}},{"name":"Shard","description":"A self-contained shard created by the {@link ShardingManager}. Each one has a {@link ChildProcess} that contains\nan instance of the bot and its {@link Client}. When its child process/worker exits for any reason, the shard will\nspawn a new one to replace it as necessary.","extends":[[["EventEmitter"]]],"props":[{"name":"manager","description":"Manager that created the shard","type":[[["ShardingManager"]]],"meta":{"line":30,"file":"Shard.js","path":"src/sharding"}},{"name":"id","description":"The shard's id in the manager","type":[[["number"]]],"meta":{"line":36,"file":"Shard.js","path":"src/sharding"}},{"name":"args","description":"Arguments for the shard's process (only when {@link ShardingManager#mode} is `process`)","type":[[["Array","<"],["string",">"]]],"meta":{"line":42,"file":"Shard.js","path":"src/sharding"}},{"name":"execArgv","description":"Arguments for the shard's process executable (only when {@link ShardingManager#mode} is `process`)","type":[[["Array","<"],["string",">"]]],"meta":{"line":48,"file":"Shard.js","path":"src/sharding"}},{"name":"env","description":"Environment variables for the shard's process, or workerData for the shard's worker","type":[[["Object"]]],"meta":{"line":54,"file":"Shard.js","path":"src/sharding"}},{"name":"ready","description":"Whether the shard's {@link Client} is ready","type":[[["boolean"]]],"meta":{"line":65,"file":"Shard.js","path":"src/sharding"}},{"name":"process","description":"Process of the shard (if {@link ShardingManager#mode} is `process`)","nullable":true,"type":[[["ChildProcess"]]],"meta":{"line":71,"file":"Shard.js","path":"src/sharding"}},{"name":"worker","description":"Worker of the shard (if {@link ShardingManager#mode} is `worker`)","nullable":true,"type":[[["Worker"]]],"meta":{"line":77,"file":"Shard.js","path":"src/sharding"}},{"name":"_evals","description":"Ongoing promises for calls to {@link Shard#eval}, mapped by the `script` they were called with","access":"private","type":[[["Map","<"],["string",", "],["Promise",">"]]],"meta":{"line":84,"file":"Shard.js","path":"src/sharding"}},{"name":"_fetches","description":"Ongoing promises for calls to {@link Shard#fetchClientValue}, mapped by the `prop` they were called with","access":"private","type":[[["Map","<"],["string",", "],["Promise",">"]]],"meta":{"line":91,"file":"Shard.js","path":"src/sharding"}},{"name":"_exitListener","description":"Listener function for the {@link ChildProcess}' `exit` event","access":"private","type":[[["function"]]],"meta":{"line":98,"file":"Shard.js","path":"src/sharding"}}],"methods":[{"name":"spawn","description":"Forks a child process or creates a worker thread for the shard.\nYou should not need to call this manually.","params":[{"name":"timeout","description":"The amount in milliseconds to wait until the {@link Client} has become ready\nbefore resolving (`-1` or `Infinity` for no wait)","optional":true,"default":30000,"type":[[["number"]]]}],"returns":[[["Promise","<"],["ChildProcess",">"]]],"meta":{"line":108,"file":"Shard.js","path":"src/sharding"}},{"name":"kill","description":"Immediately kills the shard's process/worker and does not restart it.","meta":{"line":179,"file":"Shard.js","path":"src/sharding"}},{"name":"respawn","description":"Kills and restarts the shard's process/worker.","params":[{"name":"options","description":"Options for respawning the shard","optional":true,"type":[[["ShardRespawnOptions"]]]}],"async":true,"returns":[[["Promise","<"],["ChildProcess",">"]]],"meta":{"line":205,"file":"Shard.js","path":"src/sharding"}},{"name":"send","description":"Sends a message to the shard's process/worker.","params":[{"name":"message","description":"Message to send to the shard","type":[["*"]]}],"returns":[[["Promise","<"],["Shard",">"]]],"meta":{"line":216,"file":"Shard.js","path":"src/sharding"}},{"name":"fetchClientValue","description":"Fetches a client property value of the shard.","examples":["shard.fetchClientValue('guilds.cache.size')\n .then(count => console.log(`${count} guilds in shard ${shard.id}`))\n .catch(console.error);"],"params":[{"name":"prop","description":"Name of the client property to get, using periods for nesting","type":[[["string"]]]}],"returns":[[["Promise","<"],["*",">"]]],"meta":{"line":239,"file":"Shard.js","path":"src/sharding"}},{"name":"eval","description":"Evaluates a script or function on the shard, in the context of the {@link Client}.","params":[{"name":"script","description":"JavaScript to run on the shard","type":[[["string"]],[["function"]]]},{"name":"context","description":"The context for the eval","optional":true,"type":[["*"]]}],"returns":{"types":[[["Promise","<"],["*",">"]]],"description":"Result of the script execution"},"meta":{"line":279,"file":"Shard.js","path":"src/sharding"}},{"name":"_handleMessage","description":"Handles a message received from the child process/worker.","access":"private","params":[{"name":"message","description":"Message received","type":[["*"]]}],"meta":{"line":321,"file":"Shard.js","path":"src/sharding"}},{"name":"_handleExit","description":"Handles the shard's process/worker exiting.","access":"private","params":[{"name":"respawn","description":"Whether to spawn the shard again","optional":true,"default":"this.manager.respawn","type":[[["boolean"]]]},{"name":"timeout","description":"The amount in milliseconds to wait until the {@link Client}\nhas become ready (`-1` or `Infinity` for no wait)","optional":true,"type":[[["number"]]]}],"meta":{"line":401,"file":"Shard.js","path":"src/sharding"}},{"name":"incrementMaxListeners","description":"Increments max listeners by one for a given emitter, if they are not zero.","access":"private","params":[{"name":"emitter","description":"The emitter that emits the events.","type":[[["EventEmitter"]],[["process"]]]}],"meta":{"line":423,"file":"Shard.js","path":"src/sharding"}},{"name":"decrementMaxListeners","description":"Decrements max listeners by one for a given emitter, if they are not zero.","access":"private","params":[{"name":"emitter","description":"The emitter that emits the events.","type":[[["EventEmitter"]],[["process"]]]}],"meta":{"line":435,"file":"Shard.js","path":"src/sharding"}}],"events":[{"name":"spawn","description":"Emitted upon the creation of the shard's child process/worker.","params":[{"name":"process","description":"Child process/worker that was created","type":[[["ChildProcess"]],[["Worker"]]]}],"meta":{"line":133,"file":"Shard.js","path":"src/sharding"}},{"name":"ready","description":"Emitted upon the shard's {@link Client#event:shardReady} event.","meta":{"line":326,"file":"Shard.js","path":"src/sharding"}},{"name":"disconnect","description":"Emitted upon the shard's {@link Client#event:shardDisconnect} event.","meta":{"line":337,"file":"Shard.js","path":"src/sharding"}},{"name":"reconnecting","description":"Emitted upon the shard's {@link Client#event:shardReconnecting} event.","meta":{"line":348,"file":"Shard.js","path":"src/sharding"}},{"name":"message","description":"Emitted upon receiving a message from the child process/worker.","params":[{"name":"message","description":"Message that was received","type":[["*"]]}],"meta":{"line":386,"file":"Shard.js","path":"src/sharding"}},{"name":"death","description":"Emitted upon the shard's child process/worker exiting.","params":[{"name":"process","description":"Child process/worker that exited","type":[[["ChildProcess"]],[["Worker"]]]}],"meta":{"line":402,"file":"Shard.js","path":"src/sharding"}}],"meta":{"line":19,"file":"Shard.js","path":"src/sharding"}},{"name":"ShardClientUtil","description":"Helper class for sharded clients spawned as a child process/worker, such as from a {@link ShardingManager}.\nUtilises IPC to send and receive data to/from the master process and other shards.","props":[{"name":"client","description":"Client for the shard","type":[[["Client"]]],"meta":{"line":18,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"mode","description":"Mode the shard was spawned with","type":[[["ShardingManagerMode"]]],"meta":{"line":24,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"parentPort","description":"Message port for the master process (only when {@link ShardClientUtil#mode} is `worker`)","nullable":true,"type":[[["MessagePort"]]],"meta":{"line":30,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"ids","description":"Array of shard ids of this client","readonly":true,"type":[[["Array","<"],["number",">"]]],"meta":{"line":63,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"count","description":"Total number of shards","readonly":true,"type":[[["number"]]],"meta":{"line":72,"file":"ShardClientUtil.js","path":"src/sharding"}}],"methods":[{"name":"send","description":"Sends a message to the master process.","emits":["Shard#event:message"],"params":[{"name":"message","description":"Message to send","type":[["*"]]}],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":82,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"fetchClientValues","description":"Fetches a client property value of each shard, or a given shard.","see":["{@link ShardingManager#fetchClientValues}"],"examples":["client.shard.fetchClientValues('guilds.cache.size')\n .then(results => console.log(`${results.reduce((prev, val) => prev + val, 0)} total guilds`))\n .catch(console.error);"],"params":[{"name":"prop","description":"Name of the client property to get, using periods for nesting","type":[[["string"]]]},{"name":"shard","description":"Shard to fetch property from, all if undefined","optional":true,"type":[[["number"]]]}],"returns":[[["Promise","<("],["*","|"],["Array","<"],["*",">)>"]]],"meta":{"line":107,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"broadcastEval","description":"Evaluates a script or function on all shards, or a given shard, in the context of the {@link Client}s.","see":["{@link ShardingManager#broadcastEval}"],"examples":["client.shard.broadcastEval(client => client.guilds.cache.size)\n .then(results => console.log(`${results.reduce((prev, val) => prev + val, 0)} total guilds`))\n .catch(console.error);"],"params":[{"name":"script","description":"JavaScript to run on each shard","type":[[["function"]]]},{"name":"options","description":"The options for the broadcast","optional":true,"default":"{}","type":[[["BroadcastEvalOptions"]]]}],"returns":{"types":[[["Promise","<("],["*","|"],["Array","<"],["*",">)>"]]],"description":"Results of the script execution"},"meta":{"line":140,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"respawnAll","description":"Requests a respawn of all shards.","see":["{@link ShardingManager#respawnAll}"],"params":[{"name":"options","description":"Options for respawning shards","optional":true,"type":[[["MultipleShardRespawnOptions"]]]}],"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the message being sent"},"meta":{"line":172,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"_handleMessage","description":"Handles an IPC message.","access":"private","params":[{"name":"message","description":"Message received","type":[["*"]]}],"async":true,"meta":{"line":181,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"_respond","description":"Sends a message to the master process, emitting an error from the client upon failure.","access":"private","params":[{"name":"type","description":"Type of response to send","type":[[["string"]]]},{"name":"message","description":"Message to send","type":[["*"]]}],"meta":{"line":207,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"incrementMaxListeners","description":"Increments max listeners by one for a given emitter, if they are not zero.","access":"private","params":[{"name":"emitter","description":"The emitter that emits the events.","type":[[["EventEmitter"]],[["process"]]]}],"meta":{"line":255,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"decrementMaxListeners","description":"Decrements max listeners by one for a given emitter, if they are not zero.","access":"private","params":[{"name":"emitter","description":"The emitter that emits the events.","type":[[["EventEmitter"]],[["process"]]]}],"meta":{"line":267,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"singleton","description":"Creates/gets the singleton of this class.","scope":"static","params":[{"name":"client","description":"The client to use","type":[[["Client"]]]},{"name":"mode","description":"Mode the shard was spawned with","type":[[["ShardingManagerMode"]]]}],"returns":[[["ShardClientUtil"]]],"meta":{"line":226,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"shardIdForGuildId","description":"Get the shard id for a given guild id.","scope":"static","params":[{"name":"guildId","description":"Snowflake guild id to get shard id for","type":[[["Snowflake"]]]},{"name":"shardCount","description":"Number of shards","type":[[["number"]]]}],"returns":[[["number"]]],"meta":{"line":244,"file":"ShardClientUtil.js","path":"src/sharding"}}],"meta":{"line":12,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"ShardingManager","description":"This is a utility class that makes multi-process sharding of a bot an easy and painless experience.\nIt works by spawning a self-contained {@link ChildProcess} or {@link Worker} for each individual shard, each\ncontaining its own instance of your bot's {@link Client}. They all have a line of communication with the master\nprocess, and there are several useful methods that utilise it in order to simplify tasks that are normally difficult\nwith sharding. It can spawn a specific number of shards or the amount that Discord suggests for the bot, and takes a\npath to your main bot script to launch for each one.","extends":[[["EventEmitter"]]],"construct":{"name":"ShardingManager","params":[{"name":"file","description":"Path to your shard script file","type":[[["string"]]]},{"name":"options","description":"Options for the sharding manager","optional":true,"type":[[["ShardingManagerOptions"]]]}]},"props":[{"name":"file","description":"Path to the shard script file","type":[[["string"]]],"meta":{"line":66,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"shardList","description":"List of shards this sharding manager spawns","type":[[["string"]],[["Array","<"],["number",">"]]],"meta":{"line":76,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"totalShards","description":"Amount of shards that all sharding managers spawn in total","type":[[["number"]]],"meta":{"line":96,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"mode","description":"Mode for shards to spawn with","type":[[["ShardingManagerMode"]]],"meta":{"line":111,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"respawn","description":"Whether shards should automatically respawn upon exiting","type":[[["boolean"]]],"meta":{"line":120,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"shardArgs","description":"An array of arguments to pass to shards (only when {@link ShardingManager#mode} is `process`)","type":[[["Array","<"],["string",">"]]],"meta":{"line":126,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"execArgv","description":"An array of arguments to pass to the executable (only when {@link ShardingManager#mode} is `process`)","type":[[["Array","<"],["string",">"]]],"meta":{"line":132,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"token","description":"Token to use for obtaining the automatic shard count, and passing to shards","nullable":true,"type":[[["string"]]],"meta":{"line":138,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"shards","description":"A collection of shards that this manager has spawned","type":[[["Collection","<"],["number",", "],["Shard",">"]]],"meta":{"line":144,"file":"ShardingManager.js","path":"src/sharding"}}],"methods":[{"name":"createShard","description":"Creates a single shard.\nUsing this method is usually not necessary if you use the spawn method.","params":[{"name":"id","description":"Id of the shard to create\nThis is usually not necessary to manually specify.","optional":true,"default":"this.shards.size","type":[[["number"]]]}],"returns":{"types":[[["Shard"]]],"description":"Note that the created shard needs to be explicitly spawned using its spawn method."},"meta":{"line":158,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"spawn","description":"Spawns multiple shards.","params":[{"name":"options","description":"Options for spawning shards","optional":true,"type":[[["MultipleShardSpawnOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["number",", "],["Shard",">>"]]],"meta":{"line":183,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"broadcast","description":"Sends a message to all shards.","params":[{"name":"message","description":"Message to be sent to the shards","type":[["*"]]}],"returns":[[["Promise","<"],["Array","<"],["Shard",">>"]]],"meta":{"line":231,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"broadcastEval","description":"Evaluates a script on all shards, or a given shard, in the context of the {@link Client}s.","params":[{"name":"script","description":"JavaScript to run on each shard","type":[[["function"]]]},{"name":"options","description":"The options for the broadcast","optional":true,"default":"{}","type":[[["BroadcastEvalOptions"]]]}],"returns":{"types":[[["Promise","<("],["*","|"],["Array","<"],["*",">)>"]]],"description":"Results of the script execution"},"meta":{"line":250,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"fetchClientValues","description":"Fetches a client property value of each shard, or a given shard.","examples":["manager.fetchClientValues('guilds.cache.size')\n .then(results => console.log(`${results.reduce((prev, val) => prev + val, 0)} total guilds`))\n .catch(console.error);"],"params":[{"name":"prop","description":"Name of the client property to get, using periods for nesting","type":[[["string"]]]},{"name":"shard","description":"Shard to fetch property from, all if undefined","optional":true,"type":[[["number"]]]}],"returns":[[["Promise","<("],["*","|"],["Array","<"],["*",">)>"]]],"meta":{"line":265,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"_performOnShards","description":"Runs a method with given arguments on all shards, or a given shard.","access":"private","params":[{"name":"method","description":"Method name to run on each shard","type":[[["string"]]]},{"name":"args","description":"Arguments to pass through to the method call","type":[[["Array","<"],["*",">"]]]},{"name":"shard","description":"Shard to run on, all if undefined","optional":true,"type":[[["number"]]]}],"returns":{"types":[[["Promise","<("],["*","|"],["Array","<"],["*",">)>"]]],"description":"Results of the method execution"},"meta":{"line":277,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"respawnAll","description":"Kills all running shards and respawns them.","params":[{"name":"options","description":"Options for respawning shards","optional":true,"type":[[["MultipleShardRespawnOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["number",", "],["Shard",">>"]]],"meta":{"line":307,"file":"ShardingManager.js","path":"src/sharding"}}],"events":[{"name":"shardCreate","description":"Emitted upon creating a shard.","params":[{"name":"shard","description":"Shard that was created","type":[[["Shard"]]]}],"meta":{"line":161,"file":"ShardingManager.js","path":"src/sharding"}}],"meta":{"line":22,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"AnonymousGuild","description":"Bundles common attributes and methods between {@link Guild} and {@link InviteGuild}","extends":[[["BaseGuild"]]],"abstract":true,"props":[{"name":"splash","description":"The hash of the guild invite splash image","nullable":true,"type":[[["string"]]],"meta":{"line":25,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"banner","description":"The hash of the guild banner","nullable":true,"type":[[["string"]]],"meta":{"line":33,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"description","description":"The description of the guild, if any","nullable":true,"type":[[["string"]]],"meta":{"line":41,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"verificationLevel","description":"The verification level of the guild","type":[[["VerificationLevel"]]],"meta":{"line":49,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"vanityURLCode","description":"The vanity invite code of the guild, if any","nullable":true,"type":[[["string"]]],"meta":{"line":57,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"nsfwLevel","description":"The NSFW level of this guild","type":[[["NSFWLevel"]]],"meta":{"line":65,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"premiumSubscriptionCount","description":"The total number of boosts for this server","nullable":true,"type":[[["number"]]],"meta":{"line":73,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"id","description":"The guild's id","type":[[["Snowflake"]]],"meta":{"line":19,"file":"BaseGuild.js","path":"src/structures"}},{"name":"name","description":"The name of this guild","type":[[["string"]]],"meta":{"line":25,"file":"BaseGuild.js","path":"src/structures"}},{"name":"icon","description":"The icon hash of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":31,"file":"BaseGuild.js","path":"src/structures"}},{"name":"features","description":"An array of features available to this guild","type":[[["Array","<"],["Features",">"]]],"meta":{"line":37,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this guild was created at","readonly":true,"type":[[["number"]]],"meta":{"line":45,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdAt","description":"The time this guild was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":54,"file":"BaseGuild.js","path":"src/structures"}},{"name":"nameAcronym","description":"The acronym that shows up in place of a guild icon","readonly":true,"type":[[["string"]]],"meta":{"line":63,"file":"BaseGuild.js","path":"src/structures"}},{"name":"partnered","description":"Whether this guild is partnered","readonly":true,"type":[[["boolean"]]],"meta":{"line":75,"file":"BaseGuild.js","path":"src/structures"}},{"name":"verified","description":"Whether this guild is verified","readonly":true,"type":[[["boolean"]]],"meta":{"line":84,"file":"BaseGuild.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"bannerURL","description":"The URL to this guild's banner.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":84,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"splashURL","description":"The URL to this guild's invite splash image.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"iconURL","description":"The URL to this guild's icon.","inherits":"BaseGuild#iconURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"BaseGuild.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this guild.","inherits":"BaseGuild#fetch","inherited":true,"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":102,"file":"BaseGuild.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the guild's name instead of the Guild object.","inherits":"BaseGuild#toString","inherited":true,"returns":[[["string"]]],"meta":{"line":111,"file":"BaseGuild.js","path":"src/structures"}}],"meta":{"line":11,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"ApplicationCommand","description":"Represents an application command.","extends":[[["Base"]]],"props":[{"name":"id","description":"The command's id","type":[[["Snowflake"]]],"meta":{"line":32,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"applicationId","description":"The parent application's id","type":[[["Snowflake"]]],"meta":{"line":38,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"permissions","description":"The manager for permissions of this command on its guild or arbitrary guilds when the command is global","type":[[["ApplicationCommandPermissionsManager"]]],"meta":{"line":44,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"type","description":"The type of this application command","type":[[["ApplicationCommandType"]]],"meta":{"line":50,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"guild","description":"The guild this command is part of","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":62,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"guildId","description":"The guild's id this command is part of, this may be non-null when `guild` is `null` if the command\nwas fetched from the `ApplicationCommandManager`","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":73,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"name","description":"The name of this command","type":[[["string"]]],"meta":{"line":81,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"nameLocalizations","description":"The name localizations for this command","nullable":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]],"meta":{"line":89,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"nameLocalized","description":"The localized name for this command","nullable":true,"type":[[["string"]]],"meta":{"line":99,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"description","description":"The description of this command","type":[[["string"]]],"meta":{"line":109,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"descriptionLocalizations","description":"The description localizations for this command","nullable":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]],"meta":{"line":117,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"descriptionLocalized","description":"The localized description for this command","nullable":true,"type":[[["string"]]],"meta":{"line":127,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"options","description":"The options of this command","type":[[["Array","<"],["ApplicationCommandOption",">"]]],"meta":{"line":137,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"defaultPermission","description":"Whether the command is enabled by default when the app is added to a guild","deprecated":"Use {@link ApplicationCommand.defaultMemberPermissions} and {@link ApplicationCommand.dmPermission} instead.","type":[[["boolean"]]],"meta":{"line":149,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"defaultMemberPermissions","description":"The default bitfield used to determine whether this command be used in a guild","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":159,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"dmPermission","description":"Whether the command can be used in DMs\nThis property is always `null` on guild commands","nullable":true,"type":[[["boolean"]]],"meta":{"line":172,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"version","description":"Autoincrementing version identifier updated during substantial record changes","type":[[["Snowflake"]]],"meta":{"line":182,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the command was created at","readonly":true,"type":[[["number"]]],"meta":{"line":191,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"createdAt","description":"The time the command was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":200,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"manager","description":"The manager that this command belongs to","readonly":true,"type":[[["ApplicationCommandManager"]]],"meta":{"line":209,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"edit","description":"Edits this application command.","examples":["// Edit the description of this command\ncommand.edit({\n description: 'New description',\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The data to update the command with","type":[[["Partial","<"],["ApplicationCommandData",">"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":273,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setName","description":"Edits the name of this ApplicationCommand","params":[{"name":"name","description":"The new name of the command","type":[[["string"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":282,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setNameLocalizations","description":"Edits the localized names of this ApplicationCommand","examples":["// Edit the name localizations of this command\ncommand.setLocalizedNames({\n 'en-GB': 'test',\n 'pt-BR': 'teste',\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"nameLocalizations","description":"The new localized names for the command","type":[[["Object","<"],["Locale",", "],["string",">"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":299,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setDescription","description":"Edits the description of this ApplicationCommand","params":[{"name":"description","description":"The new description of the command","type":[[["string"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":308,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setDescriptionLocalizations","description":"Edits the localized descriptions of this ApplicationCommand","examples":["// Edit the description localizations of this command\ncommand.setLocalizedDescriptions({\n 'en-GB': 'A test command',\n 'pt-BR': 'Um comando de teste',\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"descriptionLocalizations","description":"The new localized descriptions for the command","type":[[["Object","<"],["Locale",", "],["string",">"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":325,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setDefaultPermission","description":"Edits the default permission of this ApplicationCommand","deprecated":"Use {@link ApplicationCommand#setDefaultMemberPermissions} and {@link ApplicationCommand#setDMPermission} instead.","params":[{"name":"defaultPermission","description":"The default permission for this command","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":336,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setDefaultMemberPermissions","description":"Edits the default member permissions of this ApplicationCommand","params":[{"name":"defaultMemberPermissions","description":"The default member permissions required to run this command","nullable":true,"type":[[["PermissionResolvable"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":347,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setDMPermission","description":"Edits the DM permission of this ApplicationCommand","params":[{"name":"dmPermission","description":"Whether the command can be used in DMs","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":356,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setOptions","description":"Edits the options of this ApplicationCommand","params":[{"name":"options","description":"The options to set for this command","type":[[["Array","<"],["ApplicationCommandOptionData",">"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":365,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"delete","description":"Deletes this command.","examples":["// Delete this command\ncommand.delete()\n .then(console.log)\n .catch(console.error);"],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":378,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"equals","description":"Whether this command equals another command. It compares all properties, so for most operations\nit is advisable to just compare `command.id === command2.id` as it is much faster and is often\nwhat most users need.","params":[{"name":"command","description":"The command to compare with","type":[[["ApplicationCommand"]],[["ApplicationCommandData"]],[["APIApplicationCommand"]]]},{"name":"enforceOptionOrder","description":"Whether to strictly check that options and choices are in the same\norder in the array The client may not always respect this ordering!","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"sendSlashCommand","description":"Send Slash command to channel","params":[{"name":"message","description":"Discord Message","type":[[["Message"]]]},{"name":"subCommandArray","description":"SubCommand Array","type":[[["Array","<"],["string",">"]]]},{"name":"options","description":"The options to Slash Command","type":[[["Array","<"],["any",">"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":608,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"sendContextMenu","description":"Message Context Menu","params":[{"name":"message","description":"Discord Message","type":[[["Message"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":954,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"optionsEqual","description":"Recursively checks that all options for an {@link ApplicationCommand} are equal to the provided options.\nIn most cases it is better to compare using {@link ApplicationCommand#equals}","scope":"static","params":[{"name":"existing","description":"The options on the existing command,\nshould be {@link ApplicationCommand#options}","type":[[["Array","<"],["ApplicationCommandOptionData",">"]]]},{"name":"options","description":"The options to compare against","type":[[["Array","<"],["ApplicationCommandOptionData",">"]],[["Array","<"],["APIApplicationCommandOption",">"]]]},{"name":"enforceOptionOrder","description":"Whether to strictly check that options and choices are in the same\norder in the array The client may not always respect this ordering!","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["boolean"]]],"meta":{"line":441,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"_optionEquals","description":"Checks that an option for an {@link ApplicationCommand} is equal to the provided option\nIn most cases it is better to compare using {@link ApplicationCommand#equals}","scope":"static","access":"private","params":[{"name":"existing","description":"The option on the existing command,\nshould be from {@link ApplicationCommand#options}","type":[[["ApplicationCommandOptionData"]]]},{"name":"option","description":"The option to compare against","type":[[["ApplicationCommandOptionData"]],[["APIApplicationCommandOption"]]]},{"name":"enforceOptionOrder","description":"Whether to strictly check that options or choices are in the same\norder in their array The client may not always respect this ordering!","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["boolean"]]],"meta":{"line":467,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"transformOption","description":"Transforms an {@link ApplicationCommandOptionData} object into something that can be used with the API.","scope":"static","access":"private","params":[{"name":"option","description":"The option to transform","type":[[["ApplicationCommandOptionData"]],[["ApplicationCommandOption"]]]},{"name":"received","description":"Whether this option has been received from Discord","optional":true,"type":[[["boolean"]]]}],"returns":[[["APIApplicationCommandOption"]]],"meta":{"line":560,"file":"ApplicationCommand.js","path":"src/structures"}}],"meta":{"line":24,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"AutocompleteInteraction","description":"Represents an autocomplete interaction.","extends":[[["Interaction"]]],"props":[{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":15,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"commandId","description":"The invoked application command's id","type":[[["Snowflake"]]],"meta":{"line":25,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"commandName","description":"The invoked application command's name","type":[[["string"]]],"meta":{"line":31,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"responded","description":"Whether this interaction has already received a response","type":[[["boolean"]]],"meta":{"line":37,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"options","description":"The options passed to the command","type":[[["CommandInteractionOptionResolver"]]],"meta":{"line":43,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"command","description":"The invoked application command, if it was fetched before","nullable":true,"type":[[["ApplicationCommand"]]],"meta":{"line":53,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"transformOption","description":"Transforms an option received from the API.","access":"private","params":[{"name":"option","description":"The received option","type":[[["APIApplicationCommandOption"]]]}],"returns":[[["CommandInteractionOption"]]],"meta":{"line":64,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"respond","description":"Sends results for the autocomplete of this interaction.","examples":["// respond to autocomplete interaction\ninteraction.respond([\n {\n name: 'Option 1',\n value: 'option1',\n },\n])\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the autocomplete","type":[[["Array","<"],["ApplicationCommandOptionChoiceData",">"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":92,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":11,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"AutoModerationActionExecution","description":"Represents the structure of an executed action when an {@link AutoModerationRule} is triggered.","props":[{"name":"guild","description":"The guild where this action was executed from.","type":[[["Guild"]]],"meta":{"line":14,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"action","description":"The action that was executed.","type":[[["AutoModerationAction"]]],"meta":{"line":20,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"ruleId","description":"The id of the auto moderation rule this action belongs to.","type":[[["Snowflake"]]],"meta":{"line":26,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"ruleTriggerType","description":"The trigger type of the auto moderation rule which was triggered.","type":[[["AutoModerationRuleTriggerType"]]],"meta":{"line":32,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"userId","description":"The id of the user that triggered this action.","type":[[["Snowflake"]]],"meta":{"line":38,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel where this action was triggered from.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":44,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"messageId","description":"The id of the message that triggered this action.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":51,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"alertSystemMessageId","description":"The id of any system auto moderation messages posted as a result of this action.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":57,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"content","description":"The content that triggered this action.\nThis property requires the {@link Intents.FLAGS.MESSAGE_CONTENT} privileged gateway intent.","type":[[["string"]]],"meta":{"line":64,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"matchedKeyword","description":"The word or phrase configured in the rule that triggered this action.","nullable":true,"type":[[["string"]]],"meta":{"line":70,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"matchedContent","description":"The substring in content that triggered this action.","nullable":true,"type":[[["string"]]],"meta":{"line":76,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"autoModerationRule","description":"The auto moderation rule this action belongs to.","readonly":true,"nullable":true,"type":[[["AutoModerationRule"]]],"meta":{"line":84,"file":"AutoModerationActionExecution.js","path":"src/structures"}}],"meta":{"line":8,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"AutoModerationRule","description":"Represents an auto moderation rule.","extends":[[["Base"]]],"props":[{"name":"id","description":"The id of this auto moderation rule.","type":[[["Snowflake"]]],"meta":{"line":24,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"guild","description":"The guild this auto moderation rule is for.","type":[[["Guild"]]],"meta":{"line":30,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"creatorId","description":"The user that created this auto moderation rule.","type":[[["Snowflake"]]],"meta":{"line":36,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"triggerType","description":"The trigger type of this auto moderation rule.","type":[[["AutoModerationRuleTriggerType"]]],"meta":{"line":42,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"name","description":"The name of this auto moderation rule.","type":[[["string"]]],"meta":{"line":53,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"eventType","description":"The event type of this auto moderation rule.","type":[[["AutoModerationRuleEventType"]]],"meta":{"line":61,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"triggerMetadata","description":"The trigger metadata of the rule.","type":[[["AutoModerationTriggerMetadata"]]],"meta":{"line":83,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"actions","description":"The actions of this auto moderation rule.","type":[[["Array","<"],["AutoModerationAction",">"]]],"meta":{"line":113,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"enabled","description":"Whether this auto moderation rule is enabled.","type":[[["boolean"]]],"meta":{"line":128,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"exemptRoles","description":"The roles exempt by this auto moderation rule.","type":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":136,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"exemptChannels","description":"The channels exempt by this auto moderation rule.","type":[[["Collection","<"],["Snowflake",", ("],["GuildChannel","|"],["ThreadChannel",")>"]]],"meta":{"line":146,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"edit","description":"Edits this auto moderation rule.","params":[{"name":"options","description":"Options for editing this auto moderation rule","type":[[["AutoModerationRuleEditOptions"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":157,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"delete","description":"Deletes this auto moderation rule.","params":[{"name":"reason","description":"The reason for deleting this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setName","description":"Sets the name for this auto moderation rule.","params":[{"name":"name","description":"The name of this auto moderation rule","type":[[["string"]]]},{"name":"reason","description":"The reason for changing the name of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":176,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setEventType","description":"Sets the event type for this auto moderation rule.","params":[{"name":"eventType","description":"The event type of this auto moderation rule","type":[[["AutoModerationRuleEventType"]]]},{"name":"reason","description":"The reason for changing the event type of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":186,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setKeywordFilter","description":"Sets the keyword filter for this auto moderation rule.","params":[{"name":"keywordFilter","description":"The keyword filter of this auto moderation rule","type":[[["Array","<"],["string",">"]]]},{"name":"reason","description":"The reason for changing the keyword filter of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":196,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setRegexPatterns","description":"Sets the regular expression patterns for this auto moderation rule.","params":[{"name":"regexPatterns","description":"The regular expression patterns of this auto moderation rule\nOnly Rust-flavored regular expressions are supported.","type":[[["Array","<"],["string",">"]]]},{"name":"reason","description":"The reason for changing the regular expression patterns of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":207,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setPresets","description":"Sets the presets for this auto moderation rule.","params":[{"name":"presets","description":"The presets of this auto moderation rule","type":[[["Array","<"],["AutoModerationRuleKeywordPresetType",">"]]]},{"name":"reason","description":"The reason for changing the presets of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":217,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setAllowList","description":"Sets the allow list for this auto moderation rule.","params":[{"name":"allowList","description":"The allow list of this auto moderation rule","type":[[["Array","<"],["string",">"]]]},{"name":"reason","description":"The reason for changing the allow list of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":227,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setMentionTotalLimit","description":"Sets the mention total limit for this auto moderation rule.","params":[{"name":"mentionTotalLimit","description":"The mention total limit of this auto moderation rule","type":[[["number"]]]},{"name":"reason","description":"The reason for changing the mention total limit of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":237,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setMentionRaidProtectionEnabled","description":"Sets whether to enable mention raid protection for this auto moderation rule.","params":[{"name":"mentionRaidProtectionEnabled","description":"Whether to enable mention raid protection for this auto moderation rule","type":[[["boolean"]]]},{"name":"reason","description":"The reason for changing the mention raid protection of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":248,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setActions","description":"Sets the actions for this auto moderation rule.","params":[{"name":"actions","description":"The actions of this auto moderation rule","type":[[["Array","<"],["AutoModerationActionOptions",">"]]]},{"name":"reason","description":"The reason for changing the actions of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":258,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setEnabled","description":"Sets whether this auto moderation rule should be enabled.","params":[{"name":"enabled","description":"Whether to enable this auto moderation rule","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"The reason for enabling or disabling this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":268,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setExemptRoles","description":"Sets the exempt roles for this auto moderation rule.","params":[{"name":"exemptRoles","description":"The exempt roles of this auto moderation rule","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"reason","description":"The reason for changing the exempt roles of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":278,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setExemptChannels","description":"Sets the exempt channels for this auto moderation rule.","params":[{"name":"exemptChannels","description":"The exempt channels of this auto moderation rule","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["GuildChannel","|"],["ThreadChannel",")>"]],[["Array","<"],["GuildChannelResolvable",">"]]]},{"name":"reason","description":"The reason for changing the exempt channels of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":289,"file":"AutoModerationRule.js","path":"src/structures"}}],"meta":{"line":16,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"Base","description":"Represents a data model that is identifiable by a Snowflake (i.e. Discord API data models).","abstract":true,"props":[{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"meta":{"line":9,"file":"Base.js","path":"src/structures"}},{"name":"BaseCommandInteraction","description":"Represents a command interaction.","extends":[[["Interaction"]]],"implements":[[["InteractionResponses"]]],"abstract":true,"props":[{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":20,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandId","description":"The invoked application command's id","type":[[["Snowflake"]]],"meta":{"line":30,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandName","description":"The invoked application command's name","type":[[["string"]]],"meta":{"line":36,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":42,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":48,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":54,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":60,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"command","description":"The invoked application command, if it was fetched before","nullable":true,"type":[[["ApplicationCommand"]]],"meta":{"line":67,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"transformResolved","description":"Transforms the resolved received from the API.","access":"private","params":[{"name":"resolved","description":"The received resolved objects","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionResolvedData"]]],"meta":{"line":89,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"transformOption","description":"Transforms an option received from the API.","access":"private","params":[{"name":"option","description":"The received option","type":[[["APIApplicationCommandOption"]]]},{"name":"resolved","description":"The resolved interaction data","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionOption"]]],"meta":{"line":162,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferReply","description":"Defers the reply to this interaction.","implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":16,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"BaseGuild","description":"The base class for {@link Guild}, {@link OAuth2Guild} and {@link InviteGuild}.","extends":[[["Base"]]],"abstract":true,"props":[{"name":"id","description":"The guild's id","type":[[["Snowflake"]]],"meta":{"line":19,"file":"BaseGuild.js","path":"src/structures"}},{"name":"name","description":"The name of this guild","type":[[["string"]]],"meta":{"line":25,"file":"BaseGuild.js","path":"src/structures"}},{"name":"icon","description":"The icon hash of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":31,"file":"BaseGuild.js","path":"src/structures"}},{"name":"features","description":"An array of features available to this guild","type":[[["Array","<"],["Features",">"]]],"meta":{"line":37,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this guild was created at","readonly":true,"type":[[["number"]]],"meta":{"line":45,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdAt","description":"The time this guild was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":54,"file":"BaseGuild.js","path":"src/structures"}},{"name":"nameAcronym","description":"The acronym that shows up in place of a guild icon","readonly":true,"type":[[["string"]]],"meta":{"line":63,"file":"BaseGuild.js","path":"src/structures"}},{"name":"partnered","description":"Whether this guild is partnered","readonly":true,"type":[[["boolean"]]],"meta":{"line":75,"file":"BaseGuild.js","path":"src/structures"}},{"name":"verified","description":"Whether this guild is verified","readonly":true,"type":[[["boolean"]]],"meta":{"line":84,"file":"BaseGuild.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"iconURL","description":"The URL to this guild's icon.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"BaseGuild.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this guild.","async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":102,"file":"BaseGuild.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the guild's name instead of the Guild object.","returns":[[["string"]]],"meta":{"line":111,"file":"BaseGuild.js","path":"src/structures"}}],"meta":{"line":11,"file":"BaseGuild.js","path":"src/structures"}},{"name":"BaseGuildEmoji","description":"Parent class for {@link GuildEmoji} and {@link GuildPreviewEmoji}.","extends":[[["Emoji"]]],"abstract":true,"props":[{"name":"guild","description":"The guild this emoji is a part of","type":[[["Guild"]],[["GuildPreview"]]],"meta":{"line":18,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"requiresColons","description":"Whether or not this emoji requires colons surrounding it","nullable":true,"type":[[["boolean"]]],"meta":{"line":35,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"managed","description":"Whether this emoji is managed by an external service","nullable":true,"type":[[["boolean"]]],"meta":{"line":43,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"available","description":"Whether this emoji is available","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"animated","description":"Whether or not the emoji is animated","nullable":true,"type":[[["boolean"]]],"meta":{"line":34,"file":"Emoji.js","path":"src/structures"}},{"name":"name","description":"The emoji's name","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Emoji.js","path":"src/structures"}},{"name":"id","description":"The emoji's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Emoji.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":54,"file":"Emoji.js","path":"src/structures"}},{"name":"identifier","description":"The identifier of this emoji, used for message reactions","readonly":true,"type":[[["string"]]],"meta":{"line":84,"file":"Emoji.js","path":"src/structures"}},{"name":"url","description":"The URL to the emoji file if it's a custom emoji","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":94,"file":"Emoji.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":103,"file":"Emoji.js","path":"src/structures"}},{"name":"createdAt","description":"The time the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":112,"file":"Emoji.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the text required to form a graphical emoji on Discord\ninstead of the Emoji object.","inherits":"Emoji#toString","inherited":true,"examples":["// Send a custom emoji from a guild:\nconst emoji = guild.emojis.cache.first();\nmsg.channel.send(`Hello! ${emoji}`);","// Send the emoji used in a reaction to the channel the reaction is part of\nreaction.message.channel.send(`The emoji used was: ${reaction.emoji}`);"],"returns":[[["string"]]],"meta":{"line":128,"file":"Emoji.js","path":"src/structures"}}],"meta":{"line":10,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"BaseGuildTextChannel","description":"Represents a text-based guild channel on Discord.","extends":[[["GuildChannel"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":22,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":28,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"threads","description":"A manager of the threads belonging to this channel","type":[[["GuildTextThreadManager"]]],"meta":{"line":34,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":40,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"topic","description":"The topic of the text channel","nullable":true,"type":[[["string"]]],"meta":{"line":53,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in the channel, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":65,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastPinTimestamp","description":"The timestamp when the last pinned message was pinned, if there was one","nullable":true,"type":[[["number"]]],"meta":{"line":73,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"defaultAutoArchiveDuration","description":"The default auto archive duration for newly created threads in this channel","nullable":true,"type":[[["number"]]],"meta":{"line":81,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"defaultThreadRateLimitPerUser","description":"The initial rate limit per user (slowmode) to set on newly created threads in a channel.","nullable":true,"type":[[["number"]]],"meta":{"line":89,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinAt","description":"The date when the last pinned message was pinned, if there was one","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":68,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":274,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"setDefaultAutoArchiveDuration","description":"Sets the default auto archive duration for all newly created threads in this channel.","params":[{"name":"defaultAutoArchiveDuration","description":"The new default auto archive duration","type":[[["ThreadAutoArchiveDuration"]]]},{"name":"reason","description":"Reason for changing the channel's default auto archive duration","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["TextChannel",">"]]],"meta":{"line":105,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"setType","description":"Sets the type of this channel (only conversion between text and news is supported)","params":[{"name":"type","description":"The new channel type","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the channel's type","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":115,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"setTopic","description":"Sets a new topic for the guild channel.","examples":["// Set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.error);"],"params":[{"name":"topic","description":"The new topic for the guild channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's topic","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":130,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"createInvite","description":"Creates an invite to this guild channel.","examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":168,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":178,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","implements":["TextBasedChannel#createMessageComponentCollector"],"examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","implements":["TextBasedChannel#awaitMessageComponent"],"examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"bulkDelete","description":"Bulk deletes given messages that are newer than two weeks.","implements":["TextBasedChannel#bulkDelete"],"examples":["// Bulk delete messages\nchannel.bulkDelete(5)\n .then(messages => console.log(`Bulk deleted ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"messages","description":"Messages or number of messages to delete","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]],[["Array","<"],["MessageResolvable",">"]],[["number"]]]},{"name":"filterOld","description":"Filter messages to remove those which are older than two weeks automatically","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Collection","<"],["Snowflake",", ("],["Message","|"],["undefined",")>>"]]],"description":"Returns the deleted messages"},"meta":{"line":319,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":368,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":393,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":403,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":413,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"searchInteraction","description":"Search Slash Command (return raw data)","implements":["TextBasedChannel#searchInteraction"],"params":[{"name":"applicationId","description":"Application ID","type":[[["Snowflake"]]]},{"name":"type","description":"Command Type","default":"CHAT_INPUT","nullable":true,"type":[[["ApplicationCommandType"]]]}],"returns":[[["Object"]]],"meta":{"line":423,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendSlash","description":"Send Slash to this channel","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/SlashCommand.md}"],"implements":["TextBasedChannel#sendSlash"],"examples":["// Send a basic slash\nchannel.sendSlash('botid', 'ping')\n .then(console.log)\n .catch(console.error);","// Send a remote file\nchannel.sendSlash('botid', 'emoji upload', 'https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048', 'test')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"bot","description":"Bot user (BotID, not applicationID)","type":[[["UserResolvable"]]]},{"name":"commandString","description":"Command name (and sub / group formats)","type":[[["string"]]]},{"name":"args","description":"Command arguments","variable":true,"type":[[["any"]],[["Array","<"],["any",">"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":463,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":14,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"BaseGuildVoiceChannel","description":"Represents a voice-based guild channel on Discord.","extends":[[["GuildChannel"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":23,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":29,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":35,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"bitrate","description":"The bitrate of this voice-based channel","type":[[["number"]]],"meta":{"line":48,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"rtcRegion","description":"The RTC region for this voice-based channel. This region is automatically selected if `null`.","nullable":true,"type":[[["string"]]],"meta":{"line":56,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"userLimit","description":"The maximum amount of users allowed in this channel.","type":[[["number"]]],"meta":{"line":64,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"videoQualityMode","description":"The camera video quality mode of the channel.","nullable":true,"type":[[["VideoQualityMode"]]],"meta":{"line":72,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in the channel, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":82,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for this channel in seconds","type":[[["number"]]],"meta":{"line":94,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"members","description":"The members in this voice-based channel","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":107,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"full","description":"Checks if the voice-based channel is full","readonly":true,"type":[[["boolean"]]],"meta":{"line":122,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"joinable","description":"Whether the channel is joinable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":131,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"createInvite","description":"Creates an invite to this guild channel.","examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":155,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":165,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setBitrate","description":"Sets the bitrate of the channel.","examples":["// Set the bitrate of a voice channel\nvoiceChannel.setBitrate(48_000)\n .then(vc => console.log(`Set bitrate to ${vc.bitrate}bps for ${vc.name}`))\n .catch(console.error);"],"params":[{"name":"bitrate","description":"The new bitrate","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's bitrate","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":180,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setRTCRegion","description":"Sets the RTC region of the channel.","examples":["// Set the RTC region to sydney\nchannel.setRTCRegion('sydney');","// Remove a fixed region for this channel - let Discord decide automatically\nchannel.setRTCRegion(null, 'We want to let Discord decide.');"],"params":[{"name":"rtcRegion","description":"The new region of the channel. Set to `null` to remove a specific region for the channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"The reason for modifying this region.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["BaseGuildVoiceChannel",">"]]],"meta":{"line":196,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setUserLimit","description":"Sets the user limit of the channel.","examples":["// Set the user limit of a voice channel\nvoiceChannel.setUserLimit(42)\n .then(vc => console.log(`Set user limit to ${vc.userLimit} for ${vc.name}`))\n .catch(console.error);"],"params":[{"name":"userLimit","description":"The new user limit","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the user limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":211,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setVideoQualityMode","description":"Sets the camera video quality mode of the channel.","params":[{"name":"videoQualityMode","description":"The new camera video quality mode.","type":[[["VideoQualityMode"]],[["number"]]]},{"name":"reason","description":"Reason for changing the camera video quality mode.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":221,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","implements":["TextBasedChannel#createMessageComponentCollector"],"examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","implements":["TextBasedChannel#awaitMessageComponent"],"examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"bulkDelete","description":"Bulk deletes given messages that are newer than two weeks.","implements":["TextBasedChannel#bulkDelete"],"examples":["// Bulk delete messages\nchannel.bulkDelete(5)\n .then(messages => console.log(`Bulk deleted ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"messages","description":"Messages or number of messages to delete","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]],[["Array","<"],["MessageResolvable",">"]],[["number"]]]},{"name":"filterOld","description":"Filter messages to remove those which are older than two weeks automatically","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Collection","<"],["Snowflake",", ("],["Message","|"],["undefined",")>>"]]],"description":"Returns the deleted messages"},"meta":{"line":319,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":368,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":393,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":403,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":413,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":16,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"BaseMessageComponent","description":"Represents an interactive component of a Message or Modal. It should not be necessary to construct this directly.\nSee {@link MessageComponent}","construct":{"name":"BaseMessageComponent","params":[{"name":"data","description":"The options for this component","optional":true,"default":"{}","type":[[["BaseMessageComponent"]],[["BaseMessageComponentOptions"]]]}]},"props":[{"name":"type","description":"The type of this component","nullable":true,"type":[[["MessageComponentType"]]],"meta":{"line":52,"file":"BaseMessageComponent.js","path":"src/structures"}}],"methods":[{"name":"create","description":"Constructs a component based on the type of the incoming data","scope":"static","access":"private","params":[{"name":"data","description":"Data for a MessageComponent","type":[[["MessageComponentOptions"]]]},{"name":"client","description":"Client constructing this component","optional":true,"type":[[["Client"]],[["WebhookClient"]]]}],"returns":{"types":[[["MessageComponent"]],[["ModalComponent"]]],"nullable":true},"meta":{"line":62,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"resolveType","description":"Resolves the type of a component","scope":"static","access":"private","params":[{"name":"type","description":"The type to resolve","type":[[["MessageComponentTypeResolvable"]]]}],"returns":[[["MessageComponentType"]]],"meta":{"line":109,"file":"BaseMessageComponent.js","path":"src/structures"}}],"meta":{"line":10,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"ButtonInteraction","description":"Represents a button interaction.","extends":[[["MessageComponentInteraction"]]],"props":[{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":17,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"message","description":"The message to which the component was attached","type":[[["Message"]],[["APIMessage"]]],"meta":{"line":27,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"customId","description":"The custom id of the component which was interacted with","type":[[["string"]]],"meta":{"line":33,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"componentType","description":"The type of component which was interacted with","type":[[["string"]]],"meta":{"line":39,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":45,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":57,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":63,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"component","description":"The component which was interacted with","readonly":true,"type":[[["MessageActionRowComponent"]],[["APIMessageActionRowComponent"]]],"meta":{"line":78,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"MessageComponentInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"MessageComponentInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"MessageComponentInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"MessageComponentInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"MessageComponentInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"MessageComponentInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","inherits":"MessageComponentInteraction#deferUpdate","inherited":true,"implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","inherits":"MessageComponentInteraction#update","inherited":true,"implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"MessageComponentInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"MessageComponentInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":9,"file":"ButtonInteraction.js","path":"src/structures"}},{"name":"Call","description":"Represents a call","extends":[[["Base"]]],"props":[{"name":"channelId","description":"The channel ID of the call","type":[[["Snowflake"]]],"meta":{"line":17,"file":"Call.js","path":"src/structures"}},{"name":"ringing","description":"The list of user ID who is ringing","type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":23,"file":"Call.js","path":"src/structures"}},{"name":"region","description":"The region of the call","type":[[["string"]]],"meta":{"line":33,"file":"Call.js","path":"src/structures"}},{"name":"channel","description":"The channel of the call","type":[[["DMChannel"]],[["PartialGroupDMChannel"]]],"meta":{"line":45,"file":"Call.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"setVoiceRegion","description":"Sets the voice region of the call","params":[{"name":"region","description":"Region of the call","type":[[["string"]]]}],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":53,"file":"Call.js","path":"src/structures"}}],"meta":{"line":10,"file":"Call.js","path":"src/structures"}},{"name":"CategoryChannel","description":"Represents a guild category channel on Discord.","extends":[[["GuildChannel"]]],"props":[{"name":"parentId","description":"The id of the parent of this channel.","type":[[["null"]]],"meta":{"line":10,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"parent","description":"The parent of this channel.","readonly":true,"type":[[["null"]]],"meta":{"line":16,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"children","description":"Channels that are a part of this category","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildChannel",">"]]],"meta":{"line":28,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":274,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"setParent","description":"Sets the category parent of this channel.\nIt is not possible to set the parent of a CategoryChannel.","params":[{"name":"channel","description":"The channel to set as parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":32,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"createChannel","description":"Creates a new channel within this category.\nYou cannot create a channel of type `GUILD_CATEGORY` inside a CategoryChannel.","params":[{"name":"name","description":"The name of the new channel","type":[[["string"]]]},{"name":"options","description":"Options for creating the new channel","type":[[["CategoryCreateChannelOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":77,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":9,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"Channel","description":"Represents any channel on Discord.","extends":[[["Base"]]],"abstract":true,"props":[{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","examples":["// Delete the channel\nchannel.delete()\n .then(console.log)\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":143,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":32,"file":"Channel.js","path":"src/structures"}},{"name":"ClientApplication","description":"Represents a client application.","extends":[[["Application"]]],"props":[{"name":"commands","description":"The application command manager for this application","type":[[["ApplicationCommandManager"]]],"meta":{"line":30,"file":"ClientApplication.js","path":"src/structures"}},{"name":"tags","description":"The tags this application has (max of 5)","type":[[["Array","<"],["string",">"]]],"meta":{"line":40,"file":"ClientApplication.js","path":"src/structures"}},{"name":"installParams","description":"Settings for this application's default in-app authorization","nullable":true,"type":[[["ClientApplicationInstallParams"]]],"meta":{"line":47,"file":"ClientApplication.js","path":"src/structures"}},{"name":"customInstallURL","description":"This application's custom installation URL","nullable":true,"type":[[["string"]]],"meta":{"line":60,"file":"ClientApplication.js","path":"src/structures"}},{"name":"flags","description":"The flags this application has","type":[[["ApplicationFlags"]]],"meta":{"line":70,"file":"ClientApplication.js","path":"src/structures"}},{"name":"approximateGuildCount","description":"An approximate amount of guilds this application is in.","nullable":true,"type":[[["number"]]],"meta":{"line":78,"file":"ClientApplication.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild associated with this application.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":88,"file":"ClientApplication.js","path":"src/structures"}},{"name":"cover","description":"The hash of the application's cover image","nullable":true,"type":[[["string"]]],"meta":{"line":98,"file":"ClientApplication.js","path":"src/structures"}},{"name":"rpcOrigins","description":"The application's RPC origins, if enabled","type":[[["Array","<"],["string",">"]]],"meta":{"line":108,"file":"ClientApplication.js","path":"src/structures"}},{"name":"botRequireCodeGrant","description":"If this application's bot requires a code grant when using the OAuth2 flow","nullable":true,"type":[[["boolean"]]],"meta":{"line":118,"file":"ClientApplication.js","path":"src/structures"}},{"name":"botPublic","description":"If this application's bot is public","nullable":true,"type":[[["boolean"]]],"meta":{"line":128,"file":"ClientApplication.js","path":"src/structures"}},{"name":"popularCommands","description":"List of popular command","nullable":true,"type":[[["Collection","<"],["Snowflake",", "],["ApplicationCommand",">"]]],"meta":{"line":138,"file":"ClientApplication.js","path":"src/structures"}},{"name":"owner","description":"The owner of this OAuth application","nullable":true,"type":[[["User"]],[["Team"]]],"meta":{"line":148,"file":"ClientApplication.js","path":"src/structures"}},{"name":"guild","description":"The guild associated with this application.","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":160,"file":"ClientApplication.js","path":"src/structures"}},{"name":"partial","description":"Whether this application is partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":169,"file":"ClientApplication.js","path":"src/structures"}},{"name":"id","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":29,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"name","description":"The name of the application","nullable":true,"type":[[["string"]]],"meta":{"line":36,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"description","description":"The application's description","nullable":true,"type":[[["string"]]],"meta":{"line":46,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"icon","description":"The application's icon hash","nullable":true,"type":[[["string"]]],"meta":{"line":56,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"roleConnectionsVerificationURL","description":"This application's role connection verification entry point URL","nullable":true,"type":[[["string"]]],"meta":{"line":66,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"createdTimestamp","description":"The timestamp the application was created at","readonly":true,"type":[[["number"]]],"meta":{"line":77,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"createdAt","description":"The time the application was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":86,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"fetch","description":"Obtains this application from Discord.","async":true,"returns":[[["Promise","<"],["ClientApplication",">"]]],"meta":{"line":177,"file":"ClientApplication.js","path":"src/structures"}},{"name":"fetchRoleConnectionMetadataRecords","description":"Gets this application's role connection metadata records","async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationRoleConnectionMetadata",">>"]]],"meta":{"line":194,"file":"ClientApplication.js","path":"src/structures"}},{"name":"editRoleConnectionMetadataRecords","description":"Updates this application's role connection metadata records","params":[{"name":"records","description":"The new role connection metadata records","type":[[["Array","<"],["ApplicationRoleConnectionMetadataEditOptions",">"]]]}],"async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationRoleConnectionMetadata",">>"]]],"meta":{"line":215,"file":"ClientApplication.js","path":"src/structures"}},{"name":"invite","description":"Invites this application to a guild / server","inherits":"Application#invite","inherited":true,"params":[{"name":"guild_id","description":"The id of the guild that you want to invite the bot to","type":[[["Snowflake"]]]},{"name":"permissions","description":"The permissions for the bot in number form (the default is 8 / Administrator)","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"captcha","description":"The captcha key to add","optional":true,"default":null,"type":[[["string"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"nothing :)"},"meta":{"line":97,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"iconURL","description":"A link to the application's icon.","inherits":"Application#iconURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":127,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"coverURL","description":"A link to this application's cover image.","inherits":"Application#coverURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":137,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"fetchAssets","description":"Gets the application's rich presence assets.","inherits":"Application#fetchAssets","inherited":true,"deprecated":"This will be removed in the next major as it is unsupported functionality.","async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationAsset",">>"]]],"meta":{"line":155,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the application's name instead of the\nApplication object.","inherits":"Application#toString","inherited":true,"examples":["// Logs: Application name: My App\nconsole.log(`Application name: ${application}`);"],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":181,"file":"Application.js","path":"src/structures/interfaces"}}],"meta":{"line":22,"file":"ClientApplication.js","path":"src/structures"}},{"name":"ClientPresence","description":"Represents the client's presence.","extends":[[["Presence"]]],"props":[{"name":"userId","description":"The presence's user id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Presence.js","path":"src/structures"}},{"name":"guild","description":"The guild this presence is in","nullable":true,"type":[[["Guild"]]],"meta":{"line":57,"file":"Presence.js","path":"src/structures"}},{"name":"user","description":"The user of this presence","readonly":true,"nullable":true,"type":[[["User"]]],"meta":{"line":67,"file":"Presence.js","path":"src/structures"}},{"name":"member","description":"The member of this presence","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":76,"file":"Presence.js","path":"src/structures"}},{"name":"status","description":"The status of this presence","type":[[["PresenceStatus"]]],"meta":{"line":86,"file":"Presence.js","path":"src/structures"}},{"name":"activities","description":"The activities of this presence","type":[[["Array","<"],["Activity",">"]]],"meta":{"line":96,"file":"Presence.js","path":"src/structures"}},{"name":"clientStatus","description":"The devices this presence is on","nullable":true,"type":[[["Object"]]],"props":[{"name":"web","description":"The current presence in the web application","nullable":true,"type":[[["ClientPresenceStatus"]]]},{"name":"mobile","description":"The current presence in the mobile application","nullable":true,"type":[[["ClientPresenceStatus"]]]},{"name":"desktop","description":"The current presence in the desktop application","nullable":true,"type":[[["ClientPresenceStatus"]]]}],"meta":{"line":121,"file":"Presence.js","path":"src/structures"}},{"name":"lastModified","description":"The timestamp this presence was last updated","type":[[["number"]]],"meta":{"line":131,"file":"Presence.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"set","description":"Sets the client's presence","params":[{"name":"presence","description":"The data to set the presence to","type":[[["PresenceData"]]]}],"returns":[[["ClientPresence"]]],"meta":{"line":23,"file":"ClientPresence.js","path":"src/structures"}},{"name":"_parse","description":"Parses presence data into a packet ready to be sent to Discord","access":"private","params":[{"name":"presence","description":"The data to parse","type":[[["PresenceData"]]]}],"returns":[[["APIPresence"]]],"meta":{"line":47,"file":"ClientPresence.js","path":"src/structures"}},{"name":"equals","description":"Whether this presence is equal to another.","inherits":"Presence#equals","inherited":true,"params":[{"name":"presence","description":"The presence to compare with","type":[[["Presence"]]]}],"returns":[[["boolean"]]],"meta":{"line":148,"file":"Presence.js","path":"src/structures"}}],"meta":{"line":13,"file":"ClientPresence.js","path":"src/structures"}},{"name":"ClientUser","description":"Represents the logged in client's Discord user.","extends":[[["User"]]],"props":[{"name":"verified","description":"Whether or not this account has been verified","type":[[["boolean"]]],"meta":{"line":27,"file":"ClientUser.js","path":"src/structures"}},{"name":"mfaEnabled","description":"If the bot's {@link ClientApplication#owner Owner} has MFA enabled on their account","nullable":true,"type":[[["boolean"]]],"meta":{"line":35,"file":"ClientUser.js","path":"src/structures"}},{"name":"nitroType","description":"Nitro type of the client user.","type":[[["NitroType"]]],"meta":{"line":49,"file":"ClientUser.js","path":"src/structures"}},{"name":"purchasedFlags","description":"Purchased state of the client user.","nullable":true,"type":[[["PurchasedFlags"]]],"meta":{"line":57,"file":"ClientUser.js","path":"src/structures"}},{"name":"premiumUsageFlags","description":"Premium usage state of the client user.","nullable":true,"type":[[["PremiumUsageFlags"]]],"meta":{"line":65,"file":"ClientUser.js","path":"src/structures"}},{"name":"phoneNumber","description":"Phone number of the client user.","nullable":true,"type":[[["string"]]],"meta":{"line":73,"file":"ClientUser.js","path":"src/structures"}},{"name":"nsfwAllowed","description":"Whether or not the client user is allowed to send NSFW messages [iOS device].","nullable":true,"type":[[["boolean"]]],"meta":{"line":81,"file":"ClientUser.js","path":"src/structures"}},{"name":"emailAddress","description":"Email address of the client user.","nullable":true,"type":[[["string"]]],"meta":{"line":89,"file":"ClientUser.js","path":"src/structures"}},{"name":"friendNicknames","description":"The friend nicknames cache of the client user.","access":"private","type":[[["Collection","<"],["Snowflake",", "],["string",">"]]],"meta":{"line":106,"file":"ClientUser.js","path":"src/structures"}},{"name":"notes","description":"The notes cache of the client user.","access":"private","type":[[["Collection","<"],["Snowflake",", "],["string",">"]]],"meta":{"line":130,"file":"ClientUser.js","path":"src/structures"}},{"name":"presence","description":"Represents the client user's presence","readonly":true,"type":[[["ClientPresence"]]],"meta":{"line":138,"file":"ClientUser.js","path":"src/structures"}},{"name":"id","description":"The user's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"User.js","path":"src/structures"}},{"name":"connectedAccounts","description":"Accounts connected to this user\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["Array","<"],["ConnectionAccount",">"]]],"meta":{"line":49,"file":"User.js","path":"src/structures"}},{"name":"premiumSince","description":"Time that User has nitro (Unix Timestamp)\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["number"]]],"meta":{"line":55,"file":"User.js","path":"src/structures"}},{"name":"premiumGuildSince","description":"Time that User has nitro and boost server (Unix Timestamp)","nullable":true,"type":[[["number"]]],"meta":{"line":60,"file":"User.js","path":"src/structures"}},{"name":"bio","description":"About me (User)\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":66,"file":"User.js","path":"src/structures"}},{"name":"pronouns","description":"Pronouns (User)\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":72,"file":"User.js","path":"src/structures"}},{"name":"application","description":"[Bot] Application","nullable":true,"type":[[["ClientApplication"]]],"meta":{"line":78,"file":"User.js","path":"src/structures"}},{"name":"username","description":"The username of the user","nullable":true,"type":[[["string"]]],"meta":{"line":89,"file":"User.js","path":"src/structures"}},{"name":"globalName","description":"The global name of this user","nullable":true,"type":[[["string"]]],"meta":{"line":99,"file":"User.js","path":"src/structures"}},{"name":"bot","description":"Whether or not the user is a bot","nullable":true,"type":[[["boolean"]]],"meta":{"line":109,"file":"User.js","path":"src/structures"}},{"name":"discriminator","description":"The discriminator of this user\n`'0'`, or a 4-digit stringified number if they're using the legacy username system","nullable":true,"type":[[["string"]]],"meta":{"line":124,"file":"User.js","path":"src/structures"}},{"name":"avatar","description":"The user avatar's hash","nullable":true,"type":[[["string"]]],"meta":{"line":134,"file":"User.js","path":"src/structures"}},{"name":"banner","description":"The user banner's hash\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":145,"file":"User.js","path":"src/structures"}},{"name":"accentColor","description":"The base 10 accent color of the user's banner\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["number"]]],"meta":{"line":156,"file":"User.js","path":"src/structures"}},{"name":"system","description":"Whether the user is an Official Discord System user (part of the urgent message system)","nullable":true,"type":[[["boolean"]]],"meta":{"line":166,"file":"User.js","path":"src/structures"}},{"name":"flags","description":"The flags for this user","nullable":true,"type":[[["UserFlags"]]],"meta":{"line":176,"file":"User.js","path":"src/structures"}},{"name":"botInGuildsCount","description":"Check how many guilds the bot is in (Probably only approximate) (application.fetch() first)","nullable":true,"type":[[["number"]]],"meta":{"line":184,"file":"User.js","path":"src/structures"}},{"name":"avatarDecoration","description":"The user avatar decoration's hash","nullable":true,"type":[[["string"]]],"meta":{"line":192,"file":"User.js","path":"src/structures"}},{"name":"mutualGuilds","description":"This user is on the same servers as Client User\nThe user must be force fetched for this property to be present or be updated","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Guild",">"]]],"meta":{"line":204,"file":"User.js","path":"src/structures"}},{"name":"mutualFriends","description":"Get all mutual friends (Client -> User)","readonly":true,"type":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["User",">>"]]],"meta":{"line":213,"file":"User.js","path":"src/structures"}},{"name":"relationships","description":"Check relationship status (Client -> User)","readonly":true,"type":[[["RelationshipTypes"]]],"meta":{"line":231,"file":"User.js","path":"src/structures"}},{"name":"note","description":"Check note","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":241,"file":"User.js","path":"src/structures"}},{"name":"nickname","description":"Get friend nickname","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":250,"file":"User.js","path":"src/structures"}},{"name":"voice","description":"The voice state of this member","readonly":true,"type":[[["VoiceState"]]],"meta":{"line":259,"file":"User.js","path":"src/structures"}},{"name":"themeColors","description":"The user's theme colors (Profile theme) [Primary, Accent]\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["Array","<"],["number",">"]]],"meta":{"line":302,"file":"User.js","path":"src/structures"}},{"name":"badges","description":"User badges (Boost, Slash, AutoMod, etc.)","nullable":true,"type":[[["Array","<"],["UserBadge",">"]]],"meta":{"line":336,"file":"User.js","path":"src/structures"}},{"name":"partial","description":"Whether this User is a partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":430,"file":"User.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the user was created at","readonly":true,"type":[[["number"]]],"meta":{"line":439,"file":"User.js","path":"src/structures"}},{"name":"createdAt","description":"The time the user was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":448,"file":"User.js","path":"src/structures"}},{"name":"defaultAvatarURL","description":"A link to the user's default avatar","readonly":true,"type":[[["string"]]],"meta":{"line":477,"file":"User.js","path":"src/structures"}},{"name":"hexAccentColor","description":"The hexadecimal version of the user accent color, with a leading hash\nThe user must be force fetched for this property to be present","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":498,"file":"User.js","path":"src/structures"}},{"name":"hexThemeColor","description":"The hexadecimal version of the user theme color, with a leading hash [Primary, Accent]\nThe user must be force fetched for this property to be present or be updated","readonly":true,"nullable":true,"type":[[["Array","<"],["string",">"]]],"meta":{"line":541,"file":"User.js","path":"src/structures"}},{"name":"tag","description":"The tag of this user\nThis user's username, or their legacy tag (e.g. `hydrabolt#0001`)\nif they're using the legacy username system","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":552,"file":"User.js","path":"src/structures"}},{"name":"displayName","description":"The global name of this user, or their username if they don't have one","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":565,"file":"User.js","path":"src/structures"}},{"name":"dmChannel","description":"The DM between the client's user and this user","readonly":true,"nullable":true,"type":[[["DMChannel"]]],"meta":{"line":574,"file":"User.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"_patchNote","description":"Patch note","access":"private","params":[{"name":"data","description":"Note data","type":[[["Object"]]]}],"meta":{"line":124,"file":"ClientUser.js","path":"src/structures"}},{"name":"edit","description":"Edits the logged in client.","params":[{"name":"options","description":"The new data","type":[[["ClientUserEditData"]]]}],"async":true,"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":156,"file":"ClientUser.js","path":"src/structures"}},{"name":"setUsername","description":"Sets the username of the logged in client.\nChanging usernames in Discord is heavily rate limited, with only 2 requests\nevery hour. Use this sparingly!","examples":["// Set username\nclient.user.setUsername('discordjs')\n .then(user => console.log(`My new username is ${user.username}`))\n .catch(console.error);"],"params":[{"name":"username","description":"The new username","type":[[["string"]]]},{"name":"password","description":"The password of the account","type":[[["string"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":176,"file":"ClientUser.js","path":"src/structures"}},{"name":"setAvatar","description":"Sets the avatar of the logged in client.","examples":["// Set avatar\nclient.user.setAvatar('./avatar.png')\n .then(user => console.log(`New avatar set!`))\n .catch(console.error);"],"params":[{"name":"avatar","description":"The new avatar","nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]}],"async":true,"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":196,"file":"ClientUser.js","path":"src/structures"}},{"name":"setBanner","description":"Sets the banner of the logged in client.","examples":["// Set banner\nclient.user.setBanner('./banner.png')\n .then(user => console.log(`New banner set!`))\n .catch(console.error);"],"params":[{"name":"banner","description":"The new banner","nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]}],"async":true,"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":210,"file":"ClientUser.js","path":"src/structures"}},{"name":"setHypeSquad","description":"Set HyperSquad House","examples":["// Set HyperSquad HOUSE_BRAVERY\nclient.user.setHypeSquad(1); || client.user.setHypeSquad('HOUSE_BRAVERY');\n// Leave\nclient.user.setHypeSquad(0);"],"params":[{"name":"type","description":"* `LEAVE`: 0\n* `HOUSE_BRAVERY`: 1\n* `HOUSE_BRILLIANCE`: 2\n* `HOUSE_BALANCE`: 3","type":[[["HypeSquadType"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":232,"file":"ClientUser.js","path":"src/structures"}},{"name":"setAccentColor","description":"Set Accent color","params":[{"name":"color","description":"Color to set","default":null,"type":[[["ColorResolvable"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":251,"file":"ClientUser.js","path":"src/structures"}},{"name":"setDiscriminator","description":"Set discriminator","params":[{"name":"discriminator","description":"It is #1234","type":[[["Userdiscriminator"]]]},{"name":"password","description":"The password of the account","type":[[["string"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":261,"file":"ClientUser.js","path":"src/structures"}},{"name":"setAboutMe","description":"Set About me","params":[{"name":"bio","description":"Bio to set","default":null,"type":[[["string"]],[["null"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":278,"file":"ClientUser.js","path":"src/structures"}},{"name":"setEmail","description":"Change the email","params":[{"name":"email","description":"Email to change","type":[[["Email","<"],["string",">"]]]},{"name":"password","description":"Password of the account","type":[[["string"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":290,"file":"ClientUser.js","path":"src/structures"}},{"name":"setPassword","description":"Set new password","params":[{"name":"oldPassword","description":"Old password","type":[[["string"]]]},{"name":"newPassword","description":"New password to set","type":[[["string"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":308,"file":"ClientUser.js","path":"src/structures"}},{"name":"disableAccount","description":"Disable account","params":[{"name":"password","description":"Password of the account","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":324,"file":"ClientUser.js","path":"src/structures"}},{"name":"setDeaf","description":"Set selfdeaf (Global)","params":[{"name":"status","description":"Whether or not the ClientUser is deafened","type":[[["boolean"]]]}],"returns":[[["boolean"]]],"meta":{"line":341,"file":"ClientUser.js","path":"src/structures"}},{"name":"setMute","description":"Set selfmute (Global)","params":[{"name":"status","description":"Whether or not the ClientUser is muted","type":[[["boolean"]]]}],"returns":[[["boolean"]]],"meta":{"line":355,"file":"ClientUser.js","path":"src/structures"}},{"name":"deleteAccount","description":"Delete account. Warning: Cannot be changed once used!","params":[{"name":"password","description":"Password of the account","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":369,"file":"ClientUser.js","path":"src/structures"}},{"name":"setPresence","description":"Sets the full presence of the client user.","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/RichPresence.md}"],"examples":["// Set the client user's presence\nclient.user.setPresence({ activities: [{ name: 'with discord.js' }], status: 'idle' });"],"params":[{"name":"data","description":"Data for the presence","type":[[["PresenceData"]]]}],"returns":[[["ClientPresence"]]],"meta":{"line":408,"file":"ClientUser.js","path":"src/structures"}},{"name":"setStatus","description":"Sets the status of the client user.","examples":["// Set the client user's status\nclient.user.setStatus('idle');"],"params":[{"name":"status","description":"Status to change to","type":[[["PresenceStatusData"]]]},{"name":"shardId","description":"Shard id(s) to have the activity set on","optional":true,"type":[[["number"]],[["Array","<"],["number",">"]]]}],"returns":[[["ClientPresence"]]],"meta":{"line":430,"file":"ClientUser.js","path":"src/structures"}},{"name":"setActivity","description":"Sets the activity the client user is playing.","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/RichPresence.md}"],"examples":["// Set the client user's activity\nclient.user.setActivity('discord.js', { type: 'WATCHING' });"],"params":[{"name":"name","description":"Activity being played, or options for setting the activity","type":[[["string"]],[["ActivityOptions"]]]},{"name":"options","description":"Options for setting the activity","optional":true,"type":[[["ActivityOptions"]]]}],"returns":[[["ClientPresence"]]],"meta":{"line":453,"file":"ClientUser.js","path":"src/structures"}},{"name":"setAFK","description":"Sets/removes the AFK flag for the client user.","params":[{"name":"afk","description":"Whether or not the user is AFK","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"shardId","description":"Shard Id(s) to have the AFK flag set on","optional":true,"type":[[["number"]],[["Array","<"],["number",">"]]]}],"returns":[[["ClientPresence"]]],"meta":{"line":471,"file":"ClientUser.js","path":"src/structures"}},{"name":"createFriendInvite","description":"Create an invite [Friend Invites]\nmaxAge: 604800 | maxUses: 1","see":["{@link https://github.com/13-05/hidden-disc-docs#js-snippet-for-creating-friend-invites}"],"examples":["// Options not working\nclient.user.createFriendInvite();\n .then(console.log)\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":486,"file":"ClientUser.js","path":"src/structures"}},{"name":"getAllFriendInvites","description":"Get all friend invites","async":true,"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":497,"file":"ClientUser.js","path":"src/structures"}},{"name":"revokeAllFriendInvites","description":"Revoke all friend invites","async":true,"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":510,"file":"ClientUser.js","path":"src/structures"}},{"name":"getMentions","description":"Get a collection of messages mentioning clientUser","params":[{"name":"limit","description":"Maximum number of messages to get","optional":true,"default":25,"type":[[["number"]]]},{"name":"mentionRoles","description":"Whether or not to mention roles","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"mentionEveryone","description":"Whether or not to mention `@everyone`","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":526,"file":"ClientUser.js","path":"src/structures"}},{"name":"setThemeColors","description":"Change Theme color","params":[{"name":"primary","description":"The primary color of the user's profile","type":[[["ColorResolvable"]]]},{"name":"accent","description":"The accent color of the user's profile","type":[[["ColorResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":548,"file":"ClientUser.js","path":"src/structures"}},{"name":"setSamsungActivity","description":"Sets Discord Playing status to \"Playing on Samsung Galaxy\". Only selected gamss from discords database works","examples":["// Set the client user's status\nclient.user.setSamsungActivity('com.YostarJP.BlueArchive', 'START');\n// Update\nclient.user.setSamsungActivity('com.miHoYo.bh3oversea', 'UPDATE');\n// Stop\nclient.user.setSamsungActivity('com.miHoYo.GenshinImpact', 'STOP');"],"params":[{"name":"packageName","description":"Android package name","type":[[["string"]]]},{"name":"type","description":"Must be START, UPDATE, or STOP","default":"START","nullable":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":580,"file":"ClientUser.js","path":"src/structures"}},{"name":"stopRinging","description":"Stop ringing","params":[{"name":"channel","description":"DMChannel | GroupDMChannel","type":[[["ChannelResolvable"]]]}],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":600,"file":"ClientUser.js","path":"src/structures"}},{"name":"fetchBurstCredit","description":"Super Reactions","returns":[[["Promise","<"],["number",">"]]],"meta":{"line":612,"file":"ClientUser.js","path":"src/structures"}},{"name":"setGlobalName","description":"Set global display name","params":[{"name":"globalName","description":"The new display name","type":[[["string"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":621,"file":"ClientUser.js","path":"src/structures"}},{"name":"setPronouns","description":"Set pronouns","params":[{"name":"pronouns","description":"Your pronouns","nullable":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":630,"file":"ClientUser.js","path":"src/structures"}},{"name":"getProfile","description":"Get profile from Discord, if client is in a server with the target.","inherits":"User#getProfile","inherited":true,"params":[{"name":"guildId","description":"The guild id to get the profile from","type":[[["Snowflake"]],[["null"]]]}],"async":true,"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":354,"file":"User.js","path":"src/structures"}},{"name":"setFriend","description":"Friends the user [If incoming request]","inherits":"User#setFriend","inherited":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":376,"file":"User.js","path":"src/structures"}},{"name":"setNickname","description":"Changes the nickname of the friend","inherits":"User#setNickname","inherited":true,"params":[{"name":"nickname","description":"The nickname to change","nullable":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":386,"file":"User.js","path":"src/structures"}},{"name":"sendFriendRequest","description":"Send Friend Request to the user","inherits":"User#sendFriendRequest","inherited":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":395,"file":"User.js","path":"src/structures"}},{"name":"setBlock","description":"Blocks the user","inherits":"User#setBlock","inherited":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":403,"file":"User.js","path":"src/structures"}},{"name":"unBlock","description":"Removes the user from your blocks list","inherits":"User#unBlock","inherited":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":412,"file":"User.js","path":"src/structures"}},{"name":"unFriend","description":"Removes the user from your friends list","inherits":"User#unFriend","inherited":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":421,"file":"User.js","path":"src/structures"}},{"name":"avatarURL","description":"A link to the user's avatar.","inherits":"User#avatarURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":457,"file":"User.js","path":"src/structures"}},{"name":"avatarDecorationURL","description":"A link to the user's avatar decoration.","inherits":"User#avatarDecorationURL","inherited":true,"params":[{"name":"options","description":"Options for the image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":467,"file":"User.js","path":"src/structures"}},{"name":"displayAvatarURL","description":"A link to the user's avatar if they have one.\nOtherwise a link to their default avatar will be returned.","inherits":"User#displayAvatarURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":[[["string"]]],"meta":{"line":488,"file":"User.js","path":"src/structures"}},{"name":"bannerURL","description":"A link to the user's banner.\nThis method will throw an error if called before the user is force fetched.\nSee {@link User#banner} for more info","inherits":"User#bannerURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":510,"file":"User.js","path":"src/structures"}},{"name":"ring","description":"Ring the user's phone / PC (call)","inherits":"User#ring","inherited":true,"deprecated":true,"returns":[[["Promise","<"],["any",">"]]],"meta":{"line":523,"file":"User.js","path":"src/structures"}},{"name":"createDM","description":"Creates a DM channel between the client and the user.","inherits":"User#createDM","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":583,"file":"User.js","path":"src/structures"}},{"name":"deleteDM","description":"Deletes a DM channel (if one exists) between the client and the user. Resolves with the channel if successful.","inherits":"User#deleteDM","inherited":true,"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":591,"file":"User.js","path":"src/structures"}},{"name":"equals","description":"Checks if the user is equal to another.\nIt compares id, username, discriminator, avatar, banner, accent color, and bot flags.\nIt is recommended to compare equality by using `user.id === user2.id` unless you want to compare all properties.","inherits":"User#equals","inherited":true,"params":[{"name":"user","description":"User to compare with","type":[[["User"]]]}],"returns":[[["boolean"]]],"meta":{"line":602,"file":"User.js","path":"src/structures"}},{"name":"_equals","description":"Compares the user with an API user object","access":"private","inherits":"User#_equals","inherited":true,"params":[{"name":"user","description":"The API user object to compare","type":[[["APIUser"]]]}],"returns":[[["boolean"]]],"meta":{"line":623,"file":"User.js","path":"src/structures"}},{"name":"fetchFlags","description":"Fetches this user's flags.","inherits":"User#fetchFlags","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["UserFlags",">"]]],"meta":{"line":642,"file":"User.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this user.","inherits":"User#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":651,"file":"User.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the user's mention instead of the User object.","inherits":"User#toString","inherited":true,"examples":["// Logs: Hello from <@123456789012345678>!\nconsole.log(`Hello from ${user}!`);"],"returns":[[["string"]]],"meta":{"line":662,"file":"User.js","path":"src/structures"}},{"name":"setNote","description":"Set note to user","inherits":"User#setNote","inherited":true,"params":[{"name":"note","description":"Note to set","default":null,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":687,"file":"User.js","path":"src/structures"}},{"name":"presenceFetch","description":"Get presence (~ v12)","inherits":"User#presenceFetch","inherited":true,"async":true,"returns":[[["Promise","<("],["Presence","|"],["null",")>"]]],"meta":{"line":696,"file":"User.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this user.","inherits":"User#send","inherited":true,"implements":["TextBasedChannel#send"],"examples":["// Send a direct message\nuser.send('Hello!')\n .then(message => console.log(`Sent message: ${message.content} to ${user.tag}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":709,"file":"User.js","path":"src/structures"}}],"meta":{"line":18,"file":"ClientUser.js","path":"src/structures"}},{"name":"CommandInteraction","description":"Represents a command interaction.","extends":[[["BaseCommandInteraction"]]],"props":[{"name":"options","description":"The options passed to the command.","type":[[["CommandInteractionOptionResolver"]]],"meta":{"line":18,"file":"CommandInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":20,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandId","description":"The invoked application command's id","type":[[["Snowflake"]]],"meta":{"line":30,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandName","description":"The invoked application command's name","type":[[["string"]]],"meta":{"line":36,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":42,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":48,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":54,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":60,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"command","description":"The invoked application command, if it was fetched before","nullable":true,"type":[[["ApplicationCommand"]]],"meta":{"line":67,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"Returns a string representation of the command interaction.\nThis can then be copied by a user and executed again in a new command while keeping the option order.","returns":[[["string"]]],"meta":{"line":30,"file":"CommandInteraction.js","path":"src/structures"}},{"name":"transformResolved","description":"Transforms the resolved received from the API.","access":"private","inherits":"BaseCommandInteraction#transformResolved","inherited":true,"params":[{"name":"resolved","description":"The received resolved objects","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionResolvedData"]]],"meta":{"line":89,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"transformOption","description":"Transforms an option received from the API.","access":"private","inherits":"BaseCommandInteraction#transformOption","inherited":true,"params":[{"name":"option","description":"The received option","type":[[["APIApplicationCommandOption"]]]},{"name":"resolved","description":"The resolved interaction data","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionOption"]]],"meta":{"line":162,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"BaseCommandInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"BaseCommandInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"BaseCommandInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"BaseCommandInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"BaseCommandInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"BaseCommandInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"BaseCommandInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseCommandInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":10,"file":"CommandInteraction.js","path":"src/structures"}},{"name":"CommandInteractionOptionResolver","description":"A resolver for command interaction options.","props":[{"name":"client","description":"The client that instantiated this.","readonly":true,"type":[[["Client"]]],"meta":{"line":10,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"_group","description":"The name of the subcommand group.","access":"private","nullable":true,"type":[[["string"]]],"meta":{"line":23,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"_subcommand","description":"The name of the subcommand.","access":"private","nullable":true,"type":[[["string"]]],"meta":{"line":30,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"_hoistedOptions","description":"The bottom-level options for the interaction.\nIf there is a subcommand (or subcommand and group), this is the options for the subcommand.","access":"private","type":[[["Array","<"],["CommandInteractionOption",">"]]],"meta":{"line":38,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"data","description":"The interaction options array.","readonly":true,"type":[[["ReadonlyArray","<"],["CommandInteractionOption",">"]]],"meta":{"line":51,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"resolved","description":"The interaction resolved data","type":[[["Readonly","<"],["CommandInteractionResolvedData",">"]]],"meta":{"line":59,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}}],"methods":[{"name":"get","description":"Gets an option by its name.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["CommandInteractionOption"]]],"description":"The option, if found.","nullable":true},"meta":{"line":73,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"_getTypedOption","description":"Gets an option by name and property and checks its type.","access":"private","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"type","description":"The type of the option.","type":[[["ApplicationCommandOptionType"]]]},{"name":"properties","description":"The properties to check for for `required`.","type":[[["Array","<"],["string",">"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","type":[[["boolean"]]]}],"returns":{"types":[[["CommandInteractionOption"]]],"description":"The option, if found.","nullable":true},"meta":{"line":93,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getSubcommand","description":"Gets the selected subcommand.","params":[{"name":"required","description":"Whether to throw an error if there is no subcommand.","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["string"]]],"description":"The name of the selected subcommand, or null if not set and not required.","nullable":true},"meta":{"line":110,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getSubcommandGroup","description":"Gets the selected subcommand group.","params":[{"name":"required","description":"Whether to throw an error if there is no subcommand group.","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["string"]]],"description":"The name of the selected subcommand group, or null if not set and not required.","nullable":true},"meta":{"line":122,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getBoolean","description":"Gets a boolean option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["boolean"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":135,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getChannel","description":"Gets a channel option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["GuildChannel"]],[["ThreadChannel"]],[["APIChannel"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":147,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getString","description":"Gets a string option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["string"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":158,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getInteger","description":"Gets an integer option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["number"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":169,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getNumber","description":"Gets a number option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["number"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":180,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getUser","description":"Gets a user option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["User"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":191,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getMember","description":"Gets a member option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["GuildMember"]],[["APIGuildMember"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":203,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getRole","description":"Gets a role option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["Role"]],[["APIRole"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":214,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getMentionable","description":"Gets a mentionable option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["User"]],[["GuildMember"]],[["APIGuildMember"]],[["Role"]],[["APIRole"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":226,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getMessage","description":"Gets a message option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["Message"]],[["APIMessage"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":238,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getFocused","description":"Gets the focused option.","params":[{"name":"getFull","description":"Whether to get the full option object","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["string"]],[["AutocompleteFocusedOption"]]],"description":"The value of the option, or the whole option if getFull is true"},"meta":{"line":258,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getAttachment","description":"Gets an attachment option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["MessageAttachment"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":270,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}}],"meta":{"line":8,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"ContextMenuInteraction","description":"Represents a context menu interaction.","extends":[[["BaseCommandInteraction"]]],"props":[{"name":"options","description":"The target of the interaction, parsed into options","type":[[["CommandInteractionOptionResolver"]]],"meta":{"line":18,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"targetId","description":"The id of the target of the interaction","type":[[["Snowflake"]]],"meta":{"line":28,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"targetType","description":"The type of the target of the interaction; either USER or MESSAGE","type":[[["ApplicationCommandType"]]],"meta":{"line":34,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":20,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandId","description":"The invoked application command's id","type":[[["Snowflake"]]],"meta":{"line":30,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandName","description":"The invoked application command's name","type":[[["string"]]],"meta":{"line":36,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":42,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":48,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":54,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":60,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"command","description":"The invoked application command, if it was fetched before","nullable":true,"type":[[["ApplicationCommand"]]],"meta":{"line":67,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"resolveContextMenuOptions","description":"Resolves and transforms options received from the API for a context menu interaction.","access":"private","params":[{"name":"data","description":"The interaction data","type":[[["APIApplicationCommandInteractionData"]]]}],"returns":[[["Array","<"],["CommandInteractionOption",">"]]],"meta":{"line":43,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"transformResolved","description":"Transforms the resolved received from the API.","access":"private","inherits":"BaseCommandInteraction#transformResolved","inherited":true,"params":[{"name":"resolved","description":"The received resolved objects","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionResolvedData"]]],"meta":{"line":89,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"transformOption","description":"Transforms an option received from the API.","access":"private","inherits":"BaseCommandInteraction#transformOption","inherited":true,"params":[{"name":"option","description":"The received option","type":[[["APIApplicationCommandOption"]]]},{"name":"resolved","description":"The resolved interaction data","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionOption"]]],"meta":{"line":162,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"BaseCommandInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"BaseCommandInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"BaseCommandInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"BaseCommandInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"BaseCommandInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"BaseCommandInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"BaseCommandInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseCommandInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":11,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"DeveloperPortalApplication","description":"Represents an OAuth2 Application.","extends":[[["Base"]]],"abstract":true,"props":[{"name":"id","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":28,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"name","description":"The name of the application","nullable":true,"type":[[["string"]]],"meta":{"line":35,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"description","description":"The application's description","nullable":true,"type":[[["string"]]],"meta":{"line":45,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"icon","description":"The application's icon hash","nullable":true,"type":[[["string"]]],"meta":{"line":55,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"bot","description":"Bot application","type":[[["User"]]],"meta":{"line":65,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"tags","description":"The tags this application has (max of 5)","type":[[["Array","<"],["string",">"]]],"meta":{"line":72,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"installParams","description":"Settings for this application's default in-app authorization","nullable":true,"type":[[["ClientApplicationInstallParams"]]],"meta":{"line":79,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"customInstallURL","description":"This application's custom installation URL","nullable":true,"type":[[["string"]]],"meta":{"line":92,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"flags","description":"The flags this application has","type":[[["ApplicationFlags"]]],"meta":{"line":102,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"cover","description":"The hash of the application's cover image","nullable":true,"type":[[["string"]]],"meta":{"line":110,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"rpcOrigins","description":"The application's RPC origins, if enabled","type":[[["Array","<"],["string",">"]]],"meta":{"line":120,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"botRequireCodeGrant","description":"If this application's bot requires a code grant when using the OAuth2 flow","nullable":true,"type":[[["boolean"]]],"meta":{"line":130,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"botPublic","description":"If this application's bot is public","nullable":true,"type":[[["boolean"]]],"meta":{"line":140,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"owner","description":"The owner of this OAuth application","nullable":true,"type":[[["User"]],[["Team"]]],"meta":{"line":149,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"redirectURIs","description":"Redirect URIs for this application","type":[[["Array","<"],["string",">"]]],"meta":{"line":160,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"interactionEndpointURL","description":"BOT_HTTP_INTERACTIONS feature flag","nullable":true,"type":[[["string"]]],"meta":{"line":166,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"publicKey","description":"Public key","nullable":true,"type":[[["string"]]],"meta":{"line":172,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"testers","description":"User tester","type":[[["Collection","<"],["Snowflake",", "],["Tester",">"]]],"meta":{"line":183,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"TermsOfService","description":"Terms of service URL","nullable":true,"type":[[["string"]]],"meta":{"line":189,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"PrivacyPolicy","description":"Privacy policy URL","nullable":true,"type":[[["string"]]],"meta":{"line":195,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"roleConnectionsVerificationURL","description":"This application's role connection verification entry point URL","nullable":true,"type":[[["string"]]],"meta":{"line":202,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the application was created at","readonly":true,"type":[[["number"]]],"meta":{"line":212,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"createdAt","description":"The time the application was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":221,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"partial","description":"Whether this application is partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":272,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"iconURL","description":"A link to the application's icon.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":230,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"coverURL","description":"A link to this application's cover image.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":240,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"fetchAssets","description":"Gets the application's rich presence assets.","deprecated":"This will be removed in the next major as it is unsupported functionality.","async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationAsset",">>"]]],"meta":{"line":258,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"fetch","description":"Obtains this application from Discord.","async":true,"returns":[[["Promise","<"],["DeveloperPortalApplication",">"]]],"meta":{"line":280,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"fetchTesters","description":"Gets all testers for this application.","async":true,"returns":[[["Promise","<"],["DeveloperPortalApplication",">"]]],"meta":{"line":290,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"addTester","description":"Add user to this application's allowlist.","params":[{"name":"username","description":"Username of the user to add","type":[[["string"]]]},{"name":"discriminator","description":"Discriminator of the user to add","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["DeveloperPortalApplication",">"]]],"meta":{"line":308,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"deleteTester","description":"Delete user from this application's allowlist.","params":[{"name":"user","description":"User","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["DeveloperPortalApplication",">"]]],"meta":{"line":327,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"edit","description":"Edits this application.","params":[{"name":"data","description":"Edit data for the application","type":[[["ApplicationEditData"]]]}],"async":true,"returns":[[["Promise","<"],["DeveloperPortalApplication",">"]]],"meta":{"line":354,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"createBot","description":"Creates a new bot for this application.","async":true,"returns":[[["Promise","<"],["DeveloperPortalApplication",">"]]],"meta":{"line":381,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"resetClientSecret","description":"Reset CLient Secret for this application.","params":[{"name":"MFACode","description":"The MFA code (if required)","type":[[["number"]]]}],"async":true,"returns":[[["Promise","<"],["string",">"]]],"meta":{"line":393,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"resetBotToken","description":"Reset Bot Token for this application.","params":[{"name":"MFACode","description":"The MFA code (if required)","type":[[["number"]]]}],"async":true,"returns":[[["Promise","<"],["string",">"]]],"meta":{"line":409,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"delete","description":"Deletes this application.","params":[{"name":"MFACode","description":"The MFA code (if required)","type":[[["number"]]]}],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":425,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"addAsset","description":"Add new image to this application. (RPC)","params":[{"name":"image","description":"Image Resolvable","type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"name","description":"Name of the image","type":[[["string"]]]}],"async":true,"returns":[[["ApplicationAsset"]]],"meta":{"line":435,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"deleteAsset","description":"Delete an image from this application. (RPC)","params":[{"name":"id","description":"ID of the image","type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["undefined",">"]]],"meta":{"line":456,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"fetchRoleConnectionMetadataRecords","description":"Gets this application's role connection metadata records","async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationRoleConnectionMetadata",">>"]]],"meta":{"line":465,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"editRoleConnectionMetadataRecords","description":"Updates this application's role connection metadata records","params":[{"name":"records","description":"The new role connection metadata records","type":[[["Array","<"],["ApplicationRoleConnectionMetadataEditOptions",">"]]]}],"async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationRoleConnectionMetadata",">>"]]],"meta":{"line":486,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the application's name instead of the\nApplication object.","examples":["// Logs: Application name: My App\nconsole.log(`Application name: ${application}`);"],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":511,"file":"DeveloperPortalApplication.js","path":"src/structures"}}],"meta":{"line":18,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"DirectoryChannel","description":"Represents a channel that displays a directory of guilds.","extends":[[["Channel"]]],"props":[{"name":"name","description":"The channel's name","type":[[["string"]]],"meta":{"line":16,"file":"DirectoryChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"Channel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete()\n .then(console.log)\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":143,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":9,"file":"DirectoryChannel.js","path":"src/structures"}},{"name":"DMChannel","description":"Represents a direct message channel between two users.","extends":[[["Channel"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"messages","description":"A manager of the messages belonging to this channel","type":[[["MessageManager"]]],"meta":{"line":27,"file":"DMChannel.js","path":"src/structures"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":33,"file":"DMChannel.js","path":"src/structures"}},{"name":"recipient","description":"The recipient on the other end of the DM","type":[[["User"]]],"meta":{"line":44,"file":"DMChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The channel's last message id, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"DMChannel.js","path":"src/structures"}},{"name":"lastPinTimestamp","description":"The timestamp when the last pinned message was pinned, if there was one","nullable":true,"type":[[["number"]]],"meta":{"line":60,"file":"DMChannel.js","path":"src/structures"}},{"name":"messageRequest","description":"Whether the channel is a message request","type":[[["boolean"]]],"meta":{"line":70,"file":"DMChannel.js","path":"src/structures"}},{"name":"messageRequestTimestamp","description":"The timestamp when the message request was created","nullable":true,"type":[[["number"]]],"meta":{"line":78,"file":"DMChannel.js","path":"src/structures"}},{"name":"partial","description":"Whether this DMChannel is a partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":116,"file":"DMChannel.js","path":"src/structures"}},{"name":"voiceUsers","description":"The user in this voice-based channel","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":230,"file":"DMChannel.js","path":"src/structures"}},{"name":"voiceConnection","description":"Get connection to current call","readonly":true,"nullable":true,"type":[[["VoiceConnection"]]],"meta":{"line":244,"file":"DMChannel.js","path":"src/structures"}},{"name":"shard","description":"Get current shard","readonly":true,"type":[[["WebSocketShard"]]],"meta":{"line":256,"file":"DMChannel.js","path":"src/structures"}},{"name":"voiceAdapterCreator","description":"The voice state adapter for this client that can be used with @discordjs/voice to play audio in DM / Group DM channels.","readonly":true,"nullable":true,"type":[[["function"]]],"meta":{"line":264,"file":"DMChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinAt","description":"The date when the last pinned message was pinned, if there was one","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":68,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"acceptMessageRequest","description":"Accept this DMChannel.","async":true,"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":86,"file":"DMChannel.js","path":"src/structures"}},{"name":"cancelMessageRequest","description":"Cancel this DMChannel.","async":true,"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":103,"file":"DMChannel.js","path":"src/structures"}},{"name":"fetch","description":"Fetch this DMChannel.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":125,"file":"DMChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the recipient's mention instead of the\nDMChannel object.","examples":["// Logs: Hello from <@123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":137,"file":"DMChannel.js","path":"src/structures"}},{"name":"call","description":"Call this DMChannel. Return discordjs/voice VoiceConnection","params":[{"name":"options","description":"Options for the call","type":[[["CallOptions"]]]}],"returns":[[["Promise","<"],["VoiceConnection",">"]]],"meta":{"line":163,"file":"DMChannel.js","path":"src/structures"}},{"name":"ring","description":"Ring the user's phone / PC (call)","returns":[[["Promise","<"],["any",">"]]],"meta":{"line":205,"file":"DMChannel.js","path":"src/structures"}},{"name":"sync","description":"Sync VoiceState of this DMChannel.","returns":[[["undefined"]]],"meta":{"line":217,"file":"DMChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","implements":["TextBasedChannel#createMessageComponentCollector"],"examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","implements":["TextBasedChannel#awaitMessageComponent"],"examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"searchInteraction","description":"Search Slash Command (return raw data)","implements":["TextBasedChannel#searchInteraction"],"params":[{"name":"applicationId","description":"Application ID","type":[[["Snowflake"]]]},{"name":"type","description":"Command Type","default":"CHAT_INPUT","nullable":true,"type":[[["ApplicationCommandType"]]]}],"returns":[[["Object"]]],"meta":{"line":423,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendSlash","description":"Send Slash to this channel","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/SlashCommand.md}"],"implements":["TextBasedChannel#sendSlash"],"examples":["// Send a basic slash\nchannel.sendSlash('botid', 'ping')\n .then(console.log)\n .catch(console.error);","// Send a remote file\nchannel.sendSlash('botid', 'emoji upload', 'https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048', 'test')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"bot","description":"Bot user (BotID, not applicationID)","type":[[["UserResolvable"]]]},{"name":"commandString","description":"Command name (and sub / group formats)","type":[[["string"]]]},{"name":"args","description":"Command arguments","variable":true,"type":[[["any"]],[["Array","<"],["any",">"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":463,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"delete","description":"Deletes this channel.","inherits":"Channel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete()\n .then(console.log)\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":143,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":16,"file":"DMChannel.js","path":"src/structures"}},{"name":"Emoji","description":"Represents an emoji, see {@link GuildEmoji} and {@link ReactionEmoji}.","extends":[[["Base"]]],"props":[{"name":"animated","description":"Whether or not the emoji is animated","nullable":true,"type":[[["boolean"]]],"meta":{"line":34,"file":"Emoji.js","path":"src/structures"}},{"name":"name","description":"The emoji's name","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Emoji.js","path":"src/structures"}},{"name":"id","description":"The emoji's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Emoji.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":54,"file":"Emoji.js","path":"src/structures"}},{"name":"identifier","description":"The identifier of this emoji, used for message reactions","readonly":true,"type":[[["string"]]],"meta":{"line":84,"file":"Emoji.js","path":"src/structures"}},{"name":"url","description":"The URL to the emoji file if it's a custom emoji","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":94,"file":"Emoji.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":103,"file":"Emoji.js","path":"src/structures"}},{"name":"createdAt","description":"The time the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":112,"file":"Emoji.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the text required to form a graphical emoji on Discord\ninstead of the Emoji object.","examples":["// Send a custom emoji from a guild:\nconst emoji = guild.emojis.cache.first();\nmsg.channel.send(`Hello! ${emoji}`);","// Send the emoji used in a reaction to the channel the reaction is part of\nreaction.message.channel.send(`The emoji used was: ${reaction.emoji}`);"],"returns":[[["string"]]],"meta":{"line":128,"file":"Emoji.js","path":"src/structures"}}],"meta":{"line":27,"file":"Emoji.js","path":"src/structures"}},{"name":"ForumChannel","description":"Represents a channel that only contains threads","extends":[[["GuildChannel"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":53,"file":"ForumChannel.js","path":"src/structures"}},{"name":"threads","description":"A manager of the threads belonging to this channel","type":[[["GuildForumThreadManager"]]],"meta":{"line":59,"file":"ForumChannel.js","path":"src/structures"}},{"name":"availableTags","description":"The set of tags that can be used in this channel.","type":[[["Array","<"],["GuildForumTag",">"]]],"meta":{"line":71,"file":"ForumChannel.js","path":"src/structures"}},{"name":"defaultReactionEmoji","description":"The emoji to show in the add reaction button on a thread in a guild forum channel","nullable":true,"type":[[["DefaultReactionEmoji"]]],"meta":{"line":81,"file":"ForumChannel.js","path":"src/structures"}},{"name":"defaultThreadRateLimitPerUser","description":"The initial rate limit per user (slowmode) to set on newly created threads in a channel.","nullable":true,"type":[[["number"]]],"meta":{"line":92,"file":"ForumChannel.js","path":"src/structures"}},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for this channel.","nullable":true,"type":[[["number"]]],"meta":{"line":102,"file":"ForumChannel.js","path":"src/structures"}},{"name":"defaultAutoArchiveDuration","description":"The default auto archive duration for newly created threads in this channel.","nullable":true,"type":[[["ThreadAutoArchiveDuration"]]],"meta":{"line":112,"file":"ForumChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If this channel is considered NSFW.","type":[[["boolean"]]],"meta":{"line":122,"file":"ForumChannel.js","path":"src/structures"}},{"name":"topic","description":"The topic of this channel.","nullable":true,"type":[[["string"]]],"meta":{"line":132,"file":"ForumChannel.js","path":"src/structures"}},{"name":"defaultSortOrder","description":"The default sort order mode used to order posts","nullable":true,"type":[[["SortOrderType"]]],"meta":{"line":140,"file":"ForumChannel.js","path":"src/structures"}},{"name":"defaultForumLayout","description":"The default layout type used to display posts","type":[[["ForumLayoutType"]]],"meta":{"line":149,"file":"ForumChannel.js","path":"src/structures"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":274,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"setAvailableTags","description":"Sets the available tags for this forum channel","params":[{"name":"availableTags","description":"The tags to set as available in this channel","type":[[["Array","<"],["GuildForumTagData",">"]]]},{"name":"reason","description":"Reason for changing the available tags","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ForumChannel",">"]]],"meta":{"line":158,"file":"ForumChannel.js","path":"src/structures"}},{"name":"setDefaultReactionEmoji","description":"Sets the default reaction emoji for this channel","params":[{"name":"defaultReactionEmoji","description":"The emoji to set as the default reaction emoji","nullable":true,"type":[[["DefaultReactionEmoji"]]]},{"name":"reason","description":"Reason for changing the default reaction emoji","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ForumChannel",">"]]],"meta":{"line":168,"file":"ForumChannel.js","path":"src/structures"}},{"name":"setDefaultThreadRateLimitPerUser","description":"Sets the default rate limit per user (slowmode) for new threads in this channel","params":[{"name":"defaultThreadRateLimitPerUser","description":"The rate limit to set on newly created threads in this channel","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the default rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ForumChannel",">"]]],"meta":{"line":178,"file":"ForumChannel.js","path":"src/structures"}},{"name":"setDefaultSortOrder","description":"Sets the default sort order mode used to order posts","params":[{"name":"defaultSortOrder","description":"The default sort order mode to set on this channel","nullable":true,"type":[[["SortOrderType"]]]},{"name":"reason","description":"Reason for changing the default sort order","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ForumChannel",">"]]],"meta":{"line":188,"file":"ForumChannel.js","path":"src/structures"}},{"name":"setDefaultForumLayout","description":"Sets the default forum layout type used to display posts","params":[{"name":"defaultForumLayout","description":"The default forum layout type to set on this channel","type":[[["ForumLayoutType"]]]},{"name":"reason","description":"Reason for changing the default forum layout","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ForumChannel",">"]]],"meta":{"line":198,"file":"ForumChannel.js","path":"src/structures"}},{"name":"createInvite","description":"Creates an invite to this guild channel.","examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":212,"file":"ForumChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":222,"file":"ForumChannel.js","path":"src/structures"}},{"name":"setDefaultAutoArchiveDuration","description":"Sets the default auto archive duration for all newly created threads in this channel.","params":[{"name":"defaultAutoArchiveDuration","description":"The new default auto archive duration","type":[[["ThreadAutoArchiveDuration"]]]},{"name":"reason","description":"Reason for changing the channel's default auto archive duration","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ForumChannel",">"]]],"meta":{"line":232,"file":"ForumChannel.js","path":"src/structures"}},{"name":"setTopic","description":"Sets a new topic for the guild channel.","examples":["// Set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.error);"],"params":[{"name":"topic","description":"The new topic for the guild channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's topic","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ForumChannel",">"]]],"meta":{"line":247,"file":"ForumChannel.js","path":"src/structures"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":368,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":393,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":403,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":413,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":45,"file":"ForumChannel.js","path":"src/structures"}},{"name":"Guild","description":"Represents a guild (or a server) on Discord.\nIt's recommended to see if a guild is available before performing operations or reading data from it. You can\ncheck this with {@link Guild#available}.","extends":[[["AnonymousGuild"]]],"props":[{"name":"members","description":"A manager of the members belonging to this guild.","type":[[["GuildMemberManager"]]],"meta":{"line":66,"file":"Guild.js","path":"src/structures"}},{"name":"channels","description":"A manager of the channels belonging to this guild.","type":[[["GuildChannelManager"]]],"meta":{"line":72,"file":"Guild.js","path":"src/structures"}},{"name":"bans","description":"A manager of the bans belonging to this guild.","type":[[["GuildBanManager"]]],"meta":{"line":78,"file":"Guild.js","path":"src/structures"}},{"name":"roles","description":"A manager of the roles belonging to this guild.","type":[[["RoleManager"]]],"meta":{"line":84,"file":"Guild.js","path":"src/structures"}},{"name":"presences","description":"A manager of the presences belonging to this guild.","type":[[["PresenceManager"]]],"meta":{"line":90,"file":"Guild.js","path":"src/structures"}},{"name":"voiceStates","description":"A manager of the voice states of this guild.","type":[[["VoiceStateManager"]]],"meta":{"line":96,"file":"Guild.js","path":"src/structures"}},{"name":"stageInstances","description":"A manager of the stage instances of this guild.","type":[[["StageInstanceManager"]]],"meta":{"line":102,"file":"Guild.js","path":"src/structures"}},{"name":"invites","description":"A manager of the invites of this guild.","type":[[["GuildInviteManager"]]],"meta":{"line":108,"file":"Guild.js","path":"src/structures"}},{"name":"scheduledEvents","description":"A manager of the scheduled events of this guild.","type":[[["GuildScheduledEventManager"]]],"meta":{"line":114,"file":"Guild.js","path":"src/structures"}},{"name":"autoModerationRules","description":"A manager of the auto moderation rules of this guild.","type":[[["AutoModerationRuleManager"]]],"meta":{"line":120,"file":"Guild.js","path":"src/structures"}},{"name":"available","description":"Whether the guild is available to access. If it is not available, it indicates a server outage.","type":[[["boolean"]]],"meta":{"line":129,"file":"Guild.js","path":"src/structures"}},{"name":"shardId","description":"The id of the shard this Guild belongs to.","type":[[["number"]]],"meta":{"line":139,"file":"Guild.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted.","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":149,"file":"Guild.js","path":"src/structures"}},{"name":"shard","description":"The Shard this Guild belongs to.","readonly":true,"type":[[["WebSocketShard"]]],"meta":{"line":179,"file":"Guild.js","path":"src/structures"}},{"name":"discoverySplash","description":"The hash of the guild discovery splash image.","nullable":true,"type":[[["string"]]],"meta":{"line":199,"file":"Guild.js","path":"src/structures"}},{"name":"memberCount","description":"The full amount of members in this guild.","type":[[["number"]]],"meta":{"line":207,"file":"Guild.js","path":"src/structures"}},{"name":"large","description":"Whether the guild is \"large\" (has more than {@link WebsocketOptions large_threshold} members, 50 by default).","type":[[["boolean"]]],"meta":{"line":215,"file":"Guild.js","path":"src/structures"}},{"name":"premiumProgressBarEnabled","description":"Whether this guild has its premium (boost) progress bar enabled.","type":[[["boolean"]]],"meta":{"line":223,"file":"Guild.js","path":"src/structures"}},{"name":"applicationId","description":"The id of the application that created this guild (if applicable).","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":271,"file":"Guild.js","path":"src/structures"}},{"name":"afkTimeout","description":"The time in seconds before a user is counted as \"away from keyboard\".","nullable":true,"type":[[["number"]]],"meta":{"line":279,"file":"Guild.js","path":"src/structures"}},{"name":"afkChannelId","description":"The id of the voice channel where AFK members are moved.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":287,"file":"Guild.js","path":"src/structures"}},{"name":"systemChannelId","description":"The system channel's id.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":295,"file":"Guild.js","path":"src/structures"}},{"name":"premiumTier","description":"The premium tier of this guild.","type":[[["PremiumTier"]]],"meta":{"line":303,"file":"Guild.js","path":"src/structures"}},{"name":"widgetEnabled","description":"Whether widget images are enabled on this guild.","nullable":true,"type":[[["boolean"]]],"meta":{"line":311,"file":"Guild.js","path":"src/structures"}},{"name":"widgetChannelId","description":"The widget channel's id, if enabled.","nullable":true,"type":[[["string"]]],"meta":{"line":319,"file":"Guild.js","path":"src/structures"}},{"name":"explicitContentFilter","description":"The explicit content filter level of the guild.","type":[[["ExplicitContentFilterLevel"]]],"meta":{"line":327,"file":"Guild.js","path":"src/structures"}},{"name":"mfaLevel","description":"The required MFA level for this guild.","type":[[["MFALevel"]]],"meta":{"line":335,"file":"Guild.js","path":"src/structures"}},{"name":"joinedTimestamp","description":"The timestamp the client user joined the guild at.","type":[[["number"]]],"meta":{"line":343,"file":"Guild.js","path":"src/structures"}},{"name":"defaultMessageNotifications","description":"The default message notification level of the guild.","type":[[["DefaultMessageNotificationLevel"]]],"meta":{"line":351,"file":"Guild.js","path":"src/structures"}},{"name":"systemChannelFlags","description":"The value set for the guild's system channel flags.","type":[[["Readonly","<"],["SystemChannelFlags",">"]]],"meta":{"line":359,"file":"Guild.js","path":"src/structures"}},{"name":"maximumMembers","description":"The maximum amount of members the guild can have.","nullable":true,"type":[[["number"]]],"meta":{"line":367,"file":"Guild.js","path":"src/structures"}},{"name":"maximumPresences","description":"The maximum amount of presences the guild can have.\nYou will need to fetch the guild using {@link Guild#fetch} if you want to receive this parameter.","nullable":true,"type":[[["number"]]],"meta":{"line":378,"file":"Guild.js","path":"src/structures"}},{"name":"maxVideoChannelUsers","description":"The maximum amount of users allowed in a video channel.","nullable":true,"type":[[["number"]]],"meta":{"line":388,"file":"Guild.js","path":"src/structures"}},{"name":"maxStageVideoChannelUsers","description":"The maximum amount of users allowed in a stage video channel.","nullable":true,"type":[[["number"]]],"meta":{"line":398,"file":"Guild.js","path":"src/structures"}},{"name":"approximateMemberCount","description":"The approximate amount of members the guild has.\nYou will need to fetch the guild using {@link Guild#fetch} if you want to receive this parameter.","nullable":true,"type":[[["number"]]],"meta":{"line":409,"file":"Guild.js","path":"src/structures"}},{"name":"approximatePresenceCount","description":"The approximate amount of presences the guild has.\nYou will need to fetch the guild using {@link Guild#fetch} if you want to receive this parameter.","nullable":true,"type":[[["number"]]],"meta":{"line":420,"file":"Guild.js","path":"src/structures"}},{"name":"vanityURLUses","description":"The use count of the vanity URL code of the guild, if any.\nYou will need to fetch this parameter using {@link Guild#fetchVanityData} if you want to receive it.","nullable":true,"type":[[["number"]]],"meta":{"line":430,"file":"Guild.js","path":"src/structures"}},{"name":"rulesChannelId","description":"The rules channel's id for the guild.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":437,"file":"Guild.js","path":"src/structures"}},{"name":"publicUpdatesChannelId","description":"The community updates channel's id for the guild.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":445,"file":"Guild.js","path":"src/structures"}},{"name":"preferredLocale","description":"The preferred locale of the guild, defaults to `en-US`.","see":["{@link https://discord.com/developers/docs/reference#locales}"],"type":[[["Locale"]]],"meta":{"line":454,"file":"Guild.js","path":"src/structures"}},{"name":"safetyAlertsChannelId","description":"The safety alerts channel's id for the guild","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":462,"file":"Guild.js","path":"src/structures"}},{"name":"ownerId","description":"The user id of this guild's owner.","type":[[["Snowflake"]]],"meta":{"line":495,"file":"Guild.js","path":"src/structures"}},{"name":"emojis","description":"A manager of the emojis belonging to this guild.","type":[[["GuildEmojiManager"]]],"meta":{"line":530,"file":"Guild.js","path":"src/structures"}},{"name":"stickers","description":"A manager of the stickers belonging to this guild.","type":[[["GuildStickerManager"]]],"meta":{"line":544,"file":"Guild.js","path":"src/structures"}},{"name":"joinedAt","description":"The time the client user joined the guild.","readonly":true,"type":[[["Date"]]],"meta":{"line":561,"file":"Guild.js","path":"src/structures"}},{"name":"afkChannel","description":"AFK voice channel for this guild.","readonly":true,"nullable":true,"type":[[["VoiceChannel"]]],"meta":{"line":589,"file":"Guild.js","path":"src/structures"}},{"name":"systemChannel","description":"System channel for this guild.","readonly":true,"nullable":true,"type":[[["TextChannel"]]],"meta":{"line":598,"file":"Guild.js","path":"src/structures"}},{"name":"safetyAlertsChannel","description":"Safety alerts channel for this guild","readonly":true,"nullable":true,"type":[[["TextChannel"]]],"meta":{"line":607,"file":"Guild.js","path":"src/structures"}},{"name":"widgetChannel","description":"Widget channel for this guild.","readonly":true,"nullable":true,"type":[[["TextChannel"]],[["NewsChannel"]],[["VoiceChannel"]],[["StageChannel"]],[["ForumChannel"]]],"meta":{"line":616,"file":"Guild.js","path":"src/structures"}},{"name":"rulesChannel","description":"Rules channel for this guild.","readonly":true,"nullable":true,"type":[[["TextChannel"]]],"meta":{"line":625,"file":"Guild.js","path":"src/structures"}},{"name":"publicUpdatesChannel","description":"Public updates channel for this guild.","readonly":true,"nullable":true,"type":[[["TextChannel"]]],"meta":{"line":634,"file":"Guild.js","path":"src/structures"}},{"name":"me","description":"The client user as a GuildMember of this guild.","readonly":true,"nullable":true,"deprecated":"Use {@link GuildMemberManager#me} instead.","type":[[["GuildMember"]]],"meta":{"line":644,"file":"Guild.js","path":"src/structures"}},{"name":"maximumBitrate","description":"The maximum bitrate available for this guild.","readonly":true,"type":[[["number"]]],"meta":{"line":658,"file":"Guild.js","path":"src/structures"}},{"name":"voiceAdapterCreator","description":"The voice state adapter for this guild that can be used with @discordjs/voice to play audio in voice\nand stage channels.","readonly":true,"type":[[["function"]]],"meta":{"line":1673,"file":"Guild.js","path":"src/structures"}},{"name":"splash","description":"The hash of the guild invite splash image","nullable":true,"type":[[["string"]]],"meta":{"line":25,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"banner","description":"The hash of the guild banner","nullable":true,"type":[[["string"]]],"meta":{"line":33,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"description","description":"The description of the guild, if any","nullable":true,"type":[[["string"]]],"meta":{"line":41,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"verificationLevel","description":"The verification level of the guild","type":[[["VerificationLevel"]]],"meta":{"line":49,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"vanityURLCode","description":"The vanity invite code of the guild, if any","nullable":true,"type":[[["string"]]],"meta":{"line":57,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"nsfwLevel","description":"The NSFW level of this guild","type":[[["NSFWLevel"]]],"meta":{"line":65,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"premiumSubscriptionCount","description":"The total number of boosts for this server","nullable":true,"type":[[["number"]]],"meta":{"line":73,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"id","description":"The guild's id","type":[[["Snowflake"]]],"meta":{"line":19,"file":"BaseGuild.js","path":"src/structures"}},{"name":"name","description":"The name of this guild","type":[[["string"]]],"meta":{"line":25,"file":"BaseGuild.js","path":"src/structures"}},{"name":"icon","description":"The icon hash of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":31,"file":"BaseGuild.js","path":"src/structures"}},{"name":"features","description":"An array of features available to this guild","type":[[["Array","<"],["Features",">"]]],"meta":{"line":37,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this guild was created at","readonly":true,"type":[[["number"]]],"meta":{"line":45,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdAt","description":"The time this guild was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":54,"file":"BaseGuild.js","path":"src/structures"}},{"name":"nameAcronym","description":"The acronym that shows up in place of a guild icon","readonly":true,"type":[[["string"]]],"meta":{"line":63,"file":"BaseGuild.js","path":"src/structures"}},{"name":"partnered","description":"Whether this guild is partnered","readonly":true,"type":[[["boolean"]]],"meta":{"line":75,"file":"BaseGuild.js","path":"src/structures"}},{"name":"verified","description":"Whether this guild is verified","readonly":true,"type":[[["boolean"]]],"meta":{"line":84,"file":"BaseGuild.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"discoverySplashURL","description":"The URL to this guild's discovery splash image.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":570,"file":"Guild.js","path":"src/structures"}},{"name":"fetchOwner","description":"Fetches the owner of the guild.\nIf the member object isn't needed, use {@link Guild#ownerId} instead.","params":[{"name":"options","description":"The options for fetching the member","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":580,"file":"Guild.js","path":"src/structures"}},{"name":"mute","description":"Mute a guild","examples":["guild.mute(true, 3600) // mutes the guild for an hour\nguild.mute(true, -1) // mutes the guild forever\nguild.mute(false); // unmutes the guild"],"params":[{"name":"mute","description":"Weather or not you want to mute the guild","type":[[["boolean"]]]},{"name":"time","description":"The amount of time you want to mute the server for in seconds","nullable":true,"type":[[["number"]]]}],"async":true,"returns":{"types":[[["boolean"]]],"description":"true if it worked and false if it didn't"},"meta":{"line":685,"file":"Guild.js","path":"src/structures"}},{"name":"fetchIntegrations","description":"Fetches a collection of integrations to this guild.\nResolves with a collection mapping integrations by their ids.","examples":["// Fetch integrations\nguild.fetchIntegrations()\n .then(integrations => console.log(`Fetched ${integrations.size} integrations`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Collection","<("],["Snowflake","|"],["string","), "],["Integration",">>"]]],"meta":{"line":709,"file":"Guild.js","path":"src/structures"}},{"name":"fetchTemplates","description":"Fetches a collection of templates from this guild.\nResolves with a collection mapping templates by their codes.","async":true,"returns":[[["Promise","<"],["Collection","<"],["string",", "],["GuildTemplate",">>"]]],"meta":{"line":722,"file":"Guild.js","path":"src/structures"}},{"name":"fetchWelcomeScreen","description":"Fetches the welcome screen for this guild.","async":true,"returns":[[["Promise","<"],["WelcomeScreen",">"]]],"meta":{"line":731,"file":"Guild.js","path":"src/structures"}},{"name":"createTemplate","description":"Creates a template for the guild.","params":[{"name":"name","description":"The name for the template","type":[[["string"]]]},{"name":"description","description":"The description for the template","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildTemplate",">"]]],"meta":{"line":742,"file":"Guild.js","path":"src/structures"}},{"name":"fetchPreview","description":"Obtains a guild preview for this guild from Discord.","async":true,"returns":[[["Promise","<"],["GuildPreview",">"]]],"meta":{"line":751,"file":"Guild.js","path":"src/structures"}},{"name":"fetchVanityData","description":"Fetches the vanity URL invite object to this guild.\nResolves with an object containing the vanity URL invite code and the use count.","examples":["// Fetch invite data\nguild.fetchVanityData()\n .then(res => {\n console.log(`Vanity URL: https://discord.gg/${res.code} with ${res.uses} uses`);\n })\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Vanity",">"]]],"meta":{"line":775,"file":"Guild.js","path":"src/structures"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the guild.","examples":["// Fetch webhooks\nguild.fetchWebhooks()\n .then(webhooks => console.log(`Fetched ${webhooks.size} webhooks`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":792,"file":"Guild.js","path":"src/structures"}},{"name":"fetchWidget","description":"Fetches the guild widget data, requires the widget to be enabled.","examples":["// Fetches the guild widget data\nguild.fetchWidget()\n .then(widget => console.log(`The widget shows ${widget.channels.size} channels`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Widget",">"]]],"meta":{"line":810,"file":"Guild.js","path":"src/structures"}},{"name":"fetchWidgetSettings","description":"Fetches the guild widget settings.","examples":["// Fetches the guild widget settings\nguild.fetchWidgetSettings()\n .then(widget => console.log(`The widget is ${widget.enabled ? 'enabled' : 'disabled'}`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["GuildWidgetSettings",">"]]],"meta":{"line":837,"file":"Guild.js","path":"src/structures"}},{"name":"fetchAuditLogs","description":"Fetches audit logs for this guild.","examples":["// Output audit log entries\nguild.fetchAuditLogs()\n .then(audit => console.log(audit.entries.first()))\n .catch(console.error);"],"params":[{"name":"options","description":"Options for fetching audit logs","optional":true,"default":"{}","type":[[["GuildAuditLogsFetchOptions"]]]}],"async":true,"returns":[[["Promise","<"],["GuildAuditLogs",">"]]],"meta":{"line":867,"file":"Guild.js","path":"src/structures"}},{"name":"edit","description":"Updates the guild with new information - e.g. a new name.","examples":["// Set the guild name\nguild.edit({\n name: 'Discord Guild',\n})\n .then(updated => console.log(`New guild name ${updated}`))\n .catch(console.error);"],"params":[{"name":"data","description":"The data to update the guild with","type":[[["GuildEditData"]]]},{"name":"reason","description":"Reason for editing this guild","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":933,"file":"Guild.js","path":"src/structures"}},{"name":"editWelcomeScreen","description":"Updates the guild's welcome screen.","examples":["guild.editWelcomeScreen({\n description: 'Hello World',\n enabled: true,\n welcomeChannels: [\n {\n description: 'foobar',\n channel: '222197033908436994',\n }\n ],\n})"],"params":[{"name":"data","description":"Data to edit the welcome screen with","type":[[["WelcomeScreenEditData"]]]}],"async":true,"returns":[[["Promise","<"],["WelcomeScreen",">"]]],"meta":{"line":1048,"file":"Guild.js","path":"src/structures"}},{"name":"setExplicitContentFilter","description":"Edits the level of the explicit content filter.","params":[{"name":"explicitContentFilter","description":"The new level of the explicit content filter","nullable":true,"type":[[["ExplicitContentFilterLevel"]],[["number"]]]},{"name":"reason","description":"Reason for changing the level of the guild's explicit content filter","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1076,"file":"Guild.js","path":"src/structures"}},{"name":"setDefaultMessageNotifications","description":"Edits the setting of the default message notifications of the guild.","params":[{"name":"defaultMessageNotifications","description":"The new default message notification level of the guild","type":[[["DefaultMessageNotificationLevel"]],[["number"]]]},{"name":"reason","description":"Reason for changing the setting of the default message notifications","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1087,"file":"Guild.js","path":"src/structures"}},{"name":"setSystemChannelFlags","description":"Edits the flags of the default message notifications of the guild.","params":[{"name":"systemChannelFlags","description":"The new flags for the default message notifications","type":[[["SystemChannelFlagsResolvable"]]]},{"name":"reason","description":"Reason for changing the flags of the default message notifications","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1098,"file":"Guild.js","path":"src/structures"}},{"name":"setName","description":"Edits the name of the guild.","examples":["// Edit the guild name\nguild.setName('Discord Guild')\n .then(updated => console.log(`Updated guild name to ${updated.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name of the guild","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1113,"file":"Guild.js","path":"src/structures"}},{"name":"setVerificationLevel","description":"Edits the verification level of the guild.","examples":["// Edit the guild verification level\nguild.setVerificationLevel(1)\n .then(updated => console.log(`Updated guild verification level to ${guild.verificationLevel}`))\n .catch(console.error);"],"params":[{"name":"verificationLevel","description":"The new verification level of the guild","type":[[["VerificationLevel"]],[["number"]]]},{"name":"reason","description":"Reason for changing the guild's verification level","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1128,"file":"Guild.js","path":"src/structures"}},{"name":"setAFKChannel","description":"Edits the AFK channel of the guild.","examples":["// Edit the guild AFK channel\nguild.setAFKChannel(channel)\n .then(updated => console.log(`Updated guild AFK channel to ${guild.afkChannel.name}`))\n .catch(console.error);"],"params":[{"name":"afkChannel","description":"The new AFK channel","nullable":true,"type":[[["VoiceChannelResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's AFK channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1143,"file":"Guild.js","path":"src/structures"}},{"name":"setSystemChannel","description":"Edits the system channel of the guild.","examples":["// Edit the guild system channel\nguild.setSystemChannel(channel)\n .then(updated => console.log(`Updated guild system channel to ${guild.systemChannel.name}`))\n .catch(console.error);"],"params":[{"name":"systemChannel","description":"The new system channel","nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's system channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1158,"file":"Guild.js","path":"src/structures"}},{"name":"setAFKTimeout","description":"Edits the AFK timeout of the guild.","examples":["// Edit the guild AFK channel\nguild.setAFKTimeout(60)\n .then(updated => console.log(`Updated guild AFK timeout to ${guild.afkTimeout}`))\n .catch(console.error);"],"params":[{"name":"afkTimeout","description":"The time in seconds that a user must be idle to be considered AFK","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the guild's AFK timeout","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1173,"file":"Guild.js","path":"src/structures"}},{"name":"setIcon","description":"Sets a new guild icon.","examples":["// Edit the guild icon\nguild.setIcon('./icon.png')\n .then(updated => console.log('Updated the guild icon'))\n .catch(console.error);"],"params":[{"name":"icon","description":"The new icon of the guild","nullable":true,"type":[[["Base64Resolvable"]],[["BufferResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's icon","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1188,"file":"Guild.js","path":"src/structures"}},{"name":"setOwner","description":"Sets a new owner of the guild.","examples":["// Edit the guild owner\nguild.setOwner(guild.members.cache.first())\n .then(guild => guild.fetchOwner())\n .then(owner => console.log(`Updated the guild owner to ${owner.displayName}`))\n .catch(console.error);"],"params":[{"name":"owner","description":"The new owner of the guild","type":[[["GuildMemberResolvable"]]]},{"name":"reason","description":"Reason for setting the new owner","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1204,"file":"Guild.js","path":"src/structures"}},{"name":"setSplash","description":"Sets a new guild invite splash image.","examples":["// Edit the guild splash\nguild.setSplash('./splash.png')\n .then(updated => console.log('Updated the guild splash'))\n .catch(console.error);"],"params":[{"name":"splash","description":"The new invite splash image of the guild","nullable":true,"type":[[["Base64Resolvable"]],[["BufferResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's invite splash image","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1219,"file":"Guild.js","path":"src/structures"}},{"name":"setDiscoverySplash","description":"Sets a new guild discovery splash image.","examples":["// Edit the guild discovery splash\nguild.setDiscoverySplash('./discoverysplash.png')\n .then(updated => console.log('Updated the guild discovery splash'))\n .catch(console.error);"],"params":[{"name":"discoverySplash","description":"The new discovery splash image of the guild","nullable":true,"type":[[["Base64Resolvable"]],[["BufferResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's discovery splash image","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1234,"file":"Guild.js","path":"src/structures"}},{"name":"setBanner","description":"Sets a new guild's banner.","examples":["guild.setBanner('./banner.png')\n .then(updated => console.log('Updated the guild banner'))\n .catch(console.error);"],"params":[{"name":"banner","description":"The new banner of the guild","nullable":true,"type":[[["Base64Resolvable"]],[["BufferResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's banner","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1248,"file":"Guild.js","path":"src/structures"}},{"name":"setRulesChannel","description":"Edits the rules channel of the guild.","examples":["// Edit the guild rules channel\nguild.setRulesChannel(channel)\n .then(updated => console.log(`Updated guild rules channel to ${guild.rulesChannel.name}`))\n .catch(console.error);"],"params":[{"name":"rulesChannel","description":"The new rules channel","nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's rules channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1263,"file":"Guild.js","path":"src/structures"}},{"name":"setPosition","description":"Change Guild Position (from * to Folder or Home).","examples":["// Move guild to folderID 123456, index 1\nguild.setPosition(1, 'FOLDER', 123456)\n.then(guild => console.log(`Guild moved to folderID ${guild.folder.folderId}`));"],"params":[{"name":"position","description":"Guild Position\n* **WARNING**: Type = `FOLDER`, newPosition is the guild's index in the Folder.","type":[[["number"]]]},{"name":"type","description":"Move to folder or home\n* `FOLDER`: 1\n* `HOME`: 2","type":[[["string"]],[["number"]]]},{"name":"folderID","description":"If you want to move to folder","type":[[["string"]],[["number"]],[["void"]],[["null"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1280,"file":"Guild.js","path":"src/structures"}},{"name":"setPublicUpdatesChannel","description":"Edits the community updates channel of the guild.","examples":["// Edit the guild community updates channel\nguild.setPublicUpdatesChannel(channel)\n .then(updated => console.log(`Updated guild community updates channel to ${guild.publicUpdatesChannel.name}`))\n .catch(console.error);"],"params":[{"name":"publicUpdatesChannel","description":"The new community updates channel","nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's community updates channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1319,"file":"Guild.js","path":"src/structures"}},{"name":"setPreferredLocale","description":"Edits the preferred locale of the guild.","examples":["// Edit the guild preferred locale\nguild.setPreferredLocale('en-US')\n .then(updated => console.log(`Updated guild preferred locale to ${guild.preferredLocale}`))\n .catch(console.error);"],"params":[{"name":"preferredLocale","description":"The new preferred locale of the guild","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild's preferred locale","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1334,"file":"Guild.js","path":"src/structures"}},{"name":"setSafetyAlertsChannel","description":"Edits the safety alerts channel of the guild.","examples":["// Edit the guild safety alerts channel\nguild.setSafetyAlertsChannel(channel)\n .then(updated => console.log(`Updated guild safety alerts channel to ${updated.safetyAlertsChannel.name}`))\n .catch(console.error);"],"params":[{"name":"safetyAlertsChannel","description":"The new safety alerts channel","nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's safety alerts channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1349,"file":"Guild.js","path":"src/structures"}},{"name":"setPremiumProgressBarEnabled","description":"Edits the enabled state of the guild's premium progress bar.","params":[{"name":"enabled","description":"The new enabled state of the guild's premium progress bar","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the state of the guild's premium progress bar","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1359,"file":"Guild.js","path":"src/structures"}},{"name":"setChannelPositions","description":"Batch-updates the guild's channels' positions.\nOnly one channel's parent can be changed at a time.","examples":["guild.setChannelPositions([{ channel: channelId, position: newChannelIndex }])\n .then(guild => console.log(`Updated channel positions for ${guild}`))\n .catch(console.error);"],"deprecated":"Use {@link GuildChannelManager#setPositions} instead","params":[{"name":"channelPositions","description":"Channel positions to update","type":[[["Array","<"],["ChannelPosition",">"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1390,"file":"Guild.js","path":"src/structures"}},{"name":"setRolePositions","description":"Batch-updates the guild's role positions.","examples":["guild.setRolePositions([{ role: roleId, position: updatedRoleIndex }])\n .then(guild => console.log(`Role positions updated for ${guild}`))\n .catch(console.error);"],"deprecated":"Use {@link RoleManager#setPositions} instead","params":[{"name":"rolePositions","description":"Role positions to update","type":[[["Array","<"],["GuildRolePosition",">"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1420,"file":"Guild.js","path":"src/structures"}},{"name":"setWidgetSettings","description":"Edits the guild's widget settings.","params":[{"name":"settings","description":"The widget settings for the guild","type":[[["GuildWidgetSettingsData"]]]},{"name":"reason","description":"Reason for changing the guild's widget settings","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1439,"file":"Guild.js","path":"src/structures"}},{"name":"disableInvites","description":"Sets whether this guild's invites are disabled.","params":[{"name":"disabled","description":"Whether the invites are disabled","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1454,"file":"Guild.js","path":"src/structures"}},{"name":"leave","description":"Leaves the guild.","examples":["// Leave a guild\nguild.leave()\n .then(guild => console.log(`Left the guild ${guild.name}`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1469,"file":"Guild.js","path":"src/structures"}},{"name":"read","description":"Marks the guild as read.","examples":["const guild = client.guilds.fetch('222078108977594368');\nguild.read();"],"async":true,"returns":{"types":[[["Promise","<"],["undefined",">"]]],"description":"nothing :)"},"meta":{"line":1482,"file":"Guild.js","path":"src/structures"}},{"name":"delete","description":"Deletes the guild.","examples":["// Delete a guild\nguild.delete()\n .then(guild => console.log(`Deleted the guild ${guild.name}`))\n .catch(console.error);"],"params":[{"name":"mfaCode","description":"The MFA code for the guild owner","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1496,"file":"Guild.js","path":"src/structures"}},{"name":"equals","description":"Whether this guild equals another guild. It compares all properties, so for most operations\nit is advisable to just compare `guild.id === guild2.id` as it is much faster and is often\nwhat most users need.","params":[{"name":"guild","description":"The guild to compare with","type":[[["Guild"]]]}],"returns":[[["boolean"]]],"meta":{"line":1511,"file":"Guild.js","path":"src/structures"}},{"name":"setCommunity","description":"Set Community Feature.","params":[{"name":"stats","description":"True / False to enable / disable Community Feature","default":true,"type":[[["boolean"]]]},{"name":"publicUpdatesChannel","description":"The community updates channel of the guild","default":"1","type":[[["TextChannelResolvable"]]]},{"name":"rulesChannel","description":"The new rules channel","default":"1","type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for changing the community feature","type":[[["string"]]]}],"async":true,"meta":{"line":1538,"file":"Guild.js","path":"src/structures"}},{"name":"addIntegration","description":"Add Integrations to the guild.","params":[{"name":"applicationId","description":"Application (ID) target","type":[[["Snowflake"]]]}],"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":1576,"file":"Guild.js","path":"src/structures"}},{"name":"addBot","description":"Add Bot to the guild.","params":[{"name":"bot","description":"BotId / ApplicationId","type":[[["UserResolvable"]]]},{"name":"permissions","description":"Permissions","nullable":true,"type":[[["PermissionResolvable"]]]}],"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":1600,"file":"Guild.js","path":"src/structures"}},{"name":"setVanityCode","description":"Set the vanity URL to this guild.\nResolves with an object containing the vanity URL invite code and the use count.","examples":["// Set invite code\nguild.setVanityCode('elysia')\n .then(res => {\n console.log(`Vanity URL: https://discord.gg/${res.code} with ${res.uses} uses`);\n })\n .catch(console.error);"],"params":[{"name":"code","description":"Vanity URL code","optional":true,"default":"''","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Vanity",">"]]],"meta":{"line":1641,"file":"Guild.js","path":"src/structures"}},{"name":"topEmojis","description":"Get the top emojis of this guild.","returns":[[["Promise","<"],["Collection","<"],["number",", "],["GuildEmoji",">>"]]],"meta":{"line":1693,"file":"Guild.js","path":"src/structures"}},{"name":"_sortedRoles","description":"Creates a collection of this guild's roles, sorted by their position and ids.","access":"private","returns":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":1714,"file":"Guild.js","path":"src/structures"}},{"name":"_sortedChannels","description":"Creates a collection of this guild's or a specific category's channels, sorted by their position and ids.","access":"private","params":[{"name":"channel","description":"Category to get the channels of","optional":true,"type":[[["GuildChannel"]]]}],"returns":[[["Collection","<"],["Snowflake",", "],["GuildChannel",">"]]],"meta":{"line":1724,"file":"Guild.js","path":"src/structures"}},{"name":"bannerURL","description":"The URL to this guild's banner.","inherits":"AnonymousGuild#bannerURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":84,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"splashURL","description":"The URL to this guild's invite splash image.","inherits":"AnonymousGuild#splashURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"iconURL","description":"The URL to this guild's icon.","inherits":"BaseGuild#iconURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"BaseGuild.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this guild.","inherits":"BaseGuild#fetch","inherited":true,"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":102,"file":"BaseGuild.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the guild's name instead of the Guild object.","inherits":"BaseGuild#toString","inherited":true,"returns":[[["string"]]],"meta":{"line":111,"file":"BaseGuild.js","path":"src/structures"}}],"meta":{"line":58,"file":"Guild.js","path":"src/structures"}},{"name":"GuildAuditLogs","description":"Audit logs entries are held in this class.","props":[{"name":"webhooks","description":"Cached webhooks","access":"private","type":[[["Collection","<"],["Snowflake",", "],["Webhook",">"]]],"meta":{"line":197,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"integrations","description":"Cached integrations","access":"private","type":[[["Collection","<("],["Snowflake","|"],["string","), "],["Integration",">"]]],"meta":{"line":209,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"applicationCommands","description":"Cached application commands, includes application commands from other applications","access":"private","type":[[["Collection","<"],["Snowflake",", "],["ApplicationCommand",">"]]],"meta":{"line":221,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"autoModerationRules","description":"Cached auto moderation rules.","access":"private","type":[[["Collection","<"],["Snowflake",", "],["AutoModerationRule",">"]]],"meta":{"line":233,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"entries","description":"The entries for this guild's audit logs","type":[[["Collection","<"],["Snowflake",", "],["GuildAuditLogsEntry",">"]]],"meta":{"line":243,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"Targets","description":"Key mirror of all available audit log targets.","scope":"static","type":[[["Object","<"],["string",", "],["string",">"]]],"meta":{"line":36,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"Actions","description":"All available actions keyed under their names to their numeric values.","scope":"static","type":[[["Object","<"],["string",", "],["number",">"]]],"meta":{"line":122,"file":"GuildAuditLogs.js","path":"src/structures"}}],"methods":[{"name":"build","description":"Handles possible promises for entry targets.","scope":"static","async":true,"returns":[[["Promise","<"],["GuildAuditLogs",">"]]],"meta":{"line":254,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"targetType","description":"Finds the target type from the entry action.","scope":"static","params":[{"name":"target","description":"The action target","type":[[["AuditLogAction"]]]}],"returns":[[["AuditLogTargetType"]]],"meta":{"line":288,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"actionType","description":"Finds the action type from the entry action.","scope":"static","params":[{"name":"action","description":"The action target","type":[[["AuditLogAction"]]]}],"returns":[[["AuditLogActionType"]]],"meta":{"line":321,"file":"GuildAuditLogs.js","path":"src/structures"}}],"meta":{"line":188,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"GuildAuditLogsEntry","description":"Audit logs entry.","props":[{"name":"targetType","description":"The target type of this entry","type":[[["AuditLogTargetType"]]],"meta":{"line":413,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"actionType","description":"The action type of this entry","type":[[["AuditLogActionType"]]],"meta":{"line":419,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"action","description":"Specific action type of this entry in its string presentation","type":[[["AuditLogAction"]]],"meta":{"line":425,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"reason","description":"The reason of this entry","nullable":true,"type":[[["string"]]],"meta":{"line":431,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"executorId","description":"The id of the user that executed this entry","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":437,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"executor","description":"The user that executed this entry","nullable":true,"type":[[["User"]]],"meta":{"line":443,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"changes","description":"Specific property changes","type":[[["Array","<"],["AuditLogChange",">"]]],"meta":{"line":461,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"id","description":"The entry's id","type":[[["Snowflake"]]],"meta":{"line":467,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"extra","description":"Any extra data from the entry","nullable":true,"type":[[["Object"]],[["Role"]],[["GuildMember"]]],"meta":{"line":473,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"targetId","description":"The id of the target of this entry","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":561,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"target","description":"The target of this entry","nullable":true,"type":[[["AuditLogEntryTarget"]]],"meta":{"line":567,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this entry was created at","readonly":true,"type":[[["number"]]],"meta":{"line":712,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"createdAt","description":"The time this entry was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":721,"file":"GuildAuditLogs.js","path":"src/structures"}}],"meta":{"line":406,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"GuildBan","description":"Represents a ban in a guild on Discord.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild in which the ban is","type":[[["Guild"]]],"meta":{"line":17,"file":"GuildBan.js","path":"src/structures"}},{"name":"user","description":"The user this ban applies to","type":[[["User"]]],"meta":{"line":28,"file":"GuildBan.js","path":"src/structures"}},{"name":"reason","description":"The reason for the ban","nullable":true,"type":[[["string"]]],"meta":{"line":36,"file":"GuildBan.js","path":"src/structures"}},{"name":"partial","description":"Whether this GuildBan is partial. If the reason is not provided the value is null","readonly":true,"type":[[["boolean"]]],"meta":{"line":45,"file":"GuildBan.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"fetch","description":"Fetches this GuildBan.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["GuildBan",">"]]],"meta":{"line":54,"file":"GuildBan.js","path":"src/structures"}}],"meta":{"line":9,"file":"GuildBan.js","path":"src/structures"}},{"name":"GuildBoost","description":"Represents a guild boost in a guild on Discord.","extends":[[["Base"]]],"props":[{"name":"id","description":"The id of the guild boost","type":[[["Snowflake"]]],"meta":{"line":21,"file":"GuildBoost.js","path":"src/structures"}},{"name":"subscriptionId","description":"The id of the subscription","type":[[["Snowflake"]]],"meta":{"line":28,"file":"GuildBoost.js","path":"src/structures"}},{"name":"premiumGuildSubscriptionId","description":"The premium guild subscription id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":35,"file":"GuildBoost.js","path":"src/structures"}},{"name":"guildId","description":"Guild id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":40,"file":"GuildBoost.js","path":"src/structures"}},{"name":"ended","description":"Ended ???","nullable":true,"type":[[["boolean"]]],"meta":{"line":45,"file":"GuildBoost.js","path":"src/structures"}},{"name":"canceled","description":"Whether the subscription is canceled","type":[[["boolean"]]],"meta":{"line":52,"file":"GuildBoost.js","path":"src/structures"}},{"name":"cooldownEndsAt","description":"The cooldown end date","type":[[["Date"]]],"meta":{"line":59,"file":"GuildBoost.js","path":"src/structures"}},{"name":"guilld","description":"The guild of the boost","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":67,"file":"GuildBoost.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"unsubscribe","description":"Cancel the boost","async":true,"returns":[[["Promise","<"],["GuildBoost",">"]]],"meta":{"line":75,"file":"GuildBoost.js","path":"src/structures"}},{"name":"subscribe","description":"Use the boost","params":[{"name":"guild","description":"The guild to use the boost on","type":[[["GuildResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["GuildBoost",">"]]],"meta":{"line":91,"file":"GuildBoost.js","path":"src/structures"}}],"meta":{"line":9,"file":"GuildBoost.js","path":"src/structures"}},{"name":"GuildChannel","description":"Represents a guild channel from any of the following:\n- {@link TextChannel}\n- {@link VoiceChannel}\n- {@link CategoryChannel}\n- {@link NewsChannel}\n- {@link StoreChannel}\n- {@link StageChannel}\n- {@link ForumChannel}","extends":[[["Channel"]]],"abstract":true,"props":[{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":274,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":22,"file":"GuildChannel.js","path":"src/structures"}},{"name":"GuildEmoji","description":"Represents a custom emoji.","extends":[[["BaseGuildEmoji"]]],"props":[{"name":"author","description":"The user who created this emoji","nullable":true,"type":[[["User"]]],"meta":{"line":20,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"_roles","description":"Array of role ids this emoji is active for","access":"private","type":[[["Array","<"],["Snowflake",">"]]],"meta":{"line":22,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"guild","description":"The guild this emoji is part of","type":[[["Guild"]]],"meta":{"line":33,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"deletable","description":"Whether the emoji is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":57,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"roles","description":"A manager for roles this emoji is active for.","readonly":true,"type":[[["GuildEmojiRoleManager"]]],"meta":{"line":67,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"requiresColons","description":"Whether or not this emoji requires colons surrounding it","nullable":true,"type":[[["boolean"]]],"meta":{"line":35,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"managed","description":"Whether this emoji is managed by an external service","nullable":true,"type":[[["boolean"]]],"meta":{"line":43,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"available","description":"Whether this emoji is available","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"animated","description":"Whether or not the emoji is animated","nullable":true,"type":[[["boolean"]]],"meta":{"line":34,"file":"Emoji.js","path":"src/structures"}},{"name":"name","description":"The emoji's name","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Emoji.js","path":"src/structures"}},{"name":"id","description":"The emoji's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Emoji.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":54,"file":"Emoji.js","path":"src/structures"}},{"name":"identifier","description":"The identifier of this emoji, used for message reactions","readonly":true,"type":[[["string"]]],"meta":{"line":84,"file":"Emoji.js","path":"src/structures"}},{"name":"url","description":"The URL to the emoji file if it's a custom emoji","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":94,"file":"Emoji.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":103,"file":"Emoji.js","path":"src/structures"}},{"name":"createdAt","description":"The time the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":112,"file":"Emoji.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"fetchAuthor","description":"Fetches the author for this emoji","returns":[[["Promise","<"],["User",">"]]],"meta":{"line":75,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"edit","description":"Edits the emoji.","examples":["// Edit an emoji\nemoji.edit({ name: 'newemoji' })\n .then(e => console.log(`Edited emoji ${e}`))\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the emoji","type":[[["GuildEmojiEditData"]]]},{"name":"reason","description":"Reason for editing this emoji","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":97,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"setName","description":"Sets the name of the emoji.","params":[{"name":"name","description":"The new name for the emoji","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the emoji's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":120,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"delete","description":"Deletes the emoji.","params":[{"name":"reason","description":"Reason for deleting the emoji","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":129,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"equals","description":"Whether this emoji is the same as another one.","params":[{"name":"other","description":"The emoji to compare it to","type":[[["GuildEmoji"]],[["APIEmoji"]]]}],"returns":[[["boolean"]]],"meta":{"line":139,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the text required to form a graphical emoji on Discord\ninstead of the Emoji object.","inherits":"Emoji#toString","inherited":true,"examples":["// Send a custom emoji from a guild:\nconst emoji = guild.emojis.cache.first();\nmsg.channel.send(`Hello! ${emoji}`);","// Send the emoji used in a reaction to the channel the reaction is part of\nreaction.message.channel.send(`The emoji used was: ${reaction.emoji}`);"],"returns":[[["string"]]],"meta":{"line":128,"file":"Emoji.js","path":"src/structures"}}],"meta":{"line":12,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"GuildFolder","description":"Guild Folder.","abstract":true,"props":[{"name":"id","description":"The guild folder's id","type":[[["Snowflake"]]],"meta":{"line":20,"file":"GuildFolder.js","path":"src/structures"}},{"name":"name","description":"The guild folder's name","type":[[["string"]]],"meta":{"line":28,"file":"GuildFolder.js","path":"src/structures"}},{"name":"color","description":"The base 10 color of the folder","type":[[["number"]]],"meta":{"line":36,"file":"GuildFolder.js","path":"src/structures"}},{"name":"guild_ids","description":"The guild folder's guild ids","type":[[["Array","<"],["Snowflake",">"]]],"meta":{"line":44,"file":"GuildFolder.js","path":"src/structures"}},{"name":"hexColor","description":"The hexadecimal version of the folder color, with a leading hashtag","readonly":true,"type":[[["string"]]],"meta":{"line":52,"file":"GuildFolder.js","path":"src/structures"}},{"name":"guilds","description":"Guilds in the folder","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Guild",">"]]],"meta":{"line":61,"file":"GuildFolder.js","path":"src/structures"}}],"meta":{"line":9,"file":"GuildFolder.js","path":"src/structures"}},{"name":"GuildMember","description":"Represents a member of a guild on Discord.","extends":[[["Base"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"guild","description":"The guild that this member is part of","type":[[["Guild"]]],"meta":{"line":34,"file":"GuildMember.js","path":"src/structures"}},{"name":"joinedTimestamp","description":"The timestamp the member joined the guild at","nullable":true,"type":[[["number"]]],"meta":{"line":40,"file":"GuildMember.js","path":"src/structures"}},{"name":"premiumSinceTimestamp","description":"The last timestamp this member started boosting the guild","nullable":true,"type":[[["number"]]],"meta":{"line":46,"file":"GuildMember.js","path":"src/structures"}},{"name":"nickname","description":"The nickname of this member, if they have one","nullable":true,"type":[[["string"]]],"meta":{"line":52,"file":"GuildMember.js","path":"src/structures"}},{"name":"pending","description":"Whether this member has yet to pass the guild's membership gate","type":[[["boolean"]]],"meta":{"line":58,"file":"GuildMember.js","path":"src/structures"}},{"name":"communicationDisabledUntilTimestamp","description":"The timestamp this member's timeout will be removed","nullable":true,"type":[[["number"]]],"meta":{"line":64,"file":"GuildMember.js","path":"src/structures"}},{"name":"_roles","description":"The role ids of the member","access":"private","type":[[["Array","<"],["Snowflake",">"]]],"meta":{"line":71,"file":"GuildMember.js","path":"src/structures"}},{"name":"user","description":"The user that this guild member instance represents","nullable":true,"type":[[["User"]]],"meta":{"line":81,"file":"GuildMember.js","path":"src/structures"}},{"name":"avatar","description":"The guild member's avatar hash","nullable":true,"type":[[["string"]]],"meta":{"line":90,"file":"GuildMember.js","path":"src/structures"}},{"name":"flags","description":"The flags of this member","type":[[["Readonly","<"],["GuildMemberFlags",">"]]],"meta":{"line":111,"file":"GuildMember.js","path":"src/structures"}},{"name":"accentColor","description":"The member's accent color\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["number"]]],"meta":{"line":124,"file":"GuildMember.js","path":"src/structures"}},{"name":"banner","description":"The member's banner hash\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":132,"file":"GuildMember.js","path":"src/structures"}},{"name":"bio","description":"The member's biography (About me)\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":140,"file":"GuildMember.js","path":"src/structures"}},{"name":"themeColors","description":"The member's theme colors (Profile theme) [Primary, Accent]\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["Array","<"],["number",">"]]],"meta":{"line":148,"file":"GuildMember.js","path":"src/structures"}},{"name":"hexThemeColor","description":"The hexadecimal version of the user theme color, with a leading hash [Primary, Accent]\nThe user must be force fetched for this property to be present or be updated","readonly":true,"nullable":true,"type":[[["Array","<"],["string",">"]]],"meta":{"line":158,"file":"GuildMember.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":173,"file":"GuildMember.js","path":"src/structures"}},{"name":"partial","description":"Whether this GuildMember is a partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":203,"file":"GuildMember.js","path":"src/structures"}},{"name":"roles","description":"A manager for the roles belonging to this member","readonly":true,"type":[[["GuildMemberRoleManager"]]],"meta":{"line":212,"file":"GuildMember.js","path":"src/structures"}},{"name":"voice","description":"The voice state of this member","readonly":true,"type":[[["VoiceState"]]],"meta":{"line":221,"file":"GuildMember.js","path":"src/structures"}},{"name":"joinedAt","description":"The time this member joined the guild","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":265,"file":"GuildMember.js","path":"src/structures"}},{"name":"communicationDisabledUntil","description":"The time this member's timeout will be removed","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":274,"file":"GuildMember.js","path":"src/structures"}},{"name":"premiumSince","description":"The last time this member started boosting the guild","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":283,"file":"GuildMember.js","path":"src/structures"}},{"name":"presence","description":"The presence of this guild member","readonly":true,"nullable":true,"type":[[["Presence"]]],"meta":{"line":292,"file":"GuildMember.js","path":"src/structures"}},{"name":"displayColor","description":"The displayed color of this member in base 10","readonly":true,"type":[[["number"]]],"meta":{"line":301,"file":"GuildMember.js","path":"src/structures"}},{"name":"displayHexColor","description":"The displayed color of this member in hexadecimal","readonly":true,"type":[[["string"]]],"meta":{"line":310,"file":"GuildMember.js","path":"src/structures"}},{"name":"id","description":"The member's id","readonly":true,"type":[[["Snowflake"]]],"meta":{"line":319,"file":"GuildMember.js","path":"src/structures"}},{"name":"displayName","description":"The nickname of this member, or their user display name if they don't have one","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":328,"file":"GuildMember.js","path":"src/structures"}},{"name":"permissions","description":"The overall set of permissions for this member, taking only roles and owner status into account","readonly":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":337,"file":"GuildMember.js","path":"src/structures"}},{"name":"manageable","description":"Whether the client user is above this user in the hierarchy, according to role position and guild ownership.\nThis is a prerequisite for many moderative actions.","readonly":true,"type":[[["boolean"]]],"meta":{"line":348,"file":"GuildMember.js","path":"src/structures"}},{"name":"kickable","description":"Whether this member is kickable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":361,"file":"GuildMember.js","path":"src/structures"}},{"name":"bannable","description":"Whether this member is bannable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":370,"file":"GuildMember.js","path":"src/structures"}},{"name":"moderatable","description":"Whether this member is moderatable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":379,"file":"GuildMember.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"avatarURL","description":"A link to the member's guild avatar.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":230,"file":"GuildMember.js","path":"src/structures"}},{"name":"bannerURL","description":"A link to the user's banner.\nThis method will throw an error if called before the user is force fetched Profile.\nSee {@link GuildMember#banner} for more info","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":242,"file":"GuildMember.js","path":"src/structures"}},{"name":"displayAvatarURL","description":"A link to the member's guild avatar if they have one.\nOtherwise, a link to their {@link User#displayAvatarURL} will be returned.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":[[["string"]]],"meta":{"line":256,"file":"GuildMember.js","path":"src/structures"}},{"name":"isCommunicationDisabled","description":"Whether this member is currently timed out","returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildMember.js","path":"src/structures"}},{"name":"permissionsIn","description":"Returns `channel.permissionsFor(guildMember)`. Returns permissions for a member in a guild channel,\ntaking into account roles and permission overwrites.","params":[{"name":"channel","description":"The guild channel to use as context","type":[[["GuildChannelResolvable"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":401,"file":"GuildMember.js","path":"src/structures"}},{"name":"edit","description":"Edits this member.","params":[{"name":"data","description":"The data to edit the member with","type":[[["GuildMemberEditData"]]]},{"name":"reason","description":"Reason for editing this user","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":413,"file":"GuildMember.js","path":"src/structures"}},{"name":"setNickname","description":"Sets the nickname for this member.","examples":["// Set a nickname for a guild member\nguildMember.setNickname('cool nickname', 'Needed a new nickname')\n .then(member => console.log(`Set nickname of ${member.user.username}`))\n .catch(console.error);","// Remove a nickname for a guild member\nguildMember.setNickname(null, 'No nicknames allowed!')\n .then(member => console.log(`Removed nickname for ${member.user.username}`))\n .catch(console.error);"],"params":[{"name":"nick","description":"The nickname for the guild member, or `null` if you want to reset their nickname","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for setting the nickname","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":433,"file":"GuildMember.js","path":"src/structures"}},{"name":"setFlags","description":"Sets the flags for this member.","params":[{"name":"flags","description":"The flags to set","type":[[["GuildMemberFlagsResolvable"]]]},{"name":"reason","description":"Reason for setting the flags","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":443,"file":"GuildMember.js","path":"src/structures"}},{"name":"setAvatar","description":"Sets the guild avatar of the logged in client.","params":[{"name":"avatar","description":"The new avatar","nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":452,"file":"GuildMember.js","path":"src/structures"}},{"name":"setBanner","description":"Sets the guild banner of the logged in client.","params":[{"name":"banner","description":"The new banner","nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":467,"file":"GuildMember.js","path":"src/structures"}},{"name":"setAboutMe","description":"Set Guild About me","params":[{"name":"bio","description":"Bio to set","default":null,"type":[[["string"]],[["null"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":482,"file":"GuildMember.js","path":"src/structures"}},{"name":"setThemeColors","description":"Change Theme color","params":[{"name":"primary","description":"The primary color of the user's profile","type":[[["ColorResolvable"]]]},{"name":"accent","description":"The accent color of the user's profile","type":[[["ColorResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":498,"file":"GuildMember.js","path":"src/structures"}},{"name":"createDM","description":"Creates a DM channel between the client and this member.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":525,"file":"GuildMember.js","path":"src/structures"}},{"name":"deleteDM","description":"Deletes any DMs with this member.","returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":533,"file":"GuildMember.js","path":"src/structures"}},{"name":"kick","description":"Kicks this member from the guild.","params":[{"name":"reason","description":"Reason for kicking user","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":542,"file":"GuildMember.js","path":"src/structures"}},{"name":"ban","description":"Bans this guild member.","examples":["// Ban a guild member, deleting a week's worth of messages\nguildMember.ban({ deleteMessageSeconds: 60 * 60 * 24 * 7, reason: 'They deserved it' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for the ban","optional":true,"type":[[["BanOptions"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":556,"file":"GuildMember.js","path":"src/structures"}},{"name":"disableCommunicationUntil","description":"Times this guild member out.","examples":["// Time a guild member out for 5 minutes\nguildMember.disableCommunicationUntil(Date.now() + (5 * 60 * 1000), 'They deserved it')\n .then(console.log)\n .catch(console.error);","// Remove the timeout of a guild member\nguildMember.disableCommunicationUntil(null)\n .then(member => console.log(`Removed timeout for ${member.displayName}`))\n .catch(console.error);"],"params":[{"name":"communicationDisabledUntil","description":"The date or timestamp\nfor the member's communication to be disabled until. Provide `null` to remove the timeout.","type":[[["DateResolvable"]],[["null"]]]},{"name":"reason","description":"The reason for this timeout.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":577,"file":"GuildMember.js","path":"src/structures"}},{"name":"timeout","description":"Times this guild member out.","examples":["// Time a guild member out for 5 minutes\nguildMember.timeout(5 * 60 * 1000, 'They deserved it')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"timeout","description":"The time in milliseconds\nfor the member's communication to be disabled until. Provide `null` to remove the timeout.","type":[[["number"]],[["null"]]]},{"name":"reason","description":"The reason for this timeout.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":593,"file":"GuildMember.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this GuildMember.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":602,"file":"GuildMember.js","path":"src/structures"}},{"name":"equals","description":"Whether this guild member equals another guild member. It compares all properties, so for most\ncomparison it is advisable to just compare `member.id === member2.id` as it is significantly faster\nand is often what most users need.","params":[{"name":"member","description":"The member to compare with","type":[[["GuildMember"]]]}],"returns":[[["boolean"]]],"meta":{"line":613,"file":"GuildMember.js","path":"src/structures"}},{"name":"getProfile","description":"Get profile guildMember","returns":[[["Promise","<"],["User",">"]]],"meta":{"line":636,"file":"GuildMember.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the user's mention instead of the GuildMember object.","examples":["// Logs: Hello from <@123456789012345678>!\nconsole.log(`Hello from ${member}!`);"],"returns":[[["string"]]],"meta":{"line":647,"file":"GuildMember.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this user.","implements":["TextBasedChannel#send"],"examples":["// Send a direct message\nguildMember.send('Hello!')\n .then(message => console.log(`Sent message: ${message.content} to ${guildMember.displayName}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":664,"file":"GuildMember.js","path":"src/structures"}}],"meta":{"line":26,"file":"GuildMember.js","path":"src/structures"}},{"name":"GuildPreview","description":"Represents the data about the guild any bot can preview, connected to the specified guild.","extends":[[["Base"]]],"props":[{"name":"id","description":"The id of this guild","type":[[["string"]]],"meta":{"line":27,"file":"GuildPreview.js","path":"src/structures"}},{"name":"name","description":"The name of this guild","type":[[["string"]]],"meta":{"line":34,"file":"GuildPreview.js","path":"src/structures"}},{"name":"icon","description":"The icon of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":42,"file":"GuildPreview.js","path":"src/structures"}},{"name":"splash","description":"The splash icon of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":50,"file":"GuildPreview.js","path":"src/structures"}},{"name":"discoverySplash","description":"The discovery splash icon of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":58,"file":"GuildPreview.js","path":"src/structures"}},{"name":"features","description":"An array of enabled guild features","type":[[["Array","<"],["Features",">"]]],"meta":{"line":66,"file":"GuildPreview.js","path":"src/structures"}},{"name":"approximateMemberCount","description":"The approximate count of members in this guild","type":[[["number"]]],"meta":{"line":74,"file":"GuildPreview.js","path":"src/structures"}},{"name":"approximatePresenceCount","description":"The approximate count of online members in this guild","type":[[["number"]]],"meta":{"line":82,"file":"GuildPreview.js","path":"src/structures"}},{"name":"description","description":"The description for this guild","nullable":true,"type":[[["string"]]],"meta":{"line":90,"file":"GuildPreview.js","path":"src/structures"}},{"name":"emojis","description":"Collection of emojis belonging to this guild","type":[[["Collection","<"],["Snowflake",", "],["GuildPreviewEmoji",">"]]],"meta":{"line":100,"file":"GuildPreview.js","path":"src/structures"}},{"name":"stickers","description":"Collection of stickers belonging to this guild","type":[[["Collection","<"],["Snowflake",", "],["Sticker",">"]]],"meta":{"line":112,"file":"GuildPreview.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this guild was created at","readonly":true,"type":[[["number"]]],"meta":{"line":122,"file":"GuildPreview.js","path":"src/structures"}},{"name":"createdAt","description":"The time this guild was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":131,"file":"GuildPreview.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"splashURL","description":"The URL to this guild's splash.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":140,"file":"GuildPreview.js","path":"src/structures"}},{"name":"discoverySplashURL","description":"The URL to this guild's discovery splash.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":149,"file":"GuildPreview.js","path":"src/structures"}},{"name":"iconURL","description":"The URL to this guild's icon.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":158,"file":"GuildPreview.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this guild.","async":true,"returns":[[["Promise","<"],["GuildPreview",">"]]],"meta":{"line":166,"file":"GuildPreview.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the guild's name instead of the Guild object.","examples":["// Logs: Hello from My Guild!\nconsole.log(`Hello from ${previewGuild}!`);"],"returns":[[["string"]]],"meta":{"line":179,"file":"GuildPreview.js","path":"src/structures"}}],"meta":{"line":13,"file":"GuildPreview.js","path":"src/structures"}},{"name":"GuildPreviewEmoji","description":"Represents an instance of an emoji belonging to a public guild obtained through Discord's preview endpoint.","extends":[[["BaseGuildEmoji"]]],"props":[{"name":"guild","description":"The public guild this emoji is part of","type":[[["GuildPreview"]]],"meta":{"line":10,"file":"GuildPreviewEmoji.js","path":"src/structures"}},{"name":"roles","description":"The roles this emoji is active for","type":[[["Array","<"],["Snowflake",">"]]],"meta":{"line":23,"file":"GuildPreviewEmoji.js","path":"src/structures"}},{"name":"requiresColons","description":"Whether or not this emoji requires colons surrounding it","nullable":true,"type":[[["boolean"]]],"meta":{"line":35,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"managed","description":"Whether this emoji is managed by an external service","nullable":true,"type":[[["boolean"]]],"meta":{"line":43,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"available","description":"Whether this emoji is available","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"animated","description":"Whether or not the emoji is animated","nullable":true,"type":[[["boolean"]]],"meta":{"line":34,"file":"Emoji.js","path":"src/structures"}},{"name":"name","description":"The emoji's name","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Emoji.js","path":"src/structures"}},{"name":"id","description":"The emoji's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Emoji.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":54,"file":"Emoji.js","path":"src/structures"}},{"name":"identifier","description":"The identifier of this emoji, used for message reactions","readonly":true,"type":[[["string"]]],"meta":{"line":84,"file":"Emoji.js","path":"src/structures"}},{"name":"url","description":"The URL to the emoji file if it's a custom emoji","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":94,"file":"Emoji.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":103,"file":"Emoji.js","path":"src/structures"}},{"name":"createdAt","description":"The time the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":112,"file":"Emoji.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the text required to form a graphical emoji on Discord\ninstead of the Emoji object.","inherits":"Emoji#toString","inherited":true,"examples":["// Send a custom emoji from a guild:\nconst emoji = guild.emojis.cache.first();\nmsg.channel.send(`Hello! ${emoji}`);","// Send the emoji used in a reaction to the channel the reaction is part of\nreaction.message.channel.send(`The emoji used was: ${reaction.emoji}`);"],"returns":[[["string"]]],"meta":{"line":128,"file":"Emoji.js","path":"src/structures"}}],"meta":{"line":9,"file":"GuildPreviewEmoji.js","path":"src/structures"}},{"name":"GuildScheduledEvent","description":"Represents a scheduled event in a {@link Guild}.","extends":[[["Base"]]],"props":[{"name":"id","description":"The id of the guild scheduled event","type":[[["Snowflake"]]],"meta":{"line":25,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this guild scheduled event belongs to","type":[[["Snowflake"]]],"meta":{"line":31,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"channelId","description":"The channel id in which the scheduled event will be hosted, or `null` if entity type is `EXTERNAL`","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":42,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"creatorId","description":"The id of the user that created this guild scheduled event","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"name","description":"The name of the guild scheduled event","type":[[["string"]]],"meta":{"line":61,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"description","description":"The description of the guild scheduled event","nullable":true,"type":[[["string"]]],"meta":{"line":68,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"scheduledStartTimestamp","description":"The timestamp the guild scheduled event will start at\nThis can be potentially `null` only when it's an {@link AuditLogEntryTarget}","nullable":true,"type":[[["number"]]],"meta":{"line":78,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"scheduledEndTimestamp","description":"The timestamp the guild scheduled event will end at,\nor `null` if the event does not have a scheduled time to end","nullable":true,"type":[[["number"]]],"meta":{"line":85,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"privacyLevel","description":"The privacy level of the guild scheduled event","type":[[["PrivacyLevel"]]],"meta":{"line":91,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"status","description":"The status of the guild scheduled event","type":[[["GuildScheduledEventStatus"]]],"meta":{"line":97,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"entityType","description":"The type of hosting entity associated with the scheduled event","type":[[["GuildScheduledEventEntityType"]]],"meta":{"line":103,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"entityId","description":"The id of the hosting entity associated with the scheduled event","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":110,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"userCount","description":"The number of users who are subscribed to this guild scheduled event","nullable":true,"type":[[["number"]]],"meta":{"line":120,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"creator","description":"The user that created this guild scheduled event","nullable":true,"type":[[["User"]]],"meta":{"line":130,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"entityMetadata","description":"Additional metadata","nullable":true,"type":[[["GuildScheduledEventEntityMetadata"]]],"meta":{"line":150,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"image","description":"The cover image hash for this scheduled event","nullable":true,"type":[[["string"]]],"meta":{"line":165,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the guild scheduled event was created at","readonly":true,"type":[[["number"]]],"meta":{"line":185,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"createdAt","description":"The time the guild scheduled event was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":194,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"scheduledStartAt","description":"The time the guild scheduled event will start at","readonly":true,"type":[[["Date"]]],"meta":{"line":203,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"scheduledEndAt","description":"The time the guild scheduled event will end at,\nor `null` if the event does not have a scheduled time to end","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":213,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"channel","description":"The channel associated with this scheduled event","readonly":true,"nullable":true,"type":[[["VoiceChannel"]],[["StageChannel"]]],"meta":{"line":222,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"guild","description":"The guild this scheduled event belongs to","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":231,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"url","description":"The URL to the guild scheduled event","readonly":true,"type":[[["string"]]],"meta":{"line":240,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"coverImageURL","description":"The URL of this scheduled event's cover image","params":[{"name":"options","description":"Options for image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":176,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"createInviteURL","description":"Creates an invite URL to this guild scheduled event.","params":[{"name":"options","description":"The options to create the invite","optional":true,"type":[[["CreateGuildScheduledEventInviteURLOptions"]]]}],"async":true,"returns":[[["Promise","<"],["string",">"]]],"meta":{"line":256,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"edit","description":"Edits this guild scheduled event.","examples":["// Edit a guild scheduled event\nguildScheduledEvent.edit({ name: 'Party' })\n .then(guildScheduledEvent => console.log(guildScheduledEvent))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to edit the guild scheduled event","type":[[["GuildScheduledEventEditOptions"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":277,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"delete","description":"Deletes this guild scheduled event.","examples":["// Delete a guild scheduled event\nguildScheduledEvent.delete()\n .then(guildScheduledEvent => console.log(guildScheduledEvent))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":290,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild scheduled event.","examples":["// Set name of a guild scheduled event\nguildScheduledEvent.setName('Birthday Party')\n .then(guildScheduledEvent => console.log(`Set the name to: ${guildScheduledEvent.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name of the guild scheduled event","type":[[["string"]]]},{"name":"reason","description":"The reason for changing the name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":306,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"setScheduledStartTime","description":"Sets a new time to schedule the event at.","examples":["// Set start time of a guild scheduled event\nguildScheduledEvent.setScheduledStartTime('2022-09-24T00:00:00+05:30')\n .then(guildScheduledEvent => console.log(`Set the start time to: ${guildScheduledEvent.scheduledStartTime}`))\n .catch(console.error);"],"params":[{"name":"scheduledStartTime","description":"The time to schedule the event at","type":[[["DateResolvable"]]]},{"name":"reason","description":"The reason for changing the scheduled start time","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":321,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"setScheduledEndTime","description":"Sets a new time to end the event at.","examples":["// Set end time of a guild scheduled event\nguildScheduledEvent.setScheduledEndTime('2022-09-25T00:00:00+05:30')\n .then(guildScheduledEvent => console.log(`Set the end time to: ${guildScheduledEvent.scheduledEndTime}`))\n .catch(console.error);"],"params":[{"name":"scheduledEndTime","description":"The time to end the event at","type":[[["DateResolvable"]]]},{"name":"reason","description":"The reason for changing the scheduled end time","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":337,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"setDescription","description":"Sets the new description of the guild scheduled event.","examples":["// Set description of a guild scheduled event\nguildScheduledEvent.setDescription('A virtual birthday party')\n .then(guildScheduledEvent => console.log(`Set the description to: ${guildScheduledEvent.description}`))\n .catch(console.error);"],"params":[{"name":"description","description":"The description of the guild scheduled event","type":[[["string"]]]},{"name":"reason","description":"The reason for changing the description","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":352,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"setStatus","description":"Sets the new status of the guild scheduled event.\nIf you're working with TypeScript, use this method in conjunction with status type-guards\nlike {@link GuildScheduledEvent#isScheduled} to get only valid status as suggestion","examples":["// Set status of a guild scheduled event\nguildScheduledEvent.setStatus('ACTIVE')\n .then(guildScheduledEvent => console.log(`Set the status to: ${guildScheduledEvent.status}`))\n .catch(console.error);"],"params":[{"name":"status","description":"The status of the guild scheduled event","type":[[["GuildScheduledEventStatus"]],[["number"]]]},{"name":"reason","description":"The reason for changing the status","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":369,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"setLocation","description":"Sets the new location of the guild scheduled event.","examples":["// Set location of a guild scheduled event\nguildScheduledEvent.setLocation('Earth')\n .then(guildScheduledEvent => console.log(`Set the location to: ${guildScheduledEvent.entityMetadata.location}`))\n .catch(console.error);"],"params":[{"name":"location","description":"The location of the guild scheduled event","type":[[["string"]]]},{"name":"reason","description":"The reason for changing the location","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":384,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"fetchSubscribers","description":"Fetches subscribers of this guild scheduled event.","params":[{"name":"options","description":"Options for fetching the subscribers","optional":true,"type":[[["FetchGuildScheduledEventSubscribersOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["GuildScheduledEventUser",">>"]]],"meta":{"line":393,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically concatenates the event's URL instead of the object.","examples":["// Logs: Event: https://discord.com/events/412345678901234567/499876543211234567\nconsole.log(`Event: ${guildScheduledEvent}`);"],"returns":[[["string"]]],"meta":{"line":404,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"isActive","description":"Indicates whether this guild scheduled event has an `ACTIVE` status.","returns":[[["boolean"]]],"meta":{"line":412,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"isCanceled","description":"Indicates whether this guild scheduled event has a `CANCELED` status.","returns":[[["boolean"]]],"meta":{"line":420,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"isCompleted","description":"Indicates whether this guild scheduled event has a `COMPLETED` status.","returns":[[["boolean"]]],"meta":{"line":428,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"isScheduled","description":"Indicates whether this guild scheduled event has a `SCHEDULED` status.","returns":[[["boolean"]]],"meta":{"line":436,"file":"GuildScheduledEvent.js","path":"src/structures"}}],"meta":{"line":17,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"GuildTemplate","description":"Represents the template for a guild.","extends":[[["Base"]]],"props":[{"name":"code","description":"The unique code of this template","type":[[["string"]]],"meta":{"line":24,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"name","description":"The name of this template","type":[[["string"]]],"meta":{"line":32,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"description","description":"The description of this template","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"usageCount","description":"The amount of times this template has been used","type":[[["number"]]],"meta":{"line":48,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"creatorId","description":"The id of the user that created this template","type":[[["Snowflake"]]],"meta":{"line":56,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"creator","description":"The user that created this template","type":[[["User"]]],"meta":{"line":64,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"createdAt","description":"The time when this template was created at","type":[[["Date"]]],"meta":{"line":72,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"updatedAt","description":"The time when this template was last synced to the guild","type":[[["Date"]]],"meta":{"line":80,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild that this template belongs to","type":[[["Snowflake"]]],"meta":{"line":88,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"serializedGuild","description":"The data of the guild that this template would create","type":[[["APIGuild"]]],"meta":{"line":96,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"unSynced","description":"Whether this template has unsynced changes","nullable":true,"type":[[["boolean"]]],"meta":{"line":103,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp of when this template was created at","readonly":true,"type":[[["number"]]],"meta":{"line":187,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"updatedTimestamp","description":"The timestamp of when this template was last synced to the guild","readonly":true,"type":[[["number"]]],"meta":{"line":196,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"guild","description":"The guild that this template belongs to","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":205,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"url","description":"The URL of this template","readonly":true,"type":[[["string"]]],"meta":{"line":214,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}},{"name":"GUILD_TEMPLATES_PATTERN","description":"Regular expression that globally matches guild template links","scope":"static","type":[[["RegExp"]]],"meta":{"line":234,"file":"GuildTemplate.js","path":"src/structures"}}],"methods":[{"name":"createGuild","description":"Creates a guild based on this template.\nThis is only available to bots in fewer than 10 guilds.","params":[{"name":"name","description":"The name of the guild","type":[[["string"]]]},{"name":"icon","description":"The icon for the guild","optional":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":115,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"edit","description":"Updates the metadata of this template.","params":[{"name":"options","description":"Options for editing the template","optional":true,"type":[[["EditGuildTemplateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["GuildTemplate",">"]]],"meta":{"line":159,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"delete","description":"Deletes this template.","async":true,"returns":[[["Promise","<"],["GuildTemplate",">"]]],"meta":{"line":168,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"sync","description":"Syncs this template to the current state of the guild.","async":true,"returns":[[["Promise","<"],["GuildTemplate",">"]]],"meta":{"line":177,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the template's code instead of the template object.","examples":["// Logs: Template: FKvmczH2HyUf\nconsole.log(`Template: ${guildTemplate}!`);"],"returns":[[["string"]]],"meta":{"line":225,"file":"GuildTemplate.js","path":"src/structures"}}],"meta":{"line":12,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"Integration","description":"Represents a guild integration.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild this integration belongs to","type":[[["Guild"]]],"meta":{"line":34,"file":"Integration.js","path":"src/structures"}},{"name":"id","description":"The integration id","type":[[["Snowflake"]],[["string"]]],"meta":{"line":40,"file":"Integration.js","path":"src/structures"}},{"name":"name","description":"The integration name","type":[[["string"]]],"meta":{"line":46,"file":"Integration.js","path":"src/structures"}},{"name":"type","description":"The integration type","type":[[["IntegrationType"]]],"meta":{"line":52,"file":"Integration.js","path":"src/structures"}},{"name":"enabled","description":"Whether this integration is enabled","type":[[["boolean"]]],"meta":{"line":58,"file":"Integration.js","path":"src/structures"}},{"name":"syncing","description":"Whether this integration is syncing","nullable":true,"type":[[["boolean"]]],"meta":{"line":64,"file":"Integration.js","path":"src/structures"}},{"name":"role","description":"The role that this integration uses for subscribers","nullable":true,"type":[[["Role"]]],"meta":{"line":70,"file":"Integration.js","path":"src/structures"}},{"name":"enableEmoticons","description":"Whether emoticons should be synced for this integration (twitch only currently)","nullable":true,"type":[[["boolean"]]],"meta":{"line":77,"file":"Integration.js","path":"src/structures"}},{"name":"user","description":"The user for this integration","nullable":true,"type":[[["User"]]],"meta":{"line":87,"file":"Integration.js","path":"src/structures"}},{"name":"account","description":"The account integration information","type":[[["IntegrationAccount"]]],"meta":{"line":96,"file":"Integration.js","path":"src/structures"}},{"name":"syncedAt","description":"The last time this integration was last synced","nullable":true,"type":[[["number"]]],"meta":{"line":102,"file":"Integration.js","path":"src/structures"}},{"name":"subscriberCount","description":"How many subscribers this integration has","nullable":true,"type":[[["number"]]],"meta":{"line":109,"file":"Integration.js","path":"src/structures"}},{"name":"revoked","description":"Whether this integration has been revoked","nullable":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Integration.js","path":"src/structures"}},{"name":"roles","description":"All roles that are managed by this integration","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":132,"file":"Integration.js","path":"src/structures"}},{"name":"expireBehavior","description":"The behavior of expiring subscribers","nullable":true,"type":[[["number"]]],"meta":{"line":143,"file":"Integration.js","path":"src/structures"}},{"name":"expireGracePeriod","description":"The grace period before expiring subscribers","nullable":true,"type":[[["number"]]],"meta":{"line":151,"file":"Integration.js","path":"src/structures"}},{"name":"application","description":"The application for this integration","nullable":true,"type":[[["IntegrationApplication"]]],"meta":{"line":162,"file":"Integration.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"delete","description":"Deletes this integration.","params":[{"name":"reason","description":"Reason for deleting this integration","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Integration",">"]]],"meta":{"line":174,"file":"Integration.js","path":"src/structures"}}],"meta":{"line":26,"file":"Integration.js","path":"src/structures"}},{"name":"IntegrationApplication","description":"Represents an Integration's OAuth2 Application.","extends":[[["Application"]]],"props":[{"name":"bot","description":"The bot user for this application","nullable":true,"type":[[["User"]]],"meta":{"line":18,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"termsOfServiceURL","description":"The URL of the application's terms of service","nullable":true,"type":[[["string"]]],"meta":{"line":28,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"privacyPolicyURL","description":"The URL of the application's privacy policy","nullable":true,"type":[[["string"]]],"meta":{"line":38,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"rpcOrigins","description":"The Array of RPC origin URLs","type":[[["Array","<"],["string",">"]]],"meta":{"line":48,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"summary","description":"The application's summary","nullable":true,"deprecated":"This property is no longer being sent by the API.","type":[[["string"]]],"meta":{"line":59,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"hook","description":"Whether the application can be default hooked by the client","nullable":true,"type":[[["boolean"]]],"meta":{"line":69,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"cover","description":"The hash of the application's cover image","nullable":true,"type":[[["string"]]],"meta":{"line":79,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"verifyKey","description":"The hex-encoded key for verification in interactions and the GameSDK's GetTicket","nullable":true,"type":[[["string"]]],"meta":{"line":89,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"id","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":29,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"name","description":"The name of the application","nullable":true,"type":[[["string"]]],"meta":{"line":36,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"description","description":"The application's description","nullable":true,"type":[[["string"]]],"meta":{"line":46,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"icon","description":"The application's icon hash","nullable":true,"type":[[["string"]]],"meta":{"line":56,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"roleConnectionsVerificationURL","description":"This application's role connection verification entry point URL","nullable":true,"type":[[["string"]]],"meta":{"line":66,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"createdTimestamp","description":"The timestamp the application was created at","readonly":true,"type":[[["number"]]],"meta":{"line":77,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"createdAt","description":"The time the application was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":86,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"invite","description":"Invites this application to a guild / server","inherits":"Application#invite","inherited":true,"params":[{"name":"guild_id","description":"The id of the guild that you want to invite the bot to","type":[[["Snowflake"]]]},{"name":"permissions","description":"The permissions for the bot in number form (the default is 8 / Administrator)","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"captcha","description":"The captcha key to add","optional":true,"default":null,"type":[[["string"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"nothing :)"},"meta":{"line":97,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"iconURL","description":"A link to the application's icon.","inherits":"Application#iconURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":127,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"coverURL","description":"A link to this application's cover image.","inherits":"Application#coverURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":137,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"fetchAssets","description":"Gets the application's rich presence assets.","inherits":"Application#fetchAssets","inherited":true,"deprecated":"This will be removed in the next major as it is unsupported functionality.","async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationAsset",">>"]]],"meta":{"line":155,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the application's name instead of the\nApplication object.","inherits":"Application#toString","inherited":true,"examples":["// Logs: Application name: My App\nconsole.log(`Application name: ${application}`);"],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":181,"file":"Application.js","path":"src/structures/interfaces"}}],"meta":{"line":9,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"Interaction","description":"Represents an interaction.","extends":[[["Base"]]],"props":[{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":12,"file":"Interaction.js","path":"src/structures"}},{"name":"InteractionCollector","description":"Collects interactions.\nWill automatically stop if the message ({@link Client#event:messageDelete messageDelete} or\n{@link Client#event:messageDeleteBulk messageDeleteBulk}),\nchannel ({@link Client#event:channelDelete channelDelete}), or\nguild ({@link Client#event:guildDelete guildDelete}) is deleted.\nInteraction collectors that do not specify `time` or `idle` may be prone to always running.\nEnsure your interaction collectors end via either of these options or manual cancellation.","extends":[[["Collector"]]],"construct":{"name":"InteractionCollector","params":[{"name":"client","description":"The client on which to collect interactions","type":[[["Client"]]]},{"name":"options","description":"The options to apply to this collector","optional":true,"default":"{}","type":[[["InteractionCollectorOptions"]]]}]},"props":[{"name":"messageId","description":"The message from which to collect interactions, if provided","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":42,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"channelId","description":"The channel from which to collect interactions, if provided","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":48,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"guildId","description":"The guild from which to collect interactions, if provided","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":57,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"interactionType","description":"The type of interaction to collect","nullable":true,"type":[[["InteractionType"]]],"meta":{"line":67,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"componentType","description":"The type of component to collect","nullable":true,"type":[[["MessageComponentType"]]],"meta":{"line":76,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"users","description":"The users that have interacted with this collector","type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":85,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"total","description":"The total number of interactions collected","type":[[["number"]]],"meta":{"line":91,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"endReason","description":"The reason this collector has ended with, or null if it hasn't ended yet","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":192,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this Collector","readonly":true,"type":[[["Client"]]],"meta":{"line":35,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"filter","description":"The filter applied to this collector","type":[[["CollectorFilter"]]],"meta":{"line":48,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"options","description":"The options of this collector","type":[[["CollectorOptions"]]],"meta":{"line":54,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"collected","description":"The items collected by this collector","type":[[["Collection"]]],"meta":{"line":60,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"ended","description":"Whether this collector has finished collecting","type":[[["boolean"]]],"meta":{"line":66,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_timeout","description":"Timeout for cleanup","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":73,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_idletimeout","description":"Timeout for cleanup due to inactivity","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":80,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"next","description":"Returns a promise that resolves with the next collected element;\nrejects with collected elements if the collector finishes without receiving a next element","readonly":true,"type":[[["Promise"]]],"meta":{"line":148,"file":"Collector.js","path":"src/structures/interfaces"}}],"methods":[{"name":"collect","description":"Handles an incoming interaction for possible collection.","access":"private","params":[{"name":"interaction","description":"The interaction to possibly collect","type":[[["Interaction"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":142,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"dispose","description":"Handles an interaction for possible disposal.","params":[{"name":"interaction","description":"The interaction that could be disposed of","type":[[["Interaction"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":162,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"empty","description":"Empties this interaction collector.","meta":{"line":180,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"_handleMessageDeletion","description":"Handles checking if the message has been deleted, and if so, stops the collector with the reason 'messageDelete'.","access":"private","params":[{"name":"message","description":"The message that was deleted","type":[[["Message"]]]}],"returns":[[["void"]]],"meta":{"line":205,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"_handleChannelDeletion","description":"Handles checking if the channel has been deleted, and if so, stops the collector with the reason 'channelDelete'.","access":"private","params":[{"name":"channel","description":"The channel that was deleted","type":[[["GuildChannel"]]]}],"returns":[[["void"]]],"meta":{"line":217,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"_handleThreadDeletion","description":"Handles checking if the thread has been deleted, and if so, stops the collector with the reason 'threadDelete'.","access":"private","params":[{"name":"thread","description":"The thread that was deleted","type":[[["ThreadChannel"]]]}],"returns":[[["void"]]],"meta":{"line":229,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"_handleGuildDeletion","description":"Handles checking if the guild has been deleted, and if so, stops the collector with the reason 'guildDelete'.","access":"private","params":[{"name":"guild","description":"The guild that was deleted","type":[[["Guild"]]]}],"returns":[[["void"]]],"meta":{"line":241,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"handleCollect","description":"Call this to handle an event as a collectable element. Accepts any event data as parameters.","inherits":"Collector#handleCollect","inherited":true,"emits":["Collector#event:collect"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":99,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"handleDispose","description":"Call this to remove an element from the collection. Accepts any event data as parameters.","inherits":"Collector#handleDispose","inherited":true,"emits":["Collector#event:dispose"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":126,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"stop","description":"Stops this collector and emits the `end` event.","inherits":"Collector#stop","inherited":true,"emits":["Collector#event:end"],"params":[{"name":"reason","description":"The reason this collector is ending","optional":true,"default":"'user'","type":[[["string"]]]}],"meta":{"line":180,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"resetTimer","description":"Resets the collector's timeout and idle timer.","inherits":"Collector#resetTimer","inherited":true,"params":[{"name":"options","description":"Options for resetting","optional":true,"type":[[["CollectorResetTimerOptions"]]]}],"meta":{"line":213,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"checkEnd","description":"Checks whether the collector should end, and if so, ends it.","inherits":"Collector#checkEnd","inherited":true,"returns":{"types":[[["boolean"]]],"description":"Whether the collector ended or not"},"meta":{"line":228,"file":"Collector.js","path":"src/structures/interfaces"}}],"events":[{"name":"collect","description":"Emitted whenever an interaction is collected.","params":[{"name":"interaction","description":"The interaction that was collected","type":[[["Interaction"]]]}],"meta":{"line":143,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"dispose","description":"Emitted whenever an interaction is disposed of.","params":[{"name":"interaction","description":"The interaction that was disposed of","type":[[["Interaction"]]]}],"meta":{"line":163,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"end","description":"Emitted when the collector is finished collecting.","params":[{"name":"collected","description":"The elements collected by the collector","type":[[["Collection"]]]},{"name":"reason","description":"The reason the collector ended","type":[[["string"]]]}],"meta":{"line":193,"file":"Collector.js","path":"src/structures/interfaces"}}],"meta":{"line":30,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"InteractionResponse","description":"Represents a interaction on Discord.","extends":[[["Base"]]],"props":[{"name":"channelId","description":"The id of the channel the interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":19,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the interaction was sent in, if any","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":25,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"sendData","description":"The interaction data was sent in","type":[[["Object"]]],"meta":{"line":31,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"id","description":"The interaction response's ID","type":[[["Snowflake"]]],"meta":{"line":41,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"nonce","description":"The interaction response's nonce","type":[[["Snowflake"]]],"meta":{"line":48,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction response was created at","readonly":true,"type":[[["number"]]],"meta":{"line":56,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction response was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":65,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"channel","description":"The channel that the interaction was sent in","readonly":true,"type":[[["TextBasedChannels"]]],"meta":{"line":74,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"guild","description":"The guild the inteaaction was sent in (if in a guild channel)","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":83,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"awaitModal","description":"Get Modal send from interaction","params":[{"name":"time","description":"Time to wait for modal","type":[[["number"]]]}],"returns":[[["Modal"]]],"meta":{"line":92,"file":"InteractionResponse.js","path":"src/structures"}}],"meta":{"line":12,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"InteractionWebhook","description":"Represents a webhook for an Interaction","implements":[[["Webhook"]]],"construct":{"name":"InteractionWebhook","params":[{"name":"client","description":"The instantiating client","type":[[["Client"]]]},{"name":"id","description":"The application's id","type":[[["Snowflake"]]]},{"name":"token","description":"The interaction's token","type":[[["string"]]]}]},"props":[{"name":"client","description":"The client that instantiated the interaction webhook","readonly":true,"type":[[["Client"]]],"meta":{"line":16,"file":"InteractionWebhook.js","path":"src/structures"}},{"name":"id","description":"The webhook's id","type":[[["Snowflake"]]],"meta":{"line":55,"file":"Webhook.js","path":"src/structures"}},{"name":"url","description":"The URL of this webhook","readonly":true,"type":[[["string"]]],"meta":{"line":412,"file":"Webhook.js","path":"src/structures"}}],"methods":[{"name":"send","description":"Sends a message with this webhook.","implements":["Webhook#send"],"params":[{"name":"options","description":"The content for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":34,"file":"InteractionWebhook.js","path":"src/structures"}},{"name":"fetchMessage","description":"Gets a message that was sent by this webhook.","implements":["Webhook#fetchMessage"],"params":[{"name":"message","description":"The id of the message to fetch","type":[[["Snowflake"]],[["original","'"]]]},{"name":"cacheOrOptions","description":"The options to provide to fetch the message.\nA **deprecated** boolean may be passed instead to specify whether to cache the message.","optional":true,"default":"{}","type":[[["WebhookFetchMessageOptions"]],[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"description":"Returns the raw message data if the webhook was instantiated as a\n{@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned"},"meta":{"line":286,"file":"Webhook.js","path":"src/structures"}},{"name":"editMessage","description":"Edits a message that was sent by this webhook.","implements":["Webhook#editMessage"],"params":[{"name":"message","description":"The message to edit","type":[[["MessageResolvable"]],[["original","'"]]]},{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["WebhookEditMessageOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"description":"Returns the raw message data if the webhook was instantiated as a\n{@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned"},"meta":{"line":322,"file":"Webhook.js","path":"src/structures"}},{"name":"deleteMessage","description":"Delete a message that was sent by this webhook.","implements":["Webhook#deleteMessage"],"params":[{"name":"message","description":"The message to delete","type":[[["MessageResolvable"]],[["original","'"]]]},{"name":"threadId","description":"The id of the thread this message belongs to","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":374,"file":"Webhook.js","path":"src/structures"}}],"meta":{"line":9,"file":"InteractionWebhook.js","path":"src/structures"}},{"name":"Application","description":"Represents an OAuth2 Application.","extends":[[["Base"]]],"abstract":true,"props":[{"name":"id","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":29,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"name","description":"The name of the application","nullable":true,"type":[[["string"]]],"meta":{"line":36,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"description","description":"The application's description","nullable":true,"type":[[["string"]]],"meta":{"line":46,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"icon","description":"The application's icon hash","nullable":true,"type":[[["string"]]],"meta":{"line":56,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"roleConnectionsVerificationURL","description":"This application's role connection verification entry point URL","nullable":true,"type":[[["string"]]],"meta":{"line":66,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"createdTimestamp","description":"The timestamp the application was created at","readonly":true,"type":[[["number"]]],"meta":{"line":77,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"createdAt","description":"The time the application was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":86,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"invite","description":"Invites this application to a guild / server","params":[{"name":"guild_id","description":"The id of the guild that you want to invite the bot to","type":[[["Snowflake"]]]},{"name":"permissions","description":"The permissions for the bot in number form (the default is 8 / Administrator)","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"captcha","description":"The captcha key to add","optional":true,"default":null,"type":[[["string"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"nothing :)"},"meta":{"line":97,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"iconURL","description":"A link to the application's icon.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":127,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"coverURL","description":"A link to this application's cover image.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":137,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"fetchAssets","description":"Gets the application's rich presence assets.","deprecated":"This will be removed in the next major as it is unsupported functionality.","async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationAsset",">>"]]],"meta":{"line":155,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the application's name instead of the\nApplication object.","examples":["// Logs: Application name: My App\nconsole.log(`Application name: ${application}`);"],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":181,"file":"Application.js","path":"src/structures/interfaces"}}],"meta":{"line":18,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"Collector","description":"Abstract class for defining a new Collector.","extends":[[["EventEmitter"]]],"abstract":true,"props":[{"name":"client","description":"The client that instantiated this Collector","readonly":true,"type":[[["Client"]]],"meta":{"line":35,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"filter","description":"The filter applied to this collector","type":[[["CollectorFilter"]]],"meta":{"line":48,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"options","description":"The options of this collector","type":[[["CollectorOptions"]]],"meta":{"line":54,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"collected","description":"The items collected by this collector","type":[[["Collection"]]],"meta":{"line":60,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"ended","description":"Whether this collector has finished collecting","type":[[["boolean"]]],"meta":{"line":66,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_timeout","description":"Timeout for cleanup","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":73,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_idletimeout","description":"Timeout for cleanup due to inactivity","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":80,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"next","description":"Returns a promise that resolves with the next collected element;\nrejects with collected elements if the collector finishes without receiving a next element","readonly":true,"type":[[["Promise"]]],"meta":{"line":148,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"endReason","description":"The reason this collector has ended with, or null if it hasn't ended yet","readonly":true,"nullable":true,"abstract":true,"type":[[["string"]]],"meta":{"line":276,"file":"Collector.js","path":"src/structures/interfaces"}}],"methods":[{"name":"handleCollect","description":"Call this to handle an event as a collectable element. Accepts any event data as parameters.","emits":["Collector#event:collect"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":99,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"handleDispose","description":"Call this to remove an element from the collection. Accepts any event data as parameters.","emits":["Collector#event:dispose"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":126,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"stop","description":"Stops this collector and emits the `end` event.","emits":["Collector#event:end"],"params":[{"name":"reason","description":"The reason this collector is ending","optional":true,"default":"'user'","type":[[["string"]]]}],"meta":{"line":180,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"resetTimer","description":"Resets the collector's timeout and idle timer.","params":[{"name":"options","description":"Options for resetting","optional":true,"type":[[["CollectorResetTimerOptions"]]]}],"meta":{"line":213,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"checkEnd","description":"Checks whether the collector should end, and if so, ends it.","returns":{"types":[[["boolean"]]],"description":"Whether the collector ended or not"},"meta":{"line":228,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"collect","description":"Handles incoming events from the `handleCollect` function. Returns null if the event should not\nbe collected, or returns an object describing the data that should be stored.","see":["Collector#handleCollect"],"abstract":true,"params":[{"name":"args","description":"Any args the event listener emits","variable":true,"type":[["*"]]}],"returns":{"types":[["*"],[["Promise",""]]],"description":"Data to insert into collection, if any","nullable":true},"meta":{"line":286,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"dispose","description":"Handles incoming events from the `handleDispose`. Returns null if the event should not\nbe disposed, or returns the key that should be removed.","see":["Collector#handleDispose"],"abstract":true,"params":[{"name":"args","description":"Any args the event listener emits","variable":true,"type":[["*"]]}],"returns":{"types":[["*"]],"description":"Key to remove from the collection, if any","nullable":true},"meta":{"line":296,"file":"Collector.js","path":"src/structures/interfaces"}}],"events":[{"name":"collect","description":"Emitted whenever an element is collected.","params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"meta":{"line":105,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"dispose","description":"Emitted whenever an element is disposed of.","params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"meta":{"line":133,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"end","description":"Emitted when the collector is finished collecting.","params":[{"name":"collected","description":"The elements collected by the collector","type":[[["Collection"]]]},{"name":"reason","description":"The reason the collector ended","type":[[["string"]]]}],"meta":{"line":193,"file":"Collector.js","path":"src/structures/interfaces"}}],"meta":{"line":31,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"Invite","description":"Represents an invitation to a guild channel.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild the invite is for including welcome screen data if present","nullable":true,"type":[[["Guild"]],[["InviteGuild"]]],"meta":{"line":30,"file":"Invite.js","path":"src/structures"}},{"name":"code","description":"The code for this invite","type":[[["string"]]],"meta":{"line":40,"file":"Invite.js","path":"src/structures"}},{"name":"presenceCount","description":"The approximate number of online members of the guild this invite is for\nThis is only available when the invite was fetched through {@link Client#fetchInvite}.","nullable":true,"type":[[["number"]]],"meta":{"line":49,"file":"Invite.js","path":"src/structures"}},{"name":"memberCount","description":"The approximate total number of members of the guild this invite is for\nThis is only available when the invite was fetched through {@link Client#fetchInvite}.","nullable":true,"type":[[["number"]]],"meta":{"line":60,"file":"Invite.js","path":"src/structures"}},{"name":"temporary","description":"Whether or not this invite only grants temporary membership\nThis is only available when the invite was fetched through {@link GuildInviteManager#fetch}\nor created through {@link GuildInviteManager#create}.","nullable":true,"type":[[["boolean"]]],"meta":{"line":72,"file":"Invite.js","path":"src/structures"}},{"name":"maxAge","description":"The maximum age of the invite, in seconds, 0 if never expires\nThis is only available when the invite was fetched through {@link GuildInviteManager#fetch}\nor created through {@link GuildInviteManager#create}.","nullable":true,"type":[[["number"]]],"meta":{"line":84,"file":"Invite.js","path":"src/structures"}},{"name":"uses","description":"How many times this invite has been used\nThis is only available when the invite was fetched through {@link GuildInviteManager#fetch}\nor created through {@link GuildInviteManager#create}.","nullable":true,"type":[[["number"]]],"meta":{"line":96,"file":"Invite.js","path":"src/structures"}},{"name":"maxUses","description":"The maximum uses of this invite\nThis is only available when the invite was fetched through {@link GuildInviteManager#fetch}\nor created through {@link GuildInviteManager#create}.","nullable":true,"type":[[["number"]]],"meta":{"line":108,"file":"Invite.js","path":"src/structures"}},{"name":"inviterId","description":"The user's id who created this invite","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":118,"file":"Invite.js","path":"src/structures"}},{"name":"inviter","description":"The user who created this invite","nullable":true,"type":[[["User"]]],"meta":{"line":129,"file":"Invite.js","path":"src/structures"}},{"name":"targetUser","description":"The user whose stream to display for this voice channel stream invite","nullable":true,"type":[[["User"]]],"meta":{"line":140,"file":"Invite.js","path":"src/structures"}},{"name":"targetApplication","description":"The embedded application to open for this voice channel embedded application invite","nullable":true,"type":[[["IntegrationApplication"]]],"meta":{"line":150,"file":"Invite.js","path":"src/structures"}},{"name":"targetType","description":"The target type","nullable":true,"type":[[["TargetType"]]],"meta":{"line":168,"file":"Invite.js","path":"src/structures"}},{"name":"channelId","description":"The channel's id this invite is for","type":[[["Snowflake"]]],"meta":{"line":178,"file":"Invite.js","path":"src/structures"}},{"name":"channel","description":"The channel this invite is for","type":[[["Channel"]]],"meta":{"line":187,"file":"Invite.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this invite was created at","nullable":true,"type":[[["number"]]],"meta":{"line":196,"file":"Invite.js","path":"src/structures"}},{"name":"stageInstance","description":"The stage instance data if there is a public {@link StageInstance} in the stage channel this invite is for","nullable":true,"type":[[["InviteStageInstance"]]],"meta":{"line":212,"file":"Invite.js","path":"src/structures"}},{"name":"guildScheduledEvent","description":"The guild scheduled event data if there is a {@link GuildScheduledEvent} in the channel this invite is for","nullable":true,"type":[[["GuildScheduledEvent"]]],"meta":{"line":222,"file":"Invite.js","path":"src/structures"}},{"name":"createdAt","description":"The time the invite was created at","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":233,"file":"Invite.js","path":"src/structures"}},{"name":"deletable","description":"Whether the invite is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":242,"file":"Invite.js","path":"src/structures"}},{"name":"expiresTimestamp","description":"The timestamp the invite will expire at","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":257,"file":"Invite.js","path":"src/structures"}},{"name":"expiresAt","description":"The time the invite will expire at","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":269,"file":"Invite.js","path":"src/structures"}},{"name":"url","description":"The URL to the invite","readonly":true,"type":[[["string"]]],"meta":{"line":279,"file":"Invite.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}},{"name":"INVITES_PATTERN","description":"Regular expression that globally matches Discord invite links","scope":"static","type":[[["RegExp"]]],"meta":{"line":373,"file":"Invite.js","path":"src/structures"}}],"methods":[{"name":"delete","description":"Deletes this invite.","params":[{"name":"reason","description":"Reason for deleting this invite","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":288,"file":"Invite.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically concatenates the invite's URL instead of the object.","examples":["// Logs: Invite: https://discord.gg/A1b2C3\nconsole.log(`Invite: ${invite}`);"],"returns":[[["string"]]],"meta":{"line":300,"file":"Invite.js","path":"src/structures"}},{"name":"acceptInvite","description":"Join this Guild using this invite.","examples":["await client.fetchInvite('code').then(async invite => {\n await invite.acceptInvite();\n});"],"params":[{"name":"autoVerify","description":"Whether to automatically verify member","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":330,"file":"Invite.js","path":"src/structures"}}],"meta":{"line":18,"file":"Invite.js","path":"src/structures"}},{"name":"InviteGuild","description":"Represents a guild received from an invite, includes welcome screen data if available.","extends":[[["AnonymousGuild"]]],"props":[{"name":"welcomeScreen","description":"The welcome screen for this invite guild","nullable":true,"type":[[["WelcomeScreen"]]],"meta":{"line":18,"file":"InviteGuild.js","path":"src/structures"}},{"name":"splash","description":"The hash of the guild invite splash image","nullable":true,"type":[[["string"]]],"meta":{"line":25,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"banner","description":"The hash of the guild banner","nullable":true,"type":[[["string"]]],"meta":{"line":33,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"description","description":"The description of the guild, if any","nullable":true,"type":[[["string"]]],"meta":{"line":41,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"verificationLevel","description":"The verification level of the guild","type":[[["VerificationLevel"]]],"meta":{"line":49,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"vanityURLCode","description":"The vanity invite code of the guild, if any","nullable":true,"type":[[["string"]]],"meta":{"line":57,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"nsfwLevel","description":"The NSFW level of this guild","type":[[["NSFWLevel"]]],"meta":{"line":65,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"premiumSubscriptionCount","description":"The total number of boosts for this server","nullable":true,"type":[[["number"]]],"meta":{"line":73,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"id","description":"The guild's id","type":[[["Snowflake"]]],"meta":{"line":19,"file":"BaseGuild.js","path":"src/structures"}},{"name":"name","description":"The name of this guild","type":[[["string"]]],"meta":{"line":25,"file":"BaseGuild.js","path":"src/structures"}},{"name":"icon","description":"The icon hash of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":31,"file":"BaseGuild.js","path":"src/structures"}},{"name":"features","description":"An array of features available to this guild","type":[[["Array","<"],["Features",">"]]],"meta":{"line":37,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this guild was created at","readonly":true,"type":[[["number"]]],"meta":{"line":45,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdAt","description":"The time this guild was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":54,"file":"BaseGuild.js","path":"src/structures"}},{"name":"nameAcronym","description":"The acronym that shows up in place of a guild icon","readonly":true,"type":[[["string"]]],"meta":{"line":63,"file":"BaseGuild.js","path":"src/structures"}},{"name":"partnered","description":"Whether this guild is partnered","readonly":true,"type":[[["boolean"]]],"meta":{"line":75,"file":"BaseGuild.js","path":"src/structures"}},{"name":"verified","description":"Whether this guild is verified","readonly":true,"type":[[["boolean"]]],"meta":{"line":84,"file":"BaseGuild.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"bannerURL","description":"The URL to this guild's banner.","inherits":"AnonymousGuild#bannerURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":84,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"splashURL","description":"The URL to this guild's invite splash image.","inherits":"AnonymousGuild#splashURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"iconURL","description":"The URL to this guild's icon.","inherits":"BaseGuild#iconURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"BaseGuild.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this guild.","inherits":"BaseGuild#fetch","inherited":true,"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":102,"file":"BaseGuild.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the guild's name instead of the Guild object.","inherits":"BaseGuild#toString","inherited":true,"returns":[[["string"]]],"meta":{"line":111,"file":"BaseGuild.js","path":"src/structures"}}],"meta":{"line":10,"file":"InviteGuild.js","path":"src/structures"}},{"name":"InviteStageInstance","description":"Represents the data about a public {@link StageInstance} in an {@link Invite}.","extends":[[["Base"]]],"props":[{"name":"channelId","description":"The id of the stage channel this invite is for","type":[[["Snowflake"]]],"meta":{"line":18,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"guildId","description":"The stage channel's guild id","type":[[["Snowflake"]]],"meta":{"line":24,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"members","description":"The members speaking in the stage channel","type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":30,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"topic","description":"The topic of the stage instance","type":[[["string"]]],"meta":{"line":41,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"participantCount","description":"The number of users in the stage channel","type":[[["number"]]],"meta":{"line":49,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"speakerCount","description":"The number of users speaking in the stage channel","type":[[["number"]]],"meta":{"line":57,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"channel","description":"The stage channel this invite is for","readonly":true,"nullable":true,"type":[[["StageChannel"]]],"meta":{"line":72,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"guild","description":"The guild of the stage channel this invite is for","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":81,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"meta":{"line":10,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"Message","description":"Represents a message on Discord.","extends":[[["Base"]]],"props":[{"name":"channelId","description":"The id of the channel the message was sent in","type":[[["Snowflake"]]],"meta":{"line":45,"file":"Message.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the message was sent in, if any","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":51,"file":"Message.js","path":"src/structures"}},{"name":"id","description":"The message's id","type":[[["Snowflake"]]],"meta":{"line":61,"file":"Message.js","path":"src/structures"}},{"name":"position","description":"A generally increasing integer (there may be gaps or duplicates) that represents\nthe approximate position of the message in a thread.","nullable":true,"type":[[["number"]]],"meta":{"line":69,"file":"Message.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the message was sent at","type":[[["number"]]],"meta":{"line":78,"file":"Message.js","path":"src/structures"}},{"name":"type","description":"The type of the message","nullable":true,"type":[[["MessageType"]]],"meta":{"line":85,"file":"Message.js","path":"src/structures"}},{"name":"system","description":"Whether or not this message was sent by Discord, not actually a user (e.g. pin notifications)","nullable":true,"type":[[["boolean"]]],"meta":{"line":91,"file":"Message.js","path":"src/structures"}},{"name":"content","description":"The content of the message","nullable":true,"type":[[["string"]]],"meta":{"line":102,"file":"Message.js","path":"src/structures"}},{"name":"author","description":"The author of the message","nullable":true,"type":[[["User"]]],"meta":{"line":112,"file":"Message.js","path":"src/structures"}},{"name":"pinned","description":"Whether or not this message is pinned","nullable":true,"type":[[["boolean"]]],"meta":{"line":122,"file":"Message.js","path":"src/structures"}},{"name":"tts","description":"Whether or not the message was Text-To-Speech","nullable":true,"type":[[["boolean"]]],"meta":{"line":132,"file":"Message.js","path":"src/structures"}},{"name":"nonce","description":"A random number or string used for checking message delivery\nThis is only received after the message was sent successfully, and\nlost if re-fetched","nullable":true,"type":[[["string"]]],"meta":{"line":144,"file":"Message.js","path":"src/structures"}},{"name":"embeds","description":"A list of embeds in the message - e.g. YouTube Player","type":[[["Array","<"],["MessageEmbed",">"]]],"meta":{"line":154,"file":"Message.js","path":"src/structures"}},{"name":"components","description":"A list of MessageActionRows in the message","type":[[["Array","<"],["MessageActionRow",">"]]],"meta":{"line":164,"file":"Message.js","path":"src/structures"}},{"name":"attachments","description":"A collection of attachments in the message - e.g. Pictures - mapped by their ids","type":[[["Collection","<"],["Snowflake",", "],["MessageAttachment",">"]]],"meta":{"line":174,"file":"Message.js","path":"src/structures"}},{"name":"stickers","description":"A collection of stickers in the message","type":[[["Collection","<"],["Snowflake",", "],["Sticker",">"]]],"meta":{"line":189,"file":"Message.js","path":"src/structures"}},{"name":"editedTimestamp","description":"The timestamp the message was last edited at (if applicable)","nullable":true,"type":[[["number"]]],"meta":{"line":202,"file":"Message.js","path":"src/structures"}},{"name":"reactions","description":"A manager of the reactions belonging to this message","type":[[["ReactionManager"]]],"meta":{"line":212,"file":"Message.js","path":"src/structures"}},{"name":"mentions","description":"All valid mentions that the message contains","type":[[["MessageMentions"]]],"meta":{"line":227,"file":"Message.js","path":"src/structures"}},{"name":"webhookId","description":"The id of the webhook that sent the message, if applicable","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":251,"file":"Message.js","path":"src/structures"}},{"name":"groupActivityApplication","description":"Supplemental application information for group activities","nullable":true,"type":[[["ClientApplication"]]],"meta":{"line":261,"file":"Message.js","path":"src/structures"}},{"name":"applicationId","description":"The id of the application of the interaction that sent this message, if any","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":271,"file":"Message.js","path":"src/structures"}},{"name":"activity","description":"Group activity","nullable":true,"type":[[["MessageActivity"]]],"meta":{"line":281,"file":"Message.js","path":"src/structures"}},{"name":"flags","description":"Flags that are applied to the message","type":[[["Readonly","<"],["MessageFlags",">"]]],"meta":{"line":304,"file":"Message.js","path":"src/structures"}},{"name":"reference","description":"Message reference data","nullable":true,"type":[[["MessageReference"]]],"meta":{"line":329,"file":"Message.js","path":"src/structures"}},{"name":"interaction","description":"Partial data of the interaction that this message is a reply to","nullable":true,"type":[[["MessageInteraction"]]],"meta":{"line":357,"file":"Message.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":373,"file":"Message.js","path":"src/structures"}},{"name":"channel","description":"The channel that the message was sent in","readonly":true,"type":[[["TextBasedChannels"]]],"meta":{"line":403,"file":"Message.js","path":"src/structures"}},{"name":"partial","description":"Whether or not this message is a partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":412,"file":"Message.js","path":"src/structures"}},{"name":"member","description":"Represents the author of the message as a guild member.\nOnly available if the message comes from a guild where the author is still a member","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":422,"file":"Message.js","path":"src/structures"}},{"name":"createdAt","description":"The time the message was sent at","readonly":true,"type":[[["Date"]]],"meta":{"line":431,"file":"Message.js","path":"src/structures"}},{"name":"editedAt","description":"The time the message was last edited at (if applicable)","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":440,"file":"Message.js","path":"src/structures"}},{"name":"guild","description":"The guild the message was sent in (if in a guild channel)","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":449,"file":"Message.js","path":"src/structures"}},{"name":"hasThread","description":"Whether this message has a thread associated with it","readonly":true,"type":[[["boolean"]]],"meta":{"line":458,"file":"Message.js","path":"src/structures"}},{"name":"thread","description":"The thread started by this message\nThis property is not suitable for checking whether a message has a thread,\nuse {@link Message#hasThread} instead.","readonly":true,"nullable":true,"type":[[["ThreadChannel"]]],"meta":{"line":469,"file":"Message.js","path":"src/structures"}},{"name":"url","description":"The URL to jump to this message","readonly":true,"type":[[["string"]]],"meta":{"line":478,"file":"Message.js","path":"src/structures"}},{"name":"cleanContent","description":"The message contents with all mentions replaced by the equivalent text.\nIf mentions cannot be resolved to a name, the relevant mention in the message content will not be converted.","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":488,"file":"Message.js","path":"src/structures"}},{"name":"editable","description":"Whether the message is editable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":600,"file":"Message.js","path":"src/structures"}},{"name":"deletable","description":"Whether the message is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":623,"file":"Message.js","path":"src/structures"}},{"name":"bulkDeletable","description":"Whether the message is bulk deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":655,"file":"Message.js","path":"src/structures"}},{"name":"pinnable","description":"Whether the message is pinnable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":671,"file":"Message.js","path":"src/structures"}},{"name":"crosspostable","description":"Whether the message is crosspostable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":700,"file":"Message.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"createReactionCollector","description":"Creates a reaction collector.","examples":["// Create a reaction collector\nconst filter = (reaction, user) => reaction.emoji.name === '👌' && user.id === 'someId';\nconst collector = message.createReactionCollector({ filter, time: 15_000 });\ncollector.on('collect', r => console.log(`Collected ${r.emoji.name}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["ReactionCollectorOptions"]]]}],"returns":[[["ReactionCollector"]]],"meta":{"line":504,"file":"Message.js","path":"src/structures"}},{"name":"awaitReactions","description":"Similar to createReactionCollector but in promise form.\nResolves with a collection of reactions that pass the specified filter.","examples":["// Create a reaction collector\nconst filter = (reaction, user) => reaction.emoji.name === '👌' && user.id === 'someId'\nmessage.awaitReactions({ filter, time: 15_000 })\n .then(collected => console.log(`Collected ${collected.size} reactions`))\n .catch(console.error);"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitReactionsOptions"]]]}],"returns":[[["Promise","<"],["Collection","<("],["string","|"],["Snowflake","), "],["MessageReaction",">>"]]],"meta":{"line":526,"file":"Message.js","path":"src/structures"}},{"name":"createMessageComponentCollector","description":"Creates a message component interaction collector.","examples":["// Create a message component interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = message.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":555,"file":"Message.js","path":"src/structures"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nmessage.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":583,"file":"Message.js","path":"src/structures"}},{"name":"fetchReference","description":"Fetches the Message this crosspost/reply/pin-add references, if available to the client","async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":686,"file":"Message.js","path":"src/structures"}},{"name":"edit","description":"Edits the content of the message.","examples":["// Update the content of a message\nmessage.edit('This is my new content!')\n .then(msg => console.log(`Updated the content of a message to ${msg.content}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageEditOptions"]]]}],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":739,"file":"Message.js","path":"src/structures"}},{"name":"crosspost","description":"Publishes a message in an announcement channel to all channels following it.","examples":["// Crosspost a message\nif (message.channel.type === 'GUILD_NEWS') {\n message.crosspost()\n .then(() => console.log('Crossposted message'))\n .catch(console.error);\n}"],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":755,"file":"Message.js","path":"src/structures"}},{"name":"pin","description":"Pins this message to the channel's pinned messages.","examples":["// Pin a message\nmessage.pin()\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"reason","description":"Reason for pinning","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":770,"file":"Message.js","path":"src/structures"}},{"name":"unpin","description":"Unpins this message from the channel's pinned messages.","examples":["// Unpin a message\nmessage.unpin()\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"reason","description":"Reason for unpinning","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":786,"file":"Message.js","path":"src/structures"}},{"name":"react","description":"Adds a reaction to the message.","examples":["// React to a message with a unicode emoji\nmessage.react('🤔')\n .then(console.log)\n .catch(console.error);","// React to a message with a custom emoji\nmessage.react(message.guild.emojis.cache.get('123456789012345678'))\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"emoji","description":"The emoji to react with","type":[[["EmojiIdentifierResolvable"]]]},{"name":"burst","description":"Super Reactions (Discord Nitro only)","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["MessageReaction",">"]]],"meta":{"line":808,"file":"Message.js","path":"src/structures"}},{"name":"delete","description":"Deletes the message.","examples":["// Delete a message\nmessage.delete()\n .then(msg => console.log(`Deleted message from ${msg.author.username}`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":833,"file":"Message.js","path":"src/structures"}},{"name":"reply","description":"Send an inline reply to this message.","examples":["// Reply to a message\nmessage.reply('This is a reply!')\n .then(() => console.log(`Replied to message \"${message.content}\"`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["ReplyMessageOptions"]]]}],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":857,"file":"Message.js","path":"src/structures"}},{"name":"startThread","description":"Create a new public thread from this message","see":["GuildTextThreadManager#create"],"params":[{"name":"options","description":"Options for starting a thread on this message","optional":true,"type":[[["StartThreadOptions"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":902,"file":"Message.js","path":"src/structures"}},{"name":"fetch","description":"Fetch this message.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":916,"file":"Message.js","path":"src/structures"}},{"name":"fetchWebhook","description":"Fetches the webhook used to create this message.","returns":[[["Promise",""]]],"meta":{"line":925,"file":"Message.js","path":"src/structures"}},{"name":"suppressEmbeds","description":"Suppresses or unsuppresses embeds on a message.","params":[{"name":"suppress","description":"If the embeds should be suppressed or not","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":936,"file":"Message.js","path":"src/structures"}},{"name":"removeAttachments","description":"Removes the attachments from this message.","returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":952,"file":"Message.js","path":"src/structures"}},{"name":"resolveComponent","description":"Resolves a component by a custom id.","params":[{"name":"customId","description":"The custom id to resolve against","type":[[["string"]]]}],"returns":{"types":[[["MessageActionRowComponent"]]],"nullable":true},"meta":{"line":961,"file":"Message.js","path":"src/structures"}},{"name":"equals","description":"Used mainly internally. Whether two messages are identical in properties. If you want to compare messages\nwithout checking all the properties, use `message.id === message2.id`, which is much more efficient. This\nmethod allows you to see if there are differences in content, embeds, attachments, nonce and tts properties.","params":[{"name":"message","description":"The message to compare it to","type":[[["Message"]]]},{"name":"rawData","description":"Raw data passed through the WebSocket about this message","type":[[["APIMessage"]]]}],"returns":[[["boolean"]]],"meta":{"line":973,"file":"Message.js","path":"src/structures"}},{"name":"inGuild","description":"Whether this message is from a guild.","returns":[[["boolean"]]],"meta":{"line":1001,"file":"Message.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically concatenates the message's content instead of the object.","examples":["// Logs: Message: This is a message!\nconsole.log(`Message: ${message}`);"],"returns":[[["string"]]],"meta":{"line":1012,"file":"Message.js","path":"src/structures"}},{"name":"markUnread","description":"Marks the message as unread.","async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":1032,"file":"Message.js","path":"src/structures"}},{"name":"markRead","description":"Marks the message as read.","async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":1052,"file":"Message.js","path":"src/structures"}},{"name":"clickButton","description":"Click specific button or automatically click first button if no button is specified.","examples":["client.on('messageCreate', async message => {\n if (message.components.length) {\n // Find first button and click it\n await message.clickButton();\n // Click with button ID\n await message.clickButton('button-id');\n // Click with button location\n await message.clickButton({ row: 0, col: 0 });\n // Click with class MessageButton\n const button = message.components[0].components[0];\n await message.clickButton(button);\n // Click with class MessageButton (2)\n button.click(message);\n }\n});"],"params":[{"name":"button","description":"Button ID","type":[[["MessageButton"]],[["MessageButtonLocation"]],[["string"]]]}],"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":1088,"file":"Message.js","path":"src/structures"}},{"name":"selectMenu","description":"Select specific menu or First Menu","examples":["client.on('messageCreate', async message => {\n if (message.components.length) {\n // Row\n await message.selectMenu(1, [message.channel]); // row 1, type: Channel, multi: false\n // Id\n await message.selectMenu('menu-id', ['uid1', client.user, message.member]); // MenuId, type: User, multi: true\n // First Menu\n await message.selectMenu(['role-id']); // First Menu, type: role, multi: false\n // class MessageSelectMenu\n const menu = message.components[0].components[0];\n await message.selectMenu(menu, ['option1', 'option2']);\n // MessageSelectMenu (2)\n menu.select(message, ['option1', 'option2']);\n }\n});"],"params":[{"name":"menuID","description":"MenuId / MessageSelectMenu / Row of Menu / Array of Values (first menu)","type":[[["MessageSelectMenu"]],[["string"]],[["number"]],[["Array","<"],["any",">"]]]},{"name":"options","description":"Array of Values","type":[[["Array","<"],["any",">"]]]}],"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":1123,"file":"Message.js","path":"src/structures"}},{"name":"contextMenu","description":"Send context Menu v2","params":[{"name":"botId","description":"Bot id","type":[[["Snowflake"]]]},{"name":"commandName","description":"Command name in Context Menu","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":1159,"file":"Message.js","path":"src/structures"}}],"meta":{"line":37,"file":"Message.js","path":"src/structures"}},{"name":"MessageActionRow","description":"Represents an action row containing message components.","extends":[[["BaseMessageComponent"]]],"construct":{"name":"MessageActionRow","params":[{"name":"data","description":"MessageActionRow to clone or raw data","optional":true,"default":"{}","type":[[["MessageActionRow"]],[["MessageActionRowOptions"]]]},{"name":"client","description":"The client constructing this MessageActionRow, if provided","optional":true,"default":null,"type":[[["Client"]]]}]},"props":[{"name":"components","description":"The components in this action row","type":[[["Array","<"],["MessageActionRowComponent",">"]]],"meta":{"line":51,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"type","description":"The type of this component","nullable":true,"type":[[["MessageComponentType"]]],"meta":{"line":52,"file":"BaseMessageComponent.js","path":"src/structures"}}],"methods":[{"name":"addComponents","description":"Adds components to the action row.","params":[{"name":"components","description":"The components to add","variable":true,"type":[[["Array","<"],["MessageActionRowComponentResolvable",">"]]]}],"returns":[[["MessageActionRow"]]],"meta":{"line":59,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"setComponents","description":"Sets the components of the action row.","params":[{"name":"components","description":"The components to set","variable":true,"type":[[["Array","<"],["MessageActionRowComponentResolvable",">"]]]}],"returns":[[["MessageActionRow"]]],"meta":{"line":69,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"spliceComponents","description":"Removes, replaces, and inserts components in the action row.","params":[{"name":"index","description":"The index to start at","type":[[["number"]]]},{"name":"deleteCount","description":"The number of components to remove","type":[[["number"]]]},{"name":"components","description":"The replacing components","optional":true,"variable":true,"type":[[["Array","<"],["MessageActionRowComponentResolvable",">"]]]}],"returns":[[["MessageActionRow"]]],"meta":{"line":81,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"toJSON","description":"Transforms the action row to a plain object.","returns":{"types":[[["APIMessageComponent"]]],"description":"The raw data of this action row"},"meta":{"line":90,"file":"MessageActionRow.js","path":"src/structures"}}],"meta":{"line":10,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"MessageAttachment","description":"Represents an attachment in a message.","construct":{"name":"MessageAttachment","params":[{"name":"attachment","description":"The file","type":[[["BufferResolvable"]],[["Stream"]]]},{"name":"name","description":"The name of the file, if any","optional":true,"default":null,"type":[[["string"]]]},{"name":"data","description":"Extra data","optional":true,"type":[[["APIAttachment"]]]}]},"props":[{"name":"name","description":"The name of this attachment","nullable":true,"type":[[["string"]]],"meta":{"line":21,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"id","description":"The attachment's id","type":[[["Snowflake"]]],"meta":{"line":80,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"size","description":"The size of this attachment in bytes","type":[[["number"]]],"meta":{"line":87,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"url","description":"The URL to this attachment","type":[[["string"]]],"meta":{"line":95,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"proxyURL","description":"The Proxy URL to this attachment","type":[[["string"]]],"meta":{"line":103,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"height","description":"The height of this attachment (if an image or video)","nullable":true,"type":[[["number"]]],"meta":{"line":111,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"width","description":"The width of this attachment (if an image or video)","nullable":true,"type":[[["number"]]],"meta":{"line":121,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"contentType","description":"The media type of this attachment","nullable":true,"type":[[["string"]]],"meta":{"line":131,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"description","description":"The description (alt text) of this attachment","nullable":true,"type":[[["string"]]],"meta":{"line":141,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether this attachment is ephemeral","type":[[["boolean"]]],"meta":{"line":150,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"duration","description":"The duration of this attachment in seconds\nThis will only be available if the attachment is an audio file.","nullable":true,"type":[[["number"]]],"meta":{"line":158,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"waveform","description":"The base64 encoded byte array representing a sampled waveform\nThis will only be available if the attachment is an audio file.","nullable":true,"type":[[["string"]]],"meta":{"line":169,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"flags","description":"The flags of this attachment","type":[[["Readonly","<"],["AttachmentFlags",">"]]],"meta":{"line":179,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"spoiler","description":"Whether or not this attachment has been marked as a spoiler","readonly":true,"type":[[["boolean"]]],"meta":{"line":190,"file":"MessageAttachment.js","path":"src/structures"}}],"methods":[{"name":"setDescription","description":"Sets the description of this attachment.","params":[{"name":"description","description":"The description of the file","type":[[["string"]]]}],"returns":{"types":[[["MessageAttachment"]]],"description":"This attachment"},"meta":{"line":30,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"setFile","description":"Sets the file of this attachment.","params":[{"name":"attachment","description":"The file","type":[[["BufferResolvable"]],[["Stream"]]]},{"name":"name","description":"The name of the file, if any","optional":true,"default":null,"type":[[["string"]]]}],"returns":{"types":[[["MessageAttachment"]]],"description":"This attachment"},"meta":{"line":41,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"setName","description":"Sets the name of this attachment.","params":[{"name":"name","description":"The name of the file","type":[[["string"]]]}],"returns":{"types":[[["MessageAttachment"]]],"description":"This attachment"},"meta":{"line":52,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"setSpoiler","description":"Sets whether this attachment is a spoiler","params":[{"name":"spoiler","description":"Whether the attachment should be marked as a spoiler","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["MessageAttachment"]]],"description":"This attachment"},"meta":{"line":62,"file":"MessageAttachment.js","path":"src/structures"}}],"meta":{"line":9,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"MessageButton","description":"Represents a button message component.","extends":[[["BaseMessageComponent"]]],"construct":{"name":"MessageButton","params":[{"name":"data","description":"MessageButton to clone or raw data","optional":true,"default":"{}","type":[[["MessageButton"]],[["MessageButtonOptions"]]]}]},"props":[{"name":"label","description":"The text to be displayed on this button","nullable":true,"type":[[["string"]]],"meta":{"line":41,"file":"MessageButton.js","path":"src/structures"}},{"name":"customId","description":"A unique string to be sent in the interaction when clicked","nullable":true,"type":[[["string"]]],"meta":{"line":47,"file":"MessageButton.js","path":"src/structures"}},{"name":"style","description":"The style of this button","nullable":true,"type":[[["MessageButtonStyle"]]],"meta":{"line":53,"file":"MessageButton.js","path":"src/structures"}},{"name":"emoji","description":"Emoji for this button","nullable":true,"type":[[["RawEmoji"]]],"meta":{"line":59,"file":"MessageButton.js","path":"src/structures"}},{"name":"url","description":"The URL this button links to, if it is a Link style button","nullable":true,"type":[[["string"]]],"meta":{"line":65,"file":"MessageButton.js","path":"src/structures"}},{"name":"disabled","description":"Whether this button is currently disabled","type":[[["boolean"]]],"meta":{"line":71,"file":"MessageButton.js","path":"src/structures"}},{"name":"type","description":"The type of this component","nullable":true,"type":[[["MessageComponentType"]]],"meta":{"line":52,"file":"BaseMessageComponent.js","path":"src/structures"}}],"methods":[{"name":"setCustomId","description":"Sets the custom id for this button","params":[{"name":"customId","description":"A unique string to be sent in the interaction when clicked","type":[[["string"]]]}],"returns":[[["MessageButton"]]],"meta":{"line":79,"file":"MessageButton.js","path":"src/structures"}},{"name":"setDisabled","description":"Sets the interactive status of the button","params":[{"name":"disabled","description":"Whether this button should be disabled","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["MessageButton"]]],"meta":{"line":89,"file":"MessageButton.js","path":"src/structures"}},{"name":"setEmoji","description":"Set the emoji of this button","params":[{"name":"emoji","description":"The emoji to be displayed on this button","type":[[["EmojiIdentifierResolvable"]]]}],"returns":[[["MessageButton"]]],"meta":{"line":99,"file":"MessageButton.js","path":"src/structures"}},{"name":"setLabel","description":"Sets the label of this button","params":[{"name":"label","description":"The text to be displayed on this button","type":[[["string"]]]}],"returns":[[["MessageButton"]]],"meta":{"line":109,"file":"MessageButton.js","path":"src/structures"}},{"name":"setStyle","description":"Sets the style of this button","params":[{"name":"style","description":"The style of this button","type":[[["MessageButtonStyleResolvable"]]]}],"returns":[[["MessageButton"]]],"meta":{"line":119,"file":"MessageButton.js","path":"src/structures"}},{"name":"setURL","description":"Sets the URL of this button.\nMessageButton#style must be LINK when setting a URL","params":[{"name":"url","description":"The URL of this button","type":[[["string"]]]}],"returns":[[["MessageButton"]]],"meta":{"line":130,"file":"MessageButton.js","path":"src/structures"}},{"name":"toJSON","description":"Transforms the button to a plain object.","returns":{"types":[[["APIMessageButton"]]],"description":"The raw data of this button"},"meta":{"line":139,"file":"MessageButton.js","path":"src/structures"}},{"name":"click","description":"Click the button","params":[{"name":"message","description":"Discord Message","type":[[["Message"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":173,"file":"MessageButton.js","path":"src/structures"}},{"name":"resolveStyle","description":"Resolves the style of a button","scope":"static","access":"private","params":[{"name":"style","description":"The style to resolve","type":[[["MessageButtonStyleResolvable"]]]}],"returns":[[["MessageButtonStyle"]]],"meta":{"line":164,"file":"MessageButton.js","path":"src/structures"}}],"meta":{"line":16,"file":"MessageButton.js","path":"src/structures"}},{"name":"MessageCollector","description":"Collects messages on a channel.\nWill automatically stop if the channel ({@link Client#event:channelDelete channelDelete}),\nthread ({@link Client#event:threadDelete threadDelete}), or\nguild ({@link Client#event:guildDelete guildDelete}) is deleted.","extends":[[["Collector"]]],"construct":{"name":"MessageCollector","params":[{"name":"channel","description":"The channel","type":[[["TextBasedChannels"]]]},{"name":"options","description":"The options to be applied to this collector","type":[[["MessageCollectorOptions"]]]}]},"props":[{"name":"channel","description":"The channel","type":[[["TextBasedChannels"]]],"meta":{"line":32,"file":"MessageCollector.js","path":"src/structures"}},{"name":"received","description":"Total number of messages that were received in the channel during message collection","type":[[["number"]]],"meta":{"line":38,"file":"MessageCollector.js","path":"src/structures"}},{"name":"endReason","description":"The reason this collector has ended with, or null if it hasn't ended yet","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":103,"file":"MessageCollector.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this Collector","readonly":true,"type":[[["Client"]]],"meta":{"line":35,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"filter","description":"The filter applied to this collector","type":[[["CollectorFilter"]]],"meta":{"line":48,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"options","description":"The options of this collector","type":[[["CollectorOptions"]]],"meta":{"line":54,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"collected","description":"The items collected by this collector","type":[[["Collection"]]],"meta":{"line":60,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"ended","description":"Whether this collector has finished collecting","type":[[["boolean"]]],"meta":{"line":66,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_timeout","description":"Timeout for cleanup","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":73,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_idletimeout","description":"Timeout for cleanup due to inactivity","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":80,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"next","description":"Returns a promise that resolves with the next collected element;\nrejects with collected elements if the collector finishes without receiving a next element","readonly":true,"type":[[["Promise"]]],"meta":{"line":148,"file":"Collector.js","path":"src/structures/interfaces"}}],"methods":[{"name":"collect","description":"Handles a message for possible collection.","access":"private","params":[{"name":"message","description":"The message that could be collected","type":[[["Message"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":73,"file":"MessageCollector.js","path":"src/structures"}},{"name":"dispose","description":"Handles a message for possible disposal.","params":[{"name":"message","description":"The message that could be disposed of","type":[[["Message"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":89,"file":"MessageCollector.js","path":"src/structures"}},{"name":"_handleChannelDeletion","description":"Handles checking if the channel has been deleted, and if so, stops the collector with the reason 'channelDelete'.","access":"private","params":[{"name":"channel","description":"The channel that was deleted","type":[[["GuildChannel"]]]}],"returns":[[["void"]]],"meta":{"line":115,"file":"MessageCollector.js","path":"src/structures"}},{"name":"_handleThreadDeletion","description":"Handles checking if the thread has been deleted, and if so, stops the collector with the reason 'threadDelete'.","access":"private","params":[{"name":"thread","description":"The thread that was deleted","type":[[["ThreadChannel"]]]}],"returns":[[["void"]]],"meta":{"line":127,"file":"MessageCollector.js","path":"src/structures"}},{"name":"_handleGuildDeletion","description":"Handles checking if the guild has been deleted, and if so, stops the collector with the reason 'guildDelete'.","access":"private","params":[{"name":"guild","description":"The guild that was deleted","type":[[["Guild"]]]}],"returns":[[["void"]]],"meta":{"line":139,"file":"MessageCollector.js","path":"src/structures"}},{"name":"handleCollect","description":"Call this to handle an event as a collectable element. Accepts any event data as parameters.","inherits":"Collector#handleCollect","inherited":true,"emits":["Collector#event:collect"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":99,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"handleDispose","description":"Call this to remove an element from the collection. Accepts any event data as parameters.","inherits":"Collector#handleDispose","inherited":true,"emits":["Collector#event:dispose"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":126,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"stop","description":"Stops this collector and emits the `end` event.","inherits":"Collector#stop","inherited":true,"emits":["Collector#event:end"],"params":[{"name":"reason","description":"The reason this collector is ending","optional":true,"default":"'user'","type":[[["string"]]]}],"meta":{"line":180,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"resetTimer","description":"Resets the collector's timeout and idle timer.","inherits":"Collector#resetTimer","inherited":true,"params":[{"name":"options","description":"Options for resetting","optional":true,"type":[[["CollectorResetTimerOptions"]]]}],"meta":{"line":213,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"checkEnd","description":"Checks whether the collector should end, and if so, ends it.","inherits":"Collector#checkEnd","inherited":true,"returns":{"types":[[["boolean"]]],"description":"Whether the collector ended or not"},"meta":{"line":228,"file":"Collector.js","path":"src/structures/interfaces"}}],"events":[{"name":"collect","description":"Emitted whenever a message is collected.","params":[{"name":"message","description":"The message that was collected","type":[[["Message"]]]}],"meta":{"line":74,"file":"MessageCollector.js","path":"src/structures"}},{"name":"dispose","description":"Emitted whenever a message is disposed of.","params":[{"name":"message","description":"The message that was disposed of","type":[[["Message"]]]}],"meta":{"line":90,"file":"MessageCollector.js","path":"src/structures"}},{"name":"end","description":"Emitted when the collector is finished collecting.","params":[{"name":"collected","description":"The elements collected by the collector","type":[[["Collection"]]]},{"name":"reason","description":"The reason the collector ended","type":[[["string"]]]}],"meta":{"line":193,"file":"Collector.js","path":"src/structures/interfaces"}}],"meta":{"line":19,"file":"MessageCollector.js","path":"src/structures"}},{"name":"MessageComponentInteraction","description":"Represents a message component interaction.","extends":[[["Interaction"]]],"implements":[[["InteractionResponses"]]],"props":[{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":17,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"message","description":"The message to which the component was attached","type":[[["Message"]],[["APIMessage"]]],"meta":{"line":27,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"customId","description":"The custom id of the component which was interacted with","type":[[["string"]]],"meta":{"line":33,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"componentType","description":"The type of component which was interacted with","type":[[["string"]]],"meta":{"line":39,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":45,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":57,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":63,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"component","description":"The component which was interacted with","readonly":true,"type":[[["MessageActionRowComponent"]],[["APIMessageActionRowComponent"]]],"meta":{"line":78,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}},{"name":"resolveType","description":"Resolves the type of a MessageComponent","scope":"static","access":"private","params":[{"name":"type","description":"The type to resolve","type":[[["MessageComponentTypeResolvable"]]]}],"returns":[[["MessageComponentType"]]],"meta":{"line":90,"file":"MessageComponentInteraction.js","path":"src/structures"}}],"meta":{"line":13,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"MessageContextMenuInteraction","description":"Represents a message context menu interaction.","extends":[[["ContextMenuInteraction"]]],"props":[{"name":"targetMessage","description":"The message this interaction was sent from","readonly":true,"type":[[["Message"]],[["APIMessage"]]],"meta":{"line":15,"file":"MessageContextMenuInteraction.js","path":"src/structures"}},{"name":"options","description":"The target of the interaction, parsed into options","type":[[["CommandInteractionOptionResolver"]]],"meta":{"line":18,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"targetId","description":"The id of the target of the interaction","type":[[["Snowflake"]]],"meta":{"line":28,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"targetType","description":"The type of the target of the interaction; either USER or MESSAGE","type":[[["ApplicationCommandType"]]],"meta":{"line":34,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":20,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandId","description":"The invoked application command's id","type":[[["Snowflake"]]],"meta":{"line":30,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandName","description":"The invoked application command's name","type":[[["string"]]],"meta":{"line":36,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":42,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":48,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":54,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":60,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"command","description":"The invoked application command, if it was fetched before","nullable":true,"type":[[["ApplicationCommand"]]],"meta":{"line":67,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"resolveContextMenuOptions","description":"Resolves and transforms options received from the API for a context menu interaction.","access":"private","inherits":"ContextMenuInteraction#resolveContextMenuOptions","inherited":true,"params":[{"name":"data","description":"The interaction data","type":[[["APIApplicationCommandInteractionData"]]]}],"returns":[[["Array","<"],["CommandInteractionOption",">"]]],"meta":{"line":43,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"transformResolved","description":"Transforms the resolved received from the API.","access":"private","inherits":"BaseCommandInteraction#transformResolved","inherited":true,"params":[{"name":"resolved","description":"The received resolved objects","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionResolvedData"]]],"meta":{"line":89,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"transformOption","description":"Transforms an option received from the API.","access":"private","inherits":"BaseCommandInteraction#transformOption","inherited":true,"params":[{"name":"option","description":"The received option","type":[[["APIApplicationCommandOption"]]]},{"name":"resolved","description":"The resolved interaction data","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionOption"]]],"meta":{"line":162,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"BaseCommandInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"BaseCommandInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"BaseCommandInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"BaseCommandInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"BaseCommandInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"BaseCommandInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"BaseCommandInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseCommandInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":9,"file":"MessageContextMenuInteraction.js","path":"src/structures"}},{"name":"MessageEmbed","description":"Represents an embed in a message (image/video preview, rich embed, etc.)","construct":{"name":"MessageEmbed","params":[{"name":"data","description":"MessageEmbed to clone or raw embed data","optional":true,"default":"{}","type":[[["MessageEmbed"]],[["MessageEmbedOptions"]],[["APIEmbed"]]]}]},"props":[{"name":"type","description":"The type of this embed, either:\n* `rich` - a generic embed rendered from embed attributes\n* `image` - an image embed\n* `video` - a video embed\n* `gifv` - an animated gif image embed rendered as a video embed\n* `article` - an article embed\n* `link` - a link embed","see":["{@link https://discord.com/developers/docs/resources/channel#embed-object-embed-types}"],"deprecated":true,"type":[[["string"]]],"meta":{"line":61,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"title","description":"The title of this embed","nullable":true,"type":[[["string"]]],"meta":{"line":67,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"description","description":"The description of this embed","nullable":true,"type":[[["string"]]],"meta":{"line":73,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"url","description":"The URL of this embed","nullable":true,"type":[[["string"]]],"meta":{"line":79,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"color","description":"The color of this embed","nullable":true,"type":[[["number"]]],"meta":{"line":85,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"timestamp","description":"The timestamp of this embed","nullable":true,"type":[[["number"]]],"meta":{"line":91,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"fields","description":"The fields of this embed","type":[[["Array","<"],["EmbedField",">"]]],"meta":{"line":105,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"thumbnail","description":"The thumbnail of this embed (if there is one)","nullable":true,"type":[[["MessageEmbedThumbnail"]]],"meta":{"line":123,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"image","description":"The image of this embed, if there is one","nullable":true,"type":[[["MessageEmbedImage"]]],"meta":{"line":145,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"video","description":"The video of this embed (if there is one)","readonly":true,"nullable":true,"type":[[["MessageEmbedVideo"]]],"meta":{"line":168,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"author","description":"The author of this embed (if there is one)","nullable":true,"type":[[["MessageEmbedAuthor"]]],"meta":{"line":190,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"provider","description":"The provider of this embed (if there is one)","nullable":true,"type":[[["MessageEmbedProvider"]]],"meta":{"line":210,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"footer","description":"The footer of this embed","nullable":true,"type":[[["MessageEmbedFooter"]]],"meta":{"line":229,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"createdAt","description":"The date displayed on this embed","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":243,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"hexColor","description":"The hexadecimal version of the embed color, with a leading hash","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":252,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"length","description":"The accumulated length for the embed title, description, fields, footer text, and author name","readonly":true,"type":[[["number"]]],"meta":{"line":261,"file":"MessageEmbed.js","path":"src/structures"}}],"methods":[{"name":"equals","description":"Checks if this embed is equal to another one by comparing every single one of their properties.","params":[{"name":"embed","description":"The embed to compare with","type":[[["MessageEmbed"]],[["APIEmbed"]]]}],"returns":[[["boolean"]]],"meta":{"line":278,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"_fieldEquals","description":"Compares two given embed fields to see if they are equal","access":"private","params":[{"name":"field","description":"The first field to compare","type":[[["EmbedFieldData"]]]},{"name":"other","description":"The second field to compare","type":[[["EmbedFieldData"]]]}],"returns":[[["boolean"]]],"meta":{"line":308,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"addField","description":"Adds a field to the embed (max 25).","deprecated":"This method is a wrapper for {@link MessageEmbed#addFields}. Use that instead.","params":[{"name":"name","description":"The name of this field","type":[[["string"]]]},{"name":"value","description":"The value of this field","type":[[["string"]]]},{"name":"inline","description":"If this field will be displayed inline","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":320,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"addFields","description":"Adds fields to the embed (max 25).","params":[{"name":"fields","description":"The fields to add","variable":true,"type":[[["EmbedFieldData"]],[["Array","<"],["EmbedFieldData",">"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":338,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"spliceFields","description":"Removes, replaces, and inserts fields in the embed (max 25).","params":[{"name":"index","description":"The index to start at","type":[[["number"]]]},{"name":"deleteCount","description":"The number of fields to remove","type":[[["number"]]]},{"name":"fields","description":"The replacing field objects","optional":true,"variable":true,"type":[[["EmbedFieldData"]],[["Array","<"],["EmbedFieldData",">"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":350,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setFields","description":"Sets the embed's fields (max 25).","params":[{"name":"fields","description":"The fields to set","variable":true,"type":[[["EmbedFieldData"]],[["Array","<"],["EmbedFieldData",">"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":360,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setAuthor","description":"Sets the author of this embed.","params":[{"name":"options","description":"The options to provide for the author.\nProvide `null` to remove the author data.","type":[[["string"]],[["EmbedAuthorData"]],[["null"]]]},{"name":"deprecatedIconURL","description":"The icon URL of this author.\nThis parameter is **deprecated**. Use the `options` parameter instead.","optional":true,"type":[[["string"]]]},{"name":"deprecatedURL","description":"The URL of this author.\nThis parameter is **deprecated**. Use the `options` parameter instead.","optional":true,"type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":383,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setColor","description":"Sets the color of this embed.","params":[{"name":"color","description":"The color of the embed","type":[[["ColorResolvable"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":412,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setDescription","description":"Sets the description of this embed.","params":[{"name":"description","description":"The description","type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":422,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setFooter","description":"Sets the footer of this embed.","params":[{"name":"options","description":"The options to provide for the footer.\nProvide `null` to remove the footer data.","type":[[["string"]],[["EmbedFooterData"]],[["null"]]]},{"name":"deprecatedIconURL","description":"The icon URL of this footer.\nThis parameter is **deprecated**. Use the `options` parameter instead.","optional":true,"type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":442,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setImage","description":"Sets the image of this embed.","params":[{"name":"url","description":"The URL of the image","type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":471,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setThumbnail","description":"Sets the thumbnail of this embed.","params":[{"name":"url","description":"The URL of the thumbnail","type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":481,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setTimestamp","description":"Sets the timestamp of this embed.","params":[{"name":"timestamp","description":"The timestamp or date.\nIf `null` then the timestamp will be unset (i.e. when editing an existing {@link MessageEmbed})","optional":true,"default":"Date.now()","type":[[["Date"]],[["number"]],[["null"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":492,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setTitle","description":"Sets the title of this embed.","params":[{"name":"title","description":"The title","type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":503,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setURL","description":"Sets the URL of this embed.","params":[{"name":"url","description":"The URL","type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":513,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"toJSON","description":"Transforms the embed to a plain object.","returns":{"types":[[["APIEmbed"]]],"description":"The raw data of this embed"},"meta":{"line":522,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"normalizeField","description":"Normalizes field input and verifies strings.","scope":"static","params":[{"name":"name","description":"The name of the field","type":[[["string"]]]},{"name":"value","description":"The value of the field","type":[[["string"]]]},{"name":"inline","description":"Set the field to display inline","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["EmbedField"]]],"meta":{"line":552,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"normalizeFields","description":"Normalizes field input and resolves strings.","scope":"static","params":[{"name":"fields","description":"Fields to normalize","variable":true,"type":[[["EmbedFieldData"]],[["Array","<"],["EmbedFieldData",">"]]]}],"returns":[[["Array","<"],["EmbedField",">"]]],"meta":{"line":572,"file":"MessageEmbed.js","path":"src/structures"}}],"meta":{"line":16,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageMentions","description":"Keeps track of mentions in a {@link Message}.","props":[{"name":"everyone","description":"Whether `@everyone` or `@here` were mentioned","type":[[["boolean"]]],"meta":{"line":38,"file":"MessageMentions.js","path":"src/structures"}},{"name":"users","description":"Any users that were mentioned\nOrder as received from the API, not as they appear in the message content","type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":47,"file":"MessageMentions.js","path":"src/structures"}},{"name":"roles","description":"Any roles that were mentioned\nOrder as received from the API, not as they appear in the message content","type":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":68,"file":"MessageMentions.js","path":"src/structures"}},{"name":"_members","description":"Cached members for {@link MessageMentions#members}","access":"private","nullable":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":87,"file":"MessageMentions.js","path":"src/structures"}},{"name":"_channels","description":"Cached channels for {@link MessageMentions#channels}","access":"private","nullable":true,"type":[[["Collection","<"],["Snowflake",", "],["Channel",">"]]],"meta":{"line":94,"file":"MessageMentions.js","path":"src/structures"}},{"name":"_parsedUsers","description":"Cached users for {@link MessageMentions#parsedUsers}","access":"private","nullable":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":101,"file":"MessageMentions.js","path":"src/structures"}},{"name":"crosspostedChannels","description":"A collection of crossposted channels\nOrder as received from the API, not as they appear in the message content","type":[[["Collection","<"],["Snowflake",", "],["CrosspostedChannel",">"]]],"meta":{"line":119,"file":"MessageMentions.js","path":"src/structures"}},{"name":"repliedUser","description":"The author of the message that this message is a reply to","nullable":true,"type":[[["User"]]],"meta":{"line":141,"file":"MessageMentions.js","path":"src/structures"}},{"name":"members","description":"Any members that were mentioned (only in {@link Guild}s)\nOrder as received from the API, not as they appear in the message content","readonly":true,"nullable":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":150,"file":"MessageMentions.js","path":"src/structures"}},{"name":"channels","description":"Any channels that were mentioned\nOrder as they appear first in the message content","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Channel",">"]]],"meta":{"line":167,"file":"MessageMentions.js","path":"src/structures"}},{"name":"parsedUsers","description":"Any user mentions that were included in the message content\nOrder as they appear first in the message content","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":184,"file":"MessageMentions.js","path":"src/structures"}},{"name":"EVERYONE_PATTERN","description":"Regular expression that globally matches `@everyone` and `@here`","scope":"static","type":[[["RegExp"]]],"meta":{"line":252,"file":"MessageMentions.js","path":"src/structures"}},{"name":"USERS_PATTERN","description":"Regular expression that globally matches user mentions like `<@81440962496172032>`","scope":"static","type":[[["RegExp"]]],"meta":{"line":258,"file":"MessageMentions.js","path":"src/structures"}},{"name":"ROLES_PATTERN","description":"Regular expression that globally matches role mentions like `<@&297577916114403338>`","scope":"static","type":[[["RegExp"]]],"meta":{"line":264,"file":"MessageMentions.js","path":"src/structures"}},{"name":"CHANNELS_PATTERN","description":"Regular expression that globally matches channel mentions like `<#222079895583457280>`","scope":"static","type":[[["RegExp"]]],"meta":{"line":270,"file":"MessageMentions.js","path":"src/structures"}}],"methods":[{"name":"has","description":"Checks if a user, guild member, thread member, role, or channel is mentioned.\nTakes into account user mentions, role mentions, channel mentions,\nreplied user mention, and `@everyone`/`@here` mentions.","params":[{"name":"data","description":"The User/Role/Channel to check for","type":[[["UserResolvable"]],[["RoleResolvable"]],[["ChannelResolvable"]]]},{"name":"options","description":"The options for the check","optional":true,"type":[[["MessageMentionsHasOptions"]]]}],"returns":[[["boolean"]]],"meta":{"line":212,"file":"MessageMentions.js","path":"src/structures"}}],"meta":{"line":10,"file":"MessageMentions.js","path":"src/structures"}},{"name":"MessagePayload","description":"Represents a message to be sent to the API.","construct":{"name":"MessagePayload","params":[{"name":"target","description":"The target for this message to be sent to","type":[[["MessageTarget"]]]},{"name":"options","description":"Options passed in from send","type":[[["MessageOptions"]],[["WebhookMessageOptions"]]]}]},"props":[{"name":"target","description":"The target for this message to be sent to","type":[[["MessageTarget"]]],"meta":{"line":26,"file":"MessagePayload.js","path":"src/structures"}},{"name":"options","description":"Options passed in from send","type":[[["MessageOptions"]],[["WebhookMessageOptions"]]],"meta":{"line":32,"file":"MessagePayload.js","path":"src/structures"}},{"name":"data","description":"Data sendable to the API","nullable":true,"type":[[["APIMessage"]]],"meta":{"line":38,"file":"MessagePayload.js","path":"src/structures"}},{"name":"files","description":"Files sendable to the API","nullable":true,"type":[[["Array","<"],["MessageFile",">"]]],"meta":{"line":52,"file":"MessagePayload.js","path":"src/structures"}},{"name":"usingNewAttachmentAPI","description":"Whether or not using new API to upload files","readonly":true,"type":[[["boolean"]]],"meta":{"line":60,"file":"MessagePayload.js","path":"src/structures"}},{"name":"isWebhook","description":"Whether or not the target is a {@link Webhook} or a {@link WebhookClient}","readonly":true,"type":[[["boolean"]]],"meta":{"line":69,"file":"MessagePayload.js","path":"src/structures"}},{"name":"isUser","description":"Whether or not the target is a {@link User}","readonly":true,"type":[[["boolean"]]],"meta":{"line":80,"file":"MessagePayload.js","path":"src/structures"}},{"name":"isMessage","description":"Whether or not the target is a {@link Message}","readonly":true,"type":[[["boolean"]]],"meta":{"line":91,"file":"MessagePayload.js","path":"src/structures"}},{"name":"isMessageManager","description":"Whether or not the target is a {@link MessageManager}","readonly":true,"type":[[["boolean"]]],"meta":{"line":101,"file":"MessagePayload.js","path":"src/structures"}},{"name":"isInteraction","description":"Whether or not the target is an {@link Interaction} or an {@link InteractionWebhook}","readonly":true,"type":[[["boolean"]]],"meta":{"line":111,"file":"MessagePayload.js","path":"src/structures"}}],"methods":[{"name":"makeContent","description":"Makes the content of this message.","returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":121,"file":"MessagePayload.js","path":"src/structures"}},{"name":"resolveData","description":"Resolves data.","async":true,"returns":[[["MessagePayload"]]],"meta":{"line":136,"file":"MessagePayload.js","path":"src/structures"}},{"name":"resolveFiles","description":"Resolves files.","async":true,"returns":[[["Promise","<"],["MessagePayload",">"]]],"meta":{"line":283,"file":"MessagePayload.js","path":"src/structures"}},{"name":"resolveFile","description":"Resolves a single file into an object sendable to the API.","scope":"static","params":[{"name":"fileLike","description":"Something that could be resolved to a file","type":[[["BufferResolvable"]],[["Stream"]],[["FileOptions"]],[["MessageAttachment"]]]}],"async":true,"returns":[[["Promise","<"],["MessageFile",">"]]],"meta":{"line":295,"file":"MessagePayload.js","path":"src/structures"}},{"name":"create","description":"Creates a {@link MessagePayload} from user-level arguments.","scope":"static","params":[{"name":"target","description":"Target to send to","type":[[["MessageTarget"]]]},{"name":"options","description":"Options or content to use","type":[[["string"]],[["MessageOptions"]],[["WebhookMessageOptions"]]]},{"name":"extra","description":"Extra options to add onto specified options","optional":true,"default":"{}","type":[[["MessageOptions"]],[["WebhookMessageOptions"]]]}],"returns":[[["MessagePayload"]]],"meta":{"line":339,"file":"MessagePayload.js","path":"src/structures"}}],"meta":{"line":16,"file":"MessagePayload.js","path":"src/structures"}},{"name":"MessageReaction","description":"Represents a reaction to a message.","props":[{"name":"client","description":"The client that instantiated this message reaction","readonly":true,"type":[[["Client"]]],"meta":{"line":13,"file":"MessageReaction.js","path":"src/structures"}},{"name":"message","description":"The message that this reaction refers to","type":[[["Message"]]],"meta":{"line":25,"file":"MessageReaction.js","path":"src/structures"}},{"name":"me","description":"Whether the client has given this reaction","type":[[["boolean"]]],"meta":{"line":31,"file":"MessageReaction.js","path":"src/structures"}},{"name":"isBurst","description":"Super reaction","type":[[["boolean"]]],"meta":{"line":37,"file":"MessageReaction.js","path":"src/structures"}},{"name":"users","description":"A manager of the users that have given this reaction","type":[[["ReactionUserManager"]]],"meta":{"line":43,"file":"MessageReaction.js","path":"src/structures"}},{"name":"count","description":"The number of people that have given the same reaction","nullable":true,"type":[[["number"]]],"meta":{"line":56,"file":"MessageReaction.js","path":"src/structures"}},{"name":"burstCount","description":"The number of people that have given the same super reaction","nullable":true,"type":[[["number"]]],"meta":{"line":64,"file":"MessageReaction.js","path":"src/structures"}},{"name":"burstColors","description":"HEX colors used for super reaction","type":[[["Array","<"],["string",">"]]],"meta":{"line":72,"file":"MessageReaction.js","path":"src/structures"}},{"name":"countDetails","description":"The reaction count details object contains information about super and normal reaction counts.","nullable":true,"type":[[["ReactionCountDetailsData"]]],"meta":{"line":87,"file":"MessageReaction.js","path":"src/structures"}},{"name":"emoji","description":"The emoji of this reaction. Either a {@link GuildEmoji} object for known custom emojis, or a {@link ReactionEmoji}\nobject which has fewer properties. Whatever the prototype of the emoji, it will still have\n`name`, `id`, `identifier` and `toString()`","readonly":true,"type":[[["GuildEmoji"]],[["ReactionEmoji"]]],"meta":{"line":114,"file":"MessageReaction.js","path":"src/structures"}},{"name":"partial","description":"Whether or not this reaction is a partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":133,"file":"MessageReaction.js","path":"src/structures"}}],"methods":[{"name":"remove","description":"Removes all users from this reaction.","async":true,"returns":[[["Promise","<"],["MessageReaction",">"]]],"meta":{"line":98,"file":"MessageReaction.js","path":"src/structures"}},{"name":"fetch","description":"Fetch this reaction.","async":true,"returns":[[["Promise","<"],["MessageReaction",">"]]],"meta":{"line":141,"file":"MessageReaction.js","path":"src/structures"}}],"meta":{"line":11,"file":"MessageReaction.js","path":"src/structures"}},{"name":"MessageSelectMenu","description":"Represents a select menu message component","extends":[[["BaseMessageComponent"]]],"construct":{"name":"MessageSelectMenu","params":[{"name":"data","description":"MessageSelectMenu to clone or raw data","optional":true,"default":"{}","type":[[["MessageSelectMenu"]],[["MessageSelectMenuOptions"]]]}]},"props":[{"name":"customId","description":"A unique string to be sent in the interaction when clicked","nullable":true,"type":[[["string"]]],"meta":{"line":64,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"placeholder","description":"Custom placeholder text to display when nothing is selected","nullable":true,"type":[[["string"]]],"meta":{"line":70,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"minValues","description":"The minimum number of selections required","nullable":true,"type":[[["number"]]],"meta":{"line":76,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"maxValues","description":"The maximum number of selections allowed","nullable":true,"type":[[["number"]]],"meta":{"line":82,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"options","description":"Options for the STRING_SELECT menu","type":[[["Array","<"],["MessageSelectOption",">"]]],"meta":{"line":88,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"disabled","description":"Whether this select menu is currently disabled","type":[[["boolean"]]],"meta":{"line":94,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"channelTypes","description":"Channels that are possible to select in CHANNEL_SELECT menu","type":[[["Array","<"],["ChannelType",">"]]],"meta":{"line":100,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"type","description":"The type of this component","nullable":true,"type":[[["MessageComponentType"]]],"meta":{"line":52,"file":"BaseMessageComponent.js","path":"src/structures"}}],"methods":[{"name":"addChannelTypes","description":"Adds the channel types to the select menu","params":[{"name":"channelTypes","description":"Added channel types","variable":true,"type":[[["Array","<"],["ChannelType",">"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":111,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"setChannelTypes","description":"Sets the channel types of the select menu","params":[{"name":"channelTypes","description":"An array of new channel types","variable":true,"type":[[["Array","<"],["ChannelType",">"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":126,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"setCustomId","description":"Sets the custom id of this select menu","params":[{"name":"customId","description":"A unique string to be sent in the interaction when clicked","type":[[["string"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":141,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"setDisabled","description":"Sets the interactive status of the select menu","params":[{"name":"disabled","description":"Whether this select menu should be disabled","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":151,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"setMaxValues","description":"Sets the maximum number of selections allowed for this select menu","params":[{"name":"maxValues","description":"Number of selections to be allowed","type":[[["number"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":161,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"setMinValues","description":"Sets the minimum number of selections required for this select menu\nThis will default the maxValues to the number of options, unless manually set","params":[{"name":"minValues","description":"Number of selections to be required","type":[[["number"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":172,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"setPlaceholder","description":"Sets the placeholder of this select menu","params":[{"name":"placeholder","description":"Custom placeholder text to display when nothing is selected","type":[[["string"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":182,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"setType","description":"Sets the type of the select menu","params":[{"name":"type","description":"Type of the select menu","type":[[["SelectMenuComponentType"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":192,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"addOptions","description":"Adds options to the select menu.","params":[{"name":"options","description":"The options to add","variable":true,"type":[[["MessageSelectOptionData"]],[["Array","<"],["MessageSelectOptionData",">"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":203,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"setOptions","description":"Sets the options of the select menu.","params":[{"name":"options","description":"The options to set","variable":true,"type":[[["MessageSelectOptionData"]],[["Array","<"],["MessageSelectOptionData",">"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":213,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"spliceOptions","description":"Removes, replaces, and inserts options in the select menu.","params":[{"name":"index","description":"The index to start at","type":[[["number"]]]},{"name":"deleteCount","description":"The number of options to remove","type":[[["number"]]]},{"name":"options","description":"The replacing option objects","optional":true,"variable":true,"type":[[["MessageSelectOptionData"]],[["Array","<"],["MessageSelectOptionData",">"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":225,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"toJSON","description":"Transforms the select menu into a plain object","returns":{"types":[[["APIMessageSelectMenu"]]],"description":"The raw data of this select menu"},"meta":{"line":234,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"select","description":"Mesage select menu","params":[{"name":"message","description":"The message this select menu is for","type":[[["Message"]]]},{"name":"values","description":"The values of the select menu","type":[[["Array","<"],["any",">"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":279,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"normalizeOption","description":"Normalizes option input and resolves strings and emojis.","scope":"static","params":[{"name":"option","description":"The select menu option to normalize","type":[[["MessageSelectOptionData"]]]}],"returns":[[["MessageSelectOption"]]],"meta":{"line":252,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"normalizeOptions","description":"Normalizes option input and resolves strings and emojis.","scope":"static","params":[{"name":"options","description":"The select menu options to normalize","variable":true,"type":[[["MessageSelectOptionData"]],[["Array","<"],["MessageSelectOptionData",">"]]]}],"returns":[[["Array","<"],["MessageSelectOption",">"]]],"meta":{"line":268,"file":"MessageSelectMenu.js","path":"src/structures"}}],"meta":{"line":20,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"Modal","description":"Represents a modal (form) to be shown in response to an interaction","construct":{"name":"Modal","params":[{"name":"data","description":"Modal to clone or raw data","type":[[["Modal"]],[["ModalOptions"]]]},{"name":"client","description":"The client constructing this Modal, if provided","default":null,"type":[[["Client"]]]}]},"props":[{"name":"components","description":"A list of MessageActionRows in the modal","type":[[["Array","<"],["MessageActionRow",">"]]],"meta":{"line":30,"file":"Modal.js","path":"src/structures"}},{"name":"customId","description":"A unique string to be sent in the interaction when submitted","nullable":true,"type":[[["string"]]],"meta":{"line":36,"file":"Modal.js","path":"src/structures"}},{"name":"title","description":"The title to be displayed on this modal","nullable":true,"type":[[["string"]]],"meta":{"line":42,"file":"Modal.js","path":"src/structures"}},{"name":"nonce","description":"Timestamp (Discord epoch) of when this modal was created","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":48,"file":"Modal.js","path":"src/structures"}},{"name":"id","description":"ID slash / button / menu when modal is displayed","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":54,"file":"Modal.js","path":"src/structures"}},{"name":"application","description":"Application sending the modal","nullable":true,"type":[[["Object"]]],"meta":{"line":60,"file":"Modal.js","path":"src/structures"}},{"name":"sendFromInteraction","description":"Get Interaction Response","readonly":true,"nullable":true,"type":[[["InteractionResponse"]]],"meta":{"line":75,"file":"Modal.js","path":"src/structures"}}],"methods":[{"name":"addComponents","description":"Adds components to the modal.","params":[{"name":"components","description":"The components to add","variable":true,"type":[[["Array","<"],["MessageActionRowResolvable",">"]]]}],"returns":[[["Modal"]]],"meta":{"line":91,"file":"Modal.js","path":"src/structures"}},{"name":"setComponents","description":"Sets the components of the modal.","params":[{"name":"components","description":"The components to set","variable":true,"type":[[["Array","<"],["MessageActionRowResolvable",">"]]]}],"returns":[[["Modal"]]],"meta":{"line":101,"file":"Modal.js","path":"src/structures"}},{"name":"setCustomId","description":"Sets the custom id for this modal","params":[{"name":"customId","description":"A unique string to be sent in the interaction when submitted","type":[[["string"]]]}],"returns":[[["Modal"]]],"meta":{"line":111,"file":"Modal.js","path":"src/structures"}},{"name":"spliceComponents","description":"Removes, replaces, and inserts components in the modal.","params":[{"name":"index","description":"The index to start at","type":[[["number"]]]},{"name":"deleteCount","description":"The number of components to remove","type":[[["number"]]]},{"name":"components","description":"The replacing components","optional":true,"variable":true,"type":[[["Array","<"],["MessageActionRowResolvable",">"]]]}],"returns":[[["Modal"]]],"meta":{"line":123,"file":"Modal.js","path":"src/structures"}},{"name":"setTitle","description":"Sets the title of this modal","params":[{"name":"title","description":"The title to be displayed on this modal","type":[[["string"]]]}],"returns":[[["Modal"]]],"meta":{"line":133,"file":"Modal.js","path":"src/structures"}},{"name":"reply","description":"Reply to this modal with data. (Event only)","examples":["client.on('interactionModalCreate', modal => {\n// 1.\n modal.reply({\n data: [\n {\n customId: 'code',\n value: '1+1'\n }, {\n customId: 'message',\n value: 'hello'\n }\n ],\n channel: 'id', // optional\n guild: 'id', // optional\n })\n// or 2.\nmodal.components[0].components[0].setValue('1+1');\nmodal.components[1].components[0].setValue('hello');\nmodal.reply();\n})"],"params":[{"name":"data","description":"Data to send with the modal","type":[[["ModalReplyData"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":186,"file":"Modal.js","path":"src/structures"}}],"meta":{"line":12,"file":"Modal.js","path":"src/structures"}},{"name":"ModalSubmitFieldsResolver","description":"A resolver for modal submit interaction text inputs.","props":[{"name":"components","description":"The components within the modal","type":[[["Array","<"],["PartialModalActionRow",">"]]],"meta":{"line":15,"file":"ModalSubmitFieldsResolver.js","path":"src/structures"}},{"name":"_fields","description":"The extracted fields from the modal","access":"private","type":[[["Array","<"],["PartialInputTextData",">"]]],"meta":{"line":23,"file":"ModalSubmitFieldsResolver.js","path":"src/structures"}}],"methods":[{"name":"getField","description":"Gets a field given a custom id from a component","params":[{"name":"customId","description":"The custom id of the component","type":[[["string"]]]}],"returns":{"types":[[["PartialInputTextData"]]],"nullable":true},"meta":{"line":32,"file":"ModalSubmitFieldsResolver.js","path":"src/structures"}},{"name":"getTextInputValue","description":"Gets the value of a text input component given a custom id","params":[{"name":"customId","description":"The custom id of the text input component","type":[[["string"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":43,"file":"ModalSubmitFieldsResolver.js","path":"src/structures"}}],"meta":{"line":9,"file":"ModalSubmitFieldsResolver.js","path":"src/structures"}},{"name":"ModalSubmitInteraction","description":"Represents a modal submit interaction.","extends":[[["Interaction"]]],"implements":[[["InteractionResponses"]]],"props":[{"name":"customId","description":"The custom id of the modal.","type":[[["string"]]],"meta":{"line":22,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"components","description":"The inputs within the modal","type":[[["Array","<"],["PartialModalActionRow",">"]]],"meta":{"line":41,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"message","description":"The message associated with this interaction","type":[[["Message"]],[["APIMessage"]],[["null"]]],"meta":{"line":51,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"fields","description":"The fields within the modal","type":[[["ModalSubmitFieldsResolver"]]],"meta":{"line":57,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":63,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":69,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":75,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":81,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"isFromMessage","description":"Whether this is from a {@link MessageComponentInteraction}.","returns":[[["boolean"]]],"meta":{"line":101,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"deferReply","description":"Defers the reply to this interaction.","implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}},{"name":"transformComponent","description":"Transforms component data to discord.js-compatible data","scope":"static","params":[{"name":"rawComponent","description":"The data to transform","type":[["*"]]}],"returns":[[["Array","<"],["PartialTextInputData",">"]]],"meta":{"line":89,"file":"ModalSubmitInteraction.js","path":"src/structures"}}],"meta":{"line":14,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"NewsChannel","description":"Represents a guild news channel on Discord.","extends":[[["BaseGuildTextChannel"]]],"props":[{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":22,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":28,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"threads","description":"A manager of the threads belonging to this channel","type":[[["GuildTextThreadManager"]]],"meta":{"line":34,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":40,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"topic","description":"The topic of the text channel","nullable":true,"type":[[["string"]]],"meta":{"line":53,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in the channel, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":65,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastPinTimestamp","description":"The timestamp when the last pinned message was pinned, if there was one","nullable":true,"type":[[["number"]]],"meta":{"line":73,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"defaultAutoArchiveDuration","description":"The default auto archive duration for newly created threads in this channel","nullable":true,"type":[[["number"]]],"meta":{"line":81,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"defaultThreadRateLimitPerUser","description":"The initial rate limit per user (slowmode) to set on newly created threads in a channel.","nullable":true,"type":[[["number"]]],"meta":{"line":89,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinAt","description":"The date when the last pinned message was pinned, if there was one","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":68,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":274,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"addFollower","description":"Adds the target to this channel's followers.\nIf you need the created webhook id, use {@link GuildChannelManager#addFollower}.","examples":["if (channel.type === 'GUILD_NEWS') {\n channel.addFollower('222197033908436994', 'Important announcements')\n .then(() => console.log('Added follower'))\n .catch(console.error);\n}"],"params":[{"name":"channel","description":"The channel where the webhook should be created","type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for creating the webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["NewsChannel",">"]]],"meta":{"line":24,"file":"NewsChannel.js","path":"src/structures"}},{"name":"setDefaultAutoArchiveDuration","description":"Sets the default auto archive duration for all newly created threads in this channel.","inherits":"BaseGuildTextChannel#setDefaultAutoArchiveDuration","inherited":true,"params":[{"name":"defaultAutoArchiveDuration","description":"The new default auto archive duration","type":[[["ThreadAutoArchiveDuration"]]]},{"name":"reason","description":"Reason for changing the channel's default auto archive duration","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["TextChannel",">"]]],"meta":{"line":105,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"setType","description":"Sets the type of this channel (only conversion between text and news is supported)","inherits":"BaseGuildTextChannel#setType","inherited":true,"params":[{"name":"type","description":"The new channel type","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the channel's type","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":115,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"setTopic","description":"Sets a new topic for the guild channel.","inherits":"BaseGuildTextChannel#setTopic","inherited":true,"examples":["// Set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.error);"],"params":[{"name":"topic","description":"The new topic for the guild channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's topic","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":130,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"createInvite","description":"Creates an invite to this guild channel.","inherits":"BaseGuildTextChannel#createInvite","inherited":true,"examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":168,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","inherits":"BaseGuildTextChannel#fetchInvites","inherited":true,"params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":178,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","inherits":"BaseGuildTextChannel#send","inherited":true,"implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","inherits":"BaseGuildTextChannel#sendTyping","inherited":true,"implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","inherits":"BaseGuildTextChannel#createMessageCollector","inherited":true,"implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","inherits":"BaseGuildTextChannel#awaitMessages","inherited":true,"implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","inherits":"BaseGuildTextChannel#createMessageComponentCollector","inherited":true,"implements":["TextBasedChannel#createMessageComponentCollector"],"examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseGuildTextChannel#awaitMessageComponent","inherited":true,"implements":["TextBasedChannel#awaitMessageComponent"],"examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"bulkDelete","description":"Bulk deletes given messages that are newer than two weeks.","inherits":"BaseGuildTextChannel#bulkDelete","inherited":true,"implements":["TextBasedChannel#bulkDelete"],"examples":["// Bulk delete messages\nchannel.bulkDelete(5)\n .then(messages => console.log(`Bulk deleted ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"messages","description":"Messages or number of messages to delete","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]],[["Array","<"],["MessageResolvable",">"]],[["number"]]]},{"name":"filterOld","description":"Filter messages to remove those which are older than two weeks automatically","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Collection","<"],["Snowflake",", ("],["Message","|"],["undefined",")>>"]]],"description":"Returns the deleted messages"},"meta":{"line":319,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","inherits":"BaseGuildTextChannel#fetchWebhooks","inherited":true,"implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":368,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","inherits":"BaseGuildTextChannel#createWebhook","inherited":true,"implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":393,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","inherits":"BaseGuildTextChannel#setRateLimitPerUser","inherited":true,"implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":403,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","inherits":"BaseGuildTextChannel#setNSFW","inherited":true,"implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":413,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"searchInteraction","description":"Search Slash Command (return raw data)","inherits":"BaseGuildTextChannel#searchInteraction","inherited":true,"implements":["TextBasedChannel#searchInteraction"],"params":[{"name":"applicationId","description":"Application ID","type":[[["Snowflake"]]]},{"name":"type","description":"Command Type","default":"CHAT_INPUT","nullable":true,"type":[[["ApplicationCommandType"]]]}],"returns":[[["Object"]]],"meta":{"line":423,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendSlash","description":"Send Slash to this channel","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/SlashCommand.md}"],"inherits":"BaseGuildTextChannel#sendSlash","inherited":true,"implements":["TextBasedChannel#sendSlash"],"examples":["// Send a basic slash\nchannel.sendSlash('botid', 'ping')\n .then(console.log)\n .catch(console.error);","// Send a remote file\nchannel.sendSlash('botid', 'emoji upload', 'https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048', 'test')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"bot","description":"Bot user (BotID, not applicationID)","type":[[["UserResolvable"]]]},{"name":"commandString","description":"Command name (and sub / group formats)","type":[[["string"]]]},{"name":"args","description":"Command arguments","variable":true,"type":[[["any"]],[["Array","<"],["any",">"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":463,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":10,"file":"NewsChannel.js","path":"src/structures"}},{"name":"OAuth2Guild","description":"A partial guild received when using {@link GuildManager#fetch} to fetch multiple guilds.","extends":[[["BaseGuild"]]],"props":[{"name":"owner","description":"Whether the client user is the owner of the guild","type":[[["boolean"]]],"meta":{"line":18,"file":"OAuth2Guild.js","path":"src/structures"}},{"name":"permissions","description":"The permissions that the client user has in this guild","type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":24,"file":"OAuth2Guild.js","path":"src/structures"}},{"name":"id","description":"The guild's id","type":[[["Snowflake"]]],"meta":{"line":19,"file":"BaseGuild.js","path":"src/structures"}},{"name":"name","description":"The name of this guild","type":[[["string"]]],"meta":{"line":25,"file":"BaseGuild.js","path":"src/structures"}},{"name":"icon","description":"The icon hash of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":31,"file":"BaseGuild.js","path":"src/structures"}},{"name":"features","description":"An array of features available to this guild","type":[[["Array","<"],["Features",">"]]],"meta":{"line":37,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this guild was created at","readonly":true,"type":[[["number"]]],"meta":{"line":45,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdAt","description":"The time this guild was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":54,"file":"BaseGuild.js","path":"src/structures"}},{"name":"nameAcronym","description":"The acronym that shows up in place of a guild icon","readonly":true,"type":[[["string"]]],"meta":{"line":63,"file":"BaseGuild.js","path":"src/structures"}},{"name":"partnered","description":"Whether this guild is partnered","readonly":true,"type":[[["boolean"]]],"meta":{"line":75,"file":"BaseGuild.js","path":"src/structures"}},{"name":"verified","description":"Whether this guild is verified","readonly":true,"type":[[["boolean"]]],"meta":{"line":84,"file":"BaseGuild.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"iconURL","description":"The URL to this guild's icon.","inherits":"BaseGuild#iconURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"BaseGuild.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this guild.","inherits":"BaseGuild#fetch","inherited":true,"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":102,"file":"BaseGuild.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the guild's name instead of the Guild object.","inherits":"BaseGuild#toString","inherited":true,"returns":[[["string"]]],"meta":{"line":111,"file":"BaseGuild.js","path":"src/structures"}}],"meta":{"line":10,"file":"OAuth2Guild.js","path":"src/structures"}},{"name":"PartialGroupDMChannel","description":"Represents a Partial Group DM Channel on Discord.","extends":[[["Channel"]]],"props":[{"name":"name","description":"The name of this Group DM Channel","nullable":true,"type":[[["string"]]],"meta":{"line":28,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"icon","description":"The hash of the channel icon","nullable":true,"type":[[["string"]]],"meta":{"line":34,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"messages","description":"Messages data","type":[[["Collection"]]],"meta":{"line":40,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"Last Message ID","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"lastPinTimestamp","description":"Last Pin Timestamp","type":[[["UnixTimestamp"]]],"meta":{"line":52,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"ownerId","description":"Owner ID","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":58,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"invites","description":"Invites fetch","type":[[["Collection","<"],["string",", "],["Invite",">"]]],"meta":{"line":64,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"recipients","description":"The recipients of this Group DM Channel.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":76,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"owner","description":"The owner of this Group DM Channel","readonly":true,"nullable":true,"type":[[["User"]]],"meta":{"line":88,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"voiceUsers","description":"The user in this voice-based channel","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":390,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"voiceConnection","description":"Get connection to current call","readonly":true,"nullable":true,"type":[[["VoiceConnection"]]],"meta":{"line":404,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"shard","description":"Get current shard","readonly":true,"type":[[["WebSocketShard"]]],"meta":{"line":416,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"voiceAdapterCreator","description":"The voice state adapter for this client that can be used with @discordjs/voice to play audio in DM / Group DM channels.","readonly":true,"nullable":true,"type":[[["function"]]],"meta":{"line":424,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"_patch","access":"private","params":[{"name":"data","description":"Channel Data","type":[[["Object"]]]}],"meta":{"line":97,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"edit","description":"Edit channel data","access":"private","params":[{"name":"data","description":"name, icon owner","type":[[["Object"]]]}],"async":true,"returns":[[["Promise","<"],["undefined",">"]]],"meta":{"line":126,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"iconURL","description":"The URL to this channel's icon.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":147,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"addMember","description":"Adds a user to this Group DM Channel.","params":[{"name":"user","description":"User to add to the group","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["PartialGroupDMChannel",">"]]],"meta":{"line":156,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"removeMember","description":"Removes a user from this Group DM Channel.","params":[{"name":"user","description":"User to remove from the group","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["PartialGroupDMChannel",">"]]],"meta":{"line":174,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"setName","description":"Renames this Group DM Channel.","params":[{"name":"name","description":"Name of the channel","nullable":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["PartialGroupDMChannel",">"]]],"meta":{"line":194,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"setIcon","description":"Sets the icon of this Group DM Channel.","params":[{"name":"icon","description":"Icon of the channel","nullable":true,"type":[[["Base64Resolvable"]],[["BufferResolvable"]]]}],"returns":[[["Promise","<"],["PartialGroupDMChannel",">"]]],"meta":{"line":203,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"setOwner","description":"Changes the owner of this Group DM Channel.","params":[{"name":"user","description":"User to transfer ownership to","type":[[["UserResolvable"]]]}],"returns":[[["Promise","<"],["PartialGroupDMChannel",">"]]],"meta":{"line":212,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"getInvite","description":"Gets the invite for this Group DM Channel.","async":true,"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":230,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"fetchInvite","description":"Get all the invites for this Group DM Channel.","params":[{"name":"force","description":"Using API to fetch invites or cache","default":false,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":246,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"removeInvite","description":"Delete invites from this Group DM Channel.","params":[{"name":"invite","description":"Invite to add to the channel","type":[[["Invite"]]]}],"async":true,"returns":[[["Promise","<"],["PartialGroupDMChannel",">"]]],"meta":{"line":261,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"delete","description":"Leave this Group DM Channel.","examples":["// Delete the channel\nchannel.delete()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"slient","description":"Leave without notifying other members","default":false,"nullable":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":283,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"call","description":"Call this Group DMChannel. Return discordjs/voice VoiceConnection","params":[{"name":"options","description":"Options for the call","type":[[["CallOptions"]]]}],"returns":[[["Promise","<"],["VoiceConnection",">"]]],"meta":{"line":316,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"ring","description":"Ring the user's phone / PC (call)","params":[{"name":"recipients","description":"Array of recipients","type":[[["Array","<"],["UserResolvable",">"]]]}],"returns":[[["Promise","<"],["any",">"]]],"meta":{"line":363,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"sync","description":"Sync VoiceState of this Group DMChannel.","returns":[[["undefined"]]],"meta":{"line":377,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":17,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"PermissionOverwrites","description":"Represents a permission overwrite for a role or member in a guild channel.","extends":[[["Base"]]],"props":[{"name":"channel","description":"The GuildChannel this overwrite is for","readonly":true,"type":[[["GuildChannel"]]],"meta":{"line":17,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"id","description":"The overwrite's id, either a {@link User} or a {@link Role} id","type":[[["Snowflake"]]],"meta":{"line":33,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"type","description":"The type of this overwrite","type":[[["OverwriteType"]]],"meta":{"line":40,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"deny","description":"The permissions that are denied for the user or role.","type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":48,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"allow","description":"The permissions that are allowed for the user or role.","type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":56,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"edit","description":"Edits this Permission Overwrite.","examples":["// Update permission overwrites\npermissionOverwrites.edit({\n SEND_MESSAGES: false\n})\n .then(channel => console.log(channel.permissionOverwrites.get(message.author.id)))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the update","type":[[["PermissionOverwriteOptions"]]]},{"name":"reason","description":"Reason for creating/editing this overwrite","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["PermissionOverwrites",">"]]],"meta":{"line":73,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"delete","description":"Deletes this Permission Overwrite.","params":[{"name":"reason","description":"Reason for deleting this overwrite","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["PermissionOverwrites",">"]]],"meta":{"line":83,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"resolveOverwriteOptions","description":"Resolves bitfield permissions overwrites from an object.","scope":"static","params":[{"name":"options","description":"The options for the update","type":[[["PermissionOverwriteOptions"]]]},{"name":"initialPermissions","description":"The initial permissions","type":[[["ResolvedOverwriteOptions"]]]}],"returns":[[["ResolvedOverwriteOptions"]]],"meta":{"line":121,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"resolve","description":"Resolves an overwrite into {@link RawOverwriteData}.","scope":"static","params":[{"name":"overwrite","description":"The overwrite-like data to resolve","type":[[["OverwriteResolvable"]]]},{"name":"guild","description":"The guild to resolve from","optional":true,"type":[[["Guild"]]]}],"returns":[[["RawOverwriteData"]]],"meta":{"line":172,"file":"PermissionOverwrites.js","path":"src/structures"}}],"meta":{"line":13,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"Presence","description":"Represents a user's presence.","extends":[[["Base"]]],"props":[{"name":"userId","description":"The presence's user id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Presence.js","path":"src/structures"}},{"name":"guild","description":"The guild this presence is in","nullable":true,"type":[[["Guild"]]],"meta":{"line":57,"file":"Presence.js","path":"src/structures"}},{"name":"user","description":"The user of this presence","readonly":true,"nullable":true,"type":[[["User"]]],"meta":{"line":67,"file":"Presence.js","path":"src/structures"}},{"name":"member","description":"The member of this presence","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":76,"file":"Presence.js","path":"src/structures"}},{"name":"status","description":"The status of this presence","type":[[["PresenceStatus"]]],"meta":{"line":86,"file":"Presence.js","path":"src/structures"}},{"name":"activities","description":"The activities of this presence","type":[[["Array","<"],["Activity",">"]]],"meta":{"line":96,"file":"Presence.js","path":"src/structures"}},{"name":"clientStatus","description":"The devices this presence is on","nullable":true,"type":[[["Object"]]],"props":[{"name":"web","description":"The current presence in the web application","nullable":true,"type":[[["ClientPresenceStatus"]]]},{"name":"mobile","description":"The current presence in the mobile application","nullable":true,"type":[[["ClientPresenceStatus"]]]},{"name":"desktop","description":"The current presence in the desktop application","nullable":true,"type":[[["ClientPresenceStatus"]]]}],"meta":{"line":121,"file":"Presence.js","path":"src/structures"}},{"name":"lastModified","description":"The timestamp this presence was last updated","type":[[["number"]]],"meta":{"line":131,"file":"Presence.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"equals","description":"Whether this presence is equal to another.","params":[{"name":"presence","description":"The presence to compare with","type":[[["Presence"]]]}],"returns":[[["boolean"]]],"meta":{"line":148,"file":"Presence.js","path":"src/structures"}}],"meta":{"line":43,"file":"Presence.js","path":"src/structures"}},{"name":"Activity","description":"Represents an activity that is part of a user's presence.","props":[{"name":"presence","description":"The presence of the Activity","readonly":true,"type":[[["Presence"]]],"meta":{"line":179,"file":"Presence.js","path":"src/structures"}},{"name":"id","description":"The activity's id","type":[[["string"]]],"meta":{"line":191,"file":"Presence.js","path":"src/structures"}},{"name":"name","description":"The activity's name","type":[[["string"]]],"meta":{"line":197,"file":"Presence.js","path":"src/structures"}},{"name":"type","description":"The activity status's type","type":[[["ActivityType"]]],"meta":{"line":203,"file":"Presence.js","path":"src/structures"}},{"name":"url","description":"If the activity is being streamed, a link to the stream","nullable":true,"type":[[["string"]]],"meta":{"line":209,"file":"Presence.js","path":"src/structures"}},{"name":"details","description":"Details about the activity","nullable":true,"type":[[["string"]]],"meta":{"line":215,"file":"Presence.js","path":"src/structures"}},{"name":"state","description":"State of the activity","nullable":true,"type":[[["string"]]],"meta":{"line":221,"file":"Presence.js","path":"src/structures"}},{"name":"applicationId","description":"The id of the application associated with this activity","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":227,"file":"Presence.js","path":"src/structures"}},{"name":"timestamps","description":"Timestamps for the activity","nullable":true,"type":[[["ActivityTimestamps"]]],"meta":{"line":240,"file":"Presence.js","path":"src/structures"}},{"name":"syncId","description":"The Spotify song's id","nullable":true,"type":[[["string"]]],"meta":{"line":251,"file":"Presence.js","path":"src/structures"}},{"name":"platform","description":"The platform the game is being played on","nullable":true,"type":[[["ActivityPlatform"]]],"meta":{"line":257,"file":"Presence.js","path":"src/structures"}},{"name":"party","description":"Party of the activity","nullable":true,"type":[[["ActivityParty"]]],"meta":{"line":270,"file":"Presence.js","path":"src/structures"}},{"name":"assets","description":"Assets for rich presence","nullable":true,"type":[[["RichPresenceAssets"]]],"meta":{"line":276,"file":"Presence.js","path":"src/structures"}},{"name":"flags","description":"Flags that describe the activity","type":[[["Readonly","<"],["ActivityFlags",">"]]],"meta":{"line":282,"file":"Presence.js","path":"src/structures"}},{"name":"emoji","description":"Emoji for a custom activity","nullable":true,"type":[[["Emoji"]]],"meta":{"line":288,"file":"Presence.js","path":"src/structures"}},{"name":"sessionId","description":"The game's or Spotify session's id","nullable":true,"type":[[["string"]]],"meta":{"line":294,"file":"Presence.js","path":"src/structures"}},{"name":"buttons","description":"The labels of the buttons of this rich presence","type":[[["Array","<"],["string",">"]]],"meta":{"line":300,"file":"Presence.js","path":"src/structures"}},{"name":"createdTimestamp","description":"Creation date of the activity","type":[[["number"]]],"meta":{"line":306,"file":"Presence.js","path":"src/structures"}},{"name":"createdAt","description":"The time the activity was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":333,"file":"Presence.js","path":"src/structures"}}],"methods":[{"name":"equals","description":"Whether this activity is equal to another activity.","params":[{"name":"activity","description":"The activity to compare with","type":[[["Activity"]]]}],"returns":[[["boolean"]]],"meta":{"line":314,"file":"Presence.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the activities' name instead of the Activity object.","returns":[[["string"]]],"meta":{"line":341,"file":"Presence.js","path":"src/structures"}}],"meta":{"line":177,"file":"Presence.js","path":"src/structures"}},{"name":"RichPresenceAssets","description":"Assets for a rich presence","props":[{"name":"activity","description":"The activity of the RichPresenceAssets","readonly":true,"type":[[["Activity"]]],"meta":{"line":355,"file":"Presence.js","path":"src/structures"}},{"name":"largeText","description":"Hover text for the large image","nullable":true,"type":[[["string"]]],"meta":{"line":367,"file":"Presence.js","path":"src/structures"}},{"name":"smallText","description":"Hover text for the small image","nullable":true,"type":[[["string"]]],"meta":{"line":373,"file":"Presence.js","path":"src/structures"}},{"name":"largeImage","description":"The large image asset's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":379,"file":"Presence.js","path":"src/structures"}},{"name":"smallImage","description":"The small image asset's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":385,"file":"Presence.js","path":"src/structures"}}],"methods":[{"name":"smallImageURL","description":"Gets the URL of the small image asset","params":[{"name":"options","description":"Options for the image URL","optional":true,"type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":393,"file":"Presence.js","path":"src/structures"}},{"name":"largeImageURL","description":"Gets the URL of the large image asset","params":[{"name":"options","description":"Options for the image URL","optional":true,"type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":416,"file":"Presence.js","path":"src/structures"}}],"meta":{"line":353,"file":"Presence.js","path":"src/structures"}},{"name":"ReactionCollector","description":"Collects reactions on messages.\nWill automatically stop if the message ({@link Client#event:messageDelete messageDelete} or\n{@link Client#event:messageDeleteBulk messageDeleteBulk}),\nchannel ({@link Client#event:channelDelete channelDelete}),\nthread ({@link Client#event:threadDelete threadDelete}), or\nguild ({@link Client#event:guildDelete guildDelete}) is deleted.","extends":[[["Collector"]]],"construct":{"name":"ReactionCollector","params":[{"name":"message","description":"The message upon which to collect reactions","type":[[["Message"]]]},{"name":"options","description":"The options to apply to this collector","optional":true,"default":"{}","type":[[["ReactionCollectorOptions"]]]}]},"props":[{"name":"message","description":"The message upon which to collect reactions","type":[[["Message"]]],"meta":{"line":35,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"users","description":"The users that have reacted to this message","type":[[["Collection"]]],"meta":{"line":41,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"total","description":"The total number of reactions collected","type":[[["number"]]],"meta":{"line":47,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"endReason","description":"The reason this collector has ended with, or null if it hasn't ended yet","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":164,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this Collector","readonly":true,"type":[[["Client"]]],"meta":{"line":35,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"filter","description":"The filter applied to this collector","type":[[["CollectorFilter"]]],"meta":{"line":48,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"options","description":"The options of this collector","type":[[["CollectorOptions"]]],"meta":{"line":54,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"collected","description":"The items collected by this collector","type":[[["Collection"]]],"meta":{"line":60,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"ended","description":"Whether this collector has finished collecting","type":[[["boolean"]]],"meta":{"line":66,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_timeout","description":"Timeout for cleanup","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":73,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_idletimeout","description":"Timeout for cleanup due to inactivity","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":80,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"next","description":"Returns a promise that resolves with the next collected element;\nrejects with collected elements if the collector finishes without receiving a next element","readonly":true,"type":[[["Promise"]]],"meta":{"line":148,"file":"Collector.js","path":"src/structures/interfaces"}}],"methods":[{"name":"collect","description":"Handles an incoming reaction for possible collection.","access":"private","params":[{"name":"reaction","description":"The reaction to possibly collect","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that added the reaction","type":[[["User"]]]}],"returns":{"types":[[["Snowflake"]],[["string"]]],"nullable":true},"meta":{"line":110,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"dispose","description":"Handles a reaction deletion for possible disposal.","params":[{"name":"reaction","description":"The reaction to possibly dispose of","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that removed the reaction","type":[[["User"]]]}],"returns":{"types":[[["Snowflake"]],[["string"]]],"nullable":true},"meta":{"line":128,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"empty","description":"Empties this reaction collector.","meta":{"line":152,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"_handleMessageDeletion","description":"Handles checking if the message has been deleted, and if so, stops the collector with the reason 'messageDelete'.","access":"private","params":[{"name":"message","description":"The message that was deleted","type":[[["Message"]]]}],"returns":[[["void"]]],"meta":{"line":177,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"_handleChannelDeletion","description":"Handles checking if the channel has been deleted, and if so, stops the collector with the reason 'channelDelete'.","access":"private","params":[{"name":"channel","description":"The channel that was deleted","type":[[["GuildChannel"]]]}],"returns":[[["void"]]],"meta":{"line":189,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"_handleThreadDeletion","description":"Handles checking if the thread has been deleted, and if so, stops the collector with the reason 'threadDelete'.","access":"private","params":[{"name":"thread","description":"The thread that was deleted","type":[[["ThreadChannel"]]]}],"returns":[[["void"]]],"meta":{"line":201,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"_handleGuildDeletion","description":"Handles checking if the guild has been deleted, and if so, stops the collector with the reason 'guildDelete'.","access":"private","params":[{"name":"guild","description":"The guild that was deleted","type":[[["Guild"]]]}],"returns":[[["void"]]],"meta":{"line":213,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"handleCollect","description":"Call this to handle an event as a collectable element. Accepts any event data as parameters.","inherits":"Collector#handleCollect","inherited":true,"emits":["Collector#event:collect"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":99,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"handleDispose","description":"Call this to remove an element from the collection. Accepts any event data as parameters.","inherits":"Collector#handleDispose","inherited":true,"emits":["Collector#event:dispose"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":126,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"stop","description":"Stops this collector and emits the `end` event.","inherits":"Collector#stop","inherited":true,"emits":["Collector#event:end"],"params":[{"name":"reason","description":"The reason this collector is ending","optional":true,"default":"'user'","type":[[["string"]]]}],"meta":{"line":180,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"resetTimer","description":"Resets the collector's timeout and idle timer.","inherits":"Collector#resetTimer","inherited":true,"params":[{"name":"options","description":"Options for resetting","optional":true,"type":[[["CollectorResetTimerOptions"]]]}],"meta":{"line":213,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"checkEnd","description":"Checks whether the collector should end, and if so, ends it.","inherits":"Collector#checkEnd","inherited":true,"returns":{"types":[[["boolean"]]],"description":"Whether the collector ended or not"},"meta":{"line":228,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"key","description":"Gets the collector key for a reaction.","scope":"static","params":[{"name":"reaction","description":"The message reaction to get the key for","type":[[["MessageReaction"]]]}],"returns":[[["Snowflake"]],[["string"]]],"meta":{"line":224,"file":"ReactionCollector.js","path":"src/structures"}}],"events":[{"name":"create","description":"Emitted whenever a reaction is newly created on a message. Will emit only when a new reaction is\nadded to the message, as opposed to {@link Collector#collect} which will\nbe emitted even when a reaction has already been added to the message.","params":[{"name":"reaction","description":"The reaction that was added","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that added the reaction","type":[[["User"]]]}],"meta":{"line":82,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"collect","description":"Emitted whenever a reaction is collected.","params":[{"name":"reaction","description":"The reaction that was collected","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that added the reaction","type":[[["User"]]]}],"meta":{"line":111,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"dispose","description":"Emitted when the reaction had all the users removed and the `dispose` option is set to true.","params":[{"name":"reaction","description":"The reaction that was disposed of","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that removed the reaction","type":[[["User"]]]}],"meta":{"line":129,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"remove","description":"Emitted when the reaction had one user removed and the `dispose` option is set to true.","params":[{"name":"reaction","description":"The reaction that was removed","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that removed the reaction","type":[[["User"]]]}],"meta":{"line":137,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"end","description":"Emitted when the collector is finished collecting.","params":[{"name":"collected","description":"The elements collected by the collector","type":[[["Collection"]]]},{"name":"reason","description":"The reason the collector ended","type":[[["string"]]]}],"meta":{"line":193,"file":"Collector.js","path":"src/structures/interfaces"}}],"meta":{"line":23,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"ReactionEmoji","description":"Represents a limited emoji set used for both custom and unicode emojis. Custom emojis\nwill use this class opposed to the Emoji class when the client doesn't know enough\ninformation about them.","extends":[[["Emoji"]]],"props":[{"name":"reaction","description":"The message reaction this emoji refers to","type":[[["MessageReaction"]]],"meta":{"line":19,"file":"ReactionEmoji.js","path":"src/structures"}},{"name":"animated","description":"Whether or not the emoji is animated","nullable":true,"type":[[["boolean"]]],"meta":{"line":34,"file":"Emoji.js","path":"src/structures"}},{"name":"name","description":"The emoji's name","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Emoji.js","path":"src/structures"}},{"name":"id","description":"The emoji's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Emoji.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":54,"file":"Emoji.js","path":"src/structures"}},{"name":"identifier","description":"The identifier of this emoji, used for message reactions","readonly":true,"type":[[["string"]]],"meta":{"line":84,"file":"Emoji.js","path":"src/structures"}},{"name":"url","description":"The URL to the emoji file if it's a custom emoji","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":94,"file":"Emoji.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":103,"file":"Emoji.js","path":"src/structures"}},{"name":"createdAt","description":"The time the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":112,"file":"Emoji.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the text required to form a graphical emoji on Discord\ninstead of the Emoji object.","inherits":"Emoji#toString","inherited":true,"examples":["// Send a custom emoji from a guild:\nconst emoji = guild.emojis.cache.first();\nmsg.channel.send(`Hello! ${emoji}`);","// Send the emoji used in a reaction to the channel the reaction is part of\nreaction.message.channel.send(`The emoji used was: ${reaction.emoji}`);"],"returns":[[["string"]]],"meta":{"line":128,"file":"Emoji.js","path":"src/structures"}}],"meta":{"line":12,"file":"ReactionEmoji.js","path":"src/structures"}},{"name":"CustomStatus","construct":{"name":"CustomStatus","params":[{"name":"data","description":"CustomStatus to clone or raw data","optional":true,"default":"{}","type":[[["CustomStatus"]],[["CustomStatusOptions"]]]},{"name":"presence","description":"The presence this activity is part of","optional":true,"type":[[["Presence"]]]}]},"props":[{"name":"emoji","description":"The emoji to be displayed","nullable":true,"type":[[["EmojiIdentifierResolvable"]]],"meta":{"line":36,"file":"RichPresence.js","path":"src/structures"}},{"name":"state","description":"The state to be displayed","nullable":true,"type":[[["string"]]],"meta":{"line":42,"file":"RichPresence.js","path":"src/structures"}}],"methods":[{"name":"setup","description":"Sets the status from a JSON object","access":"private","params":[{"name":"data","description":"CustomStatus to clone or raw data","type":[[["CustomStatus"]],[["CustomStatusOptions"]]]}],"meta":{"line":50,"file":"RichPresence.js","path":"src/structures"}},{"name":"setEmoji","description":"Set the emoji of this activity","params":[{"name":"emoji","description":"The emoji to be displayed","type":[[["EmojiIdentifierResolvable"]]]}],"returns":[[["CustomStatus"]]],"meta":{"line":59,"file":"RichPresence.js","path":"src/structures"}},{"name":"setState","description":"Set state of this activity","params":[{"name":"state","description":"The state to be displayed","type":[[["string"]],[["null"]]]}],"returns":[[["CustomStatus"]]],"meta":{"line":68,"file":"RichPresence.js","path":"src/structures"}},{"name":"toJSON","description":"Returns an object that can be used to set the status","returns":[[["CustomStatus"]]],"meta":{"line":78,"file":"RichPresence.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the activities' name instead of the Activity object.","returns":[[["string"]]],"meta":{"line":92,"file":"RichPresence.js","path":"src/structures"}}],"meta":{"line":29,"file":"RichPresence.js","path":"src/structures"}},{"name":"RichPresence","construct":{"name":"RichPresence","params":[{"name":"client","description":"Discord client","optional":true,"type":[[["Client"]]]},{"name":"data","description":"RichPresence to clone or raw data","optional":true,"default":"{}","type":[[["RichPresence"]]]},{"name":"IPC","description":"Whether to use IPC (RPC for Discord Apps)","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"presence","description":"The presence this activity is part of","optional":true,"type":[[["Presence"]]]}]},"props":[{"name":"name","description":"The activity's name","type":[[["string"]]],"meta":{"line":115,"file":"RichPresence.js","path":"src/structures"}},{"name":"type","description":"The activity status's type","type":[[["ActivityType"]]],"meta":{"line":120,"file":"RichPresence.js","path":"src/structures"}},{"name":"url","description":"If the activity is being streamed, a link to the stream","nullable":true,"type":[[["string"]]],"meta":{"line":125,"file":"RichPresence.js","path":"src/structures"}},{"name":"application_id","description":"The id of the application associated with this activity","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":130,"file":"RichPresence.js","path":"src/structures"}},{"name":"state","description":"State of the activity","nullable":true,"type":[[["string"]]],"meta":{"line":135,"file":"RichPresence.js","path":"src/structures"}},{"name":"details","description":"Details about the activity","nullable":true,"type":[[["string"]]],"meta":{"line":140,"file":"RichPresence.js","path":"src/structures"}},{"name":"party","description":"Party of the activity","nullable":true,"type":[[["ActivityParty"]]],"meta":{"line":145,"file":"RichPresence.js","path":"src/structures"}},{"name":"timestamps","description":"Timestamps for the activity","nullable":true,"type":[[["ActivityTimestamps"]]],"meta":{"line":150,"file":"RichPresence.js","path":"src/structures"}},{"name":"assets","description":"Assets for rich presence","nullable":true,"type":[[["RichPresenceAssets"]]],"meta":{"line":155,"file":"RichPresence.js","path":"src/structures"}},{"name":"buttons","description":"The labels of the buttons of this rich presence","type":[[["Array","<"],["string",">"]]],"meta":{"line":160,"file":"RichPresence.js","path":"src/structures"}}],"methods":[{"name":"setup","description":"Sets the status from a JSON object","access":"private","params":[{"name":"data","description":"data","type":[[["RichPresence"]]]}],"meta":{"line":171,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAssetsLargeImage","description":"Set the large image of this activity","params":[{"name":"image","description":"The large image asset's id","nullable":true,"type":[[["any"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":191,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAssetsSmallImage","description":"Set the small image of this activity","params":[{"name":"image","description":"The small image asset's id","nullable":true,"type":[[["any"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":228,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAssetsLargeText","description":"Hover text for the large image","params":[{"name":"text","description":"Assets text","type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":265,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAssetsSmallText","description":"Hover text for the small image","params":[{"name":"text","description":"Assets text","type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":275,"file":"RichPresence.js","path":"src/structures"}},{"name":"setName","description":"Set the name of the activity","params":[{"name":"name","description":"The activity's name","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":285,"file":"RichPresence.js","path":"src/structures"}},{"name":"setURL","description":"If the activity is being streamed, a link to the stream","params":[{"name":"url","description":"URL of the stream","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":294,"file":"RichPresence.js","path":"src/structures"}},{"name":"setType","description":"The activity status's type","params":[{"name":"type","description":"The type of activity","nullable":true,"type":[[["ActivityTypes"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":305,"file":"RichPresence.js","path":"src/structures"}},{"name":"setApplicationId","description":"Set the application id of this activity","params":[{"name":"id","description":"Bot's id","nullable":true,"type":[[["Snowflake"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":316,"file":"RichPresence.js","path":"src/structures"}},{"name":"setState","description":"Set the state of the activity","params":[{"name":"state","description":"The state of the activity","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":325,"file":"RichPresence.js","path":"src/structures"}},{"name":"setDetails","description":"Set the details of the activity","params":[{"name":"details","description":"The details of the activity","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":334,"file":"RichPresence.js","path":"src/structures"}},{"name":"setParty","description":"Set the party of this activity","params":[{"name":"party","description":"The party to be displayed","nullable":true,"type":[[["RichParty"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":349,"file":"RichPresence.js","path":"src/structures"}},{"name":"setStartTimestamp","description":"Sets the start timestamp of the activity","params":[{"name":"timestamp","description":"The timestamp of the start of the activity","nullable":true,"type":[[["number"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":369,"file":"RichPresence.js","path":"src/structures"}},{"name":"setEndTimestamp","description":"Sets the end timestamp of the activity","params":[{"name":"timestamp","description":"The timestamp of the end of the activity","nullable":true,"type":[[["number"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":379,"file":"RichPresence.js","path":"src/structures"}},{"name":"setButtons","description":"Set the buttons of the rich presence","params":[{"name":"button","description":"A list of buttons to set","variable":true,"nullable":true,"type":[[["RichButton"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":394,"file":"RichPresence.js","path":"src/structures"}},{"name":"addButton","description":"Add a button to the rich presence","params":[{"name":"name","description":"The name of the button","type":[[["string"]]]},{"name":"url","description":"The url of the button","type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":423,"file":"RichPresence.js","path":"src/structures"}},{"name":"toJSON","description":"Convert the rich presence to a JSON object","returns":[[["Object"]]],"meta":{"line":443,"file":"RichPresence.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the activities' name instead of the Activity object.","returns":[[["string"]]],"meta":{"line":547,"file":"RichPresence.js","path":"src/structures"}},{"name":"getUUID","description":"Get random UUID string (Util)","scope":"static","returns":[[["string"]]],"meta":{"line":495,"file":"RichPresence.js","path":"src/structures"}},{"name":"getExternal","description":"Get Assets from a RichPresence (Util)","scope":"static","params":[{"name":"client","description":"Discord Client","type":[[["Client"]]]},{"name":"applicationId","description":"Application id","type":[[["Snowflake"]]]},{"name":"image1","description":"URL image 1 (not from Discord)","type":[[["string"]]]},{"name":"image2","description":"URL image 2 (not from Discord)","type":[[["string"]]]}],"async":true,"returns":[[["Array","<"],["ExternalAssets",">"]]],"meta":{"line":509,"file":"RichPresence.js","path":"src/structures"}}],"meta":{"line":108,"file":"RichPresence.js","path":"src/structures"}},{"name":"SpotifyRPC","extends":[[["RichPresence"]]],"construct":{"name":"SpotifyRPC","description":"Create a new RichPresence (Spotify style)","params":[{"name":"client","description":"Discord Client","type":[[["Client"]]]},{"name":"options","description":"Options for the Spotify RPC","type":[[["SpotifyRPC"]]]},{"name":"presence","description":"Presence","type":[[["Presence"]]]}]},"props":[{"name":"sync_id","description":"The Spotify song's id","nullable":true,"type":[[["string"]]],"meta":{"line":588,"file":"RichPresence.js","path":"src/structures"}},{"name":"id","description":"The activity's id","type":[[["string"]]],"meta":{"line":593,"file":"RichPresence.js","path":"src/structures"}},{"name":"flags","description":"Flags that describe the activity","type":[[["ActivityFlags"]]],"meta":{"line":598,"file":"RichPresence.js","path":"src/structures"}},{"name":"metadata","description":"Spotify metadata","type":[[["SpotifyMetadata"]]],"meta":{"line":610,"file":"RichPresence.js","path":"src/structures"}},{"name":"name","description":"The activity's name","type":[[["string"]]],"meta":{"line":115,"file":"RichPresence.js","path":"src/structures"}},{"name":"type","description":"The activity status's type","type":[[["ActivityType"]]],"meta":{"line":120,"file":"RichPresence.js","path":"src/structures"}},{"name":"url","description":"If the activity is being streamed, a link to the stream","nullable":true,"type":[[["string"]]],"meta":{"line":125,"file":"RichPresence.js","path":"src/structures"}},{"name":"application_id","description":"The id of the application associated with this activity","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":130,"file":"RichPresence.js","path":"src/structures"}},{"name":"state","description":"State of the activity","nullable":true,"type":[[["string"]]],"meta":{"line":135,"file":"RichPresence.js","path":"src/structures"}},{"name":"details","description":"Details about the activity","nullable":true,"type":[[["string"]]],"meta":{"line":140,"file":"RichPresence.js","path":"src/structures"}},{"name":"party","description":"Party of the activity","nullable":true,"type":[[["ActivityParty"]]],"meta":{"line":145,"file":"RichPresence.js","path":"src/structures"}},{"name":"timestamps","description":"Timestamps for the activity","nullable":true,"type":[[["ActivityTimestamps"]]],"meta":{"line":150,"file":"RichPresence.js","path":"src/structures"}},{"name":"assets","description":"Assets for rich presence","nullable":true,"type":[[["RichPresenceAssets"]]],"meta":{"line":155,"file":"RichPresence.js","path":"src/structures"}},{"name":"buttons","description":"The labels of the buttons of this rich presence","type":[[["Array","<"],["string",">"]]],"meta":{"line":160,"file":"RichPresence.js","path":"src/structures"}}],"methods":[{"name":"setup","description":"Sets the status from a JSON object","access":"private","params":[{"name":"options","description":"data","type":[[["SpotifyRPC"]]]}],"meta":{"line":576,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAssetsLargeImage","description":"Set the large image of this activity","params":[{"name":"image","description":"Spotify song's image ID","nullable":true,"type":[[["string"]]]}],"returns":[[["SpotifyRPC"]]],"meta":{"line":622,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAssetsSmallImage","description":"Set the small image of this activity","params":[{"name":"image","description":"Spotify song's image ID","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":633,"file":"RichPresence.js","path":"src/structures"}},{"name":"setSongId","description":"Set Spotify song id to sync with","params":[{"name":"id","description":"Song id","type":[[["string"]]]}],"returns":[[["SpotifyRPC"]]],"meta":{"line":644,"file":"RichPresence.js","path":"src/structures"}},{"name":"addArtistId","description":"Add the artist id","params":[{"name":"id","description":"Artist id","type":[[["string"]]]}],"returns":[[["SpotifyRPC"]]],"meta":{"line":654,"file":"RichPresence.js","path":"src/structures"}},{"name":"setArtistIds","description":"Set the artist ids","params":[{"name":"ids","description":"Artist ids","variable":true,"type":[[["string"]],[["Array","<"],["string",">"]]]}],"returns":[[["SpotifyRPC"]]],"meta":{"line":665,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAlbumId","description":"Set the album id","params":[{"name":"id","description":"Album id","type":[[["string"]]]}],"returns":[[["SpotifyRPC"]]],"meta":{"line":680,"file":"RichPresence.js","path":"src/structures"}},{"name":"toJSON","description":"Convert the rich presence to a JSON object","returns":[[["SpotifyRPC"]]],"meta":{"line":690,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAssetsLargeText","description":"Hover text for the large image","inherits":"RichPresence#setAssetsLargeText","inherited":true,"params":[{"name":"text","description":"Assets text","type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":265,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAssetsSmallText","description":"Hover text for the small image","inherits":"RichPresence#setAssetsSmallText","inherited":true,"params":[{"name":"text","description":"Assets text","type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":275,"file":"RichPresence.js","path":"src/structures"}},{"name":"setName","description":"Set the name of the activity","inherits":"RichPresence#setName","inherited":true,"params":[{"name":"name","description":"The activity's name","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":285,"file":"RichPresence.js","path":"src/structures"}},{"name":"setURL","description":"If the activity is being streamed, a link to the stream","inherits":"RichPresence#setURL","inherited":true,"params":[{"name":"url","description":"URL of the stream","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":294,"file":"RichPresence.js","path":"src/structures"}},{"name":"setType","description":"The activity status's type","inherits":"RichPresence#setType","inherited":true,"params":[{"name":"type","description":"The type of activity","nullable":true,"type":[[["ActivityTypes"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":305,"file":"RichPresence.js","path":"src/structures"}},{"name":"setApplicationId","description":"Set the application id of this activity","inherits":"RichPresence#setApplicationId","inherited":true,"params":[{"name":"id","description":"Bot's id","nullable":true,"type":[[["Snowflake"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":316,"file":"RichPresence.js","path":"src/structures"}},{"name":"setState","description":"Set the state of the activity","inherits":"RichPresence#setState","inherited":true,"params":[{"name":"state","description":"The state of the activity","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":325,"file":"RichPresence.js","path":"src/structures"}},{"name":"setDetails","description":"Set the details of the activity","inherits":"RichPresence#setDetails","inherited":true,"params":[{"name":"details","description":"The details of the activity","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":334,"file":"RichPresence.js","path":"src/structures"}},{"name":"setParty","description":"Set the party of this activity","inherits":"RichPresence#setParty","inherited":true,"params":[{"name":"party","description":"The party to be displayed","nullable":true,"type":[[["RichParty"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":349,"file":"RichPresence.js","path":"src/structures"}},{"name":"setStartTimestamp","description":"Sets the start timestamp of the activity","inherits":"RichPresence#setStartTimestamp","inherited":true,"params":[{"name":"timestamp","description":"The timestamp of the start of the activity","nullable":true,"type":[[["number"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":369,"file":"RichPresence.js","path":"src/structures"}},{"name":"setEndTimestamp","description":"Sets the end timestamp of the activity","inherits":"RichPresence#setEndTimestamp","inherited":true,"params":[{"name":"timestamp","description":"The timestamp of the end of the activity","nullable":true,"type":[[["number"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":379,"file":"RichPresence.js","path":"src/structures"}},{"name":"setButtons","description":"Set the buttons of the rich presence","inherits":"RichPresence#setButtons","inherited":true,"params":[{"name":"button","description":"A list of buttons to set","variable":true,"nullable":true,"type":[[["RichButton"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":394,"file":"RichPresence.js","path":"src/structures"}},{"name":"addButton","description":"Add a button to the rich presence","inherits":"RichPresence#addButton","inherited":true,"params":[{"name":"name","description":"The name of the button","type":[[["string"]]]},{"name":"url","description":"The url of the button","type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":423,"file":"RichPresence.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the activities' name instead of the Activity object.","inherits":"RichPresence#toString","inherited":true,"returns":[[["string"]]],"meta":{"line":547,"file":"RichPresence.js","path":"src/structures"}}],"meta":{"line":559,"file":"RichPresence.js","path":"src/structures"}},{"name":"Role","description":"Represents a role on Discord.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild that the role belongs to","type":[[["Guild"]]],"meta":{"line":32,"file":"Role.js","path":"src/structures"}},{"name":"icon","description":"The icon hash of the role","nullable":true,"type":[[["string"]]],"meta":{"line":38,"file":"Role.js","path":"src/structures"}},{"name":"unicodeEmoji","description":"The unicode emoji for the role","nullable":true,"type":[[["string"]]],"meta":{"line":44,"file":"Role.js","path":"src/structures"}},{"name":"id","description":"The role's id (unique to the guild it is part of)","type":[[["Snowflake"]]],"meta":{"line":54,"file":"Role.js","path":"src/structures"}},{"name":"name","description":"The name of the role","type":[[["string"]]],"meta":{"line":60,"file":"Role.js","path":"src/structures"}},{"name":"color","description":"The base 10 color of the role","type":[[["number"]]],"meta":{"line":68,"file":"Role.js","path":"src/structures"}},{"name":"hoist","description":"If true, users that are part of this role will appear in a separate category in the users list","type":[[["boolean"]]],"meta":{"line":76,"file":"Role.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the role from the API","type":[[["number"]]],"meta":{"line":84,"file":"Role.js","path":"src/structures"}},{"name":"permissions","description":"The permissions of the role","type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":92,"file":"Role.js","path":"src/structures"}},{"name":"managed","description":"Whether or not the role is managed by an external service","type":[[["boolean"]]],"meta":{"line":100,"file":"Role.js","path":"src/structures"}},{"name":"mentionable","description":"Whether or not the role can be mentioned by anyone","type":[[["boolean"]]],"meta":{"line":108,"file":"Role.js","path":"src/structures"}},{"name":"tags","description":"The tags this role has","nullable":true,"type":[[["Object"]]],"props":[{"name":"botId","description":"The id of the bot this role belongs to","optional":true,"type":[[["Snowflake"]]]},{"name":"integrationId","description":"The id of the integration this role belongs to","optional":true,"type":[[["Snowflake"]],[["string"]]]},{"name":"premiumSubscriberRole","description":"Whether this is the guild's premium subscription role","optional":true,"type":[[["true"]]]},{"name":"subscriptionListingId","description":"The id of this role's subscription SKU and listing","optional":true,"type":[[["Snowflake"]]]},{"name":"availableForPurchase","description":"Whether this role is available for purchase","optional":true,"type":[[["true"]]]},{"name":"guildConnections","description":"Whether this role is a guild's linked role","optional":true,"type":[[["true"]]]}],"meta":{"line":125,"file":"Role.js","path":"src/structures"}},{"name":"flags","description":"The flags of this role","type":[[["Readonly","<"],["RoleFlags",">"]]],"meta":{"line":152,"file":"Role.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the role was created at","readonly":true,"type":[[["number"]]],"meta":{"line":163,"file":"Role.js","path":"src/structures"}},{"name":"createdAt","description":"The time the role was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":172,"file":"Role.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the role has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":181,"file":"Role.js","path":"src/structures"}},{"name":"hexColor","description":"The hexadecimal version of the role color, with a leading hashtag","readonly":true,"type":[[["string"]]],"meta":{"line":211,"file":"Role.js","path":"src/structures"}},{"name":"members","description":"The cached guild members that have this role","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":220,"file":"Role.js","path":"src/structures"}},{"name":"editable","description":"Whether the role is editable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":229,"file":"Role.js","path":"src/structures"}},{"name":"position","description":"The position of the role in the role manager","readonly":true,"type":[[["number"]]],"meta":{"line":241,"file":"Role.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"comparePositionTo","description":"Compares this role's position to another role's.","examples":["// Compare the position of a role to another\nconst roleCompare = role.comparePositionTo(otherRole);\nif (roleCompare >= 1) console.log(`${role.name} is higher than ${otherRole.name}`);"],"params":[{"name":"role","description":"Role to compare to this one","type":[[["RoleResolvable"]]]}],"returns":{"types":[[["number"]]],"description":"Negative number if this role's position is lower (other role's is higher),\npositive number if this one is higher (other's is lower), 0 if equal"},"meta":{"line":261,"file":"Role.js","path":"src/structures"}},{"name":"edit","description":"Edits the role.","examples":["// Edit a role\nrole.edit({ name: 'new role' })\n .then(updated => console.log(`Edited role name to ${updated.name}`))\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the role","type":[[["RoleData"]]]},{"name":"reason","description":"Reason for editing this role","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":291,"file":"Role.js","path":"src/structures"}},{"name":"permissionsIn","description":"Returns `channel.permissionsFor(role)`. Returns permissions for a role in a guild channel,\ntaking into account permission overwrites.","params":[{"name":"channel","description":"The guild channel to use as context","type":[[["GuildChannel"]],[["Snowflake"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":302,"file":"Role.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the role.","examples":["// Set the name of the role\nrole.setName('new role')\n .then(updated => console.log(`Updated role name to ${updated.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name of the role","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the role's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":319,"file":"Role.js","path":"src/structures"}},{"name":"setColor","description":"Sets a new color for the role.","examples":["// Set the color of a role\nrole.setColor('#FF0000')\n .then(updated => console.log(`Set color of role to ${updated.color}`))\n .catch(console.error);"],"params":[{"name":"color","description":"The color of the role","type":[[["ColorResolvable"]]]},{"name":"reason","description":"Reason for changing the role's color","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":334,"file":"Role.js","path":"src/structures"}},{"name":"setHoist","description":"Sets whether or not the role should be hoisted.","examples":["// Set the hoist of the role\nrole.setHoist(true)\n .then(updated => console.log(`Role hoisted: ${updated.hoist}`))\n .catch(console.error);"],"params":[{"name":"hoist","description":"Whether or not to hoist the role","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for setting whether or not the role should be hoisted","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":349,"file":"Role.js","path":"src/structures"}},{"name":"setPermissions","description":"Sets the permissions of the role.","examples":["// Set the permissions of the role\nrole.setPermissions([Permissions.FLAGS.KICK_MEMBERS, Permissions.FLAGS.BAN_MEMBERS])\n .then(updated => console.log(`Updated permissions to ${updated.permissions.bitfield}`))\n .catch(console.error);","// Remove all permissions from a role\nrole.setPermissions(0n)\n .then(updated => console.log(`Updated permissions to ${updated.permissions.bitfield}`))\n .catch(console.error);"],"params":[{"name":"permissions","description":"The permissions of the role","type":[[["PermissionResolvable"]]]},{"name":"reason","description":"Reason for changing the role's permissions","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":369,"file":"Role.js","path":"src/structures"}},{"name":"setMentionable","description":"Sets whether this role is mentionable.","examples":["// Make the role mentionable\nrole.setMentionable(true)\n .then(updated => console.log(`Role updated ${updated.name}`))\n .catch(console.error);"],"params":[{"name":"mentionable","description":"Whether this role should be mentionable","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for setting whether or not this role should be mentionable","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":384,"file":"Role.js","path":"src/structures"}},{"name":"setIcon","description":"Sets a new icon for the role.","params":[{"name":"icon","description":"The icon for the role\nThe `EmojiResolvable` should belong to the same guild as the role.\nIf not, pass the emoji's URL directly","nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]],[["EmojiResolvable"]]]},{"name":"reason","description":"Reason for changing the role's icon","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":396,"file":"Role.js","path":"src/structures"}},{"name":"setUnicodeEmoji","description":"Sets a new unicode emoji for the role.","examples":["// Set a new unicode emoji for the role\nrole.setUnicodeEmoji('🤖')\n .then(updated => console.log(`Set unicode emoji for the role to ${updated.unicodeEmoji}`))\n .catch(console.error);"],"params":[{"name":"unicodeEmoji","description":"The new unicode emoji for the role","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the role's unicode emoji","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":411,"file":"Role.js","path":"src/structures"}},{"name":"setPosition","description":"Sets the new position of the role.","examples":["// Set the position of the role\nrole.setPosition(1)\n .then(updated => console.log(`Role position: ${updated.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the role","type":[[["number"]]]},{"name":"options","description":"Options for setting the position","optional":true,"type":[[["SetRolePositionOptions"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":433,"file":"Role.js","path":"src/structures"}},{"name":"delete","description":"Deletes the role.","examples":["// Delete a role\nrole.delete('The role needed to go')\n .then(deleted => console.log(`Deleted role ${deleted.name}`))\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this role","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":447,"file":"Role.js","path":"src/structures"}},{"name":"iconURL","description":"A link to the role's icon","params":[{"name":"options","description":"Options for the image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":457,"file":"Role.js","path":"src/structures"}},{"name":"equals","description":"Whether this role equals another role. It compares all properties, so for most operations\nit is advisable to just compare `role.id === role2.id` as it is much faster and is often\nwhat most users need.","params":[{"name":"role","description":"Role to compare with","type":[[["Role"]]]}],"returns":[[["boolean"]]],"meta":{"line":469,"file":"Role.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the role's mention instead of the Role object.","examples":["// Logs: Role: <@&123456789012345678>\nconsole.log(`Role: ${role}`);"],"returns":[[["string"]]],"meta":{"line":491,"file":"Role.js","path":"src/structures"}},{"name":"comparePositions","description":"Compares the positions of two roles.","scope":"static","deprecated":"Use {@link RoleManager#comparePositions} instead.","params":[{"name":"role1","description":"First role to compare","type":[[["Role"]]]},{"name":"role2","description":"Second role to compare","type":[[["Role"]]]}],"returns":{"types":[[["number"]]],"description":"Negative number if the first role's position is lower (second role's is higher),\npositive number if the first's is higher (second's is lower), 0 if equal"},"meta":{"line":511,"file":"Role.js","path":"src/structures"}}],"meta":{"line":24,"file":"Role.js","path":"src/structures"}},{"name":"SelectMenuInteraction","description":"Represents any select menu interaction.","extends":[[["MessageComponentInteraction"]]],"props":[{"name":"values","description":"The values selected, if the component which was interacted with was a select menu","type":[[["Array","<"],["string",">"]]],"meta":{"line":19,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":17,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"message","description":"The message to which the component was attached","type":[[["Message"]],[["APIMessage"]]],"meta":{"line":27,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"customId","description":"The custom id of the component which was interacted with","type":[[["string"]]],"meta":{"line":33,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"componentType","description":"The type of component which was interacted with","type":[[["string"]]],"meta":{"line":39,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":45,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":57,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":63,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"component","description":"The component which was interacted with","readonly":true,"type":[[["MessageActionRowComponent"]],[["APIMessageActionRowComponent"]]],"meta":{"line":78,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"MessageComponentInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"MessageComponentInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"MessageComponentInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"MessageComponentInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"MessageComponentInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"MessageComponentInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","inherits":"MessageComponentInteraction#deferUpdate","inherited":true,"implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","inherits":"MessageComponentInteraction#update","inherited":true,"implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"MessageComponentInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"MessageComponentInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":11,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"ChannelSelectInteraction","description":"Represents a CHANNEL_SELECT interaction.","extends":[[["SelectMenuInteraction"]]],"props":[{"name":"channels","description":"Collection of the selected channels","type":[[["Collection","<"],["Snowflake",", ("],["Channel","|"],["APIChannel",")>"]]],"meta":{"line":39,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"values","description":"The values selected, if the component which was interacted with was a select menu","type":[[["Array","<"],["string",">"]]],"meta":{"line":19,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":17,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"message","description":"The message to which the component was attached","type":[[["Message"]],[["APIMessage"]]],"meta":{"line":27,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"customId","description":"The custom id of the component which was interacted with","type":[[["string"]]],"meta":{"line":33,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"componentType","description":"The type of component which was interacted with","type":[[["string"]]],"meta":{"line":39,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":45,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":57,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":63,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"component","description":"The component which was interacted with","readonly":true,"type":[[["MessageActionRowComponent"]],[["APIMessageActionRowComponent"]]],"meta":{"line":78,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"MessageComponentInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"MessageComponentInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"MessageComponentInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"MessageComponentInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"MessageComponentInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"MessageComponentInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","inherits":"MessageComponentInteraction#deferUpdate","inherited":true,"implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","inherits":"MessageComponentInteraction#update","inherited":true,"implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"MessageComponentInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"MessageComponentInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":29,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"RoleSelectInteraction","description":"Represents a ROLE_SELECT interaction.","extends":[[["SelectMenuInteraction"]]],"props":[{"name":"roles","description":"Collection of the selected roles","type":[[["Collection","<"],["Snowflake",", ("],["Role","|"],["APIRole",")>"]]],"meta":{"line":62,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"values","description":"The values selected, if the component which was interacted with was a select menu","type":[[["Array","<"],["string",">"]]],"meta":{"line":19,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":17,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"message","description":"The message to which the component was attached","type":[[["Message"]],[["APIMessage"]]],"meta":{"line":27,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"customId","description":"The custom id of the component which was interacted with","type":[[["string"]]],"meta":{"line":33,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"componentType","description":"The type of component which was interacted with","type":[[["string"]]],"meta":{"line":39,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":45,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":57,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":63,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"component","description":"The component which was interacted with","readonly":true,"type":[[["MessageActionRowComponent"]],[["APIMessageActionRowComponent"]]],"meta":{"line":78,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"MessageComponentInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"MessageComponentInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"MessageComponentInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"MessageComponentInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"MessageComponentInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"MessageComponentInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","inherits":"MessageComponentInteraction#deferUpdate","inherited":true,"implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","inherits":"MessageComponentInteraction#update","inherited":true,"implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"MessageComponentInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"MessageComponentInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":52,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"UserSelectInteraction","description":"Represents a USER_SELECT interaction.","extends":[[["SelectMenuInteraction"]]],"props":[{"name":"users","description":"Collection of the selected users","type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":85,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"members","description":"Collection of the selected members","type":[[["Collection","<"],["Snowflake",", ("],["GuildMember","|"],["APIGuildMember",")>"]]],"meta":{"line":95,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"values","description":"The values selected, if the component which was interacted with was a select menu","type":[[["Array","<"],["string",">"]]],"meta":{"line":19,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":17,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"message","description":"The message to which the component was attached","type":[[["Message"]],[["APIMessage"]]],"meta":{"line":27,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"customId","description":"The custom id of the component which was interacted with","type":[[["string"]]],"meta":{"line":33,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"componentType","description":"The type of component which was interacted with","type":[[["string"]]],"meta":{"line":39,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":45,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":57,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":63,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"component","description":"The component which was interacted with","readonly":true,"type":[[["MessageActionRowComponent"]],[["APIMessageActionRowComponent"]]],"meta":{"line":78,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"MessageComponentInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"MessageComponentInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"MessageComponentInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"MessageComponentInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"MessageComponentInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"MessageComponentInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","inherits":"MessageComponentInteraction#deferUpdate","inherited":true,"implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","inherits":"MessageComponentInteraction#update","inherited":true,"implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"MessageComponentInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"MessageComponentInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":75,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"MentionableSelectInteraction","description":"Represents a MENTIONABLE_SELECT interaction.","extends":[[["SelectMenuInteraction"]]],"props":[{"name":"channels","description":"Collection of the selected channels","type":[[["Collection","<"],["Snowflake",", ("],["Channel","|"],["APIChannel",")>"]]],"meta":{"line":125,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"members","description":"Collection of the selected members","type":[[["Collection","<"],["Snowflake",", ("],["GuildMember","|"],["APIGuildMember",")>"]]],"meta":{"line":136,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"roles","description":"Collection of the selected roles","type":[[["Collection","<"],["Snowflake",", ("],["Role","|"],["APIRole",")>"]]],"meta":{"line":152,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"users","description":"Collection of the selected users","type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":163,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"values","description":"The values selected, if the component which was interacted with was a select menu","type":[[["Array","<"],["string",">"]]],"meta":{"line":19,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":17,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"message","description":"The message to which the component was attached","type":[[["Message"]],[["APIMessage"]]],"meta":{"line":27,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"customId","description":"The custom id of the component which was interacted with","type":[[["string"]]],"meta":{"line":33,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"componentType","description":"The type of component which was interacted with","type":[[["string"]]],"meta":{"line":39,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":45,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":57,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":63,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"component","description":"The component which was interacted with","readonly":true,"type":[[["MessageActionRowComponent"]],[["APIMessageActionRowComponent"]]],"meta":{"line":78,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"MessageComponentInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"MessageComponentInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"MessageComponentInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"MessageComponentInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"MessageComponentInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"MessageComponentInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","inherits":"MessageComponentInteraction#deferUpdate","inherited":true,"implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","inherits":"MessageComponentInteraction#update","inherited":true,"implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"MessageComponentInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"MessageComponentInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":114,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"Session","description":"Represents a Client OAuth2 Application Team.","extends":[[["Base"]]],"props":[{"name":"id","description":"The session hash id","type":[[["string"]]],"meta":{"line":28,"file":"Session.js","path":"src/structures"}},{"name":"clientInfo","description":"The client info","type":[[["SessionClientInfo"]]],"meta":{"line":38,"file":"Session.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the client was last used at.","readonly":true,"type":[[["number"]]],"meta":{"line":47,"file":"Session.js","path":"src/structures"}},{"name":"createdAt","description":"The time the client was last used at.","readonly":true,"type":[[["Date"]]],"meta":{"line":56,"file":"Session.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"logout","description":"Logout the client (remote).","params":[{"name":"mfaCode","description":"MFA code (if 2FA is enabled)","type":[[["string"]],[["null"]]]}],"returns":[[["Promise","<"],["undefined",">"]]],"meta":{"line":65,"file":"Session.js","path":"src/structures"}}],"meta":{"line":16,"file":"Session.js","path":"src/structures"}},{"name":"StageChannel","description":"Represents a guild stage channel on Discord.","extends":[[["BaseGuildVoiceChannel"]]],"props":[{"name":"topic","description":"The topic of the stage channel","nullable":true,"type":[[["string"]]],"meta":{"line":18,"file":"StageChannel.js","path":"src/structures"}},{"name":"stageInstance","description":"The stage instance of this stage channel, if it exists","readonly":true,"nullable":true,"type":[[["StageInstance"]]],"meta":{"line":27,"file":"StageChannel.js","path":"src/structures"}},{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":23,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":29,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":35,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"bitrate","description":"The bitrate of this voice-based channel","type":[[["number"]]],"meta":{"line":48,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"rtcRegion","description":"The RTC region for this voice-based channel. This region is automatically selected if `null`.","nullable":true,"type":[[["string"]]],"meta":{"line":56,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"userLimit","description":"The maximum amount of users allowed in this channel.","type":[[["number"]]],"meta":{"line":64,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"videoQualityMode","description":"The camera video quality mode of the channel.","nullable":true,"type":[[["VideoQualityMode"]]],"meta":{"line":72,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in the channel, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":82,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for this channel in seconds","type":[[["number"]]],"meta":{"line":94,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"members","description":"The members in this voice-based channel","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":107,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"full","description":"Checks if the voice-based channel is full","readonly":true,"type":[[["boolean"]]],"meta":{"line":122,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"joinable","description":"Whether the channel is joinable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":131,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"createStageInstance","description":"Creates a stage instance associated with this stage channel.","params":[{"name":"options","description":"The options to create the stage instance","type":[[["StageInstanceCreateOptions"]]]}],"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":36,"file":"StageChannel.js","path":"src/structures"}},{"name":"setTopic","description":"Sets a new topic for the guild channel.","examples":["// Set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.error);"],"params":[{"name":"topic","description":"The new topic for the guild channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's topic","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":51,"file":"StageChannel.js","path":"src/structures"}},{"name":"createInvite","description":"Creates an invite to this guild channel.","inherits":"BaseGuildVoiceChannel#createInvite","inherited":true,"examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":155,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","inherits":"BaseGuildVoiceChannel#fetchInvites","inherited":true,"params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":165,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setBitrate","description":"Sets the bitrate of the channel.","inherits":"BaseGuildVoiceChannel#setBitrate","inherited":true,"examples":["// Set the bitrate of a voice channel\nvoiceChannel.setBitrate(48_000)\n .then(vc => console.log(`Set bitrate to ${vc.bitrate}bps for ${vc.name}`))\n .catch(console.error);"],"params":[{"name":"bitrate","description":"The new bitrate","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's bitrate","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":180,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setRTCRegion","description":"Sets the RTC region of the channel.","inherits":"BaseGuildVoiceChannel#setRTCRegion","inherited":true,"examples":["// Set the RTC region to sydney\nchannel.setRTCRegion('sydney');","// Remove a fixed region for this channel - let Discord decide automatically\nchannel.setRTCRegion(null, 'We want to let Discord decide.');"],"params":[{"name":"rtcRegion","description":"The new region of the channel. Set to `null` to remove a specific region for the channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"The reason for modifying this region.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["BaseGuildVoiceChannel",">"]]],"meta":{"line":196,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setUserLimit","description":"Sets the user limit of the channel.","inherits":"BaseGuildVoiceChannel#setUserLimit","inherited":true,"examples":["// Set the user limit of a voice channel\nvoiceChannel.setUserLimit(42)\n .then(vc => console.log(`Set user limit to ${vc.userLimit} for ${vc.name}`))\n .catch(console.error);"],"params":[{"name":"userLimit","description":"The new user limit","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the user limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":211,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setVideoQualityMode","description":"Sets the camera video quality mode of the channel.","inherits":"BaseGuildVoiceChannel#setVideoQualityMode","inherited":true,"params":[{"name":"videoQualityMode","description":"The new camera video quality mode.","type":[[["VideoQualityMode"]],[["number"]]]},{"name":"reason","description":"Reason for changing the camera video quality mode.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":221,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","inherits":"BaseGuildVoiceChannel#send","inherited":true,"implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","inherits":"BaseGuildVoiceChannel#sendTyping","inherited":true,"implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","inherits":"BaseGuildVoiceChannel#createMessageCollector","inherited":true,"implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","inherits":"BaseGuildVoiceChannel#awaitMessages","inherited":true,"implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","inherits":"BaseGuildVoiceChannel#createMessageComponentCollector","inherited":true,"implements":["TextBasedChannel#createMessageComponentCollector"],"examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseGuildVoiceChannel#awaitMessageComponent","inherited":true,"implements":["TextBasedChannel#awaitMessageComponent"],"examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"bulkDelete","description":"Bulk deletes given messages that are newer than two weeks.","inherits":"BaseGuildVoiceChannel#bulkDelete","inherited":true,"implements":["TextBasedChannel#bulkDelete"],"examples":["// Bulk delete messages\nchannel.bulkDelete(5)\n .then(messages => console.log(`Bulk deleted ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"messages","description":"Messages or number of messages to delete","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]],[["Array","<"],["MessageResolvable",">"]],[["number"]]]},{"name":"filterOld","description":"Filter messages to remove those which are older than two weeks automatically","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Collection","<"],["Snowflake",", ("],["Message","|"],["undefined",")>>"]]],"description":"Returns the deleted messages"},"meta":{"line":319,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","inherits":"BaseGuildVoiceChannel#fetchWebhooks","inherited":true,"implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":368,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","inherits":"BaseGuildVoiceChannel#createWebhook","inherited":true,"implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":393,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","inherits":"BaseGuildVoiceChannel#setRateLimitPerUser","inherited":true,"implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":403,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","inherits":"BaseGuildVoiceChannel#setNSFW","inherited":true,"implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":413,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":9,"file":"StageChannel.js","path":"src/structures"}},{"name":"StageInstance","description":"Represents a stage instance.","extends":[[["Base"]]],"props":[{"name":"id","description":"The stage instance's id","type":[[["Snowflake"]]],"meta":{"line":28,"file":"StageInstance.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild associated with the stage channel","type":[[["Snowflake"]]],"meta":{"line":39,"file":"StageInstance.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel associated with the stage channel","type":[[["Snowflake"]]],"meta":{"line":47,"file":"StageInstance.js","path":"src/structures"}},{"name":"topic","description":"The topic of the stage instance","type":[[["string"]]],"meta":{"line":55,"file":"StageInstance.js","path":"src/structures"}},{"name":"privacyLevel","description":"The privacy level of the stage instance","type":[[["PrivacyLevel"]]],"meta":{"line":63,"file":"StageInstance.js","path":"src/structures"}},{"name":"discoverableDisabled","description":"Whether or not stage discovery is disabled","nullable":true,"type":[[["boolean"]]],"meta":{"line":71,"file":"StageInstance.js","path":"src/structures"}},{"name":"guildScheduledEventId","description":"The associated guild scheduled event id of this stage instance","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":81,"file":"StageInstance.js","path":"src/structures"}},{"name":"channel","description":"The stage channel associated with this stage instance","readonly":true,"nullable":true,"type":[[["StageChannel"]]],"meta":{"line":92,"file":"StageInstance.js","path":"src/structures"}},{"name":"guildScheduledEvent","description":"The associated guild scheduled event of this stage instance","readonly":true,"nullable":true,"type":[[["GuildScheduledEvent"]]],"meta":{"line":101,"file":"StageInstance.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the stage instance has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":110,"file":"StageInstance.js","path":"src/structures"}},{"name":"guild","description":"The guild this stage instance belongs to","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":140,"file":"StageInstance.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this stage instances was created at","readonly":true,"type":[[["number"]]],"meta":{"line":193,"file":"StageInstance.js","path":"src/structures"}},{"name":"createdAt","description":"The time this stage instance was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":202,"file":"StageInstance.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"edit","description":"Edits this stage instance.","examples":["// Edit a stage instance\nstageInstance.edit({ topic: 'new topic' })\n .then(stageInstance => console.log(stageInstance))\n .catch(console.error)"],"params":[{"name":"options","description":"The options to edit the stage instance","type":[[["StageInstanceEditOptions"]]]}],"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":154,"file":"StageInstance.js","path":"src/structures"}},{"name":"delete","description":"Deletes this stage instance.","examples":["// Delete a stage instance\nstageInstance.delete()\n .then(stageInstance => console.log(stageInstance))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":167,"file":"StageInstance.js","path":"src/structures"}},{"name":"setTopic","description":"Sets the topic of this stage instance.","examples":["// Set topic of a stage instance\nstageInstance.setTopic('new topic')\n .then(stageInstance => console.log(`Set the topic to: ${stageInstance.topic}`))\n .catch(console.error);"],"params":[{"name":"topic","description":"The topic for the stage instance","type":[[["string"]]]}],"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":184,"file":"StageInstance.js","path":"src/structures"}}],"meta":{"line":20,"file":"StageInstance.js","path":"src/structures"}},{"name":"Sticker","description":"Represents a Sticker.","extends":[[["Base"]]],"props":[{"name":"id","description":"The sticker's id","type":[[["Snowflake"]]],"meta":{"line":33,"file":"Sticker.js","path":"src/structures"}},{"name":"description","description":"The description of the sticker","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Sticker.js","path":"src/structures"}},{"name":"type","description":"The type of the sticker","nullable":true,"type":[[["StickerType"]]],"meta":{"line":50,"file":"Sticker.js","path":"src/structures"}},{"name":"format","description":"The format of the sticker","type":[[["StickerFormatType"]]],"meta":{"line":60,"file":"Sticker.js","path":"src/structures"}},{"name":"name","description":"The name of the sticker","type":[[["string"]]],"meta":{"line":68,"file":"Sticker.js","path":"src/structures"}},{"name":"packId","description":"The id of the pack the sticker is from, for standard stickers","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"Sticker.js","path":"src/structures"}},{"name":"tags","description":"An array of tags for the sticker","nullable":true,"type":[[["Array","<"],["string",">"]]],"meta":{"line":86,"file":"Sticker.js","path":"src/structures"}},{"name":"available","description":"Whether or not the guild sticker is available","nullable":true,"type":[[["boolean"]]],"meta":{"line":96,"file":"Sticker.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild that owns this sticker","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":106,"file":"Sticker.js","path":"src/structures"}},{"name":"user","description":"The user that uploaded the guild sticker","nullable":true,"type":[[["User"]]],"meta":{"line":116,"file":"Sticker.js","path":"src/structures"}},{"name":"sortValue","description":"The standard sticker's sort order within its pack","nullable":true,"type":[[["number"]]],"meta":{"line":126,"file":"Sticker.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the sticker was created at","readonly":true,"type":[[["number"]]],"meta":{"line":137,"file":"Sticker.js","path":"src/structures"}},{"name":"createdAt","description":"The time the sticker was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":146,"file":"Sticker.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the sticker has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":155,"file":"Sticker.js","path":"src/structures"}},{"name":"partial","description":"Whether this sticker is partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":185,"file":"Sticker.js","path":"src/structures"}},{"name":"guild","description":"The guild that owns this sticker","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":194,"file":"Sticker.js","path":"src/structures"}},{"name":"url","description":"A link to the sticker\nIf the sticker's format is LOTTIE, it returns the URL of the Lottie JSON file.","type":[[["string"]]],"meta":{"line":203,"file":"Sticker.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"fetch","description":"Fetches this sticker.","async":true,"returns":[[["Promise","<"],["Sticker",">"]]],"meta":{"line":211,"file":"Sticker.js","path":"src/structures"}},{"name":"fetchPack","description":"Fetches the pack this sticker is part of from Discord, if this is a Nitro sticker.","async":true,"returns":[[["Promise",""]]],"meta":{"line":221,"file":"Sticker.js","path":"src/structures"}},{"name":"fetchUser","description":"Fetches the user who uploaded this sticker, if this is a guild sticker.","async":true,"returns":[[["Promise",""]]],"meta":{"line":229,"file":"Sticker.js","path":"src/structures"}},{"name":"edit","description":"Edits the sticker.","examples":["// Update the name of a sticker\nsticker.edit({ name: 'new name' })\n .then(s => console.log(`Updated the name of the sticker to ${s.name}`))\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the sticker","optional":true,"type":[[["GuildStickerEditData"]]]},{"name":"reason","description":"Reason for editing this sticker","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Sticker",">"]]],"meta":{"line":254,"file":"Sticker.js","path":"src/structures"}},{"name":"delete","description":"Deletes the sticker.","examples":["// Delete a message\nsticker.delete()\n .then(s => console.log(`Deleted sticker ${s.name}`))\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this sticker","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Sticker",">"]]],"meta":{"line":268,"file":"Sticker.js","path":"src/structures"}},{"name":"equals","description":"Whether this sticker is the same as another one.","params":[{"name":"other","description":"The sticker to compare it to","type":[[["Sticker"]],[["APISticker"]]]}],"returns":[[["boolean"]]],"meta":{"line":278,"file":"Sticker.js","path":"src/structures"}}],"meta":{"line":21,"file":"Sticker.js","path":"src/structures"}},{"name":"StickerPack","description":"Represents a pack of standard stickers.","extends":[[["Base"]]],"props":[{"name":"id","description":"The Sticker pack's id","type":[[["Snowflake"]]],"meta":{"line":19,"file":"StickerPack.js","path":"src/structures"}},{"name":"stickers","description":"The stickers in the pack","type":[[["Collection","<"],["Snowflake",", "],["Sticker",">"]]],"meta":{"line":25,"file":"StickerPack.js","path":"src/structures"}},{"name":"name","description":"The name of the sticker pack","type":[[["string"]]],"meta":{"line":31,"file":"StickerPack.js","path":"src/structures"}},{"name":"skuId","description":"The id of the pack's SKU","type":[[["Snowflake"]]],"meta":{"line":37,"file":"StickerPack.js","path":"src/structures"}},{"name":"coverStickerId","description":"The id of a sticker in the pack which is shown as the pack's icon","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":43,"file":"StickerPack.js","path":"src/structures"}},{"name":"description","description":"The description of the sticker pack","type":[[["string"]]],"meta":{"line":49,"file":"StickerPack.js","path":"src/structures"}},{"name":"bannerId","description":"The id of the sticker pack's banner image","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":55,"file":"StickerPack.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the sticker was created at","readonly":true,"type":[[["number"]]],"meta":{"line":63,"file":"StickerPack.js","path":"src/structures"}},{"name":"createdAt","description":"The time the sticker was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":72,"file":"StickerPack.js","path":"src/structures"}},{"name":"coverSticker","description":"The sticker which is shown as the pack's icon","readonly":true,"nullable":true,"type":[[["Sticker"]]],"meta":{"line":81,"file":"StickerPack.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"bannerURL","description":"The URL to this sticker pack's banner.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":90,"file":"StickerPack.js","path":"src/structures"}}],"meta":{"line":12,"file":"StickerPack.js","path":"src/structures"}},{"name":"StoreChannel","description":"Represents a guild store channel on Discord.\nStore channels have been removed from Discord. See\n[Self-serve Game Selling Deprecation](https://support-dev.discord.com/hc/en-us/articles/6309018858647)\nfor more information.","extends":[[["GuildChannel"]]],"props":[{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":20,"file":"StoreChannel.js","path":"src/structures"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":274,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"createInvite","description":"Creates an invite to this guild channel.","examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":41,"file":"StoreChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":51,"file":"StoreChannel.js","path":"src/structures"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":12,"file":"StoreChannel.js","path":"src/structures"}},{"name":"Team","description":"Represents a Client OAuth2 Application Team.","extends":[[["Base"]]],"props":[{"name":"id","description":"The Team's id","type":[[["Snowflake"]]],"meta":{"line":25,"file":"Team.js","path":"src/structures"}},{"name":"name","description":"The name of the Team","type":[[["string"]]],"meta":{"line":32,"file":"Team.js","path":"src/structures"}},{"name":"icon","description":"The Team's icon hash","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Team.js","path":"src/structures"}},{"name":"ownerId","description":"The Team's owner id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":50,"file":"Team.js","path":"src/structures"}},{"name":"members","description":"The Team's members","type":[[["Collection","<"],["Snowflake",", "],["TeamMember",">"]]],"meta":{"line":58,"file":"Team.js","path":"src/structures"}},{"name":"owner","description":"The owner of this team","readonly":true,"nullable":true,"type":[[["TeamMember"]]],"meta":{"line":71,"file":"Team.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the team was created at","readonly":true,"type":[[["number"]]],"meta":{"line":80,"file":"Team.js","path":"src/structures"}},{"name":"createdAt","description":"The time the team was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":89,"file":"Team.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"iconURL","description":"A link to the team's icon.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":98,"file":"Team.js","path":"src/structures"}},{"name":"inviteMember","description":"Invite a team member to the team","params":[{"name":"user","description":"The user to invite to the team","type":[[["User"]]]},{"name":"MFACode","description":"The mfa code","type":[[["number"]]]}],"async":true,"returns":[[["Promise","<"],["TeamMember",">"]]],"meta":{"line":109,"file":"Team.js","path":"src/structures"}},{"name":"removeMember","description":"Remove a member from the team","params":[{"name":"userID","description":"The ID of the user you want to remove","type":[[["Snowflake"]]]}],"async":true,"returns":[[["boolean"]]],"meta":{"line":133,"file":"Team.js","path":"src/structures"}},{"name":"delete","description":"Delete this team","params":[{"name":"MFACode","description":"The 2fa code","type":[[["number"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":143,"file":"Team.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the Team's name instead of the\nTeam object.","examples":["// Logs: Team name: My Team\nconsole.log(`Team name: ${team}`);"],"returns":[[["string"]]],"meta":{"line":158,"file":"Team.js","path":"src/structures"}}],"meta":{"line":14,"file":"Team.js","path":"src/structures"}},{"name":"TeamMember","description":"Represents a Client OAuth2 Application Team Member.","extends":[[["Base"]]],"props":[{"name":"team","description":"The Team this member is part of","type":[[["Team"]]],"meta":{"line":18,"file":"TeamMember.js","path":"src/structures"}},{"name":"permissions","description":"The permissions this Team Member has with regard to the team","type":[[["Array","<"],["string",">"]]],"meta":{"line":29,"file":"TeamMember.js","path":"src/structures"}},{"name":"membershipState","description":"The permissions this Team Member has with regard to the team","type":[[["MembershipState"]]],"meta":{"line":37,"file":"TeamMember.js","path":"src/structures"}},{"name":"user","description":"The user for this Team Member","type":[[["User"]]],"meta":{"line":45,"file":"TeamMember.js","path":"src/structures"}},{"name":"id","description":"The Team Member's id","readonly":true,"type":[[["Snowflake"]]],"meta":{"line":54,"file":"TeamMember.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the team member's mention instead of the\nTeamMember object.","examples":["// Logs: Team Member's mention: <@123456789012345678>\nconsole.log(`Team Member's mention: ${teamMember}`);"],"returns":[[["string"]]],"meta":{"line":66,"file":"TeamMember.js","path":"src/structures"}}],"meta":{"line":10,"file":"TeamMember.js","path":"src/structures"}},{"name":"TextChannel","description":"Represents a guild text channel on Discord.","extends":[[["BaseGuildTextChannel"]]],"props":[{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for this channel in seconds","type":[[["number"]]],"meta":{"line":18,"file":"TextChannel.js","path":"src/structures"}},{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":22,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":28,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"threads","description":"A manager of the threads belonging to this channel","type":[[["GuildTextThreadManager"]]],"meta":{"line":34,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":40,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"topic","description":"The topic of the text channel","nullable":true,"type":[[["string"]]],"meta":{"line":53,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in the channel, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":65,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastPinTimestamp","description":"The timestamp when the last pinned message was pinned, if there was one","nullable":true,"type":[[["number"]]],"meta":{"line":73,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"defaultAutoArchiveDuration","description":"The default auto archive duration for newly created threads in this channel","nullable":true,"type":[[["number"]]],"meta":{"line":81,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"defaultThreadRateLimitPerUser","description":"The initial rate limit per user (slowmode) to set on newly created threads in a channel.","nullable":true,"type":[[["number"]]],"meta":{"line":89,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinAt","description":"The date when the last pinned message was pinned, if there was one","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":68,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":274,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["TextChannel",">"]]],"meta":{"line":28,"file":"TextChannel.js","path":"src/structures"}},{"name":"setDefaultAutoArchiveDuration","description":"Sets the default auto archive duration for all newly created threads in this channel.","inherits":"BaseGuildTextChannel#setDefaultAutoArchiveDuration","inherited":true,"params":[{"name":"defaultAutoArchiveDuration","description":"The new default auto archive duration","type":[[["ThreadAutoArchiveDuration"]]]},{"name":"reason","description":"Reason for changing the channel's default auto archive duration","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["TextChannel",">"]]],"meta":{"line":105,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"setType","description":"Sets the type of this channel (only conversion between text and news is supported)","inherits":"BaseGuildTextChannel#setType","inherited":true,"params":[{"name":"type","description":"The new channel type","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the channel's type","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":115,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"setTopic","description":"Sets a new topic for the guild channel.","inherits":"BaseGuildTextChannel#setTopic","inherited":true,"examples":["// Set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.error);"],"params":[{"name":"topic","description":"The new topic for the guild channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's topic","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":130,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"createInvite","description":"Creates an invite to this guild channel.","inherits":"BaseGuildTextChannel#createInvite","inherited":true,"examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":168,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","inherits":"BaseGuildTextChannel#fetchInvites","inherited":true,"params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":178,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","inherits":"BaseGuildTextChannel#send","inherited":true,"implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","inherits":"BaseGuildTextChannel#sendTyping","inherited":true,"implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","inherits":"BaseGuildTextChannel#createMessageCollector","inherited":true,"implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","inherits":"BaseGuildTextChannel#awaitMessages","inherited":true,"implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","inherits":"BaseGuildTextChannel#createMessageComponentCollector","inherited":true,"implements":["TextBasedChannel#createMessageComponentCollector"],"examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseGuildTextChannel#awaitMessageComponent","inherited":true,"implements":["TextBasedChannel#awaitMessageComponent"],"examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"bulkDelete","description":"Bulk deletes given messages that are newer than two weeks.","inherits":"BaseGuildTextChannel#bulkDelete","inherited":true,"implements":["TextBasedChannel#bulkDelete"],"examples":["// Bulk delete messages\nchannel.bulkDelete(5)\n .then(messages => console.log(`Bulk deleted ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"messages","description":"Messages or number of messages to delete","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]],[["Array","<"],["MessageResolvable",">"]],[["number"]]]},{"name":"filterOld","description":"Filter messages to remove those which are older than two weeks automatically","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Collection","<"],["Snowflake",", ("],["Message","|"],["undefined",")>>"]]],"description":"Returns the deleted messages"},"meta":{"line":319,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","inherits":"BaseGuildTextChannel#fetchWebhooks","inherited":true,"implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":368,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","inherits":"BaseGuildTextChannel#createWebhook","inherited":true,"implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":393,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","inherits":"BaseGuildTextChannel#setNSFW","inherited":true,"implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":413,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"searchInteraction","description":"Search Slash Command (return raw data)","inherits":"BaseGuildTextChannel#searchInteraction","inherited":true,"implements":["TextBasedChannel#searchInteraction"],"params":[{"name":"applicationId","description":"Application ID","type":[[["Snowflake"]]]},{"name":"type","description":"Command Type","default":"CHAT_INPUT","nullable":true,"type":[[["ApplicationCommandType"]]]}],"returns":[[["Object"]]],"meta":{"line":423,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendSlash","description":"Send Slash to this channel","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/SlashCommand.md}"],"inherits":"BaseGuildTextChannel#sendSlash","inherited":true,"implements":["TextBasedChannel#sendSlash"],"examples":["// Send a basic slash\nchannel.sendSlash('botid', 'ping')\n .then(console.log)\n .catch(console.error);","// Send a remote file\nchannel.sendSlash('botid', 'emoji upload', 'https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048', 'test')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"bot","description":"Bot user (BotID, not applicationID)","type":[[["UserResolvable"]]]},{"name":"commandString","description":"Command name (and sub / group formats)","type":[[["string"]]]},{"name":"args","description":"Command arguments","variable":true,"type":[[["any"]],[["Array","<"],["any",">"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":463,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":9,"file":"TextChannel.js","path":"src/structures"}},{"name":"TextInputComponent","description":"Represents a text input component in a modal","extends":[[["BaseMessageComponent"]]],"construct":{"name":"TextInputComponent","params":[{"name":"data","description":"TextInputComponent to clone or raw data","optional":true,"default":"{}","type":[[["TextInputComponent"]],[["TextInputComponentOptions"]]]}]},"props":[{"name":"customId","description":"A unique string to be sent in the interaction when submitted","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"label","description":"The text to be displayed above this text input component","nullable":true,"type":[[["string"]]],"meta":{"line":46,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"maxLength","description":"Maximum length of text that can be entered","nullable":true,"type":[[["number"]]],"meta":{"line":52,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"minLength","description":"Minimum length of text required to be entered","nullable":true,"type":[[["string"]]],"meta":{"line":58,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"placeholder","description":"Custom placeholder text to display when no text is entered","nullable":true,"type":[[["string"]]],"meta":{"line":64,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"required","description":"Whether or not this text input component is required","nullable":true,"type":[[["boolean"]]],"meta":{"line":70,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"style","description":"The style of this text input component","nullable":true,"type":[[["TextInputStyle"]]],"meta":{"line":76,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"value","description":"Value of this text input component","nullable":true,"type":[[["string"]]],"meta":{"line":82,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"type","description":"The type of this component","nullable":true,"type":[[["MessageComponentType"]]],"meta":{"line":52,"file":"BaseMessageComponent.js","path":"src/structures"}}],"methods":[{"name":"setCustomId","description":"Sets the custom id of this text input component","params":[{"name":"customId","description":"A unique string to be sent in the interaction when submitted","type":[[["string"]]]}],"returns":[[["TextInputComponent"]]],"meta":{"line":90,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"setLabel","description":"Sets the label of this text input component","params":[{"name":"label","description":"The text to be displayed above this text input component","type":[[["string"]]]}],"returns":[[["TextInputComponent"]]],"meta":{"line":100,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"setRequired","description":"Sets the text input component to be required for modal submission","params":[{"name":"required","description":"Whether this text input component is required","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["TextInputComponent"]]],"meta":{"line":110,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"setMaxLength","description":"Sets the maximum length of text input required in this text input component","params":[{"name":"maxLength","description":"Maximum length of text to be required","type":[[["number"]]]}],"returns":[[["TextInputComponent"]]],"meta":{"line":120,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"setMinLength","description":"Sets the minimum length of text input required in this text input component","params":[{"name":"minLength","description":"Minimum length of text to be required","type":[[["number"]]]}],"returns":[[["TextInputComponent"]]],"meta":{"line":130,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"setPlaceholder","description":"Sets the placeholder of this text input component","params":[{"name":"placeholder","description":"Custom placeholder text to display when no text is entered","type":[[["string"]]]}],"returns":[[["TextInputComponent"]]],"meta":{"line":140,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"setStyle","description":"Sets the style of this text input component","params":[{"name":"style","description":"The style of this text input component","type":[[["TextInputStyleResolvable"]]]}],"returns":[[["TextInputComponent"]]],"meta":{"line":150,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"setValue","description":"Sets the value of this text input component","params":[{"name":"value","description":"Value of this text input component","type":[[["string"]]]}],"returns":[[["TextInputComponent"]]],"meta":{"line":160,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"toJSON","description":"Transforms the text input component into a plain object","returns":{"types":[[["APITextInput"]]],"description":"The raw data of this text input component"},"meta":{"line":169,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"resolveStyle","description":"Resolves the style of a text input component","scope":"static","access":"private","params":[{"name":"style","description":"The style to resolve","type":[[["TextInputStyleResolvable"]]]}],"returns":[[["TextInputStyle"]]],"meta":{"line":196,"file":"TextInputComponent.js","path":"src/structures"}}],"meta":{"line":13,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"ThreadChannel","description":"Represents a thread channel on Discord.","extends":[[["Channel"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"guild","description":"The guild the thread is in","type":[[["Guild"]]],"meta":{"line":26,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":32,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"messages","description":"A manager of the messages sent to this thread","type":[[["MessageManager"]]],"meta":{"line":38,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"members","description":"A manager of the members that are part of this thread","type":[[["ThreadMemberManager"]]],"meta":{"line":44,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":50,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"firstMessage","description":"First message in the thread","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the thread","type":[[["string"]]],"meta":{"line":71,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the parent channel of this thread","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":83,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"locked","description":"Whether the thread is locked","nullable":true,"type":[[["boolean"]]],"meta":{"line":93,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"invitable","description":"Whether members without `MANAGE_THREADS` can invite other members without `MANAGE_THREADS`\nAlways `null` in public threads","nullable":true,"type":[[["boolean"]]],"meta":{"line":100,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"archived","description":"Whether the thread is archived","nullable":true,"type":[[["boolean"]]],"meta":{"line":106,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"autoArchiveDuration","description":"The amount of time (in minutes) after which the thread will automatically archive in case of no recent activity","nullable":true,"type":[[["number"]]],"meta":{"line":112,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"archiveTimestamp","description":"The timestamp when the thread's archive status was last changed\nIf the thread was never archived or unarchived, this is the timestamp at which the thread was\ncreated","nullable":true,"type":[[["number"]]],"meta":{"line":120,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"ownerId","description":"The id of the member who created this thread","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":141,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in this thread, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":151,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"lastPinTimestamp","description":"The timestamp when the last pinned message was pinned, if there was one","nullable":true,"type":[[["number"]]],"meta":{"line":161,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for this thread in seconds","nullable":true,"type":[[["number"]]],"meta":{"line":171,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"messageCount","description":"Threads created before July 1, 2022 may have an inaccurate count.\nIf you need an approximate value higher than that, use `ThreadChannel#messages.cache.size`","nullable":true,"type":[[["number"]]],"meta":{"line":182,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"memberCount","description":"The approximate count of users in this thread\nThis stops counting at 50. If you need an approximate value higher than that, use\n`ThreadChannel#members.cache.size`","nullable":true,"type":[[["number"]]],"meta":{"line":194,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"totalMessageSent","description":"The number of messages ever sent in a thread, similar to {@link ThreadChannel#messageCount} except it\nwill not decrement whenever a message is deleted","nullable":true,"type":[[["number"]]],"meta":{"line":205,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"appliedTags","description":"The tags applied to this thread","type":[[["Array","<"],["Snowflake",">"]]],"meta":{"line":215,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp when this thread was created. This isn't available for threads\ncreated before 2022-01-09","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":230,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"guildMembers","description":"A collection of associated guild member objects of this thread's members","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":239,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"archivedAt","description":"The time at which this thread's archive status was last changed\nIf the thread was never archived or unarchived, this is the time at which the thread was created","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":249,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the thread was created at","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":259,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"parent","description":"The parent channel of this thread","readonly":true,"nullable":true,"type":[[["NewsChannel"]],[["TextChannel"]],[["ForumChannel"]]],"meta":{"line":268,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"joined","description":"Whether the client user is a member of the thread.","readonly":true,"type":[[["boolean"]]],"meta":{"line":498,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"editable","description":"Whether the thread is editable by the client user (name, archived, autoArchiveDuration)","readonly":true,"type":[[["boolean"]]],"meta":{"line":507,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"joinable","description":"Whether the thread is joinable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":518,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the thread is manageable by the client user, for deleting or editing rateLimitPerUser or locked.","readonly":true,"type":[[["boolean"]]],"meta":{"line":534,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the thread is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":551,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"sendable","description":"Whether the client user can send messages in this thread","readonly":true,"type":[[["boolean"]]],"meta":{"line":563,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"unarchivable","description":"Whether the thread is unarchivable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":582,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinAt","description":"The date when the last pinned message was pinned, if there was one","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":68,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"join","description":"Makes the client user join the thread.","async":true,"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":276,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"leave","description":"Makes the client user leave the thread.","async":true,"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":285,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this thread's parent channel, taking overwrites into\naccount.","params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":297,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"fetchOwner","description":"Fetches the owner of this thread. If the thread member object isn't needed,\nuse {@link ThreadChannel#ownerId} instead.","params":[{"name":"options","description":"The options for fetching the member","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise",""]]],"meta":{"line":307,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"fetchStarterMessage","description":"Fetches the message that started this thread, if any.\nThe `Promise` will reject if the original message in a forum post is deleted\nor when the original message in the parent channel is deleted.\nIf you just need the id of that message, use {@link ThreadChannel#id} instead.","params":[{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["null",")>"]]],"meta":{"line":327,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits this thread.","examples":["// Edit a thread\nthread.edit({ name: 'new-thread' })\n .then(editedThread => console.log(editedThread))\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for this thread","type":[[["ThreadEditData"]]]},{"name":"reason","description":"Reason for editing this thread","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":358,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setArchived","description":"Sets whether the thread is archived.","examples":["// Archive the thread\nthread.setArchived(true)\n .then(newThread => console.log(`Thread is now ${newThread.archived ? 'archived' : 'active'}`))\n .catch(console.error);"],"params":[{"name":"archived","description":"Whether the thread is archived","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for archiving or unarchiving","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":390,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setAutoArchiveDuration","description":"Sets the duration after which the thread will automatically archive in case of no recent activity.","examples":["// Set the thread's auto archive time to 1 hour\nthread.setAutoArchiveDuration(60)\n .then(newThread => {\n console.log(`Thread will now archive after ${newThread.autoArchiveDuration} minutes of inactivity`);\n });\n .catch(console.error);"],"params":[{"name":"autoArchiveDuration","description":"The amount of time (in minutes) after which the thread\nshould automatically archive in case of no recent activity","type":[[["ThreadAutoArchiveDuration"]]]},{"name":"reason","description":"Reason for changing the auto archive duration","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":408,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setInvitable","description":"Sets whether members without the `MANAGE_THREADS` permission can invite other members without the\n`MANAGE_THREADS` permission to this thread.","params":[{"name":"invitable","description":"Whether non-moderators can invite non-moderators to this thread","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing invite","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":419,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setLocked","description":"Sets whether the thread can be **unarchived** by anyone with `SEND_MESSAGES` permission.\nWhen a thread is locked only members with `MANAGE_THREADS` can unarchive it.","examples":["// Set the thread to locked\nthread.setLocked(true)\n .then(newThread => console.log(`Thread is now ${newThread.locked ? 'locked' : 'unlocked'}`))\n .catch(console.error);"],"params":[{"name":"locked","description":"Whether the thread is locked","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for locking or unlocking the thread","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":436,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for this thread.","examples":["// Change the thread's name\nthread.setName('not_general')\n .then(newThread => console.log(`Thread's new name is ${newThread.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the thread","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the thread's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":451,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this thread.","implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the thread's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":461,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"pin","description":"Pins this thread from the forum channel.","params":[{"name":"reason","description":"Reason for pinning","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":470,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"unpin","description":"Unpins this thread from the forum channel.","params":[{"name":"reason","description":"Reason for unpinning","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":479,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setAppliedTags","description":"Set the applied tags for this channel (only applicable to forum threads)","params":[{"name":"appliedTags","description":"The tags to set for this channel","type":[[["Array","<"],["Snowflake",">"]]]},{"name":"reason","description":"Reason for changing the thread's applied tags","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":489,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"isPrivate","description":"Whether this thread is a private thread","returns":[[["boolean"]]],"meta":{"line":590,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this thread.","examples":["// Delete the thread\nthread.delete('cleaning out old threads')\n .then(deletedThread => console.log(deletedThread))\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this thread","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":604,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","implements":["TextBasedChannel#createMessageComponentCollector"],"examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","implements":["TextBasedChannel#awaitMessageComponent"],"examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"bulkDelete","description":"Bulk deletes given messages that are newer than two weeks.","implements":["TextBasedChannel#bulkDelete"],"examples":["// Bulk delete messages\nchannel.bulkDelete(5)\n .then(messages => console.log(`Bulk deleted ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"messages","description":"Messages or number of messages to delete","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]],[["Array","<"],["MessageResolvable",">"]],[["number"]]]},{"name":"filterOld","description":"Filter messages to remove those which are older than two weeks automatically","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Collection","<"],["Snowflake",", ("],["Message","|"],["undefined",")>>"]]],"description":"Returns the deleted messages"},"meta":{"line":319,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":18,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"ThreadMember","description":"Represents a Member for a Thread.","extends":[[["Base"]]],"props":[{"name":"thread","description":"The thread that this member is a part of","type":[[["ThreadChannel"]]],"meta":{"line":18,"file":"ThreadMember.js","path":"src/structures"}},{"name":"joinedTimestamp","description":"The timestamp the member last joined the thread at","nullable":true,"type":[[["number"]]],"meta":{"line":24,"file":"ThreadMember.js","path":"src/structures"}},{"name":"id","description":"The id of the thread member","type":[[["Snowflake"]]],"meta":{"line":30,"file":"ThreadMember.js","path":"src/structures"}},{"name":"flags","description":"The flags for this thread member","type":[[["ThreadMemberFlags"]]],"meta":{"line":43,"file":"ThreadMember.js","path":"src/structures"}},{"name":"member","description":"The guild member associated with this thread member.","access":"private","nullable":true,"type":[[["GuildMember"]]],"meta":{"line":52,"file":"ThreadMember.js","path":"src/structures"}},{"name":"guildMember","description":"The guild member associated with this thread member","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":63,"file":"ThreadMember.js","path":"src/structures"}},{"name":"joinedAt","description":"The last time this member joined the thread","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":72,"file":"ThreadMember.js","path":"src/structures"}},{"name":"user","description":"The user associated with this thread member","readonly":true,"nullable":true,"type":[[["User"]]],"meta":{"line":81,"file":"ThreadMember.js","path":"src/structures"}},{"name":"manageable","description":"Whether the client user can manage this thread member","readonly":true,"type":[[["boolean"]]],"meta":{"line":90,"file":"ThreadMember.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"remove","description":"Removes this member from the thread.","params":[{"name":"reason","description":"Reason for removing the member","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["ThreadMember"]]],"meta":{"line":99,"file":"ThreadMember.js","path":"src/structures"}}],"meta":{"line":10,"file":"ThreadMember.js","path":"src/structures"}},{"name":"Typing","description":"Represents a typing state for a user in a channel.","extends":[[["Base"]]],"props":[{"name":"channel","description":"The channel the status is from","type":[[["TextBasedChannels"]]],"meta":{"line":17,"file":"Typing.js","path":"src/structures"}},{"name":"user","description":"The user who is typing","type":[[["User"]]],"meta":{"line":23,"file":"Typing.js","path":"src/structures"}},{"name":"startedTimestamp","description":"The UNIX timestamp in milliseconds the user started typing at","type":[[["number"]]],"meta":{"line":34,"file":"Typing.js","path":"src/structures"}},{"name":"startedAt","description":"The time the user started typing at","readonly":true,"type":[[["Date"]]],"meta":{"line":51,"file":"Typing.js","path":"src/structures"}},{"name":"guild","description":"The guild the status is from","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":60,"file":"Typing.js","path":"src/structures"}},{"name":"member","description":"The member who is typing","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":69,"file":"Typing.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"inGuild","description":"Indicates whether the status is received from a guild.","returns":[[["boolean"]]],"meta":{"line":42,"file":"Typing.js","path":"src/structures"}}],"meta":{"line":9,"file":"Typing.js","path":"src/structures"}},{"name":"User","description":"Represents a user on Discord.","extends":[[["Base"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"id","description":"The user's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"User.js","path":"src/structures"}},{"name":"connectedAccounts","description":"Accounts connected to this user\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["Array","<"],["ConnectionAccount",">"]]],"meta":{"line":49,"file":"User.js","path":"src/structures"}},{"name":"premiumSince","description":"Time that User has nitro (Unix Timestamp)\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["number"]]],"meta":{"line":55,"file":"User.js","path":"src/structures"}},{"name":"premiumGuildSince","description":"Time that User has nitro and boost server (Unix Timestamp)","nullable":true,"type":[[["number"]]],"meta":{"line":60,"file":"User.js","path":"src/structures"}},{"name":"bio","description":"About me (User)\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":66,"file":"User.js","path":"src/structures"}},{"name":"pronouns","description":"Pronouns (User)\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":72,"file":"User.js","path":"src/structures"}},{"name":"application","description":"[Bot] Application","nullable":true,"type":[[["ClientApplication"]]],"meta":{"line":78,"file":"User.js","path":"src/structures"}},{"name":"username","description":"The username of the user","nullable":true,"type":[[["string"]]],"meta":{"line":89,"file":"User.js","path":"src/structures"}},{"name":"globalName","description":"The global name of this user","nullable":true,"type":[[["string"]]],"meta":{"line":99,"file":"User.js","path":"src/structures"}},{"name":"bot","description":"Whether or not the user is a bot","nullable":true,"type":[[["boolean"]]],"meta":{"line":109,"file":"User.js","path":"src/structures"}},{"name":"discriminator","description":"The discriminator of this user\n`'0'`, or a 4-digit stringified number if they're using the legacy username system","nullable":true,"type":[[["string"]]],"meta":{"line":124,"file":"User.js","path":"src/structures"}},{"name":"avatar","description":"The user avatar's hash","nullable":true,"type":[[["string"]]],"meta":{"line":134,"file":"User.js","path":"src/structures"}},{"name":"banner","description":"The user banner's hash\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":145,"file":"User.js","path":"src/structures"}},{"name":"accentColor","description":"The base 10 accent color of the user's banner\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["number"]]],"meta":{"line":156,"file":"User.js","path":"src/structures"}},{"name":"system","description":"Whether the user is an Official Discord System user (part of the urgent message system)","nullable":true,"type":[[["boolean"]]],"meta":{"line":166,"file":"User.js","path":"src/structures"}},{"name":"flags","description":"The flags for this user","nullable":true,"type":[[["UserFlags"]]],"meta":{"line":176,"file":"User.js","path":"src/structures"}},{"name":"botInGuildsCount","description":"Check how many guilds the bot is in (Probably only approximate) (application.fetch() first)","nullable":true,"type":[[["number"]]],"meta":{"line":184,"file":"User.js","path":"src/structures"}},{"name":"avatarDecoration","description":"The user avatar decoration's hash","nullable":true,"type":[[["string"]]],"meta":{"line":192,"file":"User.js","path":"src/structures"}},{"name":"mutualGuilds","description":"This user is on the same servers as Client User\nThe user must be force fetched for this property to be present or be updated","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Guild",">"]]],"meta":{"line":204,"file":"User.js","path":"src/structures"}},{"name":"mutualFriends","description":"Get all mutual friends (Client -> User)","readonly":true,"type":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["User",">>"]]],"meta":{"line":213,"file":"User.js","path":"src/structures"}},{"name":"relationships","description":"Check relationship status (Client -> User)","readonly":true,"type":[[["RelationshipTypes"]]],"meta":{"line":231,"file":"User.js","path":"src/structures"}},{"name":"note","description":"Check note","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":241,"file":"User.js","path":"src/structures"}},{"name":"nickname","description":"Get friend nickname","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":250,"file":"User.js","path":"src/structures"}},{"name":"voice","description":"The voice state of this member","readonly":true,"type":[[["VoiceState"]]],"meta":{"line":259,"file":"User.js","path":"src/structures"}},{"name":"nitroType","description":"Nitro type of the user.","type":[[["NitroType"]]],"meta":{"line":292,"file":"User.js","path":"src/structures"}},{"name":"themeColors","description":"The user's theme colors (Profile theme) [Primary, Accent]\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["Array","<"],["number",">"]]],"meta":{"line":302,"file":"User.js","path":"src/structures"}},{"name":"badges","description":"User badges (Boost, Slash, AutoMod, etc.)","nullable":true,"type":[[["Array","<"],["UserBadge",">"]]],"meta":{"line":336,"file":"User.js","path":"src/structures"}},{"name":"partial","description":"Whether this User is a partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":430,"file":"User.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the user was created at","readonly":true,"type":[[["number"]]],"meta":{"line":439,"file":"User.js","path":"src/structures"}},{"name":"createdAt","description":"The time the user was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":448,"file":"User.js","path":"src/structures"}},{"name":"defaultAvatarURL","description":"A link to the user's default avatar","readonly":true,"type":[[["string"]]],"meta":{"line":477,"file":"User.js","path":"src/structures"}},{"name":"hexAccentColor","description":"The hexadecimal version of the user accent color, with a leading hash\nThe user must be force fetched for this property to be present","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":498,"file":"User.js","path":"src/structures"}},{"name":"hexThemeColor","description":"The hexadecimal version of the user theme color, with a leading hash [Primary, Accent]\nThe user must be force fetched for this property to be present or be updated","readonly":true,"nullable":true,"type":[[["Array","<"],["string",">"]]],"meta":{"line":541,"file":"User.js","path":"src/structures"}},{"name":"tag","description":"The tag of this user\nThis user's username, or their legacy tag (e.g. `hydrabolt#0001`)\nif they're using the legacy username system","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":552,"file":"User.js","path":"src/structures"}},{"name":"displayName","description":"The global name of this user, or their username if they don't have one","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":565,"file":"User.js","path":"src/structures"}},{"name":"dmChannel","description":"The DM between the client's user and this user","readonly":true,"nullable":true,"type":[[["DMChannel"]]],"meta":{"line":574,"file":"User.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"getProfile","description":"Get profile from Discord, if client is in a server with the target.","params":[{"name":"guildId","description":"The guild id to get the profile from","type":[[["Snowflake"]],[["null"]]]}],"async":true,"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":354,"file":"User.js","path":"src/structures"}},{"name":"setFriend","description":"Friends the user [If incoming request]","returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":376,"file":"User.js","path":"src/structures"}},{"name":"setNickname","description":"Changes the nickname of the friend","params":[{"name":"nickname","description":"The nickname to change","nullable":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":386,"file":"User.js","path":"src/structures"}},{"name":"sendFriendRequest","description":"Send Friend Request to the user","returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":395,"file":"User.js","path":"src/structures"}},{"name":"setBlock","description":"Blocks the user","returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":403,"file":"User.js","path":"src/structures"}},{"name":"unBlock","description":"Removes the user from your blocks list","returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":412,"file":"User.js","path":"src/structures"}},{"name":"unFriend","description":"Removes the user from your friends list","returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":421,"file":"User.js","path":"src/structures"}},{"name":"avatarURL","description":"A link to the user's avatar.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":457,"file":"User.js","path":"src/structures"}},{"name":"avatarDecorationURL","description":"A link to the user's avatar decoration.","params":[{"name":"options","description":"Options for the image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":467,"file":"User.js","path":"src/structures"}},{"name":"displayAvatarURL","description":"A link to the user's avatar if they have one.\nOtherwise a link to their default avatar will be returned.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":[[["string"]]],"meta":{"line":488,"file":"User.js","path":"src/structures"}},{"name":"bannerURL","description":"A link to the user's banner.\nThis method will throw an error if called before the user is force fetched.\nSee {@link User#banner} for more info","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":510,"file":"User.js","path":"src/structures"}},{"name":"ring","description":"Ring the user's phone / PC (call)","deprecated":true,"returns":[[["Promise","<"],["any",">"]]],"meta":{"line":523,"file":"User.js","path":"src/structures"}},{"name":"createDM","description":"Creates a DM channel between the client and the user.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":583,"file":"User.js","path":"src/structures"}},{"name":"deleteDM","description":"Deletes a DM channel (if one exists) between the client and the user. Resolves with the channel if successful.","returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":591,"file":"User.js","path":"src/structures"}},{"name":"equals","description":"Checks if the user is equal to another.\nIt compares id, username, discriminator, avatar, banner, accent color, and bot flags.\nIt is recommended to compare equality by using `user.id === user2.id` unless you want to compare all properties.","params":[{"name":"user","description":"User to compare with","type":[[["User"]]]}],"returns":[[["boolean"]]],"meta":{"line":602,"file":"User.js","path":"src/structures"}},{"name":"_equals","description":"Compares the user with an API user object","access":"private","params":[{"name":"user","description":"The API user object to compare","type":[[["APIUser"]]]}],"returns":[[["boolean"]]],"meta":{"line":623,"file":"User.js","path":"src/structures"}},{"name":"fetchFlags","description":"Fetches this user's flags.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["UserFlags",">"]]],"meta":{"line":642,"file":"User.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this user.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":651,"file":"User.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the user's mention instead of the User object.","examples":["// Logs: Hello from <@123456789012345678>!\nconsole.log(`Hello from ${user}!`);"],"returns":[[["string"]]],"meta":{"line":662,"file":"User.js","path":"src/structures"}},{"name":"setNote","description":"Set note to user","params":[{"name":"note","description":"Note to set","default":null,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":687,"file":"User.js","path":"src/structures"}},{"name":"presenceFetch","description":"Get presence (~ v12)","async":true,"returns":[[["Promise","<("],["Presence","|"],["null",")>"]]],"meta":{"line":696,"file":"User.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this user.","implements":["TextBasedChannel#send"],"examples":["// Send a direct message\nuser.send('Hello!')\n .then(message => console.log(`Sent message: ${message.content} to ${user.tag}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":709,"file":"User.js","path":"src/structures"}}],"meta":{"line":19,"file":"User.js","path":"src/structures"}},{"name":"UserContextMenuInteraction","description":"Represents a user context menu interaction.","extends":[[["ContextMenuInteraction"]]],"props":[{"name":"targetUser","description":"The user this interaction was sent from","readonly":true,"type":[[["User"]]],"meta":{"line":15,"file":"UserContextMenuInteraction.js","path":"src/structures"}},{"name":"targetMember","description":"The member this interaction was sent from","readonly":true,"nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":24,"file":"UserContextMenuInteraction.js","path":"src/structures"}},{"name":"options","description":"The target of the interaction, parsed into options","type":[[["CommandInteractionOptionResolver"]]],"meta":{"line":18,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"targetId","description":"The id of the target of the interaction","type":[[["Snowflake"]]],"meta":{"line":28,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"targetType","description":"The type of the target of the interaction; either USER or MESSAGE","type":[[["ApplicationCommandType"]]],"meta":{"line":34,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":20,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandId","description":"The invoked application command's id","type":[[["Snowflake"]]],"meta":{"line":30,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandName","description":"The invoked application command's name","type":[[["string"]]],"meta":{"line":36,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":42,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":48,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":54,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":60,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"command","description":"The invoked application command, if it was fetched before","nullable":true,"type":[[["ApplicationCommand"]]],"meta":{"line":67,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"resolveContextMenuOptions","description":"Resolves and transforms options received from the API for a context menu interaction.","access":"private","inherits":"ContextMenuInteraction#resolveContextMenuOptions","inherited":true,"params":[{"name":"data","description":"The interaction data","type":[[["APIApplicationCommandInteractionData"]]]}],"returns":[[["Array","<"],["CommandInteractionOption",">"]]],"meta":{"line":43,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"transformResolved","description":"Transforms the resolved received from the API.","access":"private","inherits":"BaseCommandInteraction#transformResolved","inherited":true,"params":[{"name":"resolved","description":"The received resolved objects","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionResolvedData"]]],"meta":{"line":89,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"transformOption","description":"Transforms an option received from the API.","access":"private","inherits":"BaseCommandInteraction#transformOption","inherited":true,"params":[{"name":"option","description":"The received option","type":[[["APIApplicationCommandOption"]]]},{"name":"resolved","description":"The resolved interaction data","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionOption"]]],"meta":{"line":162,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"BaseCommandInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"BaseCommandInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"BaseCommandInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"BaseCommandInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"BaseCommandInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"BaseCommandInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"BaseCommandInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseCommandInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":9,"file":"UserContextMenuInteraction.js","path":"src/structures"}},{"name":"VoiceChannel","description":"Represents a guild voice channel on Discord.","extends":[[["BaseGuildVoiceChannel"]]],"props":[{"name":"editable","description":"Whether the channel is editable by the client user","readonly":true,"deprecated":"Use {@link VoiceChannel#manageable} instead","type":[[["boolean"]]],"meta":{"line":20,"file":"VoiceChannel.js","path":"src/structures"}},{"name":"joinable","description":"Whether the channel is joinable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":38,"file":"VoiceChannel.js","path":"src/structures"}},{"name":"speakable","description":"Checks if the client has permission to send audio to the voice channel","readonly":true,"type":[[["boolean"]]],"meta":{"line":49,"file":"VoiceChannel.js","path":"src/structures"}},{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":23,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":29,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":35,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"bitrate","description":"The bitrate of this voice-based channel","type":[[["number"]]],"meta":{"line":48,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"rtcRegion","description":"The RTC region for this voice-based channel. This region is automatically selected if `null`.","nullable":true,"type":[[["string"]]],"meta":{"line":56,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"userLimit","description":"The maximum amount of users allowed in this channel.","type":[[["number"]]],"meta":{"line":64,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"videoQualityMode","description":"The camera video quality mode of the channel.","nullable":true,"type":[[["VideoQualityMode"]]],"meta":{"line":72,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in the channel, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":82,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for this channel in seconds","type":[[["number"]]],"meta":{"line":94,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"members","description":"The members in this voice-based channel","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":107,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"full","description":"Checks if the voice-based channel is full","readonly":true,"type":[[["boolean"]]],"meta":{"line":122,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"createInvite","description":"Creates an invite to this guild channel.","inherits":"BaseGuildVoiceChannel#createInvite","inherited":true,"examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":155,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","inherits":"BaseGuildVoiceChannel#fetchInvites","inherited":true,"params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":165,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setBitrate","description":"Sets the bitrate of the channel.","inherits":"BaseGuildVoiceChannel#setBitrate","inherited":true,"examples":["// Set the bitrate of a voice channel\nvoiceChannel.setBitrate(48_000)\n .then(vc => console.log(`Set bitrate to ${vc.bitrate}bps for ${vc.name}`))\n .catch(console.error);"],"params":[{"name":"bitrate","description":"The new bitrate","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's bitrate","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":180,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setRTCRegion","description":"Sets the RTC region of the channel.","inherits":"BaseGuildVoiceChannel#setRTCRegion","inherited":true,"examples":["// Set the RTC region to sydney\nchannel.setRTCRegion('sydney');","// Remove a fixed region for this channel - let Discord decide automatically\nchannel.setRTCRegion(null, 'We want to let Discord decide.');"],"params":[{"name":"rtcRegion","description":"The new region of the channel. Set to `null` to remove a specific region for the channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"The reason for modifying this region.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["BaseGuildVoiceChannel",">"]]],"meta":{"line":196,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setUserLimit","description":"Sets the user limit of the channel.","inherits":"BaseGuildVoiceChannel#setUserLimit","inherited":true,"examples":["// Set the user limit of a voice channel\nvoiceChannel.setUserLimit(42)\n .then(vc => console.log(`Set user limit to ${vc.userLimit} for ${vc.name}`))\n .catch(console.error);"],"params":[{"name":"userLimit","description":"The new user limit","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the user limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":211,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setVideoQualityMode","description":"Sets the camera video quality mode of the channel.","inherits":"BaseGuildVoiceChannel#setVideoQualityMode","inherited":true,"params":[{"name":"videoQualityMode","description":"The new camera video quality mode.","type":[[["VideoQualityMode"]],[["number"]]]},{"name":"reason","description":"Reason for changing the camera video quality mode.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":221,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","inherits":"BaseGuildVoiceChannel#send","inherited":true,"implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","inherits":"BaseGuildVoiceChannel#sendTyping","inherited":true,"implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","inherits":"BaseGuildVoiceChannel#createMessageCollector","inherited":true,"implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","inherits":"BaseGuildVoiceChannel#awaitMessages","inherited":true,"implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","inherits":"BaseGuildVoiceChannel#createMessageComponentCollector","inherited":true,"implements":["TextBasedChannel#createMessageComponentCollector"],"examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseGuildVoiceChannel#awaitMessageComponent","inherited":true,"implements":["TextBasedChannel#awaitMessageComponent"],"examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"bulkDelete","description":"Bulk deletes given messages that are newer than two weeks.","inherits":"BaseGuildVoiceChannel#bulkDelete","inherited":true,"implements":["TextBasedChannel#bulkDelete"],"examples":["// Bulk delete messages\nchannel.bulkDelete(5)\n .then(messages => console.log(`Bulk deleted ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"messages","description":"Messages or number of messages to delete","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]],[["Array","<"],["MessageResolvable",">"]],[["number"]]]},{"name":"filterOld","description":"Filter messages to remove those which are older than two weeks automatically","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Collection","<"],["Snowflake",", ("],["Message","|"],["undefined",")>>"]]],"description":"Returns the deleted messages"},"meta":{"line":319,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","inherits":"BaseGuildVoiceChannel#fetchWebhooks","inherited":true,"implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":368,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","inherits":"BaseGuildVoiceChannel#createWebhook","inherited":true,"implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":393,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","inherits":"BaseGuildVoiceChannel#setRateLimitPerUser","inherited":true,"implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":403,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","inherits":"BaseGuildVoiceChannel#setNSFW","inherited":true,"implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":413,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":13,"file":"VoiceChannel.js","path":"src/structures"}},{"name":"VoiceRegion","description":"Represents a Discord voice region for guilds.","props":[{"name":"id","description":"The region's id","type":[[["string"]]],"meta":{"line":14,"file":"VoiceRegion.js","path":"src/structures"}},{"name":"name","description":"Name of the region","type":[[["string"]]],"meta":{"line":20,"file":"VoiceRegion.js","path":"src/structures"}},{"name":"vip","description":"Whether the region is VIP-only","deprecated":"This property is no longer being sent by the API.","type":[[["boolean"]]],"meta":{"line":27,"file":"VoiceRegion.js","path":"src/structures"}},{"name":"deprecated","description":"Whether the region is deprecated","type":[[["boolean"]]],"meta":{"line":33,"file":"VoiceRegion.js","path":"src/structures"}},{"name":"optimal","description":"Whether the region is optimal","type":[[["boolean"]]],"meta":{"line":39,"file":"VoiceRegion.js","path":"src/structures"}},{"name":"custom","description":"Whether the region is custom","type":[[["boolean"]]],"meta":{"line":45,"file":"VoiceRegion.js","path":"src/structures"}}],"meta":{"line":8,"file":"VoiceRegion.js","path":"src/structures"}},{"name":"VoiceState","description":"Represents the voice state for a Guild Member.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild of this voice state","type":[[["Guild"]]],"meta":{"line":17,"file":"VoiceState.js","path":"src/structures"}},{"name":"id","description":"The id of the member of this voice state","type":[[["Snowflake"]]],"meta":{"line":22,"file":"VoiceState.js","path":"src/structures"}},{"name":"serverDeaf","description":"Whether this member is deafened server-wide","nullable":true,"type":[[["boolean"]]],"meta":{"line":32,"file":"VoiceState.js","path":"src/structures"}},{"name":"serverMute","description":"Whether this member is muted server-wide","nullable":true,"type":[[["boolean"]]],"meta":{"line":42,"file":"VoiceState.js","path":"src/structures"}},{"name":"selfDeaf","description":"Whether this member is self-deafened","nullable":true,"type":[[["boolean"]]],"meta":{"line":52,"file":"VoiceState.js","path":"src/structures"}},{"name":"selfMute","description":"Whether this member is self-muted","nullable":true,"type":[[["boolean"]]],"meta":{"line":62,"file":"VoiceState.js","path":"src/structures"}},{"name":"selfVideo","description":"Whether this member's camera is enabled","nullable":true,"type":[[["boolean"]]],"meta":{"line":72,"file":"VoiceState.js","path":"src/structures"}},{"name":"sessionId","description":"The session id for this member's connection","nullable":true,"type":[[["string"]]],"meta":{"line":82,"file":"VoiceState.js","path":"src/structures"}},{"name":"streaming","description":"Whether this member is streaming using \"Screen Share\"","type":[[["boolean"]]],"meta":{"line":93,"file":"VoiceState.js","path":"src/structures"}},{"name":"channelId","description":"The {@link VoiceChannel} or {@link StageChannel} id the member is in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":100,"file":"VoiceState.js","path":"src/structures"}},{"name":"suppress","description":"Whether this member is suppressed from speaking. This property is specific to stage channels only.","type":[[["boolean"]]],"meta":{"line":110,"file":"VoiceState.js","path":"src/structures"}},{"name":"requestToSpeakTimestamp","description":"The time at which the member requested to speak. This property is specific to stage channels only.","nullable":true,"type":[[["number"]]],"meta":{"line":118,"file":"VoiceState.js","path":"src/structures"}},{"name":"member","description":"The member that this voice state belongs to","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":131,"file":"VoiceState.js","path":"src/structures"}},{"name":"user","description":"The user that this voice state belongs to","readonly":true,"nullable":true,"type":[[["User"]]],"meta":{"line":141,"file":"VoiceState.js","path":"src/structures"}},{"name":"channel","description":"The channel that the member is connected to","readonly":true,"nullable":true,"type":[[["VoiceChannel"]],[["StageChannel"]]],"meta":{"line":150,"file":"VoiceState.js","path":"src/structures"}},{"name":"deaf","description":"Whether this member is either self-deafened or server-deafened","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":160,"file":"VoiceState.js","path":"src/structures"}},{"name":"mute","description":"Whether this member is either self-muted or server-muted","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":169,"file":"VoiceState.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"setMute","description":"Mutes/unmutes the member of this voice state.","params":[{"name":"mute","description":"Whether or not the member should be muted","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for muting or unmuting","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":179,"file":"VoiceState.js","path":"src/structures"}},{"name":"setDeaf","description":"Deafens/undeafens the member of this voice state.","params":[{"name":"deaf","description":"Whether or not the member should be deafened","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for deafening or undeafening","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":190,"file":"VoiceState.js","path":"src/structures"}},{"name":"disconnect","description":"Disconnects the member from the channel.","params":[{"name":"reason","description":"Reason for disconnecting the member from the channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":200,"file":"VoiceState.js","path":"src/structures"}},{"name":"setChannel","description":"Moves the member to a different channel, or disconnects them from the one they're in.","params":[{"name":"channel","description":"Channel to move the member to, or `null` if you want to\ndisconnect them from voice.","type":[[["GuildVoiceChannelResolvable"]],[["null"]]]},{"name":"reason","description":"Reason for moving member to another channel or disconnecting","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":212,"file":"VoiceState.js","path":"src/structures"}},{"name":"setStatus","description":"Sets the status of the voice channel","examples":["// Setting the status to something\nguild.members.me.voice.setStatus(\"something\")","// Removing the status\nguild.members.me.voice.setStatus(\"\")"],"params":[{"name":"status","description":"The message to set the channel status to","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":228,"file":"VoiceState.js","path":"src/structures"}},{"name":"setRequestToSpeak","description":"Toggles the request to speak in the channel.\nOnly applicable for stage channels and for the client's own voice state.","examples":["// Making the client request to speak in a stage channel (raise its hand)\nguild.members.me.voice.setRequestToSpeak(true);","// Making the client cancel a request to speak\nguild.members.me.voice.setRequestToSpeak(false);"],"params":[{"name":"request","description":"Whether or not the client is requesting to become a speaker.","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":255,"file":"VoiceState.js","path":"src/structures"}},{"name":"setSuppressed","description":"Suppress/unsuppress the user. Only applicable for stage channels.","examples":["// Making the client a speaker\nguild.members.me.voice.setSuppressed(false);","// Making the client an audience member\nguild.members.me.voice.setSuppressed(true);","// Inviting another user to speak\nvoiceState.setSuppressed(false);","// Moving another user to the audience, or cancelling their invite to speak\nvoiceState.setSuppressed(true);"],"params":[{"name":"suppressed","description":"Whether or not the user should be suppressed.","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":287,"file":"VoiceState.js","path":"src/structures"}},{"name":"getPreview","description":"Get URL Image of the user's streaming video (NOT STREAMING !!!)","async":true,"returns":{"types":[[["Promise","<"],["string",">"]]],"description":"URL Image of the user's streaming video"},"meta":{"line":309,"file":"VoiceState.js","path":"src/structures"}},{"name":"postPreview","description":"Post Preview Image to the client user's streaming video","params":[{"name":"base64Image","description":"Base64 URI (data:image/jpeg;base64,data)","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":325,"file":"VoiceState.js","path":"src/structures"}}],"meta":{"line":10,"file":"VoiceState.js","path":"src/structures"}},{"name":"WebEmbed","description":"Send Embedlink to Discord\nNeed to change WebEmbed API server (because heroku is no longer free)","construct":{"name":"WebEmbed","params":[{"name":"data","description":"Raw data","optional":true,"default":"{}","type":[[["WebEmbed"]]]}]},"props":[{"name":"shorten","description":"Shorten the link","nullable":true,"type":[[["boolean"]]],"meta":{"line":50,"file":"WebEmbed.js","path":"src/structures"}},{"name":"hidden","description":"Hidden Embed link","nullable":true,"type":[[["boolean"]]],"meta":{"line":56,"file":"WebEmbed.js","path":"src/structures"}},{"name":"baseURL","description":"Using Custom WebEmbed server ?","see":["https://github.com/aiko-chan-ai/WebEmbed"],"nullable":true,"type":[[["string"]]],"meta":{"line":63,"file":"WebEmbed.js","path":"src/structures"}},{"name":"imageType","description":"Type image of this embed","type":[[["thumbnail"]],[["image"]]],"meta":{"line":74,"file":"WebEmbed.js","path":"src/structures"}},{"name":"title","description":"The title of this embed","nullable":true,"type":[[["string"]]],"meta":{"line":79,"file":"WebEmbed.js","path":"src/structures"}},{"name":"description","description":"The description of this embed","nullable":true,"type":[[["string"]]],"meta":{"line":85,"file":"WebEmbed.js","path":"src/structures"}},{"name":"url","description":"The URL of this embed","nullable":true,"type":[[["string"]]],"meta":{"line":91,"file":"WebEmbed.js","path":"src/structures"}},{"name":"color","description":"The color of this embed","nullable":true,"type":[[["number"]]],"meta":{"line":97,"file":"WebEmbed.js","path":"src/structures"}},{"name":"image","description":"The image of this embed, if there is one","nullable":true,"type":[[["WebEmbedImage"]]],"meta":{"line":112,"file":"WebEmbed.js","path":"src/structures"}},{"name":"thumbnail","description":"The thumbnail of this embed (if there is one)","nullable":true,"type":[[["WebEmbedThumbnail"]]],"meta":{"line":125,"file":"WebEmbed.js","path":"src/structures"}},{"name":"video","description":"The video of this embed (if there is one)","readonly":true,"nullable":true,"type":[[["WebEmbedVideo"]]],"meta":{"line":148,"file":"WebEmbed.js","path":"src/structures"}},{"name":"author","description":"The author of this embed (if there is one)","nullable":true,"type":[[["WebEmbedAuthor"]]],"meta":{"line":168,"file":"WebEmbed.js","path":"src/structures"}},{"name":"provider","description":"The provider of this embed (if there is one)","nullable":true,"type":[[["WebEmbedProvider"]]],"meta":{"line":186,"file":"WebEmbed.js","path":"src/structures"}},{"name":"redirect","description":"Redirect URL","type":[[["string"]]],"meta":{"line":197,"file":"WebEmbed.js","path":"src/structures"}}],"methods":[{"name":"_setup","access":"private","params":[{"name":"data","description":"The data for the embed","type":[[["Object"]]]}],"meta":{"line":69,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setAuthor","description":"Sets the author of this embed.","params":[{"name":"options","description":"The options to provide for the author.\nProvide `null` to remove the author data.","type":[[["string"]],[["EmbedAuthorData"]],[["null"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":211,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setProvider","description":"Sets the provider of this embed.","params":[{"name":"options","description":"The options to provide for the provider.\nProvide `null` to remove the provider data.","type":[[["string"]],[["EmbedProviderData"]],[["null"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":236,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setColor","description":"Sets the color of this embed.","params":[{"name":"color","description":"The color of the embed","type":[[["ColorResolvable"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":254,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setDescription","description":"Sets the description of this embed.","params":[{"name":"description","description":"The description (Limit 350 characters)","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":264,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setImage","description":"Sets the image of this embed.","params":[{"name":"url","description":"The URL of the image","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":274,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setThumbnail","description":"Sets the thumbnail of this embed.","params":[{"name":"url","description":"The URL of the image","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":289,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setVideo","description":"Sets the video of this embed.","params":[{"name":"url","description":"The URL of the video","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":304,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setTitle","description":"Sets the title of this embed.","params":[{"name":"title","description":"The title","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":314,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setURL","description":"Sets the URL of this embed.","params":[{"name":"url","description":"The URL","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":324,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setRedirect","description":"Sets the redirect URL of this embed.","params":[{"name":"url","description":"The URL","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":334,"file":"WebEmbed.js","path":"src/structures"}},{"name":"toMessage","description":"Return Message Content + Embed (if hidden, pls check content length because it has 1000+ length)","async":true,"returns":{"types":[[["string"]]],"description":"Message Content"},"meta":{"line":389,"file":"WebEmbed.js","path":"src/structures"}}],"meta":{"line":13,"file":"WebEmbed.js","path":"src/structures"}},{"name":"Webhook","description":"Represents a webhook.","props":[{"name":"client","description":"The client that instantiated the webhook","readonly":true,"type":[[["Client"]]],"meta":{"line":17,"file":"Webhook.js","path":"src/structures"}},{"name":"name","description":"The name of the webhook","type":[[["string"]]],"meta":{"line":33,"file":"Webhook.js","path":"src/structures"}},{"name":"token","description":"The token for the webhook, unavailable for follower webhooks and webhooks owned by another application.","nullable":true,"type":[[["string"]]],"meta":{"line":36,"file":"Webhook.js","path":"src/structures"}},{"name":"avatar","description":"The avatar for the webhook","nullable":true,"type":[[["string"]]],"meta":{"line":48,"file":"Webhook.js","path":"src/structures"}},{"name":"id","description":"The webhook's id","type":[[["Snowflake"]]],"meta":{"line":55,"file":"Webhook.js","path":"src/structures"}},{"name":"type","description":"The type of the webhook","type":[[["WebhookType"]]],"meta":{"line":62,"file":"Webhook.js","path":"src/structures"}},{"name":"guildId","description":"The guild the webhook belongs to","type":[[["Snowflake"]]],"meta":{"line":70,"file":"Webhook.js","path":"src/structures"}},{"name":"channelId","description":"The channel the webhook belongs to","type":[[["Snowflake"]]],"meta":{"line":78,"file":"Webhook.js","path":"src/structures"}},{"name":"owner","description":"The owner of the webhook","nullable":true,"type":[[["User"]],[["APIUser"]]],"meta":{"line":86,"file":"Webhook.js","path":"src/structures"}},{"name":"sourceGuild","description":"The source guild of the webhook","nullable":true,"type":[[["Guild"]],[["APIGuild"]]],"meta":{"line":96,"file":"Webhook.js","path":"src/structures"}},{"name":"sourceChannel","description":"The source channel of the webhook","nullable":true,"type":[[["NewsChannel"]],[["APIChannel"]]],"meta":{"line":106,"file":"Webhook.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the webhook was created at","readonly":true,"type":[[["number"]]],"meta":{"line":394,"file":"Webhook.js","path":"src/structures"}},{"name":"createdAt","description":"The time the webhook was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":403,"file":"Webhook.js","path":"src/structures"}},{"name":"url","description":"The URL of this webhook","readonly":true,"type":[[["string"]]],"meta":{"line":412,"file":"Webhook.js","path":"src/structures"}}],"methods":[{"name":"send","description":"Sends a message with this webhook.","examples":["// Send a basic message\nwebhook.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a basic message in a thread\nwebhook.send({ content: 'hello!', threadId: '836856309672348295' })\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nwebhook.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nwebhook.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg'\n }]\n})\n .then(console.log)\n .catch(console.error);","// Send an embed with a local image inside\nwebhook.send({\n content: 'This is an embed',\n embeds: [{\n thumbnail: {\n url: 'attachment://file.jpg'\n }\n }],\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["WebhookMessageOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":185,"file":"Webhook.js","path":"src/structures"}},{"name":"sendSlackMessage","description":"Sends a raw slack message with this webhook.","see":["{@link https://api.slack.com/messaging/webhooks}"],"examples":["// Send a slack message\nwebhook.sendSlackMessage({\n 'username': 'Wumpus',\n 'attachments': [{\n 'pretext': 'this looks pretty cool',\n 'color': '#F0F',\n 'footer_icon': 'http://snek.s3.amazonaws.com/topSnek.png',\n 'footer': 'Powered by sneks',\n 'ts': Date.now() / 1_000\n }]\n}).catch(console.error);"],"params":[{"name":"body","description":"The raw body to send","type":[[["Object"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":225,"file":"Webhook.js","path":"src/structures"}},{"name":"edit","description":"Edits this webhook.","params":[{"name":"options","description":"Options for editing the webhook","type":[[["WebhookEditData"]]]},{"name":"reason","description":"Reason for editing the webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Webhook",">"]]],"meta":{"line":252,"file":"Webhook.js","path":"src/structures"}},{"name":"fetchMessage","description":"Gets a message that was sent by this webhook.","params":[{"name":"message","description":"The id of the message to fetch","type":[[["Snowflake"]],[["original","'"]]]},{"name":"cacheOrOptions","description":"The options to provide to fetch the message.\nA **deprecated** boolean may be passed instead to specify whether to cache the message.","optional":true,"default":"{}","type":[[["WebhookFetchMessageOptions"]],[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"description":"Returns the raw message data if the webhook was instantiated as a\n{@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned"},"meta":{"line":286,"file":"Webhook.js","path":"src/structures"}},{"name":"editMessage","description":"Edits a message that was sent by this webhook.","params":[{"name":"message","description":"The message to edit","type":[[["MessageResolvable"]],[["original","'"]]]},{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["WebhookEditMessageOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"description":"Returns the raw message data if the webhook was instantiated as a\n{@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned"},"meta":{"line":322,"file":"Webhook.js","path":"src/structures"}},{"name":"delete","description":"Deletes the webhook.","params":[{"name":"reason","description":"Reason for deleting this webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":364,"file":"Webhook.js","path":"src/structures"}},{"name":"deleteMessage","description":"Delete a message that was sent by this webhook.","params":[{"name":"message","description":"The message to delete","type":[[["MessageResolvable"]],[["original","'"]]]},{"name":"threadId","description":"The id of the thread this message belongs to","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":374,"file":"Webhook.js","path":"src/structures"}},{"name":"avatarURL","description":"A link to the webhook's avatar.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":421,"file":"Webhook.js","path":"src/structures"}},{"name":"isChannelFollower","description":"Whether or not this webhook is a channel follower webhook.","returns":[[["boolean"]]],"meta":{"line":430,"file":"Webhook.js","path":"src/structures"}},{"name":"isIncoming","description":"Whether or not this webhook is an incoming webhook.","returns":[[["boolean"]]],"meta":{"line":438,"file":"Webhook.js","path":"src/structures"}}],"meta":{"line":15,"file":"Webhook.js","path":"src/structures"}},{"name":"WelcomeChannel","description":"Represents a channel link in a guild's welcome screen.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild for this welcome channel","type":[[["Guild"]],[["InviteGuild"]]],"meta":{"line":18,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"description","description":"The description of this welcome channel","type":[[["string"]]],"meta":{"line":24,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"_emoji","description":"The raw emoji data","access":"private","type":[[["Object"]]],"meta":{"line":31,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"channelId","description":"The id of this welcome channel","type":[[["Snowflake"]]],"meta":{"line":40,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"channel","description":"The channel of this welcome channel","nullable":true,"type":[[["TextChannel"]],[["NewsChannel"]],[["StoreChannel"]],[["ForumChannel"]]],"meta":{"line":47,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"emoji","description":"The emoji of this welcome channel","type":[[["GuildEmoji"]],[["Emoji"]]],"meta":{"line":55,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"meta":{"line":10,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"WelcomeScreen","description":"Represents a welcome screen.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild for this welcome screen","type":[[["Guild"]]],"meta":{"line":19,"file":"WelcomeScreen.js","path":"src/structures"}},{"name":"description","description":"The description of this welcome screen","nullable":true,"type":[[["string"]]],"meta":{"line":25,"file":"WelcomeScreen.js","path":"src/structures"}},{"name":"welcomeChannels","description":"Collection of welcome channels belonging to this welcome screen","type":[[["Collection","<"],["Snowflake",", "],["WelcomeChannel",">"]]],"meta":{"line":31,"file":"WelcomeScreen.js","path":"src/structures"}},{"name":"enabled","description":"Whether the welcome screen is enabled on the guild or not","type":[[["boolean"]]],"meta":{"line":43,"file":"WelcomeScreen.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"meta":{"line":11,"file":"WelcomeScreen.js","path":"src/structures"}},{"name":"Widget","description":"Represents a Widget.","extends":[[["Base"]]],"props":[{"name":"id","description":"The id of the guild.","type":[[["Snowflake"]]],"meta":{"line":30,"file":"Widget.js","path":"src/structures"}},{"name":"name","description":"The name of the guild.","type":[[["string"]]],"meta":{"line":37,"file":"Widget.js","path":"src/structures"}},{"name":"instantInvite","description":"The invite of the guild.","nullable":true,"type":[[["string"]]],"meta":{"line":45,"file":"Widget.js","path":"src/structures"}},{"name":"channels","description":"The list of channels in the guild.","type":[[["Collection","<"],["Snowflake",", "],["WidgetChannel",">"]]],"meta":{"line":52,"file":"Widget.js","path":"src/structures"}},{"name":"members","description":"The list of members in the guild.\nThese strings are just arbitrary numbers, they aren't Snowflakes.","type":[[["Collection","<"],["string",", "],["WidgetMember",">"]]],"meta":{"line":62,"file":"Widget.js","path":"src/structures"}},{"name":"presenceCount","description":"The number of members online.","type":[[["number"]]],"meta":{"line":72,"file":"Widget.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"fetch","description":"Update the Widget.","async":true,"returns":[[["Promise","<"],["Widget",">"]]],"meta":{"line":80,"file":"Widget.js","path":"src/structures"}}],"meta":{"line":11,"file":"Widget.js","path":"src/structures"}},{"name":"WidgetMember","description":"Represents a WidgetMember.","extends":[[["Base"]]],"props":[{"name":"id","description":"The id of the user. It's an arbitrary number.","type":[[["string"]]],"meta":{"line":23,"file":"WidgetMember.js","path":"src/structures"}},{"name":"username","description":"The username of the member.","type":[[["string"]]],"meta":{"line":29,"file":"WidgetMember.js","path":"src/structures"}},{"name":"discriminator","description":"The discriminator of the member.","type":[[["string"]]],"meta":{"line":35,"file":"WidgetMember.js","path":"src/structures"}},{"name":"avatar","description":"The avatar of the member.","nullable":true,"type":[[["string"]]],"meta":{"line":41,"file":"WidgetMember.js","path":"src/structures"}},{"name":"status","description":"The status of the member.","type":[[["PresenceStatus"]]],"meta":{"line":47,"file":"WidgetMember.js","path":"src/structures"}},{"name":"deaf","description":"If the member is server deafened","nullable":true,"type":[[["boolean"]]],"meta":{"line":53,"file":"WidgetMember.js","path":"src/structures"}},{"name":"mute","description":"If the member is server muted","nullable":true,"type":[[["boolean"]]],"meta":{"line":59,"file":"WidgetMember.js","path":"src/structures"}},{"name":"selfDeaf","description":"If the member is self deafened","nullable":true,"type":[[["boolean"]]],"meta":{"line":65,"file":"WidgetMember.js","path":"src/structures"}},{"name":"selfMute","description":"If the member is self muted","nullable":true,"type":[[["boolean"]]],"meta":{"line":71,"file":"WidgetMember.js","path":"src/structures"}},{"name":"suppress","description":"If the member is suppressed","nullable":true,"type":[[["boolean"]]],"meta":{"line":77,"file":"WidgetMember.js","path":"src/structures"}},{"name":"channelId","description":"The id of the voice channel the member is in, if any","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":83,"file":"WidgetMember.js","path":"src/structures"}},{"name":"avatarURL","description":"The avatar URL of the member.","type":[[["string"]]],"meta":{"line":89,"file":"WidgetMember.js","path":"src/structures"}},{"name":"activity","description":"The activity of the member.","nullable":true,"type":[[["WidgetActivity"]]],"meta":{"line":95,"file":"WidgetMember.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"meta":{"line":9,"file":"WidgetMember.js","path":"src/structures"}},{"name":"ActivityFlags","description":"Data structure that makes it easy to interact with an {@link Activity#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"ActivityFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric activity flags. All available properties:\n* `INSTANCE`\n* `JOIN`\n* `SPECTATE`\n* `JOIN_REQUEST`\n* `SYNC`\n* `PLAY`\n* `PARTY_PRIVACY_FRIENDS`\n* `PARTY_PRIVACY_VOICE_CHANNEL`\n* `EMBEDDED`","see":["{@link https://discord.com/developers/docs/topics/gateway-events#activity-object-activity-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":32,"file":"ActivityFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"ActivityFlags.js","path":"src/util"}},{"name":"ApplicationFlags","description":"Data structure that makes it easy to interact with a {@link ClientApplication#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"ApplicationFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]]],"meta":{"line":18,"file":"ApplicationFlags.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric application flags. All available properties:\n* `EMBEDDED_RELEASED`\n* `MANAGED_EMOJI`\n* `GROUP_DM_CREATE`\n* `RPC_PRIVATE_BETA`\n* `APPLICATION_AUTO_MODERATION_RULE_CREATE_BADGE`\n* `ALLOW_ASSETS`\n* `ALLOW_ACTIVITY_ACTION_SPECTATE`\n* `ALLOW_ACTIVITY_ACTION_JOIN_REQUEST`\n* `RPC_HAS_CONNECTED`\n* `GATEWAY_PRESENCE`\n* `GATEWAY_PRESENCE_LIMITED`\n* `GATEWAY_GUILD_MEMBERS`\n* `GATEWAY_GUILD_MEMBERS_LIMITED`\n* `VERIFICATION_PENDING_GUILD_LIMIT`\n* `EMBEDDED`\n* `GATEWAY_MESSAGE_CONTENT`\n* `GATEWAY_MESSAGE_CONTENT_LIMITED`\n* `EMBEDDED_FIRST_PARTY`\n* `APPLICATION_COMMAND_BADGE`\n* `ACTIVE`\n* `IFRAME_MODAL`","see":["{@link https://discord.com/developers/docs/resources/application#application-object-application-flags}","{@link https://flags.lewistehminerz.dev/}"],"scope":"static","type":[[["Object"]]],"meta":{"line":51,"file":"ApplicationFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"ApplicationFlags.js","path":"src/util"}},{"name":"AttachmentFlags","description":"Data structure that makes it easy to interact with an {@link GuildMember#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"AttachmentFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric guild member flags. All available properties:\n* `IS_REMIX`","see":["{@link https://discord.com/developers/docs/resources/channel#attachment-object-attachment-structure-attachment-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":25,"file":"AttachmentFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"AttachmentFlags.js","path":"src/util"}},{"name":"BitField","description":"Data structure that makes it easy to interact with a bitfield.","construct":{"name":"BitField","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":"this.constructor.defaultBit","type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric bitfield flags.\nDefined in extension classes","scope":"static","abstract":true,"type":[[["Object"]]],"meta":{"line":162,"file":"BitField.js","path":"src/util"}},{"name":"defaultBit","scope":"static","access":"private","type":[[["number"]],[["bigint"]]],"meta":{"line":168,"file":"BitField.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}},{"name":"resolve","description":"Resolves bitfields to their numeric form.","scope":"static","params":[{"name":"bit","description":"bit(s) to resolve","optional":true,"type":[[["BitFieldResolvable"]]]}],"returns":[[["number"]],[["bigint"]]],"meta":{"line":143,"file":"BitField.js","path":"src/util"}}],"meta":{"line":8,"file":"BitField.js","path":"src/util"}},{"name":"ChannelFlags","description":"Data structure that makes it easy to interact with a {@link Channel#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"ChannelFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]]],"meta":{"line":30,"file":"ChannelFlags.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric guild channel flags. All available properties:\n* `PINNED`\n* `REQUIRE_TAG`","see":["{@link https://discord.com/developers/docs/resources/channel#channel-object-channel-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":18,"file":"ChannelFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"ChannelFlags.js","path":"src/util"}},{"name":"DataResolver","description":"The DataResolver identifies different objects and tries to resolve a specific piece of information from them.","access":"private","methods":[{"name":"resolveCode","description":"Resolves the string to a code based on the passed regex.","scope":"static","params":[{"name":"data","description":"The string to resolve","type":[[["string"]]]},{"name":"regex","description":"The RegExp used to extract the code","type":[[["RegExp"]]]}],"returns":[[["string"]]],"meta":{"line":36,"file":"DataResolver.js","path":"src/util"}},{"name":"resolveInviteCode","description":"Resolves InviteResolvable to an invite code.","scope":"static","params":[{"name":"data","description":"The invite resolvable to resolve","type":[[["InviteResolvable"]]]}],"returns":[[["string"]]],"meta":{"line":45,"file":"DataResolver.js","path":"src/util"}},{"name":"resolveGuildTemplateCode","description":"Resolves GuildTemplateResolvable to a template code.","scope":"static","params":[{"name":"data","description":"The template resolvable to resolve","type":[[["GuildTemplateResolvable"]]]}],"returns":[[["string"]]],"meta":{"line":54,"file":"DataResolver.js","path":"src/util"}},{"name":"resolveImage","description":"Resolves a Base64Resolvable, a string, or a BufferResolvable to a Base 64 image.","scope":"static","params":[{"name":"image","description":"The image to be resolved","type":[[["BufferResolvable"]],[["Base64Resolvable"]]]}],"async":true,"returns":[[["Promise",""]]],"meta":{"line":64,"file":"DataResolver.js","path":"src/util"}},{"name":"resolveBase64","description":"Resolves a Base64Resolvable to a Base 64 image.","scope":"static","params":[{"name":"data","description":"The base 64 resolvable you want to resolve","type":[[["Base64Resolvable"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":85,"file":"DataResolver.js","path":"src/util"}},{"name":"resolveFile","description":"Resolves a BufferResolvable to a Buffer or a Stream.","scope":"static","params":[{"name":"resource","description":"The buffer or stream resolvable to resolve","type":[[["BufferResolvable"]],[["Stream"]]]}],"async":true,"returns":[[["Promise","<("],["Buffer","|"],["Stream",")>"]]],"meta":{"line":109,"file":"DataResolver.js","path":"src/util"}},{"name":"resolveFileAsBuffer","description":"Resolves a BufferResolvable to a Buffer.","scope":"static","params":[{"name":"resource","description":"The buffer or stream resolvable to resolve","type":[[["BufferResolvable"]],[["Stream"]]]}],"async":true,"returns":[[["Promise","<"],["Buffer",">"]]],"meta":{"line":135,"file":"DataResolver.js","path":"src/util"}}],"meta":{"line":15,"file":"DataResolver.js","path":"src/util"}},{"name":"Formatters","description":"Contains various Discord-specific functions for formatting messages.","props":[{"name":"TimestampStyles","description":"The message formatting timestamp\n[styles](https://discord.com/developers/docs/reference#message-formatting-timestamp-styles) supported by Discord.","scope":"static","type":[[["Object","<"],["string",", "],["TimestampStylesString",">"]]],"meta":{"line":194,"file":"Formatters.js","path":"src/util"}}],"methods":[{"name":"blockQuote","description":"Formats the content into a block quote. This needs to be at the start of the line for Discord to format it.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":29,"file":"Formatters.js","path":"src/util"}},{"name":"bold","description":"Formats the content into bold text.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":38,"file":"Formatters.js","path":"src/util"}},{"name":"channelMention","description":"Formats a channel id into a channel mention.","scope":"static","params":[{"name":"channelId","description":"The channel id to format.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":47,"file":"Formatters.js","path":"src/util"}},{"name":"chatInputApplicationCommandMention","description":"Formats an application command name, subcommand group name, subcommand name, and ID\ninto an application command mention","scope":"static","params":[{"name":"commandName","description":"The name of the application command","type":[[["string"]]]},{"name":"subcommandGroupOrSubOrId","description":"The subcommand group name, subcommand name, or application command id","type":[[["string"]],[["Snowflake"]]]},{"name":"subcommandNameOrId","description":"The subcommand name or application command id","optional":true,"nullable":true,"type":[[["string"]],[["Snowflake"]]]},{"name":"commandId","description":"The id of the application command","optional":true,"nullable":true,"type":[[["Snowflake"]]]}],"returns":[[["string"]]],"meta":{"line":56,"file":"Formatters.js","path":"src/util"}},{"name":"codeBlock","description":"Wraps the content inside a code block with an optional language.","scope":"static","params":[{"name":"contentOrLanguage","description":"The language to use, content if a second parameter isn't provided.","type":[[["string"]]]},{"name":"content","description":"The content to wrap.","optional":true,"type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":71,"file":"Formatters.js","path":"src/util"}},{"name":"formatEmoji","description":"Formats an emoji id into a fully qualified emoji identifier","scope":"static","params":[{"name":"emojiId","description":"The emoji id to format.","type":[[["string"]]]},{"name":"animated","description":"Whether the emoji is animated or not. Defaults to `false`","optional":true,"type":[[["boolean"]]]}],"returns":[[["string"]]],"meta":{"line":81,"file":"Formatters.js","path":"src/util"}},{"name":"hideLinkEmbed","description":"Wraps the URL into `<>`, which stops it from embedding.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":91,"file":"Formatters.js","path":"src/util"}},{"name":"hyperlink","description":"Formats the content and the URL into a masked URL with an optional title.","scope":"static","params":[{"name":"content","description":"The content to display.","type":[[["string"]]]},{"name":"url","description":"The URL the content links to.","type":[[["string"]]]},{"name":"title","description":"The title shown when hovering on the masked link.","optional":true,"type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":100,"file":"Formatters.js","path":"src/util"}},{"name":"inlineCode","description":"Wraps the content inside \\`backticks\\`, which formats it as inline code.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":111,"file":"Formatters.js","path":"src/util"}},{"name":"italic","description":"Formats the content into italic text.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":120,"file":"Formatters.js","path":"src/util"}},{"name":"quote","description":"Formats the content into a quote. This needs to be at the start of the line for Discord to format it.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":129,"file":"Formatters.js","path":"src/util"}},{"name":"roleMention","description":"Formats a role id into a role mention.","scope":"static","params":[{"name":"roleId","description":"The role id to format.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":138,"file":"Formatters.js","path":"src/util"}},{"name":"spoiler","description":"Formats the content into spoiler text.","scope":"static","params":[{"name":"content","description":"The content to spoiler.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":147,"file":"Formatters.js","path":"src/util"}},{"name":"strikethrough","description":"Formats the content into strike-through text.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":156,"file":"Formatters.js","path":"src/util"}},{"name":"time","description":"Formats a date into a short date-time string.","scope":"static","params":[{"name":"date","description":"The date to format.","optional":true,"type":[[["number"]],[["Date"]]]},{"name":"style","description":"The style to use.","optional":true,"type":[[["TimestampStylesString"]]]}],"returns":[[["string"]]],"meta":{"line":165,"file":"Formatters.js","path":"src/util"}},{"name":"underscore","description":"Formats the content into underscored text.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":196,"file":"Formatters.js","path":"src/util"}},{"name":"userMention","description":"Formats a user id into a user mention.","scope":"static","params":[{"name":"userId","description":"The user id to format.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":205,"file":"Formatters.js","path":"src/util"}}],"meta":{"line":27,"file":"Formatters.js","path":"src/util"}},{"name":"GuildMemberFlags","description":"Data structure that makes it easy to interact with an {@link GuildMember#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"GuildMemberFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric guild member flags. All available properties:\n* `DID_REJOIN`\n* `COMPLETED_ONBOARDING`\n* `BYPASSES_VERIFICATION`\n* `STARTED_ONBOARDING`","see":["{@link https://discord.com/developers/docs/resources/guild#guild-member-object-guild-member-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":27,"file":"GuildMemberFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"GuildMemberFlags.js","path":"src/util"}},{"name":"Intents","description":"Data structure that makes it easy to calculate intents.","extends":[[["BitField"]]],"construct":{"name":"Intents","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["IntentsResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric WebSocket intents. All available properties:\n* `GUILDS`\n* `GUILD_MEMBERS`\n* `GUILD_BANS`\n* `GUILD_EMOJIS_AND_STICKERS`\n* `GUILD_INTEGRATIONS`\n* `GUILD_WEBHOOKS`\n* `GUILD_INVITES`\n* `GUILD_VOICE_STATES`\n* `GUILD_PRESENCES`\n* `GUILD_MESSAGES`\n* `GUILD_MESSAGE_REACTIONS`\n* `GUILD_MESSAGE_TYPING`\n* `DIRECT_MESSAGES`\n* `DIRECT_MESSAGE_REACTIONS`\n* `DIRECT_MESSAGE_TYPING`\n* `MESSAGE_CONTENT`\n* `GUILD_SCHEDULED_EVENTS`\n* `AUTO_MODERATION_CONFIGURATION`\n* `AUTO_MODERATION_EXECUTION`","see":["{@link https://discord.com/developers/docs/topics/gateway#list-of-intents}"],"scope":"static","type":[[["Object"]]],"meta":{"line":50,"file":"Intents.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":8,"file":"Intents.js","path":"src/util"}},{"name":"LimitedCollection","description":"A Collection which holds a max amount of entries and sweeps periodically.","extends":[[["Collection"]]],"construct":{"name":"LimitedCollection","params":[{"name":"options","description":"Options for constructing the Collection.","optional":true,"default":"{}","type":[[["LimitedCollectionOptions"]]]},{"name":"iterable","description":"Optional entries passed to the Map constructor.","optional":true,"default":null,"type":[[["Iterable"]]]}]},"props":[{"name":"maxSize","description":"The max size of the Collection.","type":[[["number"]]],"meta":{"line":63,"file":"LimitedCollection.js","path":"src/util"}},{"name":"keepOverLimit","description":"A function called to check if an entry should be kept when the Collection is at max size.","nullable":true,"type":[[["function"]]],"meta":{"line":69,"file":"LimitedCollection.js","path":"src/util"}},{"name":"sweepFilter","description":"A function called every sweep interval that returns a function passed to `sweep`.","nullable":true,"deprecated":"in favor of {@link Client#sweepers}","type":[[["SweepFilter"]]],"meta":{"line":76,"file":"LimitedCollection.js","path":"src/util"}},{"name":"interval","description":"The id of the interval being used to sweep.","nullable":true,"deprecated":"in favor of {@link Client#sweepers}","type":[[["Timeout"]]],"meta":{"line":83,"file":"LimitedCollection.js","path":"src/util"}}],"methods":[{"name":"filterByLifetime","description":"Create a sweepFilter function that uses a lifetime to determine sweepability.","scope":"static","deprecated":"Use {@link Sweepers.filterByLifetime} instead","params":[{"name":"options","description":"The options used to generate the filter function","optional":true,"default":"{}","type":[[["LifetimeFilterOptions"]]]}],"returns":[[["SweepFilter"]]],"meta":{"line":114,"file":"LimitedCollection.js","path":"src/util"}}],"meta":{"line":37,"file":"LimitedCollection.js","path":"src/util"}},{"name":"MessageFlags","description":"Data structure that makes it easy to interact with a {@link Message#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"MessageFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]]],"meta":{"line":18,"file":"MessageFlags.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric message flags. All available properties:\n* `CROSSPOSTED`\n* `IS_CROSSPOST`\n* `SUPPRESS_EMBEDS`\n* `SOURCE_MESSAGE_DELETED`\n* `URGENT`\n* `HAS_THREAD`\n* `EPHEMERAL`\n* `LOADING`\n* `FAILED_TO_MENTION_SOME_ROLES_IN_THREAD`\n* `SUPPRESS_NOTIFICATIONS`\n* `IS_VOICE_MESSAGE`","see":["{@link https://discord.com/developers/docs/resources/channel#message-object-message-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":40,"file":"MessageFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"MessageFlags.js","path":"src/util"}},{"name":"Options","description":"Contains various utilities for client options.","props":[{"name":"defaultMakeCacheSettings","description":"The default settings passed to {@link ClientOptions.makeCache}.\nThe caches that this changes are:\n* `MessageManager` - Limit to 200 messages\n* `ChannelManager` - Sweep archived threads\n* `GuildChannelManager` - Sweep archived threads\n* `ThreadManager` - Sweep archived threads\nIf you want to keep default behavior and add on top of it you can use this object and add on to it, e.g.\n`makeCache: Options.cacheWithLimits({ ...Options.defaultMakeCacheSettings, ReactionManager: 0 })`","scope":"static","type":[[["Object","<"],["string",", ("],["LimitedCollectionOptions","|"],["number",")>"]]],"meta":{"line":328,"file":"Options.js","path":"src/util"}},{"name":"defaultSweeperSettings","description":"The default settings passed to {@link ClientOptions.sweepers}.\nThe sweepers that this changes are:\n* `threads` - Sweep archived threads every hour, removing those archived more than 4 hours ago\nIf you want to keep default behavior and add on top of it you can use this object and add on to it, e.g.\n`sweepers: { ...Options.defaultSweeperSettings, messages: { interval: 300, lifetime: 600 } }`","scope":"static","type":[[["SweeperOptions"]]],"meta":{"line":357,"file":"Options.js","path":"src/util"}}],"methods":[{"name":"createDefault","description":"The default client options.","scope":"static","returns":[[["ClientOptions"]]],"meta":{"line":159,"file":"Options.js","path":"src/util"}},{"name":"cacheWithLimits","description":"Create a cache factory using predefined settings to sweep or limit.","scope":"static","examples":["// Store up to 200 messages per channel and discard archived threads if they were archived more than 4 hours ago.\n// Note archived threads will remain in the guild and client caches with these settings\nOptions.cacheWithLimits({\n MessageManager: 200,\n ThreadManager: {\n sweepInterval: 3600,\n sweepFilter: LimitedCollection.filterByLifetime({\n getComparisonTimestamp: e => e.archiveTimestamp,\n excludeFromSweep: e => !e.archived,\n }),\n },\n });","// Sweep messages every 5 minutes, removing messages that have not been edited or created in the last 30 minutes\nOptions.cacheWithLimits({\n // Keep default thread sweeping behavior\n ...Options.defaultMakeCacheSettings,\n // Override MessageManager\n MessageManager: {\n sweepInterval: 300,\n sweepFilter: LimitedCollection.filterByLifetime({\n lifetime: 1800,\n getComparisonTimestamp: e => e.editedTimestamp ?? e.createdTimestamp,\n })\n }\n});"],"params":[{"name":"settings","description":"Settings passed to the relevant constructor.\nIf no setting is provided for a manager, it uses Collection.\nIf a number is provided for a manager, it uses that number as the max size for a LimitedCollection.\nIf LimitedCollectionOptions are provided for a manager, it uses those settings to form a LimitedCollection.","optional":true,"default":"{}","type":[[["Object","<"],["string",", ("],["LimitedCollectionOptions","|"],["number",")>"]]]}],"returns":[[["CacheFactory"]]],"meta":{"line":277,"file":"Options.js","path":"src/util"}},{"name":"cacheEverything","description":"Create a cache factory that always caches everything.","scope":"static","returns":[[["CacheFactory"]]],"meta":{"line":312,"file":"Options.js","path":"src/util"}}],"meta":{"line":154,"file":"Options.js","path":"src/util"}},{"name":"Permissions","description":"Data structure that makes it easy to interact with a permission bitfield. All {@link GuildMember}s have a set of\npermissions in their guild, and each channel in the guild may also have {@link PermissionOverwrites} for the member\nthat override their default permissions.","extends":[[["BitField"]]],"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["bigint"]]],"meta":{"line":12,"file":"Permissions.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric permission flags. All available properties:\n* `CREATE_INSTANT_INVITE` (create invitations to the guild)\n* `KICK_MEMBERS`\n* `BAN_MEMBERS`\n* `ADMINISTRATOR` (implicitly has *all* permissions, and bypasses all channel overwrites)\n* `MANAGE_CHANNELS` (edit and reorder channels)\n* `MANAGE_GUILD` (edit the guild information, region, etc.)\n* `ADD_REACTIONS` (add new reactions to messages)\n* `VIEW_AUDIT_LOG`\n* `PRIORITY_SPEAKER`\n* `STREAM`\n* `VIEW_CHANNEL`\n* `SEND_MESSAGES`\n* `SEND_TTS_MESSAGES`\n* `MANAGE_MESSAGES` (delete messages and reactions)\n* `EMBED_LINKS` (links posted will have a preview embedded)\n* `ATTACH_FILES`\n* `READ_MESSAGE_HISTORY` (view messages that were posted prior to opening Discord)\n* `MENTION_EVERYONE`\n* `USE_EXTERNAL_EMOJIS` (use emojis from different guilds)\n* `VIEW_GUILD_INSIGHTS`\n* `CONNECT` (connect to a voice channel)\n* `SPEAK` (speak in a voice channel)\n* `MUTE_MEMBERS` (mute members across all voice channels)\n* `DEAFEN_MEMBERS` (deafen members across all voice channels)\n* `MOVE_MEMBERS` (move members between voice channels)\n* `USE_VAD` (use voice activity detection)\n* `CHANGE_NICKNAME`\n* `MANAGE_NICKNAMES` (change other members' nicknames)\n* `MANAGE_ROLES`\n* `MANAGE_WEBHOOKS`\n* `MANAGE_EMOJIS_AND_STICKERS`\n* `USE_APPLICATION_COMMANDS`\n* `REQUEST_TO_SPEAK`\n* `MANAGE_EVENTS`\n* `MANAGE_THREADS`\n* `USE_PUBLIC_THREADS` (deprecated)\n* `CREATE_PUBLIC_THREADS`\n* `USE_PRIVATE_THREADS` (deprecated)\n* `CREATE_PRIVATE_THREADS`\n* `USE_EXTERNAL_STICKERS` (use stickers from different guilds)\n* `SEND_MESSAGES_IN_THREADS`\n* `START_EMBEDDED_ACTIVITIES`\n* `MODERATE_MEMBERS`\n* `VIEW_CREATOR_MONETIZATION_ANALYTICS`\n* `USE_SOUNDBOARD`","see":["{@link https://discord.com/developers/docs/topics/permissions#permissions-bitwise-permission-flags}"],"scope":"static","type":[[["Object","<"],["string",", "],["bigint",">"]]],"meta":{"line":116,"file":"Permissions.js","path":"src/util"}},{"name":"ALL","description":"Bitfield representing every permission combined","scope":"static","type":[[["bigint"]]],"meta":{"line":170,"file":"Permissions.js","path":"src/util"}},{"name":"DEFAULT","description":"Bitfield representing the default permissions for users","scope":"static","type":[[["bigint"]]],"meta":{"line":176,"file":"Permissions.js","path":"src/util"}},{"name":"STAGE_MODERATOR","description":"Bitfield representing the permissions required for moderators of stage channels","scope":"static","type":[[["bigint"]]],"meta":{"line":182,"file":"Permissions.js","path":"src/util"}}],"methods":[{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"checkAdmin","description":"Whether to allow the administrator permission to override","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":33,"file":"Permissions.js","path":"src/util"}},{"name":"any","description":"Checks whether the bitfield has a permission, or any of multiple permissions.","params":[{"name":"permission","description":"Permission(s) to check for","type":[[["PermissionResolvable"]]]},{"name":"checkAdmin","description":"Whether to allow the administrator permission to override","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"Permissions.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a permission, or multiple permissions.","params":[{"name":"permission","description":"Permission(s) to check for","type":[[["PermissionResolvable"]]]},{"name":"checkAdmin","description":"Whether to allow the administrator permission to override","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["boolean"]]],"meta":{"line":53,"file":"Permissions.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the permissions available.","returns":[[["Array","<"],["string",">"]]],"meta":{"line":61,"file":"Permissions.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}}],"meta":{"line":11,"file":"Permissions.js","path":"src/util"}},{"name":"PremiumUsageFlags","description":"Data structure that makes it easy to interact with an {@link PremiumUsageFlags#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"PremiumUsageFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric the Discord premium usage flags. All available properties:\n* `PREMIUM_DISCRIMINATOR`\n* `ANIMATED_AVATAR`\n* `PROFILE_BANNER`","scope":"static","type":[[["Object"]]],"meta":{"line":25,"file":"PremiumUsageFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"PremiumUsageFlags.js","path":"src/util"}},{"name":"PurchasedFlags","description":"Data structure that makes it easy to interact with an {@link PurchasedFlags#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"PurchasedFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric the Discord purchased flags. All available properties:\n* `NITRO_CLASSIC`\n* `NITRO`\n* `GUILD_BOOST`","scope":"static","type":[[["Object"]]],"meta":{"line":25,"file":"PurchasedFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"PurchasedFlags.js","path":"src/util"}},{"name":"DiscordAuthWebsocket","description":"Discord Auth QR (Discord.RemoteAuth will be removed in the future, v13.9.0 release)","extends":[[["EventEmitter"]]],"abstract":true,"construct":{"name":"DiscordAuthWebsocket","description":"Creates a new DiscordAuthWebsocket instance.","params":[{"name":"options","description":"Options","nullable":true,"type":[[["DiscordAuthWebsocketOptions"]]]}]},"props":[{"name":"ws","description":"WebSocket","nullable":true,"type":[[["WebSocket"]]],"meta":{"line":74,"file":"RemoteAuth.js","path":"src/util"}},{"name":"heartbeatInterval","description":"Heartbeat Interval","nullable":true,"type":[[["number"]]],"meta":{"line":79,"file":"RemoteAuth.js","path":"src/util"}},{"name":"user","description":"User (Scan QR Code)","nullable":true,"type":[[["Object"]]],"meta":{"line":86,"file":"RemoteAuth.js","path":"src/util"}},{"name":"token","description":"Temporary Token (Scan QR Code)","nullable":true,"type":[[["string"]]],"meta":{"line":91,"file":"RemoteAuth.js","path":"src/util"}},{"name":"realToken","description":"Real Token (Login)","nullable":true,"type":[[["string"]]],"meta":{"line":96,"file":"RemoteAuth.js","path":"src/util"}},{"name":"fingerprint","description":"Fingerprint (QR Code)","nullable":true,"type":[[["string"]]],"meta":{"line":101,"file":"RemoteAuth.js","path":"src/util"}},{"name":"captchaCache","description":"Captcha Cache","nullable":true,"type":[[["Captcha"]]],"meta":{"line":132,"file":"RemoteAuth.js","path":"src/util"}},{"name":"exprireTime","description":"Get expire time","readonly":true,"type":[[["string"]]],"meta":{"line":143,"file":"RemoteAuth.js","path":"src/util"}},{"name":"options","description":"Options","nullable":true,"type":[[["DiscordAuthWebsocketOptions"]]],"meta":{"line":151,"file":"RemoteAuth.js","path":"src/util"}}],"methods":[{"name":"captchaSolver","description":"Captcha Handler","params":[{"name":"data","description":"hcaptcha data","type":[[["Captcha"]]]}],"returns":{"types":[[["Promise","<"],["string",">"]]],"description":"Captcha token"},"meta":{"line":110,"file":"RemoteAuth.js","path":"src/util"}},{"name":"connect","description":"Connect to DiscordAuthWebsocket.","params":[{"name":"client","description":"Using only for auto login.","nullable":true,"type":[[["Client"]]]}],"returns":[[["undefined"]]],"meta":{"line":387,"file":"RemoteAuth.js","path":"src/util"}},{"name":"destroy","description":"Disconnect from DiscordAuthWebsocket.","returns":[[["undefined"]]],"meta":{"line":395,"file":"RemoteAuth.js","path":"src/util"}},{"name":"generateQR","description":"Generate QR code for user to scan (Terminal)","returns":[[["undefined"]]],"meta":{"line":410,"file":"RemoteAuth.js","path":"src/util"}}],"events":[{"name":"cancel","description":"Emitted whenever a user cancels the login process.","params":[{"name":"user","description":"User (Raw)","type":[[["object"]]]}],"meta":{"line":222,"file":"RemoteAuth.js","path":"src/util"}},{"name":"success","description":"Emitted whenever a token is created. (Fake token)","params":[{"name":"user","description":"Discord User","type":[[["object"]]]},{"name":"token","description":"Discord Token (Fake)","type":[[["string"]]]}],"meta":{"line":233,"file":"RemoteAuth.js","path":"src/util"}},{"name":"pending","description":"Emitted whenever a user is scan QR Code.","params":[{"name":"user","description":"Discord User Raw","type":[[["object"]]]}],"meta":{"line":354,"file":"RemoteAuth.js","path":"src/util"}},{"name":"ready","description":"Emitted whenever a url is created.","params":[{"name":"fingerprint","description":"Fingerprint","type":[[["string"]]]},{"name":"url","description":"DiscordAuthWebsocket","type":[[["string"]]]}],"meta":{"line":366,"file":"RemoteAuth.js","path":"src/util"}},{"name":"closed","description":"Emitted whenever a connection is closed.","params":[{"name":"loginState","description":"Login state","type":[[["boolean"]]]}],"meta":{"line":398,"file":"RemoteAuth.js","path":"src/util"}},{"name":"finish","description":"Emitted whenever a real token is found.","params":[{"name":"user","description":"User","type":[[["object"]]]},{"name":"token","description":"Real token","type":[[["string"]]]}],"meta":{"line":474,"file":"RemoteAuth.js","path":"src/util"}}],"meta":{"line":63,"file":"RemoteAuth.js","path":"src/util"}},{"name":"RoleFlags","description":"Data structure that makes it easy to interact with an {@link GuildMember#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"RoleFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric guild member flags. All available properties:\n* `IN_PROMPT`","see":["{@link https://discord.com/developers/docs/topics/permissions#role-object-role-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":24,"file":"RoleFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"RoleFlags.js","path":"src/util"}},{"name":"SnowflakeUtil","description":"A container for useful snowflake-related methods.","props":[{"name":"EPOCH","description":"Discord's epoch value (2015-01-01T00:00:00.000Z).","scope":"static","readonly":true,"type":[[["number"]]],"meta":{"line":87,"file":"SnowflakeUtil.js","path":"src/util"}}],"methods":[{"name":"generate","description":"Generates a Discord snowflake.\nThis hardcodes the worker's id as 1 and the process's id as 0.","scope":"static","params":[{"name":"timestamp","description":"Timestamp or date of the snowflake to generate","optional":true,"default":"Date.now()","type":[[["number"]],[["Date"]]]}],"returns":{"types":[[["Snowflake"]]],"description":"The generated snowflake"},"meta":{"line":30,"file":"SnowflakeUtil.js","path":"src/util"}},{"name":"deconstruct","description":"Deconstructs a Discord snowflake.","scope":"static","params":[{"name":"snowflake","description":"Snowflake to deconstruct","type":[[["Snowflake"]]]}],"returns":[[["DeconstructedSnowflake"]]],"meta":{"line":59,"file":"SnowflakeUtil.js","path":"src/util"}},{"name":"timestampFrom","description":"Retrieves the timestamp field's value from a Discord snowflake.","scope":"static","params":[{"name":"snowflake","description":"Snowflake to get the timestamp value from","type":[[["Snowflake"]]]}],"returns":[[["number"]]],"meta":{"line":78,"file":"SnowflakeUtil.js","path":"src/util"}}],"meta":{"line":10,"file":"SnowflakeUtil.js","path":"src/util"}},{"name":"Sweepers","description":"A container for all cache sweeping intervals and their associated sweep methods.","props":[{"name":"options","description":"The options the sweepers were instantiated with","type":[[["SweeperOptions"]]],"meta":{"line":30,"file":"Sweepers.js","path":"src/util"}},{"name":"intervals","description":"A record of interval timeout that is used to sweep the indicated items, or null if not being swept","type":[[["Object","<"],["SweeperKey",", ?"],["Timeout",">"]]],"meta":{"line":36,"file":"Sweepers.js","path":"src/util"}}],"methods":[{"name":"sweepApplicationCommands","description":"Sweeps all guild and global application commands and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which commands will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of commands that were removed from the caches"},"meta":{"line":68,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepAutoModerationRules","description":"Sweeps all auto moderation rules and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine\nwhich auto moderation rules will be removed from the caches","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of auto moderation rules that were removed from the caches"},"meta":{"line":86,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepBans","description":"Sweeps all guild bans and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which bans will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of bans that were removed from the caches"},"meta":{"line":95,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepEmojis","description":"Sweeps all guild emojis and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which emojis will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of emojis that were removed from the caches"},"meta":{"line":104,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepInvites","description":"Sweeps all guild invites and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which invites will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of invites that were removed from the caches"},"meta":{"line":113,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepGuildMembers","description":"Sweeps all guild members and removes the ones which are indicated by the filter.\nIt is highly recommended to keep the client guild member cached","params":[{"name":"filter","description":"The function used to determine which guild members will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of guild members that were removed from the caches"},"meta":{"line":123,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepMessages","description":"Sweeps all text-based channels' messages and removes the ones which are indicated by the filter.","examples":["// Remove all messages older than 1800 seconds from the messages cache\nconst amount = sweepers.sweepMessages(\n Sweepers.filterByLifetime({\n lifetime: 1800,\n getComparisonTimestamp: m => m.editedTimestamp ?? m.createdTimestamp,\n })(),\n);\nconsole.log(`Successfully removed ${amount} messages from the cache.`);"],"params":[{"name":"filter","description":"The function used to determine which messages will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of messages that were removed from the caches"},"meta":{"line":141,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepPresences","description":"Sweeps all presences and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which presences will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of presences that were removed from the caches"},"meta":{"line":163,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepReactions","description":"Sweeps all message reactions and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which reactions will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of reactions that were removed from the caches"},"meta":{"line":172,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepStageInstances","description":"Sweeps all guild stage instances and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which stage instances will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of stage instances that were removed from the caches"},"meta":{"line":201,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepStickers","description":"Sweeps all guild stickers and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which stickers will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of stickers that were removed from the caches"},"meta":{"line":210,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepThreadMembers","description":"Sweeps all thread members and removes the ones which are indicated by the filter.\nIt is highly recommended to keep the client thread member cached","params":[{"name":"filter","description":"The function used to determine which thread members will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of thread members that were removed from the caches"},"meta":{"line":220,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepThreads","description":"Sweeps all threads and removes the ones which are indicated by the filter.","examples":["// Remove all threads archived greater than 1 day ago from all the channel caches\nconst amount = sweepers.sweepThreads(\n Sweepers.filterByLifetime({\n getComparisonTimestamp: t => t.archivedTimestamp,\n excludeFromSweep: t => !t.archived,\n })(),\n);\nconsole.log(`Successfully removed ${amount} threads from the cache.`);"],"params":[{"name":"filter","description":"The function used to determine which threads will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"filter Amount of threads that were removed from the caches"},"meta":{"line":250,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepUsers","description":"Sweeps all users and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which users will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of users that were removed from the caches"},"meta":{"line":272,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepVoiceStates","description":"Sweeps all guild voice states and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which voice states will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of voice states that were removed from the caches"},"meta":{"line":289,"file":"Sweepers.js","path":"src/util"}},{"name":"destroy","description":"Cancels all sweeping intervals","returns":[[["void"]]],"meta":{"line":297,"file":"Sweepers.js","path":"src/util"}},{"name":"_sweepGuildDirectProp","description":"Sweep a direct sub property of all guilds","access":"private","params":[{"name":"key","description":"The name of the property","type":[[["string"]]]},{"name":"filter","description":"Filter function passed to sweep","type":[[["function"]]]},{"name":"eventOptions","description":"Options for the Client event emitted here","optional":true,"default":"{}","type":[[["SweepEventOptions"]]]}],"returns":{"types":[[["Object"]]],"description":"Object containing the number of guilds swept and the number of items swept"},"meta":{"line":401,"file":"Sweepers.js","path":"src/util"}},{"name":"_validateProperties","description":"Validates a set of properties","access":"private","params":[{"name":"key","description":"Key of the options object to check","type":[[["string"]]]}],"meta":{"line":428,"file":"Sweepers.js","path":"src/util"}},{"name":"_initInterval","description":"Initialize an interval for sweeping","access":"private","params":[{"name":"intervalKey","description":"The name of the property that stores the interval for this sweeper","type":[[["string"]]]},{"name":"sweepKey","description":"The name of the function that sweeps the desired caches","type":[[["string"]]]},{"name":"opts","description":"Validated options for a sweep","type":[[["Object"]]]}],"meta":{"line":455,"file":"Sweepers.js","path":"src/util"}},{"name":"filterByLifetime","description":"Create a sweepFilter function that uses a lifetime to determine sweepability.","scope":"static","params":[{"name":"options","description":"The options used to generate the filter function","optional":true,"default":"{}","type":[[["LifetimeFilterOptions"]]]}],"returns":[[["GlobalSweepFilter"]]],"meta":{"line":319,"file":"Sweepers.js","path":"src/util"}},{"name":"archivedThreadSweepFilter","description":"Creates a sweep filter that sweeps archived threads","scope":"static","params":[{"name":"lifetime","description":"How long a thread has to be archived to be valid for sweeping","optional":true,"default":14400,"type":[[["number"]]]}],"returns":[[["GlobalSweepFilter"]]],"meta":{"line":353,"file":"Sweepers.js","path":"src/util"}},{"name":"expiredInviteSweepFilter","description":"Creates a sweep filter that sweeps expired invites","scope":"static","params":[{"name":"lifetime","description":"How long ago an invite has to have expired to be valid for sweeping","optional":true,"default":14400,"type":[[["number"]]]}],"returns":[[["GlobalSweepFilter"]]],"meta":{"line":366,"file":"Sweepers.js","path":"src/util"}},{"name":"outdatedMessageSweepFilter","description":"Creates a sweep filter that sweeps outdated messages (edits taken into account)","scope":"static","params":[{"name":"lifetime","description":"How long ago a message has to have been sent or edited to be valid for sweeping","optional":true,"default":3600,"type":[[["number"]]]}],"returns":[[["GlobalSweepFilter"]]],"meta":{"line":378,"file":"Sweepers.js","path":"src/util"}}],"meta":{"line":17,"file":"Sweepers.js","path":"src/util"}},{"name":"SystemChannelFlags","description":"Data structure that makes it easy to interact with a {@link Guild#systemChannelFlags} bitfield.\nNote that all event message types are enabled by default,\nand by setting their corresponding flags you are disabling them","extends":[[["BitField"]]],"construct":{"name":"SystemChannelFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["SystemChannelFlagsResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]]],"meta":{"line":20,"file":"SystemChannelFlags.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric system channel flags. All available properties:\n* `SUPPRESS_JOIN_NOTIFICATIONS` (Suppress member join notifications)\n* `SUPPRESS_PREMIUM_SUBSCRIPTIONS` (Suppress server boost notifications)\n* `SUPPRESS_GUILD_REMINDER_NOTIFICATIONS` (Suppress server setup tips)\n* `SUPPRESS_JOIN_NOTIFICATION_REPLIES` (Hide member join sticker reply buttons)\n* `SUPPRESS_ROLE_SUBSCRIPTION_PURCHASE_NOTIFICATIONS` (Suppress role subscription purchase and renewal notifications)\n* `SUPPRESS_ROLE_SUBSCRIPTION_PURCHASE_NOTIFICATION_REPLIES` (HHide role subscription sticker reply buttons)","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-system-channel-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":46,"file":"SystemChannelFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":11,"file":"SystemChannelFlags.js","path":"src/util"}},{"name":"ThreadMemberFlags","description":"Data structure that makes it easy to interact with a {@link ThreadMember#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"ThreadMemberFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]]],"meta":{"line":18,"file":"ThreadMemberFlags.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric thread member flags. There are currently no bitflags relevant to bots for this.","scope":"static","type":[[["Object","<"],["string",", "],["number",">"]]],"meta":{"line":28,"file":"ThreadMemberFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"ThreadMemberFlags.js","path":"src/util"}},{"name":"UserFlags","description":"Data structure that makes it easy to interact with a {@link User#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"UserFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]]],"meta":{"line":17,"file":"UserFlags.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric user flags. All available properties:\n* `DISCORD_EMPLOYEE`\n* `PARTNERED_SERVER_OWNER`\n* `HYPESQUAD_EVENTS`\n* `BUGHUNTER_LEVEL_1`\n* `MFA_SMS`\n* `PREMIUM_PROMO_DISMISSED`\n* `HOUSE_BRAVERY`\n* `HOUSE_BRILLIANCE`\n* `HOUSE_BALANCE`\n* `EARLY_SUPPORTER`\n* `TEAM_USER`\n* `INTERNAL_APPLICATION`\n* `SYSTEM`\n* `HAS_UNREAD_URGENT_MESSAGES`\n* `BUGHUNTER_LEVEL_2`\n* `UNDERAGE_DELETED`\n* `VERIFIED_BOT`\n* `EARLY_VERIFIED_BOT_DEVELOPER`\n* `DISCORD_CERTIFIED_MODERATOR`\n* `BOT_HTTP_INTERACTIONS`\n* `SPAMMER`\n* `DISABLE_PREMIUM`\n* `ACTIVE_DEVELOPER`\n* `HIGH_GLOBAL_RATE_LIMIT`\n* `DELETED`\n* `DISABLED_SUSPICIOUS_ACTIVITY`\n* `SELF_DELETED`\n* `PREMIUM_DISCRIMINATOR`\n* `USED_DESKTOP_CLIENT`\n* `USED_WEB_CLIENT`\n* `USED_MOBILE_CLIENT`\n* `DISABLED`\n* `VERIFIED_EMAIL`\n* `QUARANTINED`\n* `COLLABORATOR`\n* `RESTRICTED_COLLABORATOR`","see":["{@link https://discord.com/developers/docs/resources/user#user-object-user-flags}","{@link https://github.com/LewisTehMinerz/discord-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":65,"file":"UserFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":8,"file":"UserFlags.js","path":"src/util"}},{"name":"Util","description":"Contains various general-purpose utility methods.","methods":[{"name":"flatten","description":"Flatten an object. Any properties that are collections will get converted to an array of keys.","scope":"static","params":[{"name":"obj","description":"The object to flatten.","type":[[["Object"]]]},{"name":"props","description":"Specific properties to include/exclude.","optional":true,"variable":true,"type":[[["Object","<"],["string",", ("],["boolean","|"],["string",")>"]]]}],"returns":[[["Object"]]],"meta":{"line":29,"file":"Util.js","path":"src/util"}},{"name":"splitMessage","description":"Splits a string into multiple chunks at a designated character that do not exceed a specific length.","scope":"static","deprecated":"This will be removed in the next major version.","params":[{"name":"text","description":"Content to split","type":[[["string"]]]},{"name":"options","description":"Options controlling the behavior of the split","optional":true,"type":[[["SplitOptions"]]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":85,"file":"Util.js","path":"src/util"}},{"name":"escapeMarkdown","description":"Escapes any Discord-flavour markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]},{"name":"options","description":"Options for escaping the markdown","optional":true,"default":"{}","type":[[["EscapeMarkdownOptions"]]]}],"returns":[[["string"]]],"meta":{"line":147,"file":"Util.js","path":"src/util"}},{"name":"escapeCodeBlock","description":"Escapes code block markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":228,"file":"Util.js","path":"src/util"}},{"name":"escapeInlineCode","description":"Escapes inline code markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":236,"file":"Util.js","path":"src/util"}},{"name":"escapeItalic","description":"Escapes italic markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":244,"file":"Util.js","path":"src/util"}},{"name":"escapeBold","description":"Escapes bold markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":261,"file":"Util.js","path":"src/util"}},{"name":"escapeUnderline","description":"Escapes underline markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":273,"file":"Util.js","path":"src/util"}},{"name":"escapeStrikethrough","description":"Escapes strikethrough markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":285,"file":"Util.js","path":"src/util"}},{"name":"escapeSpoiler","description":"Escapes spoiler markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":293,"file":"Util.js","path":"src/util"}},{"name":"escapeEscape","description":"Escapes escape characters in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":301,"file":"Util.js","path":"src/util"}},{"name":"escapeHeading","description":"Escapes heading characters in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":309,"file":"Util.js","path":"src/util"}},{"name":"escapeBulletedList","description":"Escapes bulleted list characters in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":317,"file":"Util.js","path":"src/util"}},{"name":"escapeNumberedList","description":"Escapes numbered list characters in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":325,"file":"Util.js","path":"src/util"}},{"name":"escapeMaskedLink","description":"Escapes masked link characters in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":333,"file":"Util.js","path":"src/util"}},{"name":"parseEmoji","description":"Parses emoji info out of a string. The string must be one of:\n* A UTF-8 emoji (no id)\n* A URL-encoded UTF-8 emoji (no id)\n* A Discord custom emoji (`<:name:id>` or ``)","scope":"static","access":"private","params":[{"name":"text","description":"Emoji string to parse","type":[[["string"]]]}],"returns":{"types":[[["APIEmoji"]]],"description":"Object with `animated`, `name`, and `id` properties"},"meta":{"line":346,"file":"Util.js","path":"src/util"}},{"name":"resolvePartialEmoji","description":"Resolves a partial emoji object from an {@link EmojiIdentifierResolvable}, without checking a Client.","scope":"static","access":"private","params":[{"name":"emoji","description":"Emoji identifier to resolve","type":[[["EmojiIdentifierResolvable"]]]}],"returns":{"types":[[["RawEmoji"]]],"nullable":true},"meta":{"line":359,"file":"Util.js","path":"src/util"}},{"name":"cloneObject","description":"Shallow-copies an object with its class/prototype intact.","scope":"static","access":"private","params":[{"name":"obj","description":"Object to clone","type":[[["Object"]]]}],"returns":[[["Object"]]],"meta":{"line":373,"file":"Util.js","path":"src/util"}},{"name":"mergeDefault","description":"Sets default properties on an object that aren't already specified.","scope":"static","access":"private","params":[{"name":"def","description":"Default properties","type":[[["Object"]]]},{"name":"given","description":"Object to assign defaults to","type":[[["Object"]]]}],"returns":[[["Object"]]],"meta":{"line":384,"file":"Util.js","path":"src/util"}},{"name":"makeError","description":"Makes an Error from a plain info object.","scope":"static","access":"private","params":[{"name":"obj","description":"Error info","type":[[["MakeErrorOptions"]]]}],"returns":[[["Error"]]],"meta":{"line":411,"file":"Util.js","path":"src/util"}},{"name":"makePlainError","description":"Makes a plain error info object from an Error.","scope":"static","access":"private","params":[{"name":"err","description":"Error to get info from","type":[[["Error"]]]}],"returns":[[["MakeErrorOptions"]]],"meta":{"line":424,"file":"Util.js","path":"src/util"}},{"name":"moveElementInArray","description":"Moves an element in an array *in place*.","scope":"static","access":"private","params":[{"name":"array","description":"Array to modify","type":[[["Array","<"],["*",">"]]]},{"name":"element","description":"Element to move","type":[["*"]]},{"name":"newIndex","description":"Index or offset to move the element to","type":[[["number"]]]},{"name":"offset","description":"Move the element by an offset amount rather than to a set index","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["number"]]],"meta":{"line":441,"file":"Util.js","path":"src/util"}},{"name":"verifyString","description":"Verifies the provided data is a string, otherwise throws provided error.","scope":"static","params":[{"name":"data","description":"The string resolvable to resolve","type":[[["string"]]]},{"name":"error","description":"The Error constructor to instantiate. Defaults to Error","optional":true,"type":[[["function"]]]},{"name":"errorMessage","description":"The error message to throw with. Defaults to \"Expected string, got instead.\"","optional":true,"type":[[["string"]]]},{"name":"allowEmpty","description":"Whether an empty string should be allowed","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["string"]]],"meta":{"line":459,"file":"Util.js","path":"src/util"}},{"name":"resolveColor","description":"Resolves a ColorResolvable into a color number.","scope":"static","params":[{"name":"color","description":"Color to resolve","type":[[["ColorResolvable"]]]}],"returns":{"types":[[["number"]]],"description":"A color"},"meta":{"line":483,"file":"Util.js","path":"src/util"}},{"name":"discordSort","description":"Sorts by Discord's position and id.","scope":"static","params":[{"name":"collection","description":"Collection of objects to sort","type":[[["Collection"]]]}],"returns":[[["Collection"]]],"meta":{"line":503,"file":"Util.js","path":"src/util"}},{"name":"setPosition","description":"Sets the position of a Channel or Role.","scope":"static","access":"private","params":[{"name":"item","description":"Object to set the position of","type":[[["Channel"]],[["Role"]]]},{"name":"position","description":"New position for the object","type":[[["number"]]]},{"name":"relative","description":"Whether `position` is relative to its current position","type":[[["boolean"]]]},{"name":"sorted","description":"A collection of the objects sorted properly","type":[[["Collection","<"],["string",", ("],["Channel","|"],["Role",")>"]]]},{"name":"route","description":"Route to call PATCH on","type":[[["APIRouter"]]]},{"name":"reason","description":"Reason for the change","optional":true,"type":[[["string"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Array","<"],["Channel",">|"],["Array","<"],["Role",">)>"]]],"description":"Updated item list, with `id` and `position` properties"},"meta":{"line":523,"file":"Util.js","path":"src/util"}},{"name":"basename","description":"Alternative to Node's `path.basename`, removing query string after the extension if it exists.","scope":"static","access":"private","params":[{"name":"path","description":"Path to get the basename of","type":[[["string"]]]},{"name":"ext","description":"File extension to remove","optional":true,"type":[[["string"]]]}],"returns":{"types":[[["string"]]],"description":"Basename of the path"},"meta":{"line":538,"file":"Util.js","path":"src/util"}},{"name":"removeMentions","description":"Breaks user, role and everyone/here mentions by adding a zero width space after every @ character","scope":"static","deprecated":"Use {@link BaseMessageOptions#allowedMentions} instead.","params":[{"name":"str","description":"The string to sanitize","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":549,"file":"Util.js","path":"src/util"}},{"name":"cleanContent","description":"The content to have all mentions replaced by the equivalent text.\nWhen {@link Util.removeMentions} is removed, this method will no longer sanitize mentions.\nUse {@link BaseMessageOptions#allowedMentions} instead to prevent mentions when sending a message.","scope":"static","params":[{"name":"str","description":"The string to be converted","type":[[["string"]]]},{"name":"channel","description":"The channel the string was sent in","type":[[["TextBasedChannels"]]]}],"returns":[[["string"]]],"meta":{"line":574,"file":"Util.js","path":"src/util"}},{"name":"cleanCodeBlockContent","description":"The content to put in a code block with all code block fences replaced by the equivalent backticks.","scope":"static","params":[{"name":"text","description":"The string to be converted","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":608,"file":"Util.js","path":"src/util"}},{"name":"archivedThreadSweepFilter","description":"Creates a sweep filter that sweeps archived threads","scope":"static","deprecated":"When not using with `makeCache` use `Sweepers.archivedThreadSweepFilter` instead","params":[{"name":"lifetime","description":"How long a thread has to be archived to be valid for sweeping","optional":true,"default":14400,"type":[[["number"]]]}],"returns":[[["SweepFilter"]]],"meta":{"line":618,"file":"Util.js","path":"src/util"}},{"name":"resolveAutoArchiveMaxLimit","description":"Resolves the maximum time a guild's thread channels should automatically archive in case of no recent activity.","scope":"static","deprecated":true,"returns":[[["number"]]],"meta":{"line":629,"file":"Util.js","path":"src/util"}},{"name":"lazy","description":"Lazily evaluates a callback function (yea it's v14 :yay:)","scope":"static","examples":["const User = lazy(() => require('./User'));\nconst user = new (User())(client, data);"],"params":[{"name":"cb","description":"The callback to lazily evaluate","type":[[["function"]]]}],"returns":[[["function"]]],"meta":{"line":641,"file":"Util.js","path":"src/util"}},{"name":"transformAPIGuildForumTag","description":"Transforms an API guild forum tag to camel-cased guild forum tag.","scope":"static","params":[{"name":"tag","description":"The tag to transform","type":[[["APIGuildForumTag"]]]}],"returns":[[["GuildForumTag"]]],"meta":{"line":652,"file":"Util.js","path":"src/util"}},{"name":"transformGuildForumTag","description":"Transforms a camel-cased guild forum tag to an API guild forum tag.","scope":"static","params":[{"name":"tag","description":"The tag to transform","type":[[["GuildForumTag"]]]}],"returns":[[["APIGuildForumTag"]]],"meta":{"line":673,"file":"Util.js","path":"src/util"}},{"name":"transformAPIGuildDefaultReaction","description":"Transforms an API guild forum default reaction object to a\ncamel-cased guild forum default reaction object.","scope":"static","params":[{"name":"defaultReaction","description":"The default reaction to transform","type":[[["APIGuildForumDefaultReactionEmoji"]]]}],"returns":[[["DefaultReactionEmoji"]]],"meta":{"line":690,"file":"Util.js","path":"src/util"}},{"name":"transformGuildDefaultReaction","description":"Transforms a camel-cased guild forum default reaction object to an\nAPI guild forum default reaction object.","scope":"static","params":[{"name":"defaultReaction","description":"The default reaction to transform","type":[[["DefaultReactionEmoji"]]]}],"returns":[[["APIGuildForumDefaultReactionEmoji"]]],"meta":{"line":704,"file":"Util.js","path":"src/util"}},{"name":"getSortableGroupTypes","description":"Gets an array of the channel types that can be moved in the channel group. For example, a GuildText channel would\nreturn an array containing the types that can be ordered within the text channels (always at the top), and a voice\nchannel would return an array containing the types that can be ordered within the voice channels (always at the\nbottom).","scope":"static","params":[{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]]}],"returns":[[["Array","<"],["ChannelType",">"]]],"meta":{"line":763,"file":"Util.js","path":"src/util"}},{"name":"calculateUserDefaultAvatarIndex","description":"Calculates the default avatar index for a given user id.","scope":"static","params":[{"name":"userId","description":"The user id to calculate the default avatar index for","type":[[["Snowflake"]]]}],"returns":[[["number"]]],"meta":{"line":784,"file":"Util.js","path":"src/util"}}],"meta":{"line":22,"file":"Util.js","path":"src/util"}}],"interfaces":[{"name":"InteractionResponses","description":"Interface for classes that support shared interaction response types.","methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}}],"meta":{"line":14,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"TextBasedChannel","description":"Interface for classes that have text-channel-like features.","props":[{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":33,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":39,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastMessageId","description":"The channel's last message id, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":45,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinTimestamp","description":"The timestamp when the last pinned message was pinned, if there was one","nullable":true,"type":[[["number"]]],"meta":{"line":51,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinAt","description":"The date when the last pinned message was pinned, if there was one","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":68,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}}],"methods":[{"name":"send","description":"Sends a message to this channel.","examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"bulkDelete","description":"Bulk deletes given messages that are newer than two weeks.","examples":["// Bulk delete messages\nchannel.bulkDelete(5)\n .then(messages => console.log(`Bulk deleted ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"messages","description":"Messages or number of messages to delete","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]],[["Array","<"],["MessageResolvable",">"]],[["number"]]]},{"name":"filterOld","description":"Filter messages to remove those which are older than two weeks automatically","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Collection","<"],["Snowflake",", ("],["Message","|"],["undefined",")>>"]]],"description":"Returns the deleted messages"},"meta":{"line":319,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":368,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":393,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":403,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":413,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"searchInteraction","description":"Search Slash Command (return raw data)","params":[{"name":"applicationId","description":"Application ID","type":[[["Snowflake"]]]},{"name":"type","description":"Command Type","default":"CHAT_INPUT","nullable":true,"type":[[["ApplicationCommandType"]]]}],"returns":[[["Object"]]],"meta":{"line":423,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendSlash","description":"Send Slash to this channel","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/SlashCommand.md}"],"examples":["// Send a basic slash\nchannel.sendSlash('botid', 'ping')\n .then(console.log)\n .catch(console.error);","// Send a remote file\nchannel.sendSlash('botid', 'emoji upload', 'https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048', 'test')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"bot","description":"Bot user (BotID, not applicationID)","type":[[["UserResolvable"]]]},{"name":"commandString","description":"Command name (and sub / group formats)","type":[[["string"]]]},{"name":"args","description":"Command arguments","variable":true,"type":[[["any"]],[["Array","<"],["any",">"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":463,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}}],"meta":{"line":27,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}}],"typedefs":[{"name":"ApplicationCommandPermissionsUpdateData","description":"The data received in the {@link Client#event:applicationCommandPermissionsUpdate} event","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the command or global entity that was updated","type":[[["Snowflake"]]]},{"name":"guildId","description":"The id of the guild in which permissions were updated","type":[[["Snowflake"]]]},{"name":"applicationId","description":"The id of the application that owns the command or entity being updated","type":[[["Snowflake"]]]},{"name":"permissions","description":"The updated permissions","type":[[["Array","<"],["ApplicationCommandPermissions",">"]]]}],"meta":{"line":6,"file":"ApplicationCommandPermissionsUpdate.js","path":"src/client/actions"}},{"name":"ClientFetchInviteOptions","description":"Options used when fetching an invite from Discord.","type":[[["Object"]]],"props":[{"name":"guildScheduledEventId","description":"The id of the guild scheduled event to include with\nthe invite","optional":true,"type":[[["Snowflake"]]]}],"meta":{"line":564,"file":"Client.js","path":"src/client"}},{"name":"InviteGenerationOptions","description":"Options for {@link Client#generateInvite}.","type":[[["Object"]]],"props":[{"name":"scopes","description":"Scopes that should be requested","type":[[["Array","<"],["InviteScope",">"]]]},{"name":"permissions","description":"Permissions to request","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"guild","description":"Guild to preselect","optional":true,"type":[[["GuildResolvable"]]]},{"name":"disableGuildSelect","description":"Whether to disable the guild selection","optional":true,"type":[[["boolean"]]]}],"meta":{"line":784,"file":"Client.js","path":"src/client"}},{"name":"OAuth2AuthorizeOptions","type":[[["Object"]]],"props":[{"name":"guild_id","description":"Guild ID","optional":true,"type":[[["string"]]]},{"name":"permissions","description":"Permissions","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"authorize","description":"Whether to authorize or not","optional":true,"type":[[["boolean"]]]},{"name":"code","description":"2FA Code","optional":true,"type":[[["string"]]]},{"name":"webhook_channel_id","description":"Webhook Channel ID","optional":true,"type":[[["string"]]]}],"meta":{"line":899,"file":"Client.js","path":"src/client"}},{"name":"WebhookClientData","description":"The data for the webhook client containing either an id and token or just a URL","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the webhook","optional":true,"type":[[["Snowflake"]]]},{"name":"token","description":"The token of the webhook","optional":true,"type":[[["string"]]]},{"name":"url","description":"The full URL for the webhook client","optional":true,"type":[[["string"]]]}],"meta":{"line":13,"file":"WebhookClient.js","path":"src/client"}},{"name":"AutocompleteResponseChoice","type":[[["object"]]],"props":[{"name":"name","description":"The name of the choice","type":[[["string"]]]},{"name":"value","description":"The value of the choice","type":[[["string"]]]}],"meta":{"line":6,"file":"APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE.js","path":"src/client/websocket/handlers"}},{"name":"AutocompleteResponse","type":[[["object"]]],"props":[{"name":"nonce","description":"Snowflake of the data","optional":true,"type":[[["Snowflake"]]]},{"name":"choices","description":"Array of choices","optional":true,"type":[[["Array","<"],["AutocompleteResponseChoice",">"]]]}],"meta":{"line":11,"file":"APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE.js","path":"src/client/websocket/handlers"}},{"name":"GuildMembersChunk","description":"Represents the properties of a guild members chunk","type":[[["Object"]]],"props":[{"name":"index","description":"Index of the received chunk","type":[[["number"]]]},{"name":"count","description":"Number of chunks the client should receive","type":[[["number"]]]},{"name":"nonce","description":"Nonce for this chunk","nullable":true,"type":[[["string"]]]},{"name":"notFound","description":"An array of whatever could not be found\nwhen using {@link Opcodes.REQUEST_GUILD_MEMBERS}","type":[[["Array","<"],["*",">"]]]}],"meta":{"line":16,"file":"GUILD_MEMBERS_CHUNK.js","path":"src/client/websocket/handlers"}},{"name":"InteractionResponseBody","type":[[["Object"]]],"props":[{"name":"id","description":"Interaction ID","type":[[["Snowflake"]]]},{"name":"nonce","description":"nonce in POST /interactions","type":[[["Snowflake"]]]}],"meta":{"line":4,"file":"INTERACTION_CREATE.js","path":"src/client/websocket/handlers"}},{"name":"ApplicationCommandResolvable","description":"Data that resolves to give an ApplicationCommand object. This can be:\n* An ApplicationCommand object\n* A Snowflake","type":[[["ApplicationCommand"]],[["Snowflake"]]],"meta":{"line":51,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"ApplicationCommandDataResolvable","description":"Data that resolves to the data of an ApplicationCommand","type":[[["ApplicationCommandDataResolvable"]],[["SlashCommandBuilder"]],[["ContextMenuCommandBuilder"]]],"meta":{"line":59,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"BaseFetchOptions","description":"Options used to fetch data from Discord","type":[[["Object"]]],"props":[{"name":"cache","description":"Whether to cache the fetched data if it wasn't already","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":65,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"FetchApplicationCommandOptions","description":"Options used to fetch Application Commands from Discord","type":[[["BaseFetchOptions"]]],"props":[{"name":"guildId","description":"The guild's id to fetch commands for, for when the guild is not cached","optional":true,"type":[[["Snowflake"]]]},{"name":"locale","description":"The locale to use when fetching this command","optional":true,"type":[[["LocaleString"]]]},{"name":"withLocalizations","description":"Whether to fetch all localization data","optional":true,"type":[[["boolean"]]]}],"meta":{"line":72,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"ApplicationCommandPermissionData","description":"Data for setting the permissions of an application command.","type":[[["Object"]]],"props":[{"name":"id","description":"The role or user's id","type":[[["Snowflake"]]]},{"name":"type","description":"Whether this permission is for a role or a user","type":[[["ApplicationCommandPermissionType"]],[["number"]]]},{"name":"permission","description":"Whether the role or user has the permission to use this command","type":[[["boolean"]]]}],"meta":{"line":58,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"ApplicationCommandPermissions","description":"The object returned when fetching permissions for an application command.","type":[[["Object"]]],"props":[{"name":"id","description":"The role or user's id","type":[[["Snowflake"]]]},{"name":"type","description":"Whether this permission is for a role or a user","type":[[["ApplicationCommandPermissionType"]]]},{"name":"permission","description":"Whether the role or user has the permission to use this command","type":[[["boolean"]]]}],"meta":{"line":66,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"BaseApplicationCommandPermissionsOptions","description":"Options for managing permissions for one or more Application Commands\nWhen passing these options to a manager where `guildId` is `null`,\n`guild` is a required parameter","type":[[["Object"]]],"props":[{"name":"guild","description":"The guild to modify / check permissions for\nIgnored when the manager has a non-null `guildId` property","optional":true,"type":[[["GuildResolvable"]]]},{"name":"command","description":"The command to modify / check permissions for\nIgnored when the manager has a non-null `commandId` property","optional":true,"type":[[["ApplicationCommandResolvable"]]]}],"meta":{"line":74,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"GuildApplicationCommandPermissionData","description":"Data used for overwriting the permissions for all application commands in a guild.","type":[[["Object"]]],"props":[{"name":"id","description":"The command's id","type":[[["Snowflake"]]]},{"name":"permissions","description":"The permissions for this command","type":[[["Array","<"],["ApplicationCommandPermissionData",">"]]]}],"meta":{"line":118,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"SetApplicationCommandPermissionsOptions","description":"Options used to set permissions for one or more Application Commands in a guild\nOne of `command` AND `permissions`, OR `fullPermissions` is required.\n`fullPermissions` is not a valid option when passing to a manager where `commandId` is non-null","type":[[["BaseApplicationCommandPermissionsOptions"]]],"props":[{"name":"permissions","description":"The new permissions for the command","optional":true,"type":[[["Array","<"],["ApplicationCommandPermissionData",">"]]]},{"name":"fullPermissions","description":"The new permissions for all commands\nin a guild When this parameter is set, `permissions` and `command` are ignored","optional":true,"type":[[["Array","<"],["GuildApplicationCommandPermissionData",">"]]]}],"meta":{"line":125,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"AddApplicationCommandPermissionsOptions","description":"Options used to add permissions to a command\nThe `command` parameter is not optional when the managers `commandId` is `null`","type":[[["BaseApplicationCommandPermissionsOptions"]]],"props":[{"name":"permissions","description":"The permissions to add to the command","type":[[["Array","<"],["ApplicationCommandPermissionData",">"]]]}],"meta":{"line":205,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"RemoveApplicationCommandPermissionsOptions","description":"Options used to remove permissions from a command\nThe `command` parameter is not optional when the managers `commandId` is `null`","type":[[["BaseApplicationCommandPermissionsOptions"]]],"props":[{"name":"users","description":"The user(s) to remove from the command permissions\nOne of `users` or `roles` is required","optional":true,"type":[[["UserResolvable"]],[["Array","<"],["UserResolvable",">"]]]},{"name":"roles","description":"The role(s) to remove from the command permissions\nOne of `users` or `roles` is required","optional":true,"type":[[["RoleResolvable"]],[["Array","<"],["RoleResolvable",">"]]]}],"meta":{"line":253,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"HasApplicationCommandPermissionsOptions","description":"Options used to check the existence of permissions on a command\nThe `command` parameter is not optional when the managers `commandId` is `null`","type":[[["BaseApplicationCommandPermissionsOptions"]]],"props":[{"name":"permissionId","description":"The user or role to check if a permission exists for\non this command.","type":[[["UserResolvable"]],[["RoleResolvable"]]]}],"meta":{"line":338,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"AutoModerationTriggerMetadataOptions","description":"Options used to set the trigger metadata of an auto moderation rule.","type":[[["Object"]]],"props":[{"name":"keywordFilter","description":"The substrings that will be searched for in the content","optional":true,"type":[[["Array","<"],["string",">"]]]},{"name":"regexPatterns","description":"The regular expression patterns which will be matched against the content\nOnly Rust-flavored regular expressions are supported.","optional":true,"type":[[["Array","<"],["string",">"]]]},{"name":"presets","description":"The internally pre-defined wordsets which will be searched for in the content","optional":true,"type":[[["Array","<"],["AutoModerationRuleKeywordPresetType",">"]]]},{"name":"allowList","description":"The substrings that will be exempt from triggering\n{@link AutoModerationRuleTriggerType.KEYWORD} and {@link AutoModerationRuleTriggerType.KEYWORD_PRESET}","optional":true,"type":[[["Array","<"],["string",">"]]]},{"name":"mentionTotalLimit","description":"The total number of role & user mentions allowed per message","optional":true,"nullable":true,"type":[[["number"]]]},{"name":"mentionRaidProtectionEnabled","description":"Whether to automatically detect mention raids","optional":true,"type":[[["boolean"]]]}],"meta":{"line":50,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"AutoModerationActionOptions","description":"Options used to set the actions of an auto moderation rule.","type":[[["Object"]]],"props":[{"name":"type","description":"The type of this auto moderation rule action","type":[[["AutoModerationActionType"]]]},{"name":"metadata","description":"Additional metadata needed during execution\nThis property is required if using a `type` of\n{@link AutoModerationActionType.SEND_ALERT_MESSAGE} or {@link AutoModerationActionType.TIMEOUT}.","optional":true,"type":[[["AutoModerationActionMetadataOptions"]]]}],"meta":{"line":64,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"AutoModerationActionMetadataOptions","description":"Options used to set the metadata of an auto moderation rule action.","type":[[["Object"]]],"props":[{"name":"channel","description":"The channel to which content will be logged","optional":true,"type":[[["GuildTextChannelResolvable"]],[["ThreadChannel"]]]},{"name":"durationSeconds","description":"The timeout duration in seconds","optional":true,"type":[[["number"]]]},{"name":"customMessage","description":"The custom message that is shown whenever a message is blocked","optional":true,"type":[[["string"]]]}],"meta":{"line":73,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"AutoModerationRuleCreateOptions","description":"Options used to create an auto moderation rule.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the auto moderation rule","type":[[["string"]]]},{"name":"eventType","description":"The event type of the auto moderation rule","type":[[["AutoModerationRuleEventType"]]]},{"name":"triggerType","description":"The trigger type of the auto moderation rule","type":[[["AutoModerationRuleTriggerType"]]]},{"name":"triggerMetadata","description":"The trigger metadata of the auto moderation rule\nThis property is required if the following `triggerType`s are used:\n* {@link AutoModerationRuleTriggerType.KEYWORD KEYWORD}\n* {@link AutoModerationRuleTriggerType.KEYWORD_PRESET KEYWORD_PRESET}\n* {@link AutoModerationRuleTriggerType.MENTION_SPAM MENTION_SPAM}\n","optional":true,"type":[[["AutoModerationTriggerMetadataOptions"]]]},{"name":"actions","description":"The actions that will execute when the auto moderation rule is triggered","type":[[["Array","<"],["AutoModerationActionOptions",">"]]]},{"name":"enabled","description":"Whether the auto moderation rule should be enabled","optional":true,"type":[[["boolean"]]]},{"name":"exemptRoles","description":"The roles that should not be affected by the auto moderation rule","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"exemptChannels","description":"The channels that should not be affected by the auto moderation rule","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["GuildChannel","|"],["ThreadChannel",")>"]],[["Array","<"],["GuildChannelResolvable",">"]]]},{"name":"reason","description":"The reason for creating the auto moderation rule","optional":true,"type":[[["string"]]]}],"meta":{"line":81,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"AutoModerationRuleEditOptions","description":"Options used to edit an auto moderation rule.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the auto moderation rule","optional":true,"type":[[["string"]]]},{"name":"eventType","description":"The event type of the auto moderation rule","optional":true,"type":[[["AutoModerationRuleEventType"]]]},{"name":"triggerMetadata","description":"The trigger metadata of the auto moderation rule","optional":true,"type":[[["AutoModerationTriggerMetadataOptions"]]]},{"name":"actions","description":"The actions that will execute when the auto moderation rule is triggered","optional":true,"type":[[["Array","<"],["AutoModerationActionOptions",">"]]]},{"name":"enabled","description":"Whether the auto moderation rule should be enabled","optional":true,"type":[[["boolean"]]]},{"name":"exemptRoles","description":"The roles that should not be affected by the auto moderation rule","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"exemptChannels","description":"The channels that should not be affected by the auto moderation rule","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["GuildChannel","|"],["ThreadChannel",")>"]],[["Array","<"],["GuildChannelResolvable",">"]]]},{"name":"reason","description":"The reason for creating the auto moderation rule","optional":true,"type":[[["string"]]]}],"meta":{"line":152,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"AutoModerationRuleResolvable","description":"Data that can be resolved to give an AutoModerationRule object. This can be:\n* An AutoModerationRule\n* A Snowflake","type":[[["AutoModerationRule"]],[["Snowflake"]]],"meta":{"line":215,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"FetchAutoModerationRuleOptions","description":"Options used to fetch a single auto moderation rule from a guild.","type":[[["BaseFetchOptions"]]],"props":[{"name":"autoModerationRule","description":"The auto moderation rule to fetch","type":[[["AutoModerationRuleResolvable"]]]}],"meta":{"line":222,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"FetchAutoModerationRulesOptions","description":"Options used to fetch all auto moderation rules from a guild.","type":[[["Object"]]],"props":[{"name":"cache","description":"Whether to cache the fetched auto moderation rules","optional":true,"type":[[["boolean"]]]}],"meta":{"line":228,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"EmojiResolvable","description":"Data that can be resolved into a GuildEmoji object. This can be:\n* A Snowflake\n* A GuildEmoji object\n* A ReactionEmoji object","type":[[["Snowflake"]],[["GuildEmoji"]],[["ReactionEmoji"]]],"meta":{"line":23,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"EmojiIdentifierResolvable","description":"Data that can be resolved to give an emoji identifier. This can be:\n* An EmojiResolvable\n* The ``, `<:name:id>`, `a:name:id` or `name:id` emoji identifier string of an emoji\n* The Unicode representation of an emoji","type":[[["string"]],[["EmojiResolvable"]]],"meta":{"line":51,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"ChannelResolvable","description":"Data that can be resolved to give a Channel object. This can be:\n* A Channel object\n* A Snowflake","type":[[["Channel"]],[["Snowflake"]]],"meta":{"line":66,"file":"ChannelManager.js","path":"src/managers"}},{"name":"FetchChannelOptions","description":"Options for fetching a channel from Discord","type":[[["BaseFetchOptions"]]],"props":[{"name":"allowUnknownGuild","description":"Allows the channel to be returned even if the guild is not in cache,\nit will not be cached. Many of the properties and methods on the returned channel will throw errors","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":91,"file":"ChannelManager.js","path":"src/managers"}},{"name":"CustomStatusOption","description":"CustomStatus Object","type":[[["Object"]]],"props":[{"name":"text","description":"Text to set","type":[[["string"]],[["null"]]]},{"name":"status","description":"The status to set: 'online', 'idle', 'dnd', 'invisible' or null.","type":[[["string"]],[["null"]]]},{"name":"emoji","description":"UnicodeEmoji, DiscordEmoji, or null.","type":[[["EmojiResolvable"]],[["null"]]]},{"name":"expires","description":"The number of seconds until the status expires, or null.","type":[[["number"]],[["null"]]]}],"meta":{"line":267,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"GuildBanResolvable","description":"Data that resolves to give a GuildBan object. This can be:\n* A GuildBan object\n* A User resolvable","type":[[["GuildBan"]],[["UserResolvable"]]],"meta":{"line":37,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"FetchBanOptions","description":"Options used to fetch a single ban from a guild.","type":[[["BaseFetchOptions"]]],"props":[{"name":"user","description":"The ban to fetch","type":[[["UserResolvable"]]]}],"meta":{"line":53,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"FetchBansOptions","description":"Options used to fetch multiple bans from a guild.","type":[[["Object"]]],"props":[{"name":"limit","description":"The maximum number of bans to return","optional":true,"type":[[["number"]]]},{"name":"before","description":"Consider only bans before this id","optional":true,"type":[[["Snowflake"]]]},{"name":"after","description":"Consider only bans after this id","optional":true,"type":[[["Snowflake"]]]},{"name":"cache","description":"Whether to cache the fetched bans","optional":true,"type":[[["boolean"]]]}],"meta":{"line":59,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"BanOptions","description":"Options used to ban a user from a guild.","type":[[["Object"]]],"props":[{"name":"days","description":"Number of days of messages to delete, must be between 0 and 7, inclusive\nThis property is deprecated. Use `deleteMessageSeconds` instead.","optional":true,"default":0,"type":[[["number"]]]},{"name":"deleteMessageSeconds","description":"Number of seconds of messages to delete,\nmust be between 0 and 604800 (7 days), inclusive","optional":true,"default":0,"type":[[["number"]]]},{"name":"reason","description":"The reason for the ban","optional":true,"type":[[["string"]]]}],"meta":{"line":128,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"GuildChannelResolvable","description":"Data that can be resolved to give a Guild Channel object. This can be:\n* A GuildChannel object\n* A ThreadChannel object\n* A Snowflake","type":[[["GuildChannel"]],[["ThreadChannel"]],[["Snowflake"]]],"meta":{"line":79,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"GuildChannelCreateOptions","description":"Options used to create a new channel in a guild.","type":[[["CategoryCreateChannelOptions"]]],"props":[{"name":"parent","description":"Parent of the new channel","optional":true,"type":[[["CategoryChannelResolvable"]]]}],"meta":{"line":107,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"ChannelData","description":"The data for a guild channel.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the channel","optional":true,"type":[[["string"]]]},{"name":"type","description":"The type of the channel (only conversion between text and news is supported)","optional":true,"type":[[["ChannelType"]]]},{"name":"position","description":"The position of the channel","optional":true,"type":[[["number"]]]},{"name":"topic","description":"The topic of the text channel","optional":true,"type":[[["string"]]]},{"name":"nsfw","description":"Whether the channel is NSFW","optional":true,"type":[[["boolean"]]]},{"name":"bitrate","description":"The bitrate of the voice channel","optional":true,"type":[[["number"]]]},{"name":"userLimit","description":"The user limit of the voice channel","optional":true,"type":[[["number"]]]},{"name":"parent","description":"The parent of the channel","optional":true,"nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"lockPermissions","description":"Lock the permissions of the channel to what the parent's permissions are","optional":true,"type":[[["boolean"]]]},{"name":"permissionOverwrites","description":"Permission overwrites for the channel","optional":true,"type":[[["Array","<"],["OverwriteResolvable",">"]],[["Collection","<"],["Snowflake",", "],["OverwriteResolvable",">"]]]},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for the channel in seconds","optional":true,"type":[[["number"]]]},{"name":"defaultAutoArchiveDuration","description":"The default auto archive duration for all new threads in this channel","optional":true,"type":[[["ThreadAutoArchiveDuration"]]]},{"name":"rtcRegion","description":"The RTC region of the channel","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"videoQualityMode","description":"The camera video quality mode of the channel","optional":true,"type":[[["VideoQualityMode"]],[["number"]]]},{"name":"flags","description":"The flags to set on the channel","optional":true,"type":[[["ChannelFlagsResolvable"]]]},{"name":"availableTags","description":"The tags to set as available in a forum channel","optional":true,"type":[[["Array","<"],["GuildForumTagData",">"]]]},{"name":"defaultReactionEmoji","description":"The emoji to set as the default reaction emoji","optional":true,"nullable":true,"type":[[["DefaultReactionEmoji"]]]},{"name":"defaultThreadRateLimitPerUser","description":"The rate limit per user (slowmode) to set on forum posts","optional":true,"type":[[["number"]]]},{"name":"defaultSortOrder","description":"The default sort order mode to set on the channel","optional":true,"nullable":true,"type":[[["SortOrderType"]]]}],"meta":{"line":251,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"CategoryChannelResolvable","description":"Data that can be resolved to give a Category Channel object. This can be:\n* A CategoryChannel object\n* A Snowflake","type":[[["CategoryChannel"]],[["Snowflake"]]],"meta":{"line":1363,"file":"Guild.js","path":"src/structures"}},{"name":"ChannelPosition","description":"The data needed for updating a channel's position.","type":[[["Object"]]],"props":[{"name":"channel","description":"Channel to update","type":[[["GuildChannel"]],[["Snowflake"]]]},{"name":"position","description":"New position for the channel","optional":true,"type":[[["number"]]]},{"name":"parent","description":"Parent channel for this channel","optional":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"lockPermissions","description":"If the overwrites should be locked to the parents overwrites","optional":true,"type":[[["boolean"]]]}],"meta":{"line":1370,"file":"Guild.js","path":"src/structures"}},{"name":"GuildEmojiCreateOptions","description":"Options used for creating an emoji in a guild.","type":[[["Object"]]],"props":[{"name":"roles","description":"The roles to limit the emoji to","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"reason","description":"The reason for creating the emoji","optional":true,"type":[[["string"]]]}],"meta":{"line":28,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"GuildForumThreadMessageCreateOptions","type":[[["BaseMessageOptions"]]],"props":[{"name":"stickers","description":"The stickers to send with the message","optional":true,"type":[[["StickerResolvable"]]]},{"name":"flags","description":"The flags to send with the message.\nOnly `SUPPRESS_EMBEDS`, `SUPPRESS_NOTIFICATIONS` and `IS_VOICE_MESSAGE` can be set.","optional":true,"type":[[["BitFieldResolvable"]]]}],"meta":{"line":19,"file":"GuildForumThreadManager.js","path":"src/managers"}},{"name":"GuildForumThreadCreateOptions","description":"Options for creating a thread.","type":[[["StartThreadOptions"]]],"props":[{"name":"message","description":"The message associated with the thread post","type":[[["GuildForumThreadMessageCreateOptions"]],[["MessagePayload"]]]},{"name":"appliedTags","description":"The tags to apply to the thread","optional":true,"type":[[["Array","<"],["Snowflake",">"]]]}],"meta":{"line":26,"file":"GuildForumThreadManager.js","path":"src/managers"}},{"name":"InviteResolvable","description":"Data that can be resolved to give an invite code. This can be:\n* An invite code\n* An invite URL","type":[[["string"]]],"meta":{"line":16,"file":"DataResolver.js","path":"src/util"}},{"name":"GuildInvitableChannelResolvable","description":"Data that can be resolved to a channel that an invite can be created on. This can be:\n* TextChannel\n* VoiceChannel\n* NewsChannel\n* StoreChannel\n* StageChannel\n* Snowflake","type":[[["TextChannel"]],[["VoiceChannel"]],[["NewsChannel"]],[["StoreChannel"]],[["StageChannel"]],[["Snowflake"]]],"meta":{"line":41,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"FetchInviteOptions","description":"Options used to fetch a single invite from a guild.","type":[[["Object"]]],"props":[{"name":"code","description":"The invite to fetch","type":[[["InviteResolvable"]]]},{"name":"cache","description":"Whether or not to cache the fetched invite","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":71,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"FetchInvitesOptions","description":"Options used to fetch all invites from a guild.","type":[[["Object"]]],"props":[{"name":"channelId","description":"The channel to fetch all invites from","optional":true,"type":[[["GuildInvitableChannelResolvable"]]]},{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":79,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"GuildResolvable","description":"Data that resolves to give a Guild object. This can be:\n* A Guild object\n* A GuildChannel object\n* A GuildEmoji object\n* A Role object\n* A Snowflake\n* An Invite object","type":[[["Guild"]],[["GuildChannel"]],[["GuildMember"]],[["GuildEmoji"]],[["Role"]],[["Snowflake"]],[["Invite"]]],"meta":{"line":52,"file":"GuildManager.js","path":"src/managers"}},{"name":"PartialRoleData","description":"Partial data for a Role.","type":[[["Object"]]],"props":[{"name":"id","description":"The role's id, used to set channel overrides,\nthis is a placeholder and will be replaced by the API after consumption","optional":true,"type":[[["Snowflake"]],[["number"]]]},{"name":"name","description":"The name of the role","optional":true,"type":[[["string"]]]},{"name":"color","description":"The color of the role, either a hex string or a base 10 number","optional":true,"type":[[["ColorResolvable"]]]},{"name":"hoist","description":"Whether or not the role should be hoisted","optional":true,"type":[[["boolean"]]]},{"name":"position","description":"The position of the role","optional":true,"type":[[["number"]]]},{"name":"permissions","description":"The permissions of the role","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"mentionable","description":"Whether or not the role should be mentionable","optional":true,"type":[[["boolean"]]]}],"meta":{"line":63,"file":"GuildManager.js","path":"src/managers"}},{"name":"PartialOverwriteData","description":"Partial overwrite data.","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the {@link Role} or {@link User} this overwrite belongs to","type":[[["Snowflake"]],[["number"]]]},{"name":"type","description":"The type of this overwrite","optional":true,"type":[[["OverwriteType"]]]},{"name":"allow","description":"The permissions to allow","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"deny","description":"The permissions to deny","optional":true,"type":[[["PermissionResolvable"]]]}],"meta":{"line":76,"file":"GuildManager.js","path":"src/managers"}},{"name":"PartialChannelData","description":"Partial data for a Channel.","type":[[["Object"]]],"props":[{"name":"id","description":"The channel's id, used to set its parent,\nthis is a placeholder and will be replaced by the API after consumption","optional":true,"type":[[["Snowflake"]],[["number"]]]},{"name":"parentId","description":"The parent id for this channel","optional":true,"type":[[["Snowflake"]],[["number"]]]},{"name":"type","description":"The type of the channel","optional":true,"type":[[["ChannelType"]],[["number"]]]},{"name":"name","description":"The name of the channel","type":[[["string"]]]},{"name":"topic","description":"The topic of the text channel","optional":true,"type":[[["string"]]]},{"name":"nsfw","description":"Whether the channel is NSFW","optional":true,"type":[[["boolean"]]]},{"name":"bitrate","description":"The bitrate of the voice channel","optional":true,"type":[[["number"]]]},{"name":"userLimit","description":"The user limit of the channel","optional":true,"type":[[["number"]]]},{"name":"rtcRegion","description":"The RTC region of the channel","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"videoQualityMode","description":"The camera video quality mode of the channel","optional":true,"type":[[["VideoQualityMode"]],[["number"]]]},{"name":"permissionOverwrites","description":"Overwrites of the channel","optional":true,"type":[[["Array","<"],["PartialOverwriteData",">"]]]},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) of the channel in seconds","optional":true,"type":[[["number"]]]}],"meta":{"line":85,"file":"GuildManager.js","path":"src/managers"}},{"name":"GuildCreateOptions","description":"Options used to create a guild.","type":[[["Object"]]],"props":[{"name":"afkChannelId","description":"The AFK channel's id","optional":true,"type":[[["Snowflake"]],[["number"]]]},{"name":"afkTimeout","description":"The AFK timeout in seconds","optional":true,"type":[[["number"]]]},{"name":"channels","description":"The channels for this guild","optional":true,"default":"[]","type":[[["Array","<"],["PartialChannelData",">"]]]},{"name":"defaultMessageNotifications","description":"The default message notifications\nfor the guild","optional":true,"type":[[["DefaultMessageNotificationLevel"]],[["number"]]]},{"name":"explicitContentFilter","description":"The explicit content filter level for the guild","optional":true,"type":[[["ExplicitContentFilterLevel"]]]},{"name":"icon","description":"The icon for the guild","optional":true,"default":null,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"roles","description":"The roles for this guild,\nthe first element of this array is used to change properties of the guild's everyone role.","optional":true,"default":"[]","type":[[["Array","<"],["PartialRoleData",">"]]]},{"name":"systemChannelId","description":"The system channel's id","optional":true,"type":[[["Snowflake"]],[["number"]]]},{"name":"systemChannelFlags","description":"The flags of the system channel","optional":true,"type":[[["SystemChannelFlagsResolvable"]]]},{"name":"verificationLevel","description":"The verification level for the guild","optional":true,"type":[[["VerificationLevel"]]]}],"meta":{"line":146,"file":"GuildManager.js","path":"src/managers"}},{"name":"FetchGuildOptions","description":"Options used to fetch a single guild.","type":[[["BaseFetchOptions"]]],"props":[{"name":"guild","description":"The guild to fetch","type":[[["GuildResolvable"]]]},{"name":"withCounts","description":"Whether the approximate member and presence counts should be returned","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":266,"file":"GuildManager.js","path":"src/managers"}},{"name":"FetchGuildsOptions","description":"Options used to fetch multiple guilds.","type":[[["Object"]]],"props":[{"name":"before","description":"Get guilds before this guild id","optional":true,"type":[[["Snowflake"]]]},{"name":"after","description":"Get guilds after this guild id","optional":true,"type":[[["Snowflake"]]]},{"name":"limit","description":"Maximum number of guilds to request (1-200)","optional":true,"default":200,"type":[[["number"]]]}],"meta":{"line":273,"file":"GuildManager.js","path":"src/managers"}},{"name":"GuildMemberResolvable","description":"Data that resolves to give a GuildMember object. This can be:\n* A GuildMember object\n* A User resolvable","type":[[["GuildMember"]],[["UserResolvable"]]],"meta":{"line":44,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"AddGuildMemberOptions","description":"Options used to add a user to a guild using OAuth2.","type":[[["Object"]]],"props":[{"name":"accessToken","description":"An OAuth2 access token for the user with the `guilds.join` scope granted to the\nbot's application","type":[[["string"]]]},{"name":"nick","description":"The nickname to give to the member (requires `MANAGE_NICKNAMES`)","optional":true,"type":[[["string"]]]},{"name":"roles","description":"The roles to add to the member\n(requires `MANAGE_ROLES`)","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"mute","description":"Whether the member should be muted (requires `MUTE_MEMBERS`)","optional":true,"type":[[["boolean"]]]},{"name":"deaf","description":"Whether the member should be deafened (requires `DEAFEN_MEMBERS`)","optional":true,"type":[[["boolean"]]]},{"name":"force","description":"Whether to skip the cache check and call the API directly","optional":true,"type":[[["boolean"]]]},{"name":"fetchWhenExisting","description":"Whether to fetch the user if not cached and already a member","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":76,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"FetchMemberOptions","description":"Options used to fetch a single member from a guild.","type":[[["BaseFetchOptions"]]],"props":[{"name":"user","description":"The user to fetch","type":[[["UserResolvable"]]]}],"meta":{"line":140,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"FetchMembersOptions","description":"Options used to fetch multiple members from a guild.","type":[[["Object"]]],"props":[{"name":"user","description":"The user(s) to fetch","type":[[["UserResolvable"]],[["Array","<"],["UserResolvable",">"]]]},{"name":"query","description":"Limit fetch to members with similar usernames","nullable":true,"type":[[["string"]]]},{"name":"limit","description":"Maximum number of members to request","optional":true,"default":0,"type":[[["number"]]]},{"name":"withPresences","description":"Whether or not to include the presences","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"time","description":"Timeout for receipt of members","optional":true,"default":"120e3","type":[[["number"]]]},{"name":"nonce","description":"Nonce for this request (32 characters max - default to base 16 now timestamp)","nullable":true,"type":[[["string"]]]},{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":146,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"GuildSearchMembersOptions","description":"Options used for searching guild members.","type":[[["Object"]]],"props":[{"name":"query","description":"Filter members whose username or nickname start with this query","type":[[["string"]]]},{"name":"limit","description":"Maximum number of members to search","optional":true,"default":1,"type":[[["number"]]]},{"name":"cache","description":"Whether or not to cache the fetched member(s)","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":238,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"GuildListMembersOptions","description":"Options used for listing guild members.","type":[[["Object"]]],"props":[{"name":"after","description":"Limit fetching members to those with an id greater than the supplied id","optional":true,"type":[[["Snowflake"]]]},{"name":"limit","description":"Maximum number of members to list","optional":true,"default":1,"type":[[["number"]]]},{"name":"cache","description":"Whether or not to cache the fetched member(s)","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":256,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"GuildMemberEditData","description":"The data for editing a guild member.","type":[[["Object"]]],"props":[{"name":"nick","description":"The nickname to set for the member","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"roles","description":"The roles or role ids to apply","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"mute","description":"Whether or not the member should be muted","optional":true,"type":[[["boolean"]]]},{"name":"deaf","description":"Whether or not the member should be deafened","optional":true,"type":[[["boolean"]]]},{"name":"channel","description":"Channel to move the member to\n(if they are connected to voice), or `null` if you want to disconnect them from voice","optional":true,"type":[[["GuildVoiceChannelResolvable"]],[["null"]]]},{"name":"communicationDisabledUntil","description":"The date or timestamp\nfor the member's communication to be disabled until. Provide `null` to enable communication again.","optional":true,"type":[[["DateResolvable"]],[["null"]]]},{"name":"flags","description":"The flags to set for the member","optional":true,"type":[[["GuildMemberFlagsResolvable"]]]},{"name":"avatar","description":"The new guild avatar","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"banner","description":"The new guild banner","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"bio","description":"The new guild about me","optional":true,"nullable":true,"type":[[["string"]]]}],"meta":{"line":274,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"GuildPruneMembersOptions","description":"Options used for pruning guild members.\nIt's recommended to set {@link GuildPruneMembersOptions#count options.count}\nto `false` for large guilds.","type":[[["Object"]]],"props":[{"name":"days","description":"Number of days of inactivity required to kick","optional":true,"default":7,"type":[[["number"]]]},{"name":"dry","description":"Get the number of users that will be kicked, without actually kicking them","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"count","description":"Whether or not to return the number of users that have been kicked.","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"roles","description":"Array of roles to bypass the \"...and no roles\" constraint when pruning","optional":true,"type":[[["Array","<"],["RoleResolvable",">"]]]},{"name":"reason","description":"Reason for this prune","optional":true,"type":[[["string"]]]}],"meta":{"line":349,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"BruteforceOptions","description":"Options used to fetch multiple members from a guild.","type":[[["Object"]]],"props":[{"name":"limit","description":"Maximum number of members per request","optional":true,"default":100,"type":[[["number"]]]},{"name":"delay","description":"Timeout for new requests in ms","optional":true,"default":500,"type":[[["number"]]]},{"name":"depth","description":"Permutations length","optional":true,"default":1,"type":[[["number"]]]}],"meta":{"line":474,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"GuildScheduledEventResolvable","description":"Data that resolves to give a GuildScheduledEvent object. This can be:\n* A Snowflake\n* A GuildScheduledEvent object","type":[[["Snowflake"]],[["GuildScheduledEvent"]]],"meta":{"line":31,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"GuildScheduledEventCreateOptions","description":"Options used to create a guild scheduled event.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the guild scheduled event","type":[[["string"]]]},{"name":"scheduledStartTime","description":"The time to schedule the event at","type":[[["DateResolvable"]]]},{"name":"scheduledEndTime","description":"The time to end the event at\nThis is required if `entityType` is 'EXTERNAL'","optional":true,"type":[[["DateResolvable"]]]},{"name":"privacyLevel","description":"The privacy level of the guild scheduled event","type":[[["PrivacyLevel"]],[["number"]]]},{"name":"entityType","description":"The scheduled entity type of the event","type":[[["GuildScheduledEventEntityType"]],[["number"]]]},{"name":"description","description":"The description of the guild scheduled event","optional":true,"type":[[["string"]]]},{"name":"channel","description":"The channel of the guild scheduled event\nThis is required if `entityType` is 'STAGE_INSTANCE' or `VOICE`","optional":true,"type":[[["GuildVoiceChannelResolvable"]]]},{"name":"entityMetadata","description":"The entity metadata of the\nguild scheduled event\nThis is required if `entityType` is 'EXTERNAL'","optional":true,"type":[[["GuildScheduledEventEntityMetadataOptions"]]]},{"name":"image","description":"The cover image of the guild scheduled event","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"reason","description":"The reason for creating the guild scheduled event","optional":true,"type":[[["string"]]]}],"meta":{"line":38,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"GuildScheduledEventEntityMetadataOptions","description":"Options used to set entity metadata of a guild scheduled event.","type":[[["Object"]]],"props":[{"name":"location","description":"The location of the guild scheduled event\nThis is required if `entityType` is 'EXTERNAL'","optional":true,"type":[[["string"]]]}],"meta":{"line":57,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"FetchGuildScheduledEventOptions","description":"Options used to fetch a single guild scheduled event from a guild.","type":[[["BaseFetchOptions"]]],"props":[{"name":"guildScheduledEvent","description":"The guild scheduled event to fetch","type":[[["GuildScheduledEventResolvable"]]]},{"name":"withUserCount","description":"Whether to fetch the number of users subscribed to the scheduled event","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":115,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"FetchGuildScheduledEventsOptions","description":"Options used to fetch multiple guild scheduled events from a guild.","type":[[["Object"]]],"props":[{"name":"cache","description":"Whether or not to cache the fetched guild scheduled events","optional":true,"type":[[["boolean"]]]},{"name":"withUserCount","description":"Whether to fetch the number of users subscribed to each scheduled event\nshould be returned","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":122,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"GuildScheduledEventEditOptions","description":"Options used to edit a guild scheduled event.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the guild scheduled event","optional":true,"type":[[["string"]]]},{"name":"scheduledStartTime","description":"The time to schedule the event at","optional":true,"type":[[["DateResolvable"]]]},{"name":"scheduledEndTime","description":"The time to end the event at","optional":true,"type":[[["DateResolvable"]]]},{"name":"privacyLevel","description":"The privacy level of the guild scheduled event","optional":true,"type":[[["PrivacyLevel"]],[["number"]]]},{"name":"entityType","description":"The scheduled entity type of the event","optional":true,"type":[[["GuildScheduledEventEntityType"]],[["number"]]]},{"name":"description","description":"The description of the guild scheduled event","optional":true,"type":[[["string"]]]},{"name":"channel","description":"The channel of the guild scheduled event","optional":true,"nullable":true,"type":[[["GuildVoiceChannelResolvable"]]]},{"name":"status","description":"The status of the guild scheduled event","optional":true,"type":[[["GuildScheduledEventStatus"]],[["number"]]]},{"name":"entityMetadata","description":"The entity metadata of the\nguild scheduled event\nThis can be modified only if `entityType` of the `GuildScheduledEvent` to be edited is 'EXTERNAL'","optional":true,"type":[[["GuildScheduledEventEntityMetadataOptions"]]]},{"name":"image","description":"The cover image of the guild scheduled event","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"reason","description":"The reason for editing the guild scheduled event","optional":true,"type":[[["string"]]]}],"meta":{"line":165,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"FetchGuildScheduledEventSubscribersOptions","description":"Options used to fetch subscribers of a guild scheduled event","type":[[["Object"]]],"props":[{"name":"limit","description":"The maximum numbers of users to fetch","optional":true,"type":[[["number"]]]},{"name":"withMember","description":"Whether to fetch guild member data of the users","optional":true,"type":[[["boolean"]]]},{"name":"before","description":"Consider only users before this user id","optional":true,"type":[[["Snowflake"]]]},{"name":"after","description":"Consider only users after this user id\nIf both `before` and `after` are provided, only `before` is respected","optional":true,"type":[[["Snowflake"]]]}],"meta":{"line":250,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"GuildScheduledEventUser","description":"Represents a subscriber of a {@link GuildScheduledEvent}","type":[[["Object"]]],"props":[{"name":"guildScheduledEventId","description":"The id of the guild scheduled event which the user subscribed to","type":[[["Snowflake"]]]},{"name":"user","description":"The user that subscribed to the guild scheduled event","type":[[["User"]]]},{"name":"member","description":"The guild member associated with the user, if any","nullable":true,"type":[[["GuildMember"]]]}],"meta":{"line":260,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"GuildStickerCreateOptions","description":"Options for creating a guild sticker.","type":[[["Object"]]],"props":[{"name":"description","description":"The description for the sticker","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for creating the sticker","optional":true,"type":[[["string"]]]}],"meta":{"line":34,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"StickerResolvable","description":"Data that resolves to give a Sticker object. This can be:\n* A Sticker object\n* A Snowflake","type":[[["Sticker"]],[["Snowflake"]]],"meta":{"line":72,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"GuildTextThreadCreateOptions","description":"Options for creating a thread. Only one of `startMessage` or `type` can be defined.","type":[[["StartThreadOptions"]]],"props":[{"name":"startMessage","description":"The message to start a thread from. If this is defined then type\nof thread gets automatically defined and cannot be changed. The provided `type` field will be ignored","optional":true,"type":[[["MessageResolvable"]]]},{"name":"type","description":"The type of thread to create. Defaults to `GUILD_PUBLIC_THREAD` if\ncreated in a {@link TextChannel} When creating threads in a {@link NewsChannel} this is ignored and is always\n`GUILD_NEWS_THREAD`","optional":true,"type":[[["ThreadChannelTypes"]],[["number"]]]},{"name":"invitable","description":"Whether non-moderators can add other non-moderators to the thread\nCan only be set when type will be `GUILD_PRIVATE_THREAD`","optional":true,"type":[[["boolean"]]]},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for the new channel in seconds","optional":true,"type":[[["number"]]]}],"meta":{"line":19,"file":"GuildTextThreadManager.js","path":"src/managers"}},{"name":"ChannelLogsQueryOptions","description":"The parameters to pass in when requesting previous messages from a channel. `around`, `before` and\n`after` are mutually exclusive. All the parameters are optional.","type":[[["Object"]]],"props":[{"name":"limit","description":"Number of messages to acquire","optional":true,"default":50,"type":[[["number"]]]},{"name":"before","description":"The message's id to get the messages that were posted before it","optional":true,"type":[[["Snowflake"]]]},{"name":"after","description":"The message's id to get the messages that were posted after it","optional":true,"type":[[["Snowflake"]]]},{"name":"around","description":"The message's id to get the messages that were posted around it","optional":true,"type":[[["Snowflake"]]]}],"meta":{"line":35,"file":"MessageManager.js","path":"src/managers"}},{"name":"MessageResolvable","description":"Data that can be resolved to a Message object. This can be:\n* A Message\n* A Snowflake","type":[[["Message"]],[["Snowflake"]]],"meta":{"line":91,"file":"MessageManager.js","path":"src/managers"}},{"name":"MessageSearchOptions","type":[[["object"]]],"props":[{"name":"authors","description":"An array of author to filter by","optional":true,"type":[[["Array","<"],["UserResolvable",">"]]]},{"name":"mentions","description":"An array of user (mentioned) to filter by","optional":true,"type":[[["Array","<"],["UserResolvable",">"]]]},{"name":"content","description":"A messageContent to filter by","optional":true,"type":[[["string"]]]},{"name":"maxId","description":"The maximum Message ID to filter by","optional":true,"type":[[["Snowflake"]]]},{"name":"minId","description":"The minimum Message ID to filter by","optional":true,"type":[[["Snowflake"]]]},{"name":"channels","description":"An array of channel to filter by","optional":true,"type":[[["Array","<"],["TextChannelResolvable",">"]]]},{"name":"pinned","description":"Whether to filter by pinned messages","optional":true,"type":[[["boolean"]]]},{"name":"has","description":"Message has: `link`, `embed`, `file`, `video`, `image`, or `sound`","optional":true,"type":[[["Array","<"],["string",">"]]]},{"name":"nsfw","description":"Whether to filter by NSFW channels","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"offset","description":"The number of messages to skip (for pagination, 25 results per page)","optional":true,"default":0,"type":[[["number"]]]},{"name":"limit","description":"The number of messages to fetch\nThe maximum limit allowed is 25.","optional":true,"default":25,"type":[[["number"]]]},{"name":"sortBy","description":"The order to sort by (`timestamp` or `relevance`)","optional":true,"type":[[["string"]]]},{"name":"sortOrder","description":"The order to return results in (`asc` or `desc`)\nThe default sort is timestamp in descending order desc (newest first).","optional":true,"type":[[["string"]]]}],"meta":{"line":274,"file":"MessageManager.js","path":"src/managers"}},{"name":"MessageSearchResult","type":[[["object"]]],"props":[{"name":"messages","description":"A collection of found messages","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]]]},{"name":"total","description":"The total number of messages that match the search criteria","type":[[["number"]]]}],"meta":{"line":293,"file":"MessageManager.js","path":"src/managers"}},{"name":"GuildChannelOverwriteOptions","description":"Extra information about the overwrite","type":[[["Object"]]],"props":[{"name":"reason","description":"Reason for creating/editing this overwrite","optional":true,"type":[[["string"]]]},{"name":"type","description":"The type of overwrite, either `0` for a role or `1` for a member. Use this to bypass\nautomatic resolution of type that results in an error for uncached structure","optional":true,"type":[[["number"]]]}],"meta":{"line":74,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"PresenceResolvable","description":"Data that can be resolved to a Presence object. This can be:\n* A Presence\n* A UserResolvable\n* A Snowflake","type":[[["Presence"]],[["UserResolvable"]],[["Snowflake"]]],"meta":{"line":25,"file":"PresenceManager.js","path":"src/managers"}},{"name":"MessageReactionResolvable","description":"Data that can be resolved to a MessageReaction object. This can be:\n* A MessageReaction\n* A Snowflake\n* The Unicode representation of an emoji","type":[[["MessageReaction"]],[["Snowflake"]]],"meta":{"line":31,"file":"ReactionManager.js","path":"src/managers"}},{"name":"FetchReactionUsersOptions","description":"Options used to fetch users who gave a reaction.","type":[[["Object"]]],"props":[{"name":"limit","description":"The maximum amount of users to fetch, defaults to `100`","optional":true,"default":100,"type":[[["number"]]]},{"name":"after","description":"Limit fetching users to those with an id greater than the supplied id","optional":true,"type":[[["Snowflake"]]]}],"meta":{"line":29,"file":"ReactionUserManager.js","path":"src/managers"}},{"name":"RoleResolvable","description":"Data that can be resolved to a Role object. This can be:\n* A Role\n* A Snowflake","type":[[["Role"]],[["Snowflake"]]],"meta":{"line":76,"file":"RoleManager.js","path":"src/managers"}},{"name":"CreateRoleOptions","description":"Options used to create a new role.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the new role","optional":true,"type":[[["string"]]]},{"name":"color","description":"The data to create the role with","optional":true,"type":[[["ColorResolvable"]]]},{"name":"hoist","description":"Whether or not the new role should be hoisted","optional":true,"type":[[["boolean"]]]},{"name":"permissions","description":"The permissions for the new role","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"position","description":"The position of the new role","optional":true,"type":[[["number"]]]},{"name":"mentionable","description":"Whether or not the new role should be mentionable","optional":true,"type":[[["boolean"]]]},{"name":"icon","description":"The icon for the role\nThe `EmojiResolvable` should belong to the same guild as the role.\nIf not, pass the emoji's URL directly","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]],[["EmojiResolvable"]]]},{"name":"unicodeEmoji","description":"The unicode emoji for the role","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"reason","description":"The reason for creating this role","optional":true,"type":[[["string"]]]}],"meta":{"line":101,"file":"RoleManager.js","path":"src/managers"}},{"name":"GuildRolePosition","description":"The data needed for updating a guild role's position.","type":[[["Object"]]],"props":[{"name":"role","description":"The role's id","type":[[["RoleResolvable"]]]},{"name":"position","description":"The position to update","type":[[["number"]]]}],"meta":{"line":1403,"file":"Guild.js","path":"src/structures"}},{"name":"StageInstanceCreateOptions","description":"Options used to create a stage instance.","type":[[["Object"]]],"props":[{"name":"topic","description":"The topic of the stage instance","type":[[["string"]]]},{"name":"privacyLevel","description":"The privacy level of the stage instance","optional":true,"type":[[["PrivacyLevel"]],[["number"]]]},{"name":"sendStartNotification","description":"Whether to notify `@everyone` that the stage instance has started","optional":true,"type":[[["boolean"]]]},{"name":"guildScheduledEvent","description":"The guild scheduled event associated with the stage instance","optional":true,"type":[[["GuildScheduledEventResolvable"]]]}],"meta":{"line":29,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"StageChannelResolvable","description":"Data that can be resolved to a Stage Channel object. This can be:\n* A StageChannel\n* A Snowflake","type":[[["StageChannel"]],[["Snowflake"]]],"meta":{"line":39,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"StageInstanceEditOptions","description":"Options used to edit an existing stage instance.","type":[[["Object"]]],"props":[{"name":"topic","description":"The new topic of the stage instance","optional":true,"type":[[["string"]]]},{"name":"privacyLevel","description":"The new privacy level of the stage instance","optional":true,"type":[[["PrivacyLevel"]],[["number"]]]}],"meta":{"line":106,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"ThreadChannelResolvable","description":"Data that can be resolved to a Thread Channel object. This can be:\n* A ThreadChannel object\n* A Snowflake","type":[[["ThreadChannel"]],[["Snowflake"]]],"meta":{"line":36,"file":"ThreadManager.js","path":"src/managers"}},{"name":"FetchThreadsOptions","description":"Options for fetching multiple threads.","type":[[["Object"]]],"props":[{"name":"archived","description":"The options used to fetch archived threads","optional":true,"type":[[["FetchArchivedThreadOptions"]]]}],"meta":{"line":61,"file":"ThreadManager.js","path":"src/managers"}},{"name":"DateResolvable","description":"Data that can be resolved to a Date object. This can be:\n* A Date object\n* A number representing a timestamp\n* An [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) string","type":[[["Date"]],[["number"]],[["string"]]],"meta":{"line":90,"file":"ThreadManager.js","path":"src/managers"}},{"name":"FetchArchivedThreadOptions","description":"The options used to fetch archived threads.","type":[[["Object"]]],"props":[{"name":"type","description":"The type of threads to fetch, either `public` or `private`","optional":true,"default":"'public'","type":[[["string"]]]},{"name":"fetchAll","description":"Whether to fetch **all** archived threads when type is `private`.\nRequires `MANAGE_THREADS` if true","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"before","description":"Only return threads that were archived before this Date\nor Snowflake. Must be a {@link ThreadChannelResolvable} when type is `private` and fetchAll is `false`","optional":true,"type":[[["DateResolvable"]],[["ThreadChannelResolvable"]]]},{"name":"limit","description":"Maximum number of threads to return","optional":true,"type":[[["number"]]]}],"meta":{"line":98,"file":"ThreadManager.js","path":"src/managers"}},{"name":"FetchedThreads","description":"The data returned from a thread fetch that returns multiple threads.","type":[[["Object"]]],"props":[{"name":"threads","description":"The threads that were fetched, with any members returned","type":[[["Collection","<"],["Snowflake",", "],["ThreadChannel",">"]]]},{"name":"hasMore","description":"Whether there are potentially additional threads that require a subsequent call","nullable":true,"type":[[["boolean"]]]}],"meta":{"line":109,"file":"ThreadManager.js","path":"src/managers"}},{"name":"FetchChannelThreadsOptions","description":"Discord.js self-bot specific options field for fetching active threads.","type":[[["Object"]]],"props":[{"name":"archived","description":"Whether to fetch archived threads (default is false)","optional":true,"type":[[["boolean"]]]},{"name":"sortBy","description":"The order in which the threads should be fetched in (default is last_message_time)","optional":true,"type":[[["string"]]]},{"name":"sortOrder","description":"How the threads should be ordered (default is desc)","optional":true,"type":[[["string"]]]},{"name":"limit","description":"The maximum number of threads to return (default is 25)","optional":true,"type":[[["number"]]]},{"name":"offset","description":"The number of threads to offset fetching (useful when making multiple fetches) (default is 0)","optional":true,"type":[[["number"]]]}],"meta":{"line":152,"file":"ThreadManager.js","path":"src/managers"}},{"name":"ThreadMemberResolvable","description":"Data that resolves to give a ThreadMember object. This can be:\n* A ThreadMember object\n* A User resolvable","type":[[["ThreadMember"]],[["UserResolvable"]]],"meta":{"line":60,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"FetchThreadMemberOptions","description":"Options used to fetch a thread member.","type":[[["BaseFetchOptions"]]],"props":[{"name":"withMember","description":"Whether to also return the guild member associated with this thread member","optional":true,"type":[[["boolean"]]]}],"meta":{"line":135,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"FetchThreadMembersWithGuildMemberDataOptions","description":"Options used to fetch multiple thread members with guild member data.\nWith `withMember` set to `true`, pagination is enabled.","type":[[["Object"]]],"props":[{"name":"withMember","description":"Whether to also return the guild member data","type":[[["true"]]]},{"name":"after","description":"Consider only thread members after this id","optional":true,"type":[[["Snowflake"]]]},{"name":"limit","description":"The maximum number of thread members to return","optional":true,"type":[[["number"]]]},{"name":"cache","description":"Whether to cache the fetched thread members and guild members","optional":true,"type":[[["boolean"]]]}],"meta":{"line":141,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"FetchThreadMembersWithoutGuildMemberDataOptions","description":"Options used to fetch multiple thread members without guild member data.","type":[[["Object"]]],"props":[{"name":"withMember","description":"Whether to also return the guild member data","optional":true,"type":[[["false"]]]},{"name":"cache","description":"Whether to cache the fetched thread members","optional":true,"type":[[["boolean"]]]}],"meta":{"line":151,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"FetchThreadMembersOptions","description":"Options used to fetch multiple thread members.","type":[[["FetchThreadMembersWithGuildMemberDataOptions"]],[["FetchThreadMembersWithoutGuildMemberDataOptions"]]],"meta":{"line":158,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"UserResolvable","description":"Data that resolves to give a User object. This can be:\n* A User object\n* A Snowflake\n* A Message object (resolves to the message author)\n* A GuildMember object\n* A ThreadMember object","type":[[["User"]],[["Snowflake"]],[["Message"]],[["GuildMember"]],[["ThreadMember"]]],"meta":{"line":25,"file":"UserManager.js","path":"src/managers"}},{"name":"Captcha","type":[[["Object"]]],"props":[{"name":"captcha_key","description":"['message']","type":[[["Array","<"],["string",">"]]]},{"name":"captcha_sitekey","description":"Captcha sitekey (hcaptcha)","type":[[["string"]]]},{"name":"captcha_service","description":"hcaptcha","type":[[["string"]]]},{"name":"captcha_rqdata","optional":true,"type":[[["string"]]]},{"name":"captcha_rqtoken","optional":true,"type":[[["string"]]]}],"meta":{"line":38,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"HTTPErrorData","description":"The HTTP data that was sent to Discord","type":[[["Object"]]],"props":[{"name":"json","description":"The JSON data that was sent","type":[["*"]]},{"name":"files","description":"The files that were sent with this request, if any","type":[[["Array","<"],["HTTPAttachmentData",">"]]]}],"meta":{"line":35,"file":"HTTPError.js","path":"src/rest"}},{"name":"HTTPAttachmentData","description":"The attachment data that is sent to Discord","type":[[["Object"]]],"props":[{"name":"attachment","description":"The source of this attachment data","type":[[["string"]],[["Buffer"]],[["Stream"]]]},{"name":"name","description":"The file name","type":[[["string"]]]},{"name":"file","description":"The file buffer","type":[[["Buffer"]],[["Stream"]]]}],"meta":{"line":42,"file":"HTTPError.js","path":"src/rest"}},{"name":"APIRequest","description":"Represents a request that will or has been made to the Discord API","type":[[["Object"]]],"props":[{"name":"method","description":"The HTTP method used in this request","type":[[["HTTPMethod"]]]},{"name":"path","description":"The full path used to make the request","type":[[["string"]]]},{"name":"route","description":"The API route identifying the rate limit for this request","type":[[["string"]]]},{"name":"options","description":"Additional options for this request","type":[[["Object"]]]},{"name":"retries","description":"The number of times this request has been attempted","type":[[["number"]]]}],"meta":{"line":177,"file":"RequestHandler.js","path":"src/rest"}},{"name":"InvalidRequestWarningData","type":[[["Object"]]],"props":[{"name":"count","description":"Number of invalid requests that have been made in the window","type":[[["number"]]]},{"name":"remainingTime","description":"Time in milliseconds remaining before the count resets","type":[[["number"]]]}],"meta":{"line":291,"file":"RequestHandler.js","path":"src/rest"}},{"name":"ShardRespawnOptions","description":"Options used to respawn a shard.","type":[[["Object"]]],"props":[{"name":"delay","description":"How long to wait between killing the process/worker and\nrestarting it (in milliseconds)","optional":true,"default":500,"type":[[["number"]]]},{"name":"timeout","description":"The amount in milliseconds to wait until the {@link Client}\nhas become ready before resolving (`-1` or `Infinity` for no wait)","optional":true,"default":30000,"type":[[["number"]]]}],"meta":{"line":191,"file":"Shard.js","path":"src/sharding"}},{"name":"ShardingManagerMode","description":"The mode to spawn shards with for a {@link ShardingManager}. Can be either one of:\n* 'process' to use child processes\n* 'worker' to use [Worker threads](https://nodejs.org/api/worker_threads.html)","type":[[["string"]]],"meta":{"line":23,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"ShardingManagerOptions","description":"The options to spawn shards with for a {@link ShardingManager}.","type":[[["Object"]]],"props":[{"name":"totalShards","description":"Number of total shards of all shard managers or \"auto\"","optional":true,"default":"'auto'","type":[[["string"]],[["number"]]]},{"name":"shardList","description":"List of shards to spawn or \"auto\"","optional":true,"default":"'auto'","type":[[["string"]],[["Array","<"],["number",">"]]]},{"name":"mode","description":"Which mode to use for shards","optional":true,"default":"'process'","type":[[["ShardingManagerMode"]]]},{"name":"respawn","description":"Whether shards should automatically respawn upon exiting","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"shardArgs","description":"Arguments to pass to the shard script when spawning\n(only available when mode is set to 'process')","optional":true,"default":"[]","type":[[["Array","<"],["string",">"]]]},{"name":"execArgv","description":"Arguments to pass to the shard script executable when spawning\n(only available when mode is set to 'process')","optional":true,"default":"[]","type":[[["Array","<"],["string",">"]]]},{"name":"token","description":"Token to use for automatic shard count and passing to shards","optional":true,"type":[[["string"]]]}],"meta":{"line":30,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"MultipleShardSpawnOptions","description":"Options used to spawn multiple shards.","type":[[["Object"]]],"props":[{"name":"amount","description":"Number of shards to spawn","optional":true,"default":"this.totalShards","type":[[["number"]],[["string"]]]},{"name":"delay","description":"How long to wait in between spawning each shard (in milliseconds)","optional":true,"default":5500,"type":[[["number"]]]},{"name":"timeout","description":"The amount in milliseconds to wait until the {@link Client} has become ready","optional":true,"default":30000,"type":[[["number"]]]}],"meta":{"line":170,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"BroadcastEvalOptions","description":"Options for {@link ShardingManager#broadcastEval} and {@link ShardClientUtil#broadcastEval}.","type":[[["Object"]]],"props":[{"name":"shard","description":"Shard to run script on, all if undefined","optional":true,"type":[[["number"]]]},{"name":"context","description":"The JSON-serializable values to call the script with","optional":true,"type":[["*"]]}],"meta":{"line":237,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"MultipleShardRespawnOptions","description":"Options used to respawn all shards.","type":[[["Object"]]],"props":[{"name":"shardDelay","description":"How long to wait between shards (in milliseconds)","optional":true,"default":5000,"type":[[["number"]]]},{"name":"respawnDelay","description":"How long to wait between killing a shard's process and restarting it\n(in milliseconds)","optional":true,"default":500,"type":[[["number"]]]},{"name":"timeout","description":"The amount in milliseconds to wait for a shard to become ready before\ncontinuing to another (`-1` or `Infinity` for no wait)","optional":true,"default":30000,"type":[[["number"]]]}],"meta":{"line":292,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"ApplicationCommandData","description":"Data for creating or editing an application command.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the command","type":[[["string"]]]},{"name":"nameLocalizations","description":"The localizations for the command name","optional":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]]},{"name":"description","description":"The description of the command","type":[[["string"]]]},{"name":"descriptionLocalizations","description":"The localizations for the command description","optional":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]]},{"name":"type","description":"The type of the command","optional":true,"type":[[["ApplicationCommandType"]]]},{"name":"options","description":"Options for the command","optional":true,"type":[[["Array","<"],["ApplicationCommandOptionData",">"]]]},{"name":"defaultPermission","description":"Whether the command is enabled by default when the app is added to a guild","optional":true,"type":[[["boolean"]]]},{"name":"defaultMemberPermissions","description":"The bitfield used to determine the default permissions\na member needs in order to run the command","optional":true,"nullable":true,"type":[[["PermissionResolvable"]]]},{"name":"dmPermission","description":"Whether the command is enabled in DMs","optional":true,"type":[[["boolean"]]]}],"meta":{"line":213,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"ApplicationCommandOptionData","description":"An option for an application command or subcommand.\nIn addition to the listed properties, when used as a parameter,\nAPI style `snake_case` properties can be used for compatibility with generators like `@discordjs/builders`.\nNote that providing a value for the `camelCase` counterpart for any `snake_case` property\nwill discard the provided `snake_case` property.","type":[[["Object"]]],"props":[{"name":"type","description":"The type of the option","type":[[["ApplicationCommandOptionType"]],[["number"]]]},{"name":"name","description":"The name of the option","type":[[["string"]]]},{"name":"nameLocalizations","description":"The name localizations for the option","optional":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]]},{"name":"description","description":"The description of the option","type":[[["string"]]]},{"name":"descriptionLocalizations","description":"The description localizations for the option","optional":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]]},{"name":"autocomplete","description":"Whether the option is an autocomplete option","optional":true,"type":[[["boolean"]]]},{"name":"required","description":"Whether the option is required","optional":true,"type":[[["boolean"]]]},{"name":"choices","description":"The choices of the option for the user to pick from","optional":true,"type":[[["Array","<"],["ApplicationCommandOptionChoiceData",">"]]]},{"name":"options","description":"Additional options if this option is a subcommand (group)","optional":true,"type":[[["Array","<"],["ApplicationCommandOptionData",">"]]]},{"name":"channelTypes","description":"When the option type is channel,\nthe allowed types of channels that can be selected","optional":true,"type":[[["Array","<"],["ChannelType",">"]],[["Array","<"],["number",">"]]]},{"name":"minValue","description":"The minimum value for an `INTEGER` or `NUMBER` option","optional":true,"type":[[["number"]]]},{"name":"maxValue","description":"The maximum value for an `INTEGER` or `NUMBER` option","optional":true,"type":[[["number"]]]},{"name":"minLength","description":"The minimum length for a `STRING` option\n(maximum of `6000`)","optional":true,"type":[[["number"]]]},{"name":"maxLength","description":"The maximum length for a `STRING` option\n(maximum of `6000`)","optional":true,"type":[[["number"]]]}],"meta":{"line":228,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"ApplicationCommandOptionChoiceData","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the choice","type":[[["string"]]]},{"name":"nameLocalizations","description":"The localized names for this choice","optional":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]]},{"name":"value","description":"The value of the choice","type":[[["string"]],[["number"]]]}],"meta":{"line":254,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"ApplicationCommandOption","description":"An option for an application command or subcommand.","type":[[["Object"]]],"props":[{"name":"type","description":"The type of the option","type":[[["ApplicationCommandOptionType"]]]},{"name":"name","description":"The name of the option","type":[[["string"]]]},{"name":"nameLocalizations","description":"The localizations for the option name","optional":true,"type":[[["Object","<"],["string",", "],["string",">"]]]},{"name":"nameLocalized","description":"The localized name for this option","optional":true,"type":[[["string"]]]},{"name":"description","description":"The description of the option","type":[[["string"]]]},{"name":"descriptionLocalizations","description":"The localizations for the option description","optional":true,"type":[[["Object","<"],["string",", "],["string",">"]]]},{"name":"descriptionLocalized","description":"The localized description for this option","optional":true,"type":[[["string"]]]},{"name":"required","description":"Whether the option is required","optional":true,"type":[[["boolean"]]]},{"name":"autocomplete","description":"Whether the option is an autocomplete option","optional":true,"type":[[["boolean"]]]},{"name":"choices","description":"The choices of the option for the user to pick from","optional":true,"type":[[["Array","<"],["ApplicationCommandOptionChoice",">"]]]},{"name":"options","description":"Additional options if this option is a subcommand (group)","optional":true,"type":[[["Array","<"],["ApplicationCommandOption",">"]]]},{"name":"channelTypes","description":"When the option type is channel,\nthe allowed types of channels that can be selected","optional":true,"type":[[["Array","<"],["ChannelType",">"]]]},{"name":"minValue","description":"The minimum value for an `INTEGER` or `NUMBER` option","optional":true,"type":[[["number"]]]},{"name":"maxValue","description":"The maximum value for an `INTEGER` or `NUMBER` option","optional":true,"type":[[["number"]]]},{"name":"minLength","description":"The minimum length for a `STRING` option\n(maximum of `6000`)","optional":true,"type":[[["number"]]]},{"name":"maxLength","description":"The maximum length for a `STRING` option\n(maximum of `6000`)","optional":true,"type":[[["number"]]]}],"meta":{"line":520,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"ApplicationCommandOptionChoice","description":"A choice for an application command option.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the choice","type":[[["string"]]]},{"name":"nameLocalized","description":"The localized name of the choice in the provided locale, if any","nullable":true,"type":[[["string"]]]},{"name":"nameLocalizations","description":"The localized names for this choice","optional":true,"nullable":true,"type":[[["Object","<"],["string",", "],["string",">"]]]},{"name":"value","description":"The value of the choice","type":[[["string"]],[["number"]]]}],"meta":{"line":544,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"AutoModerationTriggerMetadata","description":"Additional data used to determine whether an auto moderation rule should be triggered.","type":[[["Object"]]],"props":[{"name":"keywordFilter","description":"The substrings that will be searched for in the content","type":[[["Array","<"],["string",">"]]]},{"name":"regexPatterns","description":"The regular expression patterns which will be matched against the content\nOnly Rust-flavored regular expressions are supported.","type":[[["Array","<"],["string",">"]]]},{"name":"presets","description":"The internally pre-defined wordsets which will be searched for in the content","type":[[["Array","<"],["AutoModerationRuleKeywordPresetType",">"]]]},{"name":"allowList","description":"The substrings that will be exempt from triggering\n{@link AutoModerationRuleTriggerType.KEYWORD} and {@link AutoModerationRuleTriggerType.KEYWORD_PRESET}","type":[[["Array","<"],["string",">"]]]},{"name":"mentionTotalLimit","description":"The total number of role & user mentions allowed per message","nullable":true,"type":[[["number"]]]},{"name":"mentionRaidProtectionEnabled","description":"Whether mention raid protection is enabled","type":[[["boolean"]]]}],"meta":{"line":65,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"AutoModerationAction","description":"An object containing information about an auto moderation rule action.","type":[[["Object"]]],"props":[{"name":"type","description":"The type of this auto moderation rule action","type":[[["AutoModerationActionType"]]]},{"name":"metadata","description":"Additional metadata needed during execution","type":[[["AutoModerationActionMetadata"]]]}],"meta":{"line":94,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"AutoModerationActionMetadata","description":"Additional data used when an auto moderation rule is executed.","type":[[["Object"]]],"props":[{"name":"channelId","description":"The id of the channel to which content will be logged","nullable":true,"type":[[["Snowflake"]]]},{"name":"durationSeconds","description":"The timeout duration in seconds","nullable":true,"type":[[["number"]]]},{"name":"customMessage","description":"The custom message that is shown whenever a message is blocked","nullable":true,"type":[[["string"]]]}],"meta":{"line":101,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"CommandInteractionResolvedData","description":"Represents the resolved data of a received command interaction.","type":[[["Object"]]],"props":[{"name":"users","description":"The resolved users","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]]},{"name":"members","description":"The resolved guild members","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["GuildMember","|"],["APIGuildMember",")>"]]]},{"name":"roles","description":"The resolved roles","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["Role","|"],["APIRole",")>"]]]},{"name":"channels","description":"The resolved channels","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["Channel","|"],["APIChannel",")>"]]]},{"name":"messages","description":"The resolved messages","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["Message","|"],["APIMessage",")>"]]]},{"name":"attachments","description":"The resolved attachments","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["MessageAttachment",">"]]]}],"meta":{"line":72,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"CommandInteractionOption","description":"Represents an option of a received command interaction.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the option","type":[[["string"]]]},{"name":"type","description":"The type of the option","type":[[["ApplicationCommandOptionType"]]]},{"name":"autocomplete","description":"Whether the option is an autocomplete option","optional":true,"type":[[["boolean"]]]},{"name":"value","description":"The value of the option","optional":true,"type":[[["string"]],[["number"]],[["boolean"]]]},{"name":"options","description":"Additional options if this option is a\nsubcommand (group)","optional":true,"type":[[["Array","<"],["CommandInteractionOption",">"]]]},{"name":"user","description":"The resolved user","optional":true,"type":[[["User"]]]},{"name":"member","description":"The resolved member","optional":true,"type":[[["GuildMember"]],[["APIGuildMember"]]]},{"name":"channel","description":"The resolved channel","optional":true,"type":[[["GuildChannel"]],[["ThreadChannel"]],[["APIChannel"]]]},{"name":"role","description":"The resolved role","optional":true,"type":[[["Role"]],[["APIRole"]]]},{"name":"attachment","description":"The resolved attachment","optional":true,"type":[[["MessageAttachment"]]]}],"meta":{"line":139,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"ApplicationResolvable","description":"Data that can be resolved to an Application. This can be:\n* An Application\n* An Activity with associated Application\n* A Snowflake","type":[[["Application"]],[["Snowflake"]]],"meta":{"line":134,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"CreateInviteOptions","description":"Options used to create an invite to a guild channel.","type":[[["Object"]]],"props":[{"name":"temporary","description":"Whether members that joined via the invite should be automatically\nkicked after 24 hours if they have not yet received a role","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"maxAge","description":"How long the invite should last (in seconds, 0 for forever)","optional":true,"default":86400,"type":[[["number"]]]},{"name":"maxUses","description":"Maximum number of uses","optional":true,"default":0,"type":[[["number"]]]},{"name":"unique","description":"Create a unique invite, or use an existing one with similar settings","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"targetUser","description":"The user whose stream to display for this invite,\nrequired if `targetType` is 1, the user must be streaming in the channel","optional":true,"type":[[["UserResolvable"]]]},{"name":"targetApplication","description":"The embedded application to open for this invite,\nrequired if `targetType` is 2, the application must have the `EMBEDDED` flag","optional":true,"type":[[["ApplicationResolvable"]]]},{"name":"targetType","description":"The type of the target for this voice channel invite","optional":true,"type":[[["TargetType"]]]},{"name":"reason","description":"The reason for creating the invite","optional":true,"type":[[["string"]]]}],"meta":{"line":142,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"BaseMessageComponentOptions","description":"Options for a BaseMessageComponent","type":[[["Object"]]],"props":[{"name":"type","description":"The type of this component","type":[[["MessageComponentTypeResolvable"]]]}],"meta":{"line":11,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"MessageComponentOptions","description":"Data that can be resolved into options for a component. This can be:\n* MessageActionRowOptions\n* MessageButtonOptions\n* MessageSelectMenuOptions\n* TextInputComponentOptions","type":[[["MessageActionRowOptions"]],[["MessageButtonOptions"]],[["MessageSelectMenuOptions"]]],"meta":{"line":17,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"MessageComponent","description":"Components that can be sent in a payload. These can be:\n* MessageActionRow\n* MessageButton\n* MessageSelectMenu\n* TextInputComponent","see":["{@link https://discord.com/developers/docs/interactions/message-components#component-object-component-types}"],"type":[[["MessageActionRow"]],[["MessageButton"]],[["MessageSelectMenu"]]],"meta":{"line":26,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"MessageComponentTypeResolvable","description":"Data that can be resolved to a MessageComponentType. This can be:\n* MessageComponentType\n* string\n* number","type":[[["string"]],[["number"]],[["MessageComponentType"]]],"meta":{"line":36,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"CategoryCreateChannelOptions","description":"Options for creating a channel using {@link CategoryChannel#createChannel}.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the new channel","optional":true,"type":[[["string"]]]},{"name":"type","description":"The type of the new channel.","optional":true,"default":"'GUILD_TEXT'","type":[[["ChannelType"]],[["number"]]]},{"name":"position","description":"Position of the new channel","optional":true,"type":[[["number"]]]},{"name":"topic","description":"The topic for the new channel","optional":true,"type":[[["string"]]]},{"name":"nsfw","description":"Whether the new channel is NSFW","optional":true,"type":[[["boolean"]]]},{"name":"bitrate","description":"Bitrate of the new channel in bits (only voice)","optional":true,"type":[[["number"]]]},{"name":"userLimit","description":"Maximum amount of users allowed in the new channel (only voice)","optional":true,"type":[[["number"]]]},{"name":"permissionOverwrites","description":"Permission overwrites of the new channel","optional":true,"type":[[["Array","<"],["OverwriteResolvable",">"]],[["Collection","<"],["Snowflake",", "],["OverwriteResolvable",">"]]]},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for the new channel in seconds","optional":true,"type":[[["number"]]]},{"name":"defaultAutoArchiveDuration","description":"The default auto archive duration for all new threads in this channel","optional":true,"type":[[["ThreadAutoArchiveDuration"]]]},{"name":"rtcRegion","description":"The specific region of the new channel","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"videoQualityMode","description":"The camera video quality mode of the new channel","optional":true,"type":[[["VideoQualityMode"]],[["number"]]]},{"name":"flags","description":"The flags to set on the new channel","optional":true,"type":[[["ChannelFlagsResolvable"]]]},{"name":"availableTags","description":"The tags to set as available in a forum channel","optional":true,"type":[[["Array","<"],["GuildForumTagData",">"]]]},{"name":"defaultReactionEmoji","description":"The emoji to set as the default reaction emoji","optional":true,"nullable":true,"type":[[["DefaultReactionEmoji"]]]},{"name":"defaultThreadRateLimitPerUser","description":"The rate limit per user (slowmode) to set on forum posts","optional":true,"type":[[["number"]]]},{"name":"defaultSortOrder","description":"The default sort order mode to set on the new channel","optional":true,"nullable":true,"type":[[["SortOrderType"]]]},{"name":"defaultThreadRateLimitPerUser","description":"The initial rate limit per user (slowmode)\nto set on newly created threads in a channel.","optional":true,"type":[[["number"]]]},{"name":"reason","description":"Reason for creating the new channel","optional":true,"type":[[["string"]]]}],"meta":{"line":43,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"ClientApplicationInstallParams","type":[[["Object"]]],"props":[{"name":"scopes","description":"The scopes to add the application to the server with","type":[[["Array","<"],["InviteScope",">"]]]},{"name":"permissions","description":"The permissions this bot will request upon joining","type":[[["Readonly","<"],["Permissions",">"]]]}],"meta":{"line":12,"file":"ClientApplication.js","path":"src/structures"}},{"name":"ApplicationRoleConnectionMetadataEditOptions","description":"Data for creating or editing an application role connection metadata.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the metadata field","type":[[["string"]]]},{"name":"nameLocalizations","description":"The name localizations for the metadata field","optional":true,"nullable":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]]},{"name":"description","description":"The description of the metadata field","type":[[["string"]]]},{"name":"descriptionLocalizations","description":"The description localizations for the metadata field","optional":true,"nullable":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]]},{"name":"key","description":"The dictionary key of the metadata field","type":[[["string"]]]},{"name":"type","description":"The type of the metadata field","type":[[["ApplicationRoleConnectionMetadataType"]]]}],"meta":{"line":470,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"ClientUserEditData","description":"Data used to edit the logged in client","type":[[["Object"]]],"props":[{"name":"username","description":"The new username","optional":true,"type":[[["string"]]]},{"name":"avatar","description":"The new avatar","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"banner","description":"The new banner","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"bio","description":"The new bio","optional":true,"nullable":true,"type":[[["string"]]]}],"meta":{"line":142,"file":"ClientUser.js","path":"src/structures"}},{"name":"ActivitiesOptions","description":"Options for setting activities","type":[[["Object"]]],"props":[{"name":"name","description":"Name of the activity","type":[[["string"]]]},{"name":"state","description":"State of the activity","optional":true,"type":[[["string"]]]},{"name":"type","description":"Type of the activity","optional":true,"type":[[["ActivityType"]],[["number"]]]},{"name":"url","description":"Twitch / YouTube stream URL","optional":true,"type":[[["string"]]]}],"meta":{"line":381,"file":"ClientUser.js","path":"src/structures"}},{"name":"PresenceData","description":"Data resembling a raw Discord presence.","type":[[["Object"]]],"props":[{"name":"status","description":"Status of the user","optional":true,"type":[[["PresenceStatusData"]]]},{"name":"afk","description":"Whether the user is AFK","optional":true,"type":[[["boolean"]]]},{"name":"activities","description":"Activity the user is playing","optional":true,"type":[[["Array","<"],["ActivitiesOptions",">"]],[["Array","<"],["CustomStatus",">"]],[["Array","<"],["RichPresence",">"]],[["Array","<"],["SpotifyRPC",">"]]]},{"name":"shardId","description":"Shard id(s) to have the activity set on","optional":true,"type":[[["number"]],[["Array","<"],["number",">"]]]}],"meta":{"line":390,"file":"ClientUser.js","path":"src/structures"}},{"name":"PresenceStatusData","description":"A user's status. Must be one of:\n* `online`\n* `idle`\n* `invisible`\n* `dnd` (do not disturb)","type":[[["string"]]],"meta":{"line":412,"file":"ClientUser.js","path":"src/structures"}},{"name":"ActivityOptions","description":"Options for setting an activity.","type":[[["Object"]]],"props":[{"name":"name","description":"Name of the activity","type":[[["string"]]]},{"name":"url","description":"Twitch / YouTube stream URL","optional":true,"type":[[["string"]]]},{"name":"type","description":"Type of the activity","optional":true,"type":[[["ActivityType"]],[["number"]]]},{"name":"shardId","description":"Shard Id(s) to have the activity set on","optional":true,"type":[[["number"]],[["Array","<"],["number",">"]]]}],"meta":{"line":434,"file":"ClientUser.js","path":"src/structures"}},{"name":"AutocompleteFocusedOption","description":"The full autocomplete option object.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the option","type":[[["string"]]]},{"name":"type","description":"The type of the application command option","type":[[["ApplicationCommandOptionType"]]]},{"name":"value","description":"The value of the option","type":[[["string"]]]},{"name":"focused","description":"Whether this option is currently in focus for autocomplete","type":[[["boolean"]]]}],"meta":{"line":243,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"Tester","type":[[["Object"]]],"props":[{"name":"state","description":"The state of the tester (2: Accepted, 1: Pending)","type":[[["number"]]]},{"name":"user","description":"The user that the tester is","type":[[["User"]]]}],"meta":{"line":174,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"ApplicationAsset","description":"Asset data.","type":[[["Object"]]],"props":[{"name":"id","description":"The asset's id","type":[[["Snowflake"]]]},{"name":"name","description":"The asset's name","type":[[["string"]]]},{"name":"type","description":"The asset's type","type":[[["string"]]]}],"meta":{"line":142,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"ApplicationEditData","description":"The data for editing a application.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the app","optional":true,"type":[[["string"]]]},{"name":"description","description":"The description of the app","optional":true,"type":[[["string"]]]},{"name":"icon","description":"The icon of the app","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"cover","description":"The application's default rich presence invite","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"botPublic","description":"When false only app owner can join the app's bot to guilds","optional":true,"type":[[["boolean"]]]},{"name":"botRequireCodeGrant","description":"When true the app's bot will only join upon completion of the full oauth2 code grant flow","optional":true,"type":[[["boolean"]]]},{"name":"TermsOfService","description":"ToS URL","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"PrivacyPolicy","description":"Privacy policy URL","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"flags","description":"The application's public flags","optional":true,"type":[[["number"]]]},{"name":"redirectURIs","description":"Redirect URIs (OAuth2 only)","optional":true,"type":[[["Array","<"],["string",">"]]]},{"name":"tags","description":"Up to 5 tags describing the content and functionality of the application","optional":true,"type":[[["Array","<"],["string",">"]]]}],"meta":{"line":334,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"RawEmoji","description":"Represents raw emoji data from the API","type":[[["APIEmoji"]]],"props":[{"name":"id","description":"The emoji's id","nullable":true,"type":[[["Snowflake"]]]},{"name":"name","description":"The emoji's name","nullable":true,"type":[[["string"]]]},{"name":"animated","description":"Whether the emoji is animated","nullable":true,"type":[[["boolean"]]]}],"meta":{"line":15,"file":"Emoji.js","path":"src/structures"}},{"name":"GuildForumTagEmoji","type":[[["Object"]]],"props":[{"name":"id","description":"The id of a guild's custom emoji","nullable":true,"type":[[["Snowflake"]]]},{"name":"name","description":"The unicode character of the emoji","nullable":true,"type":[[["string"]]]}],"meta":{"line":10,"file":"ForumChannel.js","path":"src/structures"}},{"name":"GuildForumTag","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the tag","type":[[["Snowflake"]]]},{"name":"name","description":"The name of the tag","type":[[["string"]]]},{"name":"moderated","description":"Whether this tag can only be added to or removed from threads\nby a member with the `ManageThreads` permission","type":[[["boolean"]]]},{"name":"emoji","description":"The emoji of this tag","nullable":true,"type":[[["GuildForumTagEmoji"]]]}],"meta":{"line":16,"file":"ForumChannel.js","path":"src/structures"}},{"name":"GuildForumTagData","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the tag","optional":true,"type":[[["Snowflake"]]]},{"name":"name","description":"The name of the tag","type":[[["string"]]]},{"name":"moderated","description":"Whether this tag can only be added to or removed from threads\nby a member with the `ManageThreads` permission","optional":true,"type":[[["boolean"]]]},{"name":"emoji","description":"The emoji of this tag","optional":true,"nullable":true,"type":[[["GuildForumTagEmoji"]]]}],"meta":{"line":25,"file":"ForumChannel.js","path":"src/structures"}},{"name":"DefaultReactionEmoji","type":[[["Object"]]],"props":[{"name":"id","description":"The id of a guild's custom emoji","nullable":true,"type":[[["Snowflake"]]]},{"name":"name","description":"The unicode character of the emoji","nullable":true,"type":[[["string"]]]}],"meta":{"line":34,"file":"ForumChannel.js","path":"src/structures"}},{"name":"Features","description":"An array of enabled guild features, here are the possible values:\n* ANIMATED_ICON\n* AUTO_MODERATION\n* BANNER\n* CLYDE_ENABLED\n `CLYDE_ENABLED` is now an experimental feature of Discord.\nSee [this](https://rollouts.advaith.io/#2023-03_clyde_ai) for more information.\n* COMMERCE\n* COMMUNITY\n* CREATOR_MONETIZABLE_PROVISIONAL\n* CREATOR_STORE_PAGE\n* DISCOVERABLE\n* FEATURABLE\n* INVITES_DISABLED\n* INVITE_SPLASH\n* MEMBER_VERIFICATION_GATE_ENABLED\n* NEWS\n* PARTNERED\n* PREVIEW_ENABLED\n* VANITY_URL\n* VERIFIED\n* VIP_REGIONS\n* WELCOME_SCREEN_ENABLED\n* TICKETED_EVENTS_ENABLED\n* MONETIZATION_ENABLED\n`MONETIZATION_ENABLED` has been replaced.\nSee [this pull request](https://github.com/discord/discord-api-docs/pull/5724) for more information.\n* MORE_STICKERS\n* THREE_DAY_THREAD_ARCHIVE\n* SEVEN_DAY_THREAD_ARCHIVE\n* RAID_ALERTS_DISABLED\n* PRIVATE_THREADS\n* ROLE_ICONS\n* ROLE_SUBSCRIPTIONS_AVAILABLE_FOR_PURCHASE\n* ROLE_SUBSCRIPTIONS_ENABLED","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-guild-features}"],"type":[[["string"]]],"meta":{"line":226,"file":"Guild.js","path":"src/structures"}},{"name":"Vanity","description":"An object containing information about a guild's vanity invite.","type":[[["Object"]]],"props":[{"name":"code","description":"Vanity invite code","nullable":true,"type":[[["string"]]]},{"name":"uses","description":"How many times this invite has been used","type":[[["number"]]]}],"meta":{"line":756,"file":"Guild.js","path":"src/structures"}},{"name":"GuildWidgetSettings","description":"Data for the Guild Widget Settings object.","type":[[["Object"]]],"props":[{"name":"enabled","description":"Whether the widget is enabled","type":[[["boolean"]]]},{"name":"channel","description":"The widget invite channel","nullable":true,"type":[[["GuildChannel"]]]}],"meta":{"line":814,"file":"Guild.js","path":"src/structures"}},{"name":"GuildWidgetSettingsData","description":"The Guild Widget Settings object.","type":[[["Object"]]],"props":[{"name":"enabled","description":"Whether the widget is enabled","type":[[["boolean"]]]},{"name":"channel","description":"The widget invite channel","nullable":true,"type":[[["GuildChannelResolvable"]]]}],"meta":{"line":821,"file":"Guild.js","path":"src/structures"}},{"name":"GuildAuditLogsFetchOptions","description":"Options used to fetch audit logs.","type":[[["Object"]]],"props":[{"name":"before","description":"Consider only entries before this entry","optional":true,"type":[[["Snowflake"]],[["GuildAuditLogsEntry"]]]},{"name":"after","description":"Consider only entries after this entry","optional":true,"type":[[["Snowflake"]],[["GuildAuditLogsEntry"]]]},{"name":"limit","description":"The number of entries to return","optional":true,"type":[[["number"]]]},{"name":"user","description":"Only return entries for actions made by this user","optional":true,"type":[[["UserResolvable"]]]},{"name":"type","description":"Only return entries for this action type","optional":true,"type":[[["AuditLogAction"]],[["number"]]]}],"meta":{"line":847,"file":"Guild.js","path":"src/structures"}},{"name":"GuildEditData","description":"The data for editing a guild.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the guild","optional":true,"type":[[["string"]]]},{"name":"verificationLevel","description":"The verification level of the guild","optional":true,"nullable":true,"type":[[["VerificationLevel"]],[["number"]]]},{"name":"explicitContentFilter","description":"The level of the explicit content filter","optional":true,"nullable":true,"type":[[["ExplicitContentFilterLevel"]],[["number"]]]},{"name":"afkChannel","description":"The AFK channel of the guild","optional":true,"nullable":true,"type":[[["VoiceChannelResolvable"]]]},{"name":"systemChannel","description":"The system channel of the guild","optional":true,"nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"afkTimeout","description":"The AFK timeout of the guild","optional":true,"type":[[["number"]]]},{"name":"icon","description":"The icon of the guild","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"owner","description":"The owner of the guild","optional":true,"type":[[["GuildMemberResolvable"]]]},{"name":"splash","description":"The invite splash image of the guild","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"discoverySplash","description":"The discovery splash image of the guild","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"banner","description":"The banner of the guild","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"defaultMessageNotifications","description":"The default message notification\nlevel of the guild","optional":true,"nullable":true,"type":[[["DefaultMessageNotificationLevel"]],[["number"]]]},{"name":"systemChannelFlags","description":"The system channel flags of the guild","optional":true,"type":[[["SystemChannelFlagsResolvable"]]]},{"name":"rulesChannel","description":"The rules channel of the guild","optional":true,"nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"publicUpdatesChannel","description":"The community updates channel of the guild","optional":true,"nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"preferredLocale","description":"The preferred locale of the guild","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"safetyAlertsChannel","description":"The safety alerts channel of the guild","optional":true,"nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"premiumProgressBarEnabled","description":"Whether the guild's premium progress bar is enabled","optional":true,"type":[[["boolean"]]]},{"name":"description","description":"The discovery description of the guild","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"features","description":"The features of the guild","optional":true,"type":[[["Array","<"],["Features",">"]]]}],"meta":{"line":880,"file":"Guild.js","path":"src/structures"}},{"name":"TextChannelResolvable","description":"Data that can be resolved to a Text Channel object. This can be:\n* A TextChannel\n* A Snowflake","type":[[["TextChannel"]],[["Snowflake"]]],"meta":{"line":906,"file":"Guild.js","path":"src/structures"}},{"name":"VoiceChannelResolvable","description":"Data that can be resolved to a Voice Channel object. This can be:\n* A VoiceChannel\n* A Snowflake","type":[[["VoiceChannel"]],[["Snowflake"]]],"meta":{"line":913,"file":"Guild.js","path":"src/structures"}},{"name":"WelcomeChannelData","description":"Welcome channel data.","type":[[["Object"]]],"props":[{"name":"description","description":"The description to show for this welcome channel","type":[[["string"]]]},{"name":"channel","description":"The channel to link for this welcome channel","type":[[["TextChannel"]],[["NewsChannel"]],[["StoreChannel"]],[["Snowflake"]]]},{"name":"emoji","description":"The emoji to display for this welcome channel","optional":true,"type":[[["EmojiIdentifierResolvable"]]]}],"meta":{"line":1000,"file":"Guild.js","path":"src/structures"}},{"name":"WelcomeScreenEditData","description":"Welcome screen edit data.","type":[[["Object"]]],"props":[{"name":"enabled","description":"Whether the welcome screen is enabled","optional":true,"type":[[["boolean"]]]},{"name":"description","description":"The description for the welcome screen","optional":true,"type":[[["string"]]]},{"name":"welcomeChannels","description":"The welcome channel data for the welcome screen","optional":true,"type":[[["Array","<"],["WelcomeChannelData",">"]]]}],"meta":{"line":1008,"file":"Guild.js","path":"src/structures"}},{"name":"GuildTextChannelResolvable","description":"Data that can be resolved to a GuildTextChannel object. This can be:\n* A TextChannel\n* A NewsChannel\n* A Snowflake","type":[[["TextChannel"]],[["NewsChannel"]],[["Snowflake"]]],"meta":{"line":1016,"file":"Guild.js","path":"src/structures"}},{"name":"GuildVoiceChannelResolvable","description":"Data that can be resolved to a GuildVoiceChannel object. This can be:\n* A VoiceChannel\n* A StageChannel\n* A Snowflake","type":[[["VoiceChannel"]],[["StageChannel"]],[["Snowflake"]]],"meta":{"line":1024,"file":"Guild.js","path":"src/structures"}},{"name":"AuditLogTargetType","description":"The target type of an entry. Here are the available types:\n* GUILD\n* CHANNEL\n* USER\n* ROLE\n* INVITE\n* WEBHOOK\n* EMOJI\n* MESSAGE\n* INTEGRATION\n* STAGE_INSTANCE\n* STICKER\n* THREAD\n* GUILD_SCHEDULED_EVENT\n* APPLICATION_COMMAND\n* AUTO_MODERATION","type":[[["string"]]],"meta":{"line":16,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"AuditLogAction","description":"The action of an entry. Here are the available actions:\n* ALL: null\n* GUILD_UPDATE: 1\n* CHANNEL_CREATE: 10\n* CHANNEL_UPDATE: 11\n* CHANNEL_DELETE: 12\n* CHANNEL_OVERWRITE_CREATE: 13\n* CHANNEL_OVERWRITE_UPDATE: 14\n* CHANNEL_OVERWRITE_DELETE: 15\n* MEMBER_KICK: 20\n* MEMBER_PRUNE: 21\n* MEMBER_BAN_ADD: 22\n* MEMBER_BAN_REMOVE: 23\n* MEMBER_UPDATE: 24\n* MEMBER_ROLE_UPDATE: 25\n* MEMBER_MOVE: 26\n* MEMBER_DISCONNECT: 27\n* BOT_ADD: 28,\n* ROLE_CREATE: 30\n* ROLE_UPDATE: 31\n* ROLE_DELETE: 32\n* INVITE_CREATE: 40\n* INVITE_UPDATE: 41\n* INVITE_DELETE: 42\n* WEBHOOK_CREATE: 50\n* WEBHOOK_UPDATE: 51\n* WEBHOOK_DELETE: 52\n* EMOJI_CREATE: 60\n* EMOJI_UPDATE: 61\n* EMOJI_DELETE: 62\n* MESSAGE_DELETE: 72\n* MESSAGE_BULK_DELETE: 73\n* MESSAGE_PIN: 74\n* MESSAGE_UNPIN: 75\n* INTEGRATION_CREATE: 80\n* INTEGRATION_UPDATE: 81\n* INTEGRATION_DELETE: 82\n* STAGE_INSTANCE_CREATE: 83\n* STAGE_INSTANCE_UPDATE: 84\n* STAGE_INSTANCE_DELETE: 85\n* STICKER_CREATE: 90\n* STICKER_UPDATE: 91\n* STICKER_DELETE: 92\n* GUILD_SCHEDULED_EVENT_CREATE: 100\n* GUILD_SCHEDULED_EVENT_UPDATE: 101\n* GUILD_SCHEDULED_EVENT_DELETE: 102\n* THREAD_CREATE: 110\n* THREAD_UPDATE: 111\n* THREAD_DELETE: 112\n* APPLICATION_COMMAND_PERMISSION_UPDATE: 121\n* AUTO_MODERATION_RULE_CREATE: 140\n* AUTO_MODERATION_RULE_UPDATE: 141\n* AUTO_MODERATION_RULE_DELETE: 142\n* AUTO_MODERATION_BLOCK_MESSAGE: 143\n* AUTO_MODERATION_FLAG_TO_CHANNEL: 144\n* AUTO_MODERATION_USER_COMMUNICATION_DISABLED: 145","see":["{@link https://discord.com/developers/docs/resources/audit-log#audit-log-entry-object-audit-log-events}"],"type":[[["number"]],[["string"]]],"meta":{"line":61,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"AuditLogEntryTarget","description":"The target of an entry. It can be one of:\n* A guild\n* A channel\n* A user\n* A role\n* An invite\n* A webhook\n* An emoji\n* A message\n* An integration\n* A stage instance\n* A sticker\n* A guild scheduled event\n* A thread\n* An application command\n* An auto moderation rule\n* An object with an id key if target was deleted\n* An object where the keys represent either the new value or the old value","type":[[["Object"]],[["Guild"]],[["Channel"]],[["User"]],[["Role"]],[["Invite"]],[["Webhook"]],[["GuildEmoji"]],[["Message"]],[["Integration"]],[["StageInstance"]],[["Sticker"]],[["GuildScheduledEvent"]],[["ApplicationCommand"]],[["AutoModerationRule"]]],"meta":{"line":260,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"AuditLogActionType","description":"The action type of an entry, e.g. `CREATE`. Here are the available types:\n* CREATE\n* DELETE\n* UPDATE\n* ALL","type":[[["string"]]],"meta":{"line":307,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"AuditLogChange","description":"An entry in the audit log representing a specific change.","type":[[["Object"]]],"props":[{"name":"key","description":"The property that was changed, e.g. `nick` for nickname changes","type":[[["string"]]]},{"name":"old","description":"The old value of the change, e.g. for nicknames, the old nickname","optional":true,"type":[["*"]]},{"name":"new","description":"The new value of the change, e.g. for nicknames, the new nickname","optional":true,"type":[["*"]]}],"meta":{"line":449,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"SetParentOptions","description":"Options used to set the parent of a channel.","type":[[["Object"]]],"props":[{"name":"lockPermissions","description":"Whether to lock the permissions to what the parent's permissions are","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"The reason for modifying the parent of the channel","optional":true,"type":[[["string"]]]}],"meta":{"line":308,"file":"GuildChannel.js","path":"src/structures"}},{"name":"SetChannelPositionOptions","description":"Options used to set the position of a channel.","type":[[["Object"]]],"props":[{"name":"relative","description":"Whether or not to change the position relative to its current value","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"reason","description":"The reason for changing the position","optional":true,"type":[[["string"]]]}],"meta":{"line":336,"file":"GuildChannel.js","path":"src/structures"}},{"name":"GuildChannelCloneOptions","description":"Options used to clone a guild channel.","type":[[["GuildChannelCreateOptions"]]],"props":[{"name":"name","description":"Name of the new channel","optional":true,"default":"this.name","type":[[["string"]]]}],"meta":{"line":358,"file":"GuildChannel.js","path":"src/structures"}},{"name":"GuildEmojiEditData","description":"Data for editing an emoji.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the emoji","optional":true,"type":[[["string"]]]},{"name":"roles","description":"Roles to restrict emoji to","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]}],"meta":{"line":79,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"GuildScheduledEventEntityMetadata","description":"Represents the additional metadata for a {@link GuildScheduledEvent}","see":["{@link https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-entity-metadata}"],"type":[[["Object"]]],"props":[{"name":"location","description":"The location of the guild scheduled event","nullable":true,"type":[[["string"]]]}],"meta":{"line":136,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"CreateGuildScheduledEventInviteURLOptions","description":"Options used to create an invite URL to a {@link GuildScheduledEvent}","type":[[["CreateInviteOptions"]]],"props":[{"name":"channel","description":"The channel to create the invite in.\nThis is required when the `entityType` of `GuildScheduledEvent` is `EXTERNAL`, gets ignored otherwise","optional":true,"type":[[["GuildInvitableChannelResolvable"]]]}],"meta":{"line":244,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"EditGuildTemplateOptions","description":"Options used to edit a guild template.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this template","optional":true,"type":[[["string"]]]},{"name":"description","description":"The description of this template","optional":true,"type":[[["string"]]]}],"meta":{"line":147,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"IntegrationAccount","description":"The information account for an integration","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the account","type":[[["Snowflake"]],[["string"]]]},{"name":"name","description":"The name of the account","type":[[["string"]]]}],"meta":{"line":6,"file":"Integration.js","path":"src/structures"}},{"name":"IntegrationType","description":"The type of an {@link Integration}. This can be:\n* `twitch`\n* `youtube`\n* `discord`\n* `guild_subscription`","type":[[["string"]]],"meta":{"line":13,"file":"Integration.js","path":"src/structures"}},{"name":"Locale","description":"A Discord locale string, possible values are:\n* en-US (English, US)\n* en-GB (English, UK)\n* bg (Bulgarian)\n* zh-CN (Chinese, China)\n* zh-TW (Chinese, Taiwan)\n* hr (Croatian)\n* cs (Czech)\n* da (Danish)\n* nl (Dutch)\n* fi (Finnish)\n* fr (French)\n* de (German)\n* el (Greek)\n* hi (Hindi)\n* hu (Hungarian)\n* it (Italian)\n* ja (Japanese)\n* ko (Korean)\n* lt (Lithuanian)\n* no (Norwegian)\n* pl (Polish)\n* pt-BR (Portuguese, Brazilian)\n* ro (Romanian, Romania)\n* ru (Russian)\n* es-ES (Spanish)\n* sv-SE (Swedish)\n* th (Thai)\n* tr (Turkish)\n* uk (Ukrainian)\n* vi (Vietnamese)","see":["{@link https://discord.com/developers/docs/reference#locales}"],"type":[[["string"]]],"meta":{"line":84,"file":"Interaction.js","path":"src/structures"}},{"name":"InteractionCollectorOptions","type":[[["CollectorOptions"]]],"props":[{"name":"channel","description":"The channel to listen to interactions from","optional":true,"type":[[["TextBasedChannelsResolvable"]]]},{"name":"componentType","description":"The type of component to listen for","optional":true,"type":[[["MessageComponentType"]]]},{"name":"guild","description":"The guild to listen to interactions from","optional":true,"type":[[["GuildResolvable"]]]},{"name":"interactionType","description":"The type of interaction to listen for","optional":true,"type":[[["InteractionType"]]]},{"name":"max","description":"The maximum total amount of interactions to collect","optional":true,"type":[[["number"]]]},{"name":"maxComponents","description":"The maximum number of components to collect","optional":true,"type":[[["number"]]]},{"name":"maxUsers","description":"The maximum number of users to interact","optional":true,"type":[[["number"]]]},{"name":"message","description":"The message to listen to interactions from","optional":true,"type":[[["Message"]],[["APIMessage"]]]}],"meta":{"line":8,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"CollectorFilter","description":"Filter to be applied to the collector.","type":[[["function"]]],"params":[{"name":"args","description":"Any arguments received by the listener","variable":true,"type":[["*"]]},{"name":"collection","description":"The items collected by this collector","type":[[["Collection"]]]}],"returns":[[["boolean"]],[["Promise","<"],["boolean",">"]]],"meta":{"line":9,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"CollectorOptions","description":"Options to be applied to the collector.","type":[[["Object"]]],"props":[{"name":"filter","description":"The filter applied to this collector","optional":true,"type":[[["CollectorFilter"]]]},{"name":"time","description":"How long to run the collector for in milliseconds","optional":true,"type":[[["number"]]]},{"name":"idle","description":"How long to stop the collector after inactivity in milliseconds","optional":true,"type":[[["number"]]]},{"name":"dispose","description":"Whether to dispose data when it's deleted","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":17,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"CollectorResetTimerOptions","description":"Options used to reset the timeout and idle timer of a {@link Collector}.","type":[[["Object"]]],"props":[{"name":"time","description":"How long to run the collector for (in milliseconds)","optional":true,"type":[[["number"]]]},{"name":"idle","description":"How long to wait to stop the collector after inactivity (in milliseconds)","optional":true,"type":[[["number"]]]}],"meta":{"line":202,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"InteractionDeferReplyOptions","description":"Options for deferring the reply to an {@link Interaction}.","type":[[["Object"]]],"props":[{"name":"ephemeral","description":"Whether the reply should be ephemeral","optional":true,"type":[[["boolean"]]]},{"name":"fetchReply","description":"Whether to fetch the reply","optional":true,"type":[[["boolean"]]]}],"meta":{"line":15,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"InteractionDeferUpdateOptions","description":"Options for deferring and updating the reply to a {@link MessageComponentInteraction}.","type":[[["Object"]]],"props":[{"name":"fetchReply","description":"Whether to fetch the reply","optional":true,"type":[[["boolean"]]]}],"meta":{"line":22,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"InteractionReplyOptions","description":"Options for a reply to an {@link Interaction}.","type":[[["BaseMessageOptions"]]],"props":[{"name":"ephemeral","description":"Whether the reply should be ephemeral","optional":true,"type":[[["boolean"]]]},{"name":"fetchReply","description":"Whether to fetch the reply","optional":true,"type":[[["boolean"]]]},{"name":"flags","description":"Which flags to set for the message.\nOnly `SUPPRESS_EMBEDS` and `EPHEMERAL` can be set.","optional":true,"type":[[["MessageFlags"]]]}],"meta":{"line":28,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"InteractionUpdateOptions","description":"Options for updating the message received from a {@link MessageComponentInteraction}.","type":[[["MessageEditOptions"]]],"props":[{"name":"fetchReply","description":"Whether to fetch the reply","optional":true,"type":[[["boolean"]]]}],"meta":{"line":37,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"InteractionEditReplyOptions","description":"Options that can be passed into {@link InteractionResponses#editReply}.","type":[[["WebhookEditMessageOptions"]]],"props":[{"name":"message","description":"The response to edit","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"meta":{"line":131,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"AwaitModalSubmitOptions","description":"An object containing the same properties as CollectorOptions, but a few more:","type":[[["Object"]]],"props":[{"name":"filter","description":"The filter applied to this collector","optional":true,"type":[[["CollectorFilter"]]]},{"name":"time","description":"Time in milliseconds to wait for an interaction before rejecting","type":[[["number"]]]}],"meta":{"line":256,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"BaseMessageOptions","description":"Base options provided when sending.","type":[[["Object"]]],"props":[{"name":"activity","description":"Group activity","optional":true,"type":[[["MessageActivity"]]]},{"name":"tts","description":"Whether or not the message should be spoken aloud","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"nonce","description":"The nonce for the message","optional":true,"default":"''","type":[[["string"]]]},{"name":"content","description":"The content for the message","optional":true,"default":"''","type":[[["string"]]]},{"name":"embeds","description":"The embeds for the message\n(see [here](https://discord.com/developers/docs/resources/channel#embed-object) for more details)","optional":true,"type":[[["Array","<("],["MessageEmbed","|"],["APIEmbed","|"],["WebEmbed",")>"]]]},{"name":"allowedMentions","description":"Which mentions should be parsed from the message content\n(see [here](https://discord.com/developers/docs/resources/channel#allowed-mentions-object) for more details)","optional":true,"type":[[["MessageMentionOptions"]]]},{"name":"files","description":"Files to send with the message","optional":true,"type":[[["Array","<("],["FileOptions","|"],["BufferResolvable","|"],["Array","<"],["MessageAttachment",">)>"]]]},{"name":"components","description":"Action rows containing interactive components for the message (buttons, select menus)","optional":true,"type":[[["Array","<("],["MessageActionRow","|"],["MessageActionRowOptions",")>"]]]},{"name":"attachments","description":"Attachments to send in the message","optional":true,"type":[[["Array","<"],["MessageAttachment",">"]]]},{"name":"usingNewAttachmentAPI","description":"Whether to use the new attachment API (`channels/:id/attachments`)","optional":true,"type":[[["boolean"]]]}],"meta":{"line":72,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"MessageOptions","description":"Options provided when sending or editing a message.","type":[[["BaseMessageOptions"]]],"props":[{"name":"reply","description":"The options for replying to a message","optional":true,"type":[[["ReplyOptions"]]]},{"name":"stickers","description":"Stickers to send in the message","optional":true,"default":"[]","type":[[["Array","<"],["StickerResolvable",">"]]]},{"name":"flags","description":"Which flags to set for the message.\nOnly `SUPPRESS_EMBEDS`, `SUPPRESS_NOTIFICATIONS` and `IS_VOICE_MESSAGE` can be set.","optional":true,"type":[[["MessageFlags"]]]}],"meta":{"line":90,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"MessageMentionOptions","description":"Options provided to control parsing of mentions by Discord","type":[[["Object"]]],"props":[{"name":"parse","description":"Types of mentions to be parsed","optional":true,"type":[[["Array","<"],["MessageMentionTypes",">"]]]},{"name":"users","description":"Snowflakes of Users to be parsed as mentions","optional":true,"type":[[["Array","<"],["Snowflake",">"]]]},{"name":"roles","description":"Snowflakes of Roles to be parsed as mentions","optional":true,"type":[[["Array","<"],["Snowflake",">"]]]},{"name":"repliedUser","description":"Whether the author of the Message being replied to should be pinged","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":99,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"MessageMentionTypes","description":"Types of mentions to enable in MessageMentionOptions.\n- `roles`\n- `users`\n- `everyone`","type":[[["string"]]],"meta":{"line":108,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"FileOptions","type":[[["Object"]]],"props":[{"name":"attachment","description":"File to attach","type":[[["BufferResolvable"]]]},{"name":"name","description":"Filename of the attachment","optional":true,"default":"'file.jpg'","type":[[["string"]]]},{"name":"description","description":"The description of the file","type":[[["string"]]]}],"meta":{"line":116,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"ReplyOptions","description":"Options for sending a message with a reply.","type":[[["Object"]]],"props":[{"name":"messageReference","description":"The message to reply to (must be in the same channel and not system)","type":[[["MessageResolvable"]]]},{"name":"failIfNotExists","description":"Whether to error if the referenced message\ndoes not exist (creates a standard message in this case when false)","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":123,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"AwaitMessagesOptions","description":"An object containing the same properties as CollectorOptions, but a few more:","type":[[["MessageCollectorOptions"]]],"props":[{"name":"errors","description":"Stop/end reasons that cause the promise to reject","optional":true,"type":[[["Array","<"],["string",">"]]]}],"meta":{"line":232,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"ChannelWebhookCreateOptions","description":"Options used to create a {@link Webhook} in a guild text-based channel.","type":[[["Object"]]],"props":[{"name":"avatar","description":"Avatar for the webhook","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"reason","description":"Reason for creating the webhook","optional":true,"type":[[["string"]]]}],"meta":{"line":372,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"TargetType","description":"The type of the invite target:\n* 1: STREAM\n* 2: EMBEDDED_APPLICATION","see":["{@link https://discord.com/developers/docs/resources/invite#invite-object-invite-target-types}"],"type":[[["number"]]],"meta":{"line":155,"file":"Invite.js","path":"src/structures"}},{"name":"MessageReference","description":"Reference data sent in a message that contains ids identifying the referenced message.\nThis can be present in the following types of message:\n* Crossposted messages (IS_CROSSPOST {@link MessageFlags.FLAGS message flag})\n* CHANNEL_FOLLOW_ADD\n* CHANNEL_PINNED_MESSAGE\n* REPLY\n* THREAD_STARTER_MESSAGE","see":["{@link https://discord.com/developers/docs/resources/channel#message-types}"],"type":[[["Object"]]],"props":[{"name":"channelId","description":"The channel's id the message was referenced","type":[[["Snowflake"]]]},{"name":"guildId","description":"The guild's id the message was referenced","nullable":true,"type":[[["Snowflake"]]]},{"name":"messageId","description":"The message's id that was referenced","nullable":true,"type":[[["Snowflake"]]]}],"meta":{"line":309,"file":"Message.js","path":"src/structures"}},{"name":"MessageInteraction","description":"Partial data of the interaction that a message is a reply to","type":[[["Object"]]],"props":[{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]]},{"name":"type","description":"The type of the interaction","type":[[["InteractionType"]]]},{"name":"commandName","description":"The name of the interaction's application command,\nas well as the subcommand and subcommand group, where applicable","type":[[["string"]]]},{"name":"user","description":"The user that invoked the interaction","type":[[["User"]]]}],"meta":{"line":342,"file":"Message.js","path":"src/structures"}},{"name":"AwaitReactionsOptions","description":"An object containing the same properties as CollectorOptions, but a few more:","type":[[["ReactionCollectorOptions"]]],"props":[{"name":"errors","description":"Stop/end reasons that cause the promise to reject","optional":true,"type":[[["Array","<"],["string",">"]]]}],"meta":{"line":508,"file":"Message.js","path":"src/structures"}},{"name":"MessageComponentCollectorOptions","type":[[["CollectorOptions"]]],"props":[{"name":"componentType","description":"The type of component to listen for","optional":true,"type":[[["MessageComponentType"]]]},{"name":"max","description":"The maximum total amount of interactions to collect","optional":true,"type":[[["number"]]]},{"name":"maxComponents","description":"The maximum number of components to collect","optional":true,"type":[[["number"]]]},{"name":"maxUsers","description":"The maximum number of users to interact","optional":true,"type":[[["number"]]]}],"meta":{"line":536,"file":"Message.js","path":"src/structures"}},{"name":"AwaitMessageComponentOptions","description":"An object containing the same properties as CollectorOptions, but a few more:","type":[[["Object"]]],"props":[{"name":"filter","description":"The filter applied to this collector","optional":true,"type":[[["CollectorFilter"]]]},{"name":"time","description":"Time to wait for an interaction before rejecting","optional":true,"type":[[["number"]]]},{"name":"componentType","description":"The type of component interaction to collect","optional":true,"type":[[["MessageComponentType"]]]}],"meta":{"line":563,"file":"Message.js","path":"src/structures"}},{"name":"MessageEditOptions","description":"Options that can be passed into {@link Message#edit}.","type":[[["Object"]]],"props":[{"name":"content","description":"Content to be edited","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"embeds","description":"Embeds to be added/edited","optional":true,"type":[[["Array","<"],["MessageEmbed",">"]],[["Array","<"],["APIEmbed",">"]]]},{"name":"allowedMentions","description":"Which mentions should be parsed from the message content","optional":true,"type":[[["MessageMentionOptions"]]]},{"name":"flags","description":"Which flags to set for the message. Only `SUPPRESS_EMBEDS` can be edited.","optional":true,"type":[[["MessageFlags"]]]},{"name":"attachments","description":"An array of attachments to keep,\nall attachments will be kept if omitted","optional":true,"type":[[["Array","<"],["MessageAttachment",">"]]]},{"name":"files","description":"Files to add to the message","optional":true,"type":[[["Array","<"],["FileOptions",">"]],[["Array","<"],["BufferResolvable",">"]],[["Array","<"],["MessageAttachment",">"]]]},{"name":"components","description":"Action rows containing interactive components for the message (buttons, select menus)","optional":true,"type":[[["Array","<("],["MessageActionRow","|"],["MessageActionRowOptions",")>"]]]}],"meta":{"line":715,"file":"Message.js","path":"src/structures"}},{"name":"ReplyMessageOptions","description":"Options provided when sending a message as an inline reply.","type":[[["BaseMessageOptions"]]],"props":[{"name":"failIfNotExists","description":"Whether to error if the referenced message\ndoes not exist (creates a standard message in this case when false)","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"stickers","description":"Stickers to send in the message","optional":true,"default":"[]","type":[[["Array","<"],["StickerResolvable",">"]]]}],"meta":{"line":839,"file":"Message.js","path":"src/structures"}},{"name":"ThreadAutoArchiveDuration","description":"A number that is allowed to be the duration (in minutes) of inactivity after which a thread is automatically\narchived. This can be:\n* `60` (1 hour)\n* `1440` (1 day)\n* `4320` (3 days)\n* `10080` (7 days)\n* `'MAX'` (7 days)\nThis option is deprecated and will be removed in the next major version.","type":[[["number"]],[["string"]]],"meta":{"line":874,"file":"Message.js","path":"src/structures"}},{"name":"StartThreadOptions","description":"Options for starting a thread on a message.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the new thread","type":[[["string"]]]},{"name":"autoArchiveDuration","description":"The amount of\ntime (in minutes) after which the thread should automatically archive in case of no recent activity","optional":true,"default":"this.channel.defaultAutoArchiveDuration","type":[[["ThreadAutoArchiveDuration"]]]},{"name":"reason","description":"Reason for creating the thread","optional":true,"type":[[["string"]]]},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for the thread in seconds","optional":true,"type":[[["number"]]]}],"meta":{"line":886,"file":"Message.js","path":"src/structures"}},{"name":"MessageButtonLocation","type":[[["Object"]]],"props":[{"name":"row","description":"Index of the row","type":[[["number"]]]},{"name":"col","description":"Index of the column","type":[[["number"]]]}],"meta":{"line":1061,"file":"Message.js","path":"src/structures"}},{"name":"MessageActionRowComponent","description":"Components that can be placed in an action row\n* MessageButton\n* MessageSelectMenu\n* TextInputComponent","type":[[["MessageButton"]],[["MessageSelectMenu"]],[["TextInputComponent"]]],"meta":{"line":11,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"MessageActionRowComponentOptions","description":"Options for components that can be placed in an action row\n* MessageButtonOptions\n* MessageSelectMenuOptions\n* TextInputComponentOptions","type":[[["MessageButtonOptions"]],[["MessageSelectMenuOptions"]],[["TextInputComponentOptions"]]],"meta":{"line":19,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"MessageActionRowComponentResolvable","description":"Data that can be resolved into components that can be placed in an action row\n* MessageActionRowComponent\n* MessageActionRowComponentOptions","type":[[["MessageActionRowComponent"]],[["MessageActionRowComponentOptions"]]],"meta":{"line":27,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"MessageActionRowOptions","type":[[["BaseMessageComponentOptions"]]],"props":[{"name":"components","description":"The components to place in this action row","optional":true,"type":[[["Array","<"],["MessageActionRowComponentResolvable",">"]]]}],"meta":{"line":34,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"MessageButtonOptions","type":[[["BaseMessageComponentOptions"]]],"props":[{"name":"label","description":"The text to be displayed on this button","optional":true,"type":[[["string"]]]},{"name":"customId","description":"A unique string to be sent in the interaction when clicked","optional":true,"type":[[["string"]]]},{"name":"style","description":"The style of this button","optional":true,"type":[[["MessageButtonStyleResolvable"]]]},{"name":"emoji","description":"The emoji to be displayed to the left of the text","optional":true,"type":[[["EmojiIdentifierResolvable"]]]},{"name":"url","description":"Optional URL for link-style buttons","optional":true,"type":[[["string"]]]},{"name":"disabled","description":"Disables the button to prevent interactions","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":17,"file":"MessageButton.js","path":"src/structures"}},{"name":"MessageButtonStyleResolvable","description":"Data that can be resolved to a MessageButtonStyle. This can be\n* MessageButtonStyle\n* number","type":[[["number"]],[["MessageButtonStyle"]]],"meta":{"line":151,"file":"MessageButton.js","path":"src/structures"}},{"name":"MessageCollectorOptions","type":[[["CollectorOptions"]]],"props":[{"name":"max","description":"The maximum amount of messages to collect","type":[[["number"]]]},{"name":"maxProcessed","description":"The maximum amount of messages to process","type":[[["number"]]]}],"meta":{"line":6,"file":"MessageCollector.js","path":"src/structures"}},{"name":"APIMessageActionRowComponent","description":"Raw message components from the API\n* APIMessageButton\n* APIMessageSelectMenu","type":[[["APIMessageButton"]],[["APIMessageSelectMenu"]]],"meta":{"line":66,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"Partial","description":"A `Partial` object is a representation of any existing object.\nThis object contains between 0 and all of the original objects parameters.\nThis is true regardless of whether the parameters are optional in the base object.","type":[[["Object"]]],"meta":{"line":18,"file":"WebEmbed.js","path":"src/structures"}},{"name":"MessageEmbedOptions","description":"Represents the possible options for a MessageEmbed","type":[[["Object"]]],"props":[{"name":"title","description":"The title of this embed","optional":true,"type":[[["string"]]]},{"name":"description","description":"The description of this embed","optional":true,"type":[[["string"]]]},{"name":"url","description":"The URL of this embed","optional":true,"type":[[["string"]]]},{"name":"timestamp","description":"The timestamp of this embed","optional":true,"type":[[["Date"]],[["number"]]]},{"name":"color","description":"The color of this embed","optional":true,"type":[[["ColorResolvable"]]]},{"name":"fields","description":"The fields of this embed","optional":true,"type":[[["Array","<"],["EmbedFieldData",">"]]]},{"name":"author","description":"The author of this embed","optional":true,"type":[[["Partial","<"],["MessageEmbedAuthor",">"]]]},{"name":"thumbnail","description":"The thumbnail of this embed","optional":true,"type":[[["Partial","<"],["MessageEmbedThumbnail",">"]]]},{"name":"image","description":"The image of this embed","optional":true,"type":[[["Partial","<"],["MessageEmbedImage",">"]]]},{"name":"video","description":"The video of this embed","optional":true,"type":[[["Partial","<"],["MessageEmbedVideo",">"]]]},{"name":"footer","description":"The footer of this embed","optional":true,"type":[[["Partial","<"],["MessageEmbedFooter",">"]]]}],"meta":{"line":24,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"EmbedField","description":"Represents a field of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this field","type":[[["string"]]]},{"name":"value","description":"The value of this field","type":[[["string"]]]},{"name":"inline","description":"If this field will be displayed inline","type":[[["boolean"]]]}],"meta":{"line":93,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageEmbedThumbnail","description":"Represents the thumbnail of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"url","description":"URL for this thumbnail","type":[[["string"]]]},{"name":"proxyURL","description":"ProxyURL for this thumbnail","type":[[["string"]]]},{"name":"height","description":"Height of this thumbnail","type":[[["number"]]]},{"name":"width","description":"Width of this thumbnail","type":[[["number"]]]}],"meta":{"line":110,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageEmbedImage","description":"Represents the image of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"url","description":"URL for this image","type":[[["string"]]]},{"name":"proxyURL","description":"ProxyURL for this image","type":[[["string"]]]},{"name":"height","description":"Height of this image","type":[[["number"]]]},{"name":"width","description":"Width of this image","type":[[["number"]]]}],"meta":{"line":132,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageEmbedVideo","description":"Represents the video of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"url","description":"URL of this video","type":[[["string"]]]},{"name":"proxyURL","description":"ProxyURL for this video","type":[[["string"]]]},{"name":"height","description":"Height of this video","type":[[["number"]]]},{"name":"width","description":"Width of this video","type":[[["number"]]]}],"meta":{"line":154,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageEmbedAuthor","description":"Represents the author field of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this author","type":[[["string"]]]},{"name":"url","description":"URL of this author","type":[[["string"]]]},{"name":"iconURL","description":"URL of the icon for this author","type":[[["string"]]]},{"name":"proxyIconURL","description":"Proxied URL of the icon for this author","type":[[["string"]]]}],"meta":{"line":177,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageEmbedProvider","description":"Represents the provider of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this provider","type":[[["string"]]]},{"name":"url","description":"URL of this provider","type":[[["string"]]]}],"meta":{"line":199,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageEmbedFooter","description":"Represents the footer field of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"text","description":"The text of this footer","type":[[["string"]]]},{"name":"iconURL","description":"URL of the icon for this footer","type":[[["string"]]]},{"name":"proxyIconURL","description":"Proxied URL of the icon for this footer","type":[[["string"]]]}],"meta":{"line":217,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"EmbedAuthorData","description":"The options to provide for setting an author for a {@link WebEmbed}.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this author.","type":[[["string"]]]}],"meta":{"line":199,"file":"WebEmbed.js","path":"src/structures"}},{"name":"EmbedFooterData","description":"The options to provide for setting a footer for a {@link MessageEmbed}.","type":[[["Object"]]],"props":[{"name":"text","description":"The text of the footer.","type":[[["string"]]]},{"name":"iconURL","description":"The icon URL of the footer.","optional":true,"type":[[["string"]]]}],"meta":{"line":427,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"EmbedFieldData","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this field","type":[[["string"]]]},{"name":"value","description":"The value of this field","type":[[["string"]]]},{"name":"inline","description":"If this field will be displayed inline","optional":true,"type":[[["boolean"]]]}],"meta":{"line":560,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"CrosspostedChannel","description":"Crossposted channel data.","type":[[["Object"]]],"props":[{"name":"channelId","description":"The mentioned channel's id","type":[[["Snowflake"]]]},{"name":"guildId","description":"The id of the guild that has the channel","type":[[["Snowflake"]]]},{"name":"type","description":"The channel's type","type":[[["ChannelType"]]]},{"name":"name","description":"The channel's name","type":[[["string"]]]}],"meta":{"line":103,"file":"MessageMentions.js","path":"src/structures"}},{"name":"MessageMentionsHasOptions","description":"Options used to check for a mention.","type":[[["Object"]]],"props":[{"name":"ignoreDirect","description":"Whether to ignore direct mentions to the item","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"ignoreRoles","description":"Whether to ignore role mentions to a guild member","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"ignoreRepliedUser","description":"Whether to ignore replied user mention to an user","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"ignoreEveryone","description":"Whether to ignore `@everyone`/`@here` mentions","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":195,"file":"MessageMentions.js","path":"src/structures"}},{"name":"MessageTarget","description":"A target for a message.","type":[[["TextBasedChannels"]],[["DMChannel"]],[["User"]],[["GuildMember"]],[["Webhook"]],[["WebhookClient"]],[["Interaction"]],[["InteractionWebhook"]],[["Message"]],[["MessageManager"]]],"meta":{"line":349,"file":"MessagePayload.js","path":"src/structures"}},{"name":"MessageFile","type":[[["Object"]]],"props":[{"name":"attachment","description":"The original attachment that generated this file","type":[[["Buffer"]],[["string"]],[["Stream"]]]},{"name":"name","description":"The name of this file","type":[[["string"]]]},{"name":"file","description":"The file to be sent to the API","type":[[["Buffer"]],[["Stream"]]]}],"meta":{"line":40,"file":"MessagePayload.js","path":"src/structures"}},{"name":"ReactionCountDetailsData","description":"The reaction count details object contains information about super and normal reaction counts.","type":[[["Object"]]],"props":[{"name":"burst","description":"Count of super reaction","type":[[["number"]]]},{"name":"normal","description":"Count of normal reaction","type":[[["number"]]]}],"meta":{"line":76,"file":"MessageReaction.js","path":"src/structures"}},{"name":"MessageSelectMenuOptions","type":[[["BaseMessageComponentOptions"]]],"props":[{"name":"customId","description":"A unique string to be sent in the interaction when clicked","optional":true,"type":[[["string"]]]},{"name":"placeholder","description":"Custom placeholder text to display when nothing is selected","optional":true,"type":[[["string"]]]},{"name":"minValues","description":"The minimum number of selections required","optional":true,"type":[[["number"]]]},{"name":"maxValues","description":"The maximum number of selections allowed","optional":true,"type":[[["number"]]]},{"name":"options","description":"Options for the select menu","optional":true,"type":[[["Array","<"],["MessageSelectOption",">"]]]},{"name":"disabled","description":"Disables the select menu to prevent interactions","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"channelTypes","description":"List of channel types to include in the ChannelSelect component","optional":true,"type":[[["Array","<"],["ChannelType",">"]]]}],"meta":{"line":21,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"MessageSelectOption","type":[[["Object"]]],"props":[{"name":"label","description":"The text to be displayed on this option","type":[[["string"]]]},{"name":"value","description":"The value to be sent for this option","type":[[["string"]]]},{"name":"description","description":"Optional description to show for this option","nullable":true,"type":[[["string"]]]},{"name":"emoji","description":"Emoji to display for this option","nullable":true,"type":[[["RawEmoji"]]]},{"name":"default","description":"Render this option as the default selection","type":[[["boolean"]]]}],"meta":{"line":32,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"MessageSelectOptionData","type":[[["Object"]]],"props":[{"name":"label","description":"The text to be displayed on this option","type":[[["string"]]]},{"name":"value","description":"The value to be sent for this option","type":[[["string"]]]},{"name":"description","description":"Optional description to show for this option","optional":true,"type":[[["string"]]]},{"name":"emoji","description":"Emoji to display for this option","optional":true,"type":[[["EmojiIdentifierResolvable"]]]},{"name":"default","description":"Render this option as the default selection","optional":true,"type":[[["boolean"]]]}],"meta":{"line":41,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"ModalOptions","type":[[["Object"]]],"props":[{"name":"customId","description":"A unique string to be sent in the interaction when clicked","optional":true,"type":[[["string"]]]},{"name":"title","description":"The title to be displayed on this modal","optional":true,"type":[[["string"]]]},{"name":"components","description":"Action rows containing interactive components for the modal (text input components)","optional":true,"type":[[["Array","<("],["MessageActionRow","|"],["MessageActionRowOptions",")>"]]]}],"meta":{"line":13,"file":"Modal.js","path":"src/structures"}},{"name":"TextInputComponentReplyData","type":[[["Object"]]],"props":[{"name":"customId","description":"TextInputComponent custom id","optional":true,"type":[[["string"]]]},{"name":"value","description":"TextInputComponent value","optional":true,"type":[[["string"]]]}],"meta":{"line":147,"file":"Modal.js","path":"src/structures"}},{"name":"ModalReplyData","type":[[["Object"]]],"props":[{"name":"guild","description":"Guild to send the modal to","optional":true,"nullable":true,"type":[[["GuildResolvable"]]]},{"name":"channel","description":"User to send the modal to","optional":true,"nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"data","description":"Reply data","optional":true,"nullable":true,"type":[[["Array","<"],["TextInputComponentReplyData",">"]]]}],"meta":{"line":153,"file":"Modal.js","path":"src/structures"}},{"name":"PartialTextInputData","type":[[["Object"]]],"props":[{"name":"customId","description":"A unique string to be sent in the interaction when submitted","optional":true,"type":[[["string"]]]},{"name":"type","description":"The type of this component","optional":true,"type":[[["MessageComponentType"]]]},{"name":"value","description":"Value of this text input component","optional":true,"type":[[["string"]]]}],"meta":{"line":24,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"PartialModalActionRow","type":[[["Object"]]],"props":[{"name":"type","description":"The type of this component","optional":true,"type":[[["MessageComponentType"]]]},{"name":"components","description":"Partial text input components","optional":true,"type":[[["Array","<"],["PartialTextInputData",">"]]]}],"meta":{"line":31,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"CallOptions","type":[[["Object"]]],"props":[{"name":"selfDeaf","description":"Whether to deafen yourself","optional":true,"type":[[["boolean"]]]},{"name":"selfMute","description":"Whether to mute yourself","optional":true,"type":[[["boolean"]]]},{"name":"ring","description":"Emit a ringtone","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":303,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"PermissionOverwriteOptions","description":"An object mapping permission flags to `true` (enabled), `null` (unset) or `false` (disabled).\n```js\n{\n 'SEND_MESSAGES': true,\n 'EMBED_LINKS': null,\n 'ATTACH_FILES': false,\n}\n```","type":[[["Object"]]],"meta":{"line":97,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"ResolvedOverwriteOptions","type":[[["Object"]]],"props":[{"name":"allow","description":"The allowed permissions","type":[[["Permissions"]]]},{"name":"deny","description":"The denied permissions","type":[[["Permissions"]]]}],"meta":{"line":109,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"RawOverwriteData","description":"The raw data for a permission overwrite","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the {@link Role} or {@link User} this overwrite belongs to","type":[[["Snowflake"]]]},{"name":"allow","description":"The permissions to allow","type":[[["string"]]]},{"name":"deny","description":"The permissions to deny","type":[[["string"]]]},{"name":"type","description":"The type of this OverwriteData","type":[[["number"]]]}],"meta":{"line":141,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"OverwriteResolvable","description":"Data that can be resolved into {@link RawOverwriteData}. This can be:\n* PermissionOverwrites\n* OverwriteData","type":[[["PermissionOverwrites"]],[["OverwriteData"]]],"meta":{"line":150,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"OverwriteData","description":"Data that can be used for a permission overwrite","type":[[["Object"]]],"props":[{"name":"id","description":"Member or role this overwrite is for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"allow","description":"The permissions to allow","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"deny","description":"The permissions to deny","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"type","description":"The type of this OverwriteData","optional":true,"type":[[["OverwriteType"]]]}],"meta":{"line":157,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"MessageActivity","description":"Activity sent in a message.","type":[[["Object"]]],"props":[{"name":"partyId","description":"Id of the party represented in activity","optional":true,"type":[[["string"]]]},{"name":"type","description":"Type of activity sent","type":[[["MessageActivityType"]]]}],"meta":{"line":10,"file":"Presence.js","path":"src/structures"}},{"name":"PresenceStatus","description":"The status of this presence:\n* **`online`** - user is online\n* **`idle`** - user is AFK\n* **`offline`** - user is offline or invisible\n* **`dnd`** - user is in Do Not Disturb","type":[[["string"]]],"meta":{"line":22,"file":"Presence.js","path":"src/structures"}},{"name":"ClientPresenceStatus","description":"The status of this presence:\n* **`online`** - user is online\n* **`idle`** - user is AFK\n* **`dnd`** - user is in Do Not Disturb","type":[[["string"]]],"meta":{"line":31,"file":"Presence.js","path":"src/structures"}},{"name":"ActivityPlatform","description":"The platform of this activity:\n* **`desktop`**\n* **`samsung`** - playing on Samsung Galaxy\n* **`xbox`** - playing on Xbox Live","type":[[["string"]]],"meta":{"line":166,"file":"Presence.js","path":"src/structures"}},{"name":"ActivityTimestamps","description":"Represents timestamps of an activity","type":[[["Object"]]],"props":[{"name":"start","description":"When the activity started","nullable":true,"type":[[["Date"]]]},{"name":"end","description":"When the activity will end","nullable":true,"type":[[["Date"]]]}],"meta":{"line":229,"file":"Presence.js","path":"src/structures"}},{"name":"ActivityParty","description":"Represents a party of an activity","type":[[["Object"]]],"props":[{"name":"id","description":"The party's id","nullable":true,"type":[[["string"]]]},{"name":"size","description":"Size of the party as `[current, max]`","type":[[["Array","<"],["number",">"]]]}],"meta":{"line":259,"file":"Presence.js","path":"src/structures"}},{"name":"ReactionCollectorOptions","type":[[["CollectorOptions"]]],"props":[{"name":"max","description":"The maximum total amount of reactions to collect","type":[[["number"]]]},{"name":"maxEmojis","description":"The maximum number of emojis to collect","type":[[["number"]]]},{"name":"maxUsers","description":"The maximum number of users to react","type":[[["number"]]]}],"meta":{"line":7,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"CustomStatusOptions","type":[[["Object"]]],"props":[{"name":"state","description":"The state to be displayed","optional":true,"type":[[["string"]]]},{"name":"emoji","description":"The emoji to be displayed","optional":true,"type":[[["EmojiIdentifierResolvable"]]]}],"meta":{"line":19,"file":"RichPresence.js","path":"src/structures"}},{"name":"RichParty","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the party","type":[[["string"]]]},{"name":"max","description":"The maximum number of members in the party","type":[[["number"]]]},{"name":"current","description":"The current number of members in the party","type":[[["number"]]]}],"meta":{"line":338,"file":"RichPresence.js","path":"src/structures"}},{"name":"RichButton","type":[[["object"]]],"props":[{"name":"name","description":"The name of the button","type":[[["string"]]]},{"name":"url","description":"The url of the button","type":[[["string"]]]}],"meta":{"line":384,"file":"RichPresence.js","path":"src/structures"}},{"name":"SpotifyMetadata","type":[[["Object"]]],"props":[{"name":"album_id","description":"Album id","type":[[["string"]]]},{"name":"artist_ids","description":"Artist ids","type":[[["Array","<"],["string",">"]]]}],"meta":{"line":600,"file":"RichPresence.js","path":"src/structures"}},{"name":"ExternalAssets","type":[[["Object"]]],"props":[{"name":"url","description":"Orginal url of the image","nullable":true,"type":[[["string"]]]},{"name":"external_asset_path","description":"Proxy url of the image (Using to RPC)","nullable":true,"type":[[["string"]]]}],"meta":{"line":711,"file":"RichPresence.js","path":"src/structures"}},{"name":"RoleData","description":"The data for a role.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the role","optional":true,"type":[[["string"]]]},{"name":"color","description":"The color of the role, either a hex string or a base 10 number","optional":true,"type":[[["ColorResolvable"]]]},{"name":"hoist","description":"Whether or not the role should be hoisted","optional":true,"type":[[["boolean"]]]},{"name":"position","description":"The position of the role","optional":true,"type":[[["number"]]]},{"name":"permissions","description":"The permissions of the role","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"mentionable","description":"Whether or not the role should be mentionable","optional":true,"type":[[["boolean"]]]},{"name":"icon","description":"The icon for the role\nThe `EmojiResolvable` should belong to the same guild as the role.\nIf not, pass the emoji's URL directly","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]],[["EmojiResolvable"]]]},{"name":"unicodeEmoji","description":"The unicode emoji for the role","optional":true,"nullable":true,"type":[[["string"]]]}],"meta":{"line":265,"file":"Role.js","path":"src/structures"}},{"name":"SetRolePositionOptions","description":"Options used to set the position of a role.","type":[[["Object"]]],"props":[{"name":"relative","description":"Whether to change the position relative to its current value or not","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"reason","description":"The reason for changing the position","optional":true,"type":[[["string"]]]}],"meta":{"line":415,"file":"Role.js","path":"src/structures"}},{"name":"SessionClientInfo","type":[[["Object"]]],"props":[{"name":"location","description":"Location of the client (using IP address)","type":[[["string"]]]},{"name":"platform","description":"Platform of the client","type":[[["string"]]]},{"name":"os","description":"Operating system of the client","type":[[["string"]]]}],"meta":{"line":5,"file":"Session.js","path":"src/structures"}},{"name":"GuildStickerEditData","description":"Data for editing a sticker.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the sticker","optional":true,"type":[[["string"]]]},{"name":"description","description":"The description of the sticker","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"tags","description":"The Discord name of a unicode emoji representing the sticker's expression","optional":true,"type":[[["string"]]]}],"meta":{"line":235,"file":"Sticker.js","path":"src/structures"}},{"name":"TextInputComponentOptions","type":[[["BaseMessageComponentOptions"]]],"props":[{"name":"customId","description":"A unique string to be sent in the interaction when submitted","optional":true,"type":[[["string"]]]},{"name":"label","description":"The text to be displayed above this text input component","optional":true,"type":[[["string"]]]},{"name":"maxLength","description":"Maximum length of text that can be entered","optional":true,"type":[[["number"]]]},{"name":"minLength","description":"Minimum length of text required to be entered","optional":true,"type":[[["number"]]]},{"name":"placeholder","description":"Custom placeholder text to display when no text is entered","optional":true,"type":[[["string"]]]},{"name":"required","description":"Whether or not this text input component is required","optional":true,"type":[[["boolean"]]]},{"name":"style","description":"The style of this text input component","optional":true,"type":[[["TextInputStyleResolvable"]]]},{"name":"value","description":"Value of this text input component","optional":true,"type":[[["string"]]]}],"meta":{"line":14,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"TextInputStyleResolvable","description":"Data that can be resolved to a TextInputStyle. This can be\n* TextInputStyle\n* number","type":[[["number"]],[["TextInputStyle"]]],"meta":{"line":183,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"ThreadEditData","description":"The options used to edit a thread channel","type":[[["Object"]]],"props":[{"name":"name","description":"The new name for the thread","optional":true,"type":[[["string"]]]},{"name":"archived","description":"Whether the thread is archived","optional":true,"type":[[["boolean"]]]},{"name":"autoArchiveDuration","description":"The amount of time (in minutes) after which the thread\nshould automatically archive in case of no recent activity","optional":true,"type":[[["ThreadAutoArchiveDuration"]]]},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for the thread in seconds","optional":true,"type":[[["number"]]]},{"name":"locked","description":"Whether the thread is locked","optional":true,"type":[[["boolean"]]]},{"name":"invitable","description":"Whether non-moderators can add other non-moderators to a thread\nCan only be edited on `GUILD_PRIVATE_THREAD`","optional":true,"type":[[["boolean"]]]},{"name":"appliedTags","description":"The tags to apply to the thread","optional":true,"type":[[["Array","<"],["Snowflake",">"]]]},{"name":"flags","description":"The flags to set on the channel","optional":true,"type":[[["ChannelFlagsResolvable"]]]}],"meta":{"line":332,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"ConnectionAccount","description":"An array of object (connected accounts), containing the following properties:","see":["{@link https://discord.com/developers/docs/resources/user#connection-object}"],"type":[[["Object"]]],"props":[{"name":"type","description":"The account type (twitch, youtube, etc)","type":[[["string"]]]},{"name":"name","description":"The account name","type":[[["string"]]]},{"name":"id","description":"The account id","type":[[["string"]]]},{"name":"verified","description":"Whether the account is verified","type":[[["boolean"]]]}],"meta":{"line":34,"file":"User.js","path":"src/structures"}},{"name":"BadgeIcon","type":[[["function"]]],"returns":[[["string"]]],"meta":{"line":318,"file":"User.js","path":"src/structures"}},{"name":"UserBadge","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the badge","type":[[["string"]]]},{"name":"description","description":"The description of the badge","type":[[["string"]]]},{"name":"icon","description":"The icon hash of the badge","type":[[["string"]]]},{"name":"link","description":"The link of the badge","nullable":true,"type":[[["string"]]]},{"name":"iconURL","description":"The iconURL of the badge","type":[[["BadgeIcon"]]]}],"meta":{"line":323,"file":"User.js","path":"src/structures"}},{"name":"WebEmbedOptions","description":"Represents the possible options for a WebEmbed","type":[[["Object"]]],"props":[{"name":"title","description":"The title of this embed","optional":true,"type":[[["string"]]]},{"name":"description","description":"The description of this embed","optional":true,"type":[[["string"]]]},{"name":"url","description":"The URL of this embed","optional":true,"type":[[["string"]]]},{"name":"color","description":"The color of this embed","optional":true,"type":[[["ColorResolvable"]]]},{"name":"author","description":"The author of this embed","optional":true,"type":[[["Partial","<"],["WebEmbedAuthor",">"]]]},{"name":"thumbnail","description":"The thumbnail of this embed","optional":true,"type":[[["Partial","<"],["WebEmbedThumbnail",">"]]]},{"name":"image","description":"The image of this embed","optional":true,"type":[[["Partial","<"],["WebEmbedImage",">"]]]},{"name":"video","description":"The video of this embed","optional":true,"type":[[["Partial","<"],["WebEmbedVideo",">"]]]},{"name":"footer","description":"The footer of this embed","optional":true,"type":[[["Partial","<"],["WebEmbedFooter",">"]]]},{"name":"provider","description":"The provider of this embed","optional":true,"type":[[["Partial","<"],["WebEmbedProvider",">"]]]},{"name":"redirect","description":"Redirect URL","optional":true,"type":[[["string"]]]}],"meta":{"line":25,"file":"WebEmbed.js","path":"src/structures"}},{"name":"WebEmbedImage","description":"Represents the image of a WebEmbed","type":[[["Object"]]],"props":[{"name":"url","description":"URL for this image","type":[[["string"]]]},{"name":"proxyURL","description":"ProxyURL for this image","type":[[["string"]]]},{"name":"height","description":"Height of this image","type":[[["number"]]]},{"name":"width","description":"Width of this image","type":[[["number"]]]}],"meta":{"line":99,"file":"WebEmbed.js","path":"src/structures"}},{"name":"WebEmbedVideo","description":"Represents the video of a WebEmbed","type":[[["Object"]]],"props":[{"name":"url","description":"URL of this video","type":[[["string"]]]},{"name":"proxyURL","description":"ProxyURL for this video","type":[[["string"]]]},{"name":"height","description":"Height of this video","type":[[["number"]]]},{"name":"width","description":"Width of this video","type":[[["number"]]]}],"meta":{"line":134,"file":"WebEmbed.js","path":"src/structures"}},{"name":"WebEmbedAuthor","description":"Represents the author field of a WebEmbed","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this author","type":[[["string"]]]},{"name":"url","description":"URL of this author","type":[[["string"]]]}],"meta":{"line":157,"file":"WebEmbed.js","path":"src/structures"}},{"name":"WebEmbedProvider","description":"Represents the provider of a WebEmbed","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this provider","type":[[["string"]]]},{"name":"url","description":"URL of this provider","type":[[["string"]]]}],"meta":{"line":175,"file":"WebEmbed.js","path":"src/structures"}},{"name":"EmbedProviderData","description":"The options to provide for setting an provider for a {@link WebEmbed}.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this provider.","type":[[["string"]]]}],"meta":{"line":224,"file":"WebEmbed.js","path":"src/structures"}},{"name":"WebhookMessageOptions","description":"Options that can be passed into send.","type":[[["BaseMessageOptions"]]],"props":[{"name":"username","description":"Username override for the message","optional":true,"default":"this.name","type":[[["string"]]]},{"name":"avatarURL","description":"Avatar URL override for the message","optional":true,"type":[[["string"]]]},{"name":"threadId","description":"The id of the thread in the channel to send to.\nFor interaction webhooks, this property is ignored","optional":true,"type":[[["Snowflake"]]]},{"name":"flags","description":"Which flags to set for the message. Only `SUPPRESS_EMBEDS` can be set.","optional":true,"type":[[["MessageFlags"]]]}],"meta":{"line":112,"file":"Webhook.js","path":"src/structures"}},{"name":"WebhookEditMessageOptions","description":"Options that can be passed into editMessage.","type":[[["Object"]]],"props":[{"name":"embeds","description":"See {@link WebhookMessageOptions#embeds}","optional":true,"type":[[["Array","<"],["MessageEmbed",">"]],[["Array","<"],["APIEmbed",">"]]]},{"name":"content","description":"See {@link BaseMessageOptions#content}","optional":true,"type":[[["string"]]]},{"name":"files","description":"See {@link BaseMessageOptions#files}","optional":true,"type":[[["Array","<"],["FileOptions",">"]],[["Array","<"],["BufferResolvable",">"]],[["Array","<"],["MessageAttachment",">"]]]},{"name":"allowedMentions","description":"See {@link BaseMessageOptions#allowedMentions}","optional":true,"type":[[["MessageMentionOptions"]]]},{"name":"attachments","description":"Attachments to send with the message","optional":true,"type":[[["Array","<"],["MessageAttachment",">"]]]},{"name":"components","description":"Action rows containing interactive components for the message (buttons, select menus)","optional":true,"type":[[["Array","<("],["MessageActionRow","|"],["MessageActionRowOptions",")>"]]]},{"name":"threadId","description":"The id of the thread this message belongs to\nFor interaction webhooks, this property is ignored","optional":true,"type":[[["Snowflake"]]]},{"name":"threadName","description":"Name of the thread to create (only available if webhook is in a forum channel)","optional":true,"type":[[["string"]]]}],"meta":{"line":122,"file":"Webhook.js","path":"src/structures"}},{"name":"WebhookEditData","description":"Options used to edit a {@link Webhook}.","type":[[["Object"]]],"props":[{"name":"name","description":"The new name for the webhook","optional":true,"default":"this.name","type":[[["string"]]]},{"name":"avatar","description":"The new avatar for the webhook","optional":true,"nullable":true,"type":[[["BufferResolvable"]]]},{"name":"channel","description":"The new channel for the webhook","optional":true,"type":[[["GuildTextChannelResolvable"]],[["VoiceChannel"]],[["StageChannel"]],[["ForumChannel"]]]}],"meta":{"line":237,"file":"Webhook.js","path":"src/structures"}},{"name":"WebhookFetchMessageOptions","description":"Options that can be passed into fetchMessage.","type":[[["options"]]],"props":[{"name":"cache","description":"Whether to cache the message.","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"threadId","description":"The id of the thread this message belongs to.\nFor interaction webhooks, this property is ignored","optional":true,"type":[[["Snowflake"]]]}],"meta":{"line":270,"file":"Webhook.js","path":"src/structures"}},{"name":"WidgetChannel","description":"Represents a channel in a Widget","type":[[["Object"]]],"props":[{"name":"id","description":"Id of the channel","type":[[["Snowflake"]]]},{"name":"name","description":"Name of the channel","type":[[["string"]]]},{"name":"position","description":"Position of the channel","type":[[["number"]]]}],"meta":{"line":17,"file":"Widget.js","path":"src/structures"}},{"name":"WidgetActivity","description":"Activity sent in a {@link WidgetMember}.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the activity","type":[[["string"]]]}],"meta":{"line":10,"file":"WidgetMember.js","path":"src/structures"}},{"name":"AttachmentFlagsResolvable","description":"Data that can be resolved to give a guild attachment bitfield. This can be:\n* A string (see {@link AttachmentFlags.FLAGS})\n* A attachment flag\n* An instance of AttachmentFlags\n* An Array of AttachmentFlagsResolvable","type":[[["string"]],[["number"]],[["AttachmentFlags"]],[["Array","<"],["AttachmentFlagsResolvable",">"]]],"meta":{"line":29,"file":"AttachmentFlags.js","path":"src/util"}},{"name":"BitFieldResolvable","description":"Data that can be resolved to give a bitfield. This can be:\n* A bit number (this can be a number literal or a value taken from {@link BitField.FLAGS})\n* A string bit number\n* An instance of BitField\n* An Array of BitFieldResolvable","type":[[["number"]],[["string"]],[["bigint"]],[["BitField"]],[["Array","<"],["BitFieldResolvable",">"]]],"meta":{"line":129,"file":"BitField.js","path":"src/util"}},{"name":"ChannelFlagsResolvable","description":"Data that can be resolved to give a channel flag bitfield. This can be:\n* A string (see {@link ChannelFlags.FLAGS})\n* A channel flag\n* An instance of ChannelFlags\n* An Array of ChannelFlags","type":[[["string"]],[["number"]],[["ChannelFlags"]],[["Array","<"],["ChannelFlagsResolvable",">"]]],"meta":{"line":36,"file":"ChannelFlags.js","path":"src/util"}},{"name":"Constants","description":"Constants that can be used in an enum or object-like way.","type":[[["Object"]]],"props":[{"name":"ActivityTypes","description":"The type of an activity of a users presence.","type":[[["Object","<"],["ActivityType",", "],["number",">"]]]},{"name":"APIErrors","description":"An error encountered while performing an API request.","type":[[["Object","<"],["APIError",", "],["number",">"]]]},{"name":"ApplicationCommandOptionTypes","description":"The type of an {@link ApplicationCommandOption} object.","type":[[["Object","<"],["ApplicationCommandOptionType",", "],["number",">"]]]},{"name":"ApplicationCommandPermissionTypes","description":"The type of an {@link ApplicationCommandPermissions} object.","type":[[["Object","<"],["ApplicationCommandPermissionType",", "],["number",">"]]]},{"name":"ApplicationCommandTypes","description":"The type of an {@link ApplicationCommand} object.","type":[[["Object","<"],["ApplicationCommandType",", "],["number",">"]]]},{"name":"ApplicationRoleConnectionMetadataTypes","description":"The type of an {@link ApplicationRoleConnectionMetadata} object.","type":[[["Object","<"],["ApplicationRoleConnectionMetadataType",", "],["number",">"]]]},{"name":"AutoModerationActionTypes","description":"A type of an action which executes whenever a rule is triggered.","type":[[["Object","<"],["AutoModerationActionType",", "],["number",">"]]]},{"name":"AutoModerationRuleEventTypes","description":"Indicates in what event context\na rule should be checked.","type":[[["Object","<"],["AutoModerationRuleEventType",", "],["number",">"]]]},{"name":"AutoModerationRuleKeywordPresetTypes","description":"The internally pre-defined wordsetswhich will be searched for in content","type":[[["Object","<"],["AutoModerationRuleKeywordPresetType",", "],["number",">"]]]},{"name":"AutoModerationRuleTriggerTypes","description":"Characterizes the type\nof content which can trigger the rule.","type":[[["Object","<"],["AutoModerationRuleTriggerType",", "],["number",">"]]]},{"name":"ChannelTypes","description":"All available channel types.","type":[[["Object","<"],["ChannelType",", "],["number",">"]]]},{"name":"ClientApplicationAssetTypes","description":"The types of an {@link ApplicationAsset} object.","type":[[["ClientApplicationAssetTypes"]]]},{"name":"Colors","description":"An object with regularly used colors.","type":[[["Object","<"],["Color",", "],["number",">"]]]},{"name":"DefaultMessageNotificationLevels","description":"The value set for a guilds default message notifications.","type":[[["Object","<"],["DefaultMessageNotificationLevel",", "],["number",">"]]]},{"name":"Endpoints","description":"Object containing functions that return certain endpoints on the API.","type":[[["Endpoints"]]]},{"name":"Events","description":"The types of events emitted by the Client.","type":[[["Events"]]]},{"name":"ExplicitContentFilterLevels","description":"The value set for the explicit content filter levels for a guild.","type":[[["Object","<"],["ExplicitContentFilterLevel",", "],["number",">"]]]},{"name":"GuildScheduledEventEntityTypes","description":"The entity type of a {@link GuildScheduledEvent} object.","type":[[["Object","<"],["GuildScheduledEventEntityType",", "],["number",">"]]]},{"name":"GuildScheduledEventPrivacyLevels","description":"Privacy level of a {@link GuildScheduledEvent} object.","type":[[["Object","<"],["GuildScheduledEventPrivacyLevel",", "],["number",">"]]]},{"name":"GuildScheduledEventStatuses","description":"The status of a {@link GuildScheduledEvent} object.","type":[[["Object","<"],["GuildScheduledEventStatus",", "],["number",">"]]]},{"name":"IntegrationExpireBehaviors","description":"The behavior of expiring subscribers for Integrations.","type":[[["Object","<"],["IntegrationExpireBehavior",", "],["number",">"]]]},{"name":"InteractionResponseTypes","description":"The type of an interaction response.","type":[[["Object","<"],["InteractionResponseType",", "],["number",">"]]]},{"name":"InteractionTypes","description":"The type of an {@link Interaction} object.","type":[[["Object","<"],["InteractionType",", "],["number",">"]]]},{"name":"InviteScopes","description":"The scopes of an invite.","type":[[["Array","<"],["InviteScope",">"]]]},{"name":"MaxBulkDeletableMessageAge","description":"Max bulk deletable message age (Unavailable to selfbots)","type":[[["number"]]]},{"name":"MembershipStates","description":"The value set for a team members membership state.","type":[[["Object","<"],["MembershipState",", "],["number",">"]]]},{"name":"MessageButtonStyles","description":"The style of a message button.","type":[[["Object","<"],["MessageButtonStyle",", "],["number",">"]]]},{"name":"MessageComponentTypes","description":"The type of a message component.","type":[[["Object","<"],["MessageComponentType",", "],["number",">"]]]},{"name":"MessageTypes","description":"The type of a {@link Message} object.","type":[[["Array","<"],["MessageType",">"]]]},{"name":"SelectMenuComponentTypes","description":"The type of any select menu.","type":[[["Object","<"],["SelectMenuComponentType",", "],["number",">"]]]},{"name":"MFALevels","description":"The required MFA level for a guild.","type":[[["Object","<"],["MFALevel",", "],["number",">"]]]},{"name":"NSFWLevels","description":"NSFW level of a guild.","type":[[["Object","<"],["NSFWLevel",", "],["number",">"]]]},{"name":"Opcodes","description":"The types of Opcodes sent to the Gateway.","type":[[["Opcodes"]]]},{"name":"OverwriteTypes","description":"An overwrite type.","type":[[["Object","<"],["OverwriteType",", "],["number",">"]]]},{"name":"Package","description":"The package.json of the library.","type":[[["Object"]]]},{"name":"PartialTypes","description":"The type of Structure allowed to be a partial.","type":[[["Object","<"],["PartialType",", "],["PartialType",">"]]]},{"name":"PremiumTiers","description":"The premium tier (Server Boost level) of a guild.","type":[[["Object","<"],["PremiumTier",", "],["number",">"]]]},{"name":"PrivacyLevels","description":"Privacy level of a {@link StageInstance} object.","type":[[["Object","<"],["PrivacyLevel",", "],["number",">"]]]},{"name":"ShardEvents","description":"The type of events emitted by a Shard.","type":[[["ShardEvents"]]]},{"name":"Status","description":"The available statuses of the client.","type":[[["Status"]]]},{"name":"StickerFormatTypes","description":"The value set for a stickers format type.","type":[[["Object","<"],["StickerFormatType",", "],["number",">"]]]},{"name":"StickerTypes","description":"The value set for a stickers type.","type":[[["Object","<"],["StickerType",", "],["number",">"]]]},{"name":"SweeperKeys","description":"The name of an item to be swept in Sweepers.","type":[[["Array","<"],["SweeperKey",">"]]]},{"name":"SystemMessageTypes","description":"The types of messages that are `System`.","type":[[["Array","<"],["SystemMessageType",">"]]]},{"name":"TextInputStyles","description":"The style of a text input component.","type":[[["Object","<"],["TextInputStyle",", "],["number",">"]]]},{"name":"ThreadChannelTypes","description":"The type of a {@link ThreadChannel} object.","type":[[["Array","<"],["ThreadChannelTypes",">"]]]},{"name":"UserAgent","description":"The user agent used for requests.","type":[[["string"]]]},{"name":"VerificationLevels","description":"The value set for the verification levels for a guild.","type":[[["Object","<"],["VerificationLevel",", "],["number",">"]]]},{"name":"VideoQualityModes","description":"The camera video quality mode for a {@link VoiceChannel}.","type":[[["Object","<"],["VideoQualityMode",", "],["number",">"]]]},{"name":"WebhookTypes","description":"The value set for a webhooks type.","type":[[["Object","<"],["WebhookType",", "],["number",">"]]]},{"name":"WSCodes","description":"The types of WebSocket error codes.","type":[[["WSCodes"]]]},{"name":"WSEvents","description":"The type of a WebSocket message event.","type":[[["Object","<"],["WSEventType",", "],["WSEventType",">"]]]}],"meta":{"line":1870,"file":"Constants.js","path":"src/util"}},{"name":"MaxBulkDeletableMessageAge","description":"Max bulk deletable message age","type":[[["number"]]],"meta":{"line":11,"file":"Constants.js","path":"src/util"}},{"name":"captchaServices","description":"API captcha solver\n* `2captcha` - 2captcha.com\n* `capmonster` - capmonster.cloud","type":[[["Array","<"],["string",">"]]],"meta":{"line":17,"file":"Constants.js","path":"src/util"}},{"name":"DMScanLevel","description":"Automatically scan and delete direct messages you receive that contain explicit media content.\n* `NOT_SCAN` - Direct messages will not be scanned for explicit content.\n* `NOT_FRIEND` - Scan direct messages from everyone unless they are a friend.\n* `EVERYONE` - Scan direct messages from everyone.","type":[[["string"]]],"meta":{"line":25,"file":"Constants.js","path":"src/util"}},{"name":"stickerAnimationMode","description":"This controls when stickers animate:\n* `ALWAYS` - Always animate.\n* `INTERACTION` - On the desktop client, stickers will animate on hover or focus. On mobile clients, stickers will animate on long-press.\n* `NEVER` - Never animate.","type":[[["string"]]],"meta":{"line":34,"file":"Constants.js","path":"src/util"}},{"name":"NitroType","description":"All available nitro types:\n* `NONE` - None\n* `NITRO_CLASSIC` - Nitro Classic\n* `NITRO_BOOST` - Nitro\n* `NITRO_BASIC` - Nitro Basic\n* `UNKNOWN` - Unknown","see":["{@link https://discord.com/developers/docs/resources/user#user-object-premium-types}"],"type":[[["string"]]],"meta":{"line":43,"file":"Constants.js","path":"src/util"}},{"name":"HypeSquadType","description":"All available HypeSquad types:\n* `LEAVE` - None\n* `HOUSE_BRAVERY` - HypeSquad Bravery\n* `HOUSE_BRILLIANCE` - HypeSquad Brilliance\n* `HOUSE_BALANCE` - HypeSquad Balance","type":[[["string"]]],"meta":{"line":55,"file":"Constants.js","path":"src/util"}},{"name":"localeSetting","description":"All locale codes:\n* `DANISH`\n* `GERMAN`\n* `ENGLISH_UK`\n* `ENGLISH_US`\n* `SPANISH`\n* `FRENCH`\n* `CROATIAN`\n* `ITALIAN`\n* `LITHUANIAN`\n* `HUNGARIAN`\n* `DUTCH`\n* `NORWEGIAN`\n* `POLISH`\n* `BRAZILIAN_PORTUGUESE`\n* `ROMANIA_ROMANIAN`\n* `FINNISH`\n* `SWEDISH`\n* `VIETNAMESE`\n* `TURKISH`\n* `CZECH`\n* `GREEK`\n* `BULGARIAN`\n* `RUSSIAN`\n* `UKRAINIAN`\n* `HINDI`\n* `THAI`\n* `CHINA_CHINESE`\n* `JAPANESE`\n* `TAIWAN_CHINESE`\n* `KOREAN`","see":["{@link https://discord.com/developers/docs/reference#locales}"],"type":[[["Object","<"],["string",", "],["string",">"]]],"meta":{"line":65,"file":"Constants.js","path":"src/util"}},{"name":"WSCodes","description":"The types of WebSocket error codes:\n* 1000: WS_CLOSE_REQUESTED\n* 1011: INTERNAL_ERROR\n* 4004: TOKEN_INVALID\n* 4010: SHARDING_INVALID\n* 4011: SHARDING_REQUIRED\n* 4013: INVALID_INTENTS\n* 4014: DISALLOWED_INTENTS","type":[[["Object","<"],["number",", "],["string",">"]]],"meta":{"line":133,"file":"Constants.js","path":"src/util"}},{"name":"ImageURLOptions","description":"Options for Image URLs.","type":[[["StaticImageURLOptions"]]],"props":[{"name":"dynamic","description":"If true, the format will dynamically change to `gif` for animated avatars.","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":165,"file":"Constants.js","path":"src/util"}},{"name":"StaticImageURLOptions","description":"Options for static Image URLs.","type":[[["Object"]]],"props":[{"name":"format","description":"One of `webp`, `png`, `jpg`, `jpeg`.","optional":true,"default":"'webp'","type":[[["string"]]]},{"name":"size","description":"One of `16`, `32`, `56`, `64`, `96`, `128`, `256`, `300`, `512`, `600`, `1024`, `2048`,\n`4096`","optional":true,"type":[[["number"]]]}],"meta":{"line":171,"file":"Constants.js","path":"src/util"}},{"name":"Endpoints","description":"An object containing functions that return certain endpoints on the API.","see":["{@link https://discord.com/developers/docs/reference#image-formatting-cdn-endpoints}"],"type":[[["Object","<"],["string",", ("],["function","()|"],["string",")>"]]],"meta":{"line":179,"file":"Constants.js","path":"src/util"}},{"name":"Status","description":"The current status of the client. Here are the available statuses:\n* READY: 0\n* CONNECTING: 1\n* RECONNECTING: 2\n* IDLE: 3\n* NEARLY: 4\n* DISCONNECTED: 5\n* WAITING_FOR_GUILDS: 6\n* IDENTIFYING: 7\n* RESUMING: 8","type":[[["Object","<"],["string",", "],["number",">"]]],"meta":{"line":240,"file":"Constants.js","path":"src/util"}},{"name":"Opcodes","description":"The Opcodes sent to the Gateway:\n* DISPATCH: 0\n* HEARTBEAT: 1\n* IDENTIFY: 2\n* STATUS_UPDATE: 3\n* VOICE_STATE_UPDATE: 4\n* VOICE_GUILD_PING: 5\n* RESUME: 6\n* RECONNECT: 7\n* REQUEST_GUILD_MEMBERS: 8\n* INVALID_SESSION: 9\n* HELLO: 10\n* HEARTBEAT_ACK: 11\n* GUILD_SYNC: 12 [Unused]\n* DM_UPDATE: 13 # Send => used to get dm features\n* GUILD_SUBSCRIPTIONS: 14 # Send => discord responds back with GUILD_MEMBER_LIST_UPDATE type SYNC...\n* LOBBY_CONNECT: 15\n* LOBBY_DISCONNECT: 16\n* LOBBY_VOICE_STATE_UPDATE: 17 # Receive\n* STREAM_CREATE: 18\n* STREAM_DELETE: 19\n* STREAM_WATCH: 20\n* STREAM_PING: 21 # Send\n* STREAM_SET_PAUSED: 22\n* LFG_SUBSCRIPTIONS: 23 [Unused]\n* REQUEST_GUILD_APPLICATION_COMMANDS: 24 [Unused]\n* EMBEDDED_ACTIVITY_LAUNCH: 25 => Launch an embedded activity in a voice channel or call.\n* EMBEDDED_ACTIVITY_CLOSE: 26 => Stop an embedded activity.\n* EMBEDDED_ACTIVITY_UPDATE: 27 => Update an embedded activity.\n* REQUEST_FORUM_UNREADS: 28 => Request forum channel unread counts.\n* REMOTE_COMMAND: 29 => Send a remote command to an embedded (Xbox, PlayStation) voice session.\n* GET_DELETED_ENTITY_IDS_NOT_MATCHING_HASH: 30 => Request deleted entity IDs not matching a given hash for a guild.\n* REQUEST_SOUNDBOARD_SOUNDS: 31\n* SPEED_TEST_CREATE: 32 => Create a voice speed test.\n* SPEED_TEST_DELETE: 33 => Delete a voice speed test.\n* REQUEST_LAST_MESSAGES: 34 => \tRequest last messages for a guild's channels.\n* SEARCH_RECENT_MEMBERS: 35 => ~ Opcode 8 (Member Safety)","type":[[["Object","<"],["string",", "],["number",">"]]],"meta":{"line":265,"file":"Constants.js","path":"src/util"}},{"name":"Events","description":"The types of events emitted by the Client:\n* RATE_LIMIT: rateLimit\n* INVALID_REQUEST_WARNING: invalidRequestWarning\n* API_RESPONSE: apiResponse\n* API_REQUEST: apiRequest\n* CLIENT_READY: ready\n* APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE: applicationCommandAutocompleteResponse\n* APPLICATION_COMMAND_CREATE: applicationCommandCreate (deprecated)\n* APPLICATION_COMMAND_DELETE: applicationCommandDelete (deprecated)\n* APPLICATION_COMMAND_UPDATE: applicationCommandUpdate (deprecated)\n* APPLICATION_COMMAND_PERMISSIONS_UPDATE: applicationCommandPermissionsUpdate\n* AUTO_MODERATION_ACTION_EXECUTION: autoModerationActionExecution\n* AUTO_MODERATION_RULE_CREATE: autoModerationRuleCreate\n* AUTO_MODERATION_RULE_DELETE: autoModerationRuleDelete\n* AUTO_MODERATION_RULE_UPDATE: autoModerationRuleUpdate\n* CALL_CREATE: callCreate\n* CALL_DELETE: callDelete\n* CALL_UPDATE: callUpdate\n* GUILD_AVAILABLE: guildAvailable\n* GUILD_CREATE: guildCreate\n* GUILD_DELETE: guildDelete\n* GUILD_UPDATE: guildUpdate\n* GUILD_UNAVAILABLE: guildUnavailable\n* GUILD_MEMBER_ADD: guildMemberAdd\n* GUILD_MEMBER_REMOVE: guildMemberRemove\n* GUILD_MEMBER_UPDATE: guildMemberUpdate\n* GUILD_MEMBER_AVAILABLE: guildMemberAvailable\n* GUILD_MEMBERS_CHUNK: guildMembersChunk\n* GUILD_INTEGRATIONS_UPDATE: guildIntegrationsUpdate\n* GUILD_ROLE_CREATE: roleCreate\n* GUILD_ROLE_DELETE: roleDelete\n* INVITE_CREATE: inviteCreate\n* INVITE_DELETE: inviteDelete\n* GUILD_ROLE_UPDATE: roleUpdate\n* GUILD_EMOJI_CREATE: emojiCreate\n* GUILD_EMOJI_DELETE: emojiDelete\n* GUILD_EMOJI_UPDATE: emojiUpdate\n* GUILD_BAN_ADD: guildBanAdd\n* GUILD_BAN_REMOVE: guildBanRemove\n* CHANNEL_CREATE: channelCreate\n* CHANNEL_DELETE: channelDelete\n* CHANNEL_UPDATE: channelUpdate\n* CHANNEL_PINS_UPDATE: channelPinsUpdate\n* CHANNEL_RECIPIENT_REMOVE: channelRecipientRemove\n* CHANNEL_RECIPIENT_ADD: channelRecipientAdd\n* MESSAGE_ACK: messageAck\n* MESSAGE_CREATE: messageCreate\n* MESSAGE_DELETE: messageDelete\n* MESSAGE_UPDATE: messageUpdate\n* MESSAGE_BULK_DELETE: messageDeleteBulk\n* MESSAGE_REACTION_ADD: messageReactionAdd\n* MESSAGE_REACTION_REMOVE: messageReactionRemove\n* MESSAGE_REACTION_REMOVE_ALL: messageReactionRemoveAll\n* MESSAGE_REACTION_REMOVE_EMOJI: messageReactionRemoveEmoji\n* THREAD_CREATE: threadCreate\n* THREAD_DELETE: threadDelete\n* THREAD_UPDATE: threadUpdate\n* THREAD_LIST_SYNC: threadListSync\n* THREAD_MEMBER_UPDATE: threadMemberUpdate\n* THREAD_MEMBERS_UPDATE: threadMembersUpdate\n* USER_UPDATE: userUpdate\n* PRESENCE_UPDATE: presenceUpdate\n* VOICE_SERVER_UPDATE: voiceServerUpdate\n* VOICE_STATE_UPDATE: voiceStateUpdate\n* TYPING_START: typingStart\n* WEBHOOKS_UPDATE: webhookUpdate\n* INTERACTION_CREATE: interactionCreate\n* ERROR: error\n* WARN: warn\n* DEBUG: debug\n* CACHE_SWEEP: cacheSweep\n* SHARD_DISCONNECT: shardDisconnect\n* SHARD_ERROR: shardError\n* SHARD_RECONNECTING: shardReconnecting\n* SHARD_READY: shardReady\n* SHARD_RESUME: shardResume\n* INVALIDATED: invalidated\n* RAW: raw\n* STAGE_INSTANCE_CREATE: stageInstanceCreate\n* STAGE_INSTANCE_UPDATE: stageInstanceUpdate\n* STAGE_INSTANCE_DELETE: stageInstanceDelete\n* GUILD_STICKER_CREATE: stickerCreate\n* GUILD_STICKER_DELETE: stickerDelete\n* GUILD_STICKER_UPDATE: stickerUpdate\n* GUILD_SCHEDULED_EVENT_CREATE: guildScheduledEventCreate\n* GUILD_SCHEDULED_EVENT_UPDATE: guildScheduledEventUpdate\n* GUILD_SCHEDULED_EVENT_DELETE: guildScheduledEventDelete\n* GUILD_SCHEDULED_EVENT_USER_ADD: guildScheduledEventUserAdd\n* GUILD_SCHEDULED_EVENT_USER_REMOVE: guildScheduledEventUserRemove\n* GUILD_AUDIT_LOG_ENTRY_CREATE: guildAuditLogEntryCreate","type":[[["Object","<"],["string",", "],["string",">"]]],"meta":{"line":344,"file":"Constants.js","path":"src/util"}},{"name":"ShardEvents","description":"The types of events emitted by a Shard:\n* CLOSE: close\n* DESTROYED: destroyed\n* INVALID_SESSION: invalidSession\n* READY: ready\n* RESUMED: resumed\n* ALL_READY: allReady","type":[[["Object","<"],["string",", "],["string",">"]]],"meta":{"line":548,"file":"Constants.js","path":"src/util"}},{"name":"PartialType","description":"The type of Structure allowed to be a partial:\n* USER\n* CHANNEL (only affects DMChannels)\n* GUILD_MEMBER\n* MESSAGE\n* REACTION\n* GUILD_SCHEDULED_EVENT\nPartials require you to put checks in place when handling data. See the \"Partial Structures\" topic on the\n[guide](https://discordjs.guide/popular-topics/partials.html) for more information.","type":[[["string"]]],"meta":{"line":567,"file":"Constants.js","path":"src/util"}},{"name":"WSEventType","description":"The type of a WebSocket message event, e.g. `MESSAGE_CREATE`. Here are the available events:\n* READY\n* RESUMED\n* APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE\n* APPLICATION_COMMAND_CREATE (deprecated)\n* APPLICATION_COMMAND_DELETE (deprecated)\n* APPLICATION_COMMAND_UPDATE (deprecated)\n* APPLICATION_COMMAND_PERMISSIONS_UPDATE\n* AUTO_MODERATION_ACTION_EXECUTION\n* AUTO_MODERATION_RULE_CREATE\n* AUTO_MODERATION_RULE_DELETE\n* AUTO_MODERATION_RULE_UPDATE\n* GUILD_CREATE\n* GUILD_DELETE\n* GUILD_UPDATE\n* INVITE_CREATE\n* INVITE_DELETE\n* GUILD_MEMBER_ADD\n* GUILD_MEMBER_REMOVE\n* GUILD_MEMBER_UPDATE\n* GUILD_MEMBERS_CHUNK\n* GUILD_INTEGRATIONS_UPDATE\n* GUILD_ROLE_CREATE\n* GUILD_ROLE_DELETE\n* GUILD_ROLE_UPDATE\n* GUILD_BAN_ADD\n* GUILD_BAN_REMOVE\n* GUILD_EMOJIS_UPDATE\n* CHANNEL_CREATE\n* CHANNEL_DELETE\n* CHANNEL_UPDATE\n* CHANNEL_PINS_UPDATE\n* MESSAGE_CREATE\n* MESSAGE_DELETE\n* MESSAGE_UPDATE\n* MESSAGE_DELETE_BULK\n* MESSAGE_REACTION_ADD\n* MESSAGE_REACTION_REMOVE\n* MESSAGE_REACTION_REMOVE_ALL\n* MESSAGE_REACTION_REMOVE_EMOJI\n* THREAD_CREATE\n* THREAD_UPDATE\n* THREAD_DELETE\n* THREAD_LIST_SYNC\n* THREAD_MEMBER_UPDATE\n* THREAD_MEMBERS_UPDATE\n* USER_UPDATE\n* PRESENCE_UPDATE\n* TYPING_START\n* VOICE_STATE_UPDATE\n* VOICE_SERVER_UPDATE\n* WEBHOOKS_UPDATE\n* INTERACTION_CREATE\n* STAGE_INSTANCE_CREATE\n* STAGE_INSTANCE_UPDATE\n* STAGE_INSTANCE_DELETE\n* GUILD_STICKERS_UPDATE\n* GUILD_SCHEDULED_EVENT_CREATE\n* GUILD_SCHEDULED_EVENT_UPDATE\n* GUILD_SCHEDULED_EVENT_DELETE\n* GUILD_SCHEDULED_EVENT_USER_ADD\n* GUILD_SCHEDULED_EVENT_USER_REMOVE\n* GUILD_AUDIT_LOG_ENTRY_CREATE","see":["{@link https://discord.com/developers/docs/topics/gateway-events#receive-events}"],"type":[[["string"]]],"meta":{"line":581,"file":"Constants.js","path":"src/util"}},{"name":"InviteScope","description":"A valid scope to request when generating an invite link.\nScopes that require whitelist are not considered valid for this generator\n* `applications.builds.read`: allows reading build data for a users applications\n* `applications.commands`: allows this bot to create commands in the server\n* `applications.entitlements`: allows reading entitlements for a users applications\n* `applications.store.update`: allows reading and updating of store data for a users applications\n* `bot`: makes the bot join the selected guild\n* `connections`: makes the endpoint for getting a users connections available\n* `email`: allows the `/users/@me` endpoint return with an email\n* `identify`: allows the `/users/@me` endpoint without an email\n* `guilds`: makes the `/users/@me/guilds` endpoint available for a user\n* `guilds.join`: allows the bot to join the user to any guild it is in using Guild#addMember\n* `gdm.join`: allows joining the user to a group dm\n* `webhook.incoming`: generates a webhook to a channel","see":["{@link https://discord.com/developers/docs/topics/oauth2#shared-resources-oauth2-scopes}"],"type":[[["string"]]],"meta":{"line":713,"file":"Constants.js","path":"src/util"}},{"name":"IntegrationExpireBehavior","description":"The behavior of expiring subscribers for Integrations. This can be:\n* REMOVE_ROLE\n* KICK","see":["{@link https://discord.com/developers/docs/resources/guild#integration-object-integration-expire-behaviors}"],"type":[[["string"]]],"meta":{"line":747,"file":"Constants.js","path":"src/util"}},{"name":"MessageType","description":"The type of a message, e.g. `DEFAULT`. Here are the available types:\n* DEFAULT\n* RECIPIENT_ADD\n* RECIPIENT_REMOVE\n* CALL\n* CHANNEL_NAME_CHANGE\n* CHANNEL_ICON_CHANGE\n* CHANNEL_PINNED_MESSAGE\n* GUILD_MEMBER_JOIN\n* USER_PREMIUM_GUILD_SUBSCRIPTION\n* USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_1\n* USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_2\n* USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_3\n* CHANNEL_FOLLOW_ADD\n* GUILD_DISCOVERY_DISQUALIFIED\n* GUILD_DISCOVERY_REQUALIFIED\n* GUILD_DISCOVERY_GRACE_PERIOD_INITIAL_WARNING\n* GUILD_DISCOVERY_GRACE_PERIOD_FINAL_WARNING\n* THREAD_CREATED\n* REPLY\n* APPLICATION_COMMAND\n* THREAD_STARTER_MESSAGE\n* GUILD_INVITE_REMINDER\n* CONTEXT_MENU_COMMAND\n* AUTO_MODERATION_ACTION\n* ROLE_SUBSCRIPTION_PURCHASE","see":["{@link https://discord.com/developers/docs/resources/channel#message-object-message-types}"],"type":[[["string"]]],"meta":{"line":756,"file":"Constants.js","path":"src/util"}},{"name":"SweeperKey","description":"The name of an item to be swept in Sweepers\n* `applicationCommands` - both global and guild commands\n* `autoModerationRules`\n* `bans`\n* `emojis`\n* `invites` - accepts the `lifetime` property, using it will sweep based on expires timestamp\n* `guildMembers`\n* `messages` - accepts the `lifetime` property, using it will sweep based on edited or created timestamp\n* `presences`\n* `reactions`\n* `stageInstances`\n* `stickers`\n* `threadMembers`\n* `threads` - accepts the `lifetime` property, using it will sweep archived threads based on archived timestamp\n* `users`\n* `voiceStates`","type":[[["string"]]],"meta":{"line":815,"file":"Constants.js","path":"src/util"}},{"name":"SystemMessageType","description":"The types of messages that are `System`. The available types are `MessageTypes` excluding:\n* DEFAULT\n* REPLY\n* APPLICATION_COMMAND\n* CONTEXT_MENU_COMMAND","type":[[["string"]]],"meta":{"line":852,"file":"Constants.js","path":"src/util"}},{"name":"ActivityType","description":"Bots cannot set a `CUSTOM` activity type, it is only for custom statuses received from users\nThe type of an activity of a user's presence. Here are the available types:\n* PLAYING\n* STREAMING\n* LISTENING\n* WATCHING\n* CUSTOM\n* COMPETING","see":["{@link https://discord.com/developers/docs/game-sdk/activities#data-models-activitytype-enum}"],"type":[[["string"]]],"meta":{"line":864,"file":"Constants.js","path":"src/util"}},{"name":"ChannelType","description":"All available channel types:\n* `GUILD_TEXT` - a guild text channel\n* `DM` - a DM channel\n* `GUILD_VOICE` - a guild voice channel\n* `GROUP_DM` - a group DM channel\n* `GUILD_CATEGORY` - a guild category channel\n* `GUILD_NEWS` - a guild news channel\n* `GUILD_STORE` - a guild store channel\nStore channels are deprecated and will be removed from Discord in March 2022. See\n[Self-serve Game Selling Deprecation](https://support-dev.discord.com/hc/en-us/articles/6309018858647)\nfor more information.\n* `GUILD_NEWS_THREAD` - a guild news channel's public thread channel\n* `GUILD_PUBLIC_THREAD` - a guild text channel's public thread channel\n* `GUILD_PRIVATE_THREAD` - a guild text channel's private thread channel\n* `GUILD_STAGE_VOICE` - a guild stage voice channel\n* `GUILD_DIRECTORY` - the channel in a hub containing guilds\n* `GUILD_FORUM` - a guild channel that only contains threads\n* `UNKNOWN` - a generic channel of unknown type, could be Channel or GuildChannel","see":["{@link https://discord.com/developers/docs/resources/channel#channel-object-channel-types}"],"type":[[["string"]]],"meta":{"line":878,"file":"Constants.js","path":"src/util"}},{"name":"TextBasedChannels","description":"The channels that are text-based.\n* DMChannel\n* TextChannel\n* NewsChannel\n* ThreadChannel\n* VoiceChannel\n* StageChannel","type":[[["DMChannel"]],[["TextChannel"]],[["NewsChannel"]],[["ThreadChannel"]],[["VoiceChannel"]],[["StageChannel"]]],"meta":{"line":918,"file":"Constants.js","path":"src/util"}},{"name":"TextBasedChannelsResolvable","description":"Data that resolves to give a text-based channel. This can be:\n* A text-based channel\n* A snowflake","type":[[["TextBasedChannels"]],[["Snowflake"]]],"meta":{"line":929,"file":"Constants.js","path":"src/util"}},{"name":"TextBasedChannelTypes","description":"The types of channels that are text-based. The available types are:\n* DM\n* GUILD_TEXT\n* GUILD_NEWS\n* GUILD_NEWS_THREAD\n* GUILD_PUBLIC_THREAD\n* GUILD_PRIVATE_THREAD\n* GUILD_VOICE\n* GUILD_STAGE_VOICE","type":[[["string"]]],"meta":{"line":936,"file":"Constants.js","path":"src/util"}},{"name":"ThreadChannelTypes","description":"The types of channels that are threads. The available types are:\n* GUILD_NEWS_THREAD\n* GUILD_PUBLIC_THREAD\n* GUILD_PRIVATE_THREAD","type":[[["string"]]],"meta":{"line":959,"file":"Constants.js","path":"src/util"}},{"name":"VoiceBasedChannelTypes","description":"The types of channels that are voice-based. The available types are:\n* GUILD_VOICE\n* GUILD_STAGE_VOICE","type":[[["string"]]],"meta":{"line":968,"file":"Constants.js","path":"src/util"}},{"name":"ClientApplicationAssetTypes","description":"The types of assets of an application:\n* SMALL: 1\n* BIG: 2","type":[[["Object","<"],["string",", "],["number",">"]]],"meta":{"line":976,"file":"Constants.js","path":"src/util"}},{"name":"Color","description":"A commonly used color:\n* DEFAULT\n* WHITE\n* AQUA\n* GREEN\n* BLUE\n* YELLOW\n* PURPLE\n* LUMINOUS_VIVID_PINK\n* FUCHSIA\n* GOLD\n* ORANGE\n* RED\n* GREY\n* NAVY\n* DARK_AQUA\n* DARK_GREEN\n* DARK_BLUE\n* DARK_PURPLE\n* DARK_VIVID_PINK\n* DARK_GOLD\n* DARK_ORANGE\n* DARK_RED\n* DARK_GREY\n* DARKER_GREY\n* LIGHT_GREY\n* DARK_NAVY\n* BLURPLE\n* GREYPLE\n* DARK_BUT_NOT_BLACK\n* NOT_QUITE_BLACK","type":[[["string"]]],"meta":{"line":987,"file":"Constants.js","path":"src/util"}},{"name":"ExplicitContentFilterLevel","description":"The value set for the explicit content filter levels for a guild:\n* DISABLED\n* MEMBERS_WITHOUT_ROLES\n* ALL_MEMBERS","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-explicit-content-filter-level}"],"type":[[["string"]]],"meta":{"line":1054,"file":"Constants.js","path":"src/util"}},{"name":"VerificationLevel","description":"The value set for the verification levels for a guild:\n* NONE\n* LOW\n* MEDIUM\n* HIGH\n* VERY_HIGH","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-verification-level}"],"type":[[["string"]]],"meta":{"line":1064,"file":"Constants.js","path":"src/util"}},{"name":"APIError","description":"An error encountered while performing an API request. Here are the potential errors:\n* UNKNOWN_ACCOUNT\n* UNKNOWN_APPLICATION\n* UNKNOWN_CHANNEL\n* UNKNOWN_GUILD\n* UNKNOWN_INTEGRATION\n* UNKNOWN_INVITE\n* UNKNOWN_MEMBER\n* UNKNOWN_MESSAGE\n* UNKNOWN_OVERWRITE\n* UNKNOWN_PROVIDER\n* UNKNOWN_ROLE\n* UNKNOWN_TOKEN\n* UNKNOWN_USER\n* UNKNOWN_EMOJI\n* UNKNOWN_WEBHOOK\n* UNKNOWN_WEBHOOK_SERVICE\n* UNKNOWN_SESSION\n* UNKNOWN_BAN\n* UNKNOWN_SKU\n* UNKNOWN_STORE_LISTING\n* UNKNOWN_ENTITLEMENT\n* UNKNOWN_BUILD\n* UNKNOWN_LOBBY\n* UNKNOWN_BRANCH\n* UNKNOWN_STORE_DIRECTORY_LAYOUT\n* UNKNOWN_REDISTRIBUTABLE\n* UNKNOWN_GIFT_CODE\n* UNKNOWN_STREAM\n* UNKNOWN_PREMIUM_SERVER_SUBSCRIBE_COOLDOWN\n* UNKNOWN_GUILD_TEMPLATE\n* UNKNOWN_DISCOVERABLE_SERVER_CATEGORY\n* UNKNOWN_STICKER\n* UNKNOWN_INTERACTION\n* UNKNOWN_APPLICATION_COMMAND\n* UNKNOWN_APPLICATION_COMMAND_PERMISSIONS\n* UNKNOWN_STAGE_INSTANCE\n* UNKNOWN_GUILD_MEMBER_VERIFICATION_FORM\n* UNKNOWN_GUILD_WELCOME_SCREEN\n* UNKNOWN_GUILD_SCHEDULED_EVENT\n* UNKNOWN_GUILD_SCHEDULED_EVENT_USER\n* BOT_PROHIBITED_ENDPOINT\n* BOT_ONLY_ENDPOINT\n* CANNOT_SEND_EXPLICIT_CONTENT\n* NOT_AUTHORIZED\n* SLOWMODE_RATE_LIMIT\n* ACCOUNT_OWNER_ONLY\n* ANNOUNCEMENT_EDIT_LIMIT_EXCEEDED\n* CHANNEL_HIT_WRITE_RATELIMIT\n* SERVER_HIT_WRITE_RATELIMIT\n* CONTENT_NOT_ALLOWED\n* GUILD_PREMIUM_LEVEL_TOO_LOW\n* MAXIMUM_GUILDS\n* MAXIMUM_FRIENDS\n* MAXIMUM_PINS\n* MAXIMUM_RECIPIENTS\n* MAXIMUM_ROLES\n* MAXIMUM_USERNAMES\n* MAXIMUM_WEBHOOKS\n* MAXIMUM_EMOJIS\n* MAXIMUM_REACTIONS\n* MAXIMUM_CHANNELS\n* MAXIMUM_ATTACHMENTS\n* MAXIMUM_INVITES\n* MAXIMUM_ANIMATED_EMOJIS\n* MAXIMUM_SERVER_MEMBERS\n* MAXIMUM_NUMBER_OF_SERVER_CATEGORIES\n* GUILD_ALREADY_HAS_TEMPLATE\n* MAXIMUM_THREAD_PARTICIPANTS\n* MAXIMUM_NON_GUILD_MEMBERS_BANS\n* MAXIMUM_BAN_FETCHES\n* MAXIMUM_NUMBER_OF_UNCOMPLETED_GUILD_SCHEDULED_EVENTS_REACHED\n* MAXIMUM_NUMBER_OF_STICKERS_REACHED\n* MAXIMUM_PRUNE_REQUESTS\n* MAXIMUM_GUILD_WIDGET_SETTINGS_UPDATE\n* UNAUTHORIZED\n* ACCOUNT_VERIFICATION_REQUIRED\n* DIRECT_MESSAGES_TOO_FAST\n* REQUEST_ENTITY_TOO_LARGE\n* FEATURE_TEMPORARILY_DISABLED\n* USER_BANNED\n* TARGET_USER_NOT_CONNECTED_TO_VOICE\n* ALREADY_CROSSPOSTED\n* MISSING_ACCESS\n* INVALID_ACCOUNT_TYPE\n* CANNOT_EXECUTE_ON_DM\n* EMBED_DISABLED\n* CANNOT_EDIT_MESSAGE_BY_OTHER\n* CANNOT_SEND_EMPTY_MESSAGE\n* CANNOT_MESSAGE_USER\n* CANNOT_SEND_MESSAGES_IN_VOICE_CHANNEL\n* CHANNEL_VERIFICATION_LEVEL_TOO_HIGH\n* OAUTH2_APPLICATION_BOT_ABSENT\n* MAXIMUM_OAUTH2_APPLICATIONS\n* INVALID_OAUTH_STATE\n* MISSING_PERMISSIONS\n* INVALID_AUTHENTICATION_TOKEN\n* NOTE_TOO_LONG\n* INVALID_BULK_DELETE_QUANTITY\n* CANNOT_PIN_MESSAGE_IN_OTHER_CHANNEL\n* INVALID_OR_TAKEN_INVITE_CODE\n* CANNOT_EXECUTE_ON_SYSTEM_MESSAGE\n* CANNOT_EXECUTE_ON_CHANNEL_TYPE\n* INVALID_OAUTH_TOKEN\n* MISSING_OAUTH_SCOPE\n* INVALID_WEBHOOK_TOKEN\n* INVALID_ROLE\n* INVALID_RECIPIENTS\n* BULK_DELETE_MESSAGE_TOO_OLD\n* INVALID_FORM_BODY\n* INVITE_ACCEPTED_TO_GUILD_NOT_CONTAINING_BOT\n* INVALID_API_VERSION\n* FILE_UPLOADED_EXCEEDS_MAXIMUM_SIZE\n* INVALID_FILE_UPLOADED\n* GIFT_CODE_CLAIMED\n* CANNOT_SELF_REDEEM_GIFT\n* INVALID_GUILD\n* INVALID_MESSAGE_TYPE\n* PAYMENT_SOURCE_REQUIRED\n* CANNOT_DELETE_COMMUNITY_REQUIRED_CHANNEL\n* INVALID_STICKER_SENT\n* INVALID_OPERATION_ON_ARCHIVED_THREAD\n* INVALID_THREAD_NOTIFICATION_SETTINGS\n* PARAMETER_EARLIER_THAN_CREATION\n* GUILD_NOT_AVAILABLE_IN_LOCATION\n* GUILD_MONETIZATION_REQUIRED\n* INSUFFICIENT_BOOSTS\n* INVALID_JSON\n* TWO_FACTOR_REQUIRED\n* INVALID_TWO_FACTOR_CODE\n* NO_USERS_WITH_DISCORDTAG_EXIST\n* REACTION_BLOCKED\n* RESOURCE_OVERLOADED\n* STAGE_ALREADY_OPEN\n* CANNOT_REPLY_WITHOUT_READ_MESSAGE_HISTORY_PERMISSION\n* MESSAGE_ALREADY_HAS_THREAD\n* THREAD_LOCKED\n* MAXIMUM_ACTIVE_THREADS\n* MAXIMUM_ACTIVE_ANNOUNCEMENT_THREADS\n* INVALID_JSON_FOR_UPLOADED_LOTTIE_FILE\n* UPLOADED_LOTTIES_CANNOT_CONTAIN_RASTERIZED_IMAGES\n* STICKER_MAXIMUM_FRAMERATE_EXCEEDED\n* STICKER_FRAME_COUNT_EXCEEDS_MAXIMUM_OF_1000_FRAMES\n* LOTTIE_ANIMATION_MAXIMUM_DIMENSIONS_EXCEEDED\n* STICKER_FRAME_RATE_IS_TOO_SMALL_OR_TOO_LARGE\n* STICKER_ANIMATION_DURATION_EXCEEDS_MAXIMUM_OF_5_SECONDS\n* CANNOT_UPDATE_A_FINISHED_EVENT\n* FAILED_TO_CREATE_STAGE_NEEDED_FOR_STAGE_EVENT","see":["{@link https://discord.com/developers/docs/topics/opcodes-and-status-codes#json-json-error-codes}","{@link https://gist.github.com/Dziurwa14/de2498e5ee28d2089f095aa037957cbb}"],"type":[[["string"]]],"meta":{"line":1076,"file":"Constants.js","path":"src/util"}},{"name":"DefaultMessageNotificationLevel","description":"The value set for a guild's default message notifications, e.g. `ALL_MESSAGES`. Here are the available types:\n* ALL_MESSAGES\n* ONLY_MENTIONS","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-default-message-notification-level}"],"type":[[["string"]]],"meta":{"line":1434,"file":"Constants.js","path":"src/util"}},{"name":"MembershipState","description":"The value set for a team member's membership state:\n* INVITED\n* ACCEPTED","see":["{@link https://discord.com/developers/docs/topics/teams#data-models-membership-state-enum}"],"type":[[["string"]]],"meta":{"line":1443,"file":"Constants.js","path":"src/util"}},{"name":"WebhookType","description":"The value set for a webhook's type:\n* Incoming\n* Channel Follower\n* Application","see":["{@link https://discord.com/developers/docs/resources/webhook#webhook-object-webhook-types}"],"type":[[["string"]]],"meta":{"line":1452,"file":"Constants.js","path":"src/util"}},{"name":"StickerType","description":"The value set for a sticker's type:\n* STANDARD\n* GUILD","see":["{@link https://discord.com/developers/docs/resources/sticker#sticker-object-sticker-types}"],"type":[[["string"]]],"meta":{"line":1462,"file":"Constants.js","path":"src/util"}},{"name":"StickerFormatType","description":"The value set for a sticker's format type:\n* PNG\n* APNG\n* LOTTIE\n* GIF","see":["{@link https://discord.com/developers/docs/resources/sticker#sticker-object-sticker-format-types}"],"type":[[["string"]]],"meta":{"line":1471,"file":"Constants.js","path":"src/util"}},{"name":"OverwriteType","description":"An overwrite type:\n* role\n* member","see":["{@link https://discord.com/developers/docs/resources/channel#overwrite-object-overwrite-structure}"],"type":[[["string"]]],"meta":{"line":1482,"file":"Constants.js","path":"src/util"}},{"name":"ApplicationCommandType","description":"The type of an {@link ApplicationCommand} object:\n* CHAT_INPUT\n* USER\n* MESSAGE","see":["{@link https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-types}"],"type":[[["string"]]],"meta":{"line":1492,"file":"Constants.js","path":"src/util"}},{"name":"ApplicationCommandOptionType","description":"The type of an {@link ApplicationCommandOption} object:\n* SUB_COMMAND\n* SUB_COMMAND_GROUP\n* STRING\n* INTEGER\n* BOOLEAN\n* USER\n* CHANNEL\n* ROLE\n* MENTIONABLE\n* NUMBER\n* ATTACHMENT","see":["{@link https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-option-type}"],"type":[[["string"]]],"meta":{"line":1502,"file":"Constants.js","path":"src/util"}},{"name":"ApplicationCommandPermissionType","description":"The type of an {@link ApplicationCommandPermissions} object:\n* ROLE\n* USER","see":["{@link https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-application-command-permission-type}"],"type":[[["string"]]],"meta":{"line":1533,"file":"Constants.js","path":"src/util"}},{"name":"ApplicationRoleConnectionMetadataType","description":"Each metadata type offers a comparison operation that allows\nguilds to configure role requirements based on metadata values stored by the bot.\nBots specify a metadata value for each user and guilds specify\nthe required guild's configured value within the guild role settings.\nAll available channel types:\n* INTEGER_LESS_THAN_OR_EQUAL\n* INTEGER_GREATER_THAN_OR_EQUAL\n* INTEGER_EQUAL\n* INTEGER_NOT_EQUAL\n* DATATIME_LESS_THAN_OR_EQUAL\n* DATATIME_GREATER_THAN_OR_EQUAL\n* BOOLEAN_EQUAL\n* BOOLEAN_NOT_EQUAL","see":["{@link https://discord.com/developers/docs/resources/application-role-connection-metadata#application-role-connection-metadata-object-application-role-connection-metadata-type}"],"type":[[["string"]]],"meta":{"line":1542,"file":"Constants.js","path":"src/util"}},{"name":"AutoModerationRuleTriggerType","description":"The type of an {@link AutoModerationRuleTriggerTypes} object:\n* KEYWORD\n* SPAM\n* KEYWORD_PRESET\n* MENTION_SPAM","see":["{@link https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object-trigger-types}"],"type":[[["string"]]],"meta":{"line":1571,"file":"Constants.js","path":"src/util"}},{"name":"AutoModerationRuleKeywordPresetType","description":"The type of an {@link AutoModerationRuleKeywordPresetTypes} object:\n* KEYWORD\n* SPAM\n* KEYWORD_PRESET\n* MENTION_SPAM","see":["{@link https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object-keyword-preset-types}"],"type":[[["string"]]],"meta":{"line":1582,"file":"Constants.js","path":"src/util"}},{"name":"AutoModerationActionType","description":"The type of an {@link AutoModerationActionTypes} object:\n* BLOCK_MESSAGE\n* SEND_ALERT_MESSAGE\n* TIMEOUT","see":["{@link https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-action-object-action-types}"],"type":[[["string"]]],"meta":{"line":1592,"file":"Constants.js","path":"src/util"}},{"name":"AutoModerationRuleEventType","description":"The type of an {@link AutoModerationRuleEventTypes} object:\n* MESSAGE_SEND","see":["{@link https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object-event-types}"],"type":[[["string"]]],"meta":{"line":1602,"file":"Constants.js","path":"src/util"}},{"name":"InteractionType","description":"The type of an {@link Interaction} object:\n* PING\n* APPLICATION_COMMAND\n* MESSAGE_COMPONENT\n* APPLICATION_COMMAND_AUTOCOMPLETE\n* MODAL_SUBMIT","see":["{@link https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-object-interaction-type}"],"type":[[["string"]]],"meta":{"line":1611,"file":"Constants.js","path":"src/util"}},{"name":"InteractionResponseType","description":"The type of an interaction response:\n* PONG\n* CHANNEL_MESSAGE_WITH_SOURCE\n* DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE\n* DEFERRED_MESSAGE_UPDATE\n* UPDATE_MESSAGE\n* APPLICATION_COMMAND_AUTOCOMPLETE_RESULT\n* MODAL","see":["{@link https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-response-object-interaction-callback-type}"],"type":[[["string"]]],"meta":{"line":1630,"file":"Constants.js","path":"src/util"}},{"name":"MessageComponentType","description":"The type of a message component\n* ACTION_ROW\n* BUTTON\n* TEXT_INPUT\n* STRING_SELECT\n* USER_SELECT\n* ROLE_SELECT\n* MENTIONABLE_SELECT\n* CHANNEL_SELECT\n* SELECT_MENU (deprecated)","see":["{@link https://discord.com/developers/docs/interactions/message-components#component-object-component-types}"],"type":[[["string"]]],"meta":{"line":1655,"file":"Constants.js","path":"src/util"}},{"name":"SelectMenuComponentType","description":"The types of components that are select menus. The available types are:\n* SELECT_MENU (deprecated)\n* STRING_MENU\n* USER_SELECT\n* ROLE_SELECT\n* MENTIONABLE_SELECT\n* CHANNEL_SELECT","see":["{@link https://discord.com/developers/docs/interactions/message-components#component-object-component-types}"],"type":[[["string"]]],"meta":{"line":1687,"file":"Constants.js","path":"src/util"}},{"name":"MessageButtonStyle","description":"The style of a message button\n* PRIMARY\n* SECONDARY\n* SUCCESS\n* DANGER\n* LINK","see":["{@link https://discord.com/developers/docs/interactions/message-components#button-object-button-styles}"],"type":[[["string"]]],"meta":{"line":1712,"file":"Constants.js","path":"src/util"}},{"name":"MFALevel","description":"The required MFA level for a guild\n* NONE\n* ELEVATED","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-mfa-level}"],"type":[[["string"]]],"meta":{"line":1724,"file":"Constants.js","path":"src/util"}},{"name":"NSFWLevel","description":"NSFW level of a Guild:\n* DEFAULT\n* EXPLICIT\n* SAFE\n* AGE_RESTRICTED","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-guild-nsfw-level}"],"type":[[["string"]]],"meta":{"line":1733,"file":"Constants.js","path":"src/util"}},{"name":"PrivacyLevel","description":"Privacy level of a {@link StageInstance} object:\n* PUBLIC\n* GUILD_ONLY","see":["{@link https://discord.com/developers/docs/resources/stage-instance#stage-instance-object-privacy-level}"],"type":[[["string"]]],"meta":{"line":1744,"file":"Constants.js","path":"src/util"}},{"name":"TextInputStyle","description":"The style of a text input component\n* SHORT\n* PARAGRAPH","see":["{@link https://discord.com/developers/docs/interactions/message-components#text-inputs-text-input-styles}"],"type":[[["string"]]],"meta":{"line":1753,"file":"Constants.js","path":"src/util"}},{"name":"GuildScheduledEventPrivacyLevel","description":"Privacy level of a {@link GuildScheduledEvent} object:\n* GUILD_ONLY","see":["{@link https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-privacy-level}"],"type":[[["string"]]],"meta":{"line":1762,"file":"Constants.js","path":"src/util"}},{"name":"RelationshipTypes","description":"Relationship Enums:\n* 0: NONE\n* 1: FRIEND\n* 2: BLOCKED\n* 3: PENDING_INCOMING\n* 4: PENDING_OUTGOING\n* 5: IMPLICIT","see":["{@link https://luna.gitlab.io/discord-unofficial-docs/relationships.html}"],"type":[[["string"]]],"meta":{"line":1770,"file":"Constants.js","path":"src/util"}},{"name":"PremiumTier","description":"The premium tier (Server Boost level) of a guild:\n* NONE\n* TIER_1\n* TIER_2\n* TIER_3","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-premium-tier}"],"type":[[["string"]]],"meta":{"line":1791,"file":"Constants.js","path":"src/util"}},{"name":"GuildScheduledEventStatus","description":"The status of a {@link GuildScheduledEvent}:\n* SCHEDULED\n* ACTIVE\n* COMPLETED\n* CANCELED","see":["{@link https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-status}"],"type":[[["string"]]],"meta":{"line":1802,"file":"Constants.js","path":"src/util"}},{"name":"GuildScheduledEventEntityType","description":"The entity type of a {@link GuildScheduledEvent}:\n* NONE\n* STAGE_INSTANCE\n* VOICE\n* EXTERNAL","see":["{@link https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-entity-types}"],"type":[[["string"]]],"meta":{"line":1813,"file":"Constants.js","path":"src/util"}},{"name":"VideoQualityMode","description":"The camera video quality mode of a {@link VoiceChannel}:\n* AUTO\n* FULL","see":["{@link https://discord.com/developers/docs/resources/channel#channel-object-video-quality-modes}"],"type":[[["string"]]],"meta":{"line":1824,"file":"Constants.js","path":"src/util"}},{"name":"SortOrderType","description":"Sort {@link ForumChannel} posts by ?\n* LATEST_ACTIVITY\n* CREATION_DATE","see":["{@link https://discord.com/developers/docs/resources/channel/#channel-object-sort-order-types}"],"type":[[["string"]]],"meta":{"line":1833,"file":"Constants.js","path":"src/util"}},{"name":"ForumLayoutType","description":"The default forum layout to set on the {@link ForumChannel}\n* NOT_SET\n* LIST_VIEW\n* GALLERY_VIEW","see":["{@link https://discord.com/developers/docs/resources/channel/#channel-object-forum-layout-types}"],"type":[[["string"]]],"meta":{"line":1842,"file":"Constants.js","path":"src/util"}},{"name":"GuildTemplateResolvable","description":"Data that can be resolved to give a template code. This can be:\n* A template code\n* A template URL","type":[[["string"]]],"meta":{"line":23,"file":"DataResolver.js","path":"src/util"}},{"name":"Base64Resolvable","description":"Data that resolves to give a Base64 string, typically for image uploading. This can be:\n* A Buffer\n* A base64 string","type":[[["Buffer"]],[["string"]]],"meta":{"line":73,"file":"DataResolver.js","path":"src/util"}},{"name":"BufferResolvable","description":"Data that can be resolved to give a Buffer. This can be:\n* A Buffer\n* The path to a local file\n* A URL When provided a URL, discord.js will fetch the URL internally in order to create a Buffer.\nThis can pose a security risk when the URL has not been sanitized","type":[[["string"]],[["Buffer"]]],"meta":{"line":90,"file":"DataResolver.js","path":"src/util"}},{"name":"TimestampStylesString","description":"A message formatting timestamp style, as defined in\n[here](https://discord.com/developers/docs/reference#message-formatting-timestamp-styles).\n* `t` Short time format, consisting of hours and minutes, e.g. 16:20.\n* `T` Long time format, consisting of hours, minutes, and seconds, e.g. 16:20:30.\n* `d` Short date format, consisting of day, month, and year, e.g. 20/04/2021.\n* `D` Long date format, consisting of day, month, and year, e.g. 20 April 2021.\n* `f` Short date-time format, consisting of short date and short time formats, e.g. 20 April 2021 16:20.\n* `F` Long date-time format, consisting of long date and short time formats, e.g. Tuesday, 20 April 2021 16:20.\n* `R` Relative time format, consisting of a relative duration format, e.g. 2 months ago.","type":[[["string"]]],"meta":{"line":175,"file":"Formatters.js","path":"src/util"}},{"name":"GuildMemberFlagsResolvable","description":"Data that can be resolved to give a guild member flag bitfield. This can be:\n* A string (see {@link GuildMemberFlags.FLAGS})\n* A guild member flag\n* An instance of GuildMemberFlags\n* An Array of GuildMemberFlagsResolvable","type":[[["string"]],[["number"]],[["GuildMemberFlags"]],[["Array","<"],["GuildMemberFlagsResolvable",">"]]],"meta":{"line":34,"file":"GuildMemberFlags.js","path":"src/util"}},{"name":"IntentsResolvable","description":"Data that can be resolved to give a permission number. This can be:\n* A string (see {@link Intents.FLAGS})\n* An intents flag\n* An instance of Intents\n* An array of IntentsResolvable","type":[[["string"]],[["number"]],[["Intents"]],[["Array","<"],["IntentsResolvable",">"]]],"meta":{"line":17,"file":"Intents.js","path":"src/util"}},{"name":"SweepFilter","type":[[["function"]]],"params":[{"name":"collection","description":"The collection being swept","type":[[["LimitedCollection"]]]}],"returns":{"types":[[["function"]],[["null"]]],"description":"Return `null` to skip sweeping, otherwise a function passed to `sweep()`,\nSee {@link [Collection#sweep](https://discord.js.org/docs/packages/collection/stable/Collection:Class?scrollTo=sweep)}\nfor the definition of this function."},"meta":{"line":9,"file":"LimitedCollection.js","path":"src/util"}},{"name":"LimitedCollectionOptions","description":"Options for defining the behavior of a LimitedCollection","type":[[["Object"]]],"props":[{"name":"maxSize","description":"The maximum size of the Collection","optional":true,"default":"Infinity","nullable":true,"type":[[["number"]]]},{"name":"keepOverLimit","description":"A function, which is passed the value and key of an entry, ran to decide\nto keep an entry past the maximum size","optional":true,"default":null,"nullable":true,"type":[[["function"]]]},{"name":"sweepFilter","description":"DEPRECATED: There is no direct alternative to this,\nhowever most of its purpose is fulfilled by {@link Client#sweepers}\nA function ran every `sweepInterval` to determine how to sweep","optional":true,"default":null,"nullable":true,"type":[[["SweepFilter"]]]},{"name":"sweepInterval","description":"DEPRECATED: There is no direct alternative to this,\nhowever most of its purpose is fulfilled by {@link Client#sweepers}\nHow frequently, in seconds, to sweep the collection.","optional":true,"default":0,"nullable":true,"type":[[["number"]]]}],"meta":{"line":17,"file":"LimitedCollection.js","path":"src/util"}},{"name":"RateLimitData","description":"Rate limit data","type":[[["Object"]]],"props":[{"name":"timeout","description":"Time until this rate limit ends, in milliseconds","type":[[["number"]]]},{"name":"limit","description":"The maximum amount of requests of this endpoint","type":[[["number"]]]},{"name":"method","description":"The HTTP method of this request","type":[[["string"]]]},{"name":"path","description":"The path of the request relative to the HTTP endpoint","type":[[["string"]]]},{"name":"route","description":"The route of the request relative to the HTTP endpoint","type":[[["string"]]]},{"name":"global","description":"Whether this is a global rate limit","type":[[["boolean"]]]}],"meta":{"line":6,"file":"Options.js","path":"src/util"}},{"name":"RateLimitQueueFilter","description":"Whether this rate limit should throw an Error","type":[[["function"]]],"params":[{"name":"rateLimitData","description":"The data of this rate limit","type":[[["RateLimitData"]]]}],"returns":[[["boolean"]],[["Promise","<"],["boolean",">"]]],"meta":{"line":17,"file":"Options.js","path":"src/util"}},{"name":"CacheFactory","type":[[["function"]]],"params":[{"name":"manager","description":"The manager class the cache is being requested from.","type":[[["function"]]]},{"name":"holds","description":"The class that the cache will hold.","type":[[["function"]]]}],"returns":{"types":[[["Collection"]]],"description":"A Collection used to store the cache of the manager."},"meta":{"line":24,"file":"Options.js","path":"src/util"}},{"name":"ClientOptions","description":"Options for a client.","type":[[["Object"]]],"props":[{"name":"shards","description":"The shard's id to run, or an array of shard ids. If not specified,\nthe client will spawn {@link ClientOptions#shardCount} shards. If set to `auto`, it will fetch the\nrecommended amount of shards from Discord and spawn that amount","optional":true,"type":[[["number"]],[["Array","<"],["number",">"]],[["string"]]]},{"name":"closeTimeout","description":"The amount of time in milliseconds to wait for the close frame to be received\nfrom the WebSocket. Don't have this too high/low. Its best to have it between 2_000-6_000 ms.","optional":true,"default":5000,"type":[[["number"]]]},{"name":"checkUpdate","description":"Display module update information on the screen","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"syncStatus","description":"Sync state with Discord Client","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"patchVoice","description":"Automatically patch @discordjs/voice module (support for call)","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"captchaService","description":"Captcha service to use for solving captcha {@link captchaServices}","optional":true,"default":null,"type":[[["string"]]]},{"name":"captchaKey","description":"Captcha service key","optional":true,"default":null,"type":[[["string"]]]},{"name":"captchaRetryLimit","description":"Captcha retry limit","optional":true,"default":3,"type":[[["string"]]]},{"name":"captchaWithProxy","description":"Whether to use proxy for captcha solving","optional":true,"default":false,"type":[[["string"]]]},{"name":"password","description":"Your Discord account password","optional":true,"default":null,"type":[[["string"]]]},{"name":"usingNewAttachmentAPI","description":"Use new attachment API","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"interactionTimeout","description":"The amount of time in milliseconds to wait for an interaction response, before rejecting","optional":true,"default":15000,"type":[[["string"]]]},{"name":"autoRedeemNitro","description":"Automaticlly redeems nitro codes ","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"proxy","description":"Proxy to use for the WebSocket + REST connection (proxy-agent uri type) {@link https://www.npmjs.com/package/proxy-agent}.","optional":true,"type":[[["string"]]]},{"name":"DMSync","description":"Automatically synchronize call status (DM and group) at startup (event synchronization) [Warning: May cause rate limit to gateway)","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"shardCount","description":"The total amount of shards used by all processes of this bot\n(e.g. recommended shard count, shard count of the ShardingManager)","optional":true,"default":1,"type":[[["number"]]]},{"name":"makeCache","description":"Function to create a cache.\nYou can use your own function, or the {@link Options} class to customize the Collection used for the cache.\nOverriding the cache used in `GuildManager`, `ChannelManager`, `GuildChannelManager`, `RoleManager`,\nand `PermissionOverwriteManager` is unsupported and **will** break functionality","optional":true,"type":[[["CacheFactory"]]]},{"name":"messageCacheLifetime","description":"DEPRECATED: Pass `lifetime` to `sweepers.messages` instead.\nHow long a message should stay in the cache until it is considered sweepable (in seconds, 0 for forever)","optional":true,"default":0,"type":[[["number"]]]},{"name":"messageSweepInterval","description":"DEPRECATED: Pass `interval` to `sweepers.messages` instead.\nHow frequently to remove messages from the cache that are older than the message cache lifetime\n(in seconds, 0 for never)","optional":true,"default":0,"type":[[["number"]]]},{"name":"allowedMentions","description":"Default value for {@link MessageOptions#allowedMentions}","optional":true,"type":[[["MessageMentionOptions"]]]},{"name":"invalidRequestWarningInterval","description":"The number of invalid REST requests (those that return\n401, 403, or 429) in a 10 minute window between emitted warnings (0 for no warnings). That is, if set to 500,\nwarnings will be emitted at invalid request number 500, 1000, 1500, and so on.","optional":true,"default":0,"type":[[["number"]]]},{"name":"partials","description":"Structures allowed to be partial. This means events can be emitted even when\nthey're missing all the data for a particular structure. See the \"Partial Structures\" topic on the\n[guide](https://discordjs.guide/popular-topics/partials.html) for some\nimportant usage information, as partials require you to put checks in place when handling data.","optional":true,"default":"['USER', 'CHANNEL', 'GUILD_MEMBER', 'MESSAGE', 'REACTION', 'GUILD_SCHEDULED_EVENT']","type":[[["Array","<"],["PartialType",">"]]]},{"name":"restWsBridgeTimeout","description":"Maximum time permitted between REST responses and their\ncorresponding WebSocket events","optional":true,"default":5000,"type":[[["number"]]]},{"name":"restTimeOffset","description":"Extra time in milliseconds to wait before continuing to make REST\nrequests (higher values will reduce rate-limiting errors on bad connections)","optional":true,"default":500,"type":[[["number"]]]},{"name":"restRequestTimeout","description":"Time to wait before cancelling a REST request, in milliseconds","optional":true,"default":15000,"type":[[["number"]]]},{"name":"restSweepInterval","description":"How frequently to delete inactive request buckets, in seconds\n(or 0 for never)","optional":true,"default":60,"type":[[["number"]]]},{"name":"restGlobalRateLimit","description":"How many requests to allow sending per second (0 for unlimited, 50 for\nthe standard global limit used by Discord)","optional":true,"default":0,"type":[[["number"]]]},{"name":"rejectOnRateLimit","description":"Decides how rate limits and pre-emptive throttles\nshould be handled. If this option is an array containing the prefix of the request route (e.g. /channels to match any\nroute starting with /channels, such as /channels/222197033908436994/messages) or a function returning true, a\n{@link RateLimitError} will be thrown. Otherwise the request will be queued for later","optional":true,"type":[[["Array","<"],["string",">"]],[["RateLimitQueueFilter"]]]},{"name":"retryLimit","description":"How many times to retry on 5XX errors\n(Infinity for an indefinite amount of retries)","optional":true,"default":1,"type":[[["number"]]]},{"name":"failIfNotExists","description":"Default value for {@link ReplyMessageOptions#failIfNotExists}","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"userAgentSuffix","description":"An array of additional bot info to be appended to the end of the required\n[User Agent](https://discord.com/developers/docs/reference#user-agent) header","optional":true,"type":[[["Array","<"],["string",">"]]]},{"name":"presence","description":"Presence data to use upon login","optional":true,"default":"{}","type":[[["PresenceData"]]]},{"name":"intents","description":"Intents to enable for this connection (but not using)","optional":true,"default":131071,"type":[[["IntentsResolvable"]]]},{"name":"waitGuildTimeout","description":"Time in milliseconds that Clients with the GUILDS intent should wait for","optional":true,"default":15000,"type":[[["number"]]]},{"name":"messageCreateEventGuildTimeout","description":"Time in milliseconds that Clients to register for messages with each guild\nmissing guilds to be received before starting the bot. If not specified, the default is 100 milliseconds.","optional":true,"default":100,"type":[[["number"]]]},{"name":"sweepers","description":"Options for cache sweeping","optional":true,"default":"{}","type":[[["SweeperOptions"]]]},{"name":"ws","description":"Options for the WebSocket","optional":true,"type":[[["WebsocketOptions"]]]},{"name":"http","description":"HTTP options","optional":true,"type":[[["HTTPOptions"]]]},{"name":"captchaSolver","description":"Function to solve a captcha (custom)","optional":true,"type":[[["CustomCaptchaSolver"]]]}],"meta":{"line":31,"file":"Options.js","path":"src/util"}},{"name":"CustomCaptchaSolver","description":"Function to solve a captcha","type":[[["function"]]],"params":[{"name":"captcha","description":"The captcha to solve","type":[[["Captcha"]]]},{"name":"userAgent","description":"The user agent to use for the request","type":[[["string"]]]}],"returns":{"types":[[["Promise","<"],["string",">"]]],"description":"hcaptcha token"},"meta":{"line":100,"file":"Options.js","path":"src/util"}},{"name":"SweeperOptions","description":"Options for {@link Sweepers} defining the behavior of cache sweeping","type":[[["Object","<"],["SweeperKey",", "],["SweepOptions",">"]]],"meta":{"line":108,"file":"Options.js","path":"src/util"}},{"name":"SweepOptions","description":"Options for sweeping a single type of item from cache","type":[[["Object"]]],"props":[{"name":"interval","description":"The interval (in seconds) at which to perform sweeping of the item","type":[[["number"]]]},{"name":"lifetime","description":"How long an item should stay in cache until it is considered sweepable.\nThis property is only valid for the `invites`, `messages`, and `threads` keys. The `filter` property\nis mutually exclusive to this property and takes priority","optional":true,"type":[[["number"]]]},{"name":"filter","description":"The function used to determine the function passed to the sweep method\nThis property is optional when the key is `invites`, `messages`, or `threads` and `lifetime` is set","type":[[["GlobalSweepFilter"]]]}],"meta":{"line":113,"file":"Options.js","path":"src/util"}},{"name":"WebsocketOptions","description":"WebSocket options (these are left as snake_case to match the API)","type":[[["Object"]]],"props":[{"name":"compress","description":"Whether to compress data sent on the connection","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"properties","description":"Properties to identify the client with","optional":true,"type":[[["WebSocketProperties"]]]}],"meta":{"line":124,"file":"Options.js","path":"src/util"}},{"name":"AgentOptions","description":"HTTPS Agent options.","see":["{@link https://nodejs.org/api/https.html#https_class_https_agent}","{@link https://nodejs.org/api/http.html#http_new_agent_options}"],"type":[[["Object"]]],"meta":{"line":131,"file":"Options.js","path":"src/util"}},{"name":"HTTPOptions","description":"HTTP options","type":[[["Object"]]],"props":[{"name":"version","description":"API version to use","optional":true,"default":9,"type":[[["number"]]]},{"name":"agent","description":"HTTPS Agent options","optional":true,"default":"{}","type":[[["AgentOptions"]]]},{"name":"api","description":"Base URL of the API","optional":true,"default":"'https://discord.com/api'","type":[[["string"]]]},{"name":"cdn","description":"Base URL of the CDN","optional":true,"default":"'https://cdn.discordapp.com'","type":[[["string"]]]},{"name":"invite","description":"Base URL of invites","optional":true,"default":"'https://discord.gg'","type":[[["string"]]]},{"name":"template","description":"Base URL of templates","optional":true,"default":"'https://discord.new'","type":[[["string"]]]},{"name":"headers","description":"Additional headers to send for all API requests","optional":true,"type":[[["Object"]]]},{"name":"scheduledEvent","description":"Base URL of guild scheduled events","optional":true,"default":"'https://discord.com/events'","type":[[["string"]]]}],"meta":{"line":138,"file":"Options.js","path":"src/util"}},{"name":"PermissionResolvable","description":"Data that can be resolved to give a permission number. This can be:\n* A string (see {@link Permissions.FLAGS})\n* A permission number\n* An instance of Permissions\n* An Array of PermissionResolvable","type":[[["string"]],[["bigint"]],[["Permissions"]],[["Array","<"],["PermissionResolvable",">"]]],"meta":{"line":18,"file":"Permissions.js","path":"src/util"}},{"name":"DiscordAuthWebsocketOptions","type":[[["Object"]]],"props":[{"name":"debug","description":"Log debug info","optional":true,"default":false,"nullable":true,"type":[[["boolean"]]]},{"name":"hiddenLog","description":"Hide log ?","optional":true,"default":false,"nullable":true,"type":[[["boolean"]]]},{"name":"autoLogin","description":"Automatically login (DiscordJS.Client Login) ?","optional":true,"default":false,"nullable":true,"type":[[["boolean"]]]},{"name":"failIfError","description":"Throw error ?","optional":true,"default":true,"nullable":true,"type":[[["boolean"]]]},{"name":"generateQR","description":"Create QR Code ?","optional":true,"default":true,"nullable":true,"type":[[["boolean"]]]},{"name":"apiVersion","description":"API Version","optional":true,"default":9,"nullable":true,"type":[[["number"]]]},{"name":"userAgent","description":"User Agent","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"wsProperties","description":"Web Socket Properties","optional":true,"nullable":true,"type":[[["Object","<"],["string",", "],["string",">"]]]}],"meta":{"line":46,"file":"RemoteAuth.js","path":"src/util"}},{"name":"RoleFlagsResolvable","description":"Data that can be resolved to give a role flag bitfield. This can be:\n* A string (see {@link RoleFlags.FLAGS})\n* A role flag\n* An instance of RoleFlags\n* An Array of RoleFlagsResolvable","type":[[["string"]],[["number"]],[["RoleFlags"]],[["Array","<"],["RoleFlagsResolvable",">"]]],"meta":{"line":28,"file":"RoleFlags.js","path":"src/util"}},{"name":"Snowflake","description":"A {@link https://developer.twitter.com/en/docs/twitter-ids Twitter snowflake},\nexcept the epoch is 2015-01-01T00:00:00.000Z.\n\nIf we have a snowflake '266241948824764416' we can represent it as binary:\n```\n64 22 17 12 0\n 000000111011000111100001101001000101000000 00001 00000 000000000000\n number of milliseconds since Discord epoch worker pid increment\n```","type":[[["string"]]],"meta":{"line":11,"file":"SnowflakeUtil.js","path":"src/util"}},{"name":"DeconstructedSnowflake","description":"A deconstructed snowflake.","type":[[["Object"]]],"props":[{"name":"timestamp","description":"Timestamp the snowflake was created","type":[[["number"]]]},{"name":"date","description":"Date the snowflake was created","type":[[["Date"]]]},{"name":"workerId","description":"The worker's id in the snowflake","type":[[["number"]]]},{"name":"processId","description":"The process's id in the snowflake","type":[[["number"]]]},{"name":"increment","description":"Increment in the snowflake","type":[[["number"]]]},{"name":"binary","description":"Binary representation of the snowflake","type":[[["string"]]]}],"meta":{"line":43,"file":"SnowflakeUtil.js","path":"src/util"}},{"name":"GlobalSweepFilter","type":[[["function"]]],"returns":{"types":[[["function"]],[["null"]]],"description":"Return `null` to skip sweeping, otherwise a function passed to `sweep()`,\nSee {@link [Collection#sweep](https://discord.js.org/docs/packages/collection/stable/Collection:Class?scrollTo=sweep)}\nfor the definition of this function."},"meta":{"line":7,"file":"Sweepers.js","path":"src/util"}},{"name":"LifetimeFilterOptions","description":"Options for generating a filter function based on lifetime","type":[[["Object"]]],"props":[{"name":"lifetime","description":"How long, in seconds, an entry should stay in the collection\nbefore it is considered sweepable.","optional":true,"default":14400,"type":[[["number"]]]},{"name":"getComparisonTimestamp","description":"A function that takes an entry, key,\nand the collection and returns a timestamp to compare against in order to determine the lifetime of the entry.","optional":true,"default":"e => e?.createdTimestamp","type":[[["function"]]]},{"name":"excludeFromSweep","description":"A function that takes an entry, key, and the collection\nand returns a boolean, `true` when the entry should not be checked for sweepability.","optional":true,"default":"() => false","type":[[["function"]]]}],"meta":{"line":303,"file":"Sweepers.js","path":"src/util"}},{"name":"SweepEventOptions","description":"Configuration options for emitting the cache sweep client event","access":"private","type":[[["Object"]]],"props":[{"name":"emit","description":"Whether to emit the client event in this method","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"outputName","description":"A name to output in the client event if it should differ from the key","optional":true,"type":[[["string"]]]}],"meta":{"line":385,"file":"Sweepers.js","path":"src/util"}},{"name":"SystemChannelFlagsResolvable","description":"Data that can be resolved to give a system channel flag bitfield. This can be:\n* A string (see {@link SystemChannelFlags.FLAGS})\n* A system channel flag\n* An instance of SystemChannelFlags\n* An Array of SystemChannelFlagsResolvable","type":[[["string"]],[["number"]],[["SystemChannelFlags"]],[["Array","<"],["SystemChannelFlagsResolvable",">"]]],"meta":{"line":26,"file":"SystemChannelFlags.js","path":"src/util"}},{"name":"SplitOptions","description":"Options for splitting a message.","type":[[["Object"]]],"props":[{"name":"maxLength","description":"Maximum character length per message piece","optional":true,"default":2000,"type":[[["number"]]]},{"name":"char","description":"Character(s) or Regex(es) to split the message with,\nan array can be used to split multiple times","optional":true,"default":"'\\n'","type":[[["string"]],[["Array","<"],["string",">"]],[["RegExp"]],[["Array","<"],["RegExp",">"]]]},{"name":"prepend","description":"Text to prepend to every piece except the first","optional":true,"default":"''","type":[[["string"]]]},{"name":"append","description":"Text to append to every piece except the last","optional":true,"default":"''","type":[[["string"]]]}],"meta":{"line":68,"file":"Util.js","path":"src/util"}},{"name":"EscapeMarkdownOptions","description":"Options used to escape markdown.","type":[[["Object"]]],"props":[{"name":"codeBlock","description":"Whether to escape code blocks","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"inlineCode","description":"Whether to escape inline code","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"bold","description":"Whether to escape bolds","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"italic","description":"Whether to escape italics","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"underline","description":"Whether to escape underlines","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"strikethrough","description":"Whether to escape strikethroughs","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"spoiler","description":"Whether to escape spoilers","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"codeBlockContent","description":"Whether to escape text inside code blocks","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"inlineCodeContent","description":"Whether to escape text inside inline code","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"escape","description":"Whether to escape escape characters","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"heading","description":"Whether to escape headings","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"bulletedList","description":"Whether to escape bulleted lists","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"numberedList","description":"Whether to escape numbered lists","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"maskedLink","description":"Whether to escape masked links","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":123,"file":"Util.js","path":"src/util"}},{"name":"MakeErrorOptions","description":"Options used to make an error object.","type":[[["Object"]]],"props":[{"name":"name","description":"Error type","type":[[["string"]]]},{"name":"message","description":"Message for the error","type":[[["string"]]]},{"name":"stack","description":"Stack for the error","type":[[["string"]]]}],"meta":{"line":397,"file":"Util.js","path":"src/util"}},{"name":"ColorResolvable","description":"Can be a number, hex string, a {@link Color}, or an RGB array like:\n```js\n[255, 0, 255] // purple\n```","type":[[["string"]],[["Color"]],[["number"]],[["Array","<"],["number",">"]]],"meta":{"line":470,"file":"Util.js","path":"src/util"}}],"externals":[{"name":"Collection","see":["{@link https://discord.js.org/docs/packages/collection/stable/Collection:Class}"],"meta":{"line":1098,"file":"Client.js","path":"src/client"}},{"name":"VoiceConnection","see":["{@link https://discord.js.org/#/docs/voice/main/class/VoiceConnection}"],"meta":{"line":294,"file":"Client.js","path":"src/client"}},{"name":"Inflate","see":["{@link https://www.npmjs.com/package/zlib-sync}"],"meta":{"line":122,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"CloseEvent","see":["{@link https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent}"],"meta":{"line":354,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"ErrorEvent","see":["{@link https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent}"],"meta":{"line":359,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"MessageEvent","see":["{@link https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent}"],"meta":{"line":364,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"SlashCommandBuilder","see":["{@link https://discord.js.org/docs/packages/builders/stable/SlashCommandBuilder:Class}"],"meta":{"line":259,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"ContextMenuCommandBuilder","see":["{@link https://discord.js.org/docs/packages/builders/stable/ContextMenuCommandBuilder:Class}"],"meta":{"line":264,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"APIApplicationCommandPermissions","see":["{@link https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-application-command-permissions-structure}"],"meta":{"line":422,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"APIError","see":["{@link https://discord.com/developers/docs/reference#error-messages}"],"meta":{"line":100,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"HTTPMethod","see":["{@link https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods}"],"meta":{"line":422,"file":"RequestHandler.js","path":"src/rest"}},{"name":"Response","see":["{@link https://developer.mozilla.org/en-US/docs/Web/API/Response}"],"meta":{"line":427,"file":"RequestHandler.js","path":"src/rest"}},{"name":"APIApplicationCommand","see":["{@link https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-structure}"],"meta":{"line":1022,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"APIApplicationCommandOption","see":["{@link https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-option-structure}"],"meta":{"line":1027,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"APIInteractionDataResolved","see":["{@link https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-object-resolved-data-structure}"],"meta":{"line":208,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"APIChannel","see":["{@link https://discord.com/developers/docs/resources/channel#channel-object}"],"meta":{"line":268,"file":"Channel.js","path":"src/structures"}},{"name":"APIPresence","see":["{@link https://discord.com/developers/docs/rich-presence/how-to#updating-presence-update-presence-payload-fields}"],"meta":{"line":89,"file":"ClientPresence.js","path":"src/structures"}},{"name":"APIEmoji","see":["{@link https://discord.com/developers/docs/resources/emoji#emoji-object}"],"meta":{"line":145,"file":"Emoji.js","path":"src/structures"}},{"name":"APIGuild","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object}"],"meta":{"line":1741,"file":"Guild.js","path":"src/structures"}},{"name":"APIGuildMember","see":["{@link https://discord.com/developers/docs/resources/guild#guild-member-object}"],"meta":{"line":683,"file":"GuildMember.js","path":"src/structures"}},{"name":"APIMessageComponent","see":["{@link https://discord.com/developers/docs/interactions/message-components#component-object}"],"meta":{"line":100,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"APIAttachment","see":["{@link https://discord.com/developers/docs/resources/channel#attachment-object}"],"meta":{"line":201,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"APIMessageSelectMenu","see":["{@link https://discord.com/developers/docs/interactions/message-components#select-menu-object}"],"meta":{"line":112,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"APIMessageButton","see":["{@link https://discord.com/developers/docs/interactions/message-components#button-object}"],"meta":{"line":117,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"APIEmbed","see":["{@link https://discord.com/developers/docs/resources/channel#embed-object}"],"meta":{"line":583,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"APIMessage","see":["{@link https://discord.com/developers/docs/resources/channel#message-object}"],"meta":{"line":355,"file":"MessagePayload.js","path":"src/structures"}},{"name":"MessageActivityType","see":["{@link https://discord-api-types.dev/api/discord-api-types-v9/enum/MessageActivityType}"],"meta":{"line":17,"file":"Presence.js","path":"src/structures"}},{"name":"APIRole","see":["{@link https://discord.com/developers/docs/topics/permissions#role-object}"],"meta":{"line":528,"file":"Role.js","path":"src/structures"}},{"name":"APISticker","see":["{@link https://discord.com/developers/docs/resources/sticker#sticker-object}"],"meta":{"line":307,"file":"Sticker.js","path":"src/structures"}},{"name":"APIUser","see":["{@link https://discord.com/developers/docs/resources/user#user-object}"],"meta":{"line":727,"file":"User.js","path":"src/structures"}},{"name":"Stream","see":["{@link https://nodejs.org/api/stream.html}"],"meta":{"line":99,"file":"DataResolver.js","path":"src/util"}}]} \ No newline at end of file diff --git a/package.json b/package.json index c1be08a..0eebab3 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "discordapp" ], "author": "aiko-chan-ai", - "license": "Apache-2.0", + "license": "GNU General Public License v3.0", "bugs": { "url": "https://github.com/aiko-chan-ai/discord.js-selfbot-v13/issues" }, @@ -97,4 +97,4 @@ "tslint": "^6.1.3", "typescript": "^4.9.5" } -} \ No newline at end of file +} From f19c8e0aa61ec605ed3650ac6c69d10d5236a1a5 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sun, 7 Jan 2024 20:17:37 +0700 Subject: [PATCH 23/60] Delete main.json --- docs/main.json | 1 - 1 file changed, 1 deletion(-) delete mode 100644 docs/main.json diff --git a/docs/main.json b/docs/main.json deleted file mode 100644 index d31ea41..00000000 --- a/docs/main.json +++ /dev/null @@ -1 +0,0 @@ -{"meta":{"generator":"0.11.1","format":20,"date":1699882442263},"custom":{"general":{"name":"General","files":{"welcome":{"name":"Welcome","type":"md","content":"
\r\n
\r\n

\r\n \"discord.js\"\r\n

\r\n
\r\n

\r\n \"Discord\r\n \"npm\r\n \"npm\r\n \"Tests\r\n

\r\n
\r\n\r\n## About\r\n\r\nWelcome to `discord.js-selfbot-v13@v2.15`, based on `discord.js@13.17`\r\n\r\n- discord.js-selfbot-v13 is a [Node.js](https://nodejs.org) module that allows user accounts to interact with the Discord API v9.\r\n\r\n\r\n
\r\n

\r\n \"npm\r\n \"npm\r\n \"Tests\r\n

\r\n
\r\n\r\n### I don't take any responsibility for blocked Discord accounts that used this module.\r\n### Using this on a user account is prohibited by the [Discord TOS](https://discord.com/terms) and can lead to the account block.\r\n\r\n## Project Status\r\n\r\n`discord.js-selfbot-v13` is currently in maintenance mode. New features are not actively being added but existing features and new versions of discord are supported as possible. There are some major architectural changes which need to be added to improve the stability and security of the project. I don't have as much spare time as I did when I started this project, so there is not currently any plan for these improvements.\r\n\r\n### [Document Website (recommend)](https://discordjs-self-v13.netlify.app/)\r\n\r\n### [Extend Document (With Example)](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/tree/main/Document)\r\n\r\n## Features (User)\r\n- [x] Message: Embeds (WebEmbed)\r\n- [x] User: Settings, Status, Activity, DeveloperPortal, RemoteAuth, etc.\r\n- [X] Guild: Fetch Members, Join / Leave, Top emojis, ...\r\n- [X] Interactions: Slash Commands, Click Buttons, Menu, Modal, Context Menu, ...\r\n- [X] Captcha Handler (2captcha, capmonster, custom)\r\n- [X] Documentation\r\n- [x] Voice & [Video stream](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/issues/293)\r\n- [ ] Everything\r\n\r\n### Optional packages\r\n\r\n- [2captcha](https://www.npmjs.com/package/2captcha) for solving captcha (`npm install 2captcha`)\r\n- [node-capmonster](https://www.npmjs.com/package/node-capmonster) for solving captcha (`npm install node-capmonster`)\r\n\r\n## Installation\r\n\r\n**Node.js 16.6.0 or newer is required**\r\n\r\n> Recommended Node.js version: 18 (LTS)\r\n\r\n```sh-session\r\nnpm install discord.js-selfbot-v13@latest\r\n```\r\n\r\n## Example\r\n\r\n```js\r\nconst { Client } = require('discord.js-selfbot-v13');\r\nconst client = new Client({\r\n\t// See other options here\r\n\t// https://discordjs-self-v13.netlify.app/#/docs/docs/main/typedef/ClientOptions\r\n\t// All partials are loaded automatically\r\n});\r\n\r\nclient.on('ready', async () => {\r\n console.log(`${client.user.username} is ready!`);\r\n})\r\n\r\nclient.login('token');\r\n```\r\n\r\n## Get Token ?\r\n\r\nRun code (Discord Console - [Ctrl + Shift + I])\r\n\r\n```js\r\nwindow.webpackChunkdiscord_app.push([\r\n [Math.random()],\r\n {},\r\n req => {\r\n for (const m of Object.keys(req.c)\r\n .map(x => req.c[x].exports)\r\n .filter(x => x)) {\r\n if (m.default && m.default.getToken !== undefined) {\r\n return copy(m.default.getToken());\r\n }\r\n if (m.getToken !== undefined) {\r\n return copy(m.getToken());\r\n }\r\n }\r\n },\r\n]);\r\nconsole.log('%cWorked!', 'font-size: 50px');\r\nconsole.log(`%cYou now have your token in the clipboard!`, 'font-size: 16px');\r\n```\r\n\r\nCredit: \".\" [hxr404](https://github.com/hxr404/Discord-Console-hacks)\r\n\r\n\r\n## Contributing\r\n\r\n- Before creating an issue, please ensure that it hasn't already been reported/suggested, and double-check the\r\n[documentation](https://discord.js.org/#/docs). \r\n- See [the contribution guide](https://github.com/discordjs/discord.js/blob/main/.github/CONTRIBUTING.md) if you'd like to submit a PR.\r\n\r\n## Need help?\r\nGithub Discussion: [Here](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/discussions)\r\n\r\n## Credits\r\n- [Discord.js](https://github.com/discordjs/discord.js)\r\n\r\n## \".\" Other project(s)\r\n\r\n- 📘 [***aiko-chan-ai/DiscordBotClient***](https://github.com/aiko-chan-ai/DiscordBotClient)
\r\n A patched version of discord, with bot login support\r\n- 📕 [***aiko-chan-ai/Discord-Markdown***](https://github.com/aiko-chan-ai/Discord-Markdown)
\r\n Better Markdown to text chat Discord.\r\n- 📗 ...\r\n\r\n## Star History\r\n\r\n[![Star History Chart](https://api.star-history.com/svg?repos=aiko-chan-ai/discord.js-selfbot-v13&type=Date)](https://star-history.com/#aiko-chan-ai/discord.js-selfbot-v13&Date)\r\n\r\n\r\n# From Github with love 💕","path":"README.md"}}}},"classes":[{"name":"BaseClient","description":"The base class for all clients.","extends":[[["EventEmitter"]]],"props":[{"name":"options","description":"The options the client was instantiated with","type":[[["ClientOptions"]]],"meta":{"line":26,"file":"BaseClient.js","path":"src/client"}},{"name":"rest","description":"The REST manager of the client","access":"private","type":[[["RESTManager"]]],"meta":{"line":33,"file":"BaseClient.js","path":"src/client"}},{"name":"api","description":"API shortcut","access":"private","readonly":true,"type":[[["Object"]]],"meta":{"line":42,"file":"BaseClient.js","path":"src/client"}}],"methods":[{"name":"destroy","description":"Destroys all assets used by the base client.","returns":[[["void"]]],"meta":{"line":50,"file":"BaseClient.js","path":"src/client"}},{"name":"incrementMaxListeners","description":"Increments max listeners by one, if they are not zero.","access":"private","meta":{"line":58,"file":"BaseClient.js","path":"src/client"}},{"name":"decrementMaxListeners","description":"Decrements max listeners by one, if they are not zero.","access":"private","meta":{"line":69,"file":"BaseClient.js","path":"src/client"}}],"events":[{"name":"debug","description":"Emitted for general debugging information.","params":[{"name":"info","description":"The debug information","type":[[["string"]]]}],"meta":{"line":83,"file":"BaseClient.js","path":"src/client"}},{"name":"rateLimit","description":"Emitted when the client hits a rate limit while making a request","params":[{"name":"rateLimitData","description":"Object containing the rate limit info","type":[[["RateLimitData"]]]}],"meta":{"line":137,"file":"RequestHandler.js","path":"src/rest"}},{"name":"apiRequest","description":"Emitted before every API request.\nThis event can emit several times for the same request, e.g. when hitting a rate limit.\nThis is an informational event that is emitted quite frequently,\nit is highly recommended to check `request.path` to filter the data.","params":[{"name":"request","description":"The request that is about to be sent","type":[[["APIRequest"]]]}],"meta":{"line":188,"file":"RequestHandler.js","path":"src/rest"}},{"name":"apiResponse","description":"Emitted after every API request has received a response.\nThis event does not necessarily correlate to completion of the request, e.g. when hitting a rate limit.\nThis is an informational event that is emitted quite frequently,\nit is highly recommended to check `request.path` to filter the data.","params":[{"name":"request","description":"The request that triggered this response","type":[[["APIRequest"]]]},{"name":"response","description":"The response received from the Discord API","type":[[["Response"]]]}],"meta":{"line":220,"file":"RequestHandler.js","path":"src/rest"}},{"name":"invalidRequestWarning","description":"Emitted periodically when the process sends invalid requests to let users avoid the\n10k invalid requests in 10 minutes threshold that causes a ban","params":[{"name":"invalidRequestWarningData","description":"Object containing the invalid request info","type":[[["InvalidRequestWarningData"]]]}],"meta":{"line":297,"file":"RequestHandler.js","path":"src/rest"}}],"meta":{"line":13,"file":"BaseClient.js","path":"src/client"}},{"name":"Client","description":"The main hub for interacting with the Discord API, and the starting point for any bot.","extends":[[["BaseClient"]]],"construct":{"name":"Client","params":[{"name":"options","description":"Options for the client","type":[[["ClientOptions"]]]}]},"props":[{"name":"_cleanups","description":"Functions called when a cache is garbage collected or the Client is destroyed","access":"private","type":[[["Set","<"],["function","()>"]]],"meta":{"line":96,"file":"Client.js","path":"src/client"}},{"name":"_finalizers","description":"The finalizers used to cleanup items.","access":"private","type":[[["FinalizationRegistry"]]],"meta":{"line":103,"file":"Client.js","path":"src/client"}},{"name":"ws","description":"The WebSocket manager of the client","type":[[["WebSocketManager"]]],"meta":{"line":109,"file":"Client.js","path":"src/client"}},{"name":"actions","description":"The action manager of the client","access":"private","type":[[["ActionsManager"]]],"meta":{"line":116,"file":"Client.js","path":"src/client"}},{"name":"voice","description":"The voice manager of the client","type":[[["ClientVoiceManager"]]],"meta":{"line":122,"file":"Client.js","path":"src/client"}},{"name":"voiceStates","description":"A manager of the voice states of this client (Support DM / Group DM)","type":[[["VoiceStateManager"]]],"meta":{"line":128,"file":"Client.js","path":"src/client"}},{"name":"shard","description":"Shard helpers for the client (only if the process was spawned from a {@link ShardingManager})","nullable":true,"type":[[["ShardClientUtil"]]],"meta":{"line":134,"file":"Client.js","path":"src/client"}},{"name":"users","description":"All of the {@link User} objects that have been cached at any point, mapped by their ids","type":[[["UserManager"]]],"meta":{"line":142,"file":"Client.js","path":"src/client"}},{"name":"relationships","description":"All of the relationships {@link User}","type":[[["RelationshipManager"]]],"meta":{"line":149,"file":"Client.js","path":"src/client"}},{"name":"settings","description":"All of the settings {@link Object}","type":[[["ClientUserSettingManager"]]],"meta":{"line":154,"file":"Client.js","path":"src/client"}},{"name":"guilds","description":"All of the guilds the client is currently handling, mapped by their ids -\nas long as sharding isn't being used, this will be *every* guild the bot is a member of","type":[[["GuildManager"]]],"meta":{"line":160,"file":"Client.js","path":"src/client"}},{"name":"billing","description":"Manages the API methods","type":[[["BillingManager"]]],"meta":{"line":166,"file":"Client.js","path":"src/client"}},{"name":"sessions","description":"All of the sessions of the client","type":[[["SessionManager"]]],"meta":{"line":172,"file":"Client.js","path":"src/client"}},{"name":"channels","description":"All of the {@link Channel}s that the client is currently handling, mapped by their ids -\nas long as sharding isn't being used, this will be *every* channel in *every* guild the bot\nis a member of. Note that DM channels will not be initially cached, and thus not be present\nin the Manager without their explicit fetching or use.","type":[[["ChannelManager"]]],"meta":{"line":181,"file":"Client.js","path":"src/client"}},{"name":"sweepers","description":"The sweeping functions and their intervals used to periodically sweep caches","type":[[["Sweepers"]]],"meta":{"line":187,"file":"Client.js","path":"src/client"}},{"name":"developerPortal","description":"The developer portal manager of the client","type":[[["DeveloperPortalManager"]]],"meta":{"line":193,"file":"Client.js","path":"src/client"}},{"name":"presence","description":"The presence of the Client","access":"private","type":[[["ClientPresence"]]],"meta":{"line":200,"file":"Client.js","path":"src/client"}},{"name":"token","description":"Authorization token for the logged in bot.\nIf present, this defaults to `process.env.DISCORD_TOKEN` when instantiating the client\nThis should be kept private at all times.","nullable":true,"type":[[["string"]]],"meta":{"line":210,"file":"Client.js","path":"src/client"}},{"name":"user","description":"User that the client is logged in as","nullable":true,"type":[[["ClientUser"]]],"meta":{"line":221,"file":"Client.js","path":"src/client"}},{"name":"application","description":"The application of this bot","nullable":true,"type":[[["ClientApplication"]]],"meta":{"line":227,"file":"Client.js","path":"src/client"}},{"name":"readyAt","description":"Time at which the client was last regarded as being in the `READY` state\n(each time the client disconnects and successfully reconnects, this will be overwritten)","nullable":true,"type":[[["Date"]]],"meta":{"line":234,"file":"Client.js","path":"src/client"}},{"name":"password","description":"Password cache","nullable":true,"type":[[["string"]]],"meta":{"line":240,"file":"Client.js","path":"src/client"}},{"name":"sessionId","description":"Session ID","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":259,"file":"Client.js","path":"src/client"}},{"name":"emojis","description":"All custom emojis that the client has access to, mapped by their ids","readonly":true,"type":[[["BaseGuildEmojiManager"]]],"meta":{"line":268,"file":"Client.js","path":"src/client"}},{"name":"readyTimestamp","description":"Timestamp of the time the client was last `READY` at","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":281,"file":"Client.js","path":"src/client"}},{"name":"uptime","description":"How long it has been since the client last entered the `READY` state in milliseconds","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":290,"file":"Client.js","path":"src/client"}},{"name":"callVoice","description":"Get connection to current call","readonly":true,"nullable":true,"type":[[["VoiceConnection"]]],"meta":{"line":303,"file":"Client.js","path":"src/client"}},{"name":"options","description":"The options the client was instantiated with","type":[[["ClientOptions"]]],"meta":{"line":26,"file":"BaseClient.js","path":"src/client"}},{"name":"rest","description":"The REST manager of the client","access":"private","type":[[["RESTManager"]]],"meta":{"line":33,"file":"BaseClient.js","path":"src/client"}},{"name":"api","description":"API shortcut","access":"private","readonly":true,"type":[[["Object"]]],"meta":{"line":42,"file":"BaseClient.js","path":"src/client"}}],"methods":[{"name":"login","description":"Logs the client in, establishing a WebSocket connection to Discord.","examples":["client.login('my token');"],"params":[{"name":"token","description":"Token of the account to log in with","optional":true,"default":"this.token","type":[[["string"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["string",">"]]],"description":"Token of the account used"},"meta":{"line":314,"file":"Client.js","path":"src/client"}},{"name":"normalLogin","description":"Login Discord with Username and Password","params":[{"name":"username","description":"Email or Phone Number","type":[[["string"]]]},{"name":"password","description":"Password","nullable":true,"type":[[["string"]]]},{"name":"mfaCode","description":"2FA Code / Backup Code","nullable":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["string",">"]]],"meta":{"line":356,"file":"Client.js","path":"src/client"}},{"name":"switchUser","description":"Switch the user","params":[{"name":"token","description":"User Token","type":[[["string"]]]}],"returns":[[["Promise","<"],["string",">"]]],"meta":{"line":411,"file":"Client.js","path":"src/client"}},{"name":"QRLogin","description":"Sign in with the QR code on your phone.","examples":["client.QRLogin();"],"params":[{"name":"options","description":"Options","type":[[["DiscordAuthWebsocketOptions"]]]}],"returns":[[["DiscordAuthWebsocket"]]],"meta":{"line":430,"file":"Client.js","path":"src/client"}},{"name":"remoteAuth","description":"Implement `remoteAuth`, like using your phone to scan a QR code","params":[{"name":"url","description":"URL from QR code","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":441,"file":"Client.js","path":"src/client"}},{"name":"createToken","description":"Create a new token based on the current token","returns":{"types":[[["Promise","<"],["string",">"]]],"description":"New Discord Token"},"meta":{"line":470,"file":"Client.js","path":"src/client"}},{"name":"checkUpdate","description":"Check for updates","async":true,"returns":[[["Promise","<"],["Client",">"]]],"meta":{"line":508,"file":"Client.js","path":"src/client"}},{"name":"isReady","description":"Returns whether the client has logged in, indicative of being able to access\nproperties such as `user` and `application`.","returns":[[["boolean"]]],"meta":{"line":528,"file":"Client.js","path":"src/client"}},{"name":"destroy","description":"Logs out, terminates the connection to Discord, and destroys the client.","returns":[[["void"]]],"meta":{"line":536,"file":"Client.js","path":"src/client"}},{"name":"logout","description":"Logs out, terminates the connection to Discord, destroys the client and destroys the token.","async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":554,"file":"Client.js","path":"src/client"}},{"name":"fetchInvite","description":"Obtains an invite from Discord.","examples":["client.fetchInvite('https://discord.gg/djs')\n .then(invite => console.log(`Obtained invite with code: ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"invite","description":"Invite code or URL","type":[[["InviteResolvable"]]]},{"name":"options","description":"Options for fetching the invite","optional":true,"type":[[["ClientFetchInviteOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":581,"file":"Client.js","path":"src/client"}},{"name":"acceptInvite","description":"Join this Guild using this invite (fast)","examples":["await client.acceptInvite('https://discord.gg/genshinimpact')"],"params":[{"name":"invite","description":"Invite code or URL","type":[[["InviteResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":596,"file":"Client.js","path":"src/client"}},{"name":"redeemNitro","description":"Redeem nitro from code or url.","params":[{"name":"nitro","description":"Nitro url or code","type":[[["string"]]]},{"name":"channel","description":"Channel that the code was sent in","type":[[["TextChannelResolvable"]]]},{"name":"paymentSourceId","description":"Payment source id","optional":true,"type":[[["Snowflake"]]]}],"returns":[[["Promise","<"],["any",">"]]],"meta":{"line":620,"file":"Client.js","path":"src/client"}},{"name":"fetchGuildTemplate","description":"Obtains a template from Discord.","examples":["client.fetchGuildTemplate('https://discord.new/FKvmczH2HyUf')\n .then(template => console.log(`Obtained template with code: ${template.code}`))\n .catch(console.error);"],"params":[{"name":"template","description":"Template code or URL","type":[[["GuildTemplateResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["GuildTemplate",">"]]],"meta":{"line":643,"file":"Client.js","path":"src/client"}},{"name":"fetchWebhook","description":"Obtains a webhook from Discord.","examples":["client.fetchWebhook('id', 'token')\n .then(webhook => console.log(`Obtained webhook with name: ${webhook.name}`))\n .catch(console.error);"],"params":[{"name":"id","description":"The webhook's id","type":[[["Snowflake"]]]},{"name":"token","description":"Token for the webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Webhook",">"]]],"meta":{"line":659,"file":"Client.js","path":"src/client"}},{"name":"fetchVoiceRegions","description":"Obtains the available voice regions from Discord.","examples":["client.fetchVoiceRegions()\n .then(regions => console.log(`Available regions are: ${regions.map(region => region.name).join(', ')}`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Collection","<"],["string",", "],["VoiceRegion",">>"]]],"meta":{"line":672,"file":"Client.js","path":"src/client"}},{"name":"fetchSticker","description":"Obtains a sticker from Discord.","examples":["client.fetchSticker('id')\n .then(sticker => console.log(`Obtained sticker with name: ${sticker.name}`))\n .catch(console.error);"],"params":[{"name":"id","description":"The sticker's id","type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["Sticker",">"]]],"meta":{"line":688,"file":"Client.js","path":"src/client"}},{"name":"fetchPremiumStickerPacks","description":"Obtains the list of sticker packs available to Nitro subscribers from Discord.","examples":["client.fetchPremiumStickerPacks()\n .then(packs => console.log(`Available sticker packs are: ${packs.map(pack => pack.name).join(', ')}`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["StickerPack",">>"]]],"meta":{"line":701,"file":"Client.js","path":"src/client"}},{"name":"_finalize","description":"A last ditch cleanup function for garbage collection.","access":"private","params":[{"name":"options.cleanup","description":"The function called to GC","type":[[["function"]]]},{"name":"options.message","description":"The message to send after a successful GC","optional":true,"type":[[["string"]]]},{"name":"options.name","description":"The name of the item being GCed","optional":true,"type":[[["string"]]]}],"meta":{"line":712,"file":"Client.js","path":"src/client"}},{"name":"_clearCache","description":"Clear a cache","access":"private","params":[{"name":"cache","description":"The cache to clear","type":[[["Collection"]]]}],"returns":{"types":[[["number"]]],"description":"The number of removed entries"},"meta":{"line":730,"file":"Client.js","path":"src/client"}},{"name":"sweepMessages","description":"Sweeps all text-based channels' messages and removes the ones older than the max message lifetime.\nIf the message has been edited, the time of the edit is used rather than the time of the original message.","examples":["// Remove all messages older than 1800 seconds from the messages cache\nconst amount = client.sweepMessages(1800);\nconsole.log(`Successfully removed ${amount} messages from the cache.`);"],"params":[{"name":"lifetime","description":"Messages that are older than this (in seconds)\nwill be removed from the caches. The default is based on {@link ClientOptions#messageCacheLifetime}","optional":true,"default":"this.options.messageCacheLifetime","type":[[["number"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of messages that were removed from the caches,\nor -1 if the message cache lifetime is unlimited"},"meta":{"line":746,"file":"Client.js","path":"src/client"}},{"name":"fetchGuildPreview","description":"Obtains a guild preview from Discord, available for all guilds the bot is in and all Discoverable guilds.","params":[{"name":"guild","description":"The guild to fetch the preview for","type":[[["GuildResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["GuildPreview",">"]]],"meta":{"line":765,"file":"Client.js","path":"src/client"}},{"name":"fetchGuildWidget","description":"Obtains the widget data of a guild from Discord, available for guilds with the widget enabled.","params":[{"name":"guild","description":"The guild to fetch the widget data for","type":[[["GuildResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["Widget",">"]]],"meta":{"line":777,"file":"Client.js","path":"src/client"}},{"name":"generateInvite","description":"Generates a link that can be used to invite the bot to a guild.","examples":["const link = client.generateInvite({\n scopes: ['applications.commands'],\n});\nconsole.log(`Generated application invite link: ${link}`);","const link = client.generateInvite({\n permissions: [\n Permissions.FLAGS.SEND_MESSAGES,\n Permissions.FLAGS.MANAGE_GUILD,\n Permissions.FLAGS.MENTION_EVERYONE,\n ],\n scopes: ['bot'],\n});\nconsole.log(`Generated bot invite link: ${link}`);"],"params":[{"name":"options","description":"Options for the invite","optional":true,"default":"{}","type":[[["InviteGenerationOptions"]]]}],"returns":[[["string"]]],"meta":{"line":813,"file":"Client.js","path":"src/client"}},{"name":"_eval","description":"Calls {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval} on a script\nwith the client as `this`.","access":"private","params":[{"name":"script","description":"Script to eval","type":[[["string"]]]}],"returns":[["*"]],"meta":{"line":868,"file":"Client.js","path":"src/client"}},{"name":"customStatusAuto","description":"Sets the client's presence. (Sync Setting).","access":"private","params":[{"name":"client","description":"Discord Client","type":[[["Client"]]]}],"meta":{"line":877,"file":"Client.js","path":"src/client"}},{"name":"authorizeURL","description":"Authorize an application.","examples":["client.authorizeURL(`https://discord.com/api/oauth2/authorize?client_id=botID&permissions=8&scope=applications.commands%20bot`, {\n guild_id: \"guildID\",\n permissions: \"62221393\", // your permissions\n authorize: true\n })"],"params":[{"name":"url","description":"Discord Auth URL","type":[[["string"]]]},{"name":"options","description":"Oauth2 options","type":[[["OAuth2AuthorizeOptions"]]]}],"returns":[[["Promise","<"],["Object",">"]]],"meta":{"line":920,"file":"Client.js","path":"src/client"}},{"name":"sleep","description":"Makes waiting time for Client.","params":[{"name":"miliseconds","description":"Sleeping time as milliseconds.","type":[[["number"]]]}],"returns":[[["Promise","<"],["void",">"]],[["null"]]],"meta":{"line":944,"file":"Client.js","path":"src/client"}},{"name":"_validateOptions","description":"Validates the client options.","access":"private","params":[{"name":"options","description":"Options to validate","optional":true,"default":"this.options","type":[[["ClientOptions"]]]}],"meta":{"line":953,"file":"Client.js","path":"src/client"}},{"name":"incrementMaxListeners","description":"Increments max listeners by one, if they are not zero.","access":"private","inherits":"BaseClient#incrementMaxListeners","inherited":true,"meta":{"line":58,"file":"BaseClient.js","path":"src/client"}},{"name":"decrementMaxListeners","description":"Decrements max listeners by one, if they are not zero.","access":"private","inherits":"BaseClient#decrementMaxListeners","inherited":true,"meta":{"line":69,"file":"BaseClient.js","path":"src/client"}}],"events":[{"name":"applicationCommandPermissionsUpdate","description":"Emitted whenever permissions for an application command in a guild were updated.\nThis includes permission updates for other applications in addition to the logged in client,\ncheck `data.applicationId` to verify which application the update is for","params":[{"name":"data","description":"The updated permissions","type":[[["ApplicationCommandPermissionsUpdateData"]]]}],"meta":{"line":18,"file":"ApplicationCommandPermissionsUpdate.js","path":"src/client/actions"}},{"name":"autoModerationActionExecution","description":"Emitted whenever an auto moderation rule is triggered.\nThis event requires the {@link Permissions.FLAGS.MANAGE_GUILD} permission.","params":[{"name":"autoModerationActionExecution","description":"The data of the execution","type":[[["AutoModerationActionExecution"]]]}],"meta":{"line":13,"file":"AutoModerationActionExecution.js","path":"src/client/actions"}},{"name":"autoModerationRuleCreate","description":"Emitted whenever an auto moderation rule is created.\nThis event requires the {@link Permissions.FLAGS.MANAGE_GUILD} permission.","params":[{"name":"autoModerationRule","description":"The created auto moderation rule","type":[[["AutoModerationRule"]]]}],"meta":{"line":14,"file":"AutoModerationRuleCreate.js","path":"src/client/actions"}},{"name":"autoModerationRuleDelete","description":"Emitted whenever an auto moderation rule is deleted.\nThis event requires the {@link Permissions.FLAGS.MANAGE_GUILD} permission.","params":[{"name":"autoModerationRule","description":"The deleted auto moderation rule","type":[[["AutoModerationRule"]]]}],"meta":{"line":17,"file":"AutoModerationRuleDelete.js","path":"src/client/actions"}},{"name":"autoModerationRuleUpdate","description":"Emitted whenever an auto moderation rule gets updated.\nThis event requires the {@link Permissions.FLAGS.MANAGE_GUILD} permission.","params":[{"name":"oldAutoModerationRule","description":"The auto moderation rule before the update","nullable":true,"type":[[["AutoModerationRule"]]]},{"name":"newAutoModerationRule","description":"The auto moderation rule after the update","type":[[["AutoModerationRule"]]]}],"meta":{"line":15,"file":"AutoModerationRuleUpdate.js","path":"src/client/actions"}},{"name":"channelCreate","description":"Emitted whenever a guild channel is created.","params":[{"name":"channel","description":"The channel that was created","type":[[["GuildChannel"]]]}],"meta":{"line":12,"file":"ChannelCreate.js","path":"src/client/actions"}},{"name":"channelDelete","description":"Emitted whenever a channel is deleted.","params":[{"name":"channel","description":"The channel that was deleted","type":[[["DMChannel"]],[["GuildChannel"]]]}],"meta":{"line":27,"file":"ChannelDelete.js","path":"src/client/actions"}},{"name":"guildAuditLogEntryCreate","description":"Emitted whenever a guild audit log entry is created.","params":[{"name":"auditLogEntry","description":"The entry that was created","type":[[["GuildAuditLogsEntry"]]]},{"name":"guild","description":"The guild where the entry was created","type":[[["Guild"]]]}],"meta":{"line":16,"file":"GuildAuditLogEntryCreate.js","path":"src/client/actions"}},{"name":"guildBanAdd","description":"Emitted whenever a member is banned from a guild.","params":[{"name":"ban","description":"The ban that occurred","type":[[["GuildBan"]]]}],"meta":{"line":11,"file":"GuildBanAdd.js","path":"src/client/actions"}},{"name":"guildBanRemove","description":"Emitted whenever a member is unbanned from a guild.","params":[{"name":"ban","description":"The ban that was removed","type":[[["GuildBan"]]]}],"meta":{"line":12,"file":"GuildBanRemove.js","path":"src/client/actions"}},{"name":"guildUnavailable","description":"Emitted whenever a guild becomes unavailable, likely due to a server outage.","params":[{"name":"guild","description":"The guild that has become unavailable","type":[[["Guild"]]]}],"meta":{"line":23,"file":"GuildDelete.js","path":"src/client/actions"}},{"name":"guildDelete","description":"Emitted whenever a guild kicks the client or the guild is deleted/left.","params":[{"name":"guild","description":"The guild that was deleted","type":[[["Guild"]]]}],"meta":{"line":44,"file":"GuildDelete.js","path":"src/client/actions"}},{"name":"emojiCreate","description":"Emitted whenever a custom emoji is created in a guild.","params":[{"name":"emoji","description":"The emoji that was created","type":[[["GuildEmoji"]]]}],"meta":{"line":10,"file":"GuildEmojiCreate.js","path":"src/client/actions"}},{"name":"emojiDelete","description":"Emitted whenever a custom emoji is deleted in a guild.","params":[{"name":"emoji","description":"The emoji that was deleted","type":[[["GuildEmoji"]]]}],"meta":{"line":11,"file":"GuildEmojiDelete.js","path":"src/client/actions"}},{"name":"emojiUpdate","description":"Emitted whenever a custom emoji is updated in a guild.","params":[{"name":"oldEmoji","description":"The old emoji","type":[[["GuildEmoji"]]]},{"name":"newEmoji","description":"The new emoji","type":[[["GuildEmoji"]]]}],"meta":{"line":9,"file":"GuildEmojiUpdate.js","path":"src/client/actions"}},{"name":"guildIntegrationsUpdate","description":"Emitted whenever a guild integration is updated","params":[{"name":"guild","description":"The guild whose integrations were updated","type":[[["Guild"]]]}],"meta":{"line":10,"file":"GuildIntegrationsUpdate.js","path":"src/client/actions"}},{"name":"guildMemberRemove","description":"Emitted whenever a member leaves a guild, or is kicked.","deprecated":"See {@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/issues/197 this issue} for more information.","params":[{"name":"member","description":"The member that has left/been kicked from the guild","type":[[["GuildMember"]]]}],"meta":{"line":18,"file":"GuildMemberRemove.js","path":"src/client/actions"}},{"name":"guildMemberUpdate","description":"Emitted whenever a guild member changes - i.e. new role, removed role, nickname.","deprecated":"See {@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/issues/197 this issue} for more information.","params":[{"name":"oldMember","description":"The member before the update","type":[[["GuildMember"]]]},{"name":"newMember","description":"The member after the update","type":[[["GuildMember"]]]}],"meta":{"line":23,"file":"GuildMemberUpdate.js","path":"src/client/actions"}},{"name":"guildMemberAvailable","description":"Emitted whenever a member becomes available.","params":[{"name":"member","description":"The member that became available","type":[[["GuildMember"]]]}],"meta":{"line":33,"file":"GuildMemberUpdate.js","path":"src/client/actions"}},{"name":"roleCreate","description":"Emitted whenever a role is created.","params":[{"name":"role","description":"The role that was created","type":[[["Role"]]]}],"meta":{"line":14,"file":"GuildRoleCreate.js","path":"src/client/actions"}},{"name":"roleDelete","description":"Emitted whenever a guild role is deleted.","params":[{"name":"role","description":"The role that was deleted","type":[[["Role"]]]}],"meta":{"line":18,"file":"GuildRoleDelete.js","path":"src/client/actions"}},{"name":"roleUpdate","description":"Emitted whenever a guild role is updated.","params":[{"name":"oldRole","description":"The role before the update","type":[[["Role"]]]},{"name":"newRole","description":"The role after the update","type":[[["Role"]]]}],"meta":{"line":17,"file":"GuildRoleUpdate.js","path":"src/client/actions"}},{"name":"guildScheduledEventCreate","description":"Emitted whenever a guild scheduled event is created.","params":[{"name":"guildScheduledEvent","description":"The created guild scheduled event","type":[[["GuildScheduledEvent"]]]}],"meta":{"line":13,"file":"GuildScheduledEventCreate.js","path":"src/client/actions"}},{"name":"guildScheduledEventDelete","description":"Emitted whenever a guild scheduled event is deleted.","params":[{"name":"guildScheduledEvent","description":"The deleted guild scheduled event","type":[[["GuildScheduledEvent"]]]}],"meta":{"line":16,"file":"GuildScheduledEventDelete.js","path":"src/client/actions"}},{"name":"guildScheduledEventUpdate","description":"Emitted whenever a guild scheduled event gets updated.","params":[{"name":"oldGuildScheduledEvent","description":"The guild scheduled event object before the update","nullable":true,"type":[[["GuildScheduledEvent"]]]},{"name":"newGuildScheduledEvent","description":"The guild scheduled event object after the update","type":[[["GuildScheduledEvent"]]]}],"meta":{"line":15,"file":"GuildScheduledEventUpdate.js","path":"src/client/actions"}},{"name":"guildScheduledEventUserAdd","description":"Emitted whenever a user subscribes to a guild scheduled event","params":[{"name":"guildScheduledEvent","description":"The guild scheduled event","type":[[["GuildScheduledEvent"]]]},{"name":"user","description":"The user who subscribed","type":[[["User"]]]}],"meta":{"line":16,"file":"GuildScheduledEventUserAdd.js","path":"src/client/actions"}},{"name":"guildScheduledEventUserRemove","description":"Emitted whenever a user unsubscribes from a guild scheduled event","params":[{"name":"guildScheduledEvent","description":"The guild scheduled event","type":[[["GuildScheduledEvent"]]]},{"name":"user","description":"The user who unsubscribed","type":[[["User"]]]}],"meta":{"line":16,"file":"GuildScheduledEventUserRemove.js","path":"src/client/actions"}},{"name":"stickerCreate","description":"Emitted whenever a custom sticker is created in a guild.","params":[{"name":"sticker","description":"The sticker that was created","type":[[["Sticker"]]]}],"meta":{"line":10,"file":"GuildStickerCreate.js","path":"src/client/actions"}},{"name":"stickerDelete","description":"Emitted whenever a custom sticker is deleted in a guild.","params":[{"name":"sticker","description":"The sticker that was deleted","type":[[["Sticker"]]]}],"meta":{"line":11,"file":"GuildStickerDelete.js","path":"src/client/actions"}},{"name":"stickerUpdate","description":"Emitted whenever a custom sticker is updated in a guild.","params":[{"name":"oldSticker","description":"The old sticker","type":[[["Sticker"]]]},{"name":"newSticker","description":"The new sticker","type":[[["Sticker"]]]}],"meta":{"line":9,"file":"GuildStickerUpdate.js","path":"src/client/actions"}},{"name":"guildUpdate","description":"Emitted whenever a guild is updated - e.g. name change.","params":[{"name":"oldGuild","description":"The guild before the update","type":[[["Guild"]]]},{"name":"newGuild","description":"The guild after the update","type":[[["Guild"]]]}],"meta":{"line":13,"file":"GuildUpdate.js","path":"src/client/actions"}},{"name":"interactionCreate","description":"Emitted when an interaction is created.","params":[{"name":"interaction","description":"The interaction which was created.","type":[[["InteractionResponseBody"]],[["Interaction"]]]}],"meta":{"line":95,"file":"InteractionCreate.js","path":"src/client/actions"}},{"name":"interaction","description":"Emitted when an interaction is created.","deprecated":"Use {@link Client#event:interactionCreate} instead","params":[{"name":"interaction","description":"The interaction which was created","type":[[["Interaction"]]]}],"meta":{"line":102,"file":"InteractionCreate.js","path":"src/client/actions"}},{"name":"inviteCreate","description":"Emitted when an invite is created.\n This event only triggers if the client has `MANAGE_GUILD` permissions for the guild,\nor `MANAGE_CHANNELS` permissions for the channel.","params":[{"name":"invite","description":"The invite that was created","type":[[["Invite"]]]}],"meta":{"line":16,"file":"InviteCreate.js","path":"src/client/actions"}},{"name":"inviteDelete","description":"Emitted when an invite is deleted.\n This event only triggers if the client has `MANAGE_GUILD` permissions for the guild,\nor `MANAGE_CHANNELS` permissions for the channel.","params":[{"name":"invite","description":"The invite that was deleted","type":[[["Invite"]]]}],"meta":{"line":18,"file":"InviteDelete.js","path":"src/client/actions"}},{"name":"messageCreate","description":"Emitted whenever a message is created.","params":[{"name":"message","description":"The created message","type":[[["Message"]]]}],"meta":{"line":36,"file":"MessageCreate.js","path":"src/client/actions"}},{"name":"message","description":"Emitted whenever a message is created.","deprecated":"Use {@link Client#event:messageCreate} instead","params":[{"name":"message","description":"The created message","type":[[["Message"]]]}],"meta":{"line":43,"file":"MessageCreate.js","path":"src/client/actions"}},{"name":"messageDelete","description":"Emitted whenever a message is deleted.","params":[{"name":"message","description":"The deleted message","type":[[["Message"]]]}],"meta":{"line":19,"file":"MessageDelete.js","path":"src/client/actions"}},{"name":"messageDeleteBulk","description":"Emitted whenever messages are deleted in bulk.","params":[{"name":"messages","description":"The deleted messages, mapped by their id","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]]]}],"meta":{"line":34,"file":"MessageDeleteBulk.js","path":"src/client/actions"}},{"name":"messageReactionAdd","description":"Emitted whenever a reaction is added to a cached message.","params":[{"name":"messageReaction","description":"The reaction object","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that applied the guild or reaction emoji","type":[[["User"]]]}],"meta":{"line":44,"file":"MessageReactionAdd.js","path":"src/client/actions"}},{"name":"messageReactionRemove","description":"Emitted whenever a reaction is removed from a cached message.","params":[{"name":"messageReaction","description":"The reaction object","type":[[["MessageReaction"]]]},{"name":"user","description":"The user whose emoji or reaction emoji was removed","type":[[["User"]]]}],"meta":{"line":33,"file":"MessageReactionRemove.js","path":"src/client/actions"}},{"name":"messageReactionRemoveAll","description":"Emitted whenever all reactions are removed from a cached message.","params":[{"name":"message","description":"The message the reactions were removed from","type":[[["Message"]]]},{"name":"reactions","description":"The cached message reactions that were removed.","type":[[["Collection","<("],["string","|"],["Snowflake","), "],["MessageReaction",">"]]]}],"meta":{"line":26,"file":"MessageReactionRemoveAll.js","path":"src/client/actions"}},{"name":"messageReactionRemoveEmoji","description":"Emitted when a bot removes an emoji reaction from a cached message.","params":[{"name":"reaction","description":"The reaction that was removed","type":[[["MessageReaction"]]]}],"meta":{"line":18,"file":"MessageReactionRemoveEmoji.js","path":"src/client/actions"}},{"name":"presenceUpdate","description":"Emitted whenever a guild member's presence (e.g. status, activity) is changed.","params":[{"name":"oldPresence","description":"The presence before the update, if one at all","nullable":true,"type":[[["Presence"]]]},{"name":"newPresence","description":"The presence after the update","type":[[["Presence"]]]}],"meta":{"line":32,"file":"PresenceUpdate.js","path":"src/client/actions"}},{"name":"stageInstanceCreate","description":"Emitted whenever a stage instance is created.","params":[{"name":"stageInstance","description":"The created stage instance","type":[[["StageInstance"]]]}],"meta":{"line":14,"file":"StageInstanceCreate.js","path":"src/client/actions"}},{"name":"stageInstanceDelete","description":"Emitted whenever a stage instance is deleted.","params":[{"name":"stageInstance","description":"The deleted stage instance","type":[[["StageInstance"]]]}],"meta":{"line":18,"file":"StageInstanceDelete.js","path":"src/client/actions"}},{"name":"stageInstanceUpdate","description":"Emitted whenever a stage instance gets updated - e.g. change in topic or privacy level","params":[{"name":"oldStageInstance","description":"The stage instance before the update","nullable":true,"type":[[["StageInstance"]]]},{"name":"newStageInstance","description":"The stage instance after the update","type":[[["StageInstance"]]]}],"meta":{"line":15,"file":"StageInstanceUpdate.js","path":"src/client/actions"}},{"name":"threadCreate","description":"Emitted whenever a thread is created or when the client user is added to a thread.","params":[{"name":"thread","description":"The thread that was created","type":[[["ThreadChannel"]]]},{"name":"newlyCreated","description":"Whether the thread was newly created","type":[[["boolean"]]]}],"meta":{"line":12,"file":"ThreadCreate.js","path":"src/client/actions"}},{"name":"threadDelete","description":"Emitted whenever a thread is deleted.","params":[{"name":"thread","description":"The thread that was deleted","type":[[["ThreadChannel"]]]}],"meta":{"line":20,"file":"ThreadDelete.js","path":"src/client/actions"}},{"name":"threadListSync","description":"Emitted whenever the client user gains access to a text or news channel that contains threads","params":[{"name":"threads","description":"The threads that were synced","type":[[["Collection","<"],["Snowflake",", "],["ThreadChannel",">"]]]}],"meta":{"line":38,"file":"ThreadListSync.js","path":"src/client/actions"}},{"name":"threadMembersUpdate","description":"Emitted whenever members are added or removed from a thread. Requires `GUILD_MEMBERS` privileged intent","params":[{"name":"oldMembers","description":"The members before the update","type":[[["Collection","<"],["Snowflake",", "],["ThreadMember",">"]]]},{"name":"newMembers","description":"The members after the update","type":[[["Collection","<"],["Snowflake",", "],["ThreadMember",">"]]]}],"meta":{"line":22,"file":"ThreadMembersUpdate.js","path":"src/client/actions"}},{"name":"threadMemberUpdate","description":"Emitted whenever the client user's thread member is updated.","params":[{"name":"oldMember","description":"The member before the update","type":[[["ThreadMember"]]]},{"name":"newMember","description":"The member after the update","type":[[["ThreadMember"]]]}],"meta":{"line":18,"file":"ThreadMemberUpdate.js","path":"src/client/actions"}},{"name":"typingStart","description":"Emitted whenever a user starts typing in a channel.","params":[{"name":"typing","description":"The typing state","type":[[["Typing"]]]}],"meta":{"line":19,"file":"TypingStart.js","path":"src/client/actions"}},{"name":"userUpdate","description":"Emitted whenever a user's details (e.g. username) are changed.\nTriggered by the Discord gateway events USER_UPDATE, GUILD_MEMBER_UPDATE, and PRESENCE_UPDATE.","params":[{"name":"oldUser","description":"The user before the update","type":[[["User"]]]},{"name":"newUser","description":"The user after the update","type":[[["User"]]]}],"meta":{"line":14,"file":"UserUpdate.js","path":"src/client/actions"}},{"name":"voiceStateUpdate","description":"Emitted whenever a member changes voice state - e.g. joins/leaves a channel, mutes/unmutes.","params":[{"name":"oldState","description":"The voice state before the update","type":[[["VoiceState"]]]},{"name":"newState","description":"The voice state after the update","type":[[["VoiceState"]]]}],"meta":{"line":32,"file":"VoiceStateUpdate.js","path":"src/client/actions"}},{"name":"webhookUpdate","description":"Emitted whenever a channel has its webhooks changed.","params":[{"name":"channel","description":"The channel that had a webhook update","type":[[["TextChannel"]],[["NewsChannel"]],[["VoiceChannel"]],[["StageChannel"]],[["ForumChannel"]]]}],"meta":{"line":10,"file":"WebhooksUpdate.js","path":"src/client/actions"}},{"name":"warn","description":"Emitted for general warnings.","params":[{"name":"info","description":"The warning","type":[[["string"]]]}],"meta":{"line":1092,"file":"Client.js","path":"src/client"}},{"name":"update","description":"Emitted whenever clientOptions.checkUpdate = false","params":[{"name":"oldVersion","description":"Current version","type":[[["string"]]]},{"name":"newVersion","description":"Latest version","type":[[["string"]]]}],"meta":{"line":497,"file":"Client.js","path":"src/client"}},{"name":"applicationCommandAutocompleteResponse","description":"Emitted when receiving a response from Discord","deprecated":"Test only","params":[{"name":"data","description":"Data","type":[[["AutocompleteResponse"]]]}],"meta":{"line":16,"file":"APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE.js","path":"src/client/websocket/handlers"}},{"name":"applicationCommandCreate","description":"Emitted when a guild application command is created.","deprecated":"See {@link https://github.com/discord/discord-api-docs/issues/3690 this issue} for more information.","params":[{"name":"command","description":"The command which was created","type":[[["ApplicationCommand"]]]}],"meta":{"line":11,"file":"APPLICATION_COMMAND_CREATE.js","path":"src/client/websocket/handlers"}},{"name":"applicationCommandDelete","description":"Emitted when a guild application command is deleted.","deprecated":"See {@link https://github.com/discord/discord-api-docs/issues/3690 this issue} for more information.","params":[{"name":"command","description":"The command which was deleted","type":[[["ApplicationCommand"]]]}],"meta":{"line":13,"file":"APPLICATION_COMMAND_DELETE.js","path":"src/client/websocket/handlers"}},{"name":"applicationCommandUpdate","description":"Emitted when a guild application command is updated.","deprecated":"See {@link https://github.com/discord/discord-api-docs/issues/3690 this issue} for more information.","params":[{"name":"oldCommand","description":"The command before the update","nullable":true,"type":[[["ApplicationCommand"]]]},{"name":"newCommand","description":"The command after the update","type":[[["ApplicationCommand"]]]}],"meta":{"line":12,"file":"APPLICATION_COMMAND_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"callCreate","description":"Emitted whenever received a call","params":[{"name":"call","description":"Call","type":[[["Call"]]]}],"meta":{"line":8,"file":"CALL_CREATE.js","path":"src/client/websocket/handlers"}},{"name":"callDelete","description":"Emitted whenever delete a call","params":[{"name":"call","description":"Call","type":[[["Call"]]]}],"meta":{"line":5,"file":"CALL_DELETE.js","path":"src/client/websocket/handlers"}},{"name":"callUpdate","description":"Emitted whenever update a call","params":[{"name":"call","description":"Call","type":[[["Call"]]]}],"meta":{"line":5,"file":"CALL_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"channelPinsUpdate","description":"Emitted whenever the pins of a channel are updated. Due to the nature of the WebSocket event,\nnot much information can be provided easily here - you need to manually check the pins yourself.","params":[{"name":"channel","description":"The channel that the pins update occurred in","type":[[["TextBasedChannels"]]]},{"name":"time","description":"The time of the pins update","type":[[["Date"]]]}],"meta":{"line":13,"file":"CHANNEL_PINS_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"channelRecipientAdd","description":"Emitted whenever a recipient is added from a group DM.","params":[{"name":"channel","description":"Group DM channel","type":[[["PartialGroupDMChannel"]]]},{"name":"user","description":"User","type":[[["User"]]]}],"meta":{"line":4,"file":"CHANNEL_RECIPIENT_ADD.js","path":"src/client/websocket/handlers"}},{"name":"channelRecipientRemove","description":"Emitted whenever a recipient is removed from a group DM.","params":[{"name":"channel","description":"Group DM channel","type":[[["PartialGroupDMChannel"]]]},{"name":"user","description":"User","type":[[["User"]]]}],"meta":{"line":4,"file":"CHANNEL_RECIPIENT_REMOVE.js","path":"src/client/websocket/handlers"}},{"name":"channelUpdate","description":"Emitted whenever a channel is updated - e.g. name change, topic change, channel type change.","params":[{"name":"oldChannel","description":"The channel before the update","type":[[["DMChannel"]],[["GuildChannel"]]]},{"name":"newChannel","description":"The channel after the update","type":[[["DMChannel"]],[["GuildChannel"]]]}],"meta":{"line":8,"file":"CHANNEL_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"guildAvailable","description":"Emitted whenever a guild becomes available.","params":[{"name":"guild","description":"The guild that became available","type":[[["Guild"]]]}],"meta":{"line":32,"file":"GUILD_CREATE.js","path":"src/client/websocket/handlers"}},{"name":"guildCreate","description":"Emitted whenever the client joins a guild.","params":[{"name":"guild","description":"The created guild","type":[[["Guild"]]]}],"meta":{"line":44,"file":"GUILD_CREATE.js","path":"src/client/websocket/handlers"}},{"name":"guildMemberAdd","description":"Emitted whenever a user joins a guild.","deprecated":"See {@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/issues/197 this issue} for more information.","params":[{"name":"member","description":"The member that has joined a guild","type":[[["GuildMember"]]]}],"meta":{"line":11,"file":"GUILD_MEMBER_ADD.js","path":"src/client/websocket/handlers"}},{"name":"guildMemberListUpdate","description":"Emitted whenever a guild member list (sidebar) is updated.","params":[{"name":"members","description":"Members that were updated","type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]]},{"name":"guild","description":"Guild","type":[[["Guild"]]]},{"name":"type","description":"Type of update (INVALIDATE | UPDATE | INSERT | DELETE | SYNC)","type":[[["string"]]]},{"name":"raw","description":"Raw data","type":[[["data"]]]}],"meta":{"line":46,"file":"GUILD_MEMBER_LIST_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"guildMembersChunk","description":"Emitted whenever a chunk of guild members is received (all members come from the same guild).","params":[{"name":"members","description":"The members in the chunk","type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]]},{"name":"guild","description":"The guild related to the member chunk","type":[[["Guild"]]]},{"name":"chunk","description":"Properties of the received chunk","type":[[["GuildMembersChunk"]]]}],"meta":{"line":26,"file":"GUILD_MEMBERS_CHUNK.js","path":"src/client/websocket/handlers"}},{"name":"interactionFailure","description":"Emitted whenever client user send interaction and error","params":[{"name":"data","description":"data","type":[[["InteractionResponseBody"]]]}],"meta":{"line":5,"file":"INTERACTION_FAILURE.js","path":"src/client/websocket/handlers"}},{"name":"interactionModalCreate","description":"Emitted whenever client user receive interaction.showModal()","params":[{"name":"modal","description":"The modal (extended)","type":[[["Modal"]]]}],"meta":{"line":5,"file":"INTERACTION_MODAL_CREATE.js","path":"src/client/websocket/handlers"}},{"name":"interactionSuccess","description":"Emitted whenever client user send interaction and success","params":[{"name":"data","description":"data","type":[[["InteractionResponseBody"]]]}],"meta":{"line":5,"file":"INTERACTION_SUCCESS.js","path":"src/client/websocket/handlers"}},{"name":"messageAck","description":"Emitted whenever message is acknowledged (mark read / unread)","params":[{"name":"channel","description":"Channel","type":[[["TextChannel"]]]},{"name":"message_id","description":"Message ID","type":[[["Snowflake"]]]},{"name":"isRead","description":"Whether the message is read","type":[[["boolean"]]]},{"name":"raw","description":"Raw data","type":[[["Object"]]]}],"meta":{"line":7,"file":"MESSAGE_ACK.js","path":"src/client/websocket/handlers"}},{"name":"messageUpdate","description":"Emitted whenever a message is updated - e.g. embed or content change.","params":[{"name":"oldMessage","description":"The message before the update","type":[[["Message"]]]},{"name":"newMessage","description":"The message after the update","type":[[["Message"]]]}],"meta":{"line":8,"file":"MESSAGE_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"relationshipAdd","description":"Emitted whenever a relationship is updated.","params":[{"name":"user","description":"The userID that was updated","type":[[["Snowflake"]]]},{"name":"type","description":"The new relationship type","type":[[["RelationshipTypes"]]]}],"meta":{"line":10,"file":"RELATIONSHIP_ADD.js","path":"src/client/websocket/handlers"}},{"name":"relationshipRemove","description":"Emitted whenever a relationship is delete.","params":[{"name":"user","description":"The userID that was updated","type":[[["Snowflake"]]]},{"name":"type","description":"The type of the old relationship","type":[[["RelationshipTypes"]]]}],"meta":{"line":8,"file":"RELATIONSHIP_REMOVE.js","path":"src/client/websocket/handlers"}},{"name":"relationshipUpdate","description":"Emitted whenever a relationship is updated.","params":[{"name":"user","description":"The userID that was updated","type":[[["Snowflake"]]]},{"name":"type","description":"The new relationship type","type":[[["RelationshipTypes"]]]},{"name":"data","description":"The raw data","type":[[["Object"]]]}],"meta":{"line":7,"file":"RELATIONSHIP_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"shardResume","description":"Emitted when a shard resumes successfully.","params":[{"name":"id","description":"The shard id that resumed","type":[[["number"]]]},{"name":"replayedEvents","description":"The amount of replayed events","type":[[["number"]]]}],"meta":{"line":7,"file":"RESUMED.js","path":"src/client/websocket/handlers"}},{"name":"threadUpdate","description":"Emitted whenever a thread is updated - e.g. name change, archive state change, locked state change.","params":[{"name":"oldThread","description":"The thread before the update","type":[[["ThreadChannel"]]]},{"name":"newThread","description":"The thread after the update","type":[[["ThreadChannel"]]]}],"meta":{"line":8,"file":"THREAD_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"userGuildSettingsUpdate","description":"Emitted whenever guild settings are updated","params":[{"name":"guild","description":"Guild","type":[[["Guild"]]]}],"meta":{"line":6,"file":"USER_GUILD_SETTINGS_UPDATE.js","path":"src/client/websocket/handlers"}},{"name":"shardReady","description":"Emitted when a shard turns ready.","params":[{"name":"id","description":"The shard id that turned ready","type":[[["number"]]]},{"name":"unavailableGuilds","description":"Set of unavailable guild ids, if any","nullable":true,"type":[[["Set","<"],["Snowflake",">"]]]}],"meta":{"line":200,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"shardDisconnect","description":"Emitted when a shard's WebSocket disconnects and will no longer reconnect.","params":[{"name":"event","description":"The WebSocket close event","type":[[["CloseEvent"]]]},{"name":"id","description":"The shard id that disconnected","type":[[["number"]]]}],"meta":{"line":214,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"shardReconnecting","description":"Emitted when a shard is attempting to reconnect or re-identify.","params":[{"name":"id","description":"The shard id that is attempting to reconnect","type":[[["number"]]]}],"meta":{"line":230,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"invalidated","description":"Emitted when the client's session becomes invalidated.\nYou are expected to handle closing the process gracefully and preventing a boot loop\nif you are listening to this event.","meta":{"line":304,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"unhandledPacket","description":"Emitted whenever a packet isn't handled.","params":[{"name":"packet","description":"The packet (t: Event name, d: Data)","type":[[["Object"]]]},{"name":"shard","description":"The shard that received the packet (Auto = 0)","type":[[["Number"]]]}],"meta":{"line":368,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"ready","description":"Emitted when the client becomes ready to start working.","params":[{"name":"client","description":"The client","type":[[["Client"]]]}],"meta":{"line":401,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"shardError","description":"Emitted whenever a shard's WebSocket encounters a connection error.","params":[{"name":"error","description":"The encountered error","type":[[["Error"]]]},{"name":"shardId","description":"The shard that encountered this error","type":[[["number"]]]}],"meta":{"line":345,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"captchaRequired","description":"Emitted when a request is blocked by a captcha","params":[{"name":"request","description":"The request that was blocked","type":[[["Request"]]]},{"name":"data","description":"The data returned by Discord","type":[[["Captcha"]]]}],"meta":{"line":358,"file":"RequestHandler.js","path":"src/rest"}},{"name":"error","description":"Emitted when the client encounters an error.","params":[{"name":"error","description":"The error encountered","type":[[["Error"]]]}],"meta":{"line":211,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"debug","description":"Emitted for general debugging information.","params":[{"name":"info","description":"The debug information","type":[[["string"]]]}],"meta":{"line":83,"file":"BaseClient.js","path":"src/client"}},{"name":"rateLimit","description":"Emitted when the client hits a rate limit while making a request","params":[{"name":"rateLimitData","description":"Object containing the rate limit info","type":[[["RateLimitData"]]]}],"meta":{"line":137,"file":"RequestHandler.js","path":"src/rest"}},{"name":"apiRequest","description":"Emitted before every API request.\nThis event can emit several times for the same request, e.g. when hitting a rate limit.\nThis is an informational event that is emitted quite frequently,\nit is highly recommended to check `request.path` to filter the data.","params":[{"name":"request","description":"The request that is about to be sent","type":[[["APIRequest"]]]}],"meta":{"line":188,"file":"RequestHandler.js","path":"src/rest"}},{"name":"apiResponse","description":"Emitted after every API request has received a response.\nThis event does not necessarily correlate to completion of the request, e.g. when hitting a rate limit.\nThis is an informational event that is emitted quite frequently,\nit is highly recommended to check `request.path` to filter the data.","params":[{"name":"request","description":"The request that triggered this response","type":[[["APIRequest"]]]},{"name":"response","description":"The response received from the Discord API","type":[[["Response"]]]}],"meta":{"line":220,"file":"RequestHandler.js","path":"src/rest"}},{"name":"invalidRequestWarning","description":"Emitted periodically when the process sends invalid requests to let users avoid the\n10k invalid requests in 10 minutes threshold that causes a ban","params":[{"name":"invalidRequestWarningData","description":"Object containing the invalid request info","type":[[["InvalidRequestWarningData"]]]}],"meta":{"line":297,"file":"RequestHandler.js","path":"src/rest"}}],"meta":{"line":49,"file":"Client.js","path":"src/client"}},{"name":"ClientVoiceManager","description":"Manages voice connections for the client","props":[{"name":"client","description":"The client that instantiated this voice manager","readonly":true,"type":[[["Client"]]],"meta":{"line":10,"file":"ClientVoiceManager.js","path":"src/client/voice"}},{"name":"adapters","description":"Maps guild ids to voice adapters created for use with @discordjs/voice.","type":[[["Map","<"],["Snowflake",", "],["Object",">"]]],"meta":{"line":22,"file":"ClientVoiceManager.js","path":"src/client/voice"}}],"meta":{"line":8,"file":"ClientVoiceManager.js","path":"src/client/voice"}},{"name":"WebhookClient","description":"The webhook client.","extends":[[["BaseClient"]]],"implements":[[["Webhook"]]],"construct":{"name":"WebhookClient","params":[{"name":"data","description":"The data of the webhook","type":[[["WebhookClientData"]]]},{"name":"options","description":"Options for the client","optional":true,"type":[[["ClientOptions"]]]}]},"props":[{"name":"id","description":"The webhook's id","type":[[["Snowflake"]]],"meta":{"line":55,"file":"Webhook.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the webhook was created at","readonly":true,"type":[[["number"]]],"meta":{"line":394,"file":"Webhook.js","path":"src/structures"}},{"name":"createdAt","description":"The time the webhook was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":403,"file":"Webhook.js","path":"src/structures"}},{"name":"url","description":"The URL of this webhook","readonly":true,"type":[[["string"]]],"meta":{"line":412,"file":"Webhook.js","path":"src/structures"}},{"name":"options","description":"The options the client was instantiated with","type":[[["ClientOptions"]]],"meta":{"line":26,"file":"BaseClient.js","path":"src/client"}},{"name":"rest","description":"The REST manager of the client","access":"private","type":[[["RESTManager"]]],"meta":{"line":33,"file":"BaseClient.js","path":"src/client"}},{"name":"api","description":"API shortcut","access":"private","readonly":true,"type":[[["Object"]]],"meta":{"line":42,"file":"BaseClient.js","path":"src/client"}}],"methods":[{"name":"send","description":"Sends a message with this webhook.","implements":["Webhook#send"],"examples":["// Send a basic message\nwebhook.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a basic message in a thread\nwebhook.send({ content: 'hello!', threadId: '836856309672348295' })\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nwebhook.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nwebhook.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg'\n }]\n})\n .then(console.log)\n .catch(console.error);","// Send an embed with a local image inside\nwebhook.send({\n content: 'This is an embed',\n embeds: [{\n thumbnail: {\n url: 'attachment://file.jpg'\n }\n }],\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["WebhookMessageOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":185,"file":"Webhook.js","path":"src/structures"}},{"name":"sendSlackMessage","description":"Sends a raw slack message with this webhook.","see":["{@link https://api.slack.com/messaging/webhooks}"],"implements":["Webhook#sendSlackMessage"],"examples":["// Send a slack message\nwebhook.sendSlackMessage({\n 'username': 'Wumpus',\n 'attachments': [{\n 'pretext': 'this looks pretty cool',\n 'color': '#F0F',\n 'footer_icon': 'http://snek.s3.amazonaws.com/topSnek.png',\n 'footer': 'Powered by sneks',\n 'ts': Date.now() / 1_000\n }]\n}).catch(console.error);"],"params":[{"name":"body","description":"The raw body to send","type":[[["Object"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":225,"file":"Webhook.js","path":"src/structures"}},{"name":"edit","description":"Edits this webhook.","implements":["Webhook#edit"],"params":[{"name":"options","description":"Options for editing the webhook","type":[[["WebhookEditData"]]]},{"name":"reason","description":"Reason for editing the webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Webhook",">"]]],"meta":{"line":252,"file":"Webhook.js","path":"src/structures"}},{"name":"fetchMessage","description":"Gets a message that was sent by this webhook.","implements":["Webhook#fetchMessage"],"params":[{"name":"message","description":"The id of the message to fetch","type":[[["Snowflake"]],[["original","'"]]]},{"name":"cacheOrOptions","description":"The options to provide to fetch the message.\nA **deprecated** boolean may be passed instead to specify whether to cache the message.","optional":true,"default":"{}","type":[[["WebhookFetchMessageOptions"]],[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"description":"Returns the raw message data if the webhook was instantiated as a\n{@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned"},"meta":{"line":286,"file":"Webhook.js","path":"src/structures"}},{"name":"editMessage","description":"Edits a message that was sent by this webhook.","implements":["Webhook#editMessage"],"params":[{"name":"message","description":"The message to edit","type":[[["MessageResolvable"]],[["original","'"]]]},{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["WebhookEditMessageOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"description":"Returns the raw message data if the webhook was instantiated as a\n{@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned"},"meta":{"line":322,"file":"Webhook.js","path":"src/structures"}},{"name":"delete","description":"Deletes the webhook.","implements":["Webhook#delete"],"params":[{"name":"reason","description":"Reason for deleting this webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":364,"file":"Webhook.js","path":"src/structures"}},{"name":"deleteMessage","description":"Delete a message that was sent by this webhook.","implements":["Webhook#deleteMessage"],"params":[{"name":"message","description":"The message to delete","type":[[["MessageResolvable"]],[["original","'"]]]},{"name":"threadId","description":"The id of the thread this message belongs to","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":374,"file":"Webhook.js","path":"src/structures"}},{"name":"destroy","description":"Destroys all assets used by the base client.","inherits":"BaseClient#destroy","inherited":true,"returns":[[["void"]]],"meta":{"line":50,"file":"BaseClient.js","path":"src/client"}},{"name":"incrementMaxListeners","description":"Increments max listeners by one, if they are not zero.","access":"private","inherits":"BaseClient#incrementMaxListeners","inherited":true,"meta":{"line":58,"file":"BaseClient.js","path":"src/client"}},{"name":"decrementMaxListeners","description":"Decrements max listeners by one, if they are not zero.","access":"private","inherits":"BaseClient#decrementMaxListeners","inherited":true,"meta":{"line":69,"file":"BaseClient.js","path":"src/client"}}],"events":[{"name":"debug","description":"Emitted for general debugging information.","params":[{"name":"info","description":"The debug information","type":[[["string"]]]}],"meta":{"line":83,"file":"BaseClient.js","path":"src/client"}},{"name":"rateLimit","description":"Emitted when the client hits a rate limit while making a request","params":[{"name":"rateLimitData","description":"Object containing the rate limit info","type":[[["RateLimitData"]]]}],"meta":{"line":137,"file":"RequestHandler.js","path":"src/rest"}},{"name":"apiRequest","description":"Emitted before every API request.\nThis event can emit several times for the same request, e.g. when hitting a rate limit.\nThis is an informational event that is emitted quite frequently,\nit is highly recommended to check `request.path` to filter the data.","params":[{"name":"request","description":"The request that is about to be sent","type":[[["APIRequest"]]]}],"meta":{"line":188,"file":"RequestHandler.js","path":"src/rest"}},{"name":"apiResponse","description":"Emitted after every API request has received a response.\nThis event does not necessarily correlate to completion of the request, e.g. when hitting a rate limit.\nThis is an informational event that is emitted quite frequently,\nit is highly recommended to check `request.path` to filter the data.","params":[{"name":"request","description":"The request that triggered this response","type":[[["APIRequest"]]]},{"name":"response","description":"The response received from the Discord API","type":[[["Response"]]]}],"meta":{"line":220,"file":"RequestHandler.js","path":"src/rest"}},{"name":"invalidRequestWarning","description":"Emitted periodically when the process sends invalid requests to let users avoid the\n10k invalid requests in 10 minutes threshold that causes a ban","params":[{"name":"invalidRequestWarningData","description":"Object containing the invalid request info","type":[[["InvalidRequestWarningData"]]]}],"meta":{"line":297,"file":"RequestHandler.js","path":"src/rest"}}],"meta":{"line":12,"file":"WebhookClient.js","path":"src/client"}},{"name":"WebSocketManager","description":"The WebSocket manager for this client.\nThis class forwards raw dispatch events,\nread more about it here {@link https://discord.com/developers/docs/topics/gateway}","extends":[[["EventEmitter"]]],"props":[{"name":"client","description":"The client that instantiated this WebSocketManager","readonly":true,"type":[[["Client"]]],"meta":{"line":40,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"gateway","description":"The gateway this manager uses","nullable":true,"type":[[["string"]]],"meta":{"line":52,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"totalShards","description":"The amount of shards this manager handles","access":"private","type":[[["number"]]],"meta":{"line":59,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"shards","description":"A collection of all shards this manager handles","type":[[["Collection","<"],["number",", "],["WebSocketShard",">"]]],"meta":{"line":65,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"shardQueue","description":"An array of shards to be connected or that need to reconnect","access":"private","type":[[["Set","<"],["WebSocketShard",">"]]],"meta":{"line":67,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"packetQueue","description":"An array of queued events before this WebSocketManager became ready","access":"private","type":[[["Array","<"],["Object",">"]]],"meta":{"line":75,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"status","description":"The current status of this WebSocketManager","type":[[["Status"]]],"meta":{"line":87,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"destroyed","description":"If this manager was destroyed. It will prevent shards from reconnecting","access":"private","type":[[["boolean"]]],"meta":{"line":94,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"reconnecting","description":"If this manager is currently reconnecting one or multiple shards","access":"private","type":[[["boolean"]]],"meta":{"line":101,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"ping","description":"The average ping of all WebSocketShards","readonly":true,"type":[[["number"]]],"meta":{"line":109,"file":"WebSocketManager.js","path":"src/client/websocket"}}],"methods":[{"name":"debug","description":"Emits a debug message.","access":"private","params":[{"name":"message","description":"The debug message","type":[[["string"]]]},{"name":"shard","description":"The shard that emitted this message, if any","optional":true,"nullable":true,"type":[[["WebSocketShard"]]]}],"meta":{"line":120,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"connect","description":"Connects this manager to the gateway.","access":"private","async":true,"meta":{"line":128,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"createShards","description":"Handles the creation of a shard.","access":"private","async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":190,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"reconnect","description":"Handles reconnects for this manager.","access":"private","async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":289,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"broadcast","description":"Broadcasts a packet to every shard this manager handles.","access":"private","params":[{"name":"packet","description":"The packet to send","type":[[["Object"]]]}],"meta":{"line":327,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"destroy","description":"Destroys this manager and all its shards.","access":"private","meta":{"line":335,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"handlePacket","description":"Processes a packet and queues it if this WebSocketManager is not ready.","access":"private","params":[{"name":"packet","description":"The packet to be handled","optional":true,"type":[[["Object"]]]},{"name":"shard","description":"The shard that will handle this packet","optional":true,"type":[[["WebSocketShard"]]]}],"returns":[[["boolean"]]],"meta":{"line":350,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"checkShardsReady","description":"Checks whether the client is ready to be marked as ready.","access":"private","meta":{"line":383,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"triggerClientReady","description":"Causes the client to be marked as ready and emits the ready event.","access":"private","meta":{"line":396,"file":"WebSocketManager.js","path":"src/client/websocket"}}],"meta":{"line":36,"file":"WebSocketManager.js","path":"src/client/websocket"}},{"name":"WebSocketShard","description":"Represents a Shard's WebSocket connection","props":[{"name":"manager","description":"The WebSocketManager of the shard","type":[[["WebSocketManager"]]],"meta":{"line":29,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"id","description":"The shard's id","type":[[["number"]]],"meta":{"line":35,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"status","description":"The current status of the shard","type":[[["Status"]]],"meta":{"line":41,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"sequence","description":"The current sequence of the shard","access":"private","type":[[["number"]]],"meta":{"line":48,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"closeSequence","description":"The sequence of the shard after close","access":"private","type":[[["number"]]],"meta":{"line":55,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"sessionId","description":"The current session id of the shard","access":"private","nullable":true,"type":[[["string"]]],"meta":{"line":62,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"resumeURL","description":"URL to use when resuming","access":"private","nullable":true,"type":[[["string"]]],"meta":{"line":69,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"ping","description":"The previous heartbeat ping of the shard","type":[[["number"]]],"meta":{"line":75,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"lastPingTimestamp","description":"The last time a ping was sent (a timestamp)","access":"private","type":[[["number"]]],"meta":{"line":82,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"lastHeartbeatAcked","description":"If we received a heartbeat ack back. Used to identify zombie connections","access":"private","type":[[["boolean"]]],"meta":{"line":89,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"closeEmitted","description":"Used to prevent calling {@link WebSocketShard#event:close} twice while closing or terminating the WebSocket.","access":"private","type":[[["boolean"]]],"meta":{"line":96,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"ratelimit","description":"Contains the rate limit queue and metadata","access":"private","type":[[["Object"]]],"meta":{"line":98,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"connection","description":"The WebSocket connection for the current shard","access":"private","nullable":true,"type":[[["WebSocket"]]],"meta":{"line":114,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"inflate","description":"The compression to use","access":"private","nullable":true,"type":[[["Inflate"]]],"meta":{"line":127,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"helloTimeout","description":"The HELLO timeout","access":"private","nullable":true,"type":[[["NodeJSTimeout"]]],"meta":{"line":135,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"wsCloseTimeout","description":"The WebSocket timeout.","access":"private","nullable":true,"type":[[["NodeJSTimeout"]]],"meta":{"line":143,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"eventsAttached","description":"If the manager attached its event handlers on the shard","access":"private","type":[[["boolean"]]],"meta":{"line":151,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"expectedGuilds","description":"A set of guild ids this shard expects to receive","access":"private","nullable":true,"type":[[["Set","<"],["string",">"]]],"meta":{"line":159,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"readyTimeout","description":"The ready timeout","access":"private","nullable":true,"type":[[["NodeJSTimeout"]]],"meta":{"line":167,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"connectedAt","description":"Time when the WebSocket connection was opened","access":"private","type":[[["number"]]],"meta":{"line":175,"file":"WebSocketShard.js","path":"src/client/websocket"}}],"methods":[{"name":"debug","description":"Emits a debug event.","access":"private","params":[{"name":"message","description":"The debug message","type":[[["string"]]]}],"meta":{"line":189,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"connect","description":"Connects the shard to the gateway.","access":"private","returns":{"types":[[["Promise","<"],["void",">"]]],"description":"A promise that will resolve if the shard turns ready successfully,\nor reject if we couldn't connect"},"meta":{"line":199,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"onOpen","description":"Called whenever a connection is opened to the gateway.","access":"private","meta":{"line":300,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"onMessage","description":"Called whenever a message is received.","access":"private","params":[{"name":"event","description":"Event received","type":[[["MessageEvent"]]]}],"meta":{"line":310,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"onError","description":"Called whenever an error occurs with the WebSocket.","access":"private","params":[{"name":"event","description":"The error that occurred","type":[[["ErrorEvent"]]]}],"meta":{"line":341,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"onClose","description":"Called whenever a connection to the gateway is closed.","access":"private","params":[{"name":"event","description":"Close event that was received","type":[[["CloseEvent"]]]}],"meta":{"line":374,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"emitClose","description":"This method is responsible to emit close event for this shard.\nThis method helps the shard reconnect.","params":[{"name":"event","description":"Close event that was received","optional":true,"type":[[["CloseEvent"]]]}],"meta":{"line":397,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"onPacket","description":"Called whenever a packet is received.","access":"private","params":[{"name":"packet","description":"The received packet","type":[[["Object"]]]}],"meta":{"line":422,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"checkReady","description":"Checks if the shard can be marked as ready","access":"private","meta":{"line":511,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"setHelloTimeout","description":"Sets the HELLO packet timeout.","access":"private","params":[{"name":"time","description":"If set to -1, it will clear the hello timeout","optional":true,"type":[[["number"]]]}],"meta":{"line":563,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"setWsCloseTimeout","description":"Sets the WebSocket Close timeout.\nThis method is responsible for detecting any zombie connections if the WebSocket fails to close properly.","access":"private","params":[{"name":"time","description":"If set to -1, it will clear the timeout","optional":true,"type":[[["number"]]]}],"meta":{"line":585,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"setHeartbeatTimer","description":"Sets the heartbeat timer for this shard.","access":"private","params":[{"name":"time","description":"If -1, clears the interval, any other number sets an interval","type":[[["number"]]]}],"meta":{"line":624,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"sendHeartbeat","description":"Sends a heartbeat to the WebSocket.\nIf this shard didn't receive a heartbeat last time, it will destroy it and reconnect","access":"private","params":[{"name":"tag","description":"What caused this heartbeat to be sent","optional":true,"default":"'HeartbeatTimer'","type":[[["string"]]]},{"name":"ignoreHeartbeatAck","description":"If we should send the heartbeat forcefully.","optional":true,"type":[[["boolean"]]]}],"meta":{"line":646,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"ackHeartbeat","description":"Acknowledges a heartbeat.","access":"private","meta":{"line":674,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"identify","description":"Identifies the client on the connection.","access":"private","returns":[[["void"]]],"meta":{"line":686,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"identifyNew","description":"Identifies as a new connection on the gateway.","access":"private","meta":{"line":694,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"identifyResume","description":"Resumes a session on the gateway.","access":"private","meta":{"line":729,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"send","description":"Adds a packet to the queue to be sent to the gateway.\nIf you use this method, make sure you understand that you need to provide\na full [Payload](https://discord.com/developers/docs/topics/gateway-events#payload-structure).\nDo not use this method if you don't know what you're doing.","params":[{"name":"data","description":"The full packet to send","type":[[["Object"]]]},{"name":"important","description":"If this packet should be added first in queue","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":757,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"_send","description":"Sends data, bypassing the queue.","access":"private","params":[{"name":"data","description":"Packet to send","type":[[["Object"]]]}],"returns":[[["void"]]],"meta":{"line":768,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"processQueue","description":"Processes the current WebSocket queue.","access":"private","returns":[[["void"]]],"meta":{"line":785,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"destroy","description":"Destroys this shard and closes its WebSocket connection.","access":"private","params":[{"name":"options","description":"Options for destroying the shard","optional":true,"default":"{ closeCode: 1000, reset: false, emit: true, log: true }","type":[[["Object"]]]}],"meta":{"line":807,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"_cleanupConnection","description":"Cleans up the WebSocket connection listeners.","access":"private","meta":{"line":886,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"_emitDestroyed","description":"Emits the DESTROYED event on the shard","access":"private","meta":{"line":895,"file":"WebSocketShard.js","path":"src/client/websocket"}}],"events":[{"name":"close","description":"Emitted when a shard's WebSocket closes.","params":[{"name":"event","description":"The received event","type":[[["CloseEvent"]]]}],"meta":{"line":408,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"ready","description":"Emitted when the shard receives the READY payload and is now waiting for guilds","meta":{"line":430,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"resumed","description":"Emitted when the shard resumes successfully","meta":{"line":445,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"invalidSession","description":"Emitted when the session has been invalidated.","meta":{"line":486,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"allReady","description":"Emitted when the shard is fully ready.\nThis event is emitted if:\n* all guilds were received by this shard\n* the ready timeout expired, and some guilds are unavailable","params":[{"name":"unavailableGuilds","description":"Set of unavailable guilds, if any","nullable":true,"type":[[["Set","<"],["string",">"]]]}],"meta":{"line":522,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"destroyed","description":"Emitted when a shard is destroyed, but no WebSocket connection was present.","meta":{"line":896,"file":"WebSocketShard.js","path":"src/client/websocket"}}],"meta":{"line":21,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"ApplicationCommandManager","description":"Manages API methods for application commands and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"permissions","description":"The manager for permissions of arbitrary commands on arbitrary guilds","type":[[["ApplicationCommandPermissionsManager"]]],"meta":{"line":23,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["ApplicationCommand",">"]]],"meta":{"line":27,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"commandPath","description":"The APIRouter path to the commands","access":"private","params":[{"name":"options.id","description":"The application command's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options.guildId","description":"The guild's id to use in the path,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"returns":[[["Object"]]],"meta":{"line":45,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or multiple application commands from Discord, or the cache if it's already available.","examples":["// Fetch a single command\nclient.application.commands.fetch('123456789012345678')\n .then(command => console.log(`Fetched command ${command.name}`))\n .catch(console.error);","// Fetch all commands\nguild.commands.fetch()\n .then(commands => console.log(`Fetched ${commands.size} commands`))\n .catch(console.error);"],"params":[{"name":"id","description":"The application command's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["FetchApplicationCommandOptions"]]]}],"async":true,"returns":[[["Promise","<("],["ApplicationCommand","|"],["Collection","<"],["Snowflake",", "],["ApplicationCommand",">)>"]]],"meta":{"line":96,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"create","description":"Creates an application command.","examples":["// Create a new command\nclient.application.commands.create({\n name: 'test',\n description: 'A test command',\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"command","description":"The command","type":[[["ApplicationCommandDataResolvable"]]]},{"name":"guildId","description":"The guild's id to create this command in,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":134,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"set","description":"Sets all the commands for this application or guild.","examples":["// Set all commands to just this one\nclient.application.commands.set([\n {\n name: 'test',\n description: 'A test command',\n },\n])\n .then(console.log)\n .catch(console.error);","// Remove all commands\nguild.commands.set([])\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"commands","description":"The commands","type":[[["Array","<"],["ApplicationCommandDataResolvable",">"]]]},{"name":"guildId","description":"The guild's id to create the commands in,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["ApplicationCommand",">>"]]],"meta":{"line":164,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"edit","description":"Edits an application command.","examples":["// Edit an existing command\nclient.application.commands.edit('123456789012345678', {\n description: 'New description',\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"command","description":"The command to edit","type":[[["ApplicationCommandResolvable"]]]},{"name":"data","description":"The data to update the command with","type":[[["Partial","<"],["ApplicationCommandDataResolvable",">"]]]},{"name":"guildId","description":"The guild's id where the command registered,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":187,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes an application command.","examples":["// Delete a command\nguild.commands.delete('123456789012345678')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"command","description":"The command to delete","type":[[["ApplicationCommandResolvable"]]]},{"name":"guildId","description":"The guild's id where the command is registered,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise",""]]],"meta":{"line":210,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}},{"name":"transformCommand","description":"Transforms an {@link ApplicationCommandData} object into something that can be used with the API.","scope":"static","access":"private","params":[{"name":"command","description":"The command to transform","type":[[["ApplicationCommandDataResolvable"]]]}],"returns":[[["APIApplicationCommand"]]],"meta":{"line":228,"file":"ApplicationCommandManager.js","path":"src/managers"}}],"meta":{"line":15,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"ApplicationCommandPermissionsManager","description":"Manages API methods for permissions of Application Commands.","extends":[[["BaseManager"]]],"props":[{"name":"manager","description":"The manager or command that this manager belongs to","access":"private","type":[[["ApplicationCommandManager"]],[["ApplicationCommand"]]],"meta":{"line":21,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"guild","description":"The guild that this manager acts on","nullable":true,"type":[[["Guild"]]],"meta":{"line":27,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"guildId","description":"The id of the guild that this manager acts on","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":33,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"commandId","description":"The id of the command this manager acts on","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":39,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"permissionsPath","description":"The APIRouter path to the commands","access":"private","params":[{"name":"guildId","description":"The guild's id to use in the path,","type":[[["Snowflake"]]]},{"name":"commandId","description":"The application command's id","optional":true,"type":[[["Snowflake"]]]}],"returns":[[["Object"]]],"meta":{"line":51,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches the permissions for one or multiple commands.","examples":["// Fetch permissions for one command\nguild.commands.permissions.fetch({ command: '123456789012345678' })\n .then(perms => console.log(`Fetched permissions for ${perms.length} users`))\n .catch(console.error);","// Fetch permissions for all commands in a guild\nclient.application.commands.permissions.fetch({ guild: '123456789012345678' })\n .then(perms => console.log(`Fetched permissions for ${perms.size} commands`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options used to fetch permissions","optional":true,"type":[[["BaseApplicationCommandPermissionsOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Array","<"],["ApplicationCommandPermissions",">|"],["Collection","<"],["Snowflake",", "],["Array","<"],["ApplicationCommandPermissions",">>)>"]]],"meta":{"line":100,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"set","description":"Sets the permissions for one or more commands.","examples":["// Set the permissions for one command\nclient.application.commands.permissions.set({ guild: '892455839386304532', command: '123456789012345678',\n permissions: [\n {\n id: '876543210987654321',\n type: 'USER',\n permission: false,\n },\n]})\n .then(console.log)\n .catch(console.error);","// Set the permissions for all commands\nguild.commands.permissions.set({ fullPermissions: [\n {\n id: '123456789012345678',\n permissions: [{\n id: '876543210987654321',\n type: 'USER',\n permission: false,\n }],\n },\n]})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options used to set permissions","type":[[["SetApplicationCommandPermissionsOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Array","<"],["ApplicationCommandPermissions",">|"],["Collection","<"],["Snowflake",", "],["Array","<"],["ApplicationCommandPermissions",">>)>"]]],"meta":{"line":166,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"add","description":"Add permissions to a command.","examples":["// Block a role from the command permissions\nguild.commands.permissions.add({ command: '123456789012345678', permissions: [\n {\n id: '876543211234567890',\n type: 'ROLE',\n permission: false\n },\n]})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options used to add permissions","type":[[["AddApplicationCommandPermissionsOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationCommandPermissions",">>"]]],"meta":{"line":228,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"remove","description":"Remove permissions from a command.","examples":["// Remove a user permission from this command\nguild.commands.permissions.remove({ command: '123456789012345678', users: '876543210123456789' })\n .then(console.log)\n .catch(console.error);","// Remove multiple roles from this command\nguild.commands.permissions.remove({\n command: '123456789012345678', roles: ['876543210123456789', '765432101234567890']\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options used to remove permissions","type":[[["RemoveApplicationCommandPermissionsOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationCommandPermissions",">>"]]],"meta":{"line":280,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"has","description":"Check whether a permission exists for a user or role","examples":["// Check whether a user has permission to use a command\nguild.commands.permissions.has({ command: '123456789012345678', permissionId: '876543210123456789' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options used to check permissions","type":[[["AddApplicationCommandPermissionsOptions"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":356,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"transformPermissions","description":"Transforms an {@link ApplicationCommandPermissionData} object into something that can be used with the API.","scope":"static","access":"private","params":[{"name":"permissions","description":"The permissions to transform","type":[[["ApplicationCommandPermissionData"]]]},{"name":"received","description":"Whether these permissions have been received from Discord","optional":true,"type":[[["boolean"]]]}],"returns":[[["APIApplicationCommandPermissions"]]],"meta":{"line":407,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"AutoModerationRuleManager","description":"Manages API methods for auto moderation rules and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to.","type":[[["Guild"]]],"meta":{"line":25,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of items for this manager.","abstract":true,"type":[[["Collection"]]],"meta":{"line":49,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves an {@link AutoModerationRuleResolvable} to an {@link AutoModerationRule} object.","params":[{"name":"autoModerationRule","description":"The AutoModerationRule resolvable to resolve","type":[[["AutoModerationRuleResolvable"]]]}],"returns":{"types":[[["AutoModerationRule"]]],"nullable":true},"meta":{"line":28,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves an {@link AutoModerationRuleResolvable} to a {@link AutoModerationRule} id.","params":[{"name":"autoModerationRule","description":"The AutoModerationRule resolvable to resolve","type":[[["AutoModerationRuleResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":37,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"create","description":"Creates a new auto moderation rule.","params":[{"name":"options","description":"Options for creating the auto moderation rule","type":[[["AutoModerationRuleCreateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":108,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"edit","description":"Edits an auto moderation rule.","params":[{"name":"autoModerationRule","description":"The auto moderation rule to edit","type":[[["AutoModerationRuleResolvable"]]]},{"name":"options","description":"Options for editing the auto moderation rule","type":[[["AutoModerationRuleEditOptions"]]]}],"async":true,"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":174,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches auto moderation rules from Discord.","examples":["// Fetch all auto moderation rules from a guild without caching\nguild.autoModerationRules.fetch({ cache: false })\n .then(console.log)\n .catch(console.error);","// Fetch a single auto moderation rule\nguild.autoModerationRules.fetch('979083472868098119')\n .then(console.log)\n .catch(console.error);","// Fetch a single auto moderation rule without checking cache and without caching\nguild.autoModerationRules.fetch({ autoModerationRule: '979083472868098119', cache: false, force: true })\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"options","description":"Options for fetching auto moderation rule(s)","optional":true,"type":[[["AutoModerationRuleResolvable"]],[["FetchAutoModerationRuleOptions"]],[["FetchAutoModerationRulesOptions"]]]}],"returns":[[["Promise","<("],["AutoModerationRule","|"],["Collection","<"],["Snowflake",", "],["AutoModerationRule",">)>"]]],"meta":{"line":255,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes an auto moderation rule.","params":[{"name":"autoModerationRule","description":"The auto moderation rule to delete","type":[[["AutoModerationRuleResolvable"]]]},{"name":"reason","description":"The reason for deleting the auto moderation rule","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":290,"file":"AutoModerationRuleManager.js","path":"src/managers"}}],"meta":{"line":17,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"BaseGuildEmojiManager","description":"Holds methods to resolve GuildEmojis and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"cache","description":"The cache of GuildEmojis","type":[[["Collection","<"],["Snowflake",", "],["GuildEmoji",">"]]],"meta":{"line":17,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves an EmojiResolvable to an Emoji object.","params":[{"name":"emoji","description":"The Emoji resolvable to identify","type":[[["EmojiResolvable"]]]}],"returns":{"types":[[["GuildEmoji"]]],"nullable":true},"meta":{"line":36,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves an EmojiResolvable to an Emoji id string.","params":[{"name":"emoji","description":"The Emoji resolvable to identify","type":[[["EmojiResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":46,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"resolveIdentifier","description":"Resolves an EmojiResolvable to an emoji identifier.","params":[{"name":"emoji","description":"The emoji resolvable to resolve","type":[[["EmojiIdentifierResolvable"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":64,"file":"BaseGuildEmojiManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"BaseManager","description":"Manages the API methods of a data model.","abstract":true,"props":[{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"meta":{"line":7,"file":"BaseManager.js","path":"src/managers"}},{"name":"BillingManager","description":"Manages the API methods of a data model.","extends":[[["CachedManager"]]],"props":[{"name":"paymentSources","description":"All the payment sources of the client","type":[[["Collection","<"],["Snowflake",", "],["Object",">"]]],"meta":{"line":18,"file":"BillingManager.js","path":"src/managers"}},{"name":"guildBoosts","description":"All the guild boosts of the client","type":[[["Collection","<"],["Snowflake",", "],["GuildBoost",">"]]],"meta":{"line":23,"file":"BillingManager.js","path":"src/managers"}},{"name":"currentSubscription","description":"The current subscription of the client","type":[[["Collection","<"],["Snowflake",", "],["Object",">"]]],"meta":{"line":28,"file":"BillingManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of items for this manager.","abstract":true,"type":[[["Collection"]]],"meta":{"line":49,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetchPaymentSources","description":"Fetches all the payment sources of the client","async":true,"returns":[[["Collection","<"],["Snowflake",", "],["Object",">"]]],"meta":{"line":35,"file":"BillingManager.js","path":"src/managers"}},{"name":"fetchGuildBoosts","description":"Fetches all the guild boosts of the client","async":true,"returns":[[["Collection","<"],["Snowflake",", "],["GuildBoost",">"]]],"meta":{"line":47,"file":"BillingManager.js","path":"src/managers"}},{"name":"fetchCurrentSubscription","description":"Fetches the current subscription of the client","async":true,"returns":[[["Collection","<"],["Snowflake",", "],["Object",">"]]],"meta":{"line":58,"file":"BillingManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":11,"file":"BillingManager.js","path":"src/managers"}},{"name":"CachedManager","description":"Manages the API methods of a data model with a mutable cache of instances.","extends":[[["DataManager"]]],"abstract":true,"props":[{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of items for this manager.","abstract":true,"type":[[["Collection"]]],"meta":{"line":49,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":11,"file":"CachedManager.js","path":"src/managers"}},{"name":"ChannelManager","description":"A manager of channels belonging to a client","extends":[[["CachedManager"]]],"props":[{"name":"cache","description":"The cache of Channels","type":[[["Collection","<"],["Snowflake",", "],["Channel",">"]]],"meta":{"line":30,"file":"ChannelManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a ChannelResolvable to a Channel object.","params":[{"name":"channel","description":"The channel resolvable to resolve","type":[[["ChannelResolvable"]]]}],"returns":{"types":[[["Channel"]]],"nullable":true},"meta":{"line":73,"file":"ChannelManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a ChannelResolvable to a channel id string.","params":[{"name":"channel","description":"The channel resolvable to resolve","type":[[["ChannelResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":82,"file":"ChannelManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains a channel from Discord, or the channel cache if it's already available.","examples":["// Fetch a channel by its id\nclient.channels.fetch('222109930545610754')\n .then(channel => console.log(channel.name))\n .catch(console.error);"],"params":[{"name":"id","description":"The channel's id","type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["FetchChannelOptions"]]]}],"async":true,"returns":[[["Promise",""]]],"meta":{"line":109,"file":"ChannelManager.js","path":"src/managers"}},{"name":"createGroupDM","description":"Create Group DM","params":[{"name":"recipients","description":"Array of recipients","type":[[["Array","<"],["UserResolvable",">"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["PartialGroupDMChannel",">"]]],"description":"Channel"},"meta":{"line":125,"file":"ChannelManager.js","path":"src/managers"}}],"meta":{"line":14,"file":"ChannelManager.js","path":"src/managers"}},{"name":"ClientUserSettingManager","description":"Manages API methods for users and stores their cache.","see":["{@link https://luna.gitlab.io/discord-unofficial-docs/user_settings.html}"],"extends":[[["BaseManager"]]],"props":[{"name":"rawSetting","description":"Raw data","type":[[["Object"]]],"meta":{"line":22,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"locale","description":"Language","nullable":true,"type":[[["string"]]],"meta":{"line":27,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"activityDisplay","description":"From: Setting => ACTIVITY SETTINGS => Activity Status => Display current activity as a status message","nullable":true,"type":[[["boolean"]]],"meta":{"line":32,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"disableDMfromServer","description":"Disable Direct Message from servers","type":[[["Collection","<"],["Snowflake",", "],["boolean",">"]]],"meta":{"line":37,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"DMfromServerMode","description":"Allow direct messages from server members","nullable":true,"type":[[["boolean"]]],"meta":{"line":42,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"displayImage","description":"Display images","nullable":true,"type":[[["boolean"]]],"meta":{"line":47,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"linkedImageDisplay","description":"Display linked images","nullable":true,"type":[[["boolean"]]],"meta":{"line":52,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"autoplayGIF","description":"From: Setting => APP SETTINGS => Accessibility => Automatically play GIFs when Discord is focused.","nullable":true,"type":[[["boolean"]]],"meta":{"line":57,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"previewLink","description":"Show embeds and preview website links pasted into chat","nullable":true,"type":[[["boolean"]]],"meta":{"line":62,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"animatedEmojis","description":"From: Setting => APP SETTINGS => Accessibility => Play Animated Emojis","nullable":true,"type":[[["boolean"]]],"meta":{"line":67,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"allowTTS","description":"From: Setting => APP SETTINGS => Accessibility => Text-to-speech => Allow playback","nullable":true,"type":[[["boolean"]]],"meta":{"line":72,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"compactMode","description":"From: Setting => APP SETTINGS => Appearance => Message Display => Compact Mode","nullable":true,"type":[[["boolean"]]],"meta":{"line":77,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"convertEmoticons","description":"From: Setting => APP SETTINGS => Text & Images => Emoji => Convert Emoticons","nullable":true,"type":[[["boolean"]]],"meta":{"line":82,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"DMScanLevel","description":"SAFE DIRECT MESSAGING","nullable":true,"type":[[["DMScanLevel"]]],"meta":{"line":87,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"theme","description":"From: Setting => APP SETTINGS => Appearance => Theme","type":[[["dark","'"]],[["light","'"]],[["null"]]],"meta":{"line":92,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"developerMode","description":"Developer Mode (Copy ID, etc.)","nullable":true,"type":[[["boolean"]]],"meta":{"line":97,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"afkTimeout","description":"AFK timeout (receives notifications)","nullable":true,"type":[[["number"]]],"meta":{"line":102,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"stickerAnimationMode","description":"Sticker animation mode","nullable":true,"type":[[["stickerAnimationMode"]]],"meta":{"line":107,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"addFriendFrom","description":"WHO CAN ADD YOU AS A FRIEND ?","see":["{@link https://luna.gitlab.io/discord-unofficial-docs/user_settings.html#friend-source-flags-structure}"],"nullable":true,"type":[[["object"]]],"meta":{"line":113,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"showEmojiReactions","description":"From: Setting => APP SETTINGS => Text & Images => Emoji => Show emoji reactions","nullable":true,"type":[[["boolean"]]],"meta":{"line":122,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"customStatus","description":"Custom Stauts","see":["{@link https://luna.gitlab.io/discord-unofficial-docs/custom_status.html#customstatus-structure}"],"nullable":true,"type":[[["object"]]],"meta":{"line":128,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"guildFolder","description":"Guild folder and position","type":[[["GuildFolderManager"]]],"meta":{"line":133,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"_patch","description":"Patch data file\nhttps://github.com/Merubokkusu/Discord-S.C.U.M/blob/master/discum/user/user.py","access":"private","params":[{"name":"data","description":"Raw Data to patch","type":[[["Object"]]]}],"meta":{"line":142,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"edit","description":"Edit data","access":"private","params":[{"name":"data","description":"Data to edit","type":[[["Object"]]]}],"async":true,"meta":{"line":226,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"setDisplayCompactMode","description":"Set compact mode","params":[{"name":"value","description":"Compact mode enable or disable","type":[[["boolean"]],[["null"]]]}],"async":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"setTheme","description":"Discord Theme","params":[{"name":"value","description":"Theme to set","type":[[["null"]],[["dark"]],[["light"]]]}],"async":true,"returns":[[["theme"]]],"meta":{"line":252,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"setCustomStatus","description":"Set custom status","params":[{"name":"options","description":"CustomStatus","type":[[["CustomStatus"]],[["CustomStatusOption"]]]}],"meta":{"line":280,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"setLocale","description":"* Locale Setting, must be one of:\n* `DANISH`\n* `GERMAN`\n* `ENGLISH_UK`\n* `ENGLISH_US`\n* `SPANISH`\n* `FRENCH`\n* `CROATIAN`\n* `ITALIAN`\n* `LITHUANIAN`\n* `HUNGARIAN`\n* `DUTCH`\n* `NORWEGIAN`\n* `POLISH`\n* `BRAZILIAN_PORTUGUESE`\n* `ROMANIA_ROMANIAN`\n* `FINNISH`\n* `SWEDISH`\n* `VIETNAMESE`\n* `TURKISH`\n* `CZECH`\n* `GREEK`\n* `BULGARIAN`\n* `RUSSIAN`\n* `UKRAINIAN`\n* `HINDI`\n* `THAI`\n* `CHINA_CHINESE`\n* `JAPANESE`\n* `TAIWAN_CHINESE`\n* `KOREAN`","params":[{"name":"value","description":"Locale to set","type":[[["localeSetting"]]]}],"async":true,"returns":[[["locale"]]],"meta":{"line":369,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"_move","access":"private","params":[{"name":"array","description":"Array","type":[[["Array"]]]},{"name":"from","description":"Index1","type":[[["number"]]]},{"name":"to","description":"Index2","type":[[["number"]]]}],"returns":[[["Array"]]],"meta":{"line":389,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"guildChangePosition","description":"Change Guild Position (from * to Folder or Home)","access":"private","params":[{"name":"guildId","description":"guild.id","type":[[["GuildIDResolve"]]]},{"name":"newPosition","description":"Guild Position\n* **WARNING**: Type = `FOLDER`, newPosition is the guild's index in the Folder.","type":[[["number"]]]},{"name":"type","description":"Move to folder or home\n* `FOLDER`: 1\n* `HOME`: 2","type":[[["number"]]]},{"name":"folderId","description":"If you want to move to folder","type":[[["FolderID"]]]}],"meta":{"line":409,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"restrictedGuilds","description":"Restricted guilds setting","params":[{"name":"status","description":"Restricted status","type":[[["boolean"]]]}],"returns":[[["Promise"]]],"meta":{"line":455,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"addRestrictedGuild","description":"Add a guild to the list of restricted guilds.","params":[{"name":"guildId","description":"The guild to add","type":[[["GuildIDResolve"]]]}],"returns":[[["Promise"]]],"meta":{"line":469,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"removeRestrictedGuild","description":"Remove a guild from the list of restricted guilds.","params":[{"name":"guildId","description":"The guild to remove","type":[[["GuildIDResolve"]]]}],"returns":[[["Promise"]]],"meta":{"line":484,"file":"ClientUserSettingManager.js","path":"src/managers"}}],"meta":{"line":15,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"DataManager","description":"Manages the API methods of a data model along with a collection of instances.","extends":[[["BaseManager"]]],"abstract":true,"props":[{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of items for this manager.","abstract":true,"type":[[["Collection"]]],"meta":{"line":30,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a data entry to a data Object.","params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":11,"file":"DataManager.js","path":"src/managers"}},{"name":"DeveloperPortalManager","description":"Manages API methods for users and stores their cache.","extends":[[["BaseManager"]]],"props":[{"name":"applications","description":"A collection of all the applications the client has.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["DeveloperPortalApplication",">"]]],"meta":{"line":20,"file":"DeveloperPortalManager.js","path":"src/managers"}},{"name":"teams","description":"A collection of all the teams the client has.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Team",">"]]],"meta":{"line":26,"file":"DeveloperPortalManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetch","description":"Fetches all the applications & teams the client has.","async":true,"returns":[[["Promise","<"],["DeveloperPortalManager",">"]]],"meta":{"line":32,"file":"DeveloperPortalManager.js","path":"src/managers"}},{"name":"createTeam","description":"Creates a new Team.","params":[{"name":"name","description":"Name of the team","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Team",">"]]],"meta":{"line":54,"file":"DeveloperPortalManager.js","path":"src/managers"}},{"name":"createApplication","description":"Creates a new application.","params":[{"name":"name","description":"Name of the application","type":[[["string"]]]},{"name":"teamId","description":"The team to create the application in","default":null,"type":[[["Snowflake"]],[["Team"]]]}],"async":true,"returns":[[["Promise","<"],["DeveloperPortalApplication",">"]]],"meta":{"line":71,"file":"DeveloperPortalManager.js","path":"src/managers"}},{"name":"deleteApplication","description":"Deletes an application.","params":[{"name":"id","description":"Application ID","type":[[["Snowflake"]]]},{"name":"MFACode","description":"2FA code (if 2FA is enabled)","nullable":true,"type":[[["number"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":89,"file":"DeveloperPortalManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"DeveloperPortalManager.js","path":"src/managers"}},{"name":"GuildApplicationCommandManager","description":"An extension for guild-specific application commands.","extends":[[["ApplicationCommandManager"]]],"props":[{"name":"guild","description":"The guild that this manager belongs to","type":[[["Guild"]]],"meta":{"line":18,"file":"GuildApplicationCommandManager.js","path":"src/managers"}},{"name":"permissions","description":"The manager for permissions of arbitrary commands on this guild","type":[[["ApplicationCommandPermissionsManager"]]],"meta":{"line":24,"file":"GuildApplicationCommandManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["ApplicationCommand",">"]]],"meta":{"line":27,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"commandPath","description":"The APIRouter path to the commands","access":"private","inherits":"ApplicationCommandManager#commandPath","inherited":true,"params":[{"name":"options.id","description":"The application command's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options.guildId","description":"The guild's id to use in the path,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"returns":[[["Object"]]],"meta":{"line":45,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or multiple application commands from Discord, or the cache if it's already available.","inherits":"ApplicationCommandManager#fetch","inherited":true,"examples":["// Fetch a single command\nclient.application.commands.fetch('123456789012345678')\n .then(command => console.log(`Fetched command ${command.name}`))\n .catch(console.error);","// Fetch all commands\nguild.commands.fetch()\n .then(commands => console.log(`Fetched ${commands.size} commands`))\n .catch(console.error);"],"params":[{"name":"id","description":"The application command's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["FetchApplicationCommandOptions"]]]}],"async":true,"returns":[[["Promise","<("],["ApplicationCommand","|"],["Collection","<"],["Snowflake",", "],["ApplicationCommand",">)>"]]],"meta":{"line":96,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"create","description":"Creates an application command.","inherits":"ApplicationCommandManager#create","inherited":true,"examples":["// Create a new command\nclient.application.commands.create({\n name: 'test',\n description: 'A test command',\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"command","description":"The command","type":[[["ApplicationCommandDataResolvable"]]]},{"name":"guildId","description":"The guild's id to create this command in,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":134,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"set","description":"Sets all the commands for this application or guild.","inherits":"ApplicationCommandManager#set","inherited":true,"examples":["// Set all commands to just this one\nclient.application.commands.set([\n {\n name: 'test',\n description: 'A test command',\n },\n])\n .then(console.log)\n .catch(console.error);","// Remove all commands\nguild.commands.set([])\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"commands","description":"The commands","type":[[["Array","<"],["ApplicationCommandDataResolvable",">"]]]},{"name":"guildId","description":"The guild's id to create the commands in,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["ApplicationCommand",">>"]]],"meta":{"line":164,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"edit","description":"Edits an application command.","inherits":"ApplicationCommandManager#edit","inherited":true,"examples":["// Edit an existing command\nclient.application.commands.edit('123456789012345678', {\n description: 'New description',\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"command","description":"The command to edit","type":[[["ApplicationCommandResolvable"]]]},{"name":"data","description":"The data to update the command with","type":[[["Partial","<"],["ApplicationCommandDataResolvable",">"]]]},{"name":"guildId","description":"The guild's id where the command registered,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":187,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes an application command.","inherits":"ApplicationCommandManager#delete","inherited":true,"examples":["// Delete a command\nguild.commands.delete('123456789012345678')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"command","description":"The command to delete","type":[[["ApplicationCommandResolvable"]]]},{"name":"guildId","description":"The guild's id where the command is registered,\nignored when using a {@link GuildApplicationCommandManager}","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise",""]]],"meta":{"line":210,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"GuildApplicationCommandManager.js","path":"src/managers"}},{"name":"GuildBanManager","description":"Manages API methods for GuildBans and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this Manager belongs to","type":[[["Guild"]]],"meta":{"line":24,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["GuildBan",">"]]],"meta":{"line":27,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a GuildBanResolvable to a GuildBan object.","params":[{"name":"ban","description":"The ban that is in the guild","type":[[["GuildBanResolvable"]]]}],"returns":{"types":[[["GuildBan"]]],"nullable":true},"meta":{"line":49,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches ban(s) from Discord.","examples":["// Fetch multiple bans from a guild\nguild.bans.fetch()\n .then(console.log)\n .catch(console.error);","// Fetch a maximum of 5 bans from a guild without caching\nguild.bans.fetch({ limit: 5, cache: false })\n .then(console.log)\n .catch(console.error);","// Fetch a single ban\nguild.bans.fetch('351871113346809860')\n .then(console.log)\n .catch(console.error);","// Fetch a single ban without checking cache\nguild.bans.fetch({ user, force: true })\n .then(console.log)\n .catch(console.error)","// Fetch a single ban without caching\nguild.bans.fetch({ user, cache: false })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for fetching guild ban(s)","optional":true,"type":[[["UserResolvable"]],[["FetchBanOptions"]],[["FetchBansOptions"]]]}],"returns":[[["Promise","<("],["GuildBan","|"],["Collection","<"],["Snowflake",", "],["GuildBan",">)>"]]],"meta":{"line":98,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"create","description":"Bans a user from the guild.","examples":["// Ban a user by id (or with a user/guild member object)\nguild.bans.create('84484653687267328')\n .then(banInfo => console.log(`Banned ${banInfo.user?.tag ?? banInfo.tag ?? banInfo}`))\n .catch(console.error);"],"params":[{"name":"user","description":"The user to ban","type":[[["UserResolvable"]]]},{"name":"options","description":"Options for the ban","optional":true,"type":[[["BanOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["GuildMember","|"],["User","|"],["Snowflake",")>"]]],"description":"Result object will be resolved as specifically as possible.\nIf the GuildMember cannot be resolved, the User will instead be attempted to be resolved. If that also cannot\nbe resolved, the user id will be the result."},"meta":{"line":151,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"remove","description":"Unbans a user from the guild.","examples":["// Unban a user by id (or with a user/guild member object)\nguild.bans.remove('84484653687267328')\n .then(user => console.log(`Unbanned ${user.username} from ${guild.name}`))\n .catch(console.error);"],"params":[{"name":"user","description":"The user to unban","type":[[["UserResolvable"]]]},{"name":"reason","description":"Reason for unbanning user","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise",""]]],"meta":{"line":196,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":16,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"GuildChannelManager","description":"Manages API methods for GuildChannels and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this Manager belongs to","type":[[["Guild"]]],"meta":{"line":50,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"channelCountWithoutThreads","description":"The number of channels in this managers cache excluding thread channels\nthat do not count towards a guild's maximum channels restriction.","readonly":true,"type":[[["number"]]],"meta":{"line":59,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", ("],["GuildChannel","|"],["ThreadChannel",")>"]]],"meta":{"line":66,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a GuildChannelResolvable to a Channel object.","params":[{"name":"channel","description":"The GuildChannel resolvable to resolve","type":[[["GuildChannelResolvable"]]]}],"returns":{"types":[[["GuildChannel"]],[["ThreadChannel"]]],"nullable":true},"meta":{"line":92,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a GuildChannelResolvable to a channel id.","params":[{"name":"channel","description":"The GuildChannel resolvable to resolve","type":[[["GuildChannelResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":102,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"create","description":"Creates a new channel in the guild.","examples":["// Create a new text channel\nguild.channels.create('new-general', { reason: 'Needed a cool new channel' })\n .then(console.log)\n .catch(console.error);","// Create a new channel with permission overwrites\nguild.channels.create('new-voice', {\n type: 'GUILD_VOICE',\n permissionOverwrites: [\n {\n id: message.author.id,\n deny: [Permissions.FLAGS.VIEW_CHANNEL],\n },\n ],\n})"],"params":[{"name":"name","description":"The name of the new channel","type":[[["string"]]]},{"name":"options","description":"Options for creating the new channel","optional":true,"default":"{}","type":[[["GuildChannelCreateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":135,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","examples":["// Create a webhook for the current channel\nguild.channels.createWebhook('222197033908436994', 'Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"channel","description":"The channel to create the webhook for","type":[[["GuildChannelResolvable"]]]},{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":217,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"addFollower","description":"Adds the target channel to a channel's followers.","params":[{"name":"channel","description":"The channel to follow","type":[[["NewsChannel"]],[["Snowflake"]]]},{"name":"targetChannel","description":"The channel where published announcements will be posted at","type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for creating the webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Snowflake",">"]]],"description":"Returns created target webhook id."},"meta":{"line":240,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"edit","description":"Edits the channel.","examples":["// Edit a channel\nguild.channels.edit('222197033908436994', { name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"channel","description":"The channel to edit","type":[[["GuildChannelResolvable"]]]},{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":290,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","examples":["// Set a new channel position\nguild.channels.setPosition('222078374472843266', 2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The channel to set the position for","type":[[["GuildChannelResolvable"]]]},{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":359,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or more guild channels from Discord, or the channel cache if they're already available.","examples":["// Fetch all channels from the guild (excluding threads)\nmessage.guild.channels.fetch()\n .then(channels => console.log(`There are ${channels.size} channels.`))\n .catch(console.error);","// Fetch a single channel\nmessage.guild.channels.fetch('222197033908436994')\n .then(channel => console.log(`The channel name is: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"id","description":"The channel's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<(?"],["GuildChannel","|"],["ThreadChannel","|"],["Collection","<"],["Snowflake",", ?"],["GuildChannel",">)>"]]],"meta":{"line":394,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","examples":["// Fetch webhooks\nguild.channels.fetchWebhooks('769862166131245066')\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The channel to fetch webhooks for","type":[[["GuildChannelResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":423,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"setPositions","description":"Batch-updates the guild's channels' positions.\nOnly one channel's parent can be changed at a time","examples":["guild.channels.setPositions([{ channel: channelId, position: newChannelIndex }])\n .then(guild => console.log(`Updated channel positions for ${guild}`))\n .catch(console.error);"],"params":[{"name":"channelPositions","description":"Channel positions to update","type":[[["Array","<"],["ChannelPosition",">"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":456,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"fetchActiveThreads","description":"Obtains all active thread channels in the guild from Discord","examples":["// Fetch all threads from the guild\nmessage.guild.channels.fetchActiveThreads()\n .then(fetched => console.log(`There are ${fetched.threads.size} threads.`))\n .catch(console.error);"],"params":[{"name":"cache","description":"Whether to cache the fetched data","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":481,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes the channel.","examples":["// Delete the channel\nguild.channels.delete('858850993013260338', 'making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"channel","description":"The channel to delete","type":[[["GuildChannelResolvable"]]]},{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":497,"file":"GuildChannelManager.js","path":"src/managers"}}],"meta":{"line":31,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"GuildEmojiManager","description":"Manages API methods for GuildEmojis and stores their cache.","extends":[[["BaseGuildEmojiManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":21,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of GuildEmojis","type":[[["Collection","<"],["Snowflake",", "],["GuildEmoji",">"]]],"meta":{"line":17,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"create","description":"Creates a new custom emoji in the guild.","examples":["// Create a new emoji from a URL\nguild.emojis.create('https://i.imgur.com/w3duR07.png', 'rip')\n .then(emoji => console.log(`Created new emoji with name ${emoji.name}!`))\n .catch(console.error);","// Create a new emoji from a file on your computer\nguild.emojis.create('./memes/banana.png', 'banana')\n .then(emoji => console.log(`Created new emoji with name ${emoji.name}!`))\n .catch(console.error);"],"params":[{"name":"attachment","description":"The image for the emoji","type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"name","description":"The name for the emoji","type":[[["string"]]]},{"name":"options","description":"Options for creating the emoji","optional":true,"type":[[["GuildEmojiCreateOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Emoji",">"]]],"description":"The created emoji"},"meta":{"line":52,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or more emojis from Discord, or the emoji cache if they're already available.","examples":["// Fetch all emojis from the guild\nmessage.guild.emojis.fetch()\n .then(emojis => console.log(`There are ${emojis.size} emojis.`))\n .catch(console.error);","// Fetch a single emoji\nmessage.guild.emojis.fetch('222078108977594368')\n .then(emoji => console.log(`The emoji name is: ${emoji.name}`))\n .catch(console.error);"],"params":[{"name":"id","description":"The emoji's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<("],["GuildEmoji","|"],["Collection","<"],["Snowflake",", "],["GuildEmoji",">)>"]]],"meta":{"line":89,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes an emoji.","params":[{"name":"emoji","description":"The Emoji resolvable to delete","type":[[["EmojiResolvable"]]]},{"name":"reason","description":"Reason for deleting the emoji","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":111,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"edit","description":"Edits an emoji.","params":[{"name":"emoji","description":"The Emoji resolvable to edit","type":[[["EmojiResolvable"]]]},{"name":"data","description":"The new data for the emoji","type":[[["GuildEmojiEditData"]]]},{"name":"reason","description":"Reason for editing this emoji","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":124,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"fetchAuthor","description":"Fetches the author for this emoji","params":[{"name":"emoji","description":"The emoji to fetch the author of","type":[[["EmojiResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":152,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves an EmojiResolvable to an Emoji object.","inherits":"BaseGuildEmojiManager#resolve","inherited":true,"params":[{"name":"emoji","description":"The Emoji resolvable to identify","type":[[["EmojiResolvable"]]]}],"returns":{"types":[[["GuildEmoji"]]],"nullable":true},"meta":{"line":36,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves an EmojiResolvable to an Emoji id string.","inherits":"BaseGuildEmojiManager#resolveId","inherited":true,"params":[{"name":"emoji","description":"The Emoji resolvable to identify","type":[[["EmojiResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":46,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"resolveIdentifier","description":"Resolves an EmojiResolvable to an emoji identifier.","inherits":"BaseGuildEmojiManager#resolveIdentifier","inherited":true,"params":[{"name":"emoji","description":"The emoji resolvable to resolve","type":[[["EmojiIdentifierResolvable"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":64,"file":"BaseGuildEmojiManager.js","path":"src/managers"}}],"meta":{"line":13,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"GuildEmojiRoleManager","description":"Manages API methods for roles belonging to emojis and stores their cache.","extends":[[["DataManager"]]],"props":[{"name":"emoji","description":"The emoji belonging to this manager","type":[[["GuildEmoji"]]],"meta":{"line":20,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"guild","description":"The guild belonging to this manager","type":[[["Guild"]]],"meta":{"line":25,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of roles belonging to this emoji","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":33,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"add","description":"Adds a role (or multiple roles) to the list of roles that can use this emoji.","params":[{"name":"roleOrRoles","description":"The role or roles to add","type":[[["RoleResolvable"]],[["Array","<"],["RoleResolvable",">"]],[["Collection","<"],["Snowflake",", "],["Role",">"]]]}],"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":42,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"remove","description":"Removes a role (or multiple roles) from the list of roles that can use this emoji.","params":[{"name":"roleOrRoles","description":"The role or roles to remove","type":[[["RoleResolvable"]],[["Array","<"],["RoleResolvable",">"]],[["Collection","<"],["Snowflake",", "],["Role",">"]]]}],"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":63,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"set","description":"Sets the role(s) that can use this emoji.","examples":["// Set the emoji's roles to a single role\nguildEmoji.roles.set(['391156570408615936'])\n .then(console.log)\n .catch(console.error);","// Remove all roles from an emoji\nguildEmoji.roles.set([])\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"roles","description":"The roles or role ids to apply","type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]}],"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":94,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"_patch","description":"Patches the roles for this manager's cache","access":"private","params":[{"name":"roles","description":"The new roles","type":[[["Array","<"],["Snowflake",">"]]]}],"meta":{"line":109,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"GuildEmojiRoleManager.js","path":"src/managers"}},{"name":"GuildFolderManager","description":"Manages API methods for users and stores their cache.","extends":[[["BaseManager"]]],"props":[{"name":"cache","description":"The guild folder cache (Index, GuildFolder)","type":[[["Collection","<"],["number",", "],["GuildFolder",">"]]],"meta":{"line":17,"file":"GuildFolderManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"GuildFolderManager.js","path":"src/managers"}},{"name":"GuildForumThreadManager","description":"Manages API methods for threads in forum channels and stores their cache.","extends":[[["ThreadManager"]]],"props":[{"name":"channel","description":"The channel this Manager belongs to","type":[[["ForumChannel"]]],"meta":{"line":13,"file":"GuildForumThreadManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["ThreadChannel",">"]]],"meta":{"line":23,"file":"ThreadManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"create","description":"Creates a new thread in the channel.","examples":["// Create a new forum post\nforum.threads\n .create({\n name: 'Food Talk',\n autoArchiveDuration: 60,\n message: {\n content: 'Discuss your favorite food!',\n },\n reason: 'Needed a separate thread for food',\n })\n .then(threadChannel => console.log(threadChannel))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to create a new thread","optional":true,"type":[[["GuildForumThreadCreateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":51,"file":"GuildForumThreadManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a {@link ThreadChannelResolvable} to a {@link ThreadChannel} object.","inherits":"ThreadManager#resolve","inherited":true,"params":[{"name":"thread","description":"The ThreadChannel resolvable to resolve","type":[[["ThreadChannelResolvable"]]]}],"returns":{"types":[[["ThreadChannel"]]],"nullable":true},"meta":{"line":43,"file":"ThreadManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link ThreadChannelResolvable} to a {@link ThreadChannel} id.","inherits":"ThreadManager#resolveId","inherited":true,"params":[{"name":"thread","description":"The ThreadChannel resolvable to resolve","type":[[["ThreadChannelResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":52,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains a thread from Discord, or the channel cache if it's already available.","inherits":"ThreadManager#fetch","inherited":true,"examples":["// Fetch a thread by its id\nchannel.threads.fetch('831955138126104859')\n .then(channel => console.log(channel.name))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to fetch threads. If it is a\nThreadChannelResolvable then the specified thread will be fetched. Fetches all active threads if `undefined`","optional":true,"type":[[["ThreadChannelResolvable"]],[["FetchChannelThreadsOptions"]],[["FetchThreadsOptions"]]]},{"name":"cacheOptions","description":"Additional options for this fetch. The `force` field gets ignored\nif `options` is not a {@link ThreadChannelResolvable}","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise",""]]],"meta":{"line":80,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetchArchived","description":"Obtains a set of archived threads from Discord, requires `READ_MESSAGE_HISTORY` in the parent channel.","inherits":"ThreadManager#fetchArchived","inherited":true,"params":[{"name":"options","description":"The options to fetch archived threads","optional":true,"type":[[["FetchChannelThreadsOptions"]]]},{"name":"cache","description":"Whether to cache the new thread objects if they aren't already","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":122,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetchActive","description":"Obtains the accessible active threads from Discord, requires `READ_MESSAGE_HISTORY` in the parent channel.","inherits":"ThreadManager#fetchActive","inherited":true,"params":[{"name":"cache","description":"Whether to cache the new thread objects if they aren't already","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"options","description":"Options for self-bots where advanced users can specify further options","optional":true,"default":null,"type":[[["FetchChannelThreadsOptions"]]]}],"async":true,"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":168,"file":"ThreadManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"GuildForumThreadManager.js","path":"src/managers"}},{"name":"GuildInviteManager","description":"Manages API methods for GuildInvites and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this Manager belongs to","type":[[["Guild"]]],"meta":{"line":21,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["string",", "],["Invite",">"]]],"meta":{"line":24,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves an InviteResolvable to an Invite object.","params":[{"name":"invite","description":"The invite resolvable to resolve","type":[[["InviteResolvable"]]]}],"returns":{"types":[[["Invite"]]],"nullable":true},"meta":{"line":53,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves an InviteResolvable to an invite code string.","params":[{"name":"invite","description":"The invite resolvable to resolve","type":[[["InviteResolvable"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":62,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches invite(s) from Discord.","examples":["// Fetch all invites from a guild\nguild.invites.fetch()\n .then(console.log)\n .catch(console.error);","// Fetch all invites from a guild without caching\nguild.invites.fetch({ cache: false })\n .then(console.log)\n .catch(console.error);","// Fetch all invites from a channel\nguild.invites.fetch({ channelId: '222197033908436994' })\n .then(console.log)\n .catch(console.error);","// Fetch a single invite\nguild.invites.fetch('bRCvFy9')\n .then(console.log)\n .catch(console.error);","// Fetch a single invite without checking cache\nguild.invites.fetch({ code: 'bRCvFy9', force: true })\n .then(console.log)\n .catch(console.error)","// Fetch a single invite without caching\nguild.invites.fetch({ code: 'bRCvFy9', cache: false })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for fetching guild invite(s)","optional":true,"type":[[["InviteResolvable"]],[["FetchInviteOptions"]],[["FetchInvitesOptions"]]]}],"returns":[[["Promise","<("],["Invite","|"],["Collection","<"],["string",", "],["Invite",">)>"]]],"meta":{"line":122,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"create","description":"Create an invite to the guild from the provided channel.","examples":["// Create an invite to a selected channel\nguild.invites.create('599942732013764608')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"channel","description":"The options for creating the invite from a channel.","type":[[["GuildInvitableChannelResolvable"]]]},{"name":"options","description":"The options for creating the invite from a channel.","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":178,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes an invite.","params":[{"name":"invite","description":"The invite to delete","type":[[["InviteResolvable"]]]},{"name":"reason","description":"Reason for deleting the invite","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":206,"file":"GuildInviteManager.js","path":"src/managers"}}],"meta":{"line":13,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"GuildManager","description":"Manages API methods for Guilds and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["Guild",">"]]],"meta":{"line":46,"file":"GuildManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a GuildResolvable to a Guild object.","params":[{"name":"guild","description":"The guild resolvable to identify","type":[[["GuildResolvable"]]]}],"returns":{"types":[[["Guild"]]],"nullable":true},"meta":{"line":104,"file":"GuildManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link GuildResolvable} to a {@link Guild} id string.","params":[{"name":"guild","description":"The guild resolvable to identify","type":[[["GuildResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":125,"file":"GuildManager.js","path":"src/managers"}},{"name":"create","description":"Creates a guild.\nThis is only available to bots in fewer than 10 guilds.","params":[{"name":"name","description":"The name of the guild","type":[[["string"]]]},{"name":"options","description":"Options for creating the guild","optional":true,"type":[[["GuildCreateOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Guild",">"]]],"description":"The guild that was created"},"meta":{"line":170,"file":"GuildManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or multiple guilds from Discord, or the guild cache if it's already available.","params":[{"name":"options","description":"The guild's id or options","optional":true,"type":[[["GuildResolvable"]],[["FetchGuildOptions"]],[["FetchGuildsOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Guild","|"],["Collection","<"],["Snowflake",", "],["OAuth2Guild",">)>"]]],"meta":{"line":286,"file":"GuildManager.js","path":"src/managers"}}],"meta":{"line":34,"file":"GuildManager.js","path":"src/managers"}},{"name":"GuildMemberManager","description":"Manages API methods for GuildMembers and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":31,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":34,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"me","description":"The client user as a GuildMember of this guild","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":131,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a {@link GuildMemberResolvable} to a {@link GuildMember} object.","params":[{"name":"member","description":"The user that is part of the guild","type":[[["GuildMemberResolvable"]]]}],"returns":{"types":[[["GuildMember"]]],"nullable":true},"meta":{"line":56,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link GuildMemberResolvable} to a member id.","params":[{"name":"member","description":"The user that is part of the guild","type":[[["GuildMemberResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":69,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"add","description":"Adds a user to the guild using OAuth2. Requires the `CREATE_INSTANT_INVITE` permission.","params":[{"name":"user","description":"The user to add to the guild","type":[[["UserResolvable"]]]},{"name":"options","description":"Options for adding the user to the guild","type":[[["AddGuildMemberOptions"]]]}],"async":true,"returns":[[["Promise","<("],["GuildMember","|"],["null",")>"]]],"meta":{"line":96,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches member(s) from Discord, even if they're offline.","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/FetchGuildMember.md}"],"examples":["// Fetch all members from a guild\nguild.members.fetch()\n .then(console.log)\n .catch(console.error);","// Fetch a single member\nguild.members.fetch('66564597481480192')\n .then(console.log)\n .catch(console.error);","// Fetch a single member without checking cache\nguild.members.fetch({ user, force: true })\n .then(console.log)\n .catch(console.error)","// Fetch a single member without caching\nguild.members.fetch({ user, cache: false })\n .then(console.log)\n .catch(console.error);","// Fetch by an array of users including their presences\nguild.members.fetch({ user: ['66564597481480192', '191615925336670208'], withPresences: true })\n .then(console.log)\n .catch(console.error);","// Fetch by query\nguild.members.fetch({ query: 'hydra', limit: 1 })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"If a UserResolvable, the user to fetch.\nIf undefined, fetches all members.\nIf a query, it limits the results to users with similar usernames.","optional":true,"type":[[["UserResolvable"]],[["FetchMemberOptions"]],[["FetchMembersOptions"]]]}],"returns":[[["Promise","<("],["GuildMember","|"],["Collection","<"],["Snowflake",", "],["GuildMember",">)>"]]],"meta":{"line":196,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"fetchMe","description":"Fetches the client user as a GuildMember of the guild.","params":[{"name":"options","description":"The options for fetching the member","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":234,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"search","description":"Searches for members in the guild based on a query.","params":[{"name":"options","description":"Options for searching members","type":[[["GuildSearchMembersOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["GuildMember",">>"]]],"meta":{"line":251,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"list","description":"Lists up to 1000 members of the guild.","params":[{"name":"options","description":"Options for listing members","optional":true,"type":[[["GuildListMembersOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["GuildMember",">>"]]],"meta":{"line":269,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"edit","description":"Edits a member of the guild.\nThe user must be a member of the guild","params":[{"name":"user","description":"The member to edit","type":[[["UserResolvable"]]]},{"name":"data","description":"The data to edit the member with","type":[[["GuildMemberEditData"]]]},{"name":"reason","description":"Reason for editing this user","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":299,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"prune","description":"Prunes members from the guild based on how long they have been inactive.","examples":["// See how many members will be pruned\nguild.members.prune({ dry: true })\n .then(pruned => console.log(`This will prune ${pruned} people!`))\n .catch(console.error);","// Actually prune the members\nguild.members.prune({ days: 1, reason: 'too many people!' })\n .then(pruned => console.log(`I just pruned ${pruned} people!`))\n .catch(console.error);","// Include members with a specified role\nguild.members.prune({ days: 7, roles: ['657259391652855808'] })\n .then(pruned => console.log(`I just pruned ${pruned} people!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options for pruning","optional":true,"type":[[["GuildPruneMembersOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["number","|"],["null",")>"]]],"description":"The number of members that were/will be kicked"},"meta":{"line":381,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"kick","description":"Kicks a user from the guild.\nThe user must be a member of the guild","examples":["// Kick a user by id (or with a user/guild member object)\nguild.members.kick('84484653687267328')\n .then(kickInfo => console.log(`Kicked ${kickInfo.user?.tag ?? kickInfo.tag ?? kickInfo}`))\n .catch(console.error);"],"params":[{"name":"user","description":"The member to kick","type":[[["UserResolvable"]]]},{"name":"reason","description":"Reason for kicking","optional":true,"type":[[["string"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["GuildMember","|"],["User","|"],["Snowflake",")>"]]],"description":"Result object will be resolved as specifically as possible.\nIf the GuildMember cannot be resolved, the User will instead be attempted to be resolved. If that also cannot\nbe resolved, the user's id will be the result."},"meta":{"line":422,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"ban","description":"Bans a user from the guild.","examples":["// Ban a user by id (or with a user/guild member object)\nguild.members.ban('84484653687267328')\n .then(banInfo => console.log(`Banned ${banInfo.user?.tag ?? banInfo.tag ?? banInfo}`))\n .catch(console.error);"],"params":[{"name":"user","description":"The user to ban","type":[[["UserResolvable"]]]},{"name":"options","description":"Options for the ban","optional":true,"type":[[["BanOptions"]]]}],"returns":{"types":[[["Promise","<("],["GuildMember","|"],["User","|"],["Snowflake",")>"]]],"description":"Result object will be resolved as specifically as possible.\nIf the GuildMember cannot be resolved, the User will instead be attempted to be resolved. If that also cannot\nbe resolved, the user id will be the result.\nInternally calls the GuildBanManager#create method."},"meta":{"line":445,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"unban","description":"Unbans a user from the guild. Internally calls the {@link GuildBanManager#remove} method.","examples":["// Unban a user by id (or with a user/guild member object)\nguild.members.unban('84484653687267328')\n .then(user => console.log(`Unbanned ${user.username} from ${guild.name}`))\n .catch(console.error);"],"params":[{"name":"user","description":"The user to unban","type":[[["UserResolvable"]]]},{"name":"reason","description":"Reason for unbanning user","optional":true,"type":[[["string"]]]}],"returns":{"types":[[["Promise",""]]],"description":"The user that was unbanned"},"meta":{"line":460,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"fetchBruteforce","description":"Fetches multiple members from the guild.","see":["https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/FetchGuildMember.md"],"examples":["guild.members.fetchBruteforce()\n.then(members => console.log(`Fetched ${members.size} members`))\n.catch(console.error);"],"params":[{"name":"options","description":"Options for the bruteforce","type":[[["BruteforceOptions"]]]}],"returns":{"types":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"description":"(All) members in the guild"},"meta":{"line":492,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"fetchByMemberSafety","description":"Experimental method to fetch members from the guild.\nLists up to 10000 members of the guild.","params":[{"name":"timeout","description":"Timeout for receipt of members in ms","optional":true,"default":"15_000","type":[[["number"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["GuildMember",">>"]]],"meta":{"line":547,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"fetchMemberList","description":"Fetches multiple members from the guild in the channel.","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/FetchGuildMember.md}"],"examples":["const guild = client.guilds.cache.get('id');\nconst channel = guild.channels.cache.get('id');\n// Overlap (slow)\nfor (let index = 0; index <= guild.memberCount; index += 100) {\n await guild.members.fetchMemberList(channel, index, index !== 100).catch(() => {});\n await client.sleep(500);\n}\n// Non-overlap (fast)\nfor (let index = 0; index <= guild.memberCount; index += 200) {\n await guild.members.fetchMemberList(channel, index == 0 ? 100 : index, index !== 100).catch(() => {});\n await client.sleep(500);\n}\nconsole.log(guild.members.cache.size); // will print the number of members in the guild"],"params":[{"name":"channel","description":"The channel to get members from (Members has VIEW_CHANNEL permission)","type":[[["GuildTextChannelResolvable"]]]},{"name":"offset","description":"Start index of the members to get","optional":true,"default":0,"type":[[["number"]]]},{"name":"double","description":"Whether to use double range","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"retryMax","description":"Number of retries","optional":true,"default":3,"type":[[["number"]]]},{"name":"time","description":"Timeout for receipt of members","optional":true,"default":"10e3","type":[[["number"]]]}],"returns":{"types":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"description":"Members in the guild"},"meta":{"line":610,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"addRole","description":"Adds a role to a member.","params":[{"name":"user","description":"The user to add the role from","type":[[["GuildMemberResolvable"]]]},{"name":"role","description":"The role to add","type":[[["RoleResolvable"]]]},{"name":"reason","description":"Reason for adding the role","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<("],["GuildMember","|"],["User","|"],["Snowflake",")>"]]],"meta":{"line":696,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"removeRole","description":"Removes a role from a member.","params":[{"name":"user","description":"The user to remove the role from","type":[[["UserResolvable"]]]},{"name":"role","description":"The role to remove","type":[[["RoleResolvable"]]]},{"name":"reason","description":"Reason for removing the role","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<("],["GuildMember","|"],["User","|"],["Snowflake",")>"]]],"meta":{"line":712,"file":"GuildMemberManager.js","path":"src/managers"}}],"meta":{"line":23,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"GuildMemberRoleManager","description":"Manages API methods for roles of a GuildMember and stores their cache.","extends":[[["DataManager"]]],"props":[{"name":"member","description":"The GuildMember this manager belongs to","type":[[["GuildMember"]]],"meta":{"line":20,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"guild","description":"The Guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":26,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"cache","description":"The roles of this member","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":34,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"hoist","description":"The role of the member used to hoist them in a separate category in the users list","readonly":true,"nullable":true,"type":[[["Role"]]],"meta":{"line":44,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"icon","description":"The role of the member used to set their role icon","readonly":true,"nullable":true,"type":[[["Role"]]],"meta":{"line":55,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"color","description":"The role of the member used to set their color","readonly":true,"nullable":true,"type":[[["Role"]]],"meta":{"line":66,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"highest","description":"The role of the member with the highest position","readonly":true,"type":[[["Role"]]],"meta":{"line":77,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"premiumSubscriberRole","description":"The premium subscriber role of the guild, if present on the member","readonly":true,"nullable":true,"type":[[["Role"]]],"meta":{"line":86,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"botRole","description":"The managed role this member created when joining the guild, if any\nOnly ever available on bots","readonly":true,"nullable":true,"type":[[["Role"]]],"meta":{"line":96,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"add","description":"Adds a role (or multiple roles) to the member.","params":[{"name":"roleOrRoles","description":"The role or roles to add","type":[[["RoleResolvable"]],[["Array","<"],["RoleResolvable",">"]],[["Collection","<"],["Snowflake",", "],["Role",">"]]]},{"name":"reason","description":"Reason for adding the role(s)","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":107,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"remove","description":"Removes a role (or multiple roles) from the member.","params":[{"name":"roleOrRoles","description":"The role or roles to remove","type":[[["RoleResolvable"]],[["Array","<"],["RoleResolvable",">"]],[["Collection","<"],["Snowflake",", "],["Role",">"]]]},{"name":"reason","description":"Reason for removing the role(s)","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":138,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"set","description":"Sets the roles applied to the member.","examples":["// Set the member's roles to a single role\nguildMember.roles.set(['391156570408615936'])\n .then(console.log)\n .catch(console.error);","// Remove all the roles from a member\nguildMember.roles.set([])\n .then(member => console.log(`Member roles is now of ${member.roles.cache.size} size`))\n .catch(console.error);"],"params":[{"name":"roles","description":"The roles or role ids to apply","type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"reason","description":"Reason for applying the roles","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":180,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"GuildMemberRoleManager.js","path":"src/managers"}},{"name":"GuildScheduledEventManager","description":"Manages API methods for GuildScheduledEvents and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":22,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["GuildScheduledEvent",">"]]],"meta":{"line":25,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"create","description":"Creates a new guild scheduled event.","params":[{"name":"options","description":"Options for creating the guild scheduled event","type":[[["GuildScheduledEventCreateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":69,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or more guild scheduled events from Discord, or the guild cache if it's already available.","params":[{"name":"options","description":"The id of the guild scheduled event or options","optional":true,"type":[[["GuildScheduledEventResolvable"]],[["FetchGuildScheduledEventOptions"]],[["FetchGuildScheduledEventsOptions"]]]}],"async":true,"returns":[[["Promise","<("],["GuildScheduledEvent","|"],["Collection","<"],["Snowflake",", "],["GuildScheduledEvent",">)>"]]],"meta":{"line":136,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"edit","description":"Edits a guild scheduled event.","params":[{"name":"guildScheduledEvent","description":"The guild scheduled event to edit","type":[[["GuildScheduledEventResolvable"]]]},{"name":"options","description":"Options to edit the guild scheduled event","type":[[["GuildScheduledEventEditOptions"]]]}],"async":true,"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":189,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes a guild scheduled event.","params":[{"name":"guildScheduledEvent","description":"The guild scheduled event to delete","type":[[["GuildScheduledEventResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"fetchSubscribers","description":"Fetches subscribers of a guild scheduled event.","params":[{"name":"guildScheduledEvent","description":"The guild scheduled event to fetch subscribers of","type":[[["GuildScheduledEventResolvable"]]]},{"name":"options","description":"Options for fetching the subscribers","optional":true,"default":"{}","type":[[["FetchGuildScheduledEventSubscribersOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["GuildScheduledEventUser",">>"]]],"meta":{"line":274,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":14,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"GuildSettingManager","description":"Manages API methods for users and stores their cache.","see":["{@link https://luna.gitlab.io/discord-unofficial-docs/user_settings.html}"],"extends":[[["BaseManager"]]],"props":[{"name":"rawSetting","description":"Raw data","type":[[["Object"]]],"meta":{"line":16,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"guildId","description":"Guild Id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":21,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"guild","description":"Get the guild","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":28,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"suppressEveryone","description":"Notification setting > Suppress `@everyone` and `@here`","nullable":true,"type":[[["boolean"]]],"meta":{"line":43,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"suppressRoles","description":"Notification setting > Suppress all role `@mention`","nullable":true,"type":[[["boolean"]]],"meta":{"line":50,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"muteScheduledEvents","description":"Notification setting > Mute new events","nullable":true,"type":[[["boolean"]]],"meta":{"line":57,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"messageNotifications","description":"Notification setting > Message notifications\n* `0` = All messages\n* `1` = Only @mentions\n* `2` = Nothing","nullable":true,"type":[[["number"]]],"meta":{"line":67,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"flags","description":"Flags (unknown)","nullable":true,"type":[[["number"]]],"meta":{"line":74,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"mobilePush","description":"Notification setting > Mobile push notifications","nullable":true,"type":[[["boolean"]]],"meta":{"line":81,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"muted","description":"Mute server","nullable":true,"type":[[["boolean"]]],"meta":{"line":88,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"muteConfig","description":"Mute config (muted = true)\n* `muteConfig.endTime`: End time (Date)\n* `muteConfig.selectedTimeWindow`: Selected time window (seconds) (number)","nullable":true,"type":[[["Object"]]],"meta":{"line":97,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"hideMutedChannels","description":"Hide muted channels","nullable":true,"type":[[["boolean"]]],"meta":{"line":109,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"channelOverrides","description":"Channel overrides (unknown)","nullable":true,"type":[[["Array"]]],"meta":{"line":116,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"notifyHighlights","description":"Notification setting > Suppress highlights\n* `0` = ??? (unknown)\n* `1` = Enable\n* `2` = Disable","nullable":true,"type":[[["number"]]],"meta":{"line":126,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"version","description":"Version (unknown)","nullable":true,"type":[[["number"]]],"meta":{"line":133,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"_patch","description":"Patch data file","access":"private","params":[{"name":"data","description":"Raw Data to patch","type":[[["Object"]]]}],"meta":{"line":36,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"edit","description":"Edit guild settings","params":[{"name":"data","description":"Data to edit","type":[[["Object"]]]}],"async":true,"returns":[[["Promise","<"],["GuildSettingManager",">"]]],"meta":{"line":141,"file":"GuildSettingManager.js","path":"src/managers"}}],"meta":{"line":9,"file":"GuildSettingManager.js","path":"src/managers"}},{"name":"GuildStickerManager","description":"Manages API methods for Guild Stickers and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":21,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of Guild Stickers","type":[[["Collection","<"],["Snowflake",", "],["Sticker",">"]]],"meta":{"line":24,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"create","description":"Creates a new custom sticker in the guild.","examples":["// Create a new sticker from a URL\nguild.stickers.create('https://i.imgur.com/w3duR07.png', 'rip', 'headstone')\n .then(sticker => console.log(`Created new sticker with name ${sticker.name}!`))\n .catch(console.error);","// Create a new sticker from a file on your computer\nguild.stickers.create('./memes/banana.png', 'banana', 'banana')\n .then(sticker => console.log(`Created new sticker with name ${sticker.name}!`))\n .catch(console.error);"],"params":[{"name":"file","description":"The file for the sticker","type":[[["BufferResolvable"]],[["Stream"]],[["FileOptions"]],[["MessageAttachment"]]]},{"name":"name","description":"The name for the sticker","type":[[["string"]]]},{"name":"tags","description":"The Discord name of a unicode emoji representing the sticker's expression","type":[[["string"]]]},{"name":"options","description":"Options","optional":true,"type":[[["GuildStickerCreateOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Sticker",">"]]],"description":"The created sticker"},"meta":{"line":59,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a StickerResolvable to a Sticker object.","params":[{"name":"sticker","description":"The Sticker resolvable to identify","type":[[["StickerResolvable"]]]}],"returns":{"types":[[["Sticker"]]],"nullable":true},"meta":{"line":79,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a StickerResolvable to a Sticker id string.","params":[{"name":"sticker","description":"The Sticker resolvable to identify","type":[[["StickerResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":88,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"edit","description":"Edits a sticker.","params":[{"name":"sticker","description":"The sticker to edit","type":[[["StickerResolvable"]]]},{"name":"data","description":"The new data for the sticker","optional":true,"type":[[["GuildStickerEditData"]]]},{"name":"reason","description":"Reason for editing this sticker","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Sticker",">"]]],"meta":{"line":104,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes a sticker.","params":[{"name":"sticker","description":"The sticker to delete","type":[[["StickerResolvable"]]]},{"name":"reason","description":"Reason for deleting this sticker","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":128,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains one or more stickers from Discord, or the sticker cache if they're already available.","examples":["// Fetch all stickers from the guild\nmessage.guild.stickers.fetch()\n .then(stickers => console.log(`There are ${stickers.size} stickers.`))\n .catch(console.error);","// Fetch a single sticker\nmessage.guild.stickers.fetch('222078108977594368')\n .then(sticker => console.log(`The sticker name is: ${sticker.name}`))\n .catch(console.error);"],"params":[{"name":"id","description":"The Sticker's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Sticker","|"],["Collection","<"],["Snowflake",", "],["Sticker",">)>"]]],"meta":{"line":151,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"fetchUser","description":"Fetches the user who uploaded this sticker, if this is a guild sticker.","params":[{"name":"sticker","description":"The sticker to fetch the user for","type":[[["StickerResolvable"]]]}],"async":true,"returns":[[["Promise",""]]],"meta":{"line":170,"file":"GuildStickerManager.js","path":"src/managers"}}],"meta":{"line":13,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"GuildTextThreadManager","description":"Manages API methods for {@link ThreadChannel} objects and stores their cache.","extends":[[["ThreadManager"]]],"props":[{"name":"channel","description":"The channel this Manager belongs to","type":[[["TextChannel"]],[["NewsChannel"]]],"meta":{"line":13,"file":"GuildTextThreadManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["ThreadChannel",">"]]],"meta":{"line":23,"file":"ThreadManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"create","description":"Creates a new thread in the channel.","examples":["// Create a new public thread\nchannel.threads\n .create({\n name: 'food-talk',\n autoArchiveDuration: 60,\n reason: 'Needed a separate thread for food',\n })\n .then(threadChannel => console.log(threadChannel))\n .catch(console.error);","// Create a new private thread\nchannel.threads\n .create({\n name: 'mod-talk',\n autoArchiveDuration: 60,\n type: 'GUILD_PRIVATE_THREAD',\n reason: 'Needed a separate thread for moderation',\n })\n .then(threadChannel => console.log(threadChannel))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to create a new thread","optional":true,"type":[[["GuildTextThreadCreateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":58,"file":"GuildTextThreadManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a {@link ThreadChannelResolvable} to a {@link ThreadChannel} object.","inherits":"ThreadManager#resolve","inherited":true,"params":[{"name":"thread","description":"The ThreadChannel resolvable to resolve","type":[[["ThreadChannelResolvable"]]]}],"returns":{"types":[[["ThreadChannel"]]],"nullable":true},"meta":{"line":43,"file":"ThreadManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link ThreadChannelResolvable} to a {@link ThreadChannel} id.","inherits":"ThreadManager#resolveId","inherited":true,"params":[{"name":"thread","description":"The ThreadChannel resolvable to resolve","type":[[["ThreadChannelResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":52,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains a thread from Discord, or the channel cache if it's already available.","inherits":"ThreadManager#fetch","inherited":true,"examples":["// Fetch a thread by its id\nchannel.threads.fetch('831955138126104859')\n .then(channel => console.log(channel.name))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to fetch threads. If it is a\nThreadChannelResolvable then the specified thread will be fetched. Fetches all active threads if `undefined`","optional":true,"type":[[["ThreadChannelResolvable"]],[["FetchChannelThreadsOptions"]],[["FetchThreadsOptions"]]]},{"name":"cacheOptions","description":"Additional options for this fetch. The `force` field gets ignored\nif `options` is not a {@link ThreadChannelResolvable}","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise",""]]],"meta":{"line":80,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetchArchived","description":"Obtains a set of archived threads from Discord, requires `READ_MESSAGE_HISTORY` in the parent channel.","inherits":"ThreadManager#fetchArchived","inherited":true,"params":[{"name":"options","description":"The options to fetch archived threads","optional":true,"type":[[["FetchChannelThreadsOptions"]]]},{"name":"cache","description":"Whether to cache the new thread objects if they aren't already","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":122,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetchActive","description":"Obtains the accessible active threads from Discord, requires `READ_MESSAGE_HISTORY` in the parent channel.","inherits":"ThreadManager#fetchActive","inherited":true,"params":[{"name":"cache","description":"Whether to cache the new thread objects if they aren't already","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"options","description":"Options for self-bots where advanced users can specify further options","optional":true,"default":null,"type":[[["FetchChannelThreadsOptions"]]]}],"async":true,"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":168,"file":"ThreadManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"GuildTextThreadManager.js","path":"src/managers"}},{"name":"InteractionManager","description":"Manages API methods for InteractionResponse and holds their cache.","extends":[[["CachedManager"]]],"props":[{"name":"channel","description":"The channel that the messages belong to","type":[[["TextBasedChannels"]]],"meta":{"line":18,"file":"InteractionManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of InteractionResponse","type":[[["Collection","<"],["Snowflake",", "],["InteractionResponse",">"]]],"meta":{"line":21,"file":"InteractionManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"InteractionManager.js","path":"src/managers"}},{"name":"MessageManager","description":"Manages API methods for Messages and holds their cache.","extends":[[["CachedManager"]]],"props":[{"name":"channel","description":"The channel that the messages belong to","type":[[["TextBasedChannels"]]],"meta":{"line":22,"file":"MessageManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of Messages","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]]],"meta":{"line":25,"file":"MessageManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetch","description":"Gets a message, or messages, from this channel.\nThe returned Collection does not contain reaction users of the messages if they were not cached.\nThose need to be fetched separately in such a case.","examples":["// Get message\nchannel.messages.fetch('99539446449315840')\n .then(message => console.log(message.content))\n .catch(console.error);","// Get messages\nchannel.messages.fetch({ limit: 10 })\n .then(messages => console.log(`Received ${messages.size} messages`))\n .catch(console.error);","// Get messages and filter by user id\nchannel.messages.fetch()\n .then(messages => console.log(`${messages.filter(m => m.author.id === '84484653687267328').size} messages`))\n .catch(console.error);"],"params":[{"name":"message","description":"The id of the message to fetch, or query parameters.","optional":true,"type":[[["Snowflake"]],[["ChannelLogsQueryOptions"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["Collection","<"],["Snowflake",", "],["Message",">)>"]]],"meta":{"line":68,"file":"MessageManager.js","path":"src/managers"}},{"name":"fetchPinned","description":"Fetches the pinned messages of this channel and returns a collection of them.\nThe returned Collection does not contain any reaction data of the messages.\nThose need to be fetched separately.","examples":["// Get pinned messages\nchannel.messages.fetchPinned()\n .then(messages => console.log(`Received ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"cache","description":"Whether to cache the message(s)","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":84,"file":"MessageManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a {@link MessageResolvable} to a {@link Message} object.","params":[{"name":"message","description":"The message resolvable to resolve","type":[[["MessageResolvable"]]]}],"returns":{"types":[[["Message"]]],"nullable":true},"meta":{"line":98,"file":"MessageManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link MessageResolvable} to a {@link Message} id.","params":[{"name":"message","description":"The message resolvable to resolve","type":[[["MessageResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":107,"file":"MessageManager.js","path":"src/managers"}},{"name":"edit","description":"Edits a message, even if it's not cached.","params":[{"name":"message","description":"The message to edit","type":[[["MessageResolvable"]]]},{"name":"options","description":"The options to edit the message","type":[[["string"]],[["MessageEditOptions"]],[["MessagePayload"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":122,"file":"MessageManager.js","path":"src/managers"}},{"name":"crosspost","description":"Publishes a message in an announcement channel to all channels following it, even if it's not cached.","params":[{"name":"message","description":"The message to publish","type":[[["MessageResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":173,"file":"MessageManager.js","path":"src/managers"}},{"name":"pin","description":"Pins a message to the channel's pinned messages, even if it's not cached.","params":[{"name":"message","description":"The message to pin","type":[[["MessageResolvable"]]]},{"name":"reason","description":"Reason for pinning","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":187,"file":"MessageManager.js","path":"src/managers"}},{"name":"unpin","description":"Unpins a message from the channel's pinned messages, even if it's not cached.","params":[{"name":"message","description":"The message to unpin","type":[[["MessageResolvable"]]]},{"name":"reason","description":"Reason for unpinning","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":200,"file":"MessageManager.js","path":"src/managers"}},{"name":"react","description":"Adds a reaction to a message, even if it's not cached.","params":[{"name":"message","description":"The message to react to","type":[[["MessageResolvable"]]]},{"name":"emoji","description":"The emoji to react with","type":[[["EmojiIdentifierResolvable"]]]},{"name":"burst","description":"Super Reactions (Discord Nitro only)","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":214,"file":"MessageManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes a message, even if it's not cached.","params":[{"name":"message","description":"The message to delete","type":[[["MessageResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":242,"file":"MessageManager.js","path":"src/managers"}},{"name":"search","description":"Search Messages in the channel.","params":[{"name":"options","description":"Performs a search within the channel.","type":[[["MessageSearchOptions"]]]}],"async":true,"returns":[[["MessageSearchResult"]]],"meta":{"line":304,"file":"MessageManager.js","path":"src/managers"}}],"meta":{"line":14,"file":"MessageManager.js","path":"src/managers"}},{"name":"PermissionOverwriteManager","description":"Manages API methods for guild channel permission overwrites and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"channel","description":"The channel of the permission overwrite this manager belongs to","type":[[["GuildChannel"]]],"meta":{"line":32,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["PermissionOverwrites",">"]]],"meta":{"line":41,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"set","description":"Replaces the permission overwrites in this channel.","examples":["message.channel.permissionOverwrites.set([\n {\n id: message.author.id,\n deny: [Permissions.FLAGS.VIEW_CHANNEL],\n },\n], 'Needed to change permissions');"],"params":[{"name":"overwrites","description":"Permission overwrites the channel gets updated with","type":[[["Array","<"],["OverwriteResolvable",">"]],[["Collection","<"],["Snowflake",", "],["OverwriteResolvable",">"]]]},{"name":"reason","description":"Reason for updating the channel overwrites","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":65,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"upsert","description":"Creates or edits permission overwrites for a user or role in this channel.","access":"private","params":[{"name":"userOrRole","description":"The user or role to update","type":[[["RoleResolvable"]],[["UserResolvable"]]]},{"name":"options","description":"The options for the update","type":[[["PermissionOverwriteOptions"]]]},{"name":"overwriteOptions","description":"The extra information for the update","optional":true,"type":[[["GuildChannelOverwriteOptions"]]]},{"name":"existing","description":"The existing overwrites to merge with this update","optional":true,"type":[[["PermissionOverwrites"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":91,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"create","description":"Creates permission overwrites for a user or role in this channel, or replaces them if already present.","examples":["// Create or Replace permission overwrites for a message author\nmessage.channel.permissionOverwrites.create(message.author, {\n SEND_MESSAGES: false\n})\n .then(channel => console.log(channel.permissionOverwrites.cache.get(message.author.id)))\n .catch(console.error);"],"params":[{"name":"userOrRole","description":"The user or role to update","type":[[["RoleResolvable"]],[["UserResolvable"]]]},{"name":"options","description":"The options for the update","type":[[["PermissionOverwriteOptions"]]]},{"name":"overwriteOptions","description":"The extra information for the update","optional":true,"type":[[["GuildChannelOverwriteOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":126,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"edit","description":"Edits permission overwrites for a user or role in this channel, or creates an entry if not already present.","examples":["// Edit or Create permission overwrites for a message author\nmessage.channel.permissionOverwrites.edit(message.author, {\n SEND_MESSAGES: false\n})\n .then(channel => console.log(channel.permissionOverwrites.cache.get(message.author.id)))\n .catch(console.error);"],"params":[{"name":"userOrRole","description":"The user or role to update","type":[[["RoleResolvable"]],[["UserResolvable"]]]},{"name":"options","description":"The options for the update","type":[[["PermissionOverwriteOptions"]]]},{"name":"overwriteOptions","description":"The extra information for the update","optional":true,"type":[[["GuildChannelOverwriteOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":144,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes permission overwrites for a user or role in this channel.","params":[{"name":"userOrRole","description":"The user or role to delete","type":[[["UserResolvable"]],[["RoleResolvable"]]]},{"name":"reason","description":"The reason for deleting the overwrite","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":157,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":17,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"PresenceManager","description":"Manages API methods for Presences and holds their cache.","extends":[[["CachedManager"]]],"props":[{"name":"cache","description":"The cache of Presences","type":[[["Collection","<"],["Snowflake",", "],["Presence",">"]]],"meta":{"line":15,"file":"PresenceManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a {@link PresenceResolvable} to a {@link Presence} object.","params":[{"name":"presence","description":"The presence resolvable to resolve","type":[[["PresenceResolvable"]]]}],"returns":{"types":[[["Presence"]]],"nullable":true},"meta":{"line":38,"file":"PresenceManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link PresenceResolvable} to a {@link Presence} id.","params":[{"name":"presence","description":"The presence resolvable to resolve","type":[[["PresenceResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"PresenceManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"PresenceManager.js","path":"src/managers"}},{"name":"ReactionManager","description":"Manages API methods for reactions and holds their cache.","extends":[[["CachedManager"]]],"props":[{"name":"message","description":"The message that this manager belongs to","type":[[["Message"]]],"meta":{"line":18,"file":"ReactionManager.js","path":"src/managers"}},{"name":"cache","description":"The reaction cache of this manager","type":[[["Collection","<("],["string","|"],["Snowflake","), "],["MessageReaction",">"]]],"meta":{"line":25,"file":"ReactionManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a {@link MessageReactionResolvable} to a {@link MessageReaction} object.","params":[{"name":"reaction","description":"The MessageReaction to resolve","type":[[["MessageReactionResolvable"]]]}],"returns":{"types":[[["MessageReaction"]]],"nullable":true},"meta":{"line":39,"file":"ReactionManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link MessageReactionResolvable} to a {@link MessageReaction} id.","params":[{"name":"reaction","description":"The MessageReaction to resolve","type":[[["MessageReactionResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":48,"file":"ReactionManager.js","path":"src/managers"}},{"name":"removeAll","description":"Removes all reactions from a message.","async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":61,"file":"ReactionManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"ReactionManager.js","path":"src/managers"}},{"name":"ReactionUserManager","description":"Manages API methods for users who reacted to a reaction and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"reaction","description":"The reaction that this manager belongs to","type":[[["MessageReaction"]]],"meta":{"line":20,"file":"ReactionUserManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["DiscordUser",">"]]],"meta":{"line":23,"file":"ReactionUserManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetch","description":"Fetches all the users that gave this reaction. Resolves with a collection of users, mapped by their ids.","params":[{"name":"options","description":"Options for fetching the users","optional":true,"type":[[["FetchReactionUsersOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["DiscordUser",">>"]]],"meta":{"line":41,"file":"ReactionUserManager.js","path":"src/managers"}},{"name":"remove","description":"Removes a user from this reaction.","params":[{"name":"user","description":"The user to remove the reaction of","optional":true,"default":"this.client.user","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["MessageReaction",">"]]],"meta":{"line":60,"file":"ReactionUserManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"ReactionUserManager.js","path":"src/managers"}},{"name":"RelationshipManager","description":"Manages API methods for Relationships and stores their cache.","props":[{"name":"client","description":"The client that instantiated this manager.","type":[[["Client"]]],"meta":{"line":20,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"cache","description":"A collection of users this manager is caching. (Type: Number)","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["RelationshipTypes",">"]]],"meta":{"line":26,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"friendCache","description":"Get all friends","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":35,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"blockedCache","description":"Get all blocked users","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":47,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"incomingCache","description":"Get all incoming friend requests","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":59,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"outgoingCache","description":"Get all outgoing friend requests","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":71,"file":"RelationshipManager.js","path":"src/managers"}}],"methods":[{"name":"toArray","description":"Return array of cache","returns":[[["Array","<{"],["id",": "],["Snowflake",", "],["type",": "],["RelationshipTypes","}>"]]],"meta":{"line":82,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"_setup","access":"private","params":[{"name":"users","description":"An array of users to add to the cache","type":[[["Array","<"],["User",">"]]]}],"returns":[[["void"]]],"meta":{"line":91,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link UserResolvable} to a {@link User} id.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":104,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains a user from Discord, or the user cache if it's already available.","params":[{"name":"user","description":"The user to fetch","optional":true,"type":[[["UserResolvable"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<("],["RelationshipTypes","|"],["RelationshipManager",")>"]]],"meta":{"line":118,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"deleteFriend","description":"Deletes a friend relationship with a client user.","params":[{"name":"user","description":"Target","type":[[["UserResolvable"]]]}],"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":140,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"deleteBlocked","description":"Deletes a blocked relationship with a client user.","params":[{"name":"user","description":"Target","type":[[["UserResolvable"]]]}],"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":152,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"sendFriendRequest","description":"Sends a friend request.","params":[{"name":"username","description":"Username of the user to send the request to","type":[[["string"]]]},{"name":"discriminator","description":"Discriminator of the user to send the request to","nullable":true,"type":[[["number"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":165,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"cancelFriendRequest","description":"Cancels a friend request.","params":[{"name":"user","description":"the user you want to delete","type":[[["UserResolvable"]]]}],"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":183,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"addFriend","description":"Accepts a friend request.","params":[{"name":"user","description":"The user to add as a friend","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":203,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"setNickname","description":"Changes the nickname of a friend.","params":[{"name":"user","description":"The user to change the nickname","type":[[["UserResolvable"]]]},{"name":"nickname","description":"New nickname","nullable":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":226,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"addBlocked","description":"Blocks a user.","params":[{"name":"user","description":"User to block","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":242,"file":"RelationshipManager.js","path":"src/managers"}}],"meta":{"line":14,"file":"RelationshipManager.js","path":"src/managers"}},{"name":"RoleManager","description":"Manages API methods for roles and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild belonging to this manager","type":[[["Guild"]]],"meta":{"line":34,"file":"RoleManager.js","path":"src/managers"}},{"name":"cache","description":"The role cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":37,"file":"RoleManager.js","path":"src/managers"}},{"name":"everyone","description":"The `@everyone` role of the guild","readonly":true,"type":[[["Role"]]],"meta":{"line":329,"file":"RoleManager.js","path":"src/managers"}},{"name":"premiumSubscriberRole","description":"The premium subscriber role of the guild, if any","readonly":true,"nullable":true,"type":[[["Role"]]],"meta":{"line":338,"file":"RoleManager.js","path":"src/managers"}},{"name":"highest","description":"The role with the highest position in the cache","readonly":true,"type":[[["Role"]]],"meta":{"line":347,"file":"RoleManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetch","description":"Obtains a role from Discord, or the role cache if they're already available.","examples":["// Fetch all roles from the guild\nmessage.guild.roles.fetch()\n .then(roles => console.log(`There are ${roles.size} roles.`))\n .catch(console.error);","// Fetch a single role\nmessage.guild.roles.fetch('222078108977594368')\n .then(role => console.log(`The role color is: ${role.color}`))\n .catch(console.error);"],"params":[{"name":"id","description":"The role's id","optional":true,"type":[[["Snowflake"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<(?"],["Role","|"],["Collection","<"],["Snowflake",", "],["Role",">)>"]]],"meta":{"line":63,"file":"RoleManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a {@link RoleResolvable} to a {@link Role} object.","params":[{"name":"role","description":"The role resolvable to resolve","type":[[["RoleResolvable"]]]}],"returns":{"types":[[["Role"]]],"nullable":true},"meta":{"line":83,"file":"RoleManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link RoleResolvable} to a {@link Role} id.","params":[{"name":"role","description":"The role resolvable to resolve","type":[[["RoleResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":92,"file":"RoleManager.js","path":"src/managers"}},{"name":"create","description":"Creates a new role in the guild with given information.\nThe position will silently reset to 1 if an invalid one is provided, or none.","examples":["// Create a new role\nguild.roles.create()\n .then(console.log)\n .catch(console.error);","// Create a new role with data and a reason\nguild.roles.create({\n name: 'Super Cool Blue People',\n color: 'BLUE',\n reason: 'we needed a role for Super Cool People',\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for creating the new role","optional":true,"type":[[["CreateRoleOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":137,"file":"RoleManager.js","path":"src/managers"}},{"name":"edit","description":"Edits a role of the guild.","examples":["// Edit a role\nguild.roles.edit('222079219327434752', { name: 'buddies' })\n .then(updated => console.log(`Edited role name to ${updated.name}`))\n .catch(console.error);"],"params":[{"name":"role","description":"The role to edit","type":[[["RoleResolvable"]]]},{"name":"data","description":"The new data for the role","type":[[["RoleData"]]]},{"name":"reason","description":"Reason for editing this role","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":179,"file":"RoleManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes a role.","examples":["// Delete a role\nguild.roles.delete('222079219327434752', 'The role needed to go')\n .then(() => console.log('Deleted the role.'))\n .catch(console.error);"],"params":[{"name":"role","description":"The role to delete","type":[[["RoleResolvable"]]]},{"name":"reason","description":"Reason for deleting the role","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":220,"file":"RoleManager.js","path":"src/managers"}},{"name":"setPosition","description":"Sets the new position of the role.","examples":["// Set the position of the role\nguild.roles.setPosition('222197033908436994', 1)\n .then(updated => console.log(`Role position: ${updated.position}`))\n .catch(console.error);"],"params":[{"name":"role","description":"The role to change the position of","type":[[["RoleResolvable"]]]},{"name":"position","description":"The new position for the role","type":[[["number"]]]},{"name":"options","description":"Options for setting the position","optional":true,"type":[[["SetRolePositionOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":238,"file":"RoleManager.js","path":"src/managers"}},{"name":"setPositions","description":"Batch-updates the guild's role positions","examples":["guild.roles.setPositions([{ role: roleId, position: updatedRoleIndex }])\n .then(guild => console.log(`Role positions updated for ${guild}`))\n .catch(console.error);"],"params":[{"name":"rolePositions","description":"Role positions to update","type":[[["Array","<"],["GuildRolePosition",">"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":273,"file":"RoleManager.js","path":"src/managers"}},{"name":"comparePositions","description":"Compares the positions of two roles.","params":[{"name":"role1","description":"First role to compare","type":[[["RoleResolvable"]]]},{"name":"role2","description":"Second role to compare","type":[[["RoleResolvable"]]]}],"returns":{"types":[[["number"]]],"description":"Negative number if the first role's position is lower (second role's is higher),\npositive number if the first's is higher (second's is lower), 0 if equal"},"meta":{"line":297,"file":"RoleManager.js","path":"src/managers"}},{"name":"botRoleFor","description":"Gets the managed role a user created when joining the guild, if any\nOnly ever available for bots","params":[{"name":"user","description":"The user to access the bot role for","type":[[["UserResolvable"]]]}],"returns":{"types":[[["Role"]]],"nullable":true},"meta":{"line":318,"file":"RoleManager.js","path":"src/managers"}}],"meta":{"line":19,"file":"RoleManager.js","path":"src/managers"}},{"name":"SessionManager","description":"Manages API methods for users and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"cache","description":"The cache of Sessions","type":[[["Collection","<"],["string",", "],["Session",">"]]],"meta":{"line":14,"file":"SessionManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetch","description":"Fetch all sessions of the client.","returns":[[["Promise","<"],["SessionManager",">"]]],"meta":{"line":24,"file":"SessionManager.js","path":"src/managers"}},{"name":"logoutAllDevices","description":"Logout the client (remote).","params":[{"name":"mfaCode","description":"MFA code (if 2FA is enabled)","type":[[["string"]],[["null"]]]}],"returns":[[["Promise","<"],["undefined",">"]]],"meta":{"line":45,"file":"SessionManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"SessionManager.js","path":"src/managers"}},{"name":"StageInstanceManager","description":"Manages API methods for {@link StageInstance} objects and holds their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":20,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["StageInstance",">"]]],"meta":{"line":23,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"create","description":"Creates a new stage instance.","examples":["// Create a stage instance\nguild.stageInstances.create('1234567890123456789', {\n topic: 'A very creative topic',\n privacyLevel: 'GUILD_ONLY'\n})\n .then(stageInstance => console.log(stageInstance))\n .catch(console.error);"],"params":[{"name":"channel","description":"The stage channel to associate the created stage instance to","type":[[["StageChannelResolvable"]]]},{"name":"options","description":"The options to create the stage instance","type":[[["StageInstanceCreateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":60,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches the stage instance associated with a stage channel, if it exists.","examples":["// Fetch a stage instance\nguild.stageInstances.fetch('1234567890123456789')\n .then(stageInstance => console.log(stageInstance))\n .catch(console.error);"],"params":[{"name":"channel","description":"The stage channel whose associated stage instance is to be fetched","type":[[["StageChannelResolvable"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":93,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"edit","description":"Edits an existing stage instance.","examples":["// Edit a stage instance\nguild.stageInstances.edit('1234567890123456789', { topic: 'new topic' })\n .then(stageInstance => console.log(stageInstance))\n .catch(console.error);"],"params":[{"name":"channel","description":"The stage channel whose associated stage instance is to be edited","type":[[["StageChannelResolvable"]]]},{"name":"options","description":"The options to edit the stage instance","type":[[["StageInstanceEditOptions"]]]}],"async":true,"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":124,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"delete","description":"Deletes an existing stage instance.","params":[{"name":"channel","description":"The stage channel whose associated stage instance is to be deleted","type":[[["StageChannelResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":154,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"ThreadManager","description":"Manages API methods for {@link ThreadChannel} objects and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"channel","description":"The channel this Manager belongs to","type":[[["NewsChannel"]],[["TextChannel"]]],"meta":{"line":20,"file":"ThreadManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["ThreadChannel",">"]]],"meta":{"line":23,"file":"ThreadManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a {@link ThreadChannelResolvable} to a {@link ThreadChannel} object.","params":[{"name":"thread","description":"The ThreadChannel resolvable to resolve","type":[[["ThreadChannelResolvable"]]]}],"returns":{"types":[[["ThreadChannel"]]],"nullable":true},"meta":{"line":43,"file":"ThreadManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link ThreadChannelResolvable} to a {@link ThreadChannel} id.","params":[{"name":"thread","description":"The ThreadChannel resolvable to resolve","type":[[["ThreadChannelResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":52,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains a thread from Discord, or the channel cache if it's already available.","examples":["// Fetch a thread by its id\nchannel.threads.fetch('831955138126104859')\n .then(channel => console.log(channel.name))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to fetch threads. If it is a\nThreadChannelResolvable then the specified thread will be fetched. Fetches all active threads if `undefined`","optional":true,"type":[[["ThreadChannelResolvable"]],[["FetchChannelThreadsOptions"]],[["FetchThreadsOptions"]]]},{"name":"cacheOptions","description":"Additional options for this fetch. The `force` field gets ignored\nif `options` is not a {@link ThreadChannelResolvable}","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise",""]]],"meta":{"line":80,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetchArchived","description":"Obtains a set of archived threads from Discord, requires `READ_MESSAGE_HISTORY` in the parent channel.","params":[{"name":"options","description":"The options to fetch archived threads","optional":true,"type":[[["FetchChannelThreadsOptions"]]]},{"name":"cache","description":"Whether to cache the new thread objects if they aren't already","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":122,"file":"ThreadManager.js","path":"src/managers"}},{"name":"fetchActive","description":"Obtains the accessible active threads from Discord, requires `READ_MESSAGE_HISTORY` in the parent channel.","params":[{"name":"cache","description":"Whether to cache the new thread objects if they aren't already","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"options","description":"Options for self-bots where advanced users can specify further options","optional":true,"default":null,"type":[[["FetchChannelThreadsOptions"]]]}],"async":true,"returns":[[["Promise","<"],["FetchedThreads",">"]]],"meta":{"line":168,"file":"ThreadManager.js","path":"src/managers"}}],"meta":{"line":12,"file":"ThreadManager.js","path":"src/managers"}},{"name":"ThreadMemberManager","description":"Manages API methods for GuildMembers and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"thread","description":"The thread this manager belongs to","type":[[["ThreadChannel"]]],"meta":{"line":23,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this Manager","type":[[["Collection","<"],["Snowflake",", "],["ThreadMember",">"]]],"meta":{"line":26,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"me","description":"The client user as a ThreadMember of this ThreadChannel","readonly":true,"nullable":true,"type":[[["ThreadMember"]]],"meta":{"line":56,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"fetchMe","description":"Fetches the client user as a ThreadMember of the thread.","params":[{"name":"options","description":"The options for fetching the member","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise","<"],["ThreadMember",">"]]],"meta":{"line":47,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a {@link ThreadMemberResolvable} to a {@link ThreadMember} object.","params":[{"name":"member","description":"The user that is part of the thread","type":[[["ThreadMemberResolvable"]]]}],"returns":{"types":[[["GuildMember"]]],"nullable":true},"meta":{"line":72,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link ThreadMemberResolvable} to a {@link ThreadMember} id string.","params":[{"name":"member","description":"The user that is part of the guild","type":[[["ThreadMemberResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":85,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"add","description":"Adds a member to the thread.","params":[{"name":"member","description":"The member to add","type":[[["UserResolvable"]],[["me","'"]]]},{"name":"reason","description":"The reason for adding this member","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Snowflake",">"]]],"meta":{"line":98,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"remove","description":"Remove a user from the thread.","params":[{"name":"id","description":"The id of the member to remove","type":[[["Snowflake"]],[["me","'"]]]},{"name":"reason","description":"The reason for removing this member from the thread","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Snowflake",">"]]],"meta":{"line":111,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"fetch","description":"Fetches member(s) for the thread from Discord.","params":[{"name":"member","description":"The member to fetch. If `undefined`, all members\nin the thread are fetched, and will be cached based on `options.cache`.","optional":true,"type":[[["UserResolvable"]],[["FetchThreadMembersOptions"]],[["boolean"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["FetchThreadMemberOptions"]],[["FetchThreadMembersOptions"]]]}],"returns":[[["Promise","<("],["ThreadMember","|"],["Collection","<"],["Snowflake",", "],["ThreadMember",">)>"]]],"meta":{"line":171,"file":"ThreadMemberManager.js","path":"src/managers"}}],"meta":{"line":15,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"UserManager","description":"Manages API methods for users and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"cache","description":"The cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":19,"file":"UserManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"dmChannel","description":"The DM between the client's user and a user","access":"private","params":[{"name":"userId","description":"The user id","type":[[["Snowflake"]]]}],"returns":{"types":[[["DMChannel"]]],"nullable":true},"meta":{"line":41,"file":"UserManager.js","path":"src/managers"}},{"name":"createDM","description":"Creates a {@link DMChannel} between the client and a user.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":51,"file":"UserManager.js","path":"src/managers"}},{"name":"deleteDM","description":"Deletes a {@link DMChannel} (if one exists) between the client and a user. Resolves with the channel if successful.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":77,"file":"UserManager.js","path":"src/managers"}},{"name":"fetch","description":"Obtains a user from Discord, or the user cache if it's already available.","params":[{"name":"user","description":"The user to fetch","type":[[["UserResolvable"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]},{"name":"options.guildId","description":"The guild ID to fetch the member for","optional":true,"nullable":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":93,"file":"UserManager.js","path":"src/managers"}},{"name":"fetchFlags","description":"Fetches a user's flags.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]},{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<"],["UserFlags",">"]]],"meta":{"line":112,"file":"UserManager.js","path":"src/managers"}},{"name":"send","description":"Sends a message to a user.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]},{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":122,"file":"UserManager.js","path":"src/managers"}},{"name":"resolve","description":"Resolves a {@link UserResolvable} to a {@link User} object.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]}],"returns":{"types":[[["User"]]],"nullable":true},"meta":{"line":131,"file":"UserManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a {@link UserResolvable} to a {@link User} id.","params":[{"name":"user","description":"The UserResolvable to identify","type":[[["UserResolvable"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":142,"file":"UserManager.js","path":"src/managers"}}],"meta":{"line":14,"file":"UserManager.js","path":"src/managers"}},{"name":"VoiceStateManager","description":"Manages API methods for VoiceStates and stores their cache.","extends":[[["CachedManager"]]],"props":[{"name":"guild","description":"The guild this manager belongs to","type":[[["Guild"]]],"meta":{"line":18,"file":"VoiceStateManager.js","path":"src/managers"}},{"name":"cache","description":"The cache of this manager","type":[[["Collection","<"],["Snowflake",", "],["VoiceState",">"]]],"meta":{"line":21,"file":"VoiceStateManager.js","path":"src/managers"}},{"name":"_cache","description":"The private cache of items for this manager.","access":"private","readonly":true,"type":[[["Collection"]]],"meta":{"line":15,"file":"CachedManager.js","path":"src/managers"}},{"name":"holds","description":"The data structure belonging to this manager.","access":"private","readonly":true,"type":[[["function"]]],"meta":{"line":15,"file":"DataManager.js","path":"src/managers"}},{"name":"client","description":"The client that instantiated this Manager","readonly":true,"type":[[["Client"]]],"meta":{"line":9,"file":"BaseManager.js","path":"src/managers"}}],"methods":[{"name":"resolve","description":"Resolves a data entry to a data Object.","inherits":"DataManager#resolve","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Object"]]],"description":"An instance from this Manager","nullable":true},"meta":{"line":39,"file":"DataManager.js","path":"src/managers"}},{"name":"resolveId","description":"Resolves a data entry to an instance id.","inherits":"DataManager#resolveId","inherited":true,"params":[{"name":"idOrInstance","description":"The id or instance of something in this Manager","type":[[["string"]],[["Object"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":50,"file":"DataManager.js","path":"src/managers"}}],"meta":{"line":10,"file":"VoiceStateManager.js","path":"src/managers"}},{"name":"DiscordAPIError","description":"Represents an error from the Discord API.","extends":[[["Error"]]],"props":[{"name":"method","description":"The HTTP method used for the request","type":[[["string"]]],"meta":{"line":18,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"path","description":"The path of the request relative to the HTTP endpoint","type":[[["string"]]],"meta":{"line":24,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"code","description":"HTTP error code returned by Discord","type":[[["number"]],[["string"]]],"meta":{"line":30,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"httpStatus","description":"The HTTP status code","type":[[["number"]]],"meta":{"line":36,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"captcha","description":"Captcha response data if the request requires a captcha","type":[[["Captcha"]],[["null"]]],"meta":{"line":51,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"requestData","description":"The data associated with the request that caused this error","type":[[["HTTPErrorData"]]],"meta":{"line":57,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"retries","description":"The number of times this request has been retried","type":[[["number"]]],"meta":{"line":66,"file":"DiscordAPIError.js","path":"src/rest"}}],"methods":[{"name":"flattenErrors","description":"Flattens an errors object returned from the API into an array.","scope":"static","access":"private","params":[{"name":"obj","description":"Discord errors object","type":[[["APIError"]]]},{"name":"key","description":"Used internally to determine key names of nested fields","optional":true,"type":[[["string"]]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":76,"file":"DiscordAPIError.js","path":"src/rest"}}],"meta":{"line":7,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"HTTPError","description":"Represents an HTTP error from a request.","extends":[[["Error"]]],"props":[{"name":"name","description":"The name of the error","type":[[["string"]]],"meta":{"line":15,"file":"HTTPError.js","path":"src/rest"}},{"name":"code","description":"HTTP error code returned from the request","type":[[["number"]]],"meta":{"line":21,"file":"HTTPError.js","path":"src/rest"}},{"name":"method","description":"The HTTP method used for the request","type":[[["string"]]],"meta":{"line":27,"file":"HTTPError.js","path":"src/rest"}},{"name":"path","description":"The path of the request relative to the HTTP endpoint","type":[[["string"]]],"meta":{"line":33,"file":"HTTPError.js","path":"src/rest"}},{"name":"requestData","description":"The data associated with the request that caused this error","type":[[["HTTPErrorData"]]],"meta":{"line":54,"file":"HTTPError.js","path":"src/rest"}}],"meta":{"line":7,"file":"HTTPError.js","path":"src/rest"}},{"name":"RateLimitError","description":"Represents a RateLimit error from a request.","extends":[[["Error"]]],"props":[{"name":"name","description":"The name of the error","type":[[["string"]]],"meta":{"line":15,"file":"RateLimitError.js","path":"src/rest"}},{"name":"timeout","description":"Time until this rate limit ends, in milliseconds","type":[[["number"]]],"meta":{"line":21,"file":"RateLimitError.js","path":"src/rest"}},{"name":"method","description":"The HTTP method used for the request","type":[[["string"]]],"meta":{"line":27,"file":"RateLimitError.js","path":"src/rest"}},{"name":"path","description":"The path of the request relative to the HTTP endpoint","type":[[["string"]]],"meta":{"line":33,"file":"RateLimitError.js","path":"src/rest"}},{"name":"route","description":"The route of the request relative to the HTTP endpoint","type":[[["string"]]],"meta":{"line":39,"file":"RateLimitError.js","path":"src/rest"}},{"name":"global","description":"Whether this rate limit is global","type":[[["boolean"]]],"meta":{"line":45,"file":"RateLimitError.js","path":"src/rest"}},{"name":"limit","description":"The maximum amount of requests of this endpoint","type":[[["number"]]],"meta":{"line":51,"file":"RateLimitError.js","path":"src/rest"}}],"meta":{"line":7,"file":"RateLimitError.js","path":"src/rest"}},{"name":"Shard","description":"A self-contained shard created by the {@link ShardingManager}. Each one has a {@link ChildProcess} that contains\nan instance of the bot and its {@link Client}. When its child process/worker exits for any reason, the shard will\nspawn a new one to replace it as necessary.","extends":[[["EventEmitter"]]],"props":[{"name":"manager","description":"Manager that created the shard","type":[[["ShardingManager"]]],"meta":{"line":30,"file":"Shard.js","path":"src/sharding"}},{"name":"id","description":"The shard's id in the manager","type":[[["number"]]],"meta":{"line":36,"file":"Shard.js","path":"src/sharding"}},{"name":"args","description":"Arguments for the shard's process (only when {@link ShardingManager#mode} is `process`)","type":[[["Array","<"],["string",">"]]],"meta":{"line":42,"file":"Shard.js","path":"src/sharding"}},{"name":"execArgv","description":"Arguments for the shard's process executable (only when {@link ShardingManager#mode} is `process`)","type":[[["Array","<"],["string",">"]]],"meta":{"line":48,"file":"Shard.js","path":"src/sharding"}},{"name":"env","description":"Environment variables for the shard's process, or workerData for the shard's worker","type":[[["Object"]]],"meta":{"line":54,"file":"Shard.js","path":"src/sharding"}},{"name":"ready","description":"Whether the shard's {@link Client} is ready","type":[[["boolean"]]],"meta":{"line":65,"file":"Shard.js","path":"src/sharding"}},{"name":"process","description":"Process of the shard (if {@link ShardingManager#mode} is `process`)","nullable":true,"type":[[["ChildProcess"]]],"meta":{"line":71,"file":"Shard.js","path":"src/sharding"}},{"name":"worker","description":"Worker of the shard (if {@link ShardingManager#mode} is `worker`)","nullable":true,"type":[[["Worker"]]],"meta":{"line":77,"file":"Shard.js","path":"src/sharding"}},{"name":"_evals","description":"Ongoing promises for calls to {@link Shard#eval}, mapped by the `script` they were called with","access":"private","type":[[["Map","<"],["string",", "],["Promise",">"]]],"meta":{"line":84,"file":"Shard.js","path":"src/sharding"}},{"name":"_fetches","description":"Ongoing promises for calls to {@link Shard#fetchClientValue}, mapped by the `prop` they were called with","access":"private","type":[[["Map","<"],["string",", "],["Promise",">"]]],"meta":{"line":91,"file":"Shard.js","path":"src/sharding"}},{"name":"_exitListener","description":"Listener function for the {@link ChildProcess}' `exit` event","access":"private","type":[[["function"]]],"meta":{"line":98,"file":"Shard.js","path":"src/sharding"}}],"methods":[{"name":"spawn","description":"Forks a child process or creates a worker thread for the shard.\nYou should not need to call this manually.","params":[{"name":"timeout","description":"The amount in milliseconds to wait until the {@link Client} has become ready\nbefore resolving (`-1` or `Infinity` for no wait)","optional":true,"default":30000,"type":[[["number"]]]}],"returns":[[["Promise","<"],["ChildProcess",">"]]],"meta":{"line":108,"file":"Shard.js","path":"src/sharding"}},{"name":"kill","description":"Immediately kills the shard's process/worker and does not restart it.","meta":{"line":179,"file":"Shard.js","path":"src/sharding"}},{"name":"respawn","description":"Kills and restarts the shard's process/worker.","params":[{"name":"options","description":"Options for respawning the shard","optional":true,"type":[[["ShardRespawnOptions"]]]}],"async":true,"returns":[[["Promise","<"],["ChildProcess",">"]]],"meta":{"line":205,"file":"Shard.js","path":"src/sharding"}},{"name":"send","description":"Sends a message to the shard's process/worker.","params":[{"name":"message","description":"Message to send to the shard","type":[["*"]]}],"returns":[[["Promise","<"],["Shard",">"]]],"meta":{"line":216,"file":"Shard.js","path":"src/sharding"}},{"name":"fetchClientValue","description":"Fetches a client property value of the shard.","examples":["shard.fetchClientValue('guilds.cache.size')\n .then(count => console.log(`${count} guilds in shard ${shard.id}`))\n .catch(console.error);"],"params":[{"name":"prop","description":"Name of the client property to get, using periods for nesting","type":[[["string"]]]}],"returns":[[["Promise","<"],["*",">"]]],"meta":{"line":239,"file":"Shard.js","path":"src/sharding"}},{"name":"eval","description":"Evaluates a script or function on the shard, in the context of the {@link Client}.","params":[{"name":"script","description":"JavaScript to run on the shard","type":[[["string"]],[["function"]]]},{"name":"context","description":"The context for the eval","optional":true,"type":[["*"]]}],"returns":{"types":[[["Promise","<"],["*",">"]]],"description":"Result of the script execution"},"meta":{"line":279,"file":"Shard.js","path":"src/sharding"}},{"name":"_handleMessage","description":"Handles a message received from the child process/worker.","access":"private","params":[{"name":"message","description":"Message received","type":[["*"]]}],"meta":{"line":321,"file":"Shard.js","path":"src/sharding"}},{"name":"_handleExit","description":"Handles the shard's process/worker exiting.","access":"private","params":[{"name":"respawn","description":"Whether to spawn the shard again","optional":true,"default":"this.manager.respawn","type":[[["boolean"]]]},{"name":"timeout","description":"The amount in milliseconds to wait until the {@link Client}\nhas become ready (`-1` or `Infinity` for no wait)","optional":true,"type":[[["number"]]]}],"meta":{"line":401,"file":"Shard.js","path":"src/sharding"}},{"name":"incrementMaxListeners","description":"Increments max listeners by one for a given emitter, if they are not zero.","access":"private","params":[{"name":"emitter","description":"The emitter that emits the events.","type":[[["EventEmitter"]],[["process"]]]}],"meta":{"line":423,"file":"Shard.js","path":"src/sharding"}},{"name":"decrementMaxListeners","description":"Decrements max listeners by one for a given emitter, if they are not zero.","access":"private","params":[{"name":"emitter","description":"The emitter that emits the events.","type":[[["EventEmitter"]],[["process"]]]}],"meta":{"line":435,"file":"Shard.js","path":"src/sharding"}}],"events":[{"name":"spawn","description":"Emitted upon the creation of the shard's child process/worker.","params":[{"name":"process","description":"Child process/worker that was created","type":[[["ChildProcess"]],[["Worker"]]]}],"meta":{"line":133,"file":"Shard.js","path":"src/sharding"}},{"name":"ready","description":"Emitted upon the shard's {@link Client#event:shardReady} event.","meta":{"line":326,"file":"Shard.js","path":"src/sharding"}},{"name":"disconnect","description":"Emitted upon the shard's {@link Client#event:shardDisconnect} event.","meta":{"line":337,"file":"Shard.js","path":"src/sharding"}},{"name":"reconnecting","description":"Emitted upon the shard's {@link Client#event:shardReconnecting} event.","meta":{"line":348,"file":"Shard.js","path":"src/sharding"}},{"name":"message","description":"Emitted upon receiving a message from the child process/worker.","params":[{"name":"message","description":"Message that was received","type":[["*"]]}],"meta":{"line":386,"file":"Shard.js","path":"src/sharding"}},{"name":"death","description":"Emitted upon the shard's child process/worker exiting.","params":[{"name":"process","description":"Child process/worker that exited","type":[[["ChildProcess"]],[["Worker"]]]}],"meta":{"line":402,"file":"Shard.js","path":"src/sharding"}}],"meta":{"line":19,"file":"Shard.js","path":"src/sharding"}},{"name":"ShardClientUtil","description":"Helper class for sharded clients spawned as a child process/worker, such as from a {@link ShardingManager}.\nUtilises IPC to send and receive data to/from the master process and other shards.","props":[{"name":"client","description":"Client for the shard","type":[[["Client"]]],"meta":{"line":18,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"mode","description":"Mode the shard was spawned with","type":[[["ShardingManagerMode"]]],"meta":{"line":24,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"parentPort","description":"Message port for the master process (only when {@link ShardClientUtil#mode} is `worker`)","nullable":true,"type":[[["MessagePort"]]],"meta":{"line":30,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"ids","description":"Array of shard ids of this client","readonly":true,"type":[[["Array","<"],["number",">"]]],"meta":{"line":63,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"count","description":"Total number of shards","readonly":true,"type":[[["number"]]],"meta":{"line":72,"file":"ShardClientUtil.js","path":"src/sharding"}}],"methods":[{"name":"send","description":"Sends a message to the master process.","emits":["Shard#event:message"],"params":[{"name":"message","description":"Message to send","type":[["*"]]}],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":82,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"fetchClientValues","description":"Fetches a client property value of each shard, or a given shard.","see":["{@link ShardingManager#fetchClientValues}"],"examples":["client.shard.fetchClientValues('guilds.cache.size')\n .then(results => console.log(`${results.reduce((prev, val) => prev + val, 0)} total guilds`))\n .catch(console.error);"],"params":[{"name":"prop","description":"Name of the client property to get, using periods for nesting","type":[[["string"]]]},{"name":"shard","description":"Shard to fetch property from, all if undefined","optional":true,"type":[[["number"]]]}],"returns":[[["Promise","<("],["*","|"],["Array","<"],["*",">)>"]]],"meta":{"line":107,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"broadcastEval","description":"Evaluates a script or function on all shards, or a given shard, in the context of the {@link Client}s.","see":["{@link ShardingManager#broadcastEval}"],"examples":["client.shard.broadcastEval(client => client.guilds.cache.size)\n .then(results => console.log(`${results.reduce((prev, val) => prev + val, 0)} total guilds`))\n .catch(console.error);"],"params":[{"name":"script","description":"JavaScript to run on each shard","type":[[["function"]]]},{"name":"options","description":"The options for the broadcast","optional":true,"default":"{}","type":[[["BroadcastEvalOptions"]]]}],"returns":{"types":[[["Promise","<("],["*","|"],["Array","<"],["*",">)>"]]],"description":"Results of the script execution"},"meta":{"line":140,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"respawnAll","description":"Requests a respawn of all shards.","see":["{@link ShardingManager#respawnAll}"],"params":[{"name":"options","description":"Options for respawning shards","optional":true,"type":[[["MultipleShardRespawnOptions"]]]}],"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the message being sent"},"meta":{"line":172,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"_handleMessage","description":"Handles an IPC message.","access":"private","params":[{"name":"message","description":"Message received","type":[["*"]]}],"async":true,"meta":{"line":181,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"_respond","description":"Sends a message to the master process, emitting an error from the client upon failure.","access":"private","params":[{"name":"type","description":"Type of response to send","type":[[["string"]]]},{"name":"message","description":"Message to send","type":[["*"]]}],"meta":{"line":207,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"incrementMaxListeners","description":"Increments max listeners by one for a given emitter, if they are not zero.","access":"private","params":[{"name":"emitter","description":"The emitter that emits the events.","type":[[["EventEmitter"]],[["process"]]]}],"meta":{"line":255,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"decrementMaxListeners","description":"Decrements max listeners by one for a given emitter, if they are not zero.","access":"private","params":[{"name":"emitter","description":"The emitter that emits the events.","type":[[["EventEmitter"]],[["process"]]]}],"meta":{"line":267,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"singleton","description":"Creates/gets the singleton of this class.","scope":"static","params":[{"name":"client","description":"The client to use","type":[[["Client"]]]},{"name":"mode","description":"Mode the shard was spawned with","type":[[["ShardingManagerMode"]]]}],"returns":[[["ShardClientUtil"]]],"meta":{"line":226,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"shardIdForGuildId","description":"Get the shard id for a given guild id.","scope":"static","params":[{"name":"guildId","description":"Snowflake guild id to get shard id for","type":[[["Snowflake"]]]},{"name":"shardCount","description":"Number of shards","type":[[["number"]]]}],"returns":[[["number"]]],"meta":{"line":244,"file":"ShardClientUtil.js","path":"src/sharding"}}],"meta":{"line":12,"file":"ShardClientUtil.js","path":"src/sharding"}},{"name":"ShardingManager","description":"This is a utility class that makes multi-process sharding of a bot an easy and painless experience.\nIt works by spawning a self-contained {@link ChildProcess} or {@link Worker} for each individual shard, each\ncontaining its own instance of your bot's {@link Client}. They all have a line of communication with the master\nprocess, and there are several useful methods that utilise it in order to simplify tasks that are normally difficult\nwith sharding. It can spawn a specific number of shards or the amount that Discord suggests for the bot, and takes a\npath to your main bot script to launch for each one.","extends":[[["EventEmitter"]]],"construct":{"name":"ShardingManager","params":[{"name":"file","description":"Path to your shard script file","type":[[["string"]]]},{"name":"options","description":"Options for the sharding manager","optional":true,"type":[[["ShardingManagerOptions"]]]}]},"props":[{"name":"file","description":"Path to the shard script file","type":[[["string"]]],"meta":{"line":66,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"shardList","description":"List of shards this sharding manager spawns","type":[[["string"]],[["Array","<"],["number",">"]]],"meta":{"line":76,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"totalShards","description":"Amount of shards that all sharding managers spawn in total","type":[[["number"]]],"meta":{"line":96,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"mode","description":"Mode for shards to spawn with","type":[[["ShardingManagerMode"]]],"meta":{"line":111,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"respawn","description":"Whether shards should automatically respawn upon exiting","type":[[["boolean"]]],"meta":{"line":120,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"shardArgs","description":"An array of arguments to pass to shards (only when {@link ShardingManager#mode} is `process`)","type":[[["Array","<"],["string",">"]]],"meta":{"line":126,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"execArgv","description":"An array of arguments to pass to the executable (only when {@link ShardingManager#mode} is `process`)","type":[[["Array","<"],["string",">"]]],"meta":{"line":132,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"token","description":"Token to use for obtaining the automatic shard count, and passing to shards","nullable":true,"type":[[["string"]]],"meta":{"line":138,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"shards","description":"A collection of shards that this manager has spawned","type":[[["Collection","<"],["number",", "],["Shard",">"]]],"meta":{"line":144,"file":"ShardingManager.js","path":"src/sharding"}}],"methods":[{"name":"createShard","description":"Creates a single shard.\nUsing this method is usually not necessary if you use the spawn method.","params":[{"name":"id","description":"Id of the shard to create\nThis is usually not necessary to manually specify.","optional":true,"default":"this.shards.size","type":[[["number"]]]}],"returns":{"types":[[["Shard"]]],"description":"Note that the created shard needs to be explicitly spawned using its spawn method."},"meta":{"line":158,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"spawn","description":"Spawns multiple shards.","params":[{"name":"options","description":"Options for spawning shards","optional":true,"type":[[["MultipleShardSpawnOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["number",", "],["Shard",">>"]]],"meta":{"line":183,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"broadcast","description":"Sends a message to all shards.","params":[{"name":"message","description":"Message to be sent to the shards","type":[["*"]]}],"returns":[[["Promise","<"],["Array","<"],["Shard",">>"]]],"meta":{"line":231,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"broadcastEval","description":"Evaluates a script on all shards, or a given shard, in the context of the {@link Client}s.","params":[{"name":"script","description":"JavaScript to run on each shard","type":[[["function"]]]},{"name":"options","description":"The options for the broadcast","optional":true,"default":"{}","type":[[["BroadcastEvalOptions"]]]}],"returns":{"types":[[["Promise","<("],["*","|"],["Array","<"],["*",">)>"]]],"description":"Results of the script execution"},"meta":{"line":250,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"fetchClientValues","description":"Fetches a client property value of each shard, or a given shard.","examples":["manager.fetchClientValues('guilds.cache.size')\n .then(results => console.log(`${results.reduce((prev, val) => prev + val, 0)} total guilds`))\n .catch(console.error);"],"params":[{"name":"prop","description":"Name of the client property to get, using periods for nesting","type":[[["string"]]]},{"name":"shard","description":"Shard to fetch property from, all if undefined","optional":true,"type":[[["number"]]]}],"returns":[[["Promise","<("],["*","|"],["Array","<"],["*",">)>"]]],"meta":{"line":265,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"_performOnShards","description":"Runs a method with given arguments on all shards, or a given shard.","access":"private","params":[{"name":"method","description":"Method name to run on each shard","type":[[["string"]]]},{"name":"args","description":"Arguments to pass through to the method call","type":[[["Array","<"],["*",">"]]]},{"name":"shard","description":"Shard to run on, all if undefined","optional":true,"type":[[["number"]]]}],"returns":{"types":[[["Promise","<("],["*","|"],["Array","<"],["*",">)>"]]],"description":"Results of the method execution"},"meta":{"line":277,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"respawnAll","description":"Kills all running shards and respawns them.","params":[{"name":"options","description":"Options for respawning shards","optional":true,"type":[[["MultipleShardRespawnOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["number",", "],["Shard",">>"]]],"meta":{"line":307,"file":"ShardingManager.js","path":"src/sharding"}}],"events":[{"name":"shardCreate","description":"Emitted upon creating a shard.","params":[{"name":"shard","description":"Shard that was created","type":[[["Shard"]]]}],"meta":{"line":161,"file":"ShardingManager.js","path":"src/sharding"}}],"meta":{"line":22,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"AnonymousGuild","description":"Bundles common attributes and methods between {@link Guild} and {@link InviteGuild}","extends":[[["BaseGuild"]]],"abstract":true,"props":[{"name":"splash","description":"The hash of the guild invite splash image","nullable":true,"type":[[["string"]]],"meta":{"line":25,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"banner","description":"The hash of the guild banner","nullable":true,"type":[[["string"]]],"meta":{"line":33,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"description","description":"The description of the guild, if any","nullable":true,"type":[[["string"]]],"meta":{"line":41,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"verificationLevel","description":"The verification level of the guild","type":[[["VerificationLevel"]]],"meta":{"line":49,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"vanityURLCode","description":"The vanity invite code of the guild, if any","nullable":true,"type":[[["string"]]],"meta":{"line":57,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"nsfwLevel","description":"The NSFW level of this guild","type":[[["NSFWLevel"]]],"meta":{"line":65,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"premiumSubscriptionCount","description":"The total number of boosts for this server","nullable":true,"type":[[["number"]]],"meta":{"line":73,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"id","description":"The guild's id","type":[[["Snowflake"]]],"meta":{"line":19,"file":"BaseGuild.js","path":"src/structures"}},{"name":"name","description":"The name of this guild","type":[[["string"]]],"meta":{"line":25,"file":"BaseGuild.js","path":"src/structures"}},{"name":"icon","description":"The icon hash of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":31,"file":"BaseGuild.js","path":"src/structures"}},{"name":"features","description":"An array of features available to this guild","type":[[["Array","<"],["Features",">"]]],"meta":{"line":37,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this guild was created at","readonly":true,"type":[[["number"]]],"meta":{"line":45,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdAt","description":"The time this guild was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":54,"file":"BaseGuild.js","path":"src/structures"}},{"name":"nameAcronym","description":"The acronym that shows up in place of a guild icon","readonly":true,"type":[[["string"]]],"meta":{"line":63,"file":"BaseGuild.js","path":"src/structures"}},{"name":"partnered","description":"Whether this guild is partnered","readonly":true,"type":[[["boolean"]]],"meta":{"line":75,"file":"BaseGuild.js","path":"src/structures"}},{"name":"verified","description":"Whether this guild is verified","readonly":true,"type":[[["boolean"]]],"meta":{"line":84,"file":"BaseGuild.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"bannerURL","description":"The URL to this guild's banner.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":84,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"splashURL","description":"The URL to this guild's invite splash image.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"iconURL","description":"The URL to this guild's icon.","inherits":"BaseGuild#iconURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"BaseGuild.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this guild.","inherits":"BaseGuild#fetch","inherited":true,"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":102,"file":"BaseGuild.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the guild's name instead of the Guild object.","inherits":"BaseGuild#toString","inherited":true,"returns":[[["string"]]],"meta":{"line":111,"file":"BaseGuild.js","path":"src/structures"}}],"meta":{"line":11,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"ApplicationCommand","description":"Represents an application command.","extends":[[["Base"]]],"props":[{"name":"id","description":"The command's id","type":[[["Snowflake"]]],"meta":{"line":32,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"applicationId","description":"The parent application's id","type":[[["Snowflake"]]],"meta":{"line":38,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"permissions","description":"The manager for permissions of this command on its guild or arbitrary guilds when the command is global","type":[[["ApplicationCommandPermissionsManager"]]],"meta":{"line":44,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"type","description":"The type of this application command","type":[[["ApplicationCommandType"]]],"meta":{"line":50,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"guild","description":"The guild this command is part of","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":62,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"guildId","description":"The guild's id this command is part of, this may be non-null when `guild` is `null` if the command\nwas fetched from the `ApplicationCommandManager`","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":73,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"name","description":"The name of this command","type":[[["string"]]],"meta":{"line":81,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"nameLocalizations","description":"The name localizations for this command","nullable":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]],"meta":{"line":89,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"nameLocalized","description":"The localized name for this command","nullable":true,"type":[[["string"]]],"meta":{"line":99,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"description","description":"The description of this command","type":[[["string"]]],"meta":{"line":109,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"descriptionLocalizations","description":"The description localizations for this command","nullable":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]],"meta":{"line":117,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"descriptionLocalized","description":"The localized description for this command","nullable":true,"type":[[["string"]]],"meta":{"line":127,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"options","description":"The options of this command","type":[[["Array","<"],["ApplicationCommandOption",">"]]],"meta":{"line":137,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"defaultPermission","description":"Whether the command is enabled by default when the app is added to a guild","deprecated":"Use {@link ApplicationCommand.defaultMemberPermissions} and {@link ApplicationCommand.dmPermission} instead.","type":[[["boolean"]]],"meta":{"line":149,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"defaultMemberPermissions","description":"The default bitfield used to determine whether this command be used in a guild","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":159,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"dmPermission","description":"Whether the command can be used in DMs\nThis property is always `null` on guild commands","nullable":true,"type":[[["boolean"]]],"meta":{"line":172,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"version","description":"Autoincrementing version identifier updated during substantial record changes","type":[[["Snowflake"]]],"meta":{"line":182,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the command was created at","readonly":true,"type":[[["number"]]],"meta":{"line":191,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"createdAt","description":"The time the command was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":200,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"manager","description":"The manager that this command belongs to","readonly":true,"type":[[["ApplicationCommandManager"]]],"meta":{"line":209,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"edit","description":"Edits this application command.","examples":["// Edit the description of this command\ncommand.edit({\n description: 'New description',\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The data to update the command with","type":[[["Partial","<"],["ApplicationCommandData",">"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":273,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setName","description":"Edits the name of this ApplicationCommand","params":[{"name":"name","description":"The new name of the command","type":[[["string"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":282,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setNameLocalizations","description":"Edits the localized names of this ApplicationCommand","examples":["// Edit the name localizations of this command\ncommand.setLocalizedNames({\n 'en-GB': 'test',\n 'pt-BR': 'teste',\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"nameLocalizations","description":"The new localized names for the command","type":[[["Object","<"],["Locale",", "],["string",">"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":299,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setDescription","description":"Edits the description of this ApplicationCommand","params":[{"name":"description","description":"The new description of the command","type":[[["string"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":308,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setDescriptionLocalizations","description":"Edits the localized descriptions of this ApplicationCommand","examples":["// Edit the description localizations of this command\ncommand.setLocalizedDescriptions({\n 'en-GB': 'A test command',\n 'pt-BR': 'Um comando de teste',\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"descriptionLocalizations","description":"The new localized descriptions for the command","type":[[["Object","<"],["Locale",", "],["string",">"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":325,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setDefaultPermission","description":"Edits the default permission of this ApplicationCommand","deprecated":"Use {@link ApplicationCommand#setDefaultMemberPermissions} and {@link ApplicationCommand#setDMPermission} instead.","params":[{"name":"defaultPermission","description":"The default permission for this command","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":336,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setDefaultMemberPermissions","description":"Edits the default member permissions of this ApplicationCommand","params":[{"name":"defaultMemberPermissions","description":"The default member permissions required to run this command","nullable":true,"type":[[["PermissionResolvable"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":347,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setDMPermission","description":"Edits the DM permission of this ApplicationCommand","params":[{"name":"dmPermission","description":"Whether the command can be used in DMs","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":356,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"setOptions","description":"Edits the options of this ApplicationCommand","params":[{"name":"options","description":"The options to set for this command","type":[[["Array","<"],["ApplicationCommandOptionData",">"]]]}],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":365,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"delete","description":"Deletes this command.","examples":["// Delete this command\ncommand.delete()\n .then(console.log)\n .catch(console.error);"],"returns":[[["Promise","<"],["ApplicationCommand",">"]]],"meta":{"line":378,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"equals","description":"Whether this command equals another command. It compares all properties, so for most operations\nit is advisable to just compare `command.id === command2.id` as it is much faster and is often\nwhat most users need.","params":[{"name":"command","description":"The command to compare with","type":[[["ApplicationCommand"]],[["ApplicationCommandData"]],[["APIApplicationCommand"]]]},{"name":"enforceOptionOrder","description":"Whether to strictly check that options and choices are in the same\norder in the array The client may not always respect this ordering!","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"sendSlashCommand","description":"Send Slash command to channel","params":[{"name":"message","description":"Discord Message","type":[[["Message"]]]},{"name":"subCommandArray","description":"SubCommand Array","type":[[["Array","<"],["string",">"]]]},{"name":"options","description":"The options to Slash Command","type":[[["Array","<"],["any",">"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":608,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"sendContextMenu","description":"Message Context Menu","params":[{"name":"message","description":"Discord Message","type":[[["Message"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":954,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"optionsEqual","description":"Recursively checks that all options for an {@link ApplicationCommand} are equal to the provided options.\nIn most cases it is better to compare using {@link ApplicationCommand#equals}","scope":"static","params":[{"name":"existing","description":"The options on the existing command,\nshould be {@link ApplicationCommand#options}","type":[[["Array","<"],["ApplicationCommandOptionData",">"]]]},{"name":"options","description":"The options to compare against","type":[[["Array","<"],["ApplicationCommandOptionData",">"]],[["Array","<"],["APIApplicationCommandOption",">"]]]},{"name":"enforceOptionOrder","description":"Whether to strictly check that options and choices are in the same\norder in the array The client may not always respect this ordering!","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["boolean"]]],"meta":{"line":441,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"_optionEquals","description":"Checks that an option for an {@link ApplicationCommand} is equal to the provided option\nIn most cases it is better to compare using {@link ApplicationCommand#equals}","scope":"static","access":"private","params":[{"name":"existing","description":"The option on the existing command,\nshould be from {@link ApplicationCommand#options}","type":[[["ApplicationCommandOptionData"]]]},{"name":"option","description":"The option to compare against","type":[[["ApplicationCommandOptionData"]],[["APIApplicationCommandOption"]]]},{"name":"enforceOptionOrder","description":"Whether to strictly check that options or choices are in the same\norder in their array The client may not always respect this ordering!","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["boolean"]]],"meta":{"line":467,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"transformOption","description":"Transforms an {@link ApplicationCommandOptionData} object into something that can be used with the API.","scope":"static","access":"private","params":[{"name":"option","description":"The option to transform","type":[[["ApplicationCommandOptionData"]],[["ApplicationCommandOption"]]]},{"name":"received","description":"Whether this option has been received from Discord","optional":true,"type":[[["boolean"]]]}],"returns":[[["APIApplicationCommandOption"]]],"meta":{"line":560,"file":"ApplicationCommand.js","path":"src/structures"}}],"meta":{"line":24,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"AutocompleteInteraction","description":"Represents an autocomplete interaction.","extends":[[["Interaction"]]],"props":[{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":15,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"commandId","description":"The invoked application command's id","type":[[["Snowflake"]]],"meta":{"line":25,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"commandName","description":"The invoked application command's name","type":[[["string"]]],"meta":{"line":31,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"responded","description":"Whether this interaction has already received a response","type":[[["boolean"]]],"meta":{"line":37,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"options","description":"The options passed to the command","type":[[["CommandInteractionOptionResolver"]]],"meta":{"line":43,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"command","description":"The invoked application command, if it was fetched before","nullable":true,"type":[[["ApplicationCommand"]]],"meta":{"line":53,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"transformOption","description":"Transforms an option received from the API.","access":"private","params":[{"name":"option","description":"The received option","type":[[["APIApplicationCommandOption"]]]}],"returns":[[["CommandInteractionOption"]]],"meta":{"line":64,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"respond","description":"Sends results for the autocomplete of this interaction.","examples":["// respond to autocomplete interaction\ninteraction.respond([\n {\n name: 'Option 1',\n value: 'option1',\n },\n])\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the autocomplete","type":[[["Array","<"],["ApplicationCommandOptionChoiceData",">"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":92,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":11,"file":"AutocompleteInteraction.js","path":"src/structures"}},{"name":"AutoModerationActionExecution","description":"Represents the structure of an executed action when an {@link AutoModerationRule} is triggered.","props":[{"name":"guild","description":"The guild where this action was executed from.","type":[[["Guild"]]],"meta":{"line":14,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"action","description":"The action that was executed.","type":[[["AutoModerationAction"]]],"meta":{"line":20,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"ruleId","description":"The id of the auto moderation rule this action belongs to.","type":[[["Snowflake"]]],"meta":{"line":26,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"ruleTriggerType","description":"The trigger type of the auto moderation rule which was triggered.","type":[[["AutoModerationRuleTriggerType"]]],"meta":{"line":32,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"userId","description":"The id of the user that triggered this action.","type":[[["Snowflake"]]],"meta":{"line":38,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel where this action was triggered from.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":44,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"messageId","description":"The id of the message that triggered this action.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":51,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"alertSystemMessageId","description":"The id of any system auto moderation messages posted as a result of this action.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":57,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"content","description":"The content that triggered this action.\nThis property requires the {@link Intents.FLAGS.MESSAGE_CONTENT} privileged gateway intent.","type":[[["string"]]],"meta":{"line":64,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"matchedKeyword","description":"The word or phrase configured in the rule that triggered this action.","nullable":true,"type":[[["string"]]],"meta":{"line":70,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"matchedContent","description":"The substring in content that triggered this action.","nullable":true,"type":[[["string"]]],"meta":{"line":76,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"autoModerationRule","description":"The auto moderation rule this action belongs to.","readonly":true,"nullable":true,"type":[[["AutoModerationRule"]]],"meta":{"line":84,"file":"AutoModerationActionExecution.js","path":"src/structures"}}],"meta":{"line":8,"file":"AutoModerationActionExecution.js","path":"src/structures"}},{"name":"AutoModerationRule","description":"Represents an auto moderation rule.","extends":[[["Base"]]],"props":[{"name":"id","description":"The id of this auto moderation rule.","type":[[["Snowflake"]]],"meta":{"line":24,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"guild","description":"The guild this auto moderation rule is for.","type":[[["Guild"]]],"meta":{"line":30,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"creatorId","description":"The user that created this auto moderation rule.","type":[[["Snowflake"]]],"meta":{"line":36,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"triggerType","description":"The trigger type of this auto moderation rule.","type":[[["AutoModerationRuleTriggerType"]]],"meta":{"line":42,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"name","description":"The name of this auto moderation rule.","type":[[["string"]]],"meta":{"line":53,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"eventType","description":"The event type of this auto moderation rule.","type":[[["AutoModerationRuleEventType"]]],"meta":{"line":61,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"triggerMetadata","description":"The trigger metadata of the rule.","type":[[["AutoModerationTriggerMetadata"]]],"meta":{"line":83,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"actions","description":"The actions of this auto moderation rule.","type":[[["Array","<"],["AutoModerationAction",">"]]],"meta":{"line":113,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"enabled","description":"Whether this auto moderation rule is enabled.","type":[[["boolean"]]],"meta":{"line":128,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"exemptRoles","description":"The roles exempt by this auto moderation rule.","type":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":136,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"exemptChannels","description":"The channels exempt by this auto moderation rule.","type":[[["Collection","<"],["Snowflake",", ("],["GuildChannel","|"],["ThreadChannel",")>"]]],"meta":{"line":146,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"edit","description":"Edits this auto moderation rule.","params":[{"name":"options","description":"Options for editing this auto moderation rule","type":[[["AutoModerationRuleEditOptions"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":157,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"delete","description":"Deletes this auto moderation rule.","params":[{"name":"reason","description":"The reason for deleting this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setName","description":"Sets the name for this auto moderation rule.","params":[{"name":"name","description":"The name of this auto moderation rule","type":[[["string"]]]},{"name":"reason","description":"The reason for changing the name of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":176,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setEventType","description":"Sets the event type for this auto moderation rule.","params":[{"name":"eventType","description":"The event type of this auto moderation rule","type":[[["AutoModerationRuleEventType"]]]},{"name":"reason","description":"The reason for changing the event type of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":186,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setKeywordFilter","description":"Sets the keyword filter for this auto moderation rule.","params":[{"name":"keywordFilter","description":"The keyword filter of this auto moderation rule","type":[[["Array","<"],["string",">"]]]},{"name":"reason","description":"The reason for changing the keyword filter of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":196,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setRegexPatterns","description":"Sets the regular expression patterns for this auto moderation rule.","params":[{"name":"regexPatterns","description":"The regular expression patterns of this auto moderation rule\nOnly Rust-flavored regular expressions are supported.","type":[[["Array","<"],["string",">"]]]},{"name":"reason","description":"The reason for changing the regular expression patterns of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":207,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setPresets","description":"Sets the presets for this auto moderation rule.","params":[{"name":"presets","description":"The presets of this auto moderation rule","type":[[["Array","<"],["AutoModerationRuleKeywordPresetType",">"]]]},{"name":"reason","description":"The reason for changing the presets of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":217,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setAllowList","description":"Sets the allow list for this auto moderation rule.","params":[{"name":"allowList","description":"The allow list of this auto moderation rule","type":[[["Array","<"],["string",">"]]]},{"name":"reason","description":"The reason for changing the allow list of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":227,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setMentionTotalLimit","description":"Sets the mention total limit for this auto moderation rule.","params":[{"name":"mentionTotalLimit","description":"The mention total limit of this auto moderation rule","type":[[["number"]]]},{"name":"reason","description":"The reason for changing the mention total limit of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":237,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setMentionRaidProtectionEnabled","description":"Sets whether to enable mention raid protection for this auto moderation rule.","params":[{"name":"mentionRaidProtectionEnabled","description":"Whether to enable mention raid protection for this auto moderation rule","type":[[["boolean"]]]},{"name":"reason","description":"The reason for changing the mention raid protection of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":248,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setActions","description":"Sets the actions for this auto moderation rule.","params":[{"name":"actions","description":"The actions of this auto moderation rule","type":[[["Array","<"],["AutoModerationActionOptions",">"]]]},{"name":"reason","description":"The reason for changing the actions of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":258,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setEnabled","description":"Sets whether this auto moderation rule should be enabled.","params":[{"name":"enabled","description":"Whether to enable this auto moderation rule","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"The reason for enabling or disabling this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":268,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setExemptRoles","description":"Sets the exempt roles for this auto moderation rule.","params":[{"name":"exemptRoles","description":"The exempt roles of this auto moderation rule","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"reason","description":"The reason for changing the exempt roles of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":278,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"setExemptChannels","description":"Sets the exempt channels for this auto moderation rule.","params":[{"name":"exemptChannels","description":"The exempt channels of this auto moderation rule","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["GuildChannel","|"],["ThreadChannel",")>"]],[["Array","<"],["GuildChannelResolvable",">"]]]},{"name":"reason","description":"The reason for changing the exempt channels of this auto moderation rule","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["AutoModerationRule",">"]]],"meta":{"line":289,"file":"AutoModerationRule.js","path":"src/structures"}}],"meta":{"line":16,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"Base","description":"Represents a data model that is identifiable by a Snowflake (i.e. Discord API data models).","abstract":true,"props":[{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"meta":{"line":9,"file":"Base.js","path":"src/structures"}},{"name":"BaseCommandInteraction","description":"Represents a command interaction.","extends":[[["Interaction"]]],"implements":[[["InteractionResponses"]]],"abstract":true,"props":[{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":20,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandId","description":"The invoked application command's id","type":[[["Snowflake"]]],"meta":{"line":30,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandName","description":"The invoked application command's name","type":[[["string"]]],"meta":{"line":36,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":42,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":48,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":54,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":60,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"command","description":"The invoked application command, if it was fetched before","nullable":true,"type":[[["ApplicationCommand"]]],"meta":{"line":67,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"transformResolved","description":"Transforms the resolved received from the API.","access":"private","params":[{"name":"resolved","description":"The received resolved objects","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionResolvedData"]]],"meta":{"line":89,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"transformOption","description":"Transforms an option received from the API.","access":"private","params":[{"name":"option","description":"The received option","type":[[["APIApplicationCommandOption"]]]},{"name":"resolved","description":"The resolved interaction data","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionOption"]]],"meta":{"line":162,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferReply","description":"Defers the reply to this interaction.","implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":16,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"BaseGuild","description":"The base class for {@link Guild}, {@link OAuth2Guild} and {@link InviteGuild}.","extends":[[["Base"]]],"abstract":true,"props":[{"name":"id","description":"The guild's id","type":[[["Snowflake"]]],"meta":{"line":19,"file":"BaseGuild.js","path":"src/structures"}},{"name":"name","description":"The name of this guild","type":[[["string"]]],"meta":{"line":25,"file":"BaseGuild.js","path":"src/structures"}},{"name":"icon","description":"The icon hash of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":31,"file":"BaseGuild.js","path":"src/structures"}},{"name":"features","description":"An array of features available to this guild","type":[[["Array","<"],["Features",">"]]],"meta":{"line":37,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this guild was created at","readonly":true,"type":[[["number"]]],"meta":{"line":45,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdAt","description":"The time this guild was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":54,"file":"BaseGuild.js","path":"src/structures"}},{"name":"nameAcronym","description":"The acronym that shows up in place of a guild icon","readonly":true,"type":[[["string"]]],"meta":{"line":63,"file":"BaseGuild.js","path":"src/structures"}},{"name":"partnered","description":"Whether this guild is partnered","readonly":true,"type":[[["boolean"]]],"meta":{"line":75,"file":"BaseGuild.js","path":"src/structures"}},{"name":"verified","description":"Whether this guild is verified","readonly":true,"type":[[["boolean"]]],"meta":{"line":84,"file":"BaseGuild.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"iconURL","description":"The URL to this guild's icon.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"BaseGuild.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this guild.","async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":102,"file":"BaseGuild.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the guild's name instead of the Guild object.","returns":[[["string"]]],"meta":{"line":111,"file":"BaseGuild.js","path":"src/structures"}}],"meta":{"line":11,"file":"BaseGuild.js","path":"src/structures"}},{"name":"BaseGuildEmoji","description":"Parent class for {@link GuildEmoji} and {@link GuildPreviewEmoji}.","extends":[[["Emoji"]]],"abstract":true,"props":[{"name":"guild","description":"The guild this emoji is a part of","type":[[["Guild"]],[["GuildPreview"]]],"meta":{"line":18,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"requiresColons","description":"Whether or not this emoji requires colons surrounding it","nullable":true,"type":[[["boolean"]]],"meta":{"line":35,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"managed","description":"Whether this emoji is managed by an external service","nullable":true,"type":[[["boolean"]]],"meta":{"line":43,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"available","description":"Whether this emoji is available","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"animated","description":"Whether or not the emoji is animated","nullable":true,"type":[[["boolean"]]],"meta":{"line":34,"file":"Emoji.js","path":"src/structures"}},{"name":"name","description":"The emoji's name","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Emoji.js","path":"src/structures"}},{"name":"id","description":"The emoji's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Emoji.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":54,"file":"Emoji.js","path":"src/structures"}},{"name":"identifier","description":"The identifier of this emoji, used for message reactions","readonly":true,"type":[[["string"]]],"meta":{"line":84,"file":"Emoji.js","path":"src/structures"}},{"name":"url","description":"The URL to the emoji file if it's a custom emoji","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":94,"file":"Emoji.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":103,"file":"Emoji.js","path":"src/structures"}},{"name":"createdAt","description":"The time the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":112,"file":"Emoji.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the text required to form a graphical emoji on Discord\ninstead of the Emoji object.","inherits":"Emoji#toString","inherited":true,"examples":["// Send a custom emoji from a guild:\nconst emoji = guild.emojis.cache.first();\nmsg.channel.send(`Hello! ${emoji}`);","// Send the emoji used in a reaction to the channel the reaction is part of\nreaction.message.channel.send(`The emoji used was: ${reaction.emoji}`);"],"returns":[[["string"]]],"meta":{"line":128,"file":"Emoji.js","path":"src/structures"}}],"meta":{"line":10,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"BaseGuildTextChannel","description":"Represents a text-based guild channel on Discord.","extends":[[["GuildChannel"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":22,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":28,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"threads","description":"A manager of the threads belonging to this channel","type":[[["GuildTextThreadManager"]]],"meta":{"line":34,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":40,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"topic","description":"The topic of the text channel","nullable":true,"type":[[["string"]]],"meta":{"line":53,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in the channel, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":65,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastPinTimestamp","description":"The timestamp when the last pinned message was pinned, if there was one","nullable":true,"type":[[["number"]]],"meta":{"line":73,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"defaultAutoArchiveDuration","description":"The default auto archive duration for newly created threads in this channel","nullable":true,"type":[[["number"]]],"meta":{"line":81,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"defaultThreadRateLimitPerUser","description":"The initial rate limit per user (slowmode) to set on newly created threads in a channel.","nullable":true,"type":[[["number"]]],"meta":{"line":89,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinAt","description":"The date when the last pinned message was pinned, if there was one","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":68,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":274,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"setDefaultAutoArchiveDuration","description":"Sets the default auto archive duration for all newly created threads in this channel.","params":[{"name":"defaultAutoArchiveDuration","description":"The new default auto archive duration","type":[[["ThreadAutoArchiveDuration"]]]},{"name":"reason","description":"Reason for changing the channel's default auto archive duration","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["TextChannel",">"]]],"meta":{"line":105,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"setType","description":"Sets the type of this channel (only conversion between text and news is supported)","params":[{"name":"type","description":"The new channel type","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the channel's type","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":115,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"setTopic","description":"Sets a new topic for the guild channel.","examples":["// Set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.error);"],"params":[{"name":"topic","description":"The new topic for the guild channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's topic","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":130,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"createInvite","description":"Creates an invite to this guild channel.","examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":168,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":178,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","implements":["TextBasedChannel#createMessageComponentCollector"],"examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","implements":["TextBasedChannel#awaitMessageComponent"],"examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"bulkDelete","description":"Bulk deletes given messages that are newer than two weeks.","implements":["TextBasedChannel#bulkDelete"],"examples":["// Bulk delete messages\nchannel.bulkDelete(5)\n .then(messages => console.log(`Bulk deleted ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"messages","description":"Messages or number of messages to delete","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]],[["Array","<"],["MessageResolvable",">"]],[["number"]]]},{"name":"filterOld","description":"Filter messages to remove those which are older than two weeks automatically","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Collection","<"],["Snowflake",", ("],["Message","|"],["undefined",")>>"]]],"description":"Returns the deleted messages"},"meta":{"line":319,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":368,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":393,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":403,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":413,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"searchInteraction","description":"Search Slash Command (return raw data)","implements":["TextBasedChannel#searchInteraction"],"params":[{"name":"applicationId","description":"Application ID","type":[[["Snowflake"]]]},{"name":"type","description":"Command Type","default":"CHAT_INPUT","nullable":true,"type":[[["ApplicationCommandType"]]]}],"returns":[[["Object"]]],"meta":{"line":423,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendSlash","description":"Send Slash to this channel","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/SlashCommand.md}"],"implements":["TextBasedChannel#sendSlash"],"examples":["// Send a basic slash\nchannel.sendSlash('botid', 'ping')\n .then(console.log)\n .catch(console.error);","// Send a remote file\nchannel.sendSlash('botid', 'emoji upload', 'https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048', 'test')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"bot","description":"Bot user (BotID, not applicationID)","type":[[["UserResolvable"]]]},{"name":"commandString","description":"Command name (and sub / group formats)","type":[[["string"]]]},{"name":"args","description":"Command arguments","variable":true,"type":[[["any"]],[["Array","<"],["any",">"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":463,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":14,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"BaseGuildVoiceChannel","description":"Represents a voice-based guild channel on Discord.","extends":[[["GuildChannel"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":23,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":29,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":35,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"bitrate","description":"The bitrate of this voice-based channel","type":[[["number"]]],"meta":{"line":48,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"rtcRegion","description":"The RTC region for this voice-based channel. This region is automatically selected if `null`.","nullable":true,"type":[[["string"]]],"meta":{"line":56,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"userLimit","description":"The maximum amount of users allowed in this channel.","type":[[["number"]]],"meta":{"line":64,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"videoQualityMode","description":"The camera video quality mode of the channel.","nullable":true,"type":[[["VideoQualityMode"]]],"meta":{"line":72,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in the channel, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":82,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for this channel in seconds","type":[[["number"]]],"meta":{"line":94,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"members","description":"The members in this voice-based channel","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":107,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"full","description":"Checks if the voice-based channel is full","readonly":true,"type":[[["boolean"]]],"meta":{"line":122,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"joinable","description":"Whether the channel is joinable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":131,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"createInvite","description":"Creates an invite to this guild channel.","examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":155,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":165,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setBitrate","description":"Sets the bitrate of the channel.","examples":["// Set the bitrate of a voice channel\nvoiceChannel.setBitrate(48_000)\n .then(vc => console.log(`Set bitrate to ${vc.bitrate}bps for ${vc.name}`))\n .catch(console.error);"],"params":[{"name":"bitrate","description":"The new bitrate","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's bitrate","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":180,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setRTCRegion","description":"Sets the RTC region of the channel.","examples":["// Set the RTC region to sydney\nchannel.setRTCRegion('sydney');","// Remove a fixed region for this channel - let Discord decide automatically\nchannel.setRTCRegion(null, 'We want to let Discord decide.');"],"params":[{"name":"rtcRegion","description":"The new region of the channel. Set to `null` to remove a specific region for the channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"The reason for modifying this region.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["BaseGuildVoiceChannel",">"]]],"meta":{"line":196,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setUserLimit","description":"Sets the user limit of the channel.","examples":["// Set the user limit of a voice channel\nvoiceChannel.setUserLimit(42)\n .then(vc => console.log(`Set user limit to ${vc.userLimit} for ${vc.name}`))\n .catch(console.error);"],"params":[{"name":"userLimit","description":"The new user limit","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the user limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":211,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setVideoQualityMode","description":"Sets the camera video quality mode of the channel.","params":[{"name":"videoQualityMode","description":"The new camera video quality mode.","type":[[["VideoQualityMode"]],[["number"]]]},{"name":"reason","description":"Reason for changing the camera video quality mode.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":221,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","implements":["TextBasedChannel#createMessageComponentCollector"],"examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","implements":["TextBasedChannel#awaitMessageComponent"],"examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"bulkDelete","description":"Bulk deletes given messages that are newer than two weeks.","implements":["TextBasedChannel#bulkDelete"],"examples":["// Bulk delete messages\nchannel.bulkDelete(5)\n .then(messages => console.log(`Bulk deleted ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"messages","description":"Messages or number of messages to delete","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]],[["Array","<"],["MessageResolvable",">"]],[["number"]]]},{"name":"filterOld","description":"Filter messages to remove those which are older than two weeks automatically","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Collection","<"],["Snowflake",", ("],["Message","|"],["undefined",")>>"]]],"description":"Returns the deleted messages"},"meta":{"line":319,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":368,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":393,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":403,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":413,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":16,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"BaseMessageComponent","description":"Represents an interactive component of a Message or Modal. It should not be necessary to construct this directly.\nSee {@link MessageComponent}","construct":{"name":"BaseMessageComponent","params":[{"name":"data","description":"The options for this component","optional":true,"default":"{}","type":[[["BaseMessageComponent"]],[["BaseMessageComponentOptions"]]]}]},"props":[{"name":"type","description":"The type of this component","nullable":true,"type":[[["MessageComponentType"]]],"meta":{"line":52,"file":"BaseMessageComponent.js","path":"src/structures"}}],"methods":[{"name":"create","description":"Constructs a component based on the type of the incoming data","scope":"static","access":"private","params":[{"name":"data","description":"Data for a MessageComponent","type":[[["MessageComponentOptions"]]]},{"name":"client","description":"Client constructing this component","optional":true,"type":[[["Client"]],[["WebhookClient"]]]}],"returns":{"types":[[["MessageComponent"]],[["ModalComponent"]]],"nullable":true},"meta":{"line":62,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"resolveType","description":"Resolves the type of a component","scope":"static","access":"private","params":[{"name":"type","description":"The type to resolve","type":[[["MessageComponentTypeResolvable"]]]}],"returns":[[["MessageComponentType"]]],"meta":{"line":109,"file":"BaseMessageComponent.js","path":"src/structures"}}],"meta":{"line":10,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"ButtonInteraction","description":"Represents a button interaction.","extends":[[["MessageComponentInteraction"]]],"props":[{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":17,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"message","description":"The message to which the component was attached","type":[[["Message"]],[["APIMessage"]]],"meta":{"line":27,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"customId","description":"The custom id of the component which was interacted with","type":[[["string"]]],"meta":{"line":33,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"componentType","description":"The type of component which was interacted with","type":[[["string"]]],"meta":{"line":39,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":45,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":57,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":63,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"component","description":"The component which was interacted with","readonly":true,"type":[[["MessageActionRowComponent"]],[["APIMessageActionRowComponent"]]],"meta":{"line":78,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"MessageComponentInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"MessageComponentInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"MessageComponentInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"MessageComponentInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"MessageComponentInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"MessageComponentInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","inherits":"MessageComponentInteraction#deferUpdate","inherited":true,"implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","inherits":"MessageComponentInteraction#update","inherited":true,"implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"MessageComponentInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"MessageComponentInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":9,"file":"ButtonInteraction.js","path":"src/structures"}},{"name":"Call","description":"Represents a call","extends":[[["Base"]]],"props":[{"name":"channelId","description":"The channel ID of the call","type":[[["Snowflake"]]],"meta":{"line":17,"file":"Call.js","path":"src/structures"}},{"name":"ringing","description":"The list of user ID who is ringing","type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":23,"file":"Call.js","path":"src/structures"}},{"name":"region","description":"The region of the call","type":[[["string"]]],"meta":{"line":33,"file":"Call.js","path":"src/structures"}},{"name":"channel","description":"The channel of the call","type":[[["DMChannel"]],[["PartialGroupDMChannel"]]],"meta":{"line":45,"file":"Call.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"setVoiceRegion","description":"Sets the voice region of the call","params":[{"name":"region","description":"Region of the call","type":[[["string"]]]}],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":53,"file":"Call.js","path":"src/structures"}}],"meta":{"line":10,"file":"Call.js","path":"src/structures"}},{"name":"CategoryChannel","description":"Represents a guild category channel on Discord.","extends":[[["GuildChannel"]]],"props":[{"name":"parentId","description":"The id of the parent of this channel.","type":[[["null"]]],"meta":{"line":10,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"parent","description":"The parent of this channel.","readonly":true,"type":[[["null"]]],"meta":{"line":16,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"children","description":"Channels that are a part of this category","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildChannel",">"]]],"meta":{"line":28,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":274,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"setParent","description":"Sets the category parent of this channel.\nIt is not possible to set the parent of a CategoryChannel.","params":[{"name":"channel","description":"The channel to set as parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":32,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"createChannel","description":"Creates a new channel within this category.\nYou cannot create a channel of type `GUILD_CATEGORY` inside a CategoryChannel.","params":[{"name":"name","description":"The name of the new channel","type":[[["string"]]]},{"name":"options","description":"Options for creating the new channel","type":[[["CategoryCreateChannelOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":77,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":9,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"Channel","description":"Represents any channel on Discord.","extends":[[["Base"]]],"abstract":true,"props":[{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","examples":["// Delete the channel\nchannel.delete()\n .then(console.log)\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":143,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":32,"file":"Channel.js","path":"src/structures"}},{"name":"ClientApplication","description":"Represents a client application.","extends":[[["Application"]]],"props":[{"name":"commands","description":"The application command manager for this application","type":[[["ApplicationCommandManager"]]],"meta":{"line":30,"file":"ClientApplication.js","path":"src/structures"}},{"name":"tags","description":"The tags this application has (max of 5)","type":[[["Array","<"],["string",">"]]],"meta":{"line":40,"file":"ClientApplication.js","path":"src/structures"}},{"name":"installParams","description":"Settings for this application's default in-app authorization","nullable":true,"type":[[["ClientApplicationInstallParams"]]],"meta":{"line":47,"file":"ClientApplication.js","path":"src/structures"}},{"name":"customInstallURL","description":"This application's custom installation URL","nullable":true,"type":[[["string"]]],"meta":{"line":60,"file":"ClientApplication.js","path":"src/structures"}},{"name":"flags","description":"The flags this application has","type":[[["ApplicationFlags"]]],"meta":{"line":70,"file":"ClientApplication.js","path":"src/structures"}},{"name":"approximateGuildCount","description":"An approximate amount of guilds this application is in.","nullable":true,"type":[[["number"]]],"meta":{"line":78,"file":"ClientApplication.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild associated with this application.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":88,"file":"ClientApplication.js","path":"src/structures"}},{"name":"cover","description":"The hash of the application's cover image","nullable":true,"type":[[["string"]]],"meta":{"line":98,"file":"ClientApplication.js","path":"src/structures"}},{"name":"rpcOrigins","description":"The application's RPC origins, if enabled","type":[[["Array","<"],["string",">"]]],"meta":{"line":108,"file":"ClientApplication.js","path":"src/structures"}},{"name":"botRequireCodeGrant","description":"If this application's bot requires a code grant when using the OAuth2 flow","nullable":true,"type":[[["boolean"]]],"meta":{"line":118,"file":"ClientApplication.js","path":"src/structures"}},{"name":"botPublic","description":"If this application's bot is public","nullable":true,"type":[[["boolean"]]],"meta":{"line":128,"file":"ClientApplication.js","path":"src/structures"}},{"name":"popularCommands","description":"List of popular command","nullable":true,"type":[[["Collection","<"],["Snowflake",", "],["ApplicationCommand",">"]]],"meta":{"line":138,"file":"ClientApplication.js","path":"src/structures"}},{"name":"owner","description":"The owner of this OAuth application","nullable":true,"type":[[["User"]],[["Team"]]],"meta":{"line":148,"file":"ClientApplication.js","path":"src/structures"}},{"name":"guild","description":"The guild associated with this application.","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":160,"file":"ClientApplication.js","path":"src/structures"}},{"name":"partial","description":"Whether this application is partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":169,"file":"ClientApplication.js","path":"src/structures"}},{"name":"id","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":29,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"name","description":"The name of the application","nullable":true,"type":[[["string"]]],"meta":{"line":36,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"description","description":"The application's description","nullable":true,"type":[[["string"]]],"meta":{"line":46,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"icon","description":"The application's icon hash","nullable":true,"type":[[["string"]]],"meta":{"line":56,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"roleConnectionsVerificationURL","description":"This application's role connection verification entry point URL","nullable":true,"type":[[["string"]]],"meta":{"line":66,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"createdTimestamp","description":"The timestamp the application was created at","readonly":true,"type":[[["number"]]],"meta":{"line":77,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"createdAt","description":"The time the application was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":86,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"fetch","description":"Obtains this application from Discord.","async":true,"returns":[[["Promise","<"],["ClientApplication",">"]]],"meta":{"line":177,"file":"ClientApplication.js","path":"src/structures"}},{"name":"fetchRoleConnectionMetadataRecords","description":"Gets this application's role connection metadata records","async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationRoleConnectionMetadata",">>"]]],"meta":{"line":194,"file":"ClientApplication.js","path":"src/structures"}},{"name":"editRoleConnectionMetadataRecords","description":"Updates this application's role connection metadata records","params":[{"name":"records","description":"The new role connection metadata records","type":[[["Array","<"],["ApplicationRoleConnectionMetadataEditOptions",">"]]]}],"async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationRoleConnectionMetadata",">>"]]],"meta":{"line":215,"file":"ClientApplication.js","path":"src/structures"}},{"name":"invite","description":"Invites this application to a guild / server","inherits":"Application#invite","inherited":true,"params":[{"name":"guild_id","description":"The id of the guild that you want to invite the bot to","type":[[["Snowflake"]]]},{"name":"permissions","description":"The permissions for the bot in number form (the default is 8 / Administrator)","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"captcha","description":"The captcha key to add","optional":true,"default":null,"type":[[["string"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"nothing :)"},"meta":{"line":97,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"iconURL","description":"A link to the application's icon.","inherits":"Application#iconURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":127,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"coverURL","description":"A link to this application's cover image.","inherits":"Application#coverURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":137,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"fetchAssets","description":"Gets the application's rich presence assets.","inherits":"Application#fetchAssets","inherited":true,"deprecated":"This will be removed in the next major as it is unsupported functionality.","async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationAsset",">>"]]],"meta":{"line":155,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the application's name instead of the\nApplication object.","inherits":"Application#toString","inherited":true,"examples":["// Logs: Application name: My App\nconsole.log(`Application name: ${application}`);"],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":181,"file":"Application.js","path":"src/structures/interfaces"}}],"meta":{"line":22,"file":"ClientApplication.js","path":"src/structures"}},{"name":"ClientPresence","description":"Represents the client's presence.","extends":[[["Presence"]]],"props":[{"name":"userId","description":"The presence's user id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Presence.js","path":"src/structures"}},{"name":"guild","description":"The guild this presence is in","nullable":true,"type":[[["Guild"]]],"meta":{"line":57,"file":"Presence.js","path":"src/structures"}},{"name":"user","description":"The user of this presence","readonly":true,"nullable":true,"type":[[["User"]]],"meta":{"line":67,"file":"Presence.js","path":"src/structures"}},{"name":"member","description":"The member of this presence","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":76,"file":"Presence.js","path":"src/structures"}},{"name":"status","description":"The status of this presence","type":[[["PresenceStatus"]]],"meta":{"line":86,"file":"Presence.js","path":"src/structures"}},{"name":"activities","description":"The activities of this presence","type":[[["Array","<"],["Activity",">"]]],"meta":{"line":96,"file":"Presence.js","path":"src/structures"}},{"name":"clientStatus","description":"The devices this presence is on","nullable":true,"type":[[["Object"]]],"props":[{"name":"web","description":"The current presence in the web application","nullable":true,"type":[[["ClientPresenceStatus"]]]},{"name":"mobile","description":"The current presence in the mobile application","nullable":true,"type":[[["ClientPresenceStatus"]]]},{"name":"desktop","description":"The current presence in the desktop application","nullable":true,"type":[[["ClientPresenceStatus"]]]}],"meta":{"line":121,"file":"Presence.js","path":"src/structures"}},{"name":"lastModified","description":"The timestamp this presence was last updated","type":[[["number"]]],"meta":{"line":131,"file":"Presence.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"set","description":"Sets the client's presence","params":[{"name":"presence","description":"The data to set the presence to","type":[[["PresenceData"]]]}],"returns":[[["ClientPresence"]]],"meta":{"line":23,"file":"ClientPresence.js","path":"src/structures"}},{"name":"_parse","description":"Parses presence data into a packet ready to be sent to Discord","access":"private","params":[{"name":"presence","description":"The data to parse","type":[[["PresenceData"]]]}],"returns":[[["APIPresence"]]],"meta":{"line":47,"file":"ClientPresence.js","path":"src/structures"}},{"name":"equals","description":"Whether this presence is equal to another.","inherits":"Presence#equals","inherited":true,"params":[{"name":"presence","description":"The presence to compare with","type":[[["Presence"]]]}],"returns":[[["boolean"]]],"meta":{"line":148,"file":"Presence.js","path":"src/structures"}}],"meta":{"line":13,"file":"ClientPresence.js","path":"src/structures"}},{"name":"ClientUser","description":"Represents the logged in client's Discord user.","extends":[[["User"]]],"props":[{"name":"verified","description":"Whether or not this account has been verified","type":[[["boolean"]]],"meta":{"line":27,"file":"ClientUser.js","path":"src/structures"}},{"name":"mfaEnabled","description":"If the bot's {@link ClientApplication#owner Owner} has MFA enabled on their account","nullable":true,"type":[[["boolean"]]],"meta":{"line":35,"file":"ClientUser.js","path":"src/structures"}},{"name":"nitroType","description":"Nitro type of the client user.","type":[[["NitroType"]]],"meta":{"line":49,"file":"ClientUser.js","path":"src/structures"}},{"name":"purchasedFlags","description":"Purchased state of the client user.","nullable":true,"type":[[["PurchasedFlags"]]],"meta":{"line":57,"file":"ClientUser.js","path":"src/structures"}},{"name":"premiumUsageFlags","description":"Premium usage state of the client user.","nullable":true,"type":[[["PremiumUsageFlags"]]],"meta":{"line":65,"file":"ClientUser.js","path":"src/structures"}},{"name":"phoneNumber","description":"Phone number of the client user.","nullable":true,"type":[[["string"]]],"meta":{"line":73,"file":"ClientUser.js","path":"src/structures"}},{"name":"nsfwAllowed","description":"Whether or not the client user is allowed to send NSFW messages [iOS device].","nullable":true,"type":[[["boolean"]]],"meta":{"line":81,"file":"ClientUser.js","path":"src/structures"}},{"name":"emailAddress","description":"Email address of the client user.","nullable":true,"type":[[["string"]]],"meta":{"line":89,"file":"ClientUser.js","path":"src/structures"}},{"name":"friendNicknames","description":"The friend nicknames cache of the client user.","access":"private","type":[[["Collection","<"],["Snowflake",", "],["string",">"]]],"meta":{"line":106,"file":"ClientUser.js","path":"src/structures"}},{"name":"notes","description":"The notes cache of the client user.","access":"private","type":[[["Collection","<"],["Snowflake",", "],["string",">"]]],"meta":{"line":130,"file":"ClientUser.js","path":"src/structures"}},{"name":"presence","description":"Represents the client user's presence","readonly":true,"type":[[["ClientPresence"]]],"meta":{"line":138,"file":"ClientUser.js","path":"src/structures"}},{"name":"id","description":"The user's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"User.js","path":"src/structures"}},{"name":"connectedAccounts","description":"Accounts connected to this user\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["Array","<"],["ConnectionAccount",">"]]],"meta":{"line":49,"file":"User.js","path":"src/structures"}},{"name":"premiumSince","description":"Time that User has nitro (Unix Timestamp)\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["number"]]],"meta":{"line":55,"file":"User.js","path":"src/structures"}},{"name":"premiumGuildSince","description":"Time that User has nitro and boost server (Unix Timestamp)","nullable":true,"type":[[["number"]]],"meta":{"line":60,"file":"User.js","path":"src/structures"}},{"name":"bio","description":"About me (User)\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":66,"file":"User.js","path":"src/structures"}},{"name":"pronouns","description":"Pronouns (User)\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":72,"file":"User.js","path":"src/structures"}},{"name":"application","description":"[Bot] Application","nullable":true,"type":[[["ClientApplication"]]],"meta":{"line":78,"file":"User.js","path":"src/structures"}},{"name":"username","description":"The username of the user","nullable":true,"type":[[["string"]]],"meta":{"line":89,"file":"User.js","path":"src/structures"}},{"name":"globalName","description":"The global name of this user","nullable":true,"type":[[["string"]]],"meta":{"line":99,"file":"User.js","path":"src/structures"}},{"name":"bot","description":"Whether or not the user is a bot","nullable":true,"type":[[["boolean"]]],"meta":{"line":109,"file":"User.js","path":"src/structures"}},{"name":"discriminator","description":"The discriminator of this user\n`'0'`, or a 4-digit stringified number if they're using the legacy username system","nullable":true,"type":[[["string"]]],"meta":{"line":124,"file":"User.js","path":"src/structures"}},{"name":"avatar","description":"The user avatar's hash","nullable":true,"type":[[["string"]]],"meta":{"line":134,"file":"User.js","path":"src/structures"}},{"name":"banner","description":"The user banner's hash\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":145,"file":"User.js","path":"src/structures"}},{"name":"accentColor","description":"The base 10 accent color of the user's banner\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["number"]]],"meta":{"line":156,"file":"User.js","path":"src/structures"}},{"name":"system","description":"Whether the user is an Official Discord System user (part of the urgent message system)","nullable":true,"type":[[["boolean"]]],"meta":{"line":166,"file":"User.js","path":"src/structures"}},{"name":"flags","description":"The flags for this user","nullable":true,"type":[[["UserFlags"]]],"meta":{"line":176,"file":"User.js","path":"src/structures"}},{"name":"botInGuildsCount","description":"Check how many guilds the bot is in (Probably only approximate) (application.fetch() first)","nullable":true,"type":[[["number"]]],"meta":{"line":184,"file":"User.js","path":"src/structures"}},{"name":"avatarDecoration","description":"The user avatar decoration's hash","nullable":true,"type":[[["string"]]],"meta":{"line":192,"file":"User.js","path":"src/structures"}},{"name":"mutualGuilds","description":"This user is on the same servers as Client User\nThe user must be force fetched for this property to be present or be updated","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Guild",">"]]],"meta":{"line":204,"file":"User.js","path":"src/structures"}},{"name":"mutualFriends","description":"Get all mutual friends (Client -> User)","readonly":true,"type":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["User",">>"]]],"meta":{"line":213,"file":"User.js","path":"src/structures"}},{"name":"relationships","description":"Check relationship status (Client -> User)","readonly":true,"type":[[["RelationshipTypes"]]],"meta":{"line":231,"file":"User.js","path":"src/structures"}},{"name":"note","description":"Check note","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":241,"file":"User.js","path":"src/structures"}},{"name":"nickname","description":"Get friend nickname","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":250,"file":"User.js","path":"src/structures"}},{"name":"voice","description":"The voice state of this member","readonly":true,"type":[[["VoiceState"]]],"meta":{"line":259,"file":"User.js","path":"src/structures"}},{"name":"themeColors","description":"The user's theme colors (Profile theme) [Primary, Accent]\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["Array","<"],["number",">"]]],"meta":{"line":302,"file":"User.js","path":"src/structures"}},{"name":"badges","description":"User badges (Boost, Slash, AutoMod, etc.)","nullable":true,"type":[[["Array","<"],["UserBadge",">"]]],"meta":{"line":336,"file":"User.js","path":"src/structures"}},{"name":"partial","description":"Whether this User is a partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":430,"file":"User.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the user was created at","readonly":true,"type":[[["number"]]],"meta":{"line":439,"file":"User.js","path":"src/structures"}},{"name":"createdAt","description":"The time the user was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":448,"file":"User.js","path":"src/structures"}},{"name":"defaultAvatarURL","description":"A link to the user's default avatar","readonly":true,"type":[[["string"]]],"meta":{"line":477,"file":"User.js","path":"src/structures"}},{"name":"hexAccentColor","description":"The hexadecimal version of the user accent color, with a leading hash\nThe user must be force fetched for this property to be present","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":498,"file":"User.js","path":"src/structures"}},{"name":"hexThemeColor","description":"The hexadecimal version of the user theme color, with a leading hash [Primary, Accent]\nThe user must be force fetched for this property to be present or be updated","readonly":true,"nullable":true,"type":[[["Array","<"],["string",">"]]],"meta":{"line":541,"file":"User.js","path":"src/structures"}},{"name":"tag","description":"The tag of this user\nThis user's username, or their legacy tag (e.g. `hydrabolt#0001`)\nif they're using the legacy username system","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":552,"file":"User.js","path":"src/structures"}},{"name":"displayName","description":"The global name of this user, or their username if they don't have one","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":565,"file":"User.js","path":"src/structures"}},{"name":"dmChannel","description":"The DM between the client's user and this user","readonly":true,"nullable":true,"type":[[["DMChannel"]]],"meta":{"line":574,"file":"User.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"_patchNote","description":"Patch note","access":"private","params":[{"name":"data","description":"Note data","type":[[["Object"]]]}],"meta":{"line":124,"file":"ClientUser.js","path":"src/structures"}},{"name":"edit","description":"Edits the logged in client.","params":[{"name":"options","description":"The new data","type":[[["ClientUserEditData"]]]}],"async":true,"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":156,"file":"ClientUser.js","path":"src/structures"}},{"name":"setUsername","description":"Sets the username of the logged in client.\nChanging usernames in Discord is heavily rate limited, with only 2 requests\nevery hour. Use this sparingly!","examples":["// Set username\nclient.user.setUsername('discordjs')\n .then(user => console.log(`My new username is ${user.username}`))\n .catch(console.error);"],"params":[{"name":"username","description":"The new username","type":[[["string"]]]},{"name":"password","description":"The password of the account","type":[[["string"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":176,"file":"ClientUser.js","path":"src/structures"}},{"name":"setAvatar","description":"Sets the avatar of the logged in client.","examples":["// Set avatar\nclient.user.setAvatar('./avatar.png')\n .then(user => console.log(`New avatar set!`))\n .catch(console.error);"],"params":[{"name":"avatar","description":"The new avatar","nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]}],"async":true,"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":196,"file":"ClientUser.js","path":"src/structures"}},{"name":"setBanner","description":"Sets the banner of the logged in client.","examples":["// Set banner\nclient.user.setBanner('./banner.png')\n .then(user => console.log(`New banner set!`))\n .catch(console.error);"],"params":[{"name":"banner","description":"The new banner","nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]}],"async":true,"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":210,"file":"ClientUser.js","path":"src/structures"}},{"name":"setHypeSquad","description":"Set HyperSquad House","examples":["// Set HyperSquad HOUSE_BRAVERY\nclient.user.setHypeSquad(1); || client.user.setHypeSquad('HOUSE_BRAVERY');\n// Leave\nclient.user.setHypeSquad(0);"],"params":[{"name":"type","description":"* `LEAVE`: 0\n* `HOUSE_BRAVERY`: 1\n* `HOUSE_BRILLIANCE`: 2\n* `HOUSE_BALANCE`: 3","type":[[["HypeSquadType"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":232,"file":"ClientUser.js","path":"src/structures"}},{"name":"setAccentColor","description":"Set Accent color","params":[{"name":"color","description":"Color to set","default":null,"type":[[["ColorResolvable"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":251,"file":"ClientUser.js","path":"src/structures"}},{"name":"setDiscriminator","description":"Set discriminator","params":[{"name":"discriminator","description":"It is #1234","type":[[["Userdiscriminator"]]]},{"name":"password","description":"The password of the account","type":[[["string"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":261,"file":"ClientUser.js","path":"src/structures"}},{"name":"setAboutMe","description":"Set About me","params":[{"name":"bio","description":"Bio to set","default":null,"type":[[["string"]],[["null"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":278,"file":"ClientUser.js","path":"src/structures"}},{"name":"setEmail","description":"Change the email","params":[{"name":"email","description":"Email to change","type":[[["Email","<"],["string",">"]]]},{"name":"password","description":"Password of the account","type":[[["string"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":290,"file":"ClientUser.js","path":"src/structures"}},{"name":"setPassword","description":"Set new password","params":[{"name":"oldPassword","description":"Old password","type":[[["string"]]]},{"name":"newPassword","description":"New password to set","type":[[["string"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":308,"file":"ClientUser.js","path":"src/structures"}},{"name":"disableAccount","description":"Disable account","params":[{"name":"password","description":"Password of the account","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":324,"file":"ClientUser.js","path":"src/structures"}},{"name":"setDeaf","description":"Set selfdeaf (Global)","params":[{"name":"status","description":"Whether or not the ClientUser is deafened","type":[[["boolean"]]]}],"returns":[[["boolean"]]],"meta":{"line":341,"file":"ClientUser.js","path":"src/structures"}},{"name":"setMute","description":"Set selfmute (Global)","params":[{"name":"status","description":"Whether or not the ClientUser is muted","type":[[["boolean"]]]}],"returns":[[["boolean"]]],"meta":{"line":355,"file":"ClientUser.js","path":"src/structures"}},{"name":"deleteAccount","description":"Delete account. Warning: Cannot be changed once used!","params":[{"name":"password","description":"Password of the account","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":369,"file":"ClientUser.js","path":"src/structures"}},{"name":"setPresence","description":"Sets the full presence of the client user.","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/RichPresence.md}"],"examples":["// Set the client user's presence\nclient.user.setPresence({ activities: [{ name: 'with discord.js' }], status: 'idle' });"],"params":[{"name":"data","description":"Data for the presence","type":[[["PresenceData"]]]}],"returns":[[["ClientPresence"]]],"meta":{"line":408,"file":"ClientUser.js","path":"src/structures"}},{"name":"setStatus","description":"Sets the status of the client user.","examples":["// Set the client user's status\nclient.user.setStatus('idle');"],"params":[{"name":"status","description":"Status to change to","type":[[["PresenceStatusData"]]]},{"name":"shardId","description":"Shard id(s) to have the activity set on","optional":true,"type":[[["number"]],[["Array","<"],["number",">"]]]}],"returns":[[["ClientPresence"]]],"meta":{"line":430,"file":"ClientUser.js","path":"src/structures"}},{"name":"setActivity","description":"Sets the activity the client user is playing.","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/RichPresence.md}"],"examples":["// Set the client user's activity\nclient.user.setActivity('discord.js', { type: 'WATCHING' });"],"params":[{"name":"name","description":"Activity being played, or options for setting the activity","type":[[["string"]],[["ActivityOptions"]]]},{"name":"options","description":"Options for setting the activity","optional":true,"type":[[["ActivityOptions"]]]}],"returns":[[["ClientPresence"]]],"meta":{"line":453,"file":"ClientUser.js","path":"src/structures"}},{"name":"setAFK","description":"Sets/removes the AFK flag for the client user.","params":[{"name":"afk","description":"Whether or not the user is AFK","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"shardId","description":"Shard Id(s) to have the AFK flag set on","optional":true,"type":[[["number"]],[["Array","<"],["number",">"]]]}],"returns":[[["ClientPresence"]]],"meta":{"line":471,"file":"ClientUser.js","path":"src/structures"}},{"name":"createFriendInvite","description":"Create an invite [Friend Invites]\nmaxAge: 604800 | maxUses: 1","see":["{@link https://github.com/13-05/hidden-disc-docs#js-snippet-for-creating-friend-invites}"],"examples":["// Options not working\nclient.user.createFriendInvite();\n .then(console.log)\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":486,"file":"ClientUser.js","path":"src/structures"}},{"name":"getAllFriendInvites","description":"Get all friend invites","async":true,"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":497,"file":"ClientUser.js","path":"src/structures"}},{"name":"revokeAllFriendInvites","description":"Revoke all friend invites","async":true,"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":510,"file":"ClientUser.js","path":"src/structures"}},{"name":"getMentions","description":"Get a collection of messages mentioning clientUser","params":[{"name":"limit","description":"Maximum number of messages to get","optional":true,"default":25,"type":[[["number"]]]},{"name":"mentionRoles","description":"Whether or not to mention roles","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"mentionEveryone","description":"Whether or not to mention `@everyone`","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":526,"file":"ClientUser.js","path":"src/structures"}},{"name":"setThemeColors","description":"Change Theme color","params":[{"name":"primary","description":"The primary color of the user's profile","type":[[["ColorResolvable"]]]},{"name":"accent","description":"The accent color of the user's profile","type":[[["ColorResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":548,"file":"ClientUser.js","path":"src/structures"}},{"name":"setSamsungActivity","description":"Sets Discord Playing status to \"Playing on Samsung Galaxy\". Only selected gamss from discords database works","examples":["// Set the client user's status\nclient.user.setSamsungActivity('com.YostarJP.BlueArchive', 'START');\n// Update\nclient.user.setSamsungActivity('com.miHoYo.bh3oversea', 'UPDATE');\n// Stop\nclient.user.setSamsungActivity('com.miHoYo.GenshinImpact', 'STOP');"],"params":[{"name":"packageName","description":"Android package name","type":[[["string"]]]},{"name":"type","description":"Must be START, UPDATE, or STOP","default":"START","nullable":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":580,"file":"ClientUser.js","path":"src/structures"}},{"name":"stopRinging","description":"Stop ringing","params":[{"name":"channel","description":"DMChannel | GroupDMChannel","type":[[["ChannelResolvable"]]]}],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":600,"file":"ClientUser.js","path":"src/structures"}},{"name":"fetchBurstCredit","description":"Super Reactions","returns":[[["Promise","<"],["number",">"]]],"meta":{"line":612,"file":"ClientUser.js","path":"src/structures"}},{"name":"setGlobalName","description":"Set global display name","params":[{"name":"globalName","description":"The new display name","type":[[["string"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":621,"file":"ClientUser.js","path":"src/structures"}},{"name":"setPronouns","description":"Set pronouns","params":[{"name":"pronouns","description":"Your pronouns","nullable":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ClientUser",">"]]],"meta":{"line":630,"file":"ClientUser.js","path":"src/structures"}},{"name":"getProfile","description":"Get profile from Discord, if client is in a server with the target.","inherits":"User#getProfile","inherited":true,"params":[{"name":"guildId","description":"The guild id to get the profile from","type":[[["Snowflake"]],[["null"]]]}],"async":true,"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":354,"file":"User.js","path":"src/structures"}},{"name":"setFriend","description":"Friends the user [If incoming request]","inherits":"User#setFriend","inherited":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":376,"file":"User.js","path":"src/structures"}},{"name":"setNickname","description":"Changes the nickname of the friend","inherits":"User#setNickname","inherited":true,"params":[{"name":"nickname","description":"The nickname to change","nullable":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":386,"file":"User.js","path":"src/structures"}},{"name":"sendFriendRequest","description":"Send Friend Request to the user","inherits":"User#sendFriendRequest","inherited":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":395,"file":"User.js","path":"src/structures"}},{"name":"setBlock","description":"Blocks the user","inherits":"User#setBlock","inherited":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":403,"file":"User.js","path":"src/structures"}},{"name":"unBlock","description":"Removes the user from your blocks list","inherits":"User#unBlock","inherited":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":412,"file":"User.js","path":"src/structures"}},{"name":"unFriend","description":"Removes the user from your friends list","inherits":"User#unFriend","inherited":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":421,"file":"User.js","path":"src/structures"}},{"name":"avatarURL","description":"A link to the user's avatar.","inherits":"User#avatarURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":457,"file":"User.js","path":"src/structures"}},{"name":"avatarDecorationURL","description":"A link to the user's avatar decoration.","inherits":"User#avatarDecorationURL","inherited":true,"params":[{"name":"options","description":"Options for the image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":467,"file":"User.js","path":"src/structures"}},{"name":"displayAvatarURL","description":"A link to the user's avatar if they have one.\nOtherwise a link to their default avatar will be returned.","inherits":"User#displayAvatarURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":[[["string"]]],"meta":{"line":488,"file":"User.js","path":"src/structures"}},{"name":"bannerURL","description":"A link to the user's banner.\nThis method will throw an error if called before the user is force fetched.\nSee {@link User#banner} for more info","inherits":"User#bannerURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":510,"file":"User.js","path":"src/structures"}},{"name":"ring","description":"Ring the user's phone / PC (call)","inherits":"User#ring","inherited":true,"deprecated":true,"returns":[[["Promise","<"],["any",">"]]],"meta":{"line":523,"file":"User.js","path":"src/structures"}},{"name":"createDM","description":"Creates a DM channel between the client and the user.","inherits":"User#createDM","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":583,"file":"User.js","path":"src/structures"}},{"name":"deleteDM","description":"Deletes a DM channel (if one exists) between the client and the user. Resolves with the channel if successful.","inherits":"User#deleteDM","inherited":true,"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":591,"file":"User.js","path":"src/structures"}},{"name":"equals","description":"Checks if the user is equal to another.\nIt compares id, username, discriminator, avatar, banner, accent color, and bot flags.\nIt is recommended to compare equality by using `user.id === user2.id` unless you want to compare all properties.","inherits":"User#equals","inherited":true,"params":[{"name":"user","description":"User to compare with","type":[[["User"]]]}],"returns":[[["boolean"]]],"meta":{"line":602,"file":"User.js","path":"src/structures"}},{"name":"_equals","description":"Compares the user with an API user object","access":"private","inherits":"User#_equals","inherited":true,"params":[{"name":"user","description":"The API user object to compare","type":[[["APIUser"]]]}],"returns":[[["boolean"]]],"meta":{"line":623,"file":"User.js","path":"src/structures"}},{"name":"fetchFlags","description":"Fetches this user's flags.","inherits":"User#fetchFlags","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["UserFlags",">"]]],"meta":{"line":642,"file":"User.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this user.","inherits":"User#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":651,"file":"User.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the user's mention instead of the User object.","inherits":"User#toString","inherited":true,"examples":["// Logs: Hello from <@123456789012345678>!\nconsole.log(`Hello from ${user}!`);"],"returns":[[["string"]]],"meta":{"line":662,"file":"User.js","path":"src/structures"}},{"name":"setNote","description":"Set note to user","inherits":"User#setNote","inherited":true,"params":[{"name":"note","description":"Note to set","default":null,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":687,"file":"User.js","path":"src/structures"}},{"name":"presenceFetch","description":"Get presence (~ v12)","inherits":"User#presenceFetch","inherited":true,"async":true,"returns":[[["Promise","<("],["Presence","|"],["null",")>"]]],"meta":{"line":696,"file":"User.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this user.","inherits":"User#send","inherited":true,"implements":["TextBasedChannel#send"],"examples":["// Send a direct message\nuser.send('Hello!')\n .then(message => console.log(`Sent message: ${message.content} to ${user.tag}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":709,"file":"User.js","path":"src/structures"}}],"meta":{"line":18,"file":"ClientUser.js","path":"src/structures"}},{"name":"CommandInteraction","description":"Represents a command interaction.","extends":[[["BaseCommandInteraction"]]],"props":[{"name":"options","description":"The options passed to the command.","type":[[["CommandInteractionOptionResolver"]]],"meta":{"line":18,"file":"CommandInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":20,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandId","description":"The invoked application command's id","type":[[["Snowflake"]]],"meta":{"line":30,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandName","description":"The invoked application command's name","type":[[["string"]]],"meta":{"line":36,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":42,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":48,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":54,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":60,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"command","description":"The invoked application command, if it was fetched before","nullable":true,"type":[[["ApplicationCommand"]]],"meta":{"line":67,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"Returns a string representation of the command interaction.\nThis can then be copied by a user and executed again in a new command while keeping the option order.","returns":[[["string"]]],"meta":{"line":30,"file":"CommandInteraction.js","path":"src/structures"}},{"name":"transformResolved","description":"Transforms the resolved received from the API.","access":"private","inherits":"BaseCommandInteraction#transformResolved","inherited":true,"params":[{"name":"resolved","description":"The received resolved objects","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionResolvedData"]]],"meta":{"line":89,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"transformOption","description":"Transforms an option received from the API.","access":"private","inherits":"BaseCommandInteraction#transformOption","inherited":true,"params":[{"name":"option","description":"The received option","type":[[["APIApplicationCommandOption"]]]},{"name":"resolved","description":"The resolved interaction data","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionOption"]]],"meta":{"line":162,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"BaseCommandInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"BaseCommandInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"BaseCommandInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"BaseCommandInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"BaseCommandInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"BaseCommandInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"BaseCommandInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseCommandInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":10,"file":"CommandInteraction.js","path":"src/structures"}},{"name":"CommandInteractionOptionResolver","description":"A resolver for command interaction options.","props":[{"name":"client","description":"The client that instantiated this.","readonly":true,"type":[[["Client"]]],"meta":{"line":10,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"_group","description":"The name of the subcommand group.","access":"private","nullable":true,"type":[[["string"]]],"meta":{"line":23,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"_subcommand","description":"The name of the subcommand.","access":"private","nullable":true,"type":[[["string"]]],"meta":{"line":30,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"_hoistedOptions","description":"The bottom-level options for the interaction.\nIf there is a subcommand (or subcommand and group), this is the options for the subcommand.","access":"private","type":[[["Array","<"],["CommandInteractionOption",">"]]],"meta":{"line":38,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"data","description":"The interaction options array.","readonly":true,"type":[[["ReadonlyArray","<"],["CommandInteractionOption",">"]]],"meta":{"line":51,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"resolved","description":"The interaction resolved data","type":[[["Readonly","<"],["CommandInteractionResolvedData",">"]]],"meta":{"line":59,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}}],"methods":[{"name":"get","description":"Gets an option by its name.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["CommandInteractionOption"]]],"description":"The option, if found.","nullable":true},"meta":{"line":73,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"_getTypedOption","description":"Gets an option by name and property and checks its type.","access":"private","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"type","description":"The type of the option.","type":[[["ApplicationCommandOptionType"]]]},{"name":"properties","description":"The properties to check for for `required`.","type":[[["Array","<"],["string",">"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","type":[[["boolean"]]]}],"returns":{"types":[[["CommandInteractionOption"]]],"description":"The option, if found.","nullable":true},"meta":{"line":93,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getSubcommand","description":"Gets the selected subcommand.","params":[{"name":"required","description":"Whether to throw an error if there is no subcommand.","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["string"]]],"description":"The name of the selected subcommand, or null if not set and not required.","nullable":true},"meta":{"line":110,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getSubcommandGroup","description":"Gets the selected subcommand group.","params":[{"name":"required","description":"Whether to throw an error if there is no subcommand group.","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["string"]]],"description":"The name of the selected subcommand group, or null if not set and not required.","nullable":true},"meta":{"line":122,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getBoolean","description":"Gets a boolean option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["boolean"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":135,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getChannel","description":"Gets a channel option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["GuildChannel"]],[["ThreadChannel"]],[["APIChannel"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":147,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getString","description":"Gets a string option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["string"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":158,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getInteger","description":"Gets an integer option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["number"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":169,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getNumber","description":"Gets a number option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["number"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":180,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getUser","description":"Gets a user option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["User"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":191,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getMember","description":"Gets a member option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["GuildMember"]],[["APIGuildMember"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":203,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getRole","description":"Gets a role option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["Role"]],[["APIRole"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":214,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getMentionable","description":"Gets a mentionable option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["User"]],[["GuildMember"]],[["APIGuildMember"]],[["Role"]],[["APIRole"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":226,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getMessage","description":"Gets a message option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["Message"]],[["APIMessage"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":238,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getFocused","description":"Gets the focused option.","params":[{"name":"getFull","description":"Whether to get the full option object","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["string"]],[["AutocompleteFocusedOption"]]],"description":"The value of the option, or the whole option if getFull is true"},"meta":{"line":258,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"getAttachment","description":"Gets an attachment option.","params":[{"name":"name","description":"The name of the option.","type":[[["string"]]]},{"name":"required","description":"Whether to throw an error if the option is not found.","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":{"types":[[["MessageAttachment"]]],"description":"The value of the option, or null if not set and not required.","nullable":true},"meta":{"line":270,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}}],"meta":{"line":8,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"ContextMenuInteraction","description":"Represents a context menu interaction.","extends":[[["BaseCommandInteraction"]]],"props":[{"name":"options","description":"The target of the interaction, parsed into options","type":[[["CommandInteractionOptionResolver"]]],"meta":{"line":18,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"targetId","description":"The id of the target of the interaction","type":[[["Snowflake"]]],"meta":{"line":28,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"targetType","description":"The type of the target of the interaction; either USER or MESSAGE","type":[[["ApplicationCommandType"]]],"meta":{"line":34,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":20,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandId","description":"The invoked application command's id","type":[[["Snowflake"]]],"meta":{"line":30,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandName","description":"The invoked application command's name","type":[[["string"]]],"meta":{"line":36,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":42,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":48,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":54,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":60,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"command","description":"The invoked application command, if it was fetched before","nullable":true,"type":[[["ApplicationCommand"]]],"meta":{"line":67,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"resolveContextMenuOptions","description":"Resolves and transforms options received from the API for a context menu interaction.","access":"private","params":[{"name":"data","description":"The interaction data","type":[[["APIApplicationCommandInteractionData"]]]}],"returns":[[["Array","<"],["CommandInteractionOption",">"]]],"meta":{"line":43,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"transformResolved","description":"Transforms the resolved received from the API.","access":"private","inherits":"BaseCommandInteraction#transformResolved","inherited":true,"params":[{"name":"resolved","description":"The received resolved objects","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionResolvedData"]]],"meta":{"line":89,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"transformOption","description":"Transforms an option received from the API.","access":"private","inherits":"BaseCommandInteraction#transformOption","inherited":true,"params":[{"name":"option","description":"The received option","type":[[["APIApplicationCommandOption"]]]},{"name":"resolved","description":"The resolved interaction data","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionOption"]]],"meta":{"line":162,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"BaseCommandInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"BaseCommandInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"BaseCommandInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"BaseCommandInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"BaseCommandInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"BaseCommandInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"BaseCommandInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseCommandInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":11,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"DeveloperPortalApplication","description":"Represents an OAuth2 Application.","extends":[[["Base"]]],"abstract":true,"props":[{"name":"id","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":28,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"name","description":"The name of the application","nullable":true,"type":[[["string"]]],"meta":{"line":35,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"description","description":"The application's description","nullable":true,"type":[[["string"]]],"meta":{"line":45,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"icon","description":"The application's icon hash","nullable":true,"type":[[["string"]]],"meta":{"line":55,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"bot","description":"Bot application","type":[[["User"]]],"meta":{"line":65,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"tags","description":"The tags this application has (max of 5)","type":[[["Array","<"],["string",">"]]],"meta":{"line":72,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"installParams","description":"Settings for this application's default in-app authorization","nullable":true,"type":[[["ClientApplicationInstallParams"]]],"meta":{"line":79,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"customInstallURL","description":"This application's custom installation URL","nullable":true,"type":[[["string"]]],"meta":{"line":92,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"flags","description":"The flags this application has","type":[[["ApplicationFlags"]]],"meta":{"line":102,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"cover","description":"The hash of the application's cover image","nullable":true,"type":[[["string"]]],"meta":{"line":110,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"rpcOrigins","description":"The application's RPC origins, if enabled","type":[[["Array","<"],["string",">"]]],"meta":{"line":120,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"botRequireCodeGrant","description":"If this application's bot requires a code grant when using the OAuth2 flow","nullable":true,"type":[[["boolean"]]],"meta":{"line":130,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"botPublic","description":"If this application's bot is public","nullable":true,"type":[[["boolean"]]],"meta":{"line":140,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"owner","description":"The owner of this OAuth application","nullable":true,"type":[[["User"]],[["Team"]]],"meta":{"line":149,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"redirectURIs","description":"Redirect URIs for this application","type":[[["Array","<"],["string",">"]]],"meta":{"line":160,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"interactionEndpointURL","description":"BOT_HTTP_INTERACTIONS feature flag","nullable":true,"type":[[["string"]]],"meta":{"line":166,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"publicKey","description":"Public key","nullable":true,"type":[[["string"]]],"meta":{"line":172,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"testers","description":"User tester","type":[[["Collection","<"],["Snowflake",", "],["Tester",">"]]],"meta":{"line":183,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"TermsOfService","description":"Terms of service URL","nullable":true,"type":[[["string"]]],"meta":{"line":189,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"PrivacyPolicy","description":"Privacy policy URL","nullable":true,"type":[[["string"]]],"meta":{"line":195,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"roleConnectionsVerificationURL","description":"This application's role connection verification entry point URL","nullable":true,"type":[[["string"]]],"meta":{"line":202,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the application was created at","readonly":true,"type":[[["number"]]],"meta":{"line":212,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"createdAt","description":"The time the application was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":221,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"partial","description":"Whether this application is partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":272,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"iconURL","description":"A link to the application's icon.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":230,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"coverURL","description":"A link to this application's cover image.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":240,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"fetchAssets","description":"Gets the application's rich presence assets.","deprecated":"This will be removed in the next major as it is unsupported functionality.","async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationAsset",">>"]]],"meta":{"line":258,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"fetch","description":"Obtains this application from Discord.","async":true,"returns":[[["Promise","<"],["DeveloperPortalApplication",">"]]],"meta":{"line":280,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"fetchTesters","description":"Gets all testers for this application.","async":true,"returns":[[["Promise","<"],["DeveloperPortalApplication",">"]]],"meta":{"line":290,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"addTester","description":"Add user to this application's allowlist.","params":[{"name":"username","description":"Username of the user to add","type":[[["string"]]]},{"name":"discriminator","description":"Discriminator of the user to add","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["DeveloperPortalApplication",">"]]],"meta":{"line":308,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"deleteTester","description":"Delete user from this application's allowlist.","params":[{"name":"user","description":"User","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["DeveloperPortalApplication",">"]]],"meta":{"line":327,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"edit","description":"Edits this application.","params":[{"name":"data","description":"Edit data for the application","type":[[["ApplicationEditData"]]]}],"async":true,"returns":[[["Promise","<"],["DeveloperPortalApplication",">"]]],"meta":{"line":354,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"createBot","description":"Creates a new bot for this application.","async":true,"returns":[[["Promise","<"],["DeveloperPortalApplication",">"]]],"meta":{"line":381,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"resetClientSecret","description":"Reset CLient Secret for this application.","params":[{"name":"MFACode","description":"The MFA code (if required)","type":[[["number"]]]}],"async":true,"returns":[[["Promise","<"],["string",">"]]],"meta":{"line":393,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"resetBotToken","description":"Reset Bot Token for this application.","params":[{"name":"MFACode","description":"The MFA code (if required)","type":[[["number"]]]}],"async":true,"returns":[[["Promise","<"],["string",">"]]],"meta":{"line":409,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"delete","description":"Deletes this application.","params":[{"name":"MFACode","description":"The MFA code (if required)","type":[[["number"]]]}],"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":425,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"addAsset","description":"Add new image to this application. (RPC)","params":[{"name":"image","description":"Image Resolvable","type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"name","description":"Name of the image","type":[[["string"]]]}],"async":true,"returns":[[["ApplicationAsset"]]],"meta":{"line":435,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"deleteAsset","description":"Delete an image from this application. (RPC)","params":[{"name":"id","description":"ID of the image","type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["undefined",">"]]],"meta":{"line":456,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"fetchRoleConnectionMetadataRecords","description":"Gets this application's role connection metadata records","async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationRoleConnectionMetadata",">>"]]],"meta":{"line":465,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"editRoleConnectionMetadataRecords","description":"Updates this application's role connection metadata records","params":[{"name":"records","description":"The new role connection metadata records","type":[[["Array","<"],["ApplicationRoleConnectionMetadataEditOptions",">"]]]}],"async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationRoleConnectionMetadata",">>"]]],"meta":{"line":486,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the application's name instead of the\nApplication object.","examples":["// Logs: Application name: My App\nconsole.log(`Application name: ${application}`);"],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":511,"file":"DeveloperPortalApplication.js","path":"src/structures"}}],"meta":{"line":18,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"DirectoryChannel","description":"Represents a channel that displays a directory of guilds.","extends":[[["Channel"]]],"props":[{"name":"name","description":"The channel's name","type":[[["string"]]],"meta":{"line":16,"file":"DirectoryChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"Channel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete()\n .then(console.log)\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":143,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":9,"file":"DirectoryChannel.js","path":"src/structures"}},{"name":"DMChannel","description":"Represents a direct message channel between two users.","extends":[[["Channel"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"messages","description":"A manager of the messages belonging to this channel","type":[[["MessageManager"]]],"meta":{"line":27,"file":"DMChannel.js","path":"src/structures"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":33,"file":"DMChannel.js","path":"src/structures"}},{"name":"recipient","description":"The recipient on the other end of the DM","type":[[["User"]]],"meta":{"line":44,"file":"DMChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The channel's last message id, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"DMChannel.js","path":"src/structures"}},{"name":"lastPinTimestamp","description":"The timestamp when the last pinned message was pinned, if there was one","nullable":true,"type":[[["number"]]],"meta":{"line":60,"file":"DMChannel.js","path":"src/structures"}},{"name":"messageRequest","description":"Whether the channel is a message request","type":[[["boolean"]]],"meta":{"line":70,"file":"DMChannel.js","path":"src/structures"}},{"name":"messageRequestTimestamp","description":"The timestamp when the message request was created","nullable":true,"type":[[["number"]]],"meta":{"line":78,"file":"DMChannel.js","path":"src/structures"}},{"name":"partial","description":"Whether this DMChannel is a partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":116,"file":"DMChannel.js","path":"src/structures"}},{"name":"voiceUsers","description":"The user in this voice-based channel","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":230,"file":"DMChannel.js","path":"src/structures"}},{"name":"voiceConnection","description":"Get connection to current call","readonly":true,"nullable":true,"type":[[["VoiceConnection"]]],"meta":{"line":244,"file":"DMChannel.js","path":"src/structures"}},{"name":"shard","description":"Get current shard","readonly":true,"type":[[["WebSocketShard"]]],"meta":{"line":256,"file":"DMChannel.js","path":"src/structures"}},{"name":"voiceAdapterCreator","description":"The voice state adapter for this client that can be used with @discordjs/voice to play audio in DM / Group DM channels.","readonly":true,"nullable":true,"type":[[["function"]]],"meta":{"line":264,"file":"DMChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinAt","description":"The date when the last pinned message was pinned, if there was one","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":68,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"acceptMessageRequest","description":"Accept this DMChannel.","async":true,"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":86,"file":"DMChannel.js","path":"src/structures"}},{"name":"cancelMessageRequest","description":"Cancel this DMChannel.","async":true,"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":103,"file":"DMChannel.js","path":"src/structures"}},{"name":"fetch","description":"Fetch this DMChannel.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":125,"file":"DMChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the recipient's mention instead of the\nDMChannel object.","examples":["// Logs: Hello from <@123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":137,"file":"DMChannel.js","path":"src/structures"}},{"name":"call","description":"Call this DMChannel. Return discordjs/voice VoiceConnection","params":[{"name":"options","description":"Options for the call","type":[[["CallOptions"]]]}],"returns":[[["Promise","<"],["VoiceConnection",">"]]],"meta":{"line":163,"file":"DMChannel.js","path":"src/structures"}},{"name":"ring","description":"Ring the user's phone / PC (call)","returns":[[["Promise","<"],["any",">"]]],"meta":{"line":205,"file":"DMChannel.js","path":"src/structures"}},{"name":"sync","description":"Sync VoiceState of this DMChannel.","returns":[[["undefined"]]],"meta":{"line":217,"file":"DMChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","implements":["TextBasedChannel#createMessageComponentCollector"],"examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","implements":["TextBasedChannel#awaitMessageComponent"],"examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"searchInteraction","description":"Search Slash Command (return raw data)","implements":["TextBasedChannel#searchInteraction"],"params":[{"name":"applicationId","description":"Application ID","type":[[["Snowflake"]]]},{"name":"type","description":"Command Type","default":"CHAT_INPUT","nullable":true,"type":[[["ApplicationCommandType"]]]}],"returns":[[["Object"]]],"meta":{"line":423,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendSlash","description":"Send Slash to this channel","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/SlashCommand.md}"],"implements":["TextBasedChannel#sendSlash"],"examples":["// Send a basic slash\nchannel.sendSlash('botid', 'ping')\n .then(console.log)\n .catch(console.error);","// Send a remote file\nchannel.sendSlash('botid', 'emoji upload', 'https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048', 'test')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"bot","description":"Bot user (BotID, not applicationID)","type":[[["UserResolvable"]]]},{"name":"commandString","description":"Command name (and sub / group formats)","type":[[["string"]]]},{"name":"args","description":"Command arguments","variable":true,"type":[[["any"]],[["Array","<"],["any",">"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":463,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"delete","description":"Deletes this channel.","inherits":"Channel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete()\n .then(console.log)\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":143,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":16,"file":"DMChannel.js","path":"src/structures"}},{"name":"Emoji","description":"Represents an emoji, see {@link GuildEmoji} and {@link ReactionEmoji}.","extends":[[["Base"]]],"props":[{"name":"animated","description":"Whether or not the emoji is animated","nullable":true,"type":[[["boolean"]]],"meta":{"line":34,"file":"Emoji.js","path":"src/structures"}},{"name":"name","description":"The emoji's name","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Emoji.js","path":"src/structures"}},{"name":"id","description":"The emoji's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Emoji.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":54,"file":"Emoji.js","path":"src/structures"}},{"name":"identifier","description":"The identifier of this emoji, used for message reactions","readonly":true,"type":[[["string"]]],"meta":{"line":84,"file":"Emoji.js","path":"src/structures"}},{"name":"url","description":"The URL to the emoji file if it's a custom emoji","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":94,"file":"Emoji.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":103,"file":"Emoji.js","path":"src/structures"}},{"name":"createdAt","description":"The time the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":112,"file":"Emoji.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the text required to form a graphical emoji on Discord\ninstead of the Emoji object.","examples":["// Send a custom emoji from a guild:\nconst emoji = guild.emojis.cache.first();\nmsg.channel.send(`Hello! ${emoji}`);","// Send the emoji used in a reaction to the channel the reaction is part of\nreaction.message.channel.send(`The emoji used was: ${reaction.emoji}`);"],"returns":[[["string"]]],"meta":{"line":128,"file":"Emoji.js","path":"src/structures"}}],"meta":{"line":27,"file":"Emoji.js","path":"src/structures"}},{"name":"ForumChannel","description":"Represents a channel that only contains threads","extends":[[["GuildChannel"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":53,"file":"ForumChannel.js","path":"src/structures"}},{"name":"threads","description":"A manager of the threads belonging to this channel","type":[[["GuildForumThreadManager"]]],"meta":{"line":59,"file":"ForumChannel.js","path":"src/structures"}},{"name":"availableTags","description":"The set of tags that can be used in this channel.","type":[[["Array","<"],["GuildForumTag",">"]]],"meta":{"line":71,"file":"ForumChannel.js","path":"src/structures"}},{"name":"defaultReactionEmoji","description":"The emoji to show in the add reaction button on a thread in a guild forum channel","nullable":true,"type":[[["DefaultReactionEmoji"]]],"meta":{"line":81,"file":"ForumChannel.js","path":"src/structures"}},{"name":"defaultThreadRateLimitPerUser","description":"The initial rate limit per user (slowmode) to set on newly created threads in a channel.","nullable":true,"type":[[["number"]]],"meta":{"line":92,"file":"ForumChannel.js","path":"src/structures"}},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for this channel.","nullable":true,"type":[[["number"]]],"meta":{"line":102,"file":"ForumChannel.js","path":"src/structures"}},{"name":"defaultAutoArchiveDuration","description":"The default auto archive duration for newly created threads in this channel.","nullable":true,"type":[[["ThreadAutoArchiveDuration"]]],"meta":{"line":112,"file":"ForumChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If this channel is considered NSFW.","type":[[["boolean"]]],"meta":{"line":122,"file":"ForumChannel.js","path":"src/structures"}},{"name":"topic","description":"The topic of this channel.","nullable":true,"type":[[["string"]]],"meta":{"line":132,"file":"ForumChannel.js","path":"src/structures"}},{"name":"defaultSortOrder","description":"The default sort order mode used to order posts","nullable":true,"type":[[["SortOrderType"]]],"meta":{"line":140,"file":"ForumChannel.js","path":"src/structures"}},{"name":"defaultForumLayout","description":"The default layout type used to display posts","type":[[["ForumLayoutType"]]],"meta":{"line":149,"file":"ForumChannel.js","path":"src/structures"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":274,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"setAvailableTags","description":"Sets the available tags for this forum channel","params":[{"name":"availableTags","description":"The tags to set as available in this channel","type":[[["Array","<"],["GuildForumTagData",">"]]]},{"name":"reason","description":"Reason for changing the available tags","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ForumChannel",">"]]],"meta":{"line":158,"file":"ForumChannel.js","path":"src/structures"}},{"name":"setDefaultReactionEmoji","description":"Sets the default reaction emoji for this channel","params":[{"name":"defaultReactionEmoji","description":"The emoji to set as the default reaction emoji","nullable":true,"type":[[["DefaultReactionEmoji"]]]},{"name":"reason","description":"Reason for changing the default reaction emoji","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ForumChannel",">"]]],"meta":{"line":168,"file":"ForumChannel.js","path":"src/structures"}},{"name":"setDefaultThreadRateLimitPerUser","description":"Sets the default rate limit per user (slowmode) for new threads in this channel","params":[{"name":"defaultThreadRateLimitPerUser","description":"The rate limit to set on newly created threads in this channel","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the default rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ForumChannel",">"]]],"meta":{"line":178,"file":"ForumChannel.js","path":"src/structures"}},{"name":"setDefaultSortOrder","description":"Sets the default sort order mode used to order posts","params":[{"name":"defaultSortOrder","description":"The default sort order mode to set on this channel","nullable":true,"type":[[["SortOrderType"]]]},{"name":"reason","description":"Reason for changing the default sort order","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ForumChannel",">"]]],"meta":{"line":188,"file":"ForumChannel.js","path":"src/structures"}},{"name":"setDefaultForumLayout","description":"Sets the default forum layout type used to display posts","params":[{"name":"defaultForumLayout","description":"The default forum layout type to set on this channel","type":[[["ForumLayoutType"]]]},{"name":"reason","description":"Reason for changing the default forum layout","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ForumChannel",">"]]],"meta":{"line":198,"file":"ForumChannel.js","path":"src/structures"}},{"name":"createInvite","description":"Creates an invite to this guild channel.","examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":212,"file":"ForumChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":222,"file":"ForumChannel.js","path":"src/structures"}},{"name":"setDefaultAutoArchiveDuration","description":"Sets the default auto archive duration for all newly created threads in this channel.","params":[{"name":"defaultAutoArchiveDuration","description":"The new default auto archive duration","type":[[["ThreadAutoArchiveDuration"]]]},{"name":"reason","description":"Reason for changing the channel's default auto archive duration","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ForumChannel",">"]]],"meta":{"line":232,"file":"ForumChannel.js","path":"src/structures"}},{"name":"setTopic","description":"Sets a new topic for the guild channel.","examples":["// Set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.error);"],"params":[{"name":"topic","description":"The new topic for the guild channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's topic","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ForumChannel",">"]]],"meta":{"line":247,"file":"ForumChannel.js","path":"src/structures"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":368,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":393,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":403,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":413,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":45,"file":"ForumChannel.js","path":"src/structures"}},{"name":"Guild","description":"Represents a guild (or a server) on Discord.\nIt's recommended to see if a guild is available before performing operations or reading data from it. You can\ncheck this with {@link Guild#available}.","extends":[[["AnonymousGuild"]]],"props":[{"name":"members","description":"A manager of the members belonging to this guild.","type":[[["GuildMemberManager"]]],"meta":{"line":66,"file":"Guild.js","path":"src/structures"}},{"name":"channels","description":"A manager of the channels belonging to this guild.","type":[[["GuildChannelManager"]]],"meta":{"line":72,"file":"Guild.js","path":"src/structures"}},{"name":"bans","description":"A manager of the bans belonging to this guild.","type":[[["GuildBanManager"]]],"meta":{"line":78,"file":"Guild.js","path":"src/structures"}},{"name":"roles","description":"A manager of the roles belonging to this guild.","type":[[["RoleManager"]]],"meta":{"line":84,"file":"Guild.js","path":"src/structures"}},{"name":"presences","description":"A manager of the presences belonging to this guild.","type":[[["PresenceManager"]]],"meta":{"line":90,"file":"Guild.js","path":"src/structures"}},{"name":"voiceStates","description":"A manager of the voice states of this guild.","type":[[["VoiceStateManager"]]],"meta":{"line":96,"file":"Guild.js","path":"src/structures"}},{"name":"stageInstances","description":"A manager of the stage instances of this guild.","type":[[["StageInstanceManager"]]],"meta":{"line":102,"file":"Guild.js","path":"src/structures"}},{"name":"invites","description":"A manager of the invites of this guild.","type":[[["GuildInviteManager"]]],"meta":{"line":108,"file":"Guild.js","path":"src/structures"}},{"name":"scheduledEvents","description":"A manager of the scheduled events of this guild.","type":[[["GuildScheduledEventManager"]]],"meta":{"line":114,"file":"Guild.js","path":"src/structures"}},{"name":"autoModerationRules","description":"A manager of the auto moderation rules of this guild.","type":[[["AutoModerationRuleManager"]]],"meta":{"line":120,"file":"Guild.js","path":"src/structures"}},{"name":"available","description":"Whether the guild is available to access. If it is not available, it indicates a server outage.","type":[[["boolean"]]],"meta":{"line":129,"file":"Guild.js","path":"src/structures"}},{"name":"shardId","description":"The id of the shard this Guild belongs to.","type":[[["number"]]],"meta":{"line":139,"file":"Guild.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted.","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":149,"file":"Guild.js","path":"src/structures"}},{"name":"shard","description":"The Shard this Guild belongs to.","readonly":true,"type":[[["WebSocketShard"]]],"meta":{"line":179,"file":"Guild.js","path":"src/structures"}},{"name":"discoverySplash","description":"The hash of the guild discovery splash image.","nullable":true,"type":[[["string"]]],"meta":{"line":199,"file":"Guild.js","path":"src/structures"}},{"name":"memberCount","description":"The full amount of members in this guild.","type":[[["number"]]],"meta":{"line":207,"file":"Guild.js","path":"src/structures"}},{"name":"large","description":"Whether the guild is \"large\" (has more than {@link WebsocketOptions large_threshold} members, 50 by default).","type":[[["boolean"]]],"meta":{"line":215,"file":"Guild.js","path":"src/structures"}},{"name":"premiumProgressBarEnabled","description":"Whether this guild has its premium (boost) progress bar enabled.","type":[[["boolean"]]],"meta":{"line":223,"file":"Guild.js","path":"src/structures"}},{"name":"applicationId","description":"The id of the application that created this guild (if applicable).","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":271,"file":"Guild.js","path":"src/structures"}},{"name":"afkTimeout","description":"The time in seconds before a user is counted as \"away from keyboard\".","nullable":true,"type":[[["number"]]],"meta":{"line":279,"file":"Guild.js","path":"src/structures"}},{"name":"afkChannelId","description":"The id of the voice channel where AFK members are moved.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":287,"file":"Guild.js","path":"src/structures"}},{"name":"systemChannelId","description":"The system channel's id.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":295,"file":"Guild.js","path":"src/structures"}},{"name":"premiumTier","description":"The premium tier of this guild.","type":[[["PremiumTier"]]],"meta":{"line":303,"file":"Guild.js","path":"src/structures"}},{"name":"widgetEnabled","description":"Whether widget images are enabled on this guild.","nullable":true,"type":[[["boolean"]]],"meta":{"line":311,"file":"Guild.js","path":"src/structures"}},{"name":"widgetChannelId","description":"The widget channel's id, if enabled.","nullable":true,"type":[[["string"]]],"meta":{"line":319,"file":"Guild.js","path":"src/structures"}},{"name":"explicitContentFilter","description":"The explicit content filter level of the guild.","type":[[["ExplicitContentFilterLevel"]]],"meta":{"line":327,"file":"Guild.js","path":"src/structures"}},{"name":"mfaLevel","description":"The required MFA level for this guild.","type":[[["MFALevel"]]],"meta":{"line":335,"file":"Guild.js","path":"src/structures"}},{"name":"joinedTimestamp","description":"The timestamp the client user joined the guild at.","type":[[["number"]]],"meta":{"line":343,"file":"Guild.js","path":"src/structures"}},{"name":"defaultMessageNotifications","description":"The default message notification level of the guild.","type":[[["DefaultMessageNotificationLevel"]]],"meta":{"line":351,"file":"Guild.js","path":"src/structures"}},{"name":"systemChannelFlags","description":"The value set for the guild's system channel flags.","type":[[["Readonly","<"],["SystemChannelFlags",">"]]],"meta":{"line":359,"file":"Guild.js","path":"src/structures"}},{"name":"maximumMembers","description":"The maximum amount of members the guild can have.","nullable":true,"type":[[["number"]]],"meta":{"line":367,"file":"Guild.js","path":"src/structures"}},{"name":"maximumPresences","description":"The maximum amount of presences the guild can have.\nYou will need to fetch the guild using {@link Guild#fetch} if you want to receive this parameter.","nullable":true,"type":[[["number"]]],"meta":{"line":378,"file":"Guild.js","path":"src/structures"}},{"name":"maxVideoChannelUsers","description":"The maximum amount of users allowed in a video channel.","nullable":true,"type":[[["number"]]],"meta":{"line":388,"file":"Guild.js","path":"src/structures"}},{"name":"maxStageVideoChannelUsers","description":"The maximum amount of users allowed in a stage video channel.","nullable":true,"type":[[["number"]]],"meta":{"line":398,"file":"Guild.js","path":"src/structures"}},{"name":"approximateMemberCount","description":"The approximate amount of members the guild has.\nYou will need to fetch the guild using {@link Guild#fetch} if you want to receive this parameter.","nullable":true,"type":[[["number"]]],"meta":{"line":409,"file":"Guild.js","path":"src/structures"}},{"name":"approximatePresenceCount","description":"The approximate amount of presences the guild has.\nYou will need to fetch the guild using {@link Guild#fetch} if you want to receive this parameter.","nullable":true,"type":[[["number"]]],"meta":{"line":420,"file":"Guild.js","path":"src/structures"}},{"name":"vanityURLUses","description":"The use count of the vanity URL code of the guild, if any.\nYou will need to fetch this parameter using {@link Guild#fetchVanityData} if you want to receive it.","nullable":true,"type":[[["number"]]],"meta":{"line":430,"file":"Guild.js","path":"src/structures"}},{"name":"rulesChannelId","description":"The rules channel's id for the guild.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":437,"file":"Guild.js","path":"src/structures"}},{"name":"publicUpdatesChannelId","description":"The community updates channel's id for the guild.","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":445,"file":"Guild.js","path":"src/structures"}},{"name":"preferredLocale","description":"The preferred locale of the guild, defaults to `en-US`.","see":["{@link https://discord.com/developers/docs/reference#locales}"],"type":[[["Locale"]]],"meta":{"line":454,"file":"Guild.js","path":"src/structures"}},{"name":"safetyAlertsChannelId","description":"The safety alerts channel's id for the guild","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":462,"file":"Guild.js","path":"src/structures"}},{"name":"ownerId","description":"The user id of this guild's owner.","type":[[["Snowflake"]]],"meta":{"line":495,"file":"Guild.js","path":"src/structures"}},{"name":"emojis","description":"A manager of the emojis belonging to this guild.","type":[[["GuildEmojiManager"]]],"meta":{"line":530,"file":"Guild.js","path":"src/structures"}},{"name":"stickers","description":"A manager of the stickers belonging to this guild.","type":[[["GuildStickerManager"]]],"meta":{"line":544,"file":"Guild.js","path":"src/structures"}},{"name":"joinedAt","description":"The time the client user joined the guild.","readonly":true,"type":[[["Date"]]],"meta":{"line":561,"file":"Guild.js","path":"src/structures"}},{"name":"afkChannel","description":"AFK voice channel for this guild.","readonly":true,"nullable":true,"type":[[["VoiceChannel"]]],"meta":{"line":589,"file":"Guild.js","path":"src/structures"}},{"name":"systemChannel","description":"System channel for this guild.","readonly":true,"nullable":true,"type":[[["TextChannel"]]],"meta":{"line":598,"file":"Guild.js","path":"src/structures"}},{"name":"safetyAlertsChannel","description":"Safety alerts channel for this guild","readonly":true,"nullable":true,"type":[[["TextChannel"]]],"meta":{"line":607,"file":"Guild.js","path":"src/structures"}},{"name":"widgetChannel","description":"Widget channel for this guild.","readonly":true,"nullable":true,"type":[[["TextChannel"]],[["NewsChannel"]],[["VoiceChannel"]],[["StageChannel"]],[["ForumChannel"]]],"meta":{"line":616,"file":"Guild.js","path":"src/structures"}},{"name":"rulesChannel","description":"Rules channel for this guild.","readonly":true,"nullable":true,"type":[[["TextChannel"]]],"meta":{"line":625,"file":"Guild.js","path":"src/structures"}},{"name":"publicUpdatesChannel","description":"Public updates channel for this guild.","readonly":true,"nullable":true,"type":[[["TextChannel"]]],"meta":{"line":634,"file":"Guild.js","path":"src/structures"}},{"name":"me","description":"The client user as a GuildMember of this guild.","readonly":true,"nullable":true,"deprecated":"Use {@link GuildMemberManager#me} instead.","type":[[["GuildMember"]]],"meta":{"line":644,"file":"Guild.js","path":"src/structures"}},{"name":"maximumBitrate","description":"The maximum bitrate available for this guild.","readonly":true,"type":[[["number"]]],"meta":{"line":658,"file":"Guild.js","path":"src/structures"}},{"name":"voiceAdapterCreator","description":"The voice state adapter for this guild that can be used with @discordjs/voice to play audio in voice\nand stage channels.","readonly":true,"type":[[["function"]]],"meta":{"line":1673,"file":"Guild.js","path":"src/structures"}},{"name":"splash","description":"The hash of the guild invite splash image","nullable":true,"type":[[["string"]]],"meta":{"line":25,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"banner","description":"The hash of the guild banner","nullable":true,"type":[[["string"]]],"meta":{"line":33,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"description","description":"The description of the guild, if any","nullable":true,"type":[[["string"]]],"meta":{"line":41,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"verificationLevel","description":"The verification level of the guild","type":[[["VerificationLevel"]]],"meta":{"line":49,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"vanityURLCode","description":"The vanity invite code of the guild, if any","nullable":true,"type":[[["string"]]],"meta":{"line":57,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"nsfwLevel","description":"The NSFW level of this guild","type":[[["NSFWLevel"]]],"meta":{"line":65,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"premiumSubscriptionCount","description":"The total number of boosts for this server","nullable":true,"type":[[["number"]]],"meta":{"line":73,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"id","description":"The guild's id","type":[[["Snowflake"]]],"meta":{"line":19,"file":"BaseGuild.js","path":"src/structures"}},{"name":"name","description":"The name of this guild","type":[[["string"]]],"meta":{"line":25,"file":"BaseGuild.js","path":"src/structures"}},{"name":"icon","description":"The icon hash of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":31,"file":"BaseGuild.js","path":"src/structures"}},{"name":"features","description":"An array of features available to this guild","type":[[["Array","<"],["Features",">"]]],"meta":{"line":37,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this guild was created at","readonly":true,"type":[[["number"]]],"meta":{"line":45,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdAt","description":"The time this guild was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":54,"file":"BaseGuild.js","path":"src/structures"}},{"name":"nameAcronym","description":"The acronym that shows up in place of a guild icon","readonly":true,"type":[[["string"]]],"meta":{"line":63,"file":"BaseGuild.js","path":"src/structures"}},{"name":"partnered","description":"Whether this guild is partnered","readonly":true,"type":[[["boolean"]]],"meta":{"line":75,"file":"BaseGuild.js","path":"src/structures"}},{"name":"verified","description":"Whether this guild is verified","readonly":true,"type":[[["boolean"]]],"meta":{"line":84,"file":"BaseGuild.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"discoverySplashURL","description":"The URL to this guild's discovery splash image.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":570,"file":"Guild.js","path":"src/structures"}},{"name":"fetchOwner","description":"Fetches the owner of the guild.\nIf the member object isn't needed, use {@link Guild#ownerId} instead.","params":[{"name":"options","description":"The options for fetching the member","optional":true,"type":[[["BaseFetchOptions"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":580,"file":"Guild.js","path":"src/structures"}},{"name":"mute","description":"Mute a guild","examples":["guild.mute(true, 3600) // mutes the guild for an hour\nguild.mute(true, -1) // mutes the guild forever\nguild.mute(false); // unmutes the guild"],"params":[{"name":"mute","description":"Weather or not you want to mute the guild","type":[[["boolean"]]]},{"name":"time","description":"The amount of time you want to mute the server for in seconds","nullable":true,"type":[[["number"]]]}],"async":true,"returns":{"types":[[["boolean"]]],"description":"true if it worked and false if it didn't"},"meta":{"line":685,"file":"Guild.js","path":"src/structures"}},{"name":"fetchIntegrations","description":"Fetches a collection of integrations to this guild.\nResolves with a collection mapping integrations by their ids.","examples":["// Fetch integrations\nguild.fetchIntegrations()\n .then(integrations => console.log(`Fetched ${integrations.size} integrations`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Collection","<("],["Snowflake","|"],["string","), "],["Integration",">>"]]],"meta":{"line":709,"file":"Guild.js","path":"src/structures"}},{"name":"fetchTemplates","description":"Fetches a collection of templates from this guild.\nResolves with a collection mapping templates by their codes.","async":true,"returns":[[["Promise","<"],["Collection","<"],["string",", "],["GuildTemplate",">>"]]],"meta":{"line":722,"file":"Guild.js","path":"src/structures"}},{"name":"fetchWelcomeScreen","description":"Fetches the welcome screen for this guild.","async":true,"returns":[[["Promise","<"],["WelcomeScreen",">"]]],"meta":{"line":731,"file":"Guild.js","path":"src/structures"}},{"name":"createTemplate","description":"Creates a template for the guild.","params":[{"name":"name","description":"The name for the template","type":[[["string"]]]},{"name":"description","description":"The description for the template","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildTemplate",">"]]],"meta":{"line":742,"file":"Guild.js","path":"src/structures"}},{"name":"fetchPreview","description":"Obtains a guild preview for this guild from Discord.","async":true,"returns":[[["Promise","<"],["GuildPreview",">"]]],"meta":{"line":751,"file":"Guild.js","path":"src/structures"}},{"name":"fetchVanityData","description":"Fetches the vanity URL invite object to this guild.\nResolves with an object containing the vanity URL invite code and the use count.","examples":["// Fetch invite data\nguild.fetchVanityData()\n .then(res => {\n console.log(`Vanity URL: https://discord.gg/${res.code} with ${res.uses} uses`);\n })\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Vanity",">"]]],"meta":{"line":775,"file":"Guild.js","path":"src/structures"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the guild.","examples":["// Fetch webhooks\nguild.fetchWebhooks()\n .then(webhooks => console.log(`Fetched ${webhooks.size} webhooks`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":792,"file":"Guild.js","path":"src/structures"}},{"name":"fetchWidget","description":"Fetches the guild widget data, requires the widget to be enabled.","examples":["// Fetches the guild widget data\nguild.fetchWidget()\n .then(widget => console.log(`The widget shows ${widget.channels.size} channels`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Widget",">"]]],"meta":{"line":810,"file":"Guild.js","path":"src/structures"}},{"name":"fetchWidgetSettings","description":"Fetches the guild widget settings.","examples":["// Fetches the guild widget settings\nguild.fetchWidgetSettings()\n .then(widget => console.log(`The widget is ${widget.enabled ? 'enabled' : 'disabled'}`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["GuildWidgetSettings",">"]]],"meta":{"line":837,"file":"Guild.js","path":"src/structures"}},{"name":"fetchAuditLogs","description":"Fetches audit logs for this guild.","examples":["// Output audit log entries\nguild.fetchAuditLogs()\n .then(audit => console.log(audit.entries.first()))\n .catch(console.error);"],"params":[{"name":"options","description":"Options for fetching audit logs","optional":true,"default":"{}","type":[[["GuildAuditLogsFetchOptions"]]]}],"async":true,"returns":[[["Promise","<"],["GuildAuditLogs",">"]]],"meta":{"line":867,"file":"Guild.js","path":"src/structures"}},{"name":"edit","description":"Updates the guild with new information - e.g. a new name.","examples":["// Set the guild name\nguild.edit({\n name: 'Discord Guild',\n})\n .then(updated => console.log(`New guild name ${updated}`))\n .catch(console.error);"],"params":[{"name":"data","description":"The data to update the guild with","type":[[["GuildEditData"]]]},{"name":"reason","description":"Reason for editing this guild","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":933,"file":"Guild.js","path":"src/structures"}},{"name":"editWelcomeScreen","description":"Updates the guild's welcome screen.","examples":["guild.editWelcomeScreen({\n description: 'Hello World',\n enabled: true,\n welcomeChannels: [\n {\n description: 'foobar',\n channel: '222197033908436994',\n }\n ],\n})"],"params":[{"name":"data","description":"Data to edit the welcome screen with","type":[[["WelcomeScreenEditData"]]]}],"async":true,"returns":[[["Promise","<"],["WelcomeScreen",">"]]],"meta":{"line":1048,"file":"Guild.js","path":"src/structures"}},{"name":"setExplicitContentFilter","description":"Edits the level of the explicit content filter.","params":[{"name":"explicitContentFilter","description":"The new level of the explicit content filter","nullable":true,"type":[[["ExplicitContentFilterLevel"]],[["number"]]]},{"name":"reason","description":"Reason for changing the level of the guild's explicit content filter","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1076,"file":"Guild.js","path":"src/structures"}},{"name":"setDefaultMessageNotifications","description":"Edits the setting of the default message notifications of the guild.","params":[{"name":"defaultMessageNotifications","description":"The new default message notification level of the guild","type":[[["DefaultMessageNotificationLevel"]],[["number"]]]},{"name":"reason","description":"Reason for changing the setting of the default message notifications","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1087,"file":"Guild.js","path":"src/structures"}},{"name":"setSystemChannelFlags","description":"Edits the flags of the default message notifications of the guild.","params":[{"name":"systemChannelFlags","description":"The new flags for the default message notifications","type":[[["SystemChannelFlagsResolvable"]]]},{"name":"reason","description":"Reason for changing the flags of the default message notifications","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1098,"file":"Guild.js","path":"src/structures"}},{"name":"setName","description":"Edits the name of the guild.","examples":["// Edit the guild name\nguild.setName('Discord Guild')\n .then(updated => console.log(`Updated guild name to ${updated.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name of the guild","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1113,"file":"Guild.js","path":"src/structures"}},{"name":"setVerificationLevel","description":"Edits the verification level of the guild.","examples":["// Edit the guild verification level\nguild.setVerificationLevel(1)\n .then(updated => console.log(`Updated guild verification level to ${guild.verificationLevel}`))\n .catch(console.error);"],"params":[{"name":"verificationLevel","description":"The new verification level of the guild","type":[[["VerificationLevel"]],[["number"]]]},{"name":"reason","description":"Reason for changing the guild's verification level","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1128,"file":"Guild.js","path":"src/structures"}},{"name":"setAFKChannel","description":"Edits the AFK channel of the guild.","examples":["// Edit the guild AFK channel\nguild.setAFKChannel(channel)\n .then(updated => console.log(`Updated guild AFK channel to ${guild.afkChannel.name}`))\n .catch(console.error);"],"params":[{"name":"afkChannel","description":"The new AFK channel","nullable":true,"type":[[["VoiceChannelResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's AFK channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1143,"file":"Guild.js","path":"src/structures"}},{"name":"setSystemChannel","description":"Edits the system channel of the guild.","examples":["// Edit the guild system channel\nguild.setSystemChannel(channel)\n .then(updated => console.log(`Updated guild system channel to ${guild.systemChannel.name}`))\n .catch(console.error);"],"params":[{"name":"systemChannel","description":"The new system channel","nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's system channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1158,"file":"Guild.js","path":"src/structures"}},{"name":"setAFKTimeout","description":"Edits the AFK timeout of the guild.","examples":["// Edit the guild AFK channel\nguild.setAFKTimeout(60)\n .then(updated => console.log(`Updated guild AFK timeout to ${guild.afkTimeout}`))\n .catch(console.error);"],"params":[{"name":"afkTimeout","description":"The time in seconds that a user must be idle to be considered AFK","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the guild's AFK timeout","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1173,"file":"Guild.js","path":"src/structures"}},{"name":"setIcon","description":"Sets a new guild icon.","examples":["// Edit the guild icon\nguild.setIcon('./icon.png')\n .then(updated => console.log('Updated the guild icon'))\n .catch(console.error);"],"params":[{"name":"icon","description":"The new icon of the guild","nullable":true,"type":[[["Base64Resolvable"]],[["BufferResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's icon","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1188,"file":"Guild.js","path":"src/structures"}},{"name":"setOwner","description":"Sets a new owner of the guild.","examples":["// Edit the guild owner\nguild.setOwner(guild.members.cache.first())\n .then(guild => guild.fetchOwner())\n .then(owner => console.log(`Updated the guild owner to ${owner.displayName}`))\n .catch(console.error);"],"params":[{"name":"owner","description":"The new owner of the guild","type":[[["GuildMemberResolvable"]]]},{"name":"reason","description":"Reason for setting the new owner","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1204,"file":"Guild.js","path":"src/structures"}},{"name":"setSplash","description":"Sets a new guild invite splash image.","examples":["// Edit the guild splash\nguild.setSplash('./splash.png')\n .then(updated => console.log('Updated the guild splash'))\n .catch(console.error);"],"params":[{"name":"splash","description":"The new invite splash image of the guild","nullable":true,"type":[[["Base64Resolvable"]],[["BufferResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's invite splash image","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1219,"file":"Guild.js","path":"src/structures"}},{"name":"setDiscoverySplash","description":"Sets a new guild discovery splash image.","examples":["// Edit the guild discovery splash\nguild.setDiscoverySplash('./discoverysplash.png')\n .then(updated => console.log('Updated the guild discovery splash'))\n .catch(console.error);"],"params":[{"name":"discoverySplash","description":"The new discovery splash image of the guild","nullable":true,"type":[[["Base64Resolvable"]],[["BufferResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's discovery splash image","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1234,"file":"Guild.js","path":"src/structures"}},{"name":"setBanner","description":"Sets a new guild's banner.","examples":["guild.setBanner('./banner.png')\n .then(updated => console.log('Updated the guild banner'))\n .catch(console.error);"],"params":[{"name":"banner","description":"The new banner of the guild","nullable":true,"type":[[["Base64Resolvable"]],[["BufferResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's banner","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1248,"file":"Guild.js","path":"src/structures"}},{"name":"setRulesChannel","description":"Edits the rules channel of the guild.","examples":["// Edit the guild rules channel\nguild.setRulesChannel(channel)\n .then(updated => console.log(`Updated guild rules channel to ${guild.rulesChannel.name}`))\n .catch(console.error);"],"params":[{"name":"rulesChannel","description":"The new rules channel","nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's rules channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1263,"file":"Guild.js","path":"src/structures"}},{"name":"setPosition","description":"Change Guild Position (from * to Folder or Home).","examples":["// Move guild to folderID 123456, index 1\nguild.setPosition(1, 'FOLDER', 123456)\n.then(guild => console.log(`Guild moved to folderID ${guild.folder.folderId}`));"],"params":[{"name":"position","description":"Guild Position\n* **WARNING**: Type = `FOLDER`, newPosition is the guild's index in the Folder.","type":[[["number"]]]},{"name":"type","description":"Move to folder or home\n* `FOLDER`: 1\n* `HOME`: 2","type":[[["string"]],[["number"]]]},{"name":"folderID","description":"If you want to move to folder","type":[[["string"]],[["number"]],[["void"]],[["null"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1280,"file":"Guild.js","path":"src/structures"}},{"name":"setPublicUpdatesChannel","description":"Edits the community updates channel of the guild.","examples":["// Edit the guild community updates channel\nguild.setPublicUpdatesChannel(channel)\n .then(updated => console.log(`Updated guild community updates channel to ${guild.publicUpdatesChannel.name}`))\n .catch(console.error);"],"params":[{"name":"publicUpdatesChannel","description":"The new community updates channel","nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's community updates channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1319,"file":"Guild.js","path":"src/structures"}},{"name":"setPreferredLocale","description":"Edits the preferred locale of the guild.","examples":["// Edit the guild preferred locale\nguild.setPreferredLocale('en-US')\n .then(updated => console.log(`Updated guild preferred locale to ${guild.preferredLocale}`))\n .catch(console.error);"],"params":[{"name":"preferredLocale","description":"The new preferred locale of the guild","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild's preferred locale","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1334,"file":"Guild.js","path":"src/structures"}},{"name":"setSafetyAlertsChannel","description":"Edits the safety alerts channel of the guild.","examples":["// Edit the guild safety alerts channel\nguild.setSafetyAlertsChannel(channel)\n .then(updated => console.log(`Updated guild safety alerts channel to ${updated.safetyAlertsChannel.name}`))\n .catch(console.error);"],"params":[{"name":"safetyAlertsChannel","description":"The new safety alerts channel","nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for changing the guild's safety alerts channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1349,"file":"Guild.js","path":"src/structures"}},{"name":"setPremiumProgressBarEnabled","description":"Edits the enabled state of the guild's premium progress bar.","params":[{"name":"enabled","description":"The new enabled state of the guild's premium progress bar","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the state of the guild's premium progress bar","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1359,"file":"Guild.js","path":"src/structures"}},{"name":"setChannelPositions","description":"Batch-updates the guild's channels' positions.\nOnly one channel's parent can be changed at a time.","examples":["guild.setChannelPositions([{ channel: channelId, position: newChannelIndex }])\n .then(guild => console.log(`Updated channel positions for ${guild}`))\n .catch(console.error);"],"deprecated":"Use {@link GuildChannelManager#setPositions} instead","params":[{"name":"channelPositions","description":"Channel positions to update","type":[[["Array","<"],["ChannelPosition",">"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1390,"file":"Guild.js","path":"src/structures"}},{"name":"setRolePositions","description":"Batch-updates the guild's role positions.","examples":["guild.setRolePositions([{ role: roleId, position: updatedRoleIndex }])\n .then(guild => console.log(`Role positions updated for ${guild}`))\n .catch(console.error);"],"deprecated":"Use {@link RoleManager#setPositions} instead","params":[{"name":"rolePositions","description":"Role positions to update","type":[[["Array","<"],["GuildRolePosition",">"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1420,"file":"Guild.js","path":"src/structures"}},{"name":"setWidgetSettings","description":"Edits the guild's widget settings.","params":[{"name":"settings","description":"The widget settings for the guild","type":[[["GuildWidgetSettingsData"]]]},{"name":"reason","description":"Reason for changing the guild's widget settings","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1439,"file":"Guild.js","path":"src/structures"}},{"name":"disableInvites","description":"Sets whether this guild's invites are disabled.","params":[{"name":"disabled","description":"Whether the invites are disabled","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1454,"file":"Guild.js","path":"src/structures"}},{"name":"leave","description":"Leaves the guild.","examples":["// Leave a guild\nguild.leave()\n .then(guild => console.log(`Left the guild ${guild.name}`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1469,"file":"Guild.js","path":"src/structures"}},{"name":"read","description":"Marks the guild as read.","examples":["const guild = client.guilds.fetch('222078108977594368');\nguild.read();"],"async":true,"returns":{"types":[[["Promise","<"],["undefined",">"]]],"description":"nothing :)"},"meta":{"line":1482,"file":"Guild.js","path":"src/structures"}},{"name":"delete","description":"Deletes the guild.","examples":["// Delete a guild\nguild.delete()\n .then(guild => console.log(`Deleted the guild ${guild.name}`))\n .catch(console.error);"],"params":[{"name":"mfaCode","description":"The MFA code for the guild owner","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":1496,"file":"Guild.js","path":"src/structures"}},{"name":"equals","description":"Whether this guild equals another guild. It compares all properties, so for most operations\nit is advisable to just compare `guild.id === guild2.id` as it is much faster and is often\nwhat most users need.","params":[{"name":"guild","description":"The guild to compare with","type":[[["Guild"]]]}],"returns":[[["boolean"]]],"meta":{"line":1511,"file":"Guild.js","path":"src/structures"}},{"name":"setCommunity","description":"Set Community Feature.","params":[{"name":"stats","description":"True / False to enable / disable Community Feature","default":true,"type":[[["boolean"]]]},{"name":"publicUpdatesChannel","description":"The community updates channel of the guild","default":"1","type":[[["TextChannelResolvable"]]]},{"name":"rulesChannel","description":"The new rules channel","default":"1","type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for changing the community feature","type":[[["string"]]]}],"async":true,"meta":{"line":1538,"file":"Guild.js","path":"src/structures"}},{"name":"addIntegration","description":"Add Integrations to the guild.","params":[{"name":"applicationId","description":"Application (ID) target","type":[[["Snowflake"]]]}],"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":1576,"file":"Guild.js","path":"src/structures"}},{"name":"addBot","description":"Add Bot to the guild.","params":[{"name":"bot","description":"BotId / ApplicationId","type":[[["UserResolvable"]]]},{"name":"permissions","description":"Permissions","nullable":true,"type":[[["PermissionResolvable"]]]}],"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":1600,"file":"Guild.js","path":"src/structures"}},{"name":"setVanityCode","description":"Set the vanity URL to this guild.\nResolves with an object containing the vanity URL invite code and the use count.","examples":["// Set invite code\nguild.setVanityCode('elysia')\n .then(res => {\n console.log(`Vanity URL: https://discord.gg/${res.code} with ${res.uses} uses`);\n })\n .catch(console.error);"],"params":[{"name":"code","description":"Vanity URL code","optional":true,"default":"''","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Vanity",">"]]],"meta":{"line":1641,"file":"Guild.js","path":"src/structures"}},{"name":"topEmojis","description":"Get the top emojis of this guild.","returns":[[["Promise","<"],["Collection","<"],["number",", "],["GuildEmoji",">>"]]],"meta":{"line":1693,"file":"Guild.js","path":"src/structures"}},{"name":"_sortedRoles","description":"Creates a collection of this guild's roles, sorted by their position and ids.","access":"private","returns":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":1714,"file":"Guild.js","path":"src/structures"}},{"name":"_sortedChannels","description":"Creates a collection of this guild's or a specific category's channels, sorted by their position and ids.","access":"private","params":[{"name":"channel","description":"Category to get the channels of","optional":true,"type":[[["GuildChannel"]]]}],"returns":[[["Collection","<"],["Snowflake",", "],["GuildChannel",">"]]],"meta":{"line":1724,"file":"Guild.js","path":"src/structures"}},{"name":"bannerURL","description":"The URL to this guild's banner.","inherits":"AnonymousGuild#bannerURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":84,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"splashURL","description":"The URL to this guild's invite splash image.","inherits":"AnonymousGuild#splashURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"iconURL","description":"The URL to this guild's icon.","inherits":"BaseGuild#iconURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"BaseGuild.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this guild.","inherits":"BaseGuild#fetch","inherited":true,"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":102,"file":"BaseGuild.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the guild's name instead of the Guild object.","inherits":"BaseGuild#toString","inherited":true,"returns":[[["string"]]],"meta":{"line":111,"file":"BaseGuild.js","path":"src/structures"}}],"meta":{"line":58,"file":"Guild.js","path":"src/structures"}},{"name":"GuildAuditLogs","description":"Audit logs entries are held in this class.","props":[{"name":"webhooks","description":"Cached webhooks","access":"private","type":[[["Collection","<"],["Snowflake",", "],["Webhook",">"]]],"meta":{"line":197,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"integrations","description":"Cached integrations","access":"private","type":[[["Collection","<("],["Snowflake","|"],["string","), "],["Integration",">"]]],"meta":{"line":209,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"applicationCommands","description":"Cached application commands, includes application commands from other applications","access":"private","type":[[["Collection","<"],["Snowflake",", "],["ApplicationCommand",">"]]],"meta":{"line":221,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"autoModerationRules","description":"Cached auto moderation rules.","access":"private","type":[[["Collection","<"],["Snowflake",", "],["AutoModerationRule",">"]]],"meta":{"line":233,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"entries","description":"The entries for this guild's audit logs","type":[[["Collection","<"],["Snowflake",", "],["GuildAuditLogsEntry",">"]]],"meta":{"line":243,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"Targets","description":"Key mirror of all available audit log targets.","scope":"static","type":[[["Object","<"],["string",", "],["string",">"]]],"meta":{"line":36,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"Actions","description":"All available actions keyed under their names to their numeric values.","scope":"static","type":[[["Object","<"],["string",", "],["number",">"]]],"meta":{"line":122,"file":"GuildAuditLogs.js","path":"src/structures"}}],"methods":[{"name":"build","description":"Handles possible promises for entry targets.","scope":"static","async":true,"returns":[[["Promise","<"],["GuildAuditLogs",">"]]],"meta":{"line":254,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"targetType","description":"Finds the target type from the entry action.","scope":"static","params":[{"name":"target","description":"The action target","type":[[["AuditLogAction"]]]}],"returns":[[["AuditLogTargetType"]]],"meta":{"line":288,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"actionType","description":"Finds the action type from the entry action.","scope":"static","params":[{"name":"action","description":"The action target","type":[[["AuditLogAction"]]]}],"returns":[[["AuditLogActionType"]]],"meta":{"line":321,"file":"GuildAuditLogs.js","path":"src/structures"}}],"meta":{"line":188,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"GuildAuditLogsEntry","description":"Audit logs entry.","props":[{"name":"targetType","description":"The target type of this entry","type":[[["AuditLogTargetType"]]],"meta":{"line":413,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"actionType","description":"The action type of this entry","type":[[["AuditLogActionType"]]],"meta":{"line":419,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"action","description":"Specific action type of this entry in its string presentation","type":[[["AuditLogAction"]]],"meta":{"line":425,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"reason","description":"The reason of this entry","nullable":true,"type":[[["string"]]],"meta":{"line":431,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"executorId","description":"The id of the user that executed this entry","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":437,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"executor","description":"The user that executed this entry","nullable":true,"type":[[["User"]]],"meta":{"line":443,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"changes","description":"Specific property changes","type":[[["Array","<"],["AuditLogChange",">"]]],"meta":{"line":461,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"id","description":"The entry's id","type":[[["Snowflake"]]],"meta":{"line":467,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"extra","description":"Any extra data from the entry","nullable":true,"type":[[["Object"]],[["Role"]],[["GuildMember"]]],"meta":{"line":473,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"targetId","description":"The id of the target of this entry","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":561,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"target","description":"The target of this entry","nullable":true,"type":[[["AuditLogEntryTarget"]]],"meta":{"line":567,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this entry was created at","readonly":true,"type":[[["number"]]],"meta":{"line":712,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"createdAt","description":"The time this entry was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":721,"file":"GuildAuditLogs.js","path":"src/structures"}}],"meta":{"line":406,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"GuildBan","description":"Represents a ban in a guild on Discord.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild in which the ban is","type":[[["Guild"]]],"meta":{"line":17,"file":"GuildBan.js","path":"src/structures"}},{"name":"user","description":"The user this ban applies to","type":[[["User"]]],"meta":{"line":28,"file":"GuildBan.js","path":"src/structures"}},{"name":"reason","description":"The reason for the ban","nullable":true,"type":[[["string"]]],"meta":{"line":36,"file":"GuildBan.js","path":"src/structures"}},{"name":"partial","description":"Whether this GuildBan is partial. If the reason is not provided the value is null","readonly":true,"type":[[["boolean"]]],"meta":{"line":45,"file":"GuildBan.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"fetch","description":"Fetches this GuildBan.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["GuildBan",">"]]],"meta":{"line":54,"file":"GuildBan.js","path":"src/structures"}}],"meta":{"line":9,"file":"GuildBan.js","path":"src/structures"}},{"name":"GuildBoost","description":"Represents a guild boost in a guild on Discord.","extends":[[["Base"]]],"props":[{"name":"id","description":"The id of the guild boost","type":[[["Snowflake"]]],"meta":{"line":21,"file":"GuildBoost.js","path":"src/structures"}},{"name":"subscriptionId","description":"The id of the subscription","type":[[["Snowflake"]]],"meta":{"line":28,"file":"GuildBoost.js","path":"src/structures"}},{"name":"premiumGuildSubscriptionId","description":"The premium guild subscription id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":35,"file":"GuildBoost.js","path":"src/structures"}},{"name":"guildId","description":"Guild id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":40,"file":"GuildBoost.js","path":"src/structures"}},{"name":"ended","description":"Ended ???","nullable":true,"type":[[["boolean"]]],"meta":{"line":45,"file":"GuildBoost.js","path":"src/structures"}},{"name":"canceled","description":"Whether the subscription is canceled","type":[[["boolean"]]],"meta":{"line":52,"file":"GuildBoost.js","path":"src/structures"}},{"name":"cooldownEndsAt","description":"The cooldown end date","type":[[["Date"]]],"meta":{"line":59,"file":"GuildBoost.js","path":"src/structures"}},{"name":"guilld","description":"The guild of the boost","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":67,"file":"GuildBoost.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"unsubscribe","description":"Cancel the boost","async":true,"returns":[[["Promise","<"],["GuildBoost",">"]]],"meta":{"line":75,"file":"GuildBoost.js","path":"src/structures"}},{"name":"subscribe","description":"Use the boost","params":[{"name":"guild","description":"The guild to use the boost on","type":[[["GuildResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["GuildBoost",">"]]],"meta":{"line":91,"file":"GuildBoost.js","path":"src/structures"}}],"meta":{"line":9,"file":"GuildBoost.js","path":"src/structures"}},{"name":"GuildChannel","description":"Represents a guild channel from any of the following:\n- {@link TextChannel}\n- {@link VoiceChannel}\n- {@link CategoryChannel}\n- {@link NewsChannel}\n- {@link StoreChannel}\n- {@link StageChannel}\n- {@link ForumChannel}","extends":[[["Channel"]]],"abstract":true,"props":[{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":274,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":22,"file":"GuildChannel.js","path":"src/structures"}},{"name":"GuildEmoji","description":"Represents a custom emoji.","extends":[[["BaseGuildEmoji"]]],"props":[{"name":"author","description":"The user who created this emoji","nullable":true,"type":[[["User"]]],"meta":{"line":20,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"_roles","description":"Array of role ids this emoji is active for","access":"private","type":[[["Array","<"],["Snowflake",">"]]],"meta":{"line":22,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"guild","description":"The guild this emoji is part of","type":[[["Guild"]]],"meta":{"line":33,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"deletable","description":"Whether the emoji is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":57,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"roles","description":"A manager for roles this emoji is active for.","readonly":true,"type":[[["GuildEmojiRoleManager"]]],"meta":{"line":67,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"requiresColons","description":"Whether or not this emoji requires colons surrounding it","nullable":true,"type":[[["boolean"]]],"meta":{"line":35,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"managed","description":"Whether this emoji is managed by an external service","nullable":true,"type":[[["boolean"]]],"meta":{"line":43,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"available","description":"Whether this emoji is available","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"animated","description":"Whether or not the emoji is animated","nullable":true,"type":[[["boolean"]]],"meta":{"line":34,"file":"Emoji.js","path":"src/structures"}},{"name":"name","description":"The emoji's name","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Emoji.js","path":"src/structures"}},{"name":"id","description":"The emoji's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Emoji.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":54,"file":"Emoji.js","path":"src/structures"}},{"name":"identifier","description":"The identifier of this emoji, used for message reactions","readonly":true,"type":[[["string"]]],"meta":{"line":84,"file":"Emoji.js","path":"src/structures"}},{"name":"url","description":"The URL to the emoji file if it's a custom emoji","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":94,"file":"Emoji.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":103,"file":"Emoji.js","path":"src/structures"}},{"name":"createdAt","description":"The time the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":112,"file":"Emoji.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"fetchAuthor","description":"Fetches the author for this emoji","returns":[[["Promise","<"],["User",">"]]],"meta":{"line":75,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"edit","description":"Edits the emoji.","examples":["// Edit an emoji\nemoji.edit({ name: 'newemoji' })\n .then(e => console.log(`Edited emoji ${e}`))\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the emoji","type":[[["GuildEmojiEditData"]]]},{"name":"reason","description":"Reason for editing this emoji","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":97,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"setName","description":"Sets the name of the emoji.","params":[{"name":"name","description":"The new name for the emoji","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the emoji's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":120,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"delete","description":"Deletes the emoji.","params":[{"name":"reason","description":"Reason for deleting the emoji","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildEmoji",">"]]],"meta":{"line":129,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"equals","description":"Whether this emoji is the same as another one.","params":[{"name":"other","description":"The emoji to compare it to","type":[[["GuildEmoji"]],[["APIEmoji"]]]}],"returns":[[["boolean"]]],"meta":{"line":139,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the text required to form a graphical emoji on Discord\ninstead of the Emoji object.","inherits":"Emoji#toString","inherited":true,"examples":["// Send a custom emoji from a guild:\nconst emoji = guild.emojis.cache.first();\nmsg.channel.send(`Hello! ${emoji}`);","// Send the emoji used in a reaction to the channel the reaction is part of\nreaction.message.channel.send(`The emoji used was: ${reaction.emoji}`);"],"returns":[[["string"]]],"meta":{"line":128,"file":"Emoji.js","path":"src/structures"}}],"meta":{"line":12,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"GuildFolder","description":"Guild Folder.","abstract":true,"props":[{"name":"id","description":"The guild folder's id","type":[[["Snowflake"]]],"meta":{"line":20,"file":"GuildFolder.js","path":"src/structures"}},{"name":"name","description":"The guild folder's name","type":[[["string"]]],"meta":{"line":28,"file":"GuildFolder.js","path":"src/structures"}},{"name":"color","description":"The base 10 color of the folder","type":[[["number"]]],"meta":{"line":36,"file":"GuildFolder.js","path":"src/structures"}},{"name":"guild_ids","description":"The guild folder's guild ids","type":[[["Array","<"],["Snowflake",">"]]],"meta":{"line":44,"file":"GuildFolder.js","path":"src/structures"}},{"name":"hexColor","description":"The hexadecimal version of the folder color, with a leading hashtag","readonly":true,"type":[[["string"]]],"meta":{"line":52,"file":"GuildFolder.js","path":"src/structures"}},{"name":"guilds","description":"Guilds in the folder","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Guild",">"]]],"meta":{"line":61,"file":"GuildFolder.js","path":"src/structures"}}],"meta":{"line":9,"file":"GuildFolder.js","path":"src/structures"}},{"name":"GuildMember","description":"Represents a member of a guild on Discord.","extends":[[["Base"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"guild","description":"The guild that this member is part of","type":[[["Guild"]]],"meta":{"line":34,"file":"GuildMember.js","path":"src/structures"}},{"name":"joinedTimestamp","description":"The timestamp the member joined the guild at","nullable":true,"type":[[["number"]]],"meta":{"line":40,"file":"GuildMember.js","path":"src/structures"}},{"name":"premiumSinceTimestamp","description":"The last timestamp this member started boosting the guild","nullable":true,"type":[[["number"]]],"meta":{"line":46,"file":"GuildMember.js","path":"src/structures"}},{"name":"nickname","description":"The nickname of this member, if they have one","nullable":true,"type":[[["string"]]],"meta":{"line":52,"file":"GuildMember.js","path":"src/structures"}},{"name":"pending","description":"Whether this member has yet to pass the guild's membership gate","type":[[["boolean"]]],"meta":{"line":58,"file":"GuildMember.js","path":"src/structures"}},{"name":"communicationDisabledUntilTimestamp","description":"The timestamp this member's timeout will be removed","nullable":true,"type":[[["number"]]],"meta":{"line":64,"file":"GuildMember.js","path":"src/structures"}},{"name":"_roles","description":"The role ids of the member","access":"private","type":[[["Array","<"],["Snowflake",">"]]],"meta":{"line":71,"file":"GuildMember.js","path":"src/structures"}},{"name":"user","description":"The user that this guild member instance represents","nullable":true,"type":[[["User"]]],"meta":{"line":81,"file":"GuildMember.js","path":"src/structures"}},{"name":"avatar","description":"The guild member's avatar hash","nullable":true,"type":[[["string"]]],"meta":{"line":90,"file":"GuildMember.js","path":"src/structures"}},{"name":"flags","description":"The flags of this member","type":[[["Readonly","<"],["GuildMemberFlags",">"]]],"meta":{"line":111,"file":"GuildMember.js","path":"src/structures"}},{"name":"accentColor","description":"The member's accent color\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["number"]]],"meta":{"line":124,"file":"GuildMember.js","path":"src/structures"}},{"name":"banner","description":"The member's banner hash\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":132,"file":"GuildMember.js","path":"src/structures"}},{"name":"bio","description":"The member's biography (About me)\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":140,"file":"GuildMember.js","path":"src/structures"}},{"name":"themeColors","description":"The member's theme colors (Profile theme) [Primary, Accent]\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["Array","<"],["number",">"]]],"meta":{"line":148,"file":"GuildMember.js","path":"src/structures"}},{"name":"hexThemeColor","description":"The hexadecimal version of the user theme color, with a leading hash [Primary, Accent]\nThe user must be force fetched for this property to be present or be updated","readonly":true,"nullable":true,"type":[[["Array","<"],["string",">"]]],"meta":{"line":158,"file":"GuildMember.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":173,"file":"GuildMember.js","path":"src/structures"}},{"name":"partial","description":"Whether this GuildMember is a partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":203,"file":"GuildMember.js","path":"src/structures"}},{"name":"roles","description":"A manager for the roles belonging to this member","readonly":true,"type":[[["GuildMemberRoleManager"]]],"meta":{"line":212,"file":"GuildMember.js","path":"src/structures"}},{"name":"voice","description":"The voice state of this member","readonly":true,"type":[[["VoiceState"]]],"meta":{"line":221,"file":"GuildMember.js","path":"src/structures"}},{"name":"joinedAt","description":"The time this member joined the guild","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":265,"file":"GuildMember.js","path":"src/structures"}},{"name":"communicationDisabledUntil","description":"The time this member's timeout will be removed","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":274,"file":"GuildMember.js","path":"src/structures"}},{"name":"premiumSince","description":"The last time this member started boosting the guild","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":283,"file":"GuildMember.js","path":"src/structures"}},{"name":"presence","description":"The presence of this guild member","readonly":true,"nullable":true,"type":[[["Presence"]]],"meta":{"line":292,"file":"GuildMember.js","path":"src/structures"}},{"name":"displayColor","description":"The displayed color of this member in base 10","readonly":true,"type":[[["number"]]],"meta":{"line":301,"file":"GuildMember.js","path":"src/structures"}},{"name":"displayHexColor","description":"The displayed color of this member in hexadecimal","readonly":true,"type":[[["string"]]],"meta":{"line":310,"file":"GuildMember.js","path":"src/structures"}},{"name":"id","description":"The member's id","readonly":true,"type":[[["Snowflake"]]],"meta":{"line":319,"file":"GuildMember.js","path":"src/structures"}},{"name":"displayName","description":"The nickname of this member, or their user display name if they don't have one","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":328,"file":"GuildMember.js","path":"src/structures"}},{"name":"permissions","description":"The overall set of permissions for this member, taking only roles and owner status into account","readonly":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":337,"file":"GuildMember.js","path":"src/structures"}},{"name":"manageable","description":"Whether the client user is above this user in the hierarchy, according to role position and guild ownership.\nThis is a prerequisite for many moderative actions.","readonly":true,"type":[[["boolean"]]],"meta":{"line":348,"file":"GuildMember.js","path":"src/structures"}},{"name":"kickable","description":"Whether this member is kickable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":361,"file":"GuildMember.js","path":"src/structures"}},{"name":"bannable","description":"Whether this member is bannable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":370,"file":"GuildMember.js","path":"src/structures"}},{"name":"moderatable","description":"Whether this member is moderatable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":379,"file":"GuildMember.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"avatarURL","description":"A link to the member's guild avatar.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":230,"file":"GuildMember.js","path":"src/structures"}},{"name":"bannerURL","description":"A link to the user's banner.\nThis method will throw an error if called before the user is force fetched Profile.\nSee {@link GuildMember#banner} for more info","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":242,"file":"GuildMember.js","path":"src/structures"}},{"name":"displayAvatarURL","description":"A link to the member's guild avatar if they have one.\nOtherwise, a link to their {@link User#displayAvatarURL} will be returned.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":[[["string"]]],"meta":{"line":256,"file":"GuildMember.js","path":"src/structures"}},{"name":"isCommunicationDisabled","description":"Whether this member is currently timed out","returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildMember.js","path":"src/structures"}},{"name":"permissionsIn","description":"Returns `channel.permissionsFor(guildMember)`. Returns permissions for a member in a guild channel,\ntaking into account roles and permission overwrites.","params":[{"name":"channel","description":"The guild channel to use as context","type":[[["GuildChannelResolvable"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":401,"file":"GuildMember.js","path":"src/structures"}},{"name":"edit","description":"Edits this member.","params":[{"name":"data","description":"The data to edit the member with","type":[[["GuildMemberEditData"]]]},{"name":"reason","description":"Reason for editing this user","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":413,"file":"GuildMember.js","path":"src/structures"}},{"name":"setNickname","description":"Sets the nickname for this member.","examples":["// Set a nickname for a guild member\nguildMember.setNickname('cool nickname', 'Needed a new nickname')\n .then(member => console.log(`Set nickname of ${member.user.username}`))\n .catch(console.error);","// Remove a nickname for a guild member\nguildMember.setNickname(null, 'No nicknames allowed!')\n .then(member => console.log(`Removed nickname for ${member.user.username}`))\n .catch(console.error);"],"params":[{"name":"nick","description":"The nickname for the guild member, or `null` if you want to reset their nickname","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for setting the nickname","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":433,"file":"GuildMember.js","path":"src/structures"}},{"name":"setFlags","description":"Sets the flags for this member.","params":[{"name":"flags","description":"The flags to set","type":[[["GuildMemberFlagsResolvable"]]]},{"name":"reason","description":"Reason for setting the flags","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":443,"file":"GuildMember.js","path":"src/structures"}},{"name":"setAvatar","description":"Sets the guild avatar of the logged in client.","params":[{"name":"avatar","description":"The new avatar","nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":452,"file":"GuildMember.js","path":"src/structures"}},{"name":"setBanner","description":"Sets the guild banner of the logged in client.","params":[{"name":"banner","description":"The new banner","nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":467,"file":"GuildMember.js","path":"src/structures"}},{"name":"setAboutMe","description":"Set Guild About me","params":[{"name":"bio","description":"Bio to set","default":null,"type":[[["string"]],[["null"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":482,"file":"GuildMember.js","path":"src/structures"}},{"name":"setThemeColors","description":"Change Theme color","params":[{"name":"primary","description":"The primary color of the user's profile","type":[[["ColorResolvable"]]]},{"name":"accent","description":"The accent color of the user's profile","type":[[["ColorResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":498,"file":"GuildMember.js","path":"src/structures"}},{"name":"createDM","description":"Creates a DM channel between the client and this member.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":525,"file":"GuildMember.js","path":"src/structures"}},{"name":"deleteDM","description":"Deletes any DMs with this member.","returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":533,"file":"GuildMember.js","path":"src/structures"}},{"name":"kick","description":"Kicks this member from the guild.","params":[{"name":"reason","description":"Reason for kicking user","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":542,"file":"GuildMember.js","path":"src/structures"}},{"name":"ban","description":"Bans this guild member.","examples":["// Ban a guild member, deleting a week's worth of messages\nguildMember.ban({ deleteMessageSeconds: 60 * 60 * 24 * 7, reason: 'They deserved it' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for the ban","optional":true,"type":[[["BanOptions"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":556,"file":"GuildMember.js","path":"src/structures"}},{"name":"disableCommunicationUntil","description":"Times this guild member out.","examples":["// Time a guild member out for 5 minutes\nguildMember.disableCommunicationUntil(Date.now() + (5 * 60 * 1000), 'They deserved it')\n .then(console.log)\n .catch(console.error);","// Remove the timeout of a guild member\nguildMember.disableCommunicationUntil(null)\n .then(member => console.log(`Removed timeout for ${member.displayName}`))\n .catch(console.error);"],"params":[{"name":"communicationDisabledUntil","description":"The date or timestamp\nfor the member's communication to be disabled until. Provide `null` to remove the timeout.","type":[[["DateResolvable"]],[["null"]]]},{"name":"reason","description":"The reason for this timeout.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":577,"file":"GuildMember.js","path":"src/structures"}},{"name":"timeout","description":"Times this guild member out.","examples":["// Time a guild member out for 5 minutes\nguildMember.timeout(5 * 60 * 1000, 'They deserved it')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"timeout","description":"The time in milliseconds\nfor the member's communication to be disabled until. Provide `null` to remove the timeout.","type":[[["number"]],[["null"]]]},{"name":"reason","description":"The reason for this timeout.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":593,"file":"GuildMember.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this GuildMember.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":602,"file":"GuildMember.js","path":"src/structures"}},{"name":"equals","description":"Whether this guild member equals another guild member. It compares all properties, so for most\ncomparison it is advisable to just compare `member.id === member2.id` as it is significantly faster\nand is often what most users need.","params":[{"name":"member","description":"The member to compare with","type":[[["GuildMember"]]]}],"returns":[[["boolean"]]],"meta":{"line":613,"file":"GuildMember.js","path":"src/structures"}},{"name":"getProfile","description":"Get profile guildMember","returns":[[["Promise","<"],["User",">"]]],"meta":{"line":636,"file":"GuildMember.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the user's mention instead of the GuildMember object.","examples":["// Logs: Hello from <@123456789012345678>!\nconsole.log(`Hello from ${member}!`);"],"returns":[[["string"]]],"meta":{"line":647,"file":"GuildMember.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this user.","implements":["TextBasedChannel#send"],"examples":["// Send a direct message\nguildMember.send('Hello!')\n .then(message => console.log(`Sent message: ${message.content} to ${guildMember.displayName}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":664,"file":"GuildMember.js","path":"src/structures"}}],"meta":{"line":26,"file":"GuildMember.js","path":"src/structures"}},{"name":"GuildPreview","description":"Represents the data about the guild any bot can preview, connected to the specified guild.","extends":[[["Base"]]],"props":[{"name":"id","description":"The id of this guild","type":[[["string"]]],"meta":{"line":27,"file":"GuildPreview.js","path":"src/structures"}},{"name":"name","description":"The name of this guild","type":[[["string"]]],"meta":{"line":34,"file":"GuildPreview.js","path":"src/structures"}},{"name":"icon","description":"The icon of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":42,"file":"GuildPreview.js","path":"src/structures"}},{"name":"splash","description":"The splash icon of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":50,"file":"GuildPreview.js","path":"src/structures"}},{"name":"discoverySplash","description":"The discovery splash icon of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":58,"file":"GuildPreview.js","path":"src/structures"}},{"name":"features","description":"An array of enabled guild features","type":[[["Array","<"],["Features",">"]]],"meta":{"line":66,"file":"GuildPreview.js","path":"src/structures"}},{"name":"approximateMemberCount","description":"The approximate count of members in this guild","type":[[["number"]]],"meta":{"line":74,"file":"GuildPreview.js","path":"src/structures"}},{"name":"approximatePresenceCount","description":"The approximate count of online members in this guild","type":[[["number"]]],"meta":{"line":82,"file":"GuildPreview.js","path":"src/structures"}},{"name":"description","description":"The description for this guild","nullable":true,"type":[[["string"]]],"meta":{"line":90,"file":"GuildPreview.js","path":"src/structures"}},{"name":"emojis","description":"Collection of emojis belonging to this guild","type":[[["Collection","<"],["Snowflake",", "],["GuildPreviewEmoji",">"]]],"meta":{"line":100,"file":"GuildPreview.js","path":"src/structures"}},{"name":"stickers","description":"Collection of stickers belonging to this guild","type":[[["Collection","<"],["Snowflake",", "],["Sticker",">"]]],"meta":{"line":112,"file":"GuildPreview.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this guild was created at","readonly":true,"type":[[["number"]]],"meta":{"line":122,"file":"GuildPreview.js","path":"src/structures"}},{"name":"createdAt","description":"The time this guild was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":131,"file":"GuildPreview.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"splashURL","description":"The URL to this guild's splash.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":140,"file":"GuildPreview.js","path":"src/structures"}},{"name":"discoverySplashURL","description":"The URL to this guild's discovery splash.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":149,"file":"GuildPreview.js","path":"src/structures"}},{"name":"iconURL","description":"The URL to this guild's icon.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":158,"file":"GuildPreview.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this guild.","async":true,"returns":[[["Promise","<"],["GuildPreview",">"]]],"meta":{"line":166,"file":"GuildPreview.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the guild's name instead of the Guild object.","examples":["// Logs: Hello from My Guild!\nconsole.log(`Hello from ${previewGuild}!`);"],"returns":[[["string"]]],"meta":{"line":179,"file":"GuildPreview.js","path":"src/structures"}}],"meta":{"line":13,"file":"GuildPreview.js","path":"src/structures"}},{"name":"GuildPreviewEmoji","description":"Represents an instance of an emoji belonging to a public guild obtained through Discord's preview endpoint.","extends":[[["BaseGuildEmoji"]]],"props":[{"name":"guild","description":"The public guild this emoji is part of","type":[[["GuildPreview"]]],"meta":{"line":10,"file":"GuildPreviewEmoji.js","path":"src/structures"}},{"name":"roles","description":"The roles this emoji is active for","type":[[["Array","<"],["Snowflake",">"]]],"meta":{"line":23,"file":"GuildPreviewEmoji.js","path":"src/structures"}},{"name":"requiresColons","description":"Whether or not this emoji requires colons surrounding it","nullable":true,"type":[[["boolean"]]],"meta":{"line":35,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"managed","description":"Whether this emoji is managed by an external service","nullable":true,"type":[[["boolean"]]],"meta":{"line":43,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"available","description":"Whether this emoji is available","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"BaseGuildEmoji.js","path":"src/structures"}},{"name":"animated","description":"Whether or not the emoji is animated","nullable":true,"type":[[["boolean"]]],"meta":{"line":34,"file":"Emoji.js","path":"src/structures"}},{"name":"name","description":"The emoji's name","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Emoji.js","path":"src/structures"}},{"name":"id","description":"The emoji's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Emoji.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":54,"file":"Emoji.js","path":"src/structures"}},{"name":"identifier","description":"The identifier of this emoji, used for message reactions","readonly":true,"type":[[["string"]]],"meta":{"line":84,"file":"Emoji.js","path":"src/structures"}},{"name":"url","description":"The URL to the emoji file if it's a custom emoji","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":94,"file":"Emoji.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":103,"file":"Emoji.js","path":"src/structures"}},{"name":"createdAt","description":"The time the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":112,"file":"Emoji.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the text required to form a graphical emoji on Discord\ninstead of the Emoji object.","inherits":"Emoji#toString","inherited":true,"examples":["// Send a custom emoji from a guild:\nconst emoji = guild.emojis.cache.first();\nmsg.channel.send(`Hello! ${emoji}`);","// Send the emoji used in a reaction to the channel the reaction is part of\nreaction.message.channel.send(`The emoji used was: ${reaction.emoji}`);"],"returns":[[["string"]]],"meta":{"line":128,"file":"Emoji.js","path":"src/structures"}}],"meta":{"line":9,"file":"GuildPreviewEmoji.js","path":"src/structures"}},{"name":"GuildScheduledEvent","description":"Represents a scheduled event in a {@link Guild}.","extends":[[["Base"]]],"props":[{"name":"id","description":"The id of the guild scheduled event","type":[[["Snowflake"]]],"meta":{"line":25,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this guild scheduled event belongs to","type":[[["Snowflake"]]],"meta":{"line":31,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"channelId","description":"The channel id in which the scheduled event will be hosted, or `null` if entity type is `EXTERNAL`","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":42,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"creatorId","description":"The id of the user that created this guild scheduled event","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"name","description":"The name of the guild scheduled event","type":[[["string"]]],"meta":{"line":61,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"description","description":"The description of the guild scheduled event","nullable":true,"type":[[["string"]]],"meta":{"line":68,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"scheduledStartTimestamp","description":"The timestamp the guild scheduled event will start at\nThis can be potentially `null` only when it's an {@link AuditLogEntryTarget}","nullable":true,"type":[[["number"]]],"meta":{"line":78,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"scheduledEndTimestamp","description":"The timestamp the guild scheduled event will end at,\nor `null` if the event does not have a scheduled time to end","nullable":true,"type":[[["number"]]],"meta":{"line":85,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"privacyLevel","description":"The privacy level of the guild scheduled event","type":[[["PrivacyLevel"]]],"meta":{"line":91,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"status","description":"The status of the guild scheduled event","type":[[["GuildScheduledEventStatus"]]],"meta":{"line":97,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"entityType","description":"The type of hosting entity associated with the scheduled event","type":[[["GuildScheduledEventEntityType"]]],"meta":{"line":103,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"entityId","description":"The id of the hosting entity associated with the scheduled event","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":110,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"userCount","description":"The number of users who are subscribed to this guild scheduled event","nullable":true,"type":[[["number"]]],"meta":{"line":120,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"creator","description":"The user that created this guild scheduled event","nullable":true,"type":[[["User"]]],"meta":{"line":130,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"entityMetadata","description":"Additional metadata","nullable":true,"type":[[["GuildScheduledEventEntityMetadata"]]],"meta":{"line":150,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"image","description":"The cover image hash for this scheduled event","nullable":true,"type":[[["string"]]],"meta":{"line":165,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the guild scheduled event was created at","readonly":true,"type":[[["number"]]],"meta":{"line":185,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"createdAt","description":"The time the guild scheduled event was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":194,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"scheduledStartAt","description":"The time the guild scheduled event will start at","readonly":true,"type":[[["Date"]]],"meta":{"line":203,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"scheduledEndAt","description":"The time the guild scheduled event will end at,\nor `null` if the event does not have a scheduled time to end","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":213,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"channel","description":"The channel associated with this scheduled event","readonly":true,"nullable":true,"type":[[["VoiceChannel"]],[["StageChannel"]]],"meta":{"line":222,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"guild","description":"The guild this scheduled event belongs to","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":231,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"url","description":"The URL to the guild scheduled event","readonly":true,"type":[[["string"]]],"meta":{"line":240,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"coverImageURL","description":"The URL of this scheduled event's cover image","params":[{"name":"options","description":"Options for image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":176,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"createInviteURL","description":"Creates an invite URL to this guild scheduled event.","params":[{"name":"options","description":"The options to create the invite","optional":true,"type":[[["CreateGuildScheduledEventInviteURLOptions"]]]}],"async":true,"returns":[[["Promise","<"],["string",">"]]],"meta":{"line":256,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"edit","description":"Edits this guild scheduled event.","examples":["// Edit a guild scheduled event\nguildScheduledEvent.edit({ name: 'Party' })\n .then(guildScheduledEvent => console.log(guildScheduledEvent))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to edit the guild scheduled event","type":[[["GuildScheduledEventEditOptions"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":277,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"delete","description":"Deletes this guild scheduled event.","examples":["// Delete a guild scheduled event\nguildScheduledEvent.delete()\n .then(guildScheduledEvent => console.log(guildScheduledEvent))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":290,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild scheduled event.","examples":["// Set name of a guild scheduled event\nguildScheduledEvent.setName('Birthday Party')\n .then(guildScheduledEvent => console.log(`Set the name to: ${guildScheduledEvent.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name of the guild scheduled event","type":[[["string"]]]},{"name":"reason","description":"The reason for changing the name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":306,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"setScheduledStartTime","description":"Sets a new time to schedule the event at.","examples":["// Set start time of a guild scheduled event\nguildScheduledEvent.setScheduledStartTime('2022-09-24T00:00:00+05:30')\n .then(guildScheduledEvent => console.log(`Set the start time to: ${guildScheduledEvent.scheduledStartTime}`))\n .catch(console.error);"],"params":[{"name":"scheduledStartTime","description":"The time to schedule the event at","type":[[["DateResolvable"]]]},{"name":"reason","description":"The reason for changing the scheduled start time","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":321,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"setScheduledEndTime","description":"Sets a new time to end the event at.","examples":["// Set end time of a guild scheduled event\nguildScheduledEvent.setScheduledEndTime('2022-09-25T00:00:00+05:30')\n .then(guildScheduledEvent => console.log(`Set the end time to: ${guildScheduledEvent.scheduledEndTime}`))\n .catch(console.error);"],"params":[{"name":"scheduledEndTime","description":"The time to end the event at","type":[[["DateResolvable"]]]},{"name":"reason","description":"The reason for changing the scheduled end time","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":337,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"setDescription","description":"Sets the new description of the guild scheduled event.","examples":["// Set description of a guild scheduled event\nguildScheduledEvent.setDescription('A virtual birthday party')\n .then(guildScheduledEvent => console.log(`Set the description to: ${guildScheduledEvent.description}`))\n .catch(console.error);"],"params":[{"name":"description","description":"The description of the guild scheduled event","type":[[["string"]]]},{"name":"reason","description":"The reason for changing the description","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":352,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"setStatus","description":"Sets the new status of the guild scheduled event.\nIf you're working with TypeScript, use this method in conjunction with status type-guards\nlike {@link GuildScheduledEvent#isScheduled} to get only valid status as suggestion","examples":["// Set status of a guild scheduled event\nguildScheduledEvent.setStatus('ACTIVE')\n .then(guildScheduledEvent => console.log(`Set the status to: ${guildScheduledEvent.status}`))\n .catch(console.error);"],"params":[{"name":"status","description":"The status of the guild scheduled event","type":[[["GuildScheduledEventStatus"]],[["number"]]]},{"name":"reason","description":"The reason for changing the status","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":369,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"setLocation","description":"Sets the new location of the guild scheduled event.","examples":["// Set location of a guild scheduled event\nguildScheduledEvent.setLocation('Earth')\n .then(guildScheduledEvent => console.log(`Set the location to: ${guildScheduledEvent.entityMetadata.location}`))\n .catch(console.error);"],"params":[{"name":"location","description":"The location of the guild scheduled event","type":[[["string"]]]},{"name":"reason","description":"The reason for changing the location","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildScheduledEvent",">"]]],"meta":{"line":384,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"fetchSubscribers","description":"Fetches subscribers of this guild scheduled event.","params":[{"name":"options","description":"Options for fetching the subscribers","optional":true,"type":[[["FetchGuildScheduledEventSubscribersOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["GuildScheduledEventUser",">>"]]],"meta":{"line":393,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically concatenates the event's URL instead of the object.","examples":["// Logs: Event: https://discord.com/events/412345678901234567/499876543211234567\nconsole.log(`Event: ${guildScheduledEvent}`);"],"returns":[[["string"]]],"meta":{"line":404,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"isActive","description":"Indicates whether this guild scheduled event has an `ACTIVE` status.","returns":[[["boolean"]]],"meta":{"line":412,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"isCanceled","description":"Indicates whether this guild scheduled event has a `CANCELED` status.","returns":[[["boolean"]]],"meta":{"line":420,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"isCompleted","description":"Indicates whether this guild scheduled event has a `COMPLETED` status.","returns":[[["boolean"]]],"meta":{"line":428,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"isScheduled","description":"Indicates whether this guild scheduled event has a `SCHEDULED` status.","returns":[[["boolean"]]],"meta":{"line":436,"file":"GuildScheduledEvent.js","path":"src/structures"}}],"meta":{"line":17,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"GuildTemplate","description":"Represents the template for a guild.","extends":[[["Base"]]],"props":[{"name":"code","description":"The unique code of this template","type":[[["string"]]],"meta":{"line":24,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"name","description":"The name of this template","type":[[["string"]]],"meta":{"line":32,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"description","description":"The description of this template","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"usageCount","description":"The amount of times this template has been used","type":[[["number"]]],"meta":{"line":48,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"creatorId","description":"The id of the user that created this template","type":[[["Snowflake"]]],"meta":{"line":56,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"creator","description":"The user that created this template","type":[[["User"]]],"meta":{"line":64,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"createdAt","description":"The time when this template was created at","type":[[["Date"]]],"meta":{"line":72,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"updatedAt","description":"The time when this template was last synced to the guild","type":[[["Date"]]],"meta":{"line":80,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild that this template belongs to","type":[[["Snowflake"]]],"meta":{"line":88,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"serializedGuild","description":"The data of the guild that this template would create","type":[[["APIGuild"]]],"meta":{"line":96,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"unSynced","description":"Whether this template has unsynced changes","nullable":true,"type":[[["boolean"]]],"meta":{"line":103,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp of when this template was created at","readonly":true,"type":[[["number"]]],"meta":{"line":187,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"updatedTimestamp","description":"The timestamp of when this template was last synced to the guild","readonly":true,"type":[[["number"]]],"meta":{"line":196,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"guild","description":"The guild that this template belongs to","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":205,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"url","description":"The URL of this template","readonly":true,"type":[[["string"]]],"meta":{"line":214,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}},{"name":"GUILD_TEMPLATES_PATTERN","description":"Regular expression that globally matches guild template links","scope":"static","type":[[["RegExp"]]],"meta":{"line":234,"file":"GuildTemplate.js","path":"src/structures"}}],"methods":[{"name":"createGuild","description":"Creates a guild based on this template.\nThis is only available to bots in fewer than 10 guilds.","params":[{"name":"name","description":"The name of the guild","type":[[["string"]]]},{"name":"icon","description":"The icon for the guild","optional":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":115,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"edit","description":"Updates the metadata of this template.","params":[{"name":"options","description":"Options for editing the template","optional":true,"type":[[["EditGuildTemplateOptions"]]]}],"async":true,"returns":[[["Promise","<"],["GuildTemplate",">"]]],"meta":{"line":159,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"delete","description":"Deletes this template.","async":true,"returns":[[["Promise","<"],["GuildTemplate",">"]]],"meta":{"line":168,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"sync","description":"Syncs this template to the current state of the guild.","async":true,"returns":[[["Promise","<"],["GuildTemplate",">"]]],"meta":{"line":177,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the template's code instead of the template object.","examples":["// Logs: Template: FKvmczH2HyUf\nconsole.log(`Template: ${guildTemplate}!`);"],"returns":[[["string"]]],"meta":{"line":225,"file":"GuildTemplate.js","path":"src/structures"}}],"meta":{"line":12,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"Integration","description":"Represents a guild integration.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild this integration belongs to","type":[[["Guild"]]],"meta":{"line":34,"file":"Integration.js","path":"src/structures"}},{"name":"id","description":"The integration id","type":[[["Snowflake"]],[["string"]]],"meta":{"line":40,"file":"Integration.js","path":"src/structures"}},{"name":"name","description":"The integration name","type":[[["string"]]],"meta":{"line":46,"file":"Integration.js","path":"src/structures"}},{"name":"type","description":"The integration type","type":[[["IntegrationType"]]],"meta":{"line":52,"file":"Integration.js","path":"src/structures"}},{"name":"enabled","description":"Whether this integration is enabled","type":[[["boolean"]]],"meta":{"line":58,"file":"Integration.js","path":"src/structures"}},{"name":"syncing","description":"Whether this integration is syncing","nullable":true,"type":[[["boolean"]]],"meta":{"line":64,"file":"Integration.js","path":"src/structures"}},{"name":"role","description":"The role that this integration uses for subscribers","nullable":true,"type":[[["Role"]]],"meta":{"line":70,"file":"Integration.js","path":"src/structures"}},{"name":"enableEmoticons","description":"Whether emoticons should be synced for this integration (twitch only currently)","nullable":true,"type":[[["boolean"]]],"meta":{"line":77,"file":"Integration.js","path":"src/structures"}},{"name":"user","description":"The user for this integration","nullable":true,"type":[[["User"]]],"meta":{"line":87,"file":"Integration.js","path":"src/structures"}},{"name":"account","description":"The account integration information","type":[[["IntegrationAccount"]]],"meta":{"line":96,"file":"Integration.js","path":"src/structures"}},{"name":"syncedAt","description":"The last time this integration was last synced","nullable":true,"type":[[["number"]]],"meta":{"line":102,"file":"Integration.js","path":"src/structures"}},{"name":"subscriberCount","description":"How many subscribers this integration has","nullable":true,"type":[[["number"]]],"meta":{"line":109,"file":"Integration.js","path":"src/structures"}},{"name":"revoked","description":"Whether this integration has been revoked","nullable":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Integration.js","path":"src/structures"}},{"name":"roles","description":"All roles that are managed by this integration","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":132,"file":"Integration.js","path":"src/structures"}},{"name":"expireBehavior","description":"The behavior of expiring subscribers","nullable":true,"type":[[["number"]]],"meta":{"line":143,"file":"Integration.js","path":"src/structures"}},{"name":"expireGracePeriod","description":"The grace period before expiring subscribers","nullable":true,"type":[[["number"]]],"meta":{"line":151,"file":"Integration.js","path":"src/structures"}},{"name":"application","description":"The application for this integration","nullable":true,"type":[[["IntegrationApplication"]]],"meta":{"line":162,"file":"Integration.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"delete","description":"Deletes this integration.","params":[{"name":"reason","description":"Reason for deleting this integration","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Integration",">"]]],"meta":{"line":174,"file":"Integration.js","path":"src/structures"}}],"meta":{"line":26,"file":"Integration.js","path":"src/structures"}},{"name":"IntegrationApplication","description":"Represents an Integration's OAuth2 Application.","extends":[[["Application"]]],"props":[{"name":"bot","description":"The bot user for this application","nullable":true,"type":[[["User"]]],"meta":{"line":18,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"termsOfServiceURL","description":"The URL of the application's terms of service","nullable":true,"type":[[["string"]]],"meta":{"line":28,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"privacyPolicyURL","description":"The URL of the application's privacy policy","nullable":true,"type":[[["string"]]],"meta":{"line":38,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"rpcOrigins","description":"The Array of RPC origin URLs","type":[[["Array","<"],["string",">"]]],"meta":{"line":48,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"summary","description":"The application's summary","nullable":true,"deprecated":"This property is no longer being sent by the API.","type":[[["string"]]],"meta":{"line":59,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"hook","description":"Whether the application can be default hooked by the client","nullable":true,"type":[[["boolean"]]],"meta":{"line":69,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"cover","description":"The hash of the application's cover image","nullable":true,"type":[[["string"]]],"meta":{"line":79,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"verifyKey","description":"The hex-encoded key for verification in interactions and the GameSDK's GetTicket","nullable":true,"type":[[["string"]]],"meta":{"line":89,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"id","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":29,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"name","description":"The name of the application","nullable":true,"type":[[["string"]]],"meta":{"line":36,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"description","description":"The application's description","nullable":true,"type":[[["string"]]],"meta":{"line":46,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"icon","description":"The application's icon hash","nullable":true,"type":[[["string"]]],"meta":{"line":56,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"roleConnectionsVerificationURL","description":"This application's role connection verification entry point URL","nullable":true,"type":[[["string"]]],"meta":{"line":66,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"createdTimestamp","description":"The timestamp the application was created at","readonly":true,"type":[[["number"]]],"meta":{"line":77,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"createdAt","description":"The time the application was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":86,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"invite","description":"Invites this application to a guild / server","inherits":"Application#invite","inherited":true,"params":[{"name":"guild_id","description":"The id of the guild that you want to invite the bot to","type":[[["Snowflake"]]]},{"name":"permissions","description":"The permissions for the bot in number form (the default is 8 / Administrator)","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"captcha","description":"The captcha key to add","optional":true,"default":null,"type":[[["string"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"nothing :)"},"meta":{"line":97,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"iconURL","description":"A link to the application's icon.","inherits":"Application#iconURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":127,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"coverURL","description":"A link to this application's cover image.","inherits":"Application#coverURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":137,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"fetchAssets","description":"Gets the application's rich presence assets.","inherits":"Application#fetchAssets","inherited":true,"deprecated":"This will be removed in the next major as it is unsupported functionality.","async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationAsset",">>"]]],"meta":{"line":155,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the application's name instead of the\nApplication object.","inherits":"Application#toString","inherited":true,"examples":["// Logs: Application name: My App\nconsole.log(`Application name: ${application}`);"],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":181,"file":"Application.js","path":"src/structures/interfaces"}}],"meta":{"line":9,"file":"IntegrationApplication.js","path":"src/structures"}},{"name":"Interaction","description":"Represents an interaction.","extends":[[["Base"]]],"props":[{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":12,"file":"Interaction.js","path":"src/structures"}},{"name":"InteractionCollector","description":"Collects interactions.\nWill automatically stop if the message ({@link Client#event:messageDelete messageDelete} or\n{@link Client#event:messageDeleteBulk messageDeleteBulk}),\nchannel ({@link Client#event:channelDelete channelDelete}), or\nguild ({@link Client#event:guildDelete guildDelete}) is deleted.\nInteraction collectors that do not specify `time` or `idle` may be prone to always running.\nEnsure your interaction collectors end via either of these options or manual cancellation.","extends":[[["Collector"]]],"construct":{"name":"InteractionCollector","params":[{"name":"client","description":"The client on which to collect interactions","type":[[["Client"]]]},{"name":"options","description":"The options to apply to this collector","optional":true,"default":"{}","type":[[["InteractionCollectorOptions"]]]}]},"props":[{"name":"messageId","description":"The message from which to collect interactions, if provided","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":42,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"channelId","description":"The channel from which to collect interactions, if provided","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":48,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"guildId","description":"The guild from which to collect interactions, if provided","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":57,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"interactionType","description":"The type of interaction to collect","nullable":true,"type":[[["InteractionType"]]],"meta":{"line":67,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"componentType","description":"The type of component to collect","nullable":true,"type":[[["MessageComponentType"]]],"meta":{"line":76,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"users","description":"The users that have interacted with this collector","type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":85,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"total","description":"The total number of interactions collected","type":[[["number"]]],"meta":{"line":91,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"endReason","description":"The reason this collector has ended with, or null if it hasn't ended yet","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":192,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this Collector","readonly":true,"type":[[["Client"]]],"meta":{"line":35,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"filter","description":"The filter applied to this collector","type":[[["CollectorFilter"]]],"meta":{"line":48,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"options","description":"The options of this collector","type":[[["CollectorOptions"]]],"meta":{"line":54,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"collected","description":"The items collected by this collector","type":[[["Collection"]]],"meta":{"line":60,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"ended","description":"Whether this collector has finished collecting","type":[[["boolean"]]],"meta":{"line":66,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_timeout","description":"Timeout for cleanup","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":73,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_idletimeout","description":"Timeout for cleanup due to inactivity","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":80,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"next","description":"Returns a promise that resolves with the next collected element;\nrejects with collected elements if the collector finishes without receiving a next element","readonly":true,"type":[[["Promise"]]],"meta":{"line":148,"file":"Collector.js","path":"src/structures/interfaces"}}],"methods":[{"name":"collect","description":"Handles an incoming interaction for possible collection.","access":"private","params":[{"name":"interaction","description":"The interaction to possibly collect","type":[[["Interaction"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":142,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"dispose","description":"Handles an interaction for possible disposal.","params":[{"name":"interaction","description":"The interaction that could be disposed of","type":[[["Interaction"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":162,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"empty","description":"Empties this interaction collector.","meta":{"line":180,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"_handleMessageDeletion","description":"Handles checking if the message has been deleted, and if so, stops the collector with the reason 'messageDelete'.","access":"private","params":[{"name":"message","description":"The message that was deleted","type":[[["Message"]]]}],"returns":[[["void"]]],"meta":{"line":205,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"_handleChannelDeletion","description":"Handles checking if the channel has been deleted, and if so, stops the collector with the reason 'channelDelete'.","access":"private","params":[{"name":"channel","description":"The channel that was deleted","type":[[["GuildChannel"]]]}],"returns":[[["void"]]],"meta":{"line":217,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"_handleThreadDeletion","description":"Handles checking if the thread has been deleted, and if so, stops the collector with the reason 'threadDelete'.","access":"private","params":[{"name":"thread","description":"The thread that was deleted","type":[[["ThreadChannel"]]]}],"returns":[[["void"]]],"meta":{"line":229,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"_handleGuildDeletion","description":"Handles checking if the guild has been deleted, and if so, stops the collector with the reason 'guildDelete'.","access":"private","params":[{"name":"guild","description":"The guild that was deleted","type":[[["Guild"]]]}],"returns":[[["void"]]],"meta":{"line":241,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"handleCollect","description":"Call this to handle an event as a collectable element. Accepts any event data as parameters.","inherits":"Collector#handleCollect","inherited":true,"emits":["Collector#event:collect"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":99,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"handleDispose","description":"Call this to remove an element from the collection. Accepts any event data as parameters.","inherits":"Collector#handleDispose","inherited":true,"emits":["Collector#event:dispose"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":126,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"stop","description":"Stops this collector and emits the `end` event.","inherits":"Collector#stop","inherited":true,"emits":["Collector#event:end"],"params":[{"name":"reason","description":"The reason this collector is ending","optional":true,"default":"'user'","type":[[["string"]]]}],"meta":{"line":180,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"resetTimer","description":"Resets the collector's timeout and idle timer.","inherits":"Collector#resetTimer","inherited":true,"params":[{"name":"options","description":"Options for resetting","optional":true,"type":[[["CollectorResetTimerOptions"]]]}],"meta":{"line":213,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"checkEnd","description":"Checks whether the collector should end, and if so, ends it.","inherits":"Collector#checkEnd","inherited":true,"returns":{"types":[[["boolean"]]],"description":"Whether the collector ended or not"},"meta":{"line":228,"file":"Collector.js","path":"src/structures/interfaces"}}],"events":[{"name":"collect","description":"Emitted whenever an interaction is collected.","params":[{"name":"interaction","description":"The interaction that was collected","type":[[["Interaction"]]]}],"meta":{"line":143,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"dispose","description":"Emitted whenever an interaction is disposed of.","params":[{"name":"interaction","description":"The interaction that was disposed of","type":[[["Interaction"]]]}],"meta":{"line":163,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"end","description":"Emitted when the collector is finished collecting.","params":[{"name":"collected","description":"The elements collected by the collector","type":[[["Collection"]]]},{"name":"reason","description":"The reason the collector ended","type":[[["string"]]]}],"meta":{"line":193,"file":"Collector.js","path":"src/structures/interfaces"}}],"meta":{"line":30,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"InteractionResponse","description":"Represents a interaction on Discord.","extends":[[["Base"]]],"props":[{"name":"channelId","description":"The id of the channel the interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":19,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the interaction was sent in, if any","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":25,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"sendData","description":"The interaction data was sent in","type":[[["Object"]]],"meta":{"line":31,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"id","description":"The interaction response's ID","type":[[["Snowflake"]]],"meta":{"line":41,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"nonce","description":"The interaction response's nonce","type":[[["Snowflake"]]],"meta":{"line":48,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction response was created at","readonly":true,"type":[[["number"]]],"meta":{"line":56,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction response was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":65,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"channel","description":"The channel that the interaction was sent in","readonly":true,"type":[[["TextBasedChannels"]]],"meta":{"line":74,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"guild","description":"The guild the inteaaction was sent in (if in a guild channel)","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":83,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"awaitModal","description":"Get Modal send from interaction","params":[{"name":"time","description":"Time to wait for modal","type":[[["number"]]]}],"returns":[[["Modal"]]],"meta":{"line":92,"file":"InteractionResponse.js","path":"src/structures"}}],"meta":{"line":12,"file":"InteractionResponse.js","path":"src/structures"}},{"name":"InteractionWebhook","description":"Represents a webhook for an Interaction","implements":[[["Webhook"]]],"construct":{"name":"InteractionWebhook","params":[{"name":"client","description":"The instantiating client","type":[[["Client"]]]},{"name":"id","description":"The application's id","type":[[["Snowflake"]]]},{"name":"token","description":"The interaction's token","type":[[["string"]]]}]},"props":[{"name":"client","description":"The client that instantiated the interaction webhook","readonly":true,"type":[[["Client"]]],"meta":{"line":16,"file":"InteractionWebhook.js","path":"src/structures"}},{"name":"id","description":"The webhook's id","type":[[["Snowflake"]]],"meta":{"line":55,"file":"Webhook.js","path":"src/structures"}},{"name":"url","description":"The URL of this webhook","readonly":true,"type":[[["string"]]],"meta":{"line":412,"file":"Webhook.js","path":"src/structures"}}],"methods":[{"name":"send","description":"Sends a message with this webhook.","implements":["Webhook#send"],"params":[{"name":"options","description":"The content for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":34,"file":"InteractionWebhook.js","path":"src/structures"}},{"name":"fetchMessage","description":"Gets a message that was sent by this webhook.","implements":["Webhook#fetchMessage"],"params":[{"name":"message","description":"The id of the message to fetch","type":[[["Snowflake"]],[["original","'"]]]},{"name":"cacheOrOptions","description":"The options to provide to fetch the message.\nA **deprecated** boolean may be passed instead to specify whether to cache the message.","optional":true,"default":"{}","type":[[["WebhookFetchMessageOptions"]],[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"description":"Returns the raw message data if the webhook was instantiated as a\n{@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned"},"meta":{"line":286,"file":"Webhook.js","path":"src/structures"}},{"name":"editMessage","description":"Edits a message that was sent by this webhook.","implements":["Webhook#editMessage"],"params":[{"name":"message","description":"The message to edit","type":[[["MessageResolvable"]],[["original","'"]]]},{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["WebhookEditMessageOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"description":"Returns the raw message data if the webhook was instantiated as a\n{@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned"},"meta":{"line":322,"file":"Webhook.js","path":"src/structures"}},{"name":"deleteMessage","description":"Delete a message that was sent by this webhook.","implements":["Webhook#deleteMessage"],"params":[{"name":"message","description":"The message to delete","type":[[["MessageResolvable"]],[["original","'"]]]},{"name":"threadId","description":"The id of the thread this message belongs to","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":374,"file":"Webhook.js","path":"src/structures"}}],"meta":{"line":9,"file":"InteractionWebhook.js","path":"src/structures"}},{"name":"Application","description":"Represents an OAuth2 Application.","extends":[[["Base"]]],"abstract":true,"props":[{"name":"id","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":29,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"name","description":"The name of the application","nullable":true,"type":[[["string"]]],"meta":{"line":36,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"description","description":"The application's description","nullable":true,"type":[[["string"]]],"meta":{"line":46,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"icon","description":"The application's icon hash","nullable":true,"type":[[["string"]]],"meta":{"line":56,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"roleConnectionsVerificationURL","description":"This application's role connection verification entry point URL","nullable":true,"type":[[["string"]]],"meta":{"line":66,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"createdTimestamp","description":"The timestamp the application was created at","readonly":true,"type":[[["number"]]],"meta":{"line":77,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"createdAt","description":"The time the application was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":86,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"invite","description":"Invites this application to a guild / server","params":[{"name":"guild_id","description":"The id of the guild that you want to invite the bot to","type":[[["Snowflake"]]]},{"name":"permissions","description":"The permissions for the bot in number form (the default is 8 / Administrator)","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"captcha","description":"The captcha key to add","optional":true,"default":null,"type":[[["string"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"nothing :)"},"meta":{"line":97,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"iconURL","description":"A link to the application's icon.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":127,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"coverURL","description":"A link to this application's cover image.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":137,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"fetchAssets","description":"Gets the application's rich presence assets.","deprecated":"This will be removed in the next major as it is unsupported functionality.","async":true,"returns":[[["Promise","<"],["Array","<"],["ApplicationAsset",">>"]]],"meta":{"line":155,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the application's name instead of the\nApplication object.","examples":["// Logs: Application name: My App\nconsole.log(`Application name: ${application}`);"],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":181,"file":"Application.js","path":"src/structures/interfaces"}}],"meta":{"line":18,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"Collector","description":"Abstract class for defining a new Collector.","extends":[[["EventEmitter"]]],"abstract":true,"props":[{"name":"client","description":"The client that instantiated this Collector","readonly":true,"type":[[["Client"]]],"meta":{"line":35,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"filter","description":"The filter applied to this collector","type":[[["CollectorFilter"]]],"meta":{"line":48,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"options","description":"The options of this collector","type":[[["CollectorOptions"]]],"meta":{"line":54,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"collected","description":"The items collected by this collector","type":[[["Collection"]]],"meta":{"line":60,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"ended","description":"Whether this collector has finished collecting","type":[[["boolean"]]],"meta":{"line":66,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_timeout","description":"Timeout for cleanup","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":73,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_idletimeout","description":"Timeout for cleanup due to inactivity","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":80,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"next","description":"Returns a promise that resolves with the next collected element;\nrejects with collected elements if the collector finishes without receiving a next element","readonly":true,"type":[[["Promise"]]],"meta":{"line":148,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"endReason","description":"The reason this collector has ended with, or null if it hasn't ended yet","readonly":true,"nullable":true,"abstract":true,"type":[[["string"]]],"meta":{"line":276,"file":"Collector.js","path":"src/structures/interfaces"}}],"methods":[{"name":"handleCollect","description":"Call this to handle an event as a collectable element. Accepts any event data as parameters.","emits":["Collector#event:collect"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":99,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"handleDispose","description":"Call this to remove an element from the collection. Accepts any event data as parameters.","emits":["Collector#event:dispose"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":126,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"stop","description":"Stops this collector and emits the `end` event.","emits":["Collector#event:end"],"params":[{"name":"reason","description":"The reason this collector is ending","optional":true,"default":"'user'","type":[[["string"]]]}],"meta":{"line":180,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"resetTimer","description":"Resets the collector's timeout and idle timer.","params":[{"name":"options","description":"Options for resetting","optional":true,"type":[[["CollectorResetTimerOptions"]]]}],"meta":{"line":213,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"checkEnd","description":"Checks whether the collector should end, and if so, ends it.","returns":{"types":[[["boolean"]]],"description":"Whether the collector ended or not"},"meta":{"line":228,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"collect","description":"Handles incoming events from the `handleCollect` function. Returns null if the event should not\nbe collected, or returns an object describing the data that should be stored.","see":["Collector#handleCollect"],"abstract":true,"params":[{"name":"args","description":"Any args the event listener emits","variable":true,"type":[["*"]]}],"returns":{"types":[["*"],[["Promise",""]]],"description":"Data to insert into collection, if any","nullable":true},"meta":{"line":286,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"dispose","description":"Handles incoming events from the `handleDispose`. Returns null if the event should not\nbe disposed, or returns the key that should be removed.","see":["Collector#handleDispose"],"abstract":true,"params":[{"name":"args","description":"Any args the event listener emits","variable":true,"type":[["*"]]}],"returns":{"types":[["*"]],"description":"Key to remove from the collection, if any","nullable":true},"meta":{"line":296,"file":"Collector.js","path":"src/structures/interfaces"}}],"events":[{"name":"collect","description":"Emitted whenever an element is collected.","params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"meta":{"line":105,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"dispose","description":"Emitted whenever an element is disposed of.","params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"meta":{"line":133,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"end","description":"Emitted when the collector is finished collecting.","params":[{"name":"collected","description":"The elements collected by the collector","type":[[["Collection"]]]},{"name":"reason","description":"The reason the collector ended","type":[[["string"]]]}],"meta":{"line":193,"file":"Collector.js","path":"src/structures/interfaces"}}],"meta":{"line":31,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"Invite","description":"Represents an invitation to a guild channel.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild the invite is for including welcome screen data if present","nullable":true,"type":[[["Guild"]],[["InviteGuild"]]],"meta":{"line":30,"file":"Invite.js","path":"src/structures"}},{"name":"code","description":"The code for this invite","type":[[["string"]]],"meta":{"line":40,"file":"Invite.js","path":"src/structures"}},{"name":"presenceCount","description":"The approximate number of online members of the guild this invite is for\nThis is only available when the invite was fetched through {@link Client#fetchInvite}.","nullable":true,"type":[[["number"]]],"meta":{"line":49,"file":"Invite.js","path":"src/structures"}},{"name":"memberCount","description":"The approximate total number of members of the guild this invite is for\nThis is only available when the invite was fetched through {@link Client#fetchInvite}.","nullable":true,"type":[[["number"]]],"meta":{"line":60,"file":"Invite.js","path":"src/structures"}},{"name":"temporary","description":"Whether or not this invite only grants temporary membership\nThis is only available when the invite was fetched through {@link GuildInviteManager#fetch}\nor created through {@link GuildInviteManager#create}.","nullable":true,"type":[[["boolean"]]],"meta":{"line":72,"file":"Invite.js","path":"src/structures"}},{"name":"maxAge","description":"The maximum age of the invite, in seconds, 0 if never expires\nThis is only available when the invite was fetched through {@link GuildInviteManager#fetch}\nor created through {@link GuildInviteManager#create}.","nullable":true,"type":[[["number"]]],"meta":{"line":84,"file":"Invite.js","path":"src/structures"}},{"name":"uses","description":"How many times this invite has been used\nThis is only available when the invite was fetched through {@link GuildInviteManager#fetch}\nor created through {@link GuildInviteManager#create}.","nullable":true,"type":[[["number"]]],"meta":{"line":96,"file":"Invite.js","path":"src/structures"}},{"name":"maxUses","description":"The maximum uses of this invite\nThis is only available when the invite was fetched through {@link GuildInviteManager#fetch}\nor created through {@link GuildInviteManager#create}.","nullable":true,"type":[[["number"]]],"meta":{"line":108,"file":"Invite.js","path":"src/structures"}},{"name":"inviterId","description":"The user's id who created this invite","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":118,"file":"Invite.js","path":"src/structures"}},{"name":"inviter","description":"The user who created this invite","nullable":true,"type":[[["User"]]],"meta":{"line":129,"file":"Invite.js","path":"src/structures"}},{"name":"targetUser","description":"The user whose stream to display for this voice channel stream invite","nullable":true,"type":[[["User"]]],"meta":{"line":140,"file":"Invite.js","path":"src/structures"}},{"name":"targetApplication","description":"The embedded application to open for this voice channel embedded application invite","nullable":true,"type":[[["IntegrationApplication"]]],"meta":{"line":150,"file":"Invite.js","path":"src/structures"}},{"name":"targetType","description":"The target type","nullable":true,"type":[[["TargetType"]]],"meta":{"line":168,"file":"Invite.js","path":"src/structures"}},{"name":"channelId","description":"The channel's id this invite is for","type":[[["Snowflake"]]],"meta":{"line":178,"file":"Invite.js","path":"src/structures"}},{"name":"channel","description":"The channel this invite is for","type":[[["Channel"]]],"meta":{"line":187,"file":"Invite.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this invite was created at","nullable":true,"type":[[["number"]]],"meta":{"line":196,"file":"Invite.js","path":"src/structures"}},{"name":"stageInstance","description":"The stage instance data if there is a public {@link StageInstance} in the stage channel this invite is for","nullable":true,"type":[[["InviteStageInstance"]]],"meta":{"line":212,"file":"Invite.js","path":"src/structures"}},{"name":"guildScheduledEvent","description":"The guild scheduled event data if there is a {@link GuildScheduledEvent} in the channel this invite is for","nullable":true,"type":[[["GuildScheduledEvent"]]],"meta":{"line":222,"file":"Invite.js","path":"src/structures"}},{"name":"createdAt","description":"The time the invite was created at","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":233,"file":"Invite.js","path":"src/structures"}},{"name":"deletable","description":"Whether the invite is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":242,"file":"Invite.js","path":"src/structures"}},{"name":"expiresTimestamp","description":"The timestamp the invite will expire at","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":257,"file":"Invite.js","path":"src/structures"}},{"name":"expiresAt","description":"The time the invite will expire at","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":269,"file":"Invite.js","path":"src/structures"}},{"name":"url","description":"The URL to the invite","readonly":true,"type":[[["string"]]],"meta":{"line":279,"file":"Invite.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}},{"name":"INVITES_PATTERN","description":"Regular expression that globally matches Discord invite links","scope":"static","type":[[["RegExp"]]],"meta":{"line":373,"file":"Invite.js","path":"src/structures"}}],"methods":[{"name":"delete","description":"Deletes this invite.","params":[{"name":"reason","description":"Reason for deleting this invite","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":288,"file":"Invite.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically concatenates the invite's URL instead of the object.","examples":["// Logs: Invite: https://discord.gg/A1b2C3\nconsole.log(`Invite: ${invite}`);"],"returns":[[["string"]]],"meta":{"line":300,"file":"Invite.js","path":"src/structures"}},{"name":"acceptInvite","description":"Join this Guild using this invite.","examples":["await client.fetchInvite('code').then(async invite => {\n await invite.acceptInvite();\n});"],"params":[{"name":"autoVerify","description":"Whether to automatically verify member","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":330,"file":"Invite.js","path":"src/structures"}}],"meta":{"line":18,"file":"Invite.js","path":"src/structures"}},{"name":"InviteGuild","description":"Represents a guild received from an invite, includes welcome screen data if available.","extends":[[["AnonymousGuild"]]],"props":[{"name":"welcomeScreen","description":"The welcome screen for this invite guild","nullable":true,"type":[[["WelcomeScreen"]]],"meta":{"line":18,"file":"InviteGuild.js","path":"src/structures"}},{"name":"splash","description":"The hash of the guild invite splash image","nullable":true,"type":[[["string"]]],"meta":{"line":25,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"banner","description":"The hash of the guild banner","nullable":true,"type":[[["string"]]],"meta":{"line":33,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"description","description":"The description of the guild, if any","nullable":true,"type":[[["string"]]],"meta":{"line":41,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"verificationLevel","description":"The verification level of the guild","type":[[["VerificationLevel"]]],"meta":{"line":49,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"vanityURLCode","description":"The vanity invite code of the guild, if any","nullable":true,"type":[[["string"]]],"meta":{"line":57,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"nsfwLevel","description":"The NSFW level of this guild","type":[[["NSFWLevel"]]],"meta":{"line":65,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"premiumSubscriptionCount","description":"The total number of boosts for this server","nullable":true,"type":[[["number"]]],"meta":{"line":73,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"id","description":"The guild's id","type":[[["Snowflake"]]],"meta":{"line":19,"file":"BaseGuild.js","path":"src/structures"}},{"name":"name","description":"The name of this guild","type":[[["string"]]],"meta":{"line":25,"file":"BaseGuild.js","path":"src/structures"}},{"name":"icon","description":"The icon hash of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":31,"file":"BaseGuild.js","path":"src/structures"}},{"name":"features","description":"An array of features available to this guild","type":[[["Array","<"],["Features",">"]]],"meta":{"line":37,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this guild was created at","readonly":true,"type":[[["number"]]],"meta":{"line":45,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdAt","description":"The time this guild was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":54,"file":"BaseGuild.js","path":"src/structures"}},{"name":"nameAcronym","description":"The acronym that shows up in place of a guild icon","readonly":true,"type":[[["string"]]],"meta":{"line":63,"file":"BaseGuild.js","path":"src/structures"}},{"name":"partnered","description":"Whether this guild is partnered","readonly":true,"type":[[["boolean"]]],"meta":{"line":75,"file":"BaseGuild.js","path":"src/structures"}},{"name":"verified","description":"Whether this guild is verified","readonly":true,"type":[[["boolean"]]],"meta":{"line":84,"file":"BaseGuild.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"bannerURL","description":"The URL to this guild's banner.","inherits":"AnonymousGuild#bannerURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":84,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"splashURL","description":"The URL to this guild's invite splash image.","inherits":"AnonymousGuild#splashURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"AnonymousGuild.js","path":"src/structures"}},{"name":"iconURL","description":"The URL to this guild's icon.","inherits":"BaseGuild#iconURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"BaseGuild.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this guild.","inherits":"BaseGuild#fetch","inherited":true,"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":102,"file":"BaseGuild.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the guild's name instead of the Guild object.","inherits":"BaseGuild#toString","inherited":true,"returns":[[["string"]]],"meta":{"line":111,"file":"BaseGuild.js","path":"src/structures"}}],"meta":{"line":10,"file":"InviteGuild.js","path":"src/structures"}},{"name":"InviteStageInstance","description":"Represents the data about a public {@link StageInstance} in an {@link Invite}.","extends":[[["Base"]]],"props":[{"name":"channelId","description":"The id of the stage channel this invite is for","type":[[["Snowflake"]]],"meta":{"line":18,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"guildId","description":"The stage channel's guild id","type":[[["Snowflake"]]],"meta":{"line":24,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"members","description":"The members speaking in the stage channel","type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":30,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"topic","description":"The topic of the stage instance","type":[[["string"]]],"meta":{"line":41,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"participantCount","description":"The number of users in the stage channel","type":[[["number"]]],"meta":{"line":49,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"speakerCount","description":"The number of users speaking in the stage channel","type":[[["number"]]],"meta":{"line":57,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"channel","description":"The stage channel this invite is for","readonly":true,"nullable":true,"type":[[["StageChannel"]]],"meta":{"line":72,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"guild","description":"The guild of the stage channel this invite is for","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":81,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"meta":{"line":10,"file":"InviteStageInstance.js","path":"src/structures"}},{"name":"Message","description":"Represents a message on Discord.","extends":[[["Base"]]],"props":[{"name":"channelId","description":"The id of the channel the message was sent in","type":[[["Snowflake"]]],"meta":{"line":45,"file":"Message.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the message was sent in, if any","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":51,"file":"Message.js","path":"src/structures"}},{"name":"id","description":"The message's id","type":[[["Snowflake"]]],"meta":{"line":61,"file":"Message.js","path":"src/structures"}},{"name":"position","description":"A generally increasing integer (there may be gaps or duplicates) that represents\nthe approximate position of the message in a thread.","nullable":true,"type":[[["number"]]],"meta":{"line":69,"file":"Message.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the message was sent at","type":[[["number"]]],"meta":{"line":78,"file":"Message.js","path":"src/structures"}},{"name":"type","description":"The type of the message","nullable":true,"type":[[["MessageType"]]],"meta":{"line":85,"file":"Message.js","path":"src/structures"}},{"name":"system","description":"Whether or not this message was sent by Discord, not actually a user (e.g. pin notifications)","nullable":true,"type":[[["boolean"]]],"meta":{"line":91,"file":"Message.js","path":"src/structures"}},{"name":"content","description":"The content of the message","nullable":true,"type":[[["string"]]],"meta":{"line":102,"file":"Message.js","path":"src/structures"}},{"name":"author","description":"The author of the message","nullable":true,"type":[[["User"]]],"meta":{"line":112,"file":"Message.js","path":"src/structures"}},{"name":"pinned","description":"Whether or not this message is pinned","nullable":true,"type":[[["boolean"]]],"meta":{"line":122,"file":"Message.js","path":"src/structures"}},{"name":"tts","description":"Whether or not the message was Text-To-Speech","nullable":true,"type":[[["boolean"]]],"meta":{"line":132,"file":"Message.js","path":"src/structures"}},{"name":"nonce","description":"A random number or string used for checking message delivery\nThis is only received after the message was sent successfully, and\nlost if re-fetched","nullable":true,"type":[[["string"]]],"meta":{"line":144,"file":"Message.js","path":"src/structures"}},{"name":"embeds","description":"A list of embeds in the message - e.g. YouTube Player","type":[[["Array","<"],["MessageEmbed",">"]]],"meta":{"line":154,"file":"Message.js","path":"src/structures"}},{"name":"components","description":"A list of MessageActionRows in the message","type":[[["Array","<"],["MessageActionRow",">"]]],"meta":{"line":164,"file":"Message.js","path":"src/structures"}},{"name":"attachments","description":"A collection of attachments in the message - e.g. Pictures - mapped by their ids","type":[[["Collection","<"],["Snowflake",", "],["MessageAttachment",">"]]],"meta":{"line":174,"file":"Message.js","path":"src/structures"}},{"name":"stickers","description":"A collection of stickers in the message","type":[[["Collection","<"],["Snowflake",", "],["Sticker",">"]]],"meta":{"line":189,"file":"Message.js","path":"src/structures"}},{"name":"editedTimestamp","description":"The timestamp the message was last edited at (if applicable)","nullable":true,"type":[[["number"]]],"meta":{"line":202,"file":"Message.js","path":"src/structures"}},{"name":"reactions","description":"A manager of the reactions belonging to this message","type":[[["ReactionManager"]]],"meta":{"line":212,"file":"Message.js","path":"src/structures"}},{"name":"mentions","description":"All valid mentions that the message contains","type":[[["MessageMentions"]]],"meta":{"line":227,"file":"Message.js","path":"src/structures"}},{"name":"webhookId","description":"The id of the webhook that sent the message, if applicable","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":251,"file":"Message.js","path":"src/structures"}},{"name":"groupActivityApplication","description":"Supplemental application information for group activities","nullable":true,"type":[[["ClientApplication"]]],"meta":{"line":261,"file":"Message.js","path":"src/structures"}},{"name":"applicationId","description":"The id of the application of the interaction that sent this message, if any","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":271,"file":"Message.js","path":"src/structures"}},{"name":"activity","description":"Group activity","nullable":true,"type":[[["MessageActivity"]]],"meta":{"line":281,"file":"Message.js","path":"src/structures"}},{"name":"flags","description":"Flags that are applied to the message","type":[[["Readonly","<"],["MessageFlags",">"]]],"meta":{"line":304,"file":"Message.js","path":"src/structures"}},{"name":"reference","description":"Message reference data","nullable":true,"type":[[["MessageReference"]]],"meta":{"line":329,"file":"Message.js","path":"src/structures"}},{"name":"interaction","description":"Partial data of the interaction that this message is a reply to","nullable":true,"type":[[["MessageInteraction"]]],"meta":{"line":357,"file":"Message.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":373,"file":"Message.js","path":"src/structures"}},{"name":"channel","description":"The channel that the message was sent in","readonly":true,"type":[[["TextBasedChannels"]]],"meta":{"line":403,"file":"Message.js","path":"src/structures"}},{"name":"partial","description":"Whether or not this message is a partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":412,"file":"Message.js","path":"src/structures"}},{"name":"member","description":"Represents the author of the message as a guild member.\nOnly available if the message comes from a guild where the author is still a member","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":422,"file":"Message.js","path":"src/structures"}},{"name":"createdAt","description":"The time the message was sent at","readonly":true,"type":[[["Date"]]],"meta":{"line":431,"file":"Message.js","path":"src/structures"}},{"name":"editedAt","description":"The time the message was last edited at (if applicable)","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":440,"file":"Message.js","path":"src/structures"}},{"name":"guild","description":"The guild the message was sent in (if in a guild channel)","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":449,"file":"Message.js","path":"src/structures"}},{"name":"hasThread","description":"Whether this message has a thread associated with it","readonly":true,"type":[[["boolean"]]],"meta":{"line":458,"file":"Message.js","path":"src/structures"}},{"name":"thread","description":"The thread started by this message\nThis property is not suitable for checking whether a message has a thread,\nuse {@link Message#hasThread} instead.","readonly":true,"nullable":true,"type":[[["ThreadChannel"]]],"meta":{"line":469,"file":"Message.js","path":"src/structures"}},{"name":"url","description":"The URL to jump to this message","readonly":true,"type":[[["string"]]],"meta":{"line":478,"file":"Message.js","path":"src/structures"}},{"name":"cleanContent","description":"The message contents with all mentions replaced by the equivalent text.\nIf mentions cannot be resolved to a name, the relevant mention in the message content will not be converted.","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":488,"file":"Message.js","path":"src/structures"}},{"name":"editable","description":"Whether the message is editable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":600,"file":"Message.js","path":"src/structures"}},{"name":"deletable","description":"Whether the message is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":623,"file":"Message.js","path":"src/structures"}},{"name":"bulkDeletable","description":"Whether the message is bulk deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":655,"file":"Message.js","path":"src/structures"}},{"name":"pinnable","description":"Whether the message is pinnable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":671,"file":"Message.js","path":"src/structures"}},{"name":"crosspostable","description":"Whether the message is crosspostable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":700,"file":"Message.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"createReactionCollector","description":"Creates a reaction collector.","examples":["// Create a reaction collector\nconst filter = (reaction, user) => reaction.emoji.name === '👌' && user.id === 'someId';\nconst collector = message.createReactionCollector({ filter, time: 15_000 });\ncollector.on('collect', r => console.log(`Collected ${r.emoji.name}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["ReactionCollectorOptions"]]]}],"returns":[[["ReactionCollector"]]],"meta":{"line":504,"file":"Message.js","path":"src/structures"}},{"name":"awaitReactions","description":"Similar to createReactionCollector but in promise form.\nResolves with a collection of reactions that pass the specified filter.","examples":["// Create a reaction collector\nconst filter = (reaction, user) => reaction.emoji.name === '👌' && user.id === 'someId'\nmessage.awaitReactions({ filter, time: 15_000 })\n .then(collected => console.log(`Collected ${collected.size} reactions`))\n .catch(console.error);"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitReactionsOptions"]]]}],"returns":[[["Promise","<"],["Collection","<("],["string","|"],["Snowflake","), "],["MessageReaction",">>"]]],"meta":{"line":526,"file":"Message.js","path":"src/structures"}},{"name":"createMessageComponentCollector","description":"Creates a message component interaction collector.","examples":["// Create a message component interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = message.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":555,"file":"Message.js","path":"src/structures"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nmessage.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":583,"file":"Message.js","path":"src/structures"}},{"name":"fetchReference","description":"Fetches the Message this crosspost/reply/pin-add references, if available to the client","async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":686,"file":"Message.js","path":"src/structures"}},{"name":"edit","description":"Edits the content of the message.","examples":["// Update the content of a message\nmessage.edit('This is my new content!')\n .then(msg => console.log(`Updated the content of a message to ${msg.content}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageEditOptions"]]]}],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":739,"file":"Message.js","path":"src/structures"}},{"name":"crosspost","description":"Publishes a message in an announcement channel to all channels following it.","examples":["// Crosspost a message\nif (message.channel.type === 'GUILD_NEWS') {\n message.crosspost()\n .then(() => console.log('Crossposted message'))\n .catch(console.error);\n}"],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":755,"file":"Message.js","path":"src/structures"}},{"name":"pin","description":"Pins this message to the channel's pinned messages.","examples":["// Pin a message\nmessage.pin()\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"reason","description":"Reason for pinning","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":770,"file":"Message.js","path":"src/structures"}},{"name":"unpin","description":"Unpins this message from the channel's pinned messages.","examples":["// Unpin a message\nmessage.unpin()\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"reason","description":"Reason for unpinning","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":786,"file":"Message.js","path":"src/structures"}},{"name":"react","description":"Adds a reaction to the message.","examples":["// React to a message with a unicode emoji\nmessage.react('🤔')\n .then(console.log)\n .catch(console.error);","// React to a message with a custom emoji\nmessage.react(message.guild.emojis.cache.get('123456789012345678'))\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"emoji","description":"The emoji to react with","type":[[["EmojiIdentifierResolvable"]]]},{"name":"burst","description":"Super Reactions (Discord Nitro only)","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["MessageReaction",">"]]],"meta":{"line":808,"file":"Message.js","path":"src/structures"}},{"name":"delete","description":"Deletes the message.","examples":["// Delete a message\nmessage.delete()\n .then(msg => console.log(`Deleted message from ${msg.author.username}`))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":833,"file":"Message.js","path":"src/structures"}},{"name":"reply","description":"Send an inline reply to this message.","examples":["// Reply to a message\nmessage.reply('This is a reply!')\n .then(() => console.log(`Replied to message \"${message.content}\"`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["ReplyMessageOptions"]]]}],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":857,"file":"Message.js","path":"src/structures"}},{"name":"startThread","description":"Create a new public thread from this message","see":["GuildTextThreadManager#create"],"params":[{"name":"options","description":"Options for starting a thread on this message","optional":true,"type":[[["StartThreadOptions"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":902,"file":"Message.js","path":"src/structures"}},{"name":"fetch","description":"Fetch this message.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":916,"file":"Message.js","path":"src/structures"}},{"name":"fetchWebhook","description":"Fetches the webhook used to create this message.","returns":[[["Promise",""]]],"meta":{"line":925,"file":"Message.js","path":"src/structures"}},{"name":"suppressEmbeds","description":"Suppresses or unsuppresses embeds on a message.","params":[{"name":"suppress","description":"If the embeds should be suppressed or not","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":936,"file":"Message.js","path":"src/structures"}},{"name":"removeAttachments","description":"Removes the attachments from this message.","returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":952,"file":"Message.js","path":"src/structures"}},{"name":"resolveComponent","description":"Resolves a component by a custom id.","params":[{"name":"customId","description":"The custom id to resolve against","type":[[["string"]]]}],"returns":{"types":[[["MessageActionRowComponent"]]],"nullable":true},"meta":{"line":961,"file":"Message.js","path":"src/structures"}},{"name":"equals","description":"Used mainly internally. Whether two messages are identical in properties. If you want to compare messages\nwithout checking all the properties, use `message.id === message2.id`, which is much more efficient. This\nmethod allows you to see if there are differences in content, embeds, attachments, nonce and tts properties.","params":[{"name":"message","description":"The message to compare it to","type":[[["Message"]]]},{"name":"rawData","description":"Raw data passed through the WebSocket about this message","type":[[["APIMessage"]]]}],"returns":[[["boolean"]]],"meta":{"line":973,"file":"Message.js","path":"src/structures"}},{"name":"inGuild","description":"Whether this message is from a guild.","returns":[[["boolean"]]],"meta":{"line":1001,"file":"Message.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically concatenates the message's content instead of the object.","examples":["// Logs: Message: This is a message!\nconsole.log(`Message: ${message}`);"],"returns":[[["string"]]],"meta":{"line":1012,"file":"Message.js","path":"src/structures"}},{"name":"markUnread","description":"Marks the message as unread.","async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":1032,"file":"Message.js","path":"src/structures"}},{"name":"markRead","description":"Marks the message as read.","async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":1052,"file":"Message.js","path":"src/structures"}},{"name":"clickButton","description":"Click specific button or automatically click first button if no button is specified.","examples":["client.on('messageCreate', async message => {\n if (message.components.length) {\n // Find first button and click it\n await message.clickButton();\n // Click with button ID\n await message.clickButton('button-id');\n // Click with button location\n await message.clickButton({ row: 0, col: 0 });\n // Click with class MessageButton\n const button = message.components[0].components[0];\n await message.clickButton(button);\n // Click with class MessageButton (2)\n button.click(message);\n }\n});"],"params":[{"name":"button","description":"Button ID","type":[[["MessageButton"]],[["MessageButtonLocation"]],[["string"]]]}],"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":1088,"file":"Message.js","path":"src/structures"}},{"name":"selectMenu","description":"Select specific menu or First Menu","examples":["client.on('messageCreate', async message => {\n if (message.components.length) {\n // Row\n await message.selectMenu(1, [message.channel]); // row 1, type: Channel, multi: false\n // Id\n await message.selectMenu('menu-id', ['uid1', client.user, message.member]); // MenuId, type: User, multi: true\n // First Menu\n await message.selectMenu(['role-id']); // First Menu, type: role, multi: false\n // class MessageSelectMenu\n const menu = message.components[0].components[0];\n await message.selectMenu(menu, ['option1', 'option2']);\n // MessageSelectMenu (2)\n menu.select(message, ['option1', 'option2']);\n }\n});"],"params":[{"name":"menuID","description":"MenuId / MessageSelectMenu / Row of Menu / Array of Values (first menu)","type":[[["MessageSelectMenu"]],[["string"]],[["number"]],[["Array","<"],["any",">"]]]},{"name":"options","description":"Array of Values","type":[[["Array","<"],["any",">"]]]}],"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":1123,"file":"Message.js","path":"src/structures"}},{"name":"contextMenu","description":"Send context Menu v2","params":[{"name":"botId","description":"Bot id","type":[[["Snowflake"]]]},{"name":"commandName","description":"Command name in Context Menu","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":1159,"file":"Message.js","path":"src/structures"}}],"meta":{"line":37,"file":"Message.js","path":"src/structures"}},{"name":"MessageActionRow","description":"Represents an action row containing message components.","extends":[[["BaseMessageComponent"]]],"construct":{"name":"MessageActionRow","params":[{"name":"data","description":"MessageActionRow to clone or raw data","optional":true,"default":"{}","type":[[["MessageActionRow"]],[["MessageActionRowOptions"]]]},{"name":"client","description":"The client constructing this MessageActionRow, if provided","optional":true,"default":null,"type":[[["Client"]]]}]},"props":[{"name":"components","description":"The components in this action row","type":[[["Array","<"],["MessageActionRowComponent",">"]]],"meta":{"line":51,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"type","description":"The type of this component","nullable":true,"type":[[["MessageComponentType"]]],"meta":{"line":52,"file":"BaseMessageComponent.js","path":"src/structures"}}],"methods":[{"name":"addComponents","description":"Adds components to the action row.","params":[{"name":"components","description":"The components to add","variable":true,"type":[[["Array","<"],["MessageActionRowComponentResolvable",">"]]]}],"returns":[[["MessageActionRow"]]],"meta":{"line":59,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"setComponents","description":"Sets the components of the action row.","params":[{"name":"components","description":"The components to set","variable":true,"type":[[["Array","<"],["MessageActionRowComponentResolvable",">"]]]}],"returns":[[["MessageActionRow"]]],"meta":{"line":69,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"spliceComponents","description":"Removes, replaces, and inserts components in the action row.","params":[{"name":"index","description":"The index to start at","type":[[["number"]]]},{"name":"deleteCount","description":"The number of components to remove","type":[[["number"]]]},{"name":"components","description":"The replacing components","optional":true,"variable":true,"type":[[["Array","<"],["MessageActionRowComponentResolvable",">"]]]}],"returns":[[["MessageActionRow"]]],"meta":{"line":81,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"toJSON","description":"Transforms the action row to a plain object.","returns":{"types":[[["APIMessageComponent"]]],"description":"The raw data of this action row"},"meta":{"line":90,"file":"MessageActionRow.js","path":"src/structures"}}],"meta":{"line":10,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"MessageAttachment","description":"Represents an attachment in a message.","construct":{"name":"MessageAttachment","params":[{"name":"attachment","description":"The file","type":[[["BufferResolvable"]],[["Stream"]]]},{"name":"name","description":"The name of the file, if any","optional":true,"default":null,"type":[[["string"]]]},{"name":"data","description":"Extra data","optional":true,"type":[[["APIAttachment"]]]}]},"props":[{"name":"name","description":"The name of this attachment","nullable":true,"type":[[["string"]]],"meta":{"line":21,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"id","description":"The attachment's id","type":[[["Snowflake"]]],"meta":{"line":80,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"size","description":"The size of this attachment in bytes","type":[[["number"]]],"meta":{"line":87,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"url","description":"The URL to this attachment","type":[[["string"]]],"meta":{"line":95,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"proxyURL","description":"The Proxy URL to this attachment","type":[[["string"]]],"meta":{"line":103,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"height","description":"The height of this attachment (if an image or video)","nullable":true,"type":[[["number"]]],"meta":{"line":111,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"width","description":"The width of this attachment (if an image or video)","nullable":true,"type":[[["number"]]],"meta":{"line":121,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"contentType","description":"The media type of this attachment","nullable":true,"type":[[["string"]]],"meta":{"line":131,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"description","description":"The description (alt text) of this attachment","nullable":true,"type":[[["string"]]],"meta":{"line":141,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether this attachment is ephemeral","type":[[["boolean"]]],"meta":{"line":150,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"duration","description":"The duration of this attachment in seconds\nThis will only be available if the attachment is an audio file.","nullable":true,"type":[[["number"]]],"meta":{"line":158,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"waveform","description":"The base64 encoded byte array representing a sampled waveform\nThis will only be available if the attachment is an audio file.","nullable":true,"type":[[["string"]]],"meta":{"line":169,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"flags","description":"The flags of this attachment","type":[[["Readonly","<"],["AttachmentFlags",">"]]],"meta":{"line":179,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"spoiler","description":"Whether or not this attachment has been marked as a spoiler","readonly":true,"type":[[["boolean"]]],"meta":{"line":190,"file":"MessageAttachment.js","path":"src/structures"}}],"methods":[{"name":"setDescription","description":"Sets the description of this attachment.","params":[{"name":"description","description":"The description of the file","type":[[["string"]]]}],"returns":{"types":[[["MessageAttachment"]]],"description":"This attachment"},"meta":{"line":30,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"setFile","description":"Sets the file of this attachment.","params":[{"name":"attachment","description":"The file","type":[[["BufferResolvable"]],[["Stream"]]]},{"name":"name","description":"The name of the file, if any","optional":true,"default":null,"type":[[["string"]]]}],"returns":{"types":[[["MessageAttachment"]]],"description":"This attachment"},"meta":{"line":41,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"setName","description":"Sets the name of this attachment.","params":[{"name":"name","description":"The name of the file","type":[[["string"]]]}],"returns":{"types":[[["MessageAttachment"]]],"description":"This attachment"},"meta":{"line":52,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"setSpoiler","description":"Sets whether this attachment is a spoiler","params":[{"name":"spoiler","description":"Whether the attachment should be marked as a spoiler","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["MessageAttachment"]]],"description":"This attachment"},"meta":{"line":62,"file":"MessageAttachment.js","path":"src/structures"}}],"meta":{"line":9,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"MessageButton","description":"Represents a button message component.","extends":[[["BaseMessageComponent"]]],"construct":{"name":"MessageButton","params":[{"name":"data","description":"MessageButton to clone or raw data","optional":true,"default":"{}","type":[[["MessageButton"]],[["MessageButtonOptions"]]]}]},"props":[{"name":"label","description":"The text to be displayed on this button","nullable":true,"type":[[["string"]]],"meta":{"line":41,"file":"MessageButton.js","path":"src/structures"}},{"name":"customId","description":"A unique string to be sent in the interaction when clicked","nullable":true,"type":[[["string"]]],"meta":{"line":47,"file":"MessageButton.js","path":"src/structures"}},{"name":"style","description":"The style of this button","nullable":true,"type":[[["MessageButtonStyle"]]],"meta":{"line":53,"file":"MessageButton.js","path":"src/structures"}},{"name":"emoji","description":"Emoji for this button","nullable":true,"type":[[["RawEmoji"]]],"meta":{"line":59,"file":"MessageButton.js","path":"src/structures"}},{"name":"url","description":"The URL this button links to, if it is a Link style button","nullable":true,"type":[[["string"]]],"meta":{"line":65,"file":"MessageButton.js","path":"src/structures"}},{"name":"disabled","description":"Whether this button is currently disabled","type":[[["boolean"]]],"meta":{"line":71,"file":"MessageButton.js","path":"src/structures"}},{"name":"type","description":"The type of this component","nullable":true,"type":[[["MessageComponentType"]]],"meta":{"line":52,"file":"BaseMessageComponent.js","path":"src/structures"}}],"methods":[{"name":"setCustomId","description":"Sets the custom id for this button","params":[{"name":"customId","description":"A unique string to be sent in the interaction when clicked","type":[[["string"]]]}],"returns":[[["MessageButton"]]],"meta":{"line":79,"file":"MessageButton.js","path":"src/structures"}},{"name":"setDisabled","description":"Sets the interactive status of the button","params":[{"name":"disabled","description":"Whether this button should be disabled","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["MessageButton"]]],"meta":{"line":89,"file":"MessageButton.js","path":"src/structures"}},{"name":"setEmoji","description":"Set the emoji of this button","params":[{"name":"emoji","description":"The emoji to be displayed on this button","type":[[["EmojiIdentifierResolvable"]]]}],"returns":[[["MessageButton"]]],"meta":{"line":99,"file":"MessageButton.js","path":"src/structures"}},{"name":"setLabel","description":"Sets the label of this button","params":[{"name":"label","description":"The text to be displayed on this button","type":[[["string"]]]}],"returns":[[["MessageButton"]]],"meta":{"line":109,"file":"MessageButton.js","path":"src/structures"}},{"name":"setStyle","description":"Sets the style of this button","params":[{"name":"style","description":"The style of this button","type":[[["MessageButtonStyleResolvable"]]]}],"returns":[[["MessageButton"]]],"meta":{"line":119,"file":"MessageButton.js","path":"src/structures"}},{"name":"setURL","description":"Sets the URL of this button.\nMessageButton#style must be LINK when setting a URL","params":[{"name":"url","description":"The URL of this button","type":[[["string"]]]}],"returns":[[["MessageButton"]]],"meta":{"line":130,"file":"MessageButton.js","path":"src/structures"}},{"name":"toJSON","description":"Transforms the button to a plain object.","returns":{"types":[[["APIMessageButton"]]],"description":"The raw data of this button"},"meta":{"line":139,"file":"MessageButton.js","path":"src/structures"}},{"name":"click","description":"Click the button","params":[{"name":"message","description":"Discord Message","type":[[["Message"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":173,"file":"MessageButton.js","path":"src/structures"}},{"name":"resolveStyle","description":"Resolves the style of a button","scope":"static","access":"private","params":[{"name":"style","description":"The style to resolve","type":[[["MessageButtonStyleResolvable"]]]}],"returns":[[["MessageButtonStyle"]]],"meta":{"line":164,"file":"MessageButton.js","path":"src/structures"}}],"meta":{"line":16,"file":"MessageButton.js","path":"src/structures"}},{"name":"MessageCollector","description":"Collects messages on a channel.\nWill automatically stop if the channel ({@link Client#event:channelDelete channelDelete}),\nthread ({@link Client#event:threadDelete threadDelete}), or\nguild ({@link Client#event:guildDelete guildDelete}) is deleted.","extends":[[["Collector"]]],"construct":{"name":"MessageCollector","params":[{"name":"channel","description":"The channel","type":[[["TextBasedChannels"]]]},{"name":"options","description":"The options to be applied to this collector","type":[[["MessageCollectorOptions"]]]}]},"props":[{"name":"channel","description":"The channel","type":[[["TextBasedChannels"]]],"meta":{"line":32,"file":"MessageCollector.js","path":"src/structures"}},{"name":"received","description":"Total number of messages that were received in the channel during message collection","type":[[["number"]]],"meta":{"line":38,"file":"MessageCollector.js","path":"src/structures"}},{"name":"endReason","description":"The reason this collector has ended with, or null if it hasn't ended yet","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":103,"file":"MessageCollector.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this Collector","readonly":true,"type":[[["Client"]]],"meta":{"line":35,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"filter","description":"The filter applied to this collector","type":[[["CollectorFilter"]]],"meta":{"line":48,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"options","description":"The options of this collector","type":[[["CollectorOptions"]]],"meta":{"line":54,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"collected","description":"The items collected by this collector","type":[[["Collection"]]],"meta":{"line":60,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"ended","description":"Whether this collector has finished collecting","type":[[["boolean"]]],"meta":{"line":66,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_timeout","description":"Timeout for cleanup","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":73,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_idletimeout","description":"Timeout for cleanup due to inactivity","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":80,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"next","description":"Returns a promise that resolves with the next collected element;\nrejects with collected elements if the collector finishes without receiving a next element","readonly":true,"type":[[["Promise"]]],"meta":{"line":148,"file":"Collector.js","path":"src/structures/interfaces"}}],"methods":[{"name":"collect","description":"Handles a message for possible collection.","access":"private","params":[{"name":"message","description":"The message that could be collected","type":[[["Message"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":73,"file":"MessageCollector.js","path":"src/structures"}},{"name":"dispose","description":"Handles a message for possible disposal.","params":[{"name":"message","description":"The message that could be disposed of","type":[[["Message"]]]}],"returns":{"types":[[["Snowflake"]]],"nullable":true},"meta":{"line":89,"file":"MessageCollector.js","path":"src/structures"}},{"name":"_handleChannelDeletion","description":"Handles checking if the channel has been deleted, and if so, stops the collector with the reason 'channelDelete'.","access":"private","params":[{"name":"channel","description":"The channel that was deleted","type":[[["GuildChannel"]]]}],"returns":[[["void"]]],"meta":{"line":115,"file":"MessageCollector.js","path":"src/structures"}},{"name":"_handleThreadDeletion","description":"Handles checking if the thread has been deleted, and if so, stops the collector with the reason 'threadDelete'.","access":"private","params":[{"name":"thread","description":"The thread that was deleted","type":[[["ThreadChannel"]]]}],"returns":[[["void"]]],"meta":{"line":127,"file":"MessageCollector.js","path":"src/structures"}},{"name":"_handleGuildDeletion","description":"Handles checking if the guild has been deleted, and if so, stops the collector with the reason 'guildDelete'.","access":"private","params":[{"name":"guild","description":"The guild that was deleted","type":[[["Guild"]]]}],"returns":[[["void"]]],"meta":{"line":139,"file":"MessageCollector.js","path":"src/structures"}},{"name":"handleCollect","description":"Call this to handle an event as a collectable element. Accepts any event data as parameters.","inherits":"Collector#handleCollect","inherited":true,"emits":["Collector#event:collect"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":99,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"handleDispose","description":"Call this to remove an element from the collection. Accepts any event data as parameters.","inherits":"Collector#handleDispose","inherited":true,"emits":["Collector#event:dispose"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":126,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"stop","description":"Stops this collector and emits the `end` event.","inherits":"Collector#stop","inherited":true,"emits":["Collector#event:end"],"params":[{"name":"reason","description":"The reason this collector is ending","optional":true,"default":"'user'","type":[[["string"]]]}],"meta":{"line":180,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"resetTimer","description":"Resets the collector's timeout and idle timer.","inherits":"Collector#resetTimer","inherited":true,"params":[{"name":"options","description":"Options for resetting","optional":true,"type":[[["CollectorResetTimerOptions"]]]}],"meta":{"line":213,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"checkEnd","description":"Checks whether the collector should end, and if so, ends it.","inherits":"Collector#checkEnd","inherited":true,"returns":{"types":[[["boolean"]]],"description":"Whether the collector ended or not"},"meta":{"line":228,"file":"Collector.js","path":"src/structures/interfaces"}}],"events":[{"name":"collect","description":"Emitted whenever a message is collected.","params":[{"name":"message","description":"The message that was collected","type":[[["Message"]]]}],"meta":{"line":74,"file":"MessageCollector.js","path":"src/structures"}},{"name":"dispose","description":"Emitted whenever a message is disposed of.","params":[{"name":"message","description":"The message that was disposed of","type":[[["Message"]]]}],"meta":{"line":90,"file":"MessageCollector.js","path":"src/structures"}},{"name":"end","description":"Emitted when the collector is finished collecting.","params":[{"name":"collected","description":"The elements collected by the collector","type":[[["Collection"]]]},{"name":"reason","description":"The reason the collector ended","type":[[["string"]]]}],"meta":{"line":193,"file":"Collector.js","path":"src/structures/interfaces"}}],"meta":{"line":19,"file":"MessageCollector.js","path":"src/structures"}},{"name":"MessageComponentInteraction","description":"Represents a message component interaction.","extends":[[["Interaction"]]],"implements":[[["InteractionResponses"]]],"props":[{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":17,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"message","description":"The message to which the component was attached","type":[[["Message"]],[["APIMessage"]]],"meta":{"line":27,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"customId","description":"The custom id of the component which was interacted with","type":[[["string"]]],"meta":{"line":33,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"componentType","description":"The type of component which was interacted with","type":[[["string"]]],"meta":{"line":39,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":45,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":57,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":63,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"component","description":"The component which was interacted with","readonly":true,"type":[[["MessageActionRowComponent"]],[["APIMessageActionRowComponent"]]],"meta":{"line":78,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}},{"name":"resolveType","description":"Resolves the type of a MessageComponent","scope":"static","access":"private","params":[{"name":"type","description":"The type to resolve","type":[[["MessageComponentTypeResolvable"]]]}],"returns":[[["MessageComponentType"]]],"meta":{"line":90,"file":"MessageComponentInteraction.js","path":"src/structures"}}],"meta":{"line":13,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"MessageContextMenuInteraction","description":"Represents a message context menu interaction.","extends":[[["ContextMenuInteraction"]]],"props":[{"name":"targetMessage","description":"The message this interaction was sent from","readonly":true,"type":[[["Message"]],[["APIMessage"]]],"meta":{"line":15,"file":"MessageContextMenuInteraction.js","path":"src/structures"}},{"name":"options","description":"The target of the interaction, parsed into options","type":[[["CommandInteractionOptionResolver"]]],"meta":{"line":18,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"targetId","description":"The id of the target of the interaction","type":[[["Snowflake"]]],"meta":{"line":28,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"targetType","description":"The type of the target of the interaction; either USER or MESSAGE","type":[[["ApplicationCommandType"]]],"meta":{"line":34,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":20,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandId","description":"The invoked application command's id","type":[[["Snowflake"]]],"meta":{"line":30,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandName","description":"The invoked application command's name","type":[[["string"]]],"meta":{"line":36,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":42,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":48,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":54,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":60,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"command","description":"The invoked application command, if it was fetched before","nullable":true,"type":[[["ApplicationCommand"]]],"meta":{"line":67,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"resolveContextMenuOptions","description":"Resolves and transforms options received from the API for a context menu interaction.","access":"private","inherits":"ContextMenuInteraction#resolveContextMenuOptions","inherited":true,"params":[{"name":"data","description":"The interaction data","type":[[["APIApplicationCommandInteractionData"]]]}],"returns":[[["Array","<"],["CommandInteractionOption",">"]]],"meta":{"line":43,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"transformResolved","description":"Transforms the resolved received from the API.","access":"private","inherits":"BaseCommandInteraction#transformResolved","inherited":true,"params":[{"name":"resolved","description":"The received resolved objects","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionResolvedData"]]],"meta":{"line":89,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"transformOption","description":"Transforms an option received from the API.","access":"private","inherits":"BaseCommandInteraction#transformOption","inherited":true,"params":[{"name":"option","description":"The received option","type":[[["APIApplicationCommandOption"]]]},{"name":"resolved","description":"The resolved interaction data","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionOption"]]],"meta":{"line":162,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"BaseCommandInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"BaseCommandInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"BaseCommandInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"BaseCommandInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"BaseCommandInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"BaseCommandInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"BaseCommandInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseCommandInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":9,"file":"MessageContextMenuInteraction.js","path":"src/structures"}},{"name":"MessageEmbed","description":"Represents an embed in a message (image/video preview, rich embed, etc.)","construct":{"name":"MessageEmbed","params":[{"name":"data","description":"MessageEmbed to clone or raw embed data","optional":true,"default":"{}","type":[[["MessageEmbed"]],[["MessageEmbedOptions"]],[["APIEmbed"]]]}]},"props":[{"name":"type","description":"The type of this embed, either:\n* `rich` - a generic embed rendered from embed attributes\n* `image` - an image embed\n* `video` - a video embed\n* `gifv` - an animated gif image embed rendered as a video embed\n* `article` - an article embed\n* `link` - a link embed","see":["{@link https://discord.com/developers/docs/resources/channel#embed-object-embed-types}"],"deprecated":true,"type":[[["string"]]],"meta":{"line":61,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"title","description":"The title of this embed","nullable":true,"type":[[["string"]]],"meta":{"line":67,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"description","description":"The description of this embed","nullable":true,"type":[[["string"]]],"meta":{"line":73,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"url","description":"The URL of this embed","nullable":true,"type":[[["string"]]],"meta":{"line":79,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"color","description":"The color of this embed","nullable":true,"type":[[["number"]]],"meta":{"line":85,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"timestamp","description":"The timestamp of this embed","nullable":true,"type":[[["number"]]],"meta":{"line":91,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"fields","description":"The fields of this embed","type":[[["Array","<"],["EmbedField",">"]]],"meta":{"line":105,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"thumbnail","description":"The thumbnail of this embed (if there is one)","nullable":true,"type":[[["MessageEmbedThumbnail"]]],"meta":{"line":123,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"image","description":"The image of this embed, if there is one","nullable":true,"type":[[["MessageEmbedImage"]]],"meta":{"line":145,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"video","description":"The video of this embed (if there is one)","readonly":true,"nullable":true,"type":[[["MessageEmbedVideo"]]],"meta":{"line":168,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"author","description":"The author of this embed (if there is one)","nullable":true,"type":[[["MessageEmbedAuthor"]]],"meta":{"line":190,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"provider","description":"The provider of this embed (if there is one)","nullable":true,"type":[[["MessageEmbedProvider"]]],"meta":{"line":210,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"footer","description":"The footer of this embed","nullable":true,"type":[[["MessageEmbedFooter"]]],"meta":{"line":229,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"createdAt","description":"The date displayed on this embed","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":243,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"hexColor","description":"The hexadecimal version of the embed color, with a leading hash","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":252,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"length","description":"The accumulated length for the embed title, description, fields, footer text, and author name","readonly":true,"type":[[["number"]]],"meta":{"line":261,"file":"MessageEmbed.js","path":"src/structures"}}],"methods":[{"name":"equals","description":"Checks if this embed is equal to another one by comparing every single one of their properties.","params":[{"name":"embed","description":"The embed to compare with","type":[[["MessageEmbed"]],[["APIEmbed"]]]}],"returns":[[["boolean"]]],"meta":{"line":278,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"_fieldEquals","description":"Compares two given embed fields to see if they are equal","access":"private","params":[{"name":"field","description":"The first field to compare","type":[[["EmbedFieldData"]]]},{"name":"other","description":"The second field to compare","type":[[["EmbedFieldData"]]]}],"returns":[[["boolean"]]],"meta":{"line":308,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"addField","description":"Adds a field to the embed (max 25).","deprecated":"This method is a wrapper for {@link MessageEmbed#addFields}. Use that instead.","params":[{"name":"name","description":"The name of this field","type":[[["string"]]]},{"name":"value","description":"The value of this field","type":[[["string"]]]},{"name":"inline","description":"If this field will be displayed inline","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":320,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"addFields","description":"Adds fields to the embed (max 25).","params":[{"name":"fields","description":"The fields to add","variable":true,"type":[[["EmbedFieldData"]],[["Array","<"],["EmbedFieldData",">"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":338,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"spliceFields","description":"Removes, replaces, and inserts fields in the embed (max 25).","params":[{"name":"index","description":"The index to start at","type":[[["number"]]]},{"name":"deleteCount","description":"The number of fields to remove","type":[[["number"]]]},{"name":"fields","description":"The replacing field objects","optional":true,"variable":true,"type":[[["EmbedFieldData"]],[["Array","<"],["EmbedFieldData",">"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":350,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setFields","description":"Sets the embed's fields (max 25).","params":[{"name":"fields","description":"The fields to set","variable":true,"type":[[["EmbedFieldData"]],[["Array","<"],["EmbedFieldData",">"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":360,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setAuthor","description":"Sets the author of this embed.","params":[{"name":"options","description":"The options to provide for the author.\nProvide `null` to remove the author data.","type":[[["string"]],[["EmbedAuthorData"]],[["null"]]]},{"name":"deprecatedIconURL","description":"The icon URL of this author.\nThis parameter is **deprecated**. Use the `options` parameter instead.","optional":true,"type":[[["string"]]]},{"name":"deprecatedURL","description":"The URL of this author.\nThis parameter is **deprecated**. Use the `options` parameter instead.","optional":true,"type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":383,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setColor","description":"Sets the color of this embed.","params":[{"name":"color","description":"The color of the embed","type":[[["ColorResolvable"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":412,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setDescription","description":"Sets the description of this embed.","params":[{"name":"description","description":"The description","type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":422,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setFooter","description":"Sets the footer of this embed.","params":[{"name":"options","description":"The options to provide for the footer.\nProvide `null` to remove the footer data.","type":[[["string"]],[["EmbedFooterData"]],[["null"]]]},{"name":"deprecatedIconURL","description":"The icon URL of this footer.\nThis parameter is **deprecated**. Use the `options` parameter instead.","optional":true,"type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":442,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setImage","description":"Sets the image of this embed.","params":[{"name":"url","description":"The URL of the image","type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":471,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setThumbnail","description":"Sets the thumbnail of this embed.","params":[{"name":"url","description":"The URL of the thumbnail","type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":481,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setTimestamp","description":"Sets the timestamp of this embed.","params":[{"name":"timestamp","description":"The timestamp or date.\nIf `null` then the timestamp will be unset (i.e. when editing an existing {@link MessageEmbed})","optional":true,"default":"Date.now()","type":[[["Date"]],[["number"]],[["null"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":492,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setTitle","description":"Sets the title of this embed.","params":[{"name":"title","description":"The title","type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":503,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"setURL","description":"Sets the URL of this embed.","params":[{"name":"url","description":"The URL","type":[[["string"]]]}],"returns":[[["MessageEmbed"]]],"meta":{"line":513,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"toJSON","description":"Transforms the embed to a plain object.","returns":{"types":[[["APIEmbed"]]],"description":"The raw data of this embed"},"meta":{"line":522,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"normalizeField","description":"Normalizes field input and verifies strings.","scope":"static","params":[{"name":"name","description":"The name of the field","type":[[["string"]]]},{"name":"value","description":"The value of the field","type":[[["string"]]]},{"name":"inline","description":"Set the field to display inline","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["EmbedField"]]],"meta":{"line":552,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"normalizeFields","description":"Normalizes field input and resolves strings.","scope":"static","params":[{"name":"fields","description":"Fields to normalize","variable":true,"type":[[["EmbedFieldData"]],[["Array","<"],["EmbedFieldData",">"]]]}],"returns":[[["Array","<"],["EmbedField",">"]]],"meta":{"line":572,"file":"MessageEmbed.js","path":"src/structures"}}],"meta":{"line":16,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageMentions","description":"Keeps track of mentions in a {@link Message}.","props":[{"name":"everyone","description":"Whether `@everyone` or `@here` were mentioned","type":[[["boolean"]]],"meta":{"line":38,"file":"MessageMentions.js","path":"src/structures"}},{"name":"users","description":"Any users that were mentioned\nOrder as received from the API, not as they appear in the message content","type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":47,"file":"MessageMentions.js","path":"src/structures"}},{"name":"roles","description":"Any roles that were mentioned\nOrder as received from the API, not as they appear in the message content","type":[[["Collection","<"],["Snowflake",", "],["Role",">"]]],"meta":{"line":68,"file":"MessageMentions.js","path":"src/structures"}},{"name":"_members","description":"Cached members for {@link MessageMentions#members}","access":"private","nullable":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":87,"file":"MessageMentions.js","path":"src/structures"}},{"name":"_channels","description":"Cached channels for {@link MessageMentions#channels}","access":"private","nullable":true,"type":[[["Collection","<"],["Snowflake",", "],["Channel",">"]]],"meta":{"line":94,"file":"MessageMentions.js","path":"src/structures"}},{"name":"_parsedUsers","description":"Cached users for {@link MessageMentions#parsedUsers}","access":"private","nullable":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":101,"file":"MessageMentions.js","path":"src/structures"}},{"name":"crosspostedChannels","description":"A collection of crossposted channels\nOrder as received from the API, not as they appear in the message content","type":[[["Collection","<"],["Snowflake",", "],["CrosspostedChannel",">"]]],"meta":{"line":119,"file":"MessageMentions.js","path":"src/structures"}},{"name":"repliedUser","description":"The author of the message that this message is a reply to","nullable":true,"type":[[["User"]]],"meta":{"line":141,"file":"MessageMentions.js","path":"src/structures"}},{"name":"members","description":"Any members that were mentioned (only in {@link Guild}s)\nOrder as received from the API, not as they appear in the message content","readonly":true,"nullable":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":150,"file":"MessageMentions.js","path":"src/structures"}},{"name":"channels","description":"Any channels that were mentioned\nOrder as they appear first in the message content","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Channel",">"]]],"meta":{"line":167,"file":"MessageMentions.js","path":"src/structures"}},{"name":"parsedUsers","description":"Any user mentions that were included in the message content\nOrder as they appear first in the message content","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":184,"file":"MessageMentions.js","path":"src/structures"}},{"name":"EVERYONE_PATTERN","description":"Regular expression that globally matches `@everyone` and `@here`","scope":"static","type":[[["RegExp"]]],"meta":{"line":252,"file":"MessageMentions.js","path":"src/structures"}},{"name":"USERS_PATTERN","description":"Regular expression that globally matches user mentions like `<@81440962496172032>`","scope":"static","type":[[["RegExp"]]],"meta":{"line":258,"file":"MessageMentions.js","path":"src/structures"}},{"name":"ROLES_PATTERN","description":"Regular expression that globally matches role mentions like `<@&297577916114403338>`","scope":"static","type":[[["RegExp"]]],"meta":{"line":264,"file":"MessageMentions.js","path":"src/structures"}},{"name":"CHANNELS_PATTERN","description":"Regular expression that globally matches channel mentions like `<#222079895583457280>`","scope":"static","type":[[["RegExp"]]],"meta":{"line":270,"file":"MessageMentions.js","path":"src/structures"}}],"methods":[{"name":"has","description":"Checks if a user, guild member, thread member, role, or channel is mentioned.\nTakes into account user mentions, role mentions, channel mentions,\nreplied user mention, and `@everyone`/`@here` mentions.","params":[{"name":"data","description":"The User/Role/Channel to check for","type":[[["UserResolvable"]],[["RoleResolvable"]],[["ChannelResolvable"]]]},{"name":"options","description":"The options for the check","optional":true,"type":[[["MessageMentionsHasOptions"]]]}],"returns":[[["boolean"]]],"meta":{"line":212,"file":"MessageMentions.js","path":"src/structures"}}],"meta":{"line":10,"file":"MessageMentions.js","path":"src/structures"}},{"name":"MessagePayload","description":"Represents a message to be sent to the API.","construct":{"name":"MessagePayload","params":[{"name":"target","description":"The target for this message to be sent to","type":[[["MessageTarget"]]]},{"name":"options","description":"Options passed in from send","type":[[["MessageOptions"]],[["WebhookMessageOptions"]]]}]},"props":[{"name":"target","description":"The target for this message to be sent to","type":[[["MessageTarget"]]],"meta":{"line":26,"file":"MessagePayload.js","path":"src/structures"}},{"name":"options","description":"Options passed in from send","type":[[["MessageOptions"]],[["WebhookMessageOptions"]]],"meta":{"line":32,"file":"MessagePayload.js","path":"src/structures"}},{"name":"data","description":"Data sendable to the API","nullable":true,"type":[[["APIMessage"]]],"meta":{"line":38,"file":"MessagePayload.js","path":"src/structures"}},{"name":"files","description":"Files sendable to the API","nullable":true,"type":[[["Array","<"],["MessageFile",">"]]],"meta":{"line":52,"file":"MessagePayload.js","path":"src/structures"}},{"name":"usingNewAttachmentAPI","description":"Whether or not using new API to upload files","readonly":true,"type":[[["boolean"]]],"meta":{"line":60,"file":"MessagePayload.js","path":"src/structures"}},{"name":"isWebhook","description":"Whether or not the target is a {@link Webhook} or a {@link WebhookClient}","readonly":true,"type":[[["boolean"]]],"meta":{"line":69,"file":"MessagePayload.js","path":"src/structures"}},{"name":"isUser","description":"Whether or not the target is a {@link User}","readonly":true,"type":[[["boolean"]]],"meta":{"line":80,"file":"MessagePayload.js","path":"src/structures"}},{"name":"isMessage","description":"Whether or not the target is a {@link Message}","readonly":true,"type":[[["boolean"]]],"meta":{"line":91,"file":"MessagePayload.js","path":"src/structures"}},{"name":"isMessageManager","description":"Whether or not the target is a {@link MessageManager}","readonly":true,"type":[[["boolean"]]],"meta":{"line":101,"file":"MessagePayload.js","path":"src/structures"}},{"name":"isInteraction","description":"Whether or not the target is an {@link Interaction} or an {@link InteractionWebhook}","readonly":true,"type":[[["boolean"]]],"meta":{"line":111,"file":"MessagePayload.js","path":"src/structures"}}],"methods":[{"name":"makeContent","description":"Makes the content of this message.","returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":121,"file":"MessagePayload.js","path":"src/structures"}},{"name":"resolveData","description":"Resolves data.","async":true,"returns":[[["MessagePayload"]]],"meta":{"line":136,"file":"MessagePayload.js","path":"src/structures"}},{"name":"resolveFiles","description":"Resolves files.","async":true,"returns":[[["Promise","<"],["MessagePayload",">"]]],"meta":{"line":283,"file":"MessagePayload.js","path":"src/structures"}},{"name":"resolveFile","description":"Resolves a single file into an object sendable to the API.","scope":"static","params":[{"name":"fileLike","description":"Something that could be resolved to a file","type":[[["BufferResolvable"]],[["Stream"]],[["FileOptions"]],[["MessageAttachment"]]]}],"async":true,"returns":[[["Promise","<"],["MessageFile",">"]]],"meta":{"line":295,"file":"MessagePayload.js","path":"src/structures"}},{"name":"create","description":"Creates a {@link MessagePayload} from user-level arguments.","scope":"static","params":[{"name":"target","description":"Target to send to","type":[[["MessageTarget"]]]},{"name":"options","description":"Options or content to use","type":[[["string"]],[["MessageOptions"]],[["WebhookMessageOptions"]]]},{"name":"extra","description":"Extra options to add onto specified options","optional":true,"default":"{}","type":[[["MessageOptions"]],[["WebhookMessageOptions"]]]}],"returns":[[["MessagePayload"]]],"meta":{"line":339,"file":"MessagePayload.js","path":"src/structures"}}],"meta":{"line":16,"file":"MessagePayload.js","path":"src/structures"}},{"name":"MessageReaction","description":"Represents a reaction to a message.","props":[{"name":"client","description":"The client that instantiated this message reaction","readonly":true,"type":[[["Client"]]],"meta":{"line":13,"file":"MessageReaction.js","path":"src/structures"}},{"name":"message","description":"The message that this reaction refers to","type":[[["Message"]]],"meta":{"line":25,"file":"MessageReaction.js","path":"src/structures"}},{"name":"me","description":"Whether the client has given this reaction","type":[[["boolean"]]],"meta":{"line":31,"file":"MessageReaction.js","path":"src/structures"}},{"name":"isBurst","description":"Super reaction","type":[[["boolean"]]],"meta":{"line":37,"file":"MessageReaction.js","path":"src/structures"}},{"name":"users","description":"A manager of the users that have given this reaction","type":[[["ReactionUserManager"]]],"meta":{"line":43,"file":"MessageReaction.js","path":"src/structures"}},{"name":"count","description":"The number of people that have given the same reaction","nullable":true,"type":[[["number"]]],"meta":{"line":56,"file":"MessageReaction.js","path":"src/structures"}},{"name":"burstCount","description":"The number of people that have given the same super reaction","nullable":true,"type":[[["number"]]],"meta":{"line":64,"file":"MessageReaction.js","path":"src/structures"}},{"name":"burstColors","description":"HEX colors used for super reaction","type":[[["Array","<"],["string",">"]]],"meta":{"line":72,"file":"MessageReaction.js","path":"src/structures"}},{"name":"countDetails","description":"The reaction count details object contains information about super and normal reaction counts.","nullable":true,"type":[[["ReactionCountDetailsData"]]],"meta":{"line":87,"file":"MessageReaction.js","path":"src/structures"}},{"name":"emoji","description":"The emoji of this reaction. Either a {@link GuildEmoji} object for known custom emojis, or a {@link ReactionEmoji}\nobject which has fewer properties. Whatever the prototype of the emoji, it will still have\n`name`, `id`, `identifier` and `toString()`","readonly":true,"type":[[["GuildEmoji"]],[["ReactionEmoji"]]],"meta":{"line":114,"file":"MessageReaction.js","path":"src/structures"}},{"name":"partial","description":"Whether or not this reaction is a partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":133,"file":"MessageReaction.js","path":"src/structures"}}],"methods":[{"name":"remove","description":"Removes all users from this reaction.","async":true,"returns":[[["Promise","<"],["MessageReaction",">"]]],"meta":{"line":98,"file":"MessageReaction.js","path":"src/structures"}},{"name":"fetch","description":"Fetch this reaction.","async":true,"returns":[[["Promise","<"],["MessageReaction",">"]]],"meta":{"line":141,"file":"MessageReaction.js","path":"src/structures"}}],"meta":{"line":11,"file":"MessageReaction.js","path":"src/structures"}},{"name":"MessageSelectMenu","description":"Represents a select menu message component","extends":[[["BaseMessageComponent"]]],"construct":{"name":"MessageSelectMenu","params":[{"name":"data","description":"MessageSelectMenu to clone or raw data","optional":true,"default":"{}","type":[[["MessageSelectMenu"]],[["MessageSelectMenuOptions"]]]}]},"props":[{"name":"customId","description":"A unique string to be sent in the interaction when clicked","nullable":true,"type":[[["string"]]],"meta":{"line":64,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"placeholder","description":"Custom placeholder text to display when nothing is selected","nullable":true,"type":[[["string"]]],"meta":{"line":70,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"minValues","description":"The minimum number of selections required","nullable":true,"type":[[["number"]]],"meta":{"line":76,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"maxValues","description":"The maximum number of selections allowed","nullable":true,"type":[[["number"]]],"meta":{"line":82,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"options","description":"Options for the STRING_SELECT menu","type":[[["Array","<"],["MessageSelectOption",">"]]],"meta":{"line":88,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"disabled","description":"Whether this select menu is currently disabled","type":[[["boolean"]]],"meta":{"line":94,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"channelTypes","description":"Channels that are possible to select in CHANNEL_SELECT menu","type":[[["Array","<"],["ChannelType",">"]]],"meta":{"line":100,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"type","description":"The type of this component","nullable":true,"type":[[["MessageComponentType"]]],"meta":{"line":52,"file":"BaseMessageComponent.js","path":"src/structures"}}],"methods":[{"name":"addChannelTypes","description":"Adds the channel types to the select menu","params":[{"name":"channelTypes","description":"Added channel types","variable":true,"type":[[["Array","<"],["ChannelType",">"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":111,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"setChannelTypes","description":"Sets the channel types of the select menu","params":[{"name":"channelTypes","description":"An array of new channel types","variable":true,"type":[[["Array","<"],["ChannelType",">"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":126,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"setCustomId","description":"Sets the custom id of this select menu","params":[{"name":"customId","description":"A unique string to be sent in the interaction when clicked","type":[[["string"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":141,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"setDisabled","description":"Sets the interactive status of the select menu","params":[{"name":"disabled","description":"Whether this select menu should be disabled","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":151,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"setMaxValues","description":"Sets the maximum number of selections allowed for this select menu","params":[{"name":"maxValues","description":"Number of selections to be allowed","type":[[["number"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":161,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"setMinValues","description":"Sets the minimum number of selections required for this select menu\nThis will default the maxValues to the number of options, unless manually set","params":[{"name":"minValues","description":"Number of selections to be required","type":[[["number"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":172,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"setPlaceholder","description":"Sets the placeholder of this select menu","params":[{"name":"placeholder","description":"Custom placeholder text to display when nothing is selected","type":[[["string"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":182,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"setType","description":"Sets the type of the select menu","params":[{"name":"type","description":"Type of the select menu","type":[[["SelectMenuComponentType"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":192,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"addOptions","description":"Adds options to the select menu.","params":[{"name":"options","description":"The options to add","variable":true,"type":[[["MessageSelectOptionData"]],[["Array","<"],["MessageSelectOptionData",">"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":203,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"setOptions","description":"Sets the options of the select menu.","params":[{"name":"options","description":"The options to set","variable":true,"type":[[["MessageSelectOptionData"]],[["Array","<"],["MessageSelectOptionData",">"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":213,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"spliceOptions","description":"Removes, replaces, and inserts options in the select menu.","params":[{"name":"index","description":"The index to start at","type":[[["number"]]]},{"name":"deleteCount","description":"The number of options to remove","type":[[["number"]]]},{"name":"options","description":"The replacing option objects","optional":true,"variable":true,"type":[[["MessageSelectOptionData"]],[["Array","<"],["MessageSelectOptionData",">"]]]}],"returns":[[["MessageSelectMenu"]]],"meta":{"line":225,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"toJSON","description":"Transforms the select menu into a plain object","returns":{"types":[[["APIMessageSelectMenu"]]],"description":"The raw data of this select menu"},"meta":{"line":234,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"select","description":"Mesage select menu","params":[{"name":"message","description":"The message this select menu is for","type":[[["Message"]]]},{"name":"values","description":"The values of the select menu","type":[[["Array","<"],["any",">"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":279,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"normalizeOption","description":"Normalizes option input and resolves strings and emojis.","scope":"static","params":[{"name":"option","description":"The select menu option to normalize","type":[[["MessageSelectOptionData"]]]}],"returns":[[["MessageSelectOption"]]],"meta":{"line":252,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"normalizeOptions","description":"Normalizes option input and resolves strings and emojis.","scope":"static","params":[{"name":"options","description":"The select menu options to normalize","variable":true,"type":[[["MessageSelectOptionData"]],[["Array","<"],["MessageSelectOptionData",">"]]]}],"returns":[[["Array","<"],["MessageSelectOption",">"]]],"meta":{"line":268,"file":"MessageSelectMenu.js","path":"src/structures"}}],"meta":{"line":20,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"Modal","description":"Represents a modal (form) to be shown in response to an interaction","construct":{"name":"Modal","params":[{"name":"data","description":"Modal to clone or raw data","type":[[["Modal"]],[["ModalOptions"]]]},{"name":"client","description":"The client constructing this Modal, if provided","default":null,"type":[[["Client"]]]}]},"props":[{"name":"components","description":"A list of MessageActionRows in the modal","type":[[["Array","<"],["MessageActionRow",">"]]],"meta":{"line":30,"file":"Modal.js","path":"src/structures"}},{"name":"customId","description":"A unique string to be sent in the interaction when submitted","nullable":true,"type":[[["string"]]],"meta":{"line":36,"file":"Modal.js","path":"src/structures"}},{"name":"title","description":"The title to be displayed on this modal","nullable":true,"type":[[["string"]]],"meta":{"line":42,"file":"Modal.js","path":"src/structures"}},{"name":"nonce","description":"Timestamp (Discord epoch) of when this modal was created","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":48,"file":"Modal.js","path":"src/structures"}},{"name":"id","description":"ID slash / button / menu when modal is displayed","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":54,"file":"Modal.js","path":"src/structures"}},{"name":"application","description":"Application sending the modal","nullable":true,"type":[[["Object"]]],"meta":{"line":60,"file":"Modal.js","path":"src/structures"}},{"name":"sendFromInteraction","description":"Get Interaction Response","readonly":true,"nullable":true,"type":[[["InteractionResponse"]]],"meta":{"line":75,"file":"Modal.js","path":"src/structures"}}],"methods":[{"name":"addComponents","description":"Adds components to the modal.","params":[{"name":"components","description":"The components to add","variable":true,"type":[[["Array","<"],["MessageActionRowResolvable",">"]]]}],"returns":[[["Modal"]]],"meta":{"line":91,"file":"Modal.js","path":"src/structures"}},{"name":"setComponents","description":"Sets the components of the modal.","params":[{"name":"components","description":"The components to set","variable":true,"type":[[["Array","<"],["MessageActionRowResolvable",">"]]]}],"returns":[[["Modal"]]],"meta":{"line":101,"file":"Modal.js","path":"src/structures"}},{"name":"setCustomId","description":"Sets the custom id for this modal","params":[{"name":"customId","description":"A unique string to be sent in the interaction when submitted","type":[[["string"]]]}],"returns":[[["Modal"]]],"meta":{"line":111,"file":"Modal.js","path":"src/structures"}},{"name":"spliceComponents","description":"Removes, replaces, and inserts components in the modal.","params":[{"name":"index","description":"The index to start at","type":[[["number"]]]},{"name":"deleteCount","description":"The number of components to remove","type":[[["number"]]]},{"name":"components","description":"The replacing components","optional":true,"variable":true,"type":[[["Array","<"],["MessageActionRowResolvable",">"]]]}],"returns":[[["Modal"]]],"meta":{"line":123,"file":"Modal.js","path":"src/structures"}},{"name":"setTitle","description":"Sets the title of this modal","params":[{"name":"title","description":"The title to be displayed on this modal","type":[[["string"]]]}],"returns":[[["Modal"]]],"meta":{"line":133,"file":"Modal.js","path":"src/structures"}},{"name":"reply","description":"Reply to this modal with data. (Event only)","examples":["client.on('interactionModalCreate', modal => {\n// 1.\n modal.reply({\n data: [\n {\n customId: 'code',\n value: '1+1'\n }, {\n customId: 'message',\n value: 'hello'\n }\n ],\n channel: 'id', // optional\n guild: 'id', // optional\n })\n// or 2.\nmodal.components[0].components[0].setValue('1+1');\nmodal.components[1].components[0].setValue('hello');\nmodal.reply();\n})"],"params":[{"name":"data","description":"Data to send with the modal","type":[[["ModalReplyData"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":186,"file":"Modal.js","path":"src/structures"}}],"meta":{"line":12,"file":"Modal.js","path":"src/structures"}},{"name":"ModalSubmitFieldsResolver","description":"A resolver for modal submit interaction text inputs.","props":[{"name":"components","description":"The components within the modal","type":[[["Array","<"],["PartialModalActionRow",">"]]],"meta":{"line":15,"file":"ModalSubmitFieldsResolver.js","path":"src/structures"}},{"name":"_fields","description":"The extracted fields from the modal","access":"private","type":[[["Array","<"],["PartialInputTextData",">"]]],"meta":{"line":23,"file":"ModalSubmitFieldsResolver.js","path":"src/structures"}}],"methods":[{"name":"getField","description":"Gets a field given a custom id from a component","params":[{"name":"customId","description":"The custom id of the component","type":[[["string"]]]}],"returns":{"types":[[["PartialInputTextData"]]],"nullable":true},"meta":{"line":32,"file":"ModalSubmitFieldsResolver.js","path":"src/structures"}},{"name":"getTextInputValue","description":"Gets the value of a text input component given a custom id","params":[{"name":"customId","description":"The custom id of the text input component","type":[[["string"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":43,"file":"ModalSubmitFieldsResolver.js","path":"src/structures"}}],"meta":{"line":9,"file":"ModalSubmitFieldsResolver.js","path":"src/structures"}},{"name":"ModalSubmitInteraction","description":"Represents a modal submit interaction.","extends":[[["Interaction"]]],"implements":[[["InteractionResponses"]]],"props":[{"name":"customId","description":"The custom id of the modal.","type":[[["string"]]],"meta":{"line":22,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"components","description":"The inputs within the modal","type":[[["Array","<"],["PartialModalActionRow",">"]]],"meta":{"line":41,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"message","description":"The message associated with this interaction","type":[[["Message"]],[["APIMessage"]],[["null"]]],"meta":{"line":51,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"fields","description":"The fields within the modal","type":[[["ModalSubmitFieldsResolver"]]],"meta":{"line":57,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":63,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":69,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":75,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":81,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"isFromMessage","description":"Whether this is from a {@link MessageComponentInteraction}.","returns":[[["boolean"]]],"meta":{"line":101,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"deferReply","description":"Defers the reply to this interaction.","implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}},{"name":"transformComponent","description":"Transforms component data to discord.js-compatible data","scope":"static","params":[{"name":"rawComponent","description":"The data to transform","type":[["*"]]}],"returns":[[["Array","<"],["PartialTextInputData",">"]]],"meta":{"line":89,"file":"ModalSubmitInteraction.js","path":"src/structures"}}],"meta":{"line":14,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"NewsChannel","description":"Represents a guild news channel on Discord.","extends":[[["BaseGuildTextChannel"]]],"props":[{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":22,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":28,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"threads","description":"A manager of the threads belonging to this channel","type":[[["GuildTextThreadManager"]]],"meta":{"line":34,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":40,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"topic","description":"The topic of the text channel","nullable":true,"type":[[["string"]]],"meta":{"line":53,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in the channel, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":65,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastPinTimestamp","description":"The timestamp when the last pinned message was pinned, if there was one","nullable":true,"type":[[["number"]]],"meta":{"line":73,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"defaultAutoArchiveDuration","description":"The default auto archive duration for newly created threads in this channel","nullable":true,"type":[[["number"]]],"meta":{"line":81,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"defaultThreadRateLimitPerUser","description":"The initial rate limit per user (slowmode) to set on newly created threads in a channel.","nullable":true,"type":[[["number"]]],"meta":{"line":89,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinAt","description":"The date when the last pinned message was pinned, if there was one","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":68,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":274,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"addFollower","description":"Adds the target to this channel's followers.\nIf you need the created webhook id, use {@link GuildChannelManager#addFollower}.","examples":["if (channel.type === 'GUILD_NEWS') {\n channel.addFollower('222197033908436994', 'Important announcements')\n .then(() => console.log('Added follower'))\n .catch(console.error);\n}"],"params":[{"name":"channel","description":"The channel where the webhook should be created","type":[[["TextChannelResolvable"]]]},{"name":"reason","description":"Reason for creating the webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["NewsChannel",">"]]],"meta":{"line":24,"file":"NewsChannel.js","path":"src/structures"}},{"name":"setDefaultAutoArchiveDuration","description":"Sets the default auto archive duration for all newly created threads in this channel.","inherits":"BaseGuildTextChannel#setDefaultAutoArchiveDuration","inherited":true,"params":[{"name":"defaultAutoArchiveDuration","description":"The new default auto archive duration","type":[[["ThreadAutoArchiveDuration"]]]},{"name":"reason","description":"Reason for changing the channel's default auto archive duration","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["TextChannel",">"]]],"meta":{"line":105,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"setType","description":"Sets the type of this channel (only conversion between text and news is supported)","inherits":"BaseGuildTextChannel#setType","inherited":true,"params":[{"name":"type","description":"The new channel type","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the channel's type","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":115,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"setTopic","description":"Sets a new topic for the guild channel.","inherits":"BaseGuildTextChannel#setTopic","inherited":true,"examples":["// Set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.error);"],"params":[{"name":"topic","description":"The new topic for the guild channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's topic","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":130,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"createInvite","description":"Creates an invite to this guild channel.","inherits":"BaseGuildTextChannel#createInvite","inherited":true,"examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":168,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","inherits":"BaseGuildTextChannel#fetchInvites","inherited":true,"params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":178,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","inherits":"BaseGuildTextChannel#send","inherited":true,"implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","inherits":"BaseGuildTextChannel#sendTyping","inherited":true,"implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","inherits":"BaseGuildTextChannel#createMessageCollector","inherited":true,"implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","inherits":"BaseGuildTextChannel#awaitMessages","inherited":true,"implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","inherits":"BaseGuildTextChannel#createMessageComponentCollector","inherited":true,"implements":["TextBasedChannel#createMessageComponentCollector"],"examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseGuildTextChannel#awaitMessageComponent","inherited":true,"implements":["TextBasedChannel#awaitMessageComponent"],"examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"bulkDelete","description":"Bulk deletes given messages that are newer than two weeks.","inherits":"BaseGuildTextChannel#bulkDelete","inherited":true,"implements":["TextBasedChannel#bulkDelete"],"examples":["// Bulk delete messages\nchannel.bulkDelete(5)\n .then(messages => console.log(`Bulk deleted ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"messages","description":"Messages or number of messages to delete","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]],[["Array","<"],["MessageResolvable",">"]],[["number"]]]},{"name":"filterOld","description":"Filter messages to remove those which are older than two weeks automatically","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Collection","<"],["Snowflake",", ("],["Message","|"],["undefined",")>>"]]],"description":"Returns the deleted messages"},"meta":{"line":319,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","inherits":"BaseGuildTextChannel#fetchWebhooks","inherited":true,"implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":368,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","inherits":"BaseGuildTextChannel#createWebhook","inherited":true,"implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":393,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","inherits":"BaseGuildTextChannel#setRateLimitPerUser","inherited":true,"implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":403,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","inherits":"BaseGuildTextChannel#setNSFW","inherited":true,"implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":413,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"searchInteraction","description":"Search Slash Command (return raw data)","inherits":"BaseGuildTextChannel#searchInteraction","inherited":true,"implements":["TextBasedChannel#searchInteraction"],"params":[{"name":"applicationId","description":"Application ID","type":[[["Snowflake"]]]},{"name":"type","description":"Command Type","default":"CHAT_INPUT","nullable":true,"type":[[["ApplicationCommandType"]]]}],"returns":[[["Object"]]],"meta":{"line":423,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendSlash","description":"Send Slash to this channel","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/SlashCommand.md}"],"inherits":"BaseGuildTextChannel#sendSlash","inherited":true,"implements":["TextBasedChannel#sendSlash"],"examples":["// Send a basic slash\nchannel.sendSlash('botid', 'ping')\n .then(console.log)\n .catch(console.error);","// Send a remote file\nchannel.sendSlash('botid', 'emoji upload', 'https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048', 'test')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"bot","description":"Bot user (BotID, not applicationID)","type":[[["UserResolvable"]]]},{"name":"commandString","description":"Command name (and sub / group formats)","type":[[["string"]]]},{"name":"args","description":"Command arguments","variable":true,"type":[[["any"]],[["Array","<"],["any",">"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":463,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":10,"file":"NewsChannel.js","path":"src/structures"}},{"name":"OAuth2Guild","description":"A partial guild received when using {@link GuildManager#fetch} to fetch multiple guilds.","extends":[[["BaseGuild"]]],"props":[{"name":"owner","description":"Whether the client user is the owner of the guild","type":[[["boolean"]]],"meta":{"line":18,"file":"OAuth2Guild.js","path":"src/structures"}},{"name":"permissions","description":"The permissions that the client user has in this guild","type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":24,"file":"OAuth2Guild.js","path":"src/structures"}},{"name":"id","description":"The guild's id","type":[[["Snowflake"]]],"meta":{"line":19,"file":"BaseGuild.js","path":"src/structures"}},{"name":"name","description":"The name of this guild","type":[[["string"]]],"meta":{"line":25,"file":"BaseGuild.js","path":"src/structures"}},{"name":"icon","description":"The icon hash of this guild","nullable":true,"type":[[["string"]]],"meta":{"line":31,"file":"BaseGuild.js","path":"src/structures"}},{"name":"features","description":"An array of features available to this guild","type":[[["Array","<"],["Features",">"]]],"meta":{"line":37,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this guild was created at","readonly":true,"type":[[["number"]]],"meta":{"line":45,"file":"BaseGuild.js","path":"src/structures"}},{"name":"createdAt","description":"The time this guild was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":54,"file":"BaseGuild.js","path":"src/structures"}},{"name":"nameAcronym","description":"The acronym that shows up in place of a guild icon","readonly":true,"type":[[["string"]]],"meta":{"line":63,"file":"BaseGuild.js","path":"src/structures"}},{"name":"partnered","description":"Whether this guild is partnered","readonly":true,"type":[[["boolean"]]],"meta":{"line":75,"file":"BaseGuild.js","path":"src/structures"}},{"name":"verified","description":"Whether this guild is verified","readonly":true,"type":[[["boolean"]]],"meta":{"line":84,"file":"BaseGuild.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"iconURL","description":"The URL to this guild's icon.","inherits":"BaseGuild#iconURL","inherited":true,"params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":93,"file":"BaseGuild.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this guild.","inherits":"BaseGuild#fetch","inherited":true,"async":true,"returns":[[["Promise","<"],["Guild",">"]]],"meta":{"line":102,"file":"BaseGuild.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the guild's name instead of the Guild object.","inherits":"BaseGuild#toString","inherited":true,"returns":[[["string"]]],"meta":{"line":111,"file":"BaseGuild.js","path":"src/structures"}}],"meta":{"line":10,"file":"OAuth2Guild.js","path":"src/structures"}},{"name":"PartialGroupDMChannel","description":"Represents a Partial Group DM Channel on Discord.","extends":[[["Channel"]]],"props":[{"name":"name","description":"The name of this Group DM Channel","nullable":true,"type":[[["string"]]],"meta":{"line":28,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"icon","description":"The hash of the channel icon","nullable":true,"type":[[["string"]]],"meta":{"line":34,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"messages","description":"Messages data","type":[[["Collection"]]],"meta":{"line":40,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"Last Message ID","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"lastPinTimestamp","description":"Last Pin Timestamp","type":[[["UnixTimestamp"]]],"meta":{"line":52,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"ownerId","description":"Owner ID","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":58,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"invites","description":"Invites fetch","type":[[["Collection","<"],["string",", "],["Invite",">"]]],"meta":{"line":64,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"recipients","description":"The recipients of this Group DM Channel.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":76,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"owner","description":"The owner of this Group DM Channel","readonly":true,"nullable":true,"type":[[["User"]]],"meta":{"line":88,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"voiceUsers","description":"The user in this voice-based channel","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":390,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"voiceConnection","description":"Get connection to current call","readonly":true,"nullable":true,"type":[[["VoiceConnection"]]],"meta":{"line":404,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"shard","description":"Get current shard","readonly":true,"type":[[["WebSocketShard"]]],"meta":{"line":416,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"voiceAdapterCreator","description":"The voice state adapter for this client that can be used with @discordjs/voice to play audio in DM / Group DM channels.","readonly":true,"nullable":true,"type":[[["function"]]],"meta":{"line":424,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"_patch","access":"private","params":[{"name":"data","description":"Channel Data","type":[[["Object"]]]}],"meta":{"line":97,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"edit","description":"Edit channel data","access":"private","params":[{"name":"data","description":"name, icon owner","type":[[["Object"]]]}],"async":true,"returns":[[["Promise","<"],["undefined",">"]]],"meta":{"line":126,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"iconURL","description":"The URL to this channel's icon.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":147,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"addMember","description":"Adds a user to this Group DM Channel.","params":[{"name":"user","description":"User to add to the group","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["PartialGroupDMChannel",">"]]],"meta":{"line":156,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"removeMember","description":"Removes a user from this Group DM Channel.","params":[{"name":"user","description":"User to remove from the group","type":[[["UserResolvable"]]]}],"async":true,"returns":[[["Promise","<"],["PartialGroupDMChannel",">"]]],"meta":{"line":174,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"setName","description":"Renames this Group DM Channel.","params":[{"name":"name","description":"Name of the channel","nullable":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["PartialGroupDMChannel",">"]]],"meta":{"line":194,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"setIcon","description":"Sets the icon of this Group DM Channel.","params":[{"name":"icon","description":"Icon of the channel","nullable":true,"type":[[["Base64Resolvable"]],[["BufferResolvable"]]]}],"returns":[[["Promise","<"],["PartialGroupDMChannel",">"]]],"meta":{"line":203,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"setOwner","description":"Changes the owner of this Group DM Channel.","params":[{"name":"user","description":"User to transfer ownership to","type":[[["UserResolvable"]]]}],"returns":[[["Promise","<"],["PartialGroupDMChannel",">"]]],"meta":{"line":212,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"getInvite","description":"Gets the invite for this Group DM Channel.","async":true,"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":230,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"fetchInvite","description":"Get all the invites for this Group DM Channel.","params":[{"name":"force","description":"Using API to fetch invites or cache","default":false,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":246,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"removeInvite","description":"Delete invites from this Group DM Channel.","params":[{"name":"invite","description":"Invite to add to the channel","type":[[["Invite"]]]}],"async":true,"returns":[[["Promise","<"],["PartialGroupDMChannel",">"]]],"meta":{"line":261,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"delete","description":"Leave this Group DM Channel.","examples":["// Delete the channel\nchannel.delete()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"slient","description":"Leave without notifying other members","default":false,"nullable":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":283,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"call","description":"Call this Group DMChannel. Return discordjs/voice VoiceConnection","params":[{"name":"options","description":"Options for the call","type":[[["CallOptions"]]]}],"returns":[[["Promise","<"],["VoiceConnection",">"]]],"meta":{"line":316,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"ring","description":"Ring the user's phone / PC (call)","params":[{"name":"recipients","description":"Array of recipients","type":[[["Array","<"],["UserResolvable",">"]]]}],"returns":[[["Promise","<"],["any",">"]]],"meta":{"line":363,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"sync","description":"Sync VoiceState of this Group DMChannel.","returns":[[["undefined"]]],"meta":{"line":377,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":17,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"PermissionOverwrites","description":"Represents a permission overwrite for a role or member in a guild channel.","extends":[[["Base"]]],"props":[{"name":"channel","description":"The GuildChannel this overwrite is for","readonly":true,"type":[[["GuildChannel"]]],"meta":{"line":17,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"id","description":"The overwrite's id, either a {@link User} or a {@link Role} id","type":[[["Snowflake"]]],"meta":{"line":33,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"type","description":"The type of this overwrite","type":[[["OverwriteType"]]],"meta":{"line":40,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"deny","description":"The permissions that are denied for the user or role.","type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":48,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"allow","description":"The permissions that are allowed for the user or role.","type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":56,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"edit","description":"Edits this Permission Overwrite.","examples":["// Update permission overwrites\npermissionOverwrites.edit({\n SEND_MESSAGES: false\n})\n .then(channel => console.log(channel.permissionOverwrites.get(message.author.id)))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the update","type":[[["PermissionOverwriteOptions"]]]},{"name":"reason","description":"Reason for creating/editing this overwrite","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["PermissionOverwrites",">"]]],"meta":{"line":73,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"delete","description":"Deletes this Permission Overwrite.","params":[{"name":"reason","description":"Reason for deleting this overwrite","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["PermissionOverwrites",">"]]],"meta":{"line":83,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"resolveOverwriteOptions","description":"Resolves bitfield permissions overwrites from an object.","scope":"static","params":[{"name":"options","description":"The options for the update","type":[[["PermissionOverwriteOptions"]]]},{"name":"initialPermissions","description":"The initial permissions","type":[[["ResolvedOverwriteOptions"]]]}],"returns":[[["ResolvedOverwriteOptions"]]],"meta":{"line":121,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"resolve","description":"Resolves an overwrite into {@link RawOverwriteData}.","scope":"static","params":[{"name":"overwrite","description":"The overwrite-like data to resolve","type":[[["OverwriteResolvable"]]]},{"name":"guild","description":"The guild to resolve from","optional":true,"type":[[["Guild"]]]}],"returns":[[["RawOverwriteData"]]],"meta":{"line":172,"file":"PermissionOverwrites.js","path":"src/structures"}}],"meta":{"line":13,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"Presence","description":"Represents a user's presence.","extends":[[["Base"]]],"props":[{"name":"userId","description":"The presence's user id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Presence.js","path":"src/structures"}},{"name":"guild","description":"The guild this presence is in","nullable":true,"type":[[["Guild"]]],"meta":{"line":57,"file":"Presence.js","path":"src/structures"}},{"name":"user","description":"The user of this presence","readonly":true,"nullable":true,"type":[[["User"]]],"meta":{"line":67,"file":"Presence.js","path":"src/structures"}},{"name":"member","description":"The member of this presence","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":76,"file":"Presence.js","path":"src/structures"}},{"name":"status","description":"The status of this presence","type":[[["PresenceStatus"]]],"meta":{"line":86,"file":"Presence.js","path":"src/structures"}},{"name":"activities","description":"The activities of this presence","type":[[["Array","<"],["Activity",">"]]],"meta":{"line":96,"file":"Presence.js","path":"src/structures"}},{"name":"clientStatus","description":"The devices this presence is on","nullable":true,"type":[[["Object"]]],"props":[{"name":"web","description":"The current presence in the web application","nullable":true,"type":[[["ClientPresenceStatus"]]]},{"name":"mobile","description":"The current presence in the mobile application","nullable":true,"type":[[["ClientPresenceStatus"]]]},{"name":"desktop","description":"The current presence in the desktop application","nullable":true,"type":[[["ClientPresenceStatus"]]]}],"meta":{"line":121,"file":"Presence.js","path":"src/structures"}},{"name":"lastModified","description":"The timestamp this presence was last updated","type":[[["number"]]],"meta":{"line":131,"file":"Presence.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"equals","description":"Whether this presence is equal to another.","params":[{"name":"presence","description":"The presence to compare with","type":[[["Presence"]]]}],"returns":[[["boolean"]]],"meta":{"line":148,"file":"Presence.js","path":"src/structures"}}],"meta":{"line":43,"file":"Presence.js","path":"src/structures"}},{"name":"Activity","description":"Represents an activity that is part of a user's presence.","props":[{"name":"presence","description":"The presence of the Activity","readonly":true,"type":[[["Presence"]]],"meta":{"line":179,"file":"Presence.js","path":"src/structures"}},{"name":"id","description":"The activity's id","type":[[["string"]]],"meta":{"line":191,"file":"Presence.js","path":"src/structures"}},{"name":"name","description":"The activity's name","type":[[["string"]]],"meta":{"line":197,"file":"Presence.js","path":"src/structures"}},{"name":"type","description":"The activity status's type","type":[[["ActivityType"]]],"meta":{"line":203,"file":"Presence.js","path":"src/structures"}},{"name":"url","description":"If the activity is being streamed, a link to the stream","nullable":true,"type":[[["string"]]],"meta":{"line":209,"file":"Presence.js","path":"src/structures"}},{"name":"details","description":"Details about the activity","nullable":true,"type":[[["string"]]],"meta":{"line":215,"file":"Presence.js","path":"src/structures"}},{"name":"state","description":"State of the activity","nullable":true,"type":[[["string"]]],"meta":{"line":221,"file":"Presence.js","path":"src/structures"}},{"name":"applicationId","description":"The id of the application associated with this activity","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":227,"file":"Presence.js","path":"src/structures"}},{"name":"timestamps","description":"Timestamps for the activity","nullable":true,"type":[[["ActivityTimestamps"]]],"meta":{"line":240,"file":"Presence.js","path":"src/structures"}},{"name":"syncId","description":"The Spotify song's id","nullable":true,"type":[[["string"]]],"meta":{"line":251,"file":"Presence.js","path":"src/structures"}},{"name":"platform","description":"The platform the game is being played on","nullable":true,"type":[[["ActivityPlatform"]]],"meta":{"line":257,"file":"Presence.js","path":"src/structures"}},{"name":"party","description":"Party of the activity","nullable":true,"type":[[["ActivityParty"]]],"meta":{"line":270,"file":"Presence.js","path":"src/structures"}},{"name":"assets","description":"Assets for rich presence","nullable":true,"type":[[["RichPresenceAssets"]]],"meta":{"line":276,"file":"Presence.js","path":"src/structures"}},{"name":"flags","description":"Flags that describe the activity","type":[[["Readonly","<"],["ActivityFlags",">"]]],"meta":{"line":282,"file":"Presence.js","path":"src/structures"}},{"name":"emoji","description":"Emoji for a custom activity","nullable":true,"type":[[["Emoji"]]],"meta":{"line":288,"file":"Presence.js","path":"src/structures"}},{"name":"sessionId","description":"The game's or Spotify session's id","nullable":true,"type":[[["string"]]],"meta":{"line":294,"file":"Presence.js","path":"src/structures"}},{"name":"buttons","description":"The labels of the buttons of this rich presence","type":[[["Array","<"],["string",">"]]],"meta":{"line":300,"file":"Presence.js","path":"src/structures"}},{"name":"createdTimestamp","description":"Creation date of the activity","type":[[["number"]]],"meta":{"line":306,"file":"Presence.js","path":"src/structures"}},{"name":"createdAt","description":"The time the activity was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":333,"file":"Presence.js","path":"src/structures"}}],"methods":[{"name":"equals","description":"Whether this activity is equal to another activity.","params":[{"name":"activity","description":"The activity to compare with","type":[[["Activity"]]]}],"returns":[[["boolean"]]],"meta":{"line":314,"file":"Presence.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the activities' name instead of the Activity object.","returns":[[["string"]]],"meta":{"line":341,"file":"Presence.js","path":"src/structures"}}],"meta":{"line":177,"file":"Presence.js","path":"src/structures"}},{"name":"RichPresenceAssets","description":"Assets for a rich presence","props":[{"name":"activity","description":"The activity of the RichPresenceAssets","readonly":true,"type":[[["Activity"]]],"meta":{"line":355,"file":"Presence.js","path":"src/structures"}},{"name":"largeText","description":"Hover text for the large image","nullable":true,"type":[[["string"]]],"meta":{"line":367,"file":"Presence.js","path":"src/structures"}},{"name":"smallText","description":"Hover text for the small image","nullable":true,"type":[[["string"]]],"meta":{"line":373,"file":"Presence.js","path":"src/structures"}},{"name":"largeImage","description":"The large image asset's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":379,"file":"Presence.js","path":"src/structures"}},{"name":"smallImage","description":"The small image asset's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":385,"file":"Presence.js","path":"src/structures"}}],"methods":[{"name":"smallImageURL","description":"Gets the URL of the small image asset","params":[{"name":"options","description":"Options for the image URL","optional":true,"type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":393,"file":"Presence.js","path":"src/structures"}},{"name":"largeImageURL","description":"Gets the URL of the large image asset","params":[{"name":"options","description":"Options for the image URL","optional":true,"type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":416,"file":"Presence.js","path":"src/structures"}}],"meta":{"line":353,"file":"Presence.js","path":"src/structures"}},{"name":"ReactionCollector","description":"Collects reactions on messages.\nWill automatically stop if the message ({@link Client#event:messageDelete messageDelete} or\n{@link Client#event:messageDeleteBulk messageDeleteBulk}),\nchannel ({@link Client#event:channelDelete channelDelete}),\nthread ({@link Client#event:threadDelete threadDelete}), or\nguild ({@link Client#event:guildDelete guildDelete}) is deleted.","extends":[[["Collector"]]],"construct":{"name":"ReactionCollector","params":[{"name":"message","description":"The message upon which to collect reactions","type":[[["Message"]]]},{"name":"options","description":"The options to apply to this collector","optional":true,"default":"{}","type":[[["ReactionCollectorOptions"]]]}]},"props":[{"name":"message","description":"The message upon which to collect reactions","type":[[["Message"]]],"meta":{"line":35,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"users","description":"The users that have reacted to this message","type":[[["Collection"]]],"meta":{"line":41,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"total","description":"The total number of reactions collected","type":[[["number"]]],"meta":{"line":47,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"endReason","description":"The reason this collector has ended with, or null if it hasn't ended yet","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":164,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this Collector","readonly":true,"type":[[["Client"]]],"meta":{"line":35,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"filter","description":"The filter applied to this collector","type":[[["CollectorFilter"]]],"meta":{"line":48,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"options","description":"The options of this collector","type":[[["CollectorOptions"]]],"meta":{"line":54,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"collected","description":"The items collected by this collector","type":[[["Collection"]]],"meta":{"line":60,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"ended","description":"Whether this collector has finished collecting","type":[[["boolean"]]],"meta":{"line":66,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_timeout","description":"Timeout for cleanup","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":73,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"_idletimeout","description":"Timeout for cleanup due to inactivity","access":"private","nullable":true,"type":[[["Timeout"]]],"meta":{"line":80,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"next","description":"Returns a promise that resolves with the next collected element;\nrejects with collected elements if the collector finishes without receiving a next element","readonly":true,"type":[[["Promise"]]],"meta":{"line":148,"file":"Collector.js","path":"src/structures/interfaces"}}],"methods":[{"name":"collect","description":"Handles an incoming reaction for possible collection.","access":"private","params":[{"name":"reaction","description":"The reaction to possibly collect","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that added the reaction","type":[[["User"]]]}],"returns":{"types":[[["Snowflake"]],[["string"]]],"nullable":true},"meta":{"line":110,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"dispose","description":"Handles a reaction deletion for possible disposal.","params":[{"name":"reaction","description":"The reaction to possibly dispose of","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that removed the reaction","type":[[["User"]]]}],"returns":{"types":[[["Snowflake"]],[["string"]]],"nullable":true},"meta":{"line":128,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"empty","description":"Empties this reaction collector.","meta":{"line":152,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"_handleMessageDeletion","description":"Handles checking if the message has been deleted, and if so, stops the collector with the reason 'messageDelete'.","access":"private","params":[{"name":"message","description":"The message that was deleted","type":[[["Message"]]]}],"returns":[[["void"]]],"meta":{"line":177,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"_handleChannelDeletion","description":"Handles checking if the channel has been deleted, and if so, stops the collector with the reason 'channelDelete'.","access":"private","params":[{"name":"channel","description":"The channel that was deleted","type":[[["GuildChannel"]]]}],"returns":[[["void"]]],"meta":{"line":189,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"_handleThreadDeletion","description":"Handles checking if the thread has been deleted, and if so, stops the collector with the reason 'threadDelete'.","access":"private","params":[{"name":"thread","description":"The thread that was deleted","type":[[["ThreadChannel"]]]}],"returns":[[["void"]]],"meta":{"line":201,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"_handleGuildDeletion","description":"Handles checking if the guild has been deleted, and if so, stops the collector with the reason 'guildDelete'.","access":"private","params":[{"name":"guild","description":"The guild that was deleted","type":[[["Guild"]]]}],"returns":[[["void"]]],"meta":{"line":213,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"handleCollect","description":"Call this to handle an event as a collectable element. Accepts any event data as parameters.","inherits":"Collector#handleCollect","inherited":true,"emits":["Collector#event:collect"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":99,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"handleDispose","description":"Call this to remove an element from the collection. Accepts any event data as parameters.","inherits":"Collector#handleDispose","inherited":true,"emits":["Collector#event:dispose"],"params":[{"name":"args","description":"The arguments emitted by the listener","variable":true,"type":[["*"]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":126,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"stop","description":"Stops this collector and emits the `end` event.","inherits":"Collector#stop","inherited":true,"emits":["Collector#event:end"],"params":[{"name":"reason","description":"The reason this collector is ending","optional":true,"default":"'user'","type":[[["string"]]]}],"meta":{"line":180,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"resetTimer","description":"Resets the collector's timeout and idle timer.","inherits":"Collector#resetTimer","inherited":true,"params":[{"name":"options","description":"Options for resetting","optional":true,"type":[[["CollectorResetTimerOptions"]]]}],"meta":{"line":213,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"checkEnd","description":"Checks whether the collector should end, and if so, ends it.","inherits":"Collector#checkEnd","inherited":true,"returns":{"types":[[["boolean"]]],"description":"Whether the collector ended or not"},"meta":{"line":228,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"key","description":"Gets the collector key for a reaction.","scope":"static","params":[{"name":"reaction","description":"The message reaction to get the key for","type":[[["MessageReaction"]]]}],"returns":[[["Snowflake"]],[["string"]]],"meta":{"line":224,"file":"ReactionCollector.js","path":"src/structures"}}],"events":[{"name":"create","description":"Emitted whenever a reaction is newly created on a message. Will emit only when a new reaction is\nadded to the message, as opposed to {@link Collector#collect} which will\nbe emitted even when a reaction has already been added to the message.","params":[{"name":"reaction","description":"The reaction that was added","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that added the reaction","type":[[["User"]]]}],"meta":{"line":82,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"collect","description":"Emitted whenever a reaction is collected.","params":[{"name":"reaction","description":"The reaction that was collected","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that added the reaction","type":[[["User"]]]}],"meta":{"line":111,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"dispose","description":"Emitted when the reaction had all the users removed and the `dispose` option is set to true.","params":[{"name":"reaction","description":"The reaction that was disposed of","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that removed the reaction","type":[[["User"]]]}],"meta":{"line":129,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"remove","description":"Emitted when the reaction had one user removed and the `dispose` option is set to true.","params":[{"name":"reaction","description":"The reaction that was removed","type":[[["MessageReaction"]]]},{"name":"user","description":"The user that removed the reaction","type":[[["User"]]]}],"meta":{"line":137,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"end","description":"Emitted when the collector is finished collecting.","params":[{"name":"collected","description":"The elements collected by the collector","type":[[["Collection"]]]},{"name":"reason","description":"The reason the collector ended","type":[[["string"]]]}],"meta":{"line":193,"file":"Collector.js","path":"src/structures/interfaces"}}],"meta":{"line":23,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"ReactionEmoji","description":"Represents a limited emoji set used for both custom and unicode emojis. Custom emojis\nwill use this class opposed to the Emoji class when the client doesn't know enough\ninformation about them.","extends":[[["Emoji"]]],"props":[{"name":"reaction","description":"The message reaction this emoji refers to","type":[[["MessageReaction"]]],"meta":{"line":19,"file":"ReactionEmoji.js","path":"src/structures"}},{"name":"animated","description":"Whether or not the emoji is animated","nullable":true,"type":[[["boolean"]]],"meta":{"line":34,"file":"Emoji.js","path":"src/structures"}},{"name":"name","description":"The emoji's name","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Emoji.js","path":"src/structures"}},{"name":"id","description":"The emoji's id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":46,"file":"Emoji.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":54,"file":"Emoji.js","path":"src/structures"}},{"name":"identifier","description":"The identifier of this emoji, used for message reactions","readonly":true,"type":[[["string"]]],"meta":{"line":84,"file":"Emoji.js","path":"src/structures"}},{"name":"url","description":"The URL to the emoji file if it's a custom emoji","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":94,"file":"Emoji.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":103,"file":"Emoji.js","path":"src/structures"}},{"name":"createdAt","description":"The time the emoji was created at, or null if unicode","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":112,"file":"Emoji.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the text required to form a graphical emoji on Discord\ninstead of the Emoji object.","inherits":"Emoji#toString","inherited":true,"examples":["// Send a custom emoji from a guild:\nconst emoji = guild.emojis.cache.first();\nmsg.channel.send(`Hello! ${emoji}`);","// Send the emoji used in a reaction to the channel the reaction is part of\nreaction.message.channel.send(`The emoji used was: ${reaction.emoji}`);"],"returns":[[["string"]]],"meta":{"line":128,"file":"Emoji.js","path":"src/structures"}}],"meta":{"line":12,"file":"ReactionEmoji.js","path":"src/structures"}},{"name":"CustomStatus","construct":{"name":"CustomStatus","params":[{"name":"data","description":"CustomStatus to clone or raw data","optional":true,"default":"{}","type":[[["CustomStatus"]],[["CustomStatusOptions"]]]},{"name":"presence","description":"The presence this activity is part of","optional":true,"type":[[["Presence"]]]}]},"props":[{"name":"emoji","description":"The emoji to be displayed","nullable":true,"type":[[["EmojiIdentifierResolvable"]]],"meta":{"line":36,"file":"RichPresence.js","path":"src/structures"}},{"name":"state","description":"The state to be displayed","nullable":true,"type":[[["string"]]],"meta":{"line":42,"file":"RichPresence.js","path":"src/structures"}}],"methods":[{"name":"setup","description":"Sets the status from a JSON object","access":"private","params":[{"name":"data","description":"CustomStatus to clone or raw data","type":[[["CustomStatus"]],[["CustomStatusOptions"]]]}],"meta":{"line":50,"file":"RichPresence.js","path":"src/structures"}},{"name":"setEmoji","description":"Set the emoji of this activity","params":[{"name":"emoji","description":"The emoji to be displayed","type":[[["EmojiIdentifierResolvable"]]]}],"returns":[[["CustomStatus"]]],"meta":{"line":59,"file":"RichPresence.js","path":"src/structures"}},{"name":"setState","description":"Set state of this activity","params":[{"name":"state","description":"The state to be displayed","type":[[["string"]],[["null"]]]}],"returns":[[["CustomStatus"]]],"meta":{"line":68,"file":"RichPresence.js","path":"src/structures"}},{"name":"toJSON","description":"Returns an object that can be used to set the status","returns":[[["CustomStatus"]]],"meta":{"line":78,"file":"RichPresence.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the activities' name instead of the Activity object.","returns":[[["string"]]],"meta":{"line":92,"file":"RichPresence.js","path":"src/structures"}}],"meta":{"line":29,"file":"RichPresence.js","path":"src/structures"}},{"name":"RichPresence","construct":{"name":"RichPresence","params":[{"name":"client","description":"Discord client","optional":true,"type":[[["Client"]]]},{"name":"data","description":"RichPresence to clone or raw data","optional":true,"default":"{}","type":[[["RichPresence"]]]},{"name":"IPC","description":"Whether to use IPC (RPC for Discord Apps)","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"presence","description":"The presence this activity is part of","optional":true,"type":[[["Presence"]]]}]},"props":[{"name":"name","description":"The activity's name","type":[[["string"]]],"meta":{"line":115,"file":"RichPresence.js","path":"src/structures"}},{"name":"type","description":"The activity status's type","type":[[["ActivityType"]]],"meta":{"line":120,"file":"RichPresence.js","path":"src/structures"}},{"name":"url","description":"If the activity is being streamed, a link to the stream","nullable":true,"type":[[["string"]]],"meta":{"line":125,"file":"RichPresence.js","path":"src/structures"}},{"name":"application_id","description":"The id of the application associated with this activity","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":130,"file":"RichPresence.js","path":"src/structures"}},{"name":"state","description":"State of the activity","nullable":true,"type":[[["string"]]],"meta":{"line":135,"file":"RichPresence.js","path":"src/structures"}},{"name":"details","description":"Details about the activity","nullable":true,"type":[[["string"]]],"meta":{"line":140,"file":"RichPresence.js","path":"src/structures"}},{"name":"party","description":"Party of the activity","nullable":true,"type":[[["ActivityParty"]]],"meta":{"line":145,"file":"RichPresence.js","path":"src/structures"}},{"name":"timestamps","description":"Timestamps for the activity","nullable":true,"type":[[["ActivityTimestamps"]]],"meta":{"line":150,"file":"RichPresence.js","path":"src/structures"}},{"name":"assets","description":"Assets for rich presence","nullable":true,"type":[[["RichPresenceAssets"]]],"meta":{"line":155,"file":"RichPresence.js","path":"src/structures"}},{"name":"buttons","description":"The labels of the buttons of this rich presence","type":[[["Array","<"],["string",">"]]],"meta":{"line":160,"file":"RichPresence.js","path":"src/structures"}}],"methods":[{"name":"setup","description":"Sets the status from a JSON object","access":"private","params":[{"name":"data","description":"data","type":[[["RichPresence"]]]}],"meta":{"line":171,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAssetsLargeImage","description":"Set the large image of this activity","params":[{"name":"image","description":"The large image asset's id","nullable":true,"type":[[["any"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":191,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAssetsSmallImage","description":"Set the small image of this activity","params":[{"name":"image","description":"The small image asset's id","nullable":true,"type":[[["any"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":228,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAssetsLargeText","description":"Hover text for the large image","params":[{"name":"text","description":"Assets text","type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":265,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAssetsSmallText","description":"Hover text for the small image","params":[{"name":"text","description":"Assets text","type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":275,"file":"RichPresence.js","path":"src/structures"}},{"name":"setName","description":"Set the name of the activity","params":[{"name":"name","description":"The activity's name","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":285,"file":"RichPresence.js","path":"src/structures"}},{"name":"setURL","description":"If the activity is being streamed, a link to the stream","params":[{"name":"url","description":"URL of the stream","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":294,"file":"RichPresence.js","path":"src/structures"}},{"name":"setType","description":"The activity status's type","params":[{"name":"type","description":"The type of activity","nullable":true,"type":[[["ActivityTypes"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":305,"file":"RichPresence.js","path":"src/structures"}},{"name":"setApplicationId","description":"Set the application id of this activity","params":[{"name":"id","description":"Bot's id","nullable":true,"type":[[["Snowflake"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":316,"file":"RichPresence.js","path":"src/structures"}},{"name":"setState","description":"Set the state of the activity","params":[{"name":"state","description":"The state of the activity","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":325,"file":"RichPresence.js","path":"src/structures"}},{"name":"setDetails","description":"Set the details of the activity","params":[{"name":"details","description":"The details of the activity","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":334,"file":"RichPresence.js","path":"src/structures"}},{"name":"setParty","description":"Set the party of this activity","params":[{"name":"party","description":"The party to be displayed","nullable":true,"type":[[["RichParty"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":349,"file":"RichPresence.js","path":"src/structures"}},{"name":"setStartTimestamp","description":"Sets the start timestamp of the activity","params":[{"name":"timestamp","description":"The timestamp of the start of the activity","nullable":true,"type":[[["number"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":369,"file":"RichPresence.js","path":"src/structures"}},{"name":"setEndTimestamp","description":"Sets the end timestamp of the activity","params":[{"name":"timestamp","description":"The timestamp of the end of the activity","nullable":true,"type":[[["number"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":379,"file":"RichPresence.js","path":"src/structures"}},{"name":"setButtons","description":"Set the buttons of the rich presence","params":[{"name":"button","description":"A list of buttons to set","variable":true,"nullable":true,"type":[[["RichButton"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":394,"file":"RichPresence.js","path":"src/structures"}},{"name":"addButton","description":"Add a button to the rich presence","params":[{"name":"name","description":"The name of the button","type":[[["string"]]]},{"name":"url","description":"The url of the button","type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":423,"file":"RichPresence.js","path":"src/structures"}},{"name":"toJSON","description":"Convert the rich presence to a JSON object","returns":[[["Object"]]],"meta":{"line":443,"file":"RichPresence.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the activities' name instead of the Activity object.","returns":[[["string"]]],"meta":{"line":547,"file":"RichPresence.js","path":"src/structures"}},{"name":"getUUID","description":"Get random UUID string (Util)","scope":"static","returns":[[["string"]]],"meta":{"line":495,"file":"RichPresence.js","path":"src/structures"}},{"name":"getExternal","description":"Get Assets from a RichPresence (Util)","scope":"static","params":[{"name":"client","description":"Discord Client","type":[[["Client"]]]},{"name":"applicationId","description":"Application id","type":[[["Snowflake"]]]},{"name":"image1","description":"URL image 1 (not from Discord)","type":[[["string"]]]},{"name":"image2","description":"URL image 2 (not from Discord)","type":[[["string"]]]}],"async":true,"returns":[[["Array","<"],["ExternalAssets",">"]]],"meta":{"line":509,"file":"RichPresence.js","path":"src/structures"}}],"meta":{"line":108,"file":"RichPresence.js","path":"src/structures"}},{"name":"SpotifyRPC","extends":[[["RichPresence"]]],"construct":{"name":"SpotifyRPC","description":"Create a new RichPresence (Spotify style)","params":[{"name":"client","description":"Discord Client","type":[[["Client"]]]},{"name":"options","description":"Options for the Spotify RPC","type":[[["SpotifyRPC"]]]},{"name":"presence","description":"Presence","type":[[["Presence"]]]}]},"props":[{"name":"sync_id","description":"The Spotify song's id","nullable":true,"type":[[["string"]]],"meta":{"line":588,"file":"RichPresence.js","path":"src/structures"}},{"name":"id","description":"The activity's id","type":[[["string"]]],"meta":{"line":593,"file":"RichPresence.js","path":"src/structures"}},{"name":"flags","description":"Flags that describe the activity","type":[[["ActivityFlags"]]],"meta":{"line":598,"file":"RichPresence.js","path":"src/structures"}},{"name":"metadata","description":"Spotify metadata","type":[[["SpotifyMetadata"]]],"meta":{"line":610,"file":"RichPresence.js","path":"src/structures"}},{"name":"name","description":"The activity's name","type":[[["string"]]],"meta":{"line":115,"file":"RichPresence.js","path":"src/structures"}},{"name":"type","description":"The activity status's type","type":[[["ActivityType"]]],"meta":{"line":120,"file":"RichPresence.js","path":"src/structures"}},{"name":"url","description":"If the activity is being streamed, a link to the stream","nullable":true,"type":[[["string"]]],"meta":{"line":125,"file":"RichPresence.js","path":"src/structures"}},{"name":"application_id","description":"The id of the application associated with this activity","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":130,"file":"RichPresence.js","path":"src/structures"}},{"name":"state","description":"State of the activity","nullable":true,"type":[[["string"]]],"meta":{"line":135,"file":"RichPresence.js","path":"src/structures"}},{"name":"details","description":"Details about the activity","nullable":true,"type":[[["string"]]],"meta":{"line":140,"file":"RichPresence.js","path":"src/structures"}},{"name":"party","description":"Party of the activity","nullable":true,"type":[[["ActivityParty"]]],"meta":{"line":145,"file":"RichPresence.js","path":"src/structures"}},{"name":"timestamps","description":"Timestamps for the activity","nullable":true,"type":[[["ActivityTimestamps"]]],"meta":{"line":150,"file":"RichPresence.js","path":"src/structures"}},{"name":"assets","description":"Assets for rich presence","nullable":true,"type":[[["RichPresenceAssets"]]],"meta":{"line":155,"file":"RichPresence.js","path":"src/structures"}},{"name":"buttons","description":"The labels of the buttons of this rich presence","type":[[["Array","<"],["string",">"]]],"meta":{"line":160,"file":"RichPresence.js","path":"src/structures"}}],"methods":[{"name":"setup","description":"Sets the status from a JSON object","access":"private","params":[{"name":"options","description":"data","type":[[["SpotifyRPC"]]]}],"meta":{"line":576,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAssetsLargeImage","description":"Set the large image of this activity","params":[{"name":"image","description":"Spotify song's image ID","nullable":true,"type":[[["string"]]]}],"returns":[[["SpotifyRPC"]]],"meta":{"line":622,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAssetsSmallImage","description":"Set the small image of this activity","params":[{"name":"image","description":"Spotify song's image ID","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":633,"file":"RichPresence.js","path":"src/structures"}},{"name":"setSongId","description":"Set Spotify song id to sync with","params":[{"name":"id","description":"Song id","type":[[["string"]]]}],"returns":[[["SpotifyRPC"]]],"meta":{"line":644,"file":"RichPresence.js","path":"src/structures"}},{"name":"addArtistId","description":"Add the artist id","params":[{"name":"id","description":"Artist id","type":[[["string"]]]}],"returns":[[["SpotifyRPC"]]],"meta":{"line":654,"file":"RichPresence.js","path":"src/structures"}},{"name":"setArtistIds","description":"Set the artist ids","params":[{"name":"ids","description":"Artist ids","variable":true,"type":[[["string"]],[["Array","<"],["string",">"]]]}],"returns":[[["SpotifyRPC"]]],"meta":{"line":665,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAlbumId","description":"Set the album id","params":[{"name":"id","description":"Album id","type":[[["string"]]]}],"returns":[[["SpotifyRPC"]]],"meta":{"line":680,"file":"RichPresence.js","path":"src/structures"}},{"name":"toJSON","description":"Convert the rich presence to a JSON object","returns":[[["SpotifyRPC"]]],"meta":{"line":690,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAssetsLargeText","description":"Hover text for the large image","inherits":"RichPresence#setAssetsLargeText","inherited":true,"params":[{"name":"text","description":"Assets text","type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":265,"file":"RichPresence.js","path":"src/structures"}},{"name":"setAssetsSmallText","description":"Hover text for the small image","inherits":"RichPresence#setAssetsSmallText","inherited":true,"params":[{"name":"text","description":"Assets text","type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":275,"file":"RichPresence.js","path":"src/structures"}},{"name":"setName","description":"Set the name of the activity","inherits":"RichPresence#setName","inherited":true,"params":[{"name":"name","description":"The activity's name","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":285,"file":"RichPresence.js","path":"src/structures"}},{"name":"setURL","description":"If the activity is being streamed, a link to the stream","inherits":"RichPresence#setURL","inherited":true,"params":[{"name":"url","description":"URL of the stream","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":294,"file":"RichPresence.js","path":"src/structures"}},{"name":"setType","description":"The activity status's type","inherits":"RichPresence#setType","inherited":true,"params":[{"name":"type","description":"The type of activity","nullable":true,"type":[[["ActivityTypes"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":305,"file":"RichPresence.js","path":"src/structures"}},{"name":"setApplicationId","description":"Set the application id of this activity","inherits":"RichPresence#setApplicationId","inherited":true,"params":[{"name":"id","description":"Bot's id","nullable":true,"type":[[["Snowflake"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":316,"file":"RichPresence.js","path":"src/structures"}},{"name":"setState","description":"Set the state of the activity","inherits":"RichPresence#setState","inherited":true,"params":[{"name":"state","description":"The state of the activity","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":325,"file":"RichPresence.js","path":"src/structures"}},{"name":"setDetails","description":"Set the details of the activity","inherits":"RichPresence#setDetails","inherited":true,"params":[{"name":"details","description":"The details of the activity","nullable":true,"type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":334,"file":"RichPresence.js","path":"src/structures"}},{"name":"setParty","description":"Set the party of this activity","inherits":"RichPresence#setParty","inherited":true,"params":[{"name":"party","description":"The party to be displayed","nullable":true,"type":[[["RichParty"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":349,"file":"RichPresence.js","path":"src/structures"}},{"name":"setStartTimestamp","description":"Sets the start timestamp of the activity","inherits":"RichPresence#setStartTimestamp","inherited":true,"params":[{"name":"timestamp","description":"The timestamp of the start of the activity","nullable":true,"type":[[["number"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":369,"file":"RichPresence.js","path":"src/structures"}},{"name":"setEndTimestamp","description":"Sets the end timestamp of the activity","inherits":"RichPresence#setEndTimestamp","inherited":true,"params":[{"name":"timestamp","description":"The timestamp of the end of the activity","nullable":true,"type":[[["number"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":379,"file":"RichPresence.js","path":"src/structures"}},{"name":"setButtons","description":"Set the buttons of the rich presence","inherits":"RichPresence#setButtons","inherited":true,"params":[{"name":"button","description":"A list of buttons to set","variable":true,"nullable":true,"type":[[["RichButton"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":394,"file":"RichPresence.js","path":"src/structures"}},{"name":"addButton","description":"Add a button to the rich presence","inherits":"RichPresence#addButton","inherited":true,"params":[{"name":"name","description":"The name of the button","type":[[["string"]]]},{"name":"url","description":"The url of the button","type":[[["string"]]]}],"returns":[[["RichPresence"]]],"meta":{"line":423,"file":"RichPresence.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the activities' name instead of the Activity object.","inherits":"RichPresence#toString","inherited":true,"returns":[[["string"]]],"meta":{"line":547,"file":"RichPresence.js","path":"src/structures"}}],"meta":{"line":559,"file":"RichPresence.js","path":"src/structures"}},{"name":"Role","description":"Represents a role on Discord.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild that the role belongs to","type":[[["Guild"]]],"meta":{"line":32,"file":"Role.js","path":"src/structures"}},{"name":"icon","description":"The icon hash of the role","nullable":true,"type":[[["string"]]],"meta":{"line":38,"file":"Role.js","path":"src/structures"}},{"name":"unicodeEmoji","description":"The unicode emoji for the role","nullable":true,"type":[[["string"]]],"meta":{"line":44,"file":"Role.js","path":"src/structures"}},{"name":"id","description":"The role's id (unique to the guild it is part of)","type":[[["Snowflake"]]],"meta":{"line":54,"file":"Role.js","path":"src/structures"}},{"name":"name","description":"The name of the role","type":[[["string"]]],"meta":{"line":60,"file":"Role.js","path":"src/structures"}},{"name":"color","description":"The base 10 color of the role","type":[[["number"]]],"meta":{"line":68,"file":"Role.js","path":"src/structures"}},{"name":"hoist","description":"If true, users that are part of this role will appear in a separate category in the users list","type":[[["boolean"]]],"meta":{"line":76,"file":"Role.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the role from the API","type":[[["number"]]],"meta":{"line":84,"file":"Role.js","path":"src/structures"}},{"name":"permissions","description":"The permissions of the role","type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":92,"file":"Role.js","path":"src/structures"}},{"name":"managed","description":"Whether or not the role is managed by an external service","type":[[["boolean"]]],"meta":{"line":100,"file":"Role.js","path":"src/structures"}},{"name":"mentionable","description":"Whether or not the role can be mentioned by anyone","type":[[["boolean"]]],"meta":{"line":108,"file":"Role.js","path":"src/structures"}},{"name":"tags","description":"The tags this role has","nullable":true,"type":[[["Object"]]],"props":[{"name":"botId","description":"The id of the bot this role belongs to","optional":true,"type":[[["Snowflake"]]]},{"name":"integrationId","description":"The id of the integration this role belongs to","optional":true,"type":[[["Snowflake"]],[["string"]]]},{"name":"premiumSubscriberRole","description":"Whether this is the guild's premium subscription role","optional":true,"type":[[["true"]]]},{"name":"subscriptionListingId","description":"The id of this role's subscription SKU and listing","optional":true,"type":[[["Snowflake"]]]},{"name":"availableForPurchase","description":"Whether this role is available for purchase","optional":true,"type":[[["true"]]]},{"name":"guildConnections","description":"Whether this role is a guild's linked role","optional":true,"type":[[["true"]]]}],"meta":{"line":125,"file":"Role.js","path":"src/structures"}},{"name":"flags","description":"The flags of this role","type":[[["Readonly","<"],["RoleFlags",">"]]],"meta":{"line":152,"file":"Role.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the role was created at","readonly":true,"type":[[["number"]]],"meta":{"line":163,"file":"Role.js","path":"src/structures"}},{"name":"createdAt","description":"The time the role was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":172,"file":"Role.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the role has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":181,"file":"Role.js","path":"src/structures"}},{"name":"hexColor","description":"The hexadecimal version of the role color, with a leading hashtag","readonly":true,"type":[[["string"]]],"meta":{"line":211,"file":"Role.js","path":"src/structures"}},{"name":"members","description":"The cached guild members that have this role","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":220,"file":"Role.js","path":"src/structures"}},{"name":"editable","description":"Whether the role is editable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":229,"file":"Role.js","path":"src/structures"}},{"name":"position","description":"The position of the role in the role manager","readonly":true,"type":[[["number"]]],"meta":{"line":241,"file":"Role.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"comparePositionTo","description":"Compares this role's position to another role's.","examples":["// Compare the position of a role to another\nconst roleCompare = role.comparePositionTo(otherRole);\nif (roleCompare >= 1) console.log(`${role.name} is higher than ${otherRole.name}`);"],"params":[{"name":"role","description":"Role to compare to this one","type":[[["RoleResolvable"]]]}],"returns":{"types":[[["number"]]],"description":"Negative number if this role's position is lower (other role's is higher),\npositive number if this one is higher (other's is lower), 0 if equal"},"meta":{"line":261,"file":"Role.js","path":"src/structures"}},{"name":"edit","description":"Edits the role.","examples":["// Edit a role\nrole.edit({ name: 'new role' })\n .then(updated => console.log(`Edited role name to ${updated.name}`))\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the role","type":[[["RoleData"]]]},{"name":"reason","description":"Reason for editing this role","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":291,"file":"Role.js","path":"src/structures"}},{"name":"permissionsIn","description":"Returns `channel.permissionsFor(role)`. Returns permissions for a role in a guild channel,\ntaking into account permission overwrites.","params":[{"name":"channel","description":"The guild channel to use as context","type":[[["GuildChannel"]],[["Snowflake"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":302,"file":"Role.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the role.","examples":["// Set the name of the role\nrole.setName('new role')\n .then(updated => console.log(`Updated role name to ${updated.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name of the role","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the role's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":319,"file":"Role.js","path":"src/structures"}},{"name":"setColor","description":"Sets a new color for the role.","examples":["// Set the color of a role\nrole.setColor('#FF0000')\n .then(updated => console.log(`Set color of role to ${updated.color}`))\n .catch(console.error);"],"params":[{"name":"color","description":"The color of the role","type":[[["ColorResolvable"]]]},{"name":"reason","description":"Reason for changing the role's color","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":334,"file":"Role.js","path":"src/structures"}},{"name":"setHoist","description":"Sets whether or not the role should be hoisted.","examples":["// Set the hoist of the role\nrole.setHoist(true)\n .then(updated => console.log(`Role hoisted: ${updated.hoist}`))\n .catch(console.error);"],"params":[{"name":"hoist","description":"Whether or not to hoist the role","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for setting whether or not the role should be hoisted","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":349,"file":"Role.js","path":"src/structures"}},{"name":"setPermissions","description":"Sets the permissions of the role.","examples":["// Set the permissions of the role\nrole.setPermissions([Permissions.FLAGS.KICK_MEMBERS, Permissions.FLAGS.BAN_MEMBERS])\n .then(updated => console.log(`Updated permissions to ${updated.permissions.bitfield}`))\n .catch(console.error);","// Remove all permissions from a role\nrole.setPermissions(0n)\n .then(updated => console.log(`Updated permissions to ${updated.permissions.bitfield}`))\n .catch(console.error);"],"params":[{"name":"permissions","description":"The permissions of the role","type":[[["PermissionResolvable"]]]},{"name":"reason","description":"Reason for changing the role's permissions","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":369,"file":"Role.js","path":"src/structures"}},{"name":"setMentionable","description":"Sets whether this role is mentionable.","examples":["// Make the role mentionable\nrole.setMentionable(true)\n .then(updated => console.log(`Role updated ${updated.name}`))\n .catch(console.error);"],"params":[{"name":"mentionable","description":"Whether this role should be mentionable","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for setting whether or not this role should be mentionable","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":384,"file":"Role.js","path":"src/structures"}},{"name":"setIcon","description":"Sets a new icon for the role.","params":[{"name":"icon","description":"The icon for the role\nThe `EmojiResolvable` should belong to the same guild as the role.\nIf not, pass the emoji's URL directly","nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]],[["EmojiResolvable"]]]},{"name":"reason","description":"Reason for changing the role's icon","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":396,"file":"Role.js","path":"src/structures"}},{"name":"setUnicodeEmoji","description":"Sets a new unicode emoji for the role.","examples":["// Set a new unicode emoji for the role\nrole.setUnicodeEmoji('🤖')\n .then(updated => console.log(`Set unicode emoji for the role to ${updated.unicodeEmoji}`))\n .catch(console.error);"],"params":[{"name":"unicodeEmoji","description":"The new unicode emoji for the role","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the role's unicode emoji","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":411,"file":"Role.js","path":"src/structures"}},{"name":"setPosition","description":"Sets the new position of the role.","examples":["// Set the position of the role\nrole.setPosition(1)\n .then(updated => console.log(`Role position: ${updated.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the role","type":[[["number"]]]},{"name":"options","description":"Options for setting the position","optional":true,"type":[[["SetRolePositionOptions"]]]}],"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":433,"file":"Role.js","path":"src/structures"}},{"name":"delete","description":"Deletes the role.","examples":["// Delete a role\nrole.delete('The role needed to go')\n .then(deleted => console.log(`Deleted role ${deleted.name}`))\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this role","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Role",">"]]],"meta":{"line":447,"file":"Role.js","path":"src/structures"}},{"name":"iconURL","description":"A link to the role's icon","params":[{"name":"options","description":"Options for the image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":457,"file":"Role.js","path":"src/structures"}},{"name":"equals","description":"Whether this role equals another role. It compares all properties, so for most operations\nit is advisable to just compare `role.id === role2.id` as it is much faster and is often\nwhat most users need.","params":[{"name":"role","description":"Role to compare with","type":[[["Role"]]]}],"returns":[[["boolean"]]],"meta":{"line":469,"file":"Role.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the role's mention instead of the Role object.","examples":["// Logs: Role: <@&123456789012345678>\nconsole.log(`Role: ${role}`);"],"returns":[[["string"]]],"meta":{"line":491,"file":"Role.js","path":"src/structures"}},{"name":"comparePositions","description":"Compares the positions of two roles.","scope":"static","deprecated":"Use {@link RoleManager#comparePositions} instead.","params":[{"name":"role1","description":"First role to compare","type":[[["Role"]]]},{"name":"role2","description":"Second role to compare","type":[[["Role"]]]}],"returns":{"types":[[["number"]]],"description":"Negative number if the first role's position is lower (second role's is higher),\npositive number if the first's is higher (second's is lower), 0 if equal"},"meta":{"line":511,"file":"Role.js","path":"src/structures"}}],"meta":{"line":24,"file":"Role.js","path":"src/structures"}},{"name":"SelectMenuInteraction","description":"Represents any select menu interaction.","extends":[[["MessageComponentInteraction"]]],"props":[{"name":"values","description":"The values selected, if the component which was interacted with was a select menu","type":[[["Array","<"],["string",">"]]],"meta":{"line":19,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":17,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"message","description":"The message to which the component was attached","type":[[["Message"]],[["APIMessage"]]],"meta":{"line":27,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"customId","description":"The custom id of the component which was interacted with","type":[[["string"]]],"meta":{"line":33,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"componentType","description":"The type of component which was interacted with","type":[[["string"]]],"meta":{"line":39,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":45,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":57,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":63,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"component","description":"The component which was interacted with","readonly":true,"type":[[["MessageActionRowComponent"]],[["APIMessageActionRowComponent"]]],"meta":{"line":78,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"MessageComponentInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"MessageComponentInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"MessageComponentInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"MessageComponentInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"MessageComponentInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"MessageComponentInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","inherits":"MessageComponentInteraction#deferUpdate","inherited":true,"implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","inherits":"MessageComponentInteraction#update","inherited":true,"implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"MessageComponentInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"MessageComponentInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":11,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"ChannelSelectInteraction","description":"Represents a CHANNEL_SELECT interaction.","extends":[[["SelectMenuInteraction"]]],"props":[{"name":"channels","description":"Collection of the selected channels","type":[[["Collection","<"],["Snowflake",", ("],["Channel","|"],["APIChannel",")>"]]],"meta":{"line":39,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"values","description":"The values selected, if the component which was interacted with was a select menu","type":[[["Array","<"],["string",">"]]],"meta":{"line":19,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":17,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"message","description":"The message to which the component was attached","type":[[["Message"]],[["APIMessage"]]],"meta":{"line":27,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"customId","description":"The custom id of the component which was interacted with","type":[[["string"]]],"meta":{"line":33,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"componentType","description":"The type of component which was interacted with","type":[[["string"]]],"meta":{"line":39,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":45,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":57,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":63,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"component","description":"The component which was interacted with","readonly":true,"type":[[["MessageActionRowComponent"]],[["APIMessageActionRowComponent"]]],"meta":{"line":78,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"MessageComponentInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"MessageComponentInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"MessageComponentInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"MessageComponentInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"MessageComponentInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"MessageComponentInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","inherits":"MessageComponentInteraction#deferUpdate","inherited":true,"implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","inherits":"MessageComponentInteraction#update","inherited":true,"implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"MessageComponentInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"MessageComponentInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":29,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"RoleSelectInteraction","description":"Represents a ROLE_SELECT interaction.","extends":[[["SelectMenuInteraction"]]],"props":[{"name":"roles","description":"Collection of the selected roles","type":[[["Collection","<"],["Snowflake",", ("],["Role","|"],["APIRole",")>"]]],"meta":{"line":62,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"values","description":"The values selected, if the component which was interacted with was a select menu","type":[[["Array","<"],["string",">"]]],"meta":{"line":19,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":17,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"message","description":"The message to which the component was attached","type":[[["Message"]],[["APIMessage"]]],"meta":{"line":27,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"customId","description":"The custom id of the component which was interacted with","type":[[["string"]]],"meta":{"line":33,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"componentType","description":"The type of component which was interacted with","type":[[["string"]]],"meta":{"line":39,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":45,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":57,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":63,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"component","description":"The component which was interacted with","readonly":true,"type":[[["MessageActionRowComponent"]],[["APIMessageActionRowComponent"]]],"meta":{"line":78,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"MessageComponentInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"MessageComponentInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"MessageComponentInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"MessageComponentInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"MessageComponentInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"MessageComponentInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","inherits":"MessageComponentInteraction#deferUpdate","inherited":true,"implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","inherits":"MessageComponentInteraction#update","inherited":true,"implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"MessageComponentInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"MessageComponentInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":52,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"UserSelectInteraction","description":"Represents a USER_SELECT interaction.","extends":[[["SelectMenuInteraction"]]],"props":[{"name":"users","description":"Collection of the selected users","type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":85,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"members","description":"Collection of the selected members","type":[[["Collection","<"],["Snowflake",", ("],["GuildMember","|"],["APIGuildMember",")>"]]],"meta":{"line":95,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"values","description":"The values selected, if the component which was interacted with was a select menu","type":[[["Array","<"],["string",">"]]],"meta":{"line":19,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":17,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"message","description":"The message to which the component was attached","type":[[["Message"]],[["APIMessage"]]],"meta":{"line":27,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"customId","description":"The custom id of the component which was interacted with","type":[[["string"]]],"meta":{"line":33,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"componentType","description":"The type of component which was interacted with","type":[[["string"]]],"meta":{"line":39,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":45,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":57,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":63,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"component","description":"The component which was interacted with","readonly":true,"type":[[["MessageActionRowComponent"]],[["APIMessageActionRowComponent"]]],"meta":{"line":78,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"MessageComponentInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"MessageComponentInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"MessageComponentInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"MessageComponentInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"MessageComponentInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"MessageComponentInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","inherits":"MessageComponentInteraction#deferUpdate","inherited":true,"implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","inherits":"MessageComponentInteraction#update","inherited":true,"implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"MessageComponentInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"MessageComponentInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":75,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"MentionableSelectInteraction","description":"Represents a MENTIONABLE_SELECT interaction.","extends":[[["SelectMenuInteraction"]]],"props":[{"name":"channels","description":"Collection of the selected channels","type":[[["Collection","<"],["Snowflake",", ("],["Channel","|"],["APIChannel",")>"]]],"meta":{"line":125,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"members","description":"Collection of the selected members","type":[[["Collection","<"],["Snowflake",", ("],["GuildMember","|"],["APIGuildMember",")>"]]],"meta":{"line":136,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"roles","description":"Collection of the selected roles","type":[[["Collection","<"],["Snowflake",", ("],["Role","|"],["APIRole",")>"]]],"meta":{"line":152,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"users","description":"Collection of the selected users","type":[[["Collection","<"],["Snowflake",", "],["User",">"]]],"meta":{"line":163,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"values","description":"The values selected, if the component which was interacted with was a select menu","type":[[["Array","<"],["string",">"]]],"meta":{"line":19,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":17,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"message","description":"The message to which the component was attached","type":[[["Message"]],[["APIMessage"]]],"meta":{"line":27,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"customId","description":"The custom id of the component which was interacted with","type":[[["string"]]],"meta":{"line":33,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"componentType","description":"The type of component which was interacted with","type":[[["string"]]],"meta":{"line":39,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":45,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":51,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":57,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":63,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"component","description":"The component which was interacted with","readonly":true,"type":[[["MessageActionRowComponent"]],[["APIMessageActionRowComponent"]]],"meta":{"line":78,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"MessageComponentInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"MessageComponentInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"MessageComponentInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"MessageComponentInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"MessageComponentInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"MessageComponentInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","inherits":"MessageComponentInteraction#deferUpdate","inherited":true,"implements":["InteractionResponses#deferUpdate"],"examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","inherits":"MessageComponentInteraction#update","inherited":true,"implements":["InteractionResponses#update"],"examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"MessageComponentInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"MessageComponentInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":114,"file":"SelectMenuInteraction.js","path":"src/structures"}},{"name":"Session","description":"Represents a Client OAuth2 Application Team.","extends":[[["Base"]]],"props":[{"name":"id","description":"The session hash id","type":[[["string"]]],"meta":{"line":28,"file":"Session.js","path":"src/structures"}},{"name":"clientInfo","description":"The client info","type":[[["SessionClientInfo"]]],"meta":{"line":38,"file":"Session.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the client was last used at.","readonly":true,"type":[[["number"]]],"meta":{"line":47,"file":"Session.js","path":"src/structures"}},{"name":"createdAt","description":"The time the client was last used at.","readonly":true,"type":[[["Date"]]],"meta":{"line":56,"file":"Session.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"logout","description":"Logout the client (remote).","params":[{"name":"mfaCode","description":"MFA code (if 2FA is enabled)","type":[[["string"]],[["null"]]]}],"returns":[[["Promise","<"],["undefined",">"]]],"meta":{"line":65,"file":"Session.js","path":"src/structures"}}],"meta":{"line":16,"file":"Session.js","path":"src/structures"}},{"name":"StageChannel","description":"Represents a guild stage channel on Discord.","extends":[[["BaseGuildVoiceChannel"]]],"props":[{"name":"topic","description":"The topic of the stage channel","nullable":true,"type":[[["string"]]],"meta":{"line":18,"file":"StageChannel.js","path":"src/structures"}},{"name":"stageInstance","description":"The stage instance of this stage channel, if it exists","readonly":true,"nullable":true,"type":[[["StageInstance"]]],"meta":{"line":27,"file":"StageChannel.js","path":"src/structures"}},{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":23,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":29,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":35,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"bitrate","description":"The bitrate of this voice-based channel","type":[[["number"]]],"meta":{"line":48,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"rtcRegion","description":"The RTC region for this voice-based channel. This region is automatically selected if `null`.","nullable":true,"type":[[["string"]]],"meta":{"line":56,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"userLimit","description":"The maximum amount of users allowed in this channel.","type":[[["number"]]],"meta":{"line":64,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"videoQualityMode","description":"The camera video quality mode of the channel.","nullable":true,"type":[[["VideoQualityMode"]]],"meta":{"line":72,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in the channel, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":82,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for this channel in seconds","type":[[["number"]]],"meta":{"line":94,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"members","description":"The members in this voice-based channel","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":107,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"full","description":"Checks if the voice-based channel is full","readonly":true,"type":[[["boolean"]]],"meta":{"line":122,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"joinable","description":"Whether the channel is joinable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":131,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"createStageInstance","description":"Creates a stage instance associated with this stage channel.","params":[{"name":"options","description":"The options to create the stage instance","type":[[["StageInstanceCreateOptions"]]]}],"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":36,"file":"StageChannel.js","path":"src/structures"}},{"name":"setTopic","description":"Sets a new topic for the guild channel.","examples":["// Set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.error);"],"params":[{"name":"topic","description":"The new topic for the guild channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's topic","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":51,"file":"StageChannel.js","path":"src/structures"}},{"name":"createInvite","description":"Creates an invite to this guild channel.","inherits":"BaseGuildVoiceChannel#createInvite","inherited":true,"examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":155,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","inherits":"BaseGuildVoiceChannel#fetchInvites","inherited":true,"params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":165,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setBitrate","description":"Sets the bitrate of the channel.","inherits":"BaseGuildVoiceChannel#setBitrate","inherited":true,"examples":["// Set the bitrate of a voice channel\nvoiceChannel.setBitrate(48_000)\n .then(vc => console.log(`Set bitrate to ${vc.bitrate}bps for ${vc.name}`))\n .catch(console.error);"],"params":[{"name":"bitrate","description":"The new bitrate","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's bitrate","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":180,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setRTCRegion","description":"Sets the RTC region of the channel.","inherits":"BaseGuildVoiceChannel#setRTCRegion","inherited":true,"examples":["// Set the RTC region to sydney\nchannel.setRTCRegion('sydney');","// Remove a fixed region for this channel - let Discord decide automatically\nchannel.setRTCRegion(null, 'We want to let Discord decide.');"],"params":[{"name":"rtcRegion","description":"The new region of the channel. Set to `null` to remove a specific region for the channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"The reason for modifying this region.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["BaseGuildVoiceChannel",">"]]],"meta":{"line":196,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setUserLimit","description":"Sets the user limit of the channel.","inherits":"BaseGuildVoiceChannel#setUserLimit","inherited":true,"examples":["// Set the user limit of a voice channel\nvoiceChannel.setUserLimit(42)\n .then(vc => console.log(`Set user limit to ${vc.userLimit} for ${vc.name}`))\n .catch(console.error);"],"params":[{"name":"userLimit","description":"The new user limit","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the user limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":211,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setVideoQualityMode","description":"Sets the camera video quality mode of the channel.","inherits":"BaseGuildVoiceChannel#setVideoQualityMode","inherited":true,"params":[{"name":"videoQualityMode","description":"The new camera video quality mode.","type":[[["VideoQualityMode"]],[["number"]]]},{"name":"reason","description":"Reason for changing the camera video quality mode.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":221,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","inherits":"BaseGuildVoiceChannel#send","inherited":true,"implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","inherits":"BaseGuildVoiceChannel#sendTyping","inherited":true,"implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","inherits":"BaseGuildVoiceChannel#createMessageCollector","inherited":true,"implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","inherits":"BaseGuildVoiceChannel#awaitMessages","inherited":true,"implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","inherits":"BaseGuildVoiceChannel#createMessageComponentCollector","inherited":true,"implements":["TextBasedChannel#createMessageComponentCollector"],"examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseGuildVoiceChannel#awaitMessageComponent","inherited":true,"implements":["TextBasedChannel#awaitMessageComponent"],"examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"bulkDelete","description":"Bulk deletes given messages that are newer than two weeks.","inherits":"BaseGuildVoiceChannel#bulkDelete","inherited":true,"implements":["TextBasedChannel#bulkDelete"],"examples":["// Bulk delete messages\nchannel.bulkDelete(5)\n .then(messages => console.log(`Bulk deleted ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"messages","description":"Messages or number of messages to delete","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]],[["Array","<"],["MessageResolvable",">"]],[["number"]]]},{"name":"filterOld","description":"Filter messages to remove those which are older than two weeks automatically","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Collection","<"],["Snowflake",", ("],["Message","|"],["undefined",")>>"]]],"description":"Returns the deleted messages"},"meta":{"line":319,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","inherits":"BaseGuildVoiceChannel#fetchWebhooks","inherited":true,"implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":368,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","inherits":"BaseGuildVoiceChannel#createWebhook","inherited":true,"implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":393,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","inherits":"BaseGuildVoiceChannel#setRateLimitPerUser","inherited":true,"implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":403,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","inherits":"BaseGuildVoiceChannel#setNSFW","inherited":true,"implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":413,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":9,"file":"StageChannel.js","path":"src/structures"}},{"name":"StageInstance","description":"Represents a stage instance.","extends":[[["Base"]]],"props":[{"name":"id","description":"The stage instance's id","type":[[["Snowflake"]]],"meta":{"line":28,"file":"StageInstance.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild associated with the stage channel","type":[[["Snowflake"]]],"meta":{"line":39,"file":"StageInstance.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel associated with the stage channel","type":[[["Snowflake"]]],"meta":{"line":47,"file":"StageInstance.js","path":"src/structures"}},{"name":"topic","description":"The topic of the stage instance","type":[[["string"]]],"meta":{"line":55,"file":"StageInstance.js","path":"src/structures"}},{"name":"privacyLevel","description":"The privacy level of the stage instance","type":[[["PrivacyLevel"]]],"meta":{"line":63,"file":"StageInstance.js","path":"src/structures"}},{"name":"discoverableDisabled","description":"Whether or not stage discovery is disabled","nullable":true,"type":[[["boolean"]]],"meta":{"line":71,"file":"StageInstance.js","path":"src/structures"}},{"name":"guildScheduledEventId","description":"The associated guild scheduled event id of this stage instance","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":81,"file":"StageInstance.js","path":"src/structures"}},{"name":"channel","description":"The stage channel associated with this stage instance","readonly":true,"nullable":true,"type":[[["StageChannel"]]],"meta":{"line":92,"file":"StageInstance.js","path":"src/structures"}},{"name":"guildScheduledEvent","description":"The associated guild scheduled event of this stage instance","readonly":true,"nullable":true,"type":[[["GuildScheduledEvent"]]],"meta":{"line":101,"file":"StageInstance.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the stage instance has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":110,"file":"StageInstance.js","path":"src/structures"}},{"name":"guild","description":"The guild this stage instance belongs to","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":140,"file":"StageInstance.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp this stage instances was created at","readonly":true,"type":[[["number"]]],"meta":{"line":193,"file":"StageInstance.js","path":"src/structures"}},{"name":"createdAt","description":"The time this stage instance was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":202,"file":"StageInstance.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"edit","description":"Edits this stage instance.","examples":["// Edit a stage instance\nstageInstance.edit({ topic: 'new topic' })\n .then(stageInstance => console.log(stageInstance))\n .catch(console.error)"],"params":[{"name":"options","description":"The options to edit the stage instance","type":[[["StageInstanceEditOptions"]]]}],"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":154,"file":"StageInstance.js","path":"src/structures"}},{"name":"delete","description":"Deletes this stage instance.","examples":["// Delete a stage instance\nstageInstance.delete()\n .then(stageInstance => console.log(stageInstance))\n .catch(console.error);"],"async":true,"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":167,"file":"StageInstance.js","path":"src/structures"}},{"name":"setTopic","description":"Sets the topic of this stage instance.","examples":["// Set topic of a stage instance\nstageInstance.setTopic('new topic')\n .then(stageInstance => console.log(`Set the topic to: ${stageInstance.topic}`))\n .catch(console.error);"],"params":[{"name":"topic","description":"The topic for the stage instance","type":[[["string"]]]}],"returns":[[["Promise","<"],["StageInstance",">"]]],"meta":{"line":184,"file":"StageInstance.js","path":"src/structures"}}],"meta":{"line":20,"file":"StageInstance.js","path":"src/structures"}},{"name":"Sticker","description":"Represents a Sticker.","extends":[[["Base"]]],"props":[{"name":"id","description":"The sticker's id","type":[[["Snowflake"]]],"meta":{"line":33,"file":"Sticker.js","path":"src/structures"}},{"name":"description","description":"The description of the sticker","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Sticker.js","path":"src/structures"}},{"name":"type","description":"The type of the sticker","nullable":true,"type":[[["StickerType"]]],"meta":{"line":50,"file":"Sticker.js","path":"src/structures"}},{"name":"format","description":"The format of the sticker","type":[[["StickerFormatType"]]],"meta":{"line":60,"file":"Sticker.js","path":"src/structures"}},{"name":"name","description":"The name of the sticker","type":[[["string"]]],"meta":{"line":68,"file":"Sticker.js","path":"src/structures"}},{"name":"packId","description":"The id of the pack the sticker is from, for standard stickers","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"Sticker.js","path":"src/structures"}},{"name":"tags","description":"An array of tags for the sticker","nullable":true,"type":[[["Array","<"],["string",">"]]],"meta":{"line":86,"file":"Sticker.js","path":"src/structures"}},{"name":"available","description":"Whether or not the guild sticker is available","nullable":true,"type":[[["boolean"]]],"meta":{"line":96,"file":"Sticker.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild that owns this sticker","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":106,"file":"Sticker.js","path":"src/structures"}},{"name":"user","description":"The user that uploaded the guild sticker","nullable":true,"type":[[["User"]]],"meta":{"line":116,"file":"Sticker.js","path":"src/structures"}},{"name":"sortValue","description":"The standard sticker's sort order within its pack","nullable":true,"type":[[["number"]]],"meta":{"line":126,"file":"Sticker.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the sticker was created at","readonly":true,"type":[[["number"]]],"meta":{"line":137,"file":"Sticker.js","path":"src/structures"}},{"name":"createdAt","description":"The time the sticker was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":146,"file":"Sticker.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the sticker has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":155,"file":"Sticker.js","path":"src/structures"}},{"name":"partial","description":"Whether this sticker is partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":185,"file":"Sticker.js","path":"src/structures"}},{"name":"guild","description":"The guild that owns this sticker","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":194,"file":"Sticker.js","path":"src/structures"}},{"name":"url","description":"A link to the sticker\nIf the sticker's format is LOTTIE, it returns the URL of the Lottie JSON file.","type":[[["string"]]],"meta":{"line":203,"file":"Sticker.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"fetch","description":"Fetches this sticker.","async":true,"returns":[[["Promise","<"],["Sticker",">"]]],"meta":{"line":211,"file":"Sticker.js","path":"src/structures"}},{"name":"fetchPack","description":"Fetches the pack this sticker is part of from Discord, if this is a Nitro sticker.","async":true,"returns":[[["Promise",""]]],"meta":{"line":221,"file":"Sticker.js","path":"src/structures"}},{"name":"fetchUser","description":"Fetches the user who uploaded this sticker, if this is a guild sticker.","async":true,"returns":[[["Promise",""]]],"meta":{"line":229,"file":"Sticker.js","path":"src/structures"}},{"name":"edit","description":"Edits the sticker.","examples":["// Update the name of a sticker\nsticker.edit({ name: 'new name' })\n .then(s => console.log(`Updated the name of the sticker to ${s.name}`))\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the sticker","optional":true,"type":[[["GuildStickerEditData"]]]},{"name":"reason","description":"Reason for editing this sticker","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["Sticker",">"]]],"meta":{"line":254,"file":"Sticker.js","path":"src/structures"}},{"name":"delete","description":"Deletes the sticker.","examples":["// Delete a message\nsticker.delete()\n .then(s => console.log(`Deleted sticker ${s.name}`))\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this sticker","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Sticker",">"]]],"meta":{"line":268,"file":"Sticker.js","path":"src/structures"}},{"name":"equals","description":"Whether this sticker is the same as another one.","params":[{"name":"other","description":"The sticker to compare it to","type":[[["Sticker"]],[["APISticker"]]]}],"returns":[[["boolean"]]],"meta":{"line":278,"file":"Sticker.js","path":"src/structures"}}],"meta":{"line":21,"file":"Sticker.js","path":"src/structures"}},{"name":"StickerPack","description":"Represents a pack of standard stickers.","extends":[[["Base"]]],"props":[{"name":"id","description":"The Sticker pack's id","type":[[["Snowflake"]]],"meta":{"line":19,"file":"StickerPack.js","path":"src/structures"}},{"name":"stickers","description":"The stickers in the pack","type":[[["Collection","<"],["Snowflake",", "],["Sticker",">"]]],"meta":{"line":25,"file":"StickerPack.js","path":"src/structures"}},{"name":"name","description":"The name of the sticker pack","type":[[["string"]]],"meta":{"line":31,"file":"StickerPack.js","path":"src/structures"}},{"name":"skuId","description":"The id of the pack's SKU","type":[[["Snowflake"]]],"meta":{"line":37,"file":"StickerPack.js","path":"src/structures"}},{"name":"coverStickerId","description":"The id of a sticker in the pack which is shown as the pack's icon","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":43,"file":"StickerPack.js","path":"src/structures"}},{"name":"description","description":"The description of the sticker pack","type":[[["string"]]],"meta":{"line":49,"file":"StickerPack.js","path":"src/structures"}},{"name":"bannerId","description":"The id of the sticker pack's banner image","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":55,"file":"StickerPack.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the sticker was created at","readonly":true,"type":[[["number"]]],"meta":{"line":63,"file":"StickerPack.js","path":"src/structures"}},{"name":"createdAt","description":"The time the sticker was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":72,"file":"StickerPack.js","path":"src/structures"}},{"name":"coverSticker","description":"The sticker which is shown as the pack's icon","readonly":true,"nullable":true,"type":[[["Sticker"]]],"meta":{"line":81,"file":"StickerPack.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"bannerURL","description":"The URL to this sticker pack's banner.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":90,"file":"StickerPack.js","path":"src/structures"}}],"meta":{"line":12,"file":"StickerPack.js","path":"src/structures"}},{"name":"StoreChannel","description":"Represents a guild store channel on Discord.\nStore channels have been removed from Discord. See\n[Self-serve Game Selling Deprecation](https://support-dev.discord.com/hc/en-us/articles/6309018858647)\nfor more information.","extends":[[["GuildChannel"]]],"props":[{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":20,"file":"StoreChannel.js","path":"src/structures"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":274,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"createInvite","description":"Creates an invite to this guild channel.","examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":41,"file":"StoreChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":51,"file":"StoreChannel.js","path":"src/structures"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":12,"file":"StoreChannel.js","path":"src/structures"}},{"name":"Team","description":"Represents a Client OAuth2 Application Team.","extends":[[["Base"]]],"props":[{"name":"id","description":"The Team's id","type":[[["Snowflake"]]],"meta":{"line":25,"file":"Team.js","path":"src/structures"}},{"name":"name","description":"The name of the Team","type":[[["string"]]],"meta":{"line":32,"file":"Team.js","path":"src/structures"}},{"name":"icon","description":"The Team's icon hash","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"Team.js","path":"src/structures"}},{"name":"ownerId","description":"The Team's owner id","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":50,"file":"Team.js","path":"src/structures"}},{"name":"members","description":"The Team's members","type":[[["Collection","<"],["Snowflake",", "],["TeamMember",">"]]],"meta":{"line":58,"file":"Team.js","path":"src/structures"}},{"name":"owner","description":"The owner of this team","readonly":true,"nullable":true,"type":[[["TeamMember"]]],"meta":{"line":71,"file":"Team.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the team was created at","readonly":true,"type":[[["number"]]],"meta":{"line":80,"file":"Team.js","path":"src/structures"}},{"name":"createdAt","description":"The time the team was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":89,"file":"Team.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"iconURL","description":"A link to the team's icon.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":98,"file":"Team.js","path":"src/structures"}},{"name":"inviteMember","description":"Invite a team member to the team","params":[{"name":"user","description":"The user to invite to the team","type":[[["User"]]]},{"name":"MFACode","description":"The mfa code","type":[[["number"]]]}],"async":true,"returns":[[["Promise","<"],["TeamMember",">"]]],"meta":{"line":109,"file":"Team.js","path":"src/structures"}},{"name":"removeMember","description":"Remove a member from the team","params":[{"name":"userID","description":"The ID of the user you want to remove","type":[[["Snowflake"]]]}],"async":true,"returns":[[["boolean"]]],"meta":{"line":133,"file":"Team.js","path":"src/structures"}},{"name":"delete","description":"Delete this team","params":[{"name":"MFACode","description":"The 2fa code","type":[[["number"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":143,"file":"Team.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the Team's name instead of the\nTeam object.","examples":["// Logs: Team name: My Team\nconsole.log(`Team name: ${team}`);"],"returns":[[["string"]]],"meta":{"line":158,"file":"Team.js","path":"src/structures"}}],"meta":{"line":14,"file":"Team.js","path":"src/structures"}},{"name":"TeamMember","description":"Represents a Client OAuth2 Application Team Member.","extends":[[["Base"]]],"props":[{"name":"team","description":"The Team this member is part of","type":[[["Team"]]],"meta":{"line":18,"file":"TeamMember.js","path":"src/structures"}},{"name":"permissions","description":"The permissions this Team Member has with regard to the team","type":[[["Array","<"],["string",">"]]],"meta":{"line":29,"file":"TeamMember.js","path":"src/structures"}},{"name":"membershipState","description":"The permissions this Team Member has with regard to the team","type":[[["MembershipState"]]],"meta":{"line":37,"file":"TeamMember.js","path":"src/structures"}},{"name":"user","description":"The user for this Team Member","type":[[["User"]]],"meta":{"line":45,"file":"TeamMember.js","path":"src/structures"}},{"name":"id","description":"The Team Member's id","readonly":true,"type":[[["Snowflake"]]],"meta":{"line":54,"file":"TeamMember.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"toString","description":"When concatenated with a string, this automatically returns the team member's mention instead of the\nTeamMember object.","examples":["// Logs: Team Member's mention: <@123456789012345678>\nconsole.log(`Team Member's mention: ${teamMember}`);"],"returns":[[["string"]]],"meta":{"line":66,"file":"TeamMember.js","path":"src/structures"}}],"meta":{"line":10,"file":"TeamMember.js","path":"src/structures"}},{"name":"TextChannel","description":"Represents a guild text channel on Discord.","extends":[[["BaseGuildTextChannel"]]],"props":[{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for this channel in seconds","type":[[["number"]]],"meta":{"line":18,"file":"TextChannel.js","path":"src/structures"}},{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":22,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":28,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"threads","description":"A manager of the threads belonging to this channel","type":[[["GuildTextThreadManager"]]],"meta":{"line":34,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":40,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"topic","description":"The topic of the text channel","nullable":true,"type":[[["string"]]],"meta":{"line":53,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in the channel, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":65,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastPinTimestamp","description":"The timestamp when the last pinned message was pinned, if there was one","nullable":true,"type":[[["number"]]],"meta":{"line":73,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"defaultAutoArchiveDuration","description":"The default auto archive duration for newly created threads in this channel","nullable":true,"type":[[["number"]]],"meta":{"line":81,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"defaultThreadRateLimitPerUser","description":"The initial rate limit per user (slowmode) to set on newly created threads in a channel.","nullable":true,"type":[[["number"]]],"meta":{"line":89,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinAt","description":"The date when the last pinned message was pinned, if there was one","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":68,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"members","description":"A collection of cached members of this channel, mapped by their ids.\nMembers that can view this channel, if the channel is text-based.\nMembers in the channel, if the channel is voice-based.","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":274,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["TextChannel",">"]]],"meta":{"line":28,"file":"TextChannel.js","path":"src/structures"}},{"name":"setDefaultAutoArchiveDuration","description":"Sets the default auto archive duration for all newly created threads in this channel.","inherits":"BaseGuildTextChannel#setDefaultAutoArchiveDuration","inherited":true,"params":[{"name":"defaultAutoArchiveDuration","description":"The new default auto archive duration","type":[[["ThreadAutoArchiveDuration"]]]},{"name":"reason","description":"Reason for changing the channel's default auto archive duration","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["TextChannel",">"]]],"meta":{"line":105,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"setType","description":"Sets the type of this channel (only conversion between text and news is supported)","inherits":"BaseGuildTextChannel#setType","inherited":true,"params":[{"name":"type","description":"The new channel type","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the channel's type","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":115,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"setTopic","description":"Sets a new topic for the guild channel.","inherits":"BaseGuildTextChannel#setTopic","inherited":true,"examples":["// Set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.error);"],"params":[{"name":"topic","description":"The new topic for the guild channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's topic","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":130,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"createInvite","description":"Creates an invite to this guild channel.","inherits":"BaseGuildTextChannel#createInvite","inherited":true,"examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":168,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","inherits":"BaseGuildTextChannel#fetchInvites","inherited":true,"params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":178,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","inherits":"BaseGuildTextChannel#send","inherited":true,"implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","inherits":"BaseGuildTextChannel#sendTyping","inherited":true,"implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","inherits":"BaseGuildTextChannel#createMessageCollector","inherited":true,"implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","inherits":"BaseGuildTextChannel#awaitMessages","inherited":true,"implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","inherits":"BaseGuildTextChannel#createMessageComponentCollector","inherited":true,"implements":["TextBasedChannel#createMessageComponentCollector"],"examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseGuildTextChannel#awaitMessageComponent","inherited":true,"implements":["TextBasedChannel#awaitMessageComponent"],"examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"bulkDelete","description":"Bulk deletes given messages that are newer than two weeks.","inherits":"BaseGuildTextChannel#bulkDelete","inherited":true,"implements":["TextBasedChannel#bulkDelete"],"examples":["// Bulk delete messages\nchannel.bulkDelete(5)\n .then(messages => console.log(`Bulk deleted ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"messages","description":"Messages or number of messages to delete","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]],[["Array","<"],["MessageResolvable",">"]],[["number"]]]},{"name":"filterOld","description":"Filter messages to remove those which are older than two weeks automatically","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Collection","<"],["Snowflake",", ("],["Message","|"],["undefined",")>>"]]],"description":"Returns the deleted messages"},"meta":{"line":319,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","inherits":"BaseGuildTextChannel#fetchWebhooks","inherited":true,"implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":368,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","inherits":"BaseGuildTextChannel#createWebhook","inherited":true,"implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":393,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","inherits":"BaseGuildTextChannel#setNSFW","inherited":true,"implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":413,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"searchInteraction","description":"Search Slash Command (return raw data)","inherits":"BaseGuildTextChannel#searchInteraction","inherited":true,"implements":["TextBasedChannel#searchInteraction"],"params":[{"name":"applicationId","description":"Application ID","type":[[["Snowflake"]]]},{"name":"type","description":"Command Type","default":"CHAT_INPUT","nullable":true,"type":[[["ApplicationCommandType"]]]}],"returns":[[["Object"]]],"meta":{"line":423,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendSlash","description":"Send Slash to this channel","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/SlashCommand.md}"],"inherits":"BaseGuildTextChannel#sendSlash","inherited":true,"implements":["TextBasedChannel#sendSlash"],"examples":["// Send a basic slash\nchannel.sendSlash('botid', 'ping')\n .then(console.log)\n .catch(console.error);","// Send a remote file\nchannel.sendSlash('botid', 'emoji upload', 'https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048', 'test')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"bot","description":"Bot user (BotID, not applicationID)","type":[[["UserResolvable"]]]},{"name":"commandString","description":"Command name (and sub / group formats)","type":[[["string"]]]},{"name":"args","description":"Command arguments","variable":true,"type":[[["any"]],[["Array","<"],["any",">"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":463,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":9,"file":"TextChannel.js","path":"src/structures"}},{"name":"TextInputComponent","description":"Represents a text input component in a modal","extends":[[["BaseMessageComponent"]]],"construct":{"name":"TextInputComponent","params":[{"name":"data","description":"TextInputComponent to clone or raw data","optional":true,"default":"{}","type":[[["TextInputComponent"]],[["TextInputComponentOptions"]]]}]},"props":[{"name":"customId","description":"A unique string to be sent in the interaction when submitted","nullable":true,"type":[[["string"]]],"meta":{"line":40,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"label","description":"The text to be displayed above this text input component","nullable":true,"type":[[["string"]]],"meta":{"line":46,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"maxLength","description":"Maximum length of text that can be entered","nullable":true,"type":[[["number"]]],"meta":{"line":52,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"minLength","description":"Minimum length of text required to be entered","nullable":true,"type":[[["string"]]],"meta":{"line":58,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"placeholder","description":"Custom placeholder text to display when no text is entered","nullable":true,"type":[[["string"]]],"meta":{"line":64,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"required","description":"Whether or not this text input component is required","nullable":true,"type":[[["boolean"]]],"meta":{"line":70,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"style","description":"The style of this text input component","nullable":true,"type":[[["TextInputStyle"]]],"meta":{"line":76,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"value","description":"Value of this text input component","nullable":true,"type":[[["string"]]],"meta":{"line":82,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"type","description":"The type of this component","nullable":true,"type":[[["MessageComponentType"]]],"meta":{"line":52,"file":"BaseMessageComponent.js","path":"src/structures"}}],"methods":[{"name":"setCustomId","description":"Sets the custom id of this text input component","params":[{"name":"customId","description":"A unique string to be sent in the interaction when submitted","type":[[["string"]]]}],"returns":[[["TextInputComponent"]]],"meta":{"line":90,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"setLabel","description":"Sets the label of this text input component","params":[{"name":"label","description":"The text to be displayed above this text input component","type":[[["string"]]]}],"returns":[[["TextInputComponent"]]],"meta":{"line":100,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"setRequired","description":"Sets the text input component to be required for modal submission","params":[{"name":"required","description":"Whether this text input component is required","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["TextInputComponent"]]],"meta":{"line":110,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"setMaxLength","description":"Sets the maximum length of text input required in this text input component","params":[{"name":"maxLength","description":"Maximum length of text to be required","type":[[["number"]]]}],"returns":[[["TextInputComponent"]]],"meta":{"line":120,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"setMinLength","description":"Sets the minimum length of text input required in this text input component","params":[{"name":"minLength","description":"Minimum length of text to be required","type":[[["number"]]]}],"returns":[[["TextInputComponent"]]],"meta":{"line":130,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"setPlaceholder","description":"Sets the placeholder of this text input component","params":[{"name":"placeholder","description":"Custom placeholder text to display when no text is entered","type":[[["string"]]]}],"returns":[[["TextInputComponent"]]],"meta":{"line":140,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"setStyle","description":"Sets the style of this text input component","params":[{"name":"style","description":"The style of this text input component","type":[[["TextInputStyleResolvable"]]]}],"returns":[[["TextInputComponent"]]],"meta":{"line":150,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"setValue","description":"Sets the value of this text input component","params":[{"name":"value","description":"Value of this text input component","type":[[["string"]]]}],"returns":[[["TextInputComponent"]]],"meta":{"line":160,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"toJSON","description":"Transforms the text input component into a plain object","returns":{"types":[[["APITextInput"]]],"description":"The raw data of this text input component"},"meta":{"line":169,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"resolveStyle","description":"Resolves the style of a text input component","scope":"static","access":"private","params":[{"name":"style","description":"The style to resolve","type":[[["TextInputStyleResolvable"]]]}],"returns":[[["TextInputStyle"]]],"meta":{"line":196,"file":"TextInputComponent.js","path":"src/structures"}}],"meta":{"line":13,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"ThreadChannel","description":"Represents a thread channel on Discord.","extends":[[["Channel"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"guild","description":"The guild the thread is in","type":[[["Guild"]]],"meta":{"line":26,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":32,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"messages","description":"A manager of the messages sent to this thread","type":[[["MessageManager"]]],"meta":{"line":38,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"members","description":"A manager of the members that are part of this thread","type":[[["ThreadMemberManager"]]],"meta":{"line":44,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":50,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"firstMessage","description":"First message in the thread","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the thread","type":[[["string"]]],"meta":{"line":71,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the parent channel of this thread","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":83,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"locked","description":"Whether the thread is locked","nullable":true,"type":[[["boolean"]]],"meta":{"line":93,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"invitable","description":"Whether members without `MANAGE_THREADS` can invite other members without `MANAGE_THREADS`\nAlways `null` in public threads","nullable":true,"type":[[["boolean"]]],"meta":{"line":100,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"archived","description":"Whether the thread is archived","nullable":true,"type":[[["boolean"]]],"meta":{"line":106,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"autoArchiveDuration","description":"The amount of time (in minutes) after which the thread will automatically archive in case of no recent activity","nullable":true,"type":[[["number"]]],"meta":{"line":112,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"archiveTimestamp","description":"The timestamp when the thread's archive status was last changed\nIf the thread was never archived or unarchived, this is the timestamp at which the thread was\ncreated","nullable":true,"type":[[["number"]]],"meta":{"line":120,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"ownerId","description":"The id of the member who created this thread","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":141,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in this thread, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":151,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"lastPinTimestamp","description":"The timestamp when the last pinned message was pinned, if there was one","nullable":true,"type":[[["number"]]],"meta":{"line":161,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for this thread in seconds","nullable":true,"type":[[["number"]]],"meta":{"line":171,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"messageCount","description":"Threads created before July 1, 2022 may have an inaccurate count.\nIf you need an approximate value higher than that, use `ThreadChannel#messages.cache.size`","nullable":true,"type":[[["number"]]],"meta":{"line":182,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"memberCount","description":"The approximate count of users in this thread\nThis stops counting at 50. If you need an approximate value higher than that, use\n`ThreadChannel#members.cache.size`","nullable":true,"type":[[["number"]]],"meta":{"line":194,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"totalMessageSent","description":"The number of messages ever sent in a thread, similar to {@link ThreadChannel#messageCount} except it\nwill not decrement whenever a message is deleted","nullable":true,"type":[[["number"]]],"meta":{"line":205,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"appliedTags","description":"The tags applied to this thread","type":[[["Array","<"],["Snowflake",">"]]],"meta":{"line":215,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp when this thread was created. This isn't available for threads\ncreated before 2022-01-09","readonly":true,"nullable":true,"type":[[["number"]]],"meta":{"line":230,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"guildMembers","description":"A collection of associated guild member objects of this thread's members","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":239,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"archivedAt","description":"The time at which this thread's archive status was last changed\nIf the thread was never archived or unarchived, this is the time at which the thread was created","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":249,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the thread was created at","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":259,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"parent","description":"The parent channel of this thread","readonly":true,"nullable":true,"type":[[["NewsChannel"]],[["TextChannel"]],[["ForumChannel"]]],"meta":{"line":268,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"joined","description":"Whether the client user is a member of the thread.","readonly":true,"type":[[["boolean"]]],"meta":{"line":498,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"editable","description":"Whether the thread is editable by the client user (name, archived, autoArchiveDuration)","readonly":true,"type":[[["boolean"]]],"meta":{"line":507,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"joinable","description":"Whether the thread is joinable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":518,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the thread is manageable by the client user, for deleting or editing rateLimitPerUser or locked.","readonly":true,"type":[[["boolean"]]],"meta":{"line":534,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the thread is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":551,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"sendable","description":"Whether the client user can send messages in this thread","readonly":true,"type":[[["boolean"]]],"meta":{"line":563,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"unarchivable","description":"Whether the thread is unarchivable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":582,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinAt","description":"The date when the last pinned message was pinned, if there was one","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":68,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"join","description":"Makes the client user join the thread.","async":true,"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":276,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"leave","description":"Makes the client user leave the thread.","async":true,"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":285,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this thread's parent channel, taking overwrites into\naccount.","params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":297,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"fetchOwner","description":"Fetches the owner of this thread. If the thread member object isn't needed,\nuse {@link ThreadChannel#ownerId} instead.","params":[{"name":"options","description":"The options for fetching the member","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise",""]]],"meta":{"line":307,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"fetchStarterMessage","description":"Fetches the message that started this thread, if any.\nThe `Promise` will reject if the original message in a forum post is deleted\nor when the original message in the parent channel is deleted.\nIf you just need the id of that message, use {@link ThreadChannel#id} instead.","params":[{"name":"options","description":"Additional options for this fetch","optional":true,"type":[[["BaseFetchOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["null",")>"]]],"meta":{"line":327,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits this thread.","examples":["// Edit a thread\nthread.edit({ name: 'new-thread' })\n .then(editedThread => console.log(editedThread))\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for this thread","type":[[["ThreadEditData"]]]},{"name":"reason","description":"Reason for editing this thread","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":358,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setArchived","description":"Sets whether the thread is archived.","examples":["// Archive the thread\nthread.setArchived(true)\n .then(newThread => console.log(`Thread is now ${newThread.archived ? 'archived' : 'active'}`))\n .catch(console.error);"],"params":[{"name":"archived","description":"Whether the thread is archived","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for archiving or unarchiving","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":390,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setAutoArchiveDuration","description":"Sets the duration after which the thread will automatically archive in case of no recent activity.","examples":["// Set the thread's auto archive time to 1 hour\nthread.setAutoArchiveDuration(60)\n .then(newThread => {\n console.log(`Thread will now archive after ${newThread.autoArchiveDuration} minutes of inactivity`);\n });\n .catch(console.error);"],"params":[{"name":"autoArchiveDuration","description":"The amount of time (in minutes) after which the thread\nshould automatically archive in case of no recent activity","type":[[["ThreadAutoArchiveDuration"]]]},{"name":"reason","description":"Reason for changing the auto archive duration","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":408,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setInvitable","description":"Sets whether members without the `MANAGE_THREADS` permission can invite other members without the\n`MANAGE_THREADS` permission to this thread.","params":[{"name":"invitable","description":"Whether non-moderators can invite non-moderators to this thread","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing invite","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":419,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setLocked","description":"Sets whether the thread can be **unarchived** by anyone with `SEND_MESSAGES` permission.\nWhen a thread is locked only members with `MANAGE_THREADS` can unarchive it.","examples":["// Set the thread to locked\nthread.setLocked(true)\n .then(newThread => console.log(`Thread is now ${newThread.locked ? 'locked' : 'unlocked'}`))\n .catch(console.error);"],"params":[{"name":"locked","description":"Whether the thread is locked","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for locking or unlocking the thread","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":436,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for this thread.","examples":["// Change the thread's name\nthread.setName('not_general')\n .then(newThread => console.log(`Thread's new name is ${newThread.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the thread","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the thread's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":451,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this thread.","implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the thread's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":461,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"pin","description":"Pins this thread from the forum channel.","params":[{"name":"reason","description":"Reason for pinning","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":470,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"unpin","description":"Unpins this thread from the forum channel.","params":[{"name":"reason","description":"Reason for unpinning","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":479,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"setAppliedTags","description":"Set the applied tags for this channel (only applicable to forum threads)","params":[{"name":"appliedTags","description":"The tags to set for this channel","type":[[["Array","<"],["Snowflake",">"]]]},{"name":"reason","description":"Reason for changing the thread's applied tags","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":489,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"isPrivate","description":"Whether this thread is a private thread","returns":[[["boolean"]]],"meta":{"line":590,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this thread.","examples":["// Delete the thread\nthread.delete('cleaning out old threads')\n .then(deletedThread => console.log(deletedThread))\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this thread","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["ThreadChannel",">"]]],"meta":{"line":604,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","implements":["TextBasedChannel#createMessageComponentCollector"],"examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","implements":["TextBasedChannel#awaitMessageComponent"],"examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"bulkDelete","description":"Bulk deletes given messages that are newer than two weeks.","implements":["TextBasedChannel#bulkDelete"],"examples":["// Bulk delete messages\nchannel.bulkDelete(5)\n .then(messages => console.log(`Bulk deleted ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"messages","description":"Messages or number of messages to delete","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]],[["Array","<"],["MessageResolvable",">"]],[["number"]]]},{"name":"filterOld","description":"Filter messages to remove those which are older than two weeks automatically","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Collection","<"],["Snowflake",", ("],["Message","|"],["undefined",")>>"]]],"description":"Returns the deleted messages"},"meta":{"line":319,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":18,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"ThreadMember","description":"Represents a Member for a Thread.","extends":[[["Base"]]],"props":[{"name":"thread","description":"The thread that this member is a part of","type":[[["ThreadChannel"]]],"meta":{"line":18,"file":"ThreadMember.js","path":"src/structures"}},{"name":"joinedTimestamp","description":"The timestamp the member last joined the thread at","nullable":true,"type":[[["number"]]],"meta":{"line":24,"file":"ThreadMember.js","path":"src/structures"}},{"name":"id","description":"The id of the thread member","type":[[["Snowflake"]]],"meta":{"line":30,"file":"ThreadMember.js","path":"src/structures"}},{"name":"flags","description":"The flags for this thread member","type":[[["ThreadMemberFlags"]]],"meta":{"line":43,"file":"ThreadMember.js","path":"src/structures"}},{"name":"member","description":"The guild member associated with this thread member.","access":"private","nullable":true,"type":[[["GuildMember"]]],"meta":{"line":52,"file":"ThreadMember.js","path":"src/structures"}},{"name":"guildMember","description":"The guild member associated with this thread member","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":63,"file":"ThreadMember.js","path":"src/structures"}},{"name":"joinedAt","description":"The last time this member joined the thread","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":72,"file":"ThreadMember.js","path":"src/structures"}},{"name":"user","description":"The user associated with this thread member","readonly":true,"nullable":true,"type":[[["User"]]],"meta":{"line":81,"file":"ThreadMember.js","path":"src/structures"}},{"name":"manageable","description":"Whether the client user can manage this thread member","readonly":true,"type":[[["boolean"]]],"meta":{"line":90,"file":"ThreadMember.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"remove","description":"Removes this member from the thread.","params":[{"name":"reason","description":"Reason for removing the member","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["ThreadMember"]]],"meta":{"line":99,"file":"ThreadMember.js","path":"src/structures"}}],"meta":{"line":10,"file":"ThreadMember.js","path":"src/structures"}},{"name":"Typing","description":"Represents a typing state for a user in a channel.","extends":[[["Base"]]],"props":[{"name":"channel","description":"The channel the status is from","type":[[["TextBasedChannels"]]],"meta":{"line":17,"file":"Typing.js","path":"src/structures"}},{"name":"user","description":"The user who is typing","type":[[["User"]]],"meta":{"line":23,"file":"Typing.js","path":"src/structures"}},{"name":"startedTimestamp","description":"The UNIX timestamp in milliseconds the user started typing at","type":[[["number"]]],"meta":{"line":34,"file":"Typing.js","path":"src/structures"}},{"name":"startedAt","description":"The time the user started typing at","readonly":true,"type":[[["Date"]]],"meta":{"line":51,"file":"Typing.js","path":"src/structures"}},{"name":"guild","description":"The guild the status is from","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":60,"file":"Typing.js","path":"src/structures"}},{"name":"member","description":"The member who is typing","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":69,"file":"Typing.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"inGuild","description":"Indicates whether the status is received from a guild.","returns":[[["boolean"]]],"meta":{"line":42,"file":"Typing.js","path":"src/structures"}}],"meta":{"line":9,"file":"Typing.js","path":"src/structures"}},{"name":"User","description":"Represents a user on Discord.","extends":[[["Base"]]],"implements":[[["TextBasedChannel"]]],"props":[{"name":"id","description":"The user's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"User.js","path":"src/structures"}},{"name":"connectedAccounts","description":"Accounts connected to this user\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["Array","<"],["ConnectionAccount",">"]]],"meta":{"line":49,"file":"User.js","path":"src/structures"}},{"name":"premiumSince","description":"Time that User has nitro (Unix Timestamp)\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["number"]]],"meta":{"line":55,"file":"User.js","path":"src/structures"}},{"name":"premiumGuildSince","description":"Time that User has nitro and boost server (Unix Timestamp)","nullable":true,"type":[[["number"]]],"meta":{"line":60,"file":"User.js","path":"src/structures"}},{"name":"bio","description":"About me (User)\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":66,"file":"User.js","path":"src/structures"}},{"name":"pronouns","description":"Pronouns (User)\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":72,"file":"User.js","path":"src/structures"}},{"name":"application","description":"[Bot] Application","nullable":true,"type":[[["ClientApplication"]]],"meta":{"line":78,"file":"User.js","path":"src/structures"}},{"name":"username","description":"The username of the user","nullable":true,"type":[[["string"]]],"meta":{"line":89,"file":"User.js","path":"src/structures"}},{"name":"globalName","description":"The global name of this user","nullable":true,"type":[[["string"]]],"meta":{"line":99,"file":"User.js","path":"src/structures"}},{"name":"bot","description":"Whether or not the user is a bot","nullable":true,"type":[[["boolean"]]],"meta":{"line":109,"file":"User.js","path":"src/structures"}},{"name":"discriminator","description":"The discriminator of this user\n`'0'`, or a 4-digit stringified number if they're using the legacy username system","nullable":true,"type":[[["string"]]],"meta":{"line":124,"file":"User.js","path":"src/structures"}},{"name":"avatar","description":"The user avatar's hash","nullable":true,"type":[[["string"]]],"meta":{"line":134,"file":"User.js","path":"src/structures"}},{"name":"banner","description":"The user banner's hash\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["string"]]],"meta":{"line":145,"file":"User.js","path":"src/structures"}},{"name":"accentColor","description":"The base 10 accent color of the user's banner\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["number"]]],"meta":{"line":156,"file":"User.js","path":"src/structures"}},{"name":"system","description":"Whether the user is an Official Discord System user (part of the urgent message system)","nullable":true,"type":[[["boolean"]]],"meta":{"line":166,"file":"User.js","path":"src/structures"}},{"name":"flags","description":"The flags for this user","nullable":true,"type":[[["UserFlags"]]],"meta":{"line":176,"file":"User.js","path":"src/structures"}},{"name":"botInGuildsCount","description":"Check how many guilds the bot is in (Probably only approximate) (application.fetch() first)","nullable":true,"type":[[["number"]]],"meta":{"line":184,"file":"User.js","path":"src/structures"}},{"name":"avatarDecoration","description":"The user avatar decoration's hash","nullable":true,"type":[[["string"]]],"meta":{"line":192,"file":"User.js","path":"src/structures"}},{"name":"mutualGuilds","description":"This user is on the same servers as Client User\nThe user must be force fetched for this property to be present or be updated","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["Guild",">"]]],"meta":{"line":204,"file":"User.js","path":"src/structures"}},{"name":"mutualFriends","description":"Get all mutual friends (Client -> User)","readonly":true,"type":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["User",">>"]]],"meta":{"line":213,"file":"User.js","path":"src/structures"}},{"name":"relationships","description":"Check relationship status (Client -> User)","readonly":true,"type":[[["RelationshipTypes"]]],"meta":{"line":231,"file":"User.js","path":"src/structures"}},{"name":"note","description":"Check note","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":241,"file":"User.js","path":"src/structures"}},{"name":"nickname","description":"Get friend nickname","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":250,"file":"User.js","path":"src/structures"}},{"name":"voice","description":"The voice state of this member","readonly":true,"type":[[["VoiceState"]]],"meta":{"line":259,"file":"User.js","path":"src/structures"}},{"name":"nitroType","description":"Nitro type of the user.","type":[[["NitroType"]]],"meta":{"line":292,"file":"User.js","path":"src/structures"}},{"name":"themeColors","description":"The user's theme colors (Profile theme) [Primary, Accent]\nThe user must be force fetched for this property to be present or be updated","nullable":true,"type":[[["Array","<"],["number",">"]]],"meta":{"line":302,"file":"User.js","path":"src/structures"}},{"name":"badges","description":"User badges (Boost, Slash, AutoMod, etc.)","nullable":true,"type":[[["Array","<"],["UserBadge",">"]]],"meta":{"line":336,"file":"User.js","path":"src/structures"}},{"name":"partial","description":"Whether this User is a partial","readonly":true,"type":[[["boolean"]]],"meta":{"line":430,"file":"User.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the user was created at","readonly":true,"type":[[["number"]]],"meta":{"line":439,"file":"User.js","path":"src/structures"}},{"name":"createdAt","description":"The time the user was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":448,"file":"User.js","path":"src/structures"}},{"name":"defaultAvatarURL","description":"A link to the user's default avatar","readonly":true,"type":[[["string"]]],"meta":{"line":477,"file":"User.js","path":"src/structures"}},{"name":"hexAccentColor","description":"The hexadecimal version of the user accent color, with a leading hash\nThe user must be force fetched for this property to be present","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":498,"file":"User.js","path":"src/structures"}},{"name":"hexThemeColor","description":"The hexadecimal version of the user theme color, with a leading hash [Primary, Accent]\nThe user must be force fetched for this property to be present or be updated","readonly":true,"nullable":true,"type":[[["Array","<"],["string",">"]]],"meta":{"line":541,"file":"User.js","path":"src/structures"}},{"name":"tag","description":"The tag of this user\nThis user's username, or their legacy tag (e.g. `hydrabolt#0001`)\nif they're using the legacy username system","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":552,"file":"User.js","path":"src/structures"}},{"name":"displayName","description":"The global name of this user, or their username if they don't have one","readonly":true,"nullable":true,"type":[[["string"]]],"meta":{"line":565,"file":"User.js","path":"src/structures"}},{"name":"dmChannel","description":"The DM between the client's user and this user","readonly":true,"nullable":true,"type":[[["DMChannel"]]],"meta":{"line":574,"file":"User.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"getProfile","description":"Get profile from Discord, if client is in a server with the target.","params":[{"name":"guildId","description":"The guild id to get the profile from","type":[[["Snowflake"]],[["null"]]]}],"async":true,"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":354,"file":"User.js","path":"src/structures"}},{"name":"setFriend","description":"Friends the user [If incoming request]","returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":376,"file":"User.js","path":"src/structures"}},{"name":"setNickname","description":"Changes the nickname of the friend","params":[{"name":"nickname","description":"The nickname to change","nullable":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":386,"file":"User.js","path":"src/structures"}},{"name":"sendFriendRequest","description":"Send Friend Request to the user","returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":395,"file":"User.js","path":"src/structures"}},{"name":"setBlock","description":"Blocks the user","returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":403,"file":"User.js","path":"src/structures"}},{"name":"unBlock","description":"Removes the user from your blocks list","returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":412,"file":"User.js","path":"src/structures"}},{"name":"unFriend","description":"Removes the user from your friends list","returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":421,"file":"User.js","path":"src/structures"}},{"name":"avatarURL","description":"A link to the user's avatar.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":457,"file":"User.js","path":"src/structures"}},{"name":"avatarDecorationURL","description":"A link to the user's avatar decoration.","params":[{"name":"options","description":"Options for the image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":467,"file":"User.js","path":"src/structures"}},{"name":"displayAvatarURL","description":"A link to the user's avatar if they have one.\nOtherwise a link to their default avatar will be returned.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":[[["string"]]],"meta":{"line":488,"file":"User.js","path":"src/structures"}},{"name":"bannerURL","description":"A link to the user's banner.\nThis method will throw an error if called before the user is force fetched.\nSee {@link User#banner} for more info","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["ImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":510,"file":"User.js","path":"src/structures"}},{"name":"ring","description":"Ring the user's phone / PC (call)","deprecated":true,"returns":[[["Promise","<"],["any",">"]]],"meta":{"line":523,"file":"User.js","path":"src/structures"}},{"name":"createDM","description":"Creates a DM channel between the client and the user.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":583,"file":"User.js","path":"src/structures"}},{"name":"deleteDM","description":"Deletes a DM channel (if one exists) between the client and the user. Resolves with the channel if successful.","returns":[[["Promise","<"],["DMChannel",">"]]],"meta":{"line":591,"file":"User.js","path":"src/structures"}},{"name":"equals","description":"Checks if the user is equal to another.\nIt compares id, username, discriminator, avatar, banner, accent color, and bot flags.\nIt is recommended to compare equality by using `user.id === user2.id` unless you want to compare all properties.","params":[{"name":"user","description":"User to compare with","type":[[["User"]]]}],"returns":[[["boolean"]]],"meta":{"line":602,"file":"User.js","path":"src/structures"}},{"name":"_equals","description":"Compares the user with an API user object","access":"private","params":[{"name":"user","description":"The API user object to compare","type":[[["APIUser"]]]}],"returns":[[["boolean"]]],"meta":{"line":623,"file":"User.js","path":"src/structures"}},{"name":"fetchFlags","description":"Fetches this user's flags.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["UserFlags",">"]]],"meta":{"line":642,"file":"User.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this user.","params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":651,"file":"User.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the user's mention instead of the User object.","examples":["// Logs: Hello from <@123456789012345678>!\nconsole.log(`Hello from ${user}!`);"],"returns":[[["string"]]],"meta":{"line":662,"file":"User.js","path":"src/structures"}},{"name":"setNote","description":"Set note to user","params":[{"name":"note","description":"Note to set","default":null,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["User",">"]]],"meta":{"line":687,"file":"User.js","path":"src/structures"}},{"name":"presenceFetch","description":"Get presence (~ v12)","async":true,"returns":[[["Promise","<("],["Presence","|"],["null",")>"]]],"meta":{"line":696,"file":"User.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this user.","implements":["TextBasedChannel#send"],"examples":["// Send a direct message\nuser.send('Hello!')\n .then(message => console.log(`Sent message: ${message.content} to ${user.tag}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":709,"file":"User.js","path":"src/structures"}}],"meta":{"line":19,"file":"User.js","path":"src/structures"}},{"name":"UserContextMenuInteraction","description":"Represents a user context menu interaction.","extends":[[["ContextMenuInteraction"]]],"props":[{"name":"targetUser","description":"The user this interaction was sent from","readonly":true,"type":[[["User"]]],"meta":{"line":15,"file":"UserContextMenuInteraction.js","path":"src/structures"}},{"name":"targetMember","description":"The member this interaction was sent from","readonly":true,"nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":24,"file":"UserContextMenuInteraction.js","path":"src/structures"}},{"name":"options","description":"The target of the interaction, parsed into options","type":[[["CommandInteractionOptionResolver"]]],"meta":{"line":18,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"targetId","description":"The id of the target of the interaction","type":[[["Snowflake"]]],"meta":{"line":28,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"targetType","description":"The type of the target of the interaction; either USER or MESSAGE","type":[[["ApplicationCommandType"]]],"meta":{"line":34,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"channelId","description":"The id of the channel this interaction was sent in","type":[[["Snowflake"]]],"meta":{"line":20,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandId","description":"The invoked application command's id","type":[[["Snowflake"]]],"meta":{"line":30,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"commandName","description":"The invoked application command's name","type":[[["string"]]],"meta":{"line":36,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferred","description":"Whether the reply to this interaction has been deferred","type":[[["boolean"]]],"meta":{"line":42,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"replied","description":"Whether this interaction has already been replied to","type":[[["boolean"]]],"meta":{"line":48,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"ephemeral","description":"Whether the reply to this interaction is ephemeral","nullable":true,"type":[[["boolean"]]],"meta":{"line":54,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"webhook","description":"An associated interaction webhook, can be used to further interact with this interaction","type":[[["InteractionWebhook"]]],"meta":{"line":60,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"command","description":"The invoked application command, if it was fetched before","nullable":true,"type":[[["ApplicationCommand"]]],"meta":{"line":67,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"type","description":"The interaction's type","type":[[["InteractionType"]]],"meta":{"line":20,"file":"Interaction.js","path":"src/structures"}},{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]],"meta":{"line":26,"file":"Interaction.js","path":"src/structures"}},{"name":"token","description":"The interaction's token","readonly":true,"type":[[["string"]]],"meta":{"line":28,"file":"Interaction.js","path":"src/structures"}},{"name":"applicationId","description":"The application's id","type":[[["Snowflake"]]],"meta":{"line":40,"file":"Interaction.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild this interaction was sent in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":52,"file":"Interaction.js","path":"src/structures"}},{"name":"user","description":"The user which sent this interaction","type":[[["User"]]],"meta":{"line":58,"file":"Interaction.js","path":"src/structures"}},{"name":"member","description":"If this interaction was sent in a guild, the member which sent it","nullable":true,"type":[[["GuildMember"]],[["APIGuildMember"]]],"meta":{"line":64,"file":"Interaction.js","path":"src/structures"}},{"name":"version","description":"The version","type":[[["number"]]],"meta":{"line":70,"file":"Interaction.js","path":"src/structures"}},{"name":"appPermissions","description":"Set of permissions the application or bot has within the channel the interaction was sent from","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":76,"file":"Interaction.js","path":"src/structures"}},{"name":"memberPermissions","description":"The permissions of the member, if one exists, in the channel this interaction was executed in","nullable":true,"type":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":82,"file":"Interaction.js","path":"src/structures"}},{"name":"locale","description":"The locale of the user who invoked this interaction","type":[[["Locale"]]],"meta":{"line":124,"file":"Interaction.js","path":"src/structures"}},{"name":"guildLocale","description":"The preferred locale from the guild this interaction was sent in","nullable":true,"type":[[["Locale"]]],"meta":{"line":130,"file":"Interaction.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the interaction was created at","readonly":true,"type":[[["number"]]],"meta":{"line":138,"file":"Interaction.js","path":"src/structures"}},{"name":"createdAt","description":"The time the interaction was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":147,"file":"Interaction.js","path":"src/structures"}},{"name":"channel","description":"The channel this interaction was sent in","readonly":true,"nullable":true,"type":[[["TextBasedChannels"]]],"meta":{"line":156,"file":"Interaction.js","path":"src/structures"}},{"name":"guild","description":"The guild this interaction was sent in","readonly":true,"nullable":true,"type":[[["Guild"]]],"meta":{"line":165,"file":"Interaction.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"resolveContextMenuOptions","description":"Resolves and transforms options received from the API for a context menu interaction.","access":"private","inherits":"ContextMenuInteraction#resolveContextMenuOptions","inherited":true,"params":[{"name":"data","description":"The interaction data","type":[[["APIApplicationCommandInteractionData"]]]}],"returns":[[["Array","<"],["CommandInteractionOption",">"]]],"meta":{"line":43,"file":"ContextMenuInteraction.js","path":"src/structures"}},{"name":"transformResolved","description":"Transforms the resolved received from the API.","access":"private","inherits":"BaseCommandInteraction#transformResolved","inherited":true,"params":[{"name":"resolved","description":"The received resolved objects","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionResolvedData"]]],"meta":{"line":89,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"transformOption","description":"Transforms an option received from the API.","access":"private","inherits":"BaseCommandInteraction#transformOption","inherited":true,"params":[{"name":"option","description":"The received option","type":[[["APIApplicationCommandOption"]]]},{"name":"resolved","description":"The resolved interaction data","type":[[["APIInteractionDataResolved"]]]}],"returns":[[["CommandInteractionOption"]]],"meta":{"line":162,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"deferReply","description":"Defers the reply to this interaction.","inherits":"BaseCommandInteraction#deferReply","inherited":true,"implements":["InteractionResponses#deferReply"],"examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","inherits":"BaseCommandInteraction#reply","inherited":true,"implements":["InteractionResponses#reply"],"examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"inherits":"BaseCommandInteraction#fetchReply","inherited":true,"implements":["InteractionResponses#fetchReply"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"inherits":"BaseCommandInteraction#editReply","inherited":true,"implements":["InteractionResponses#editReply"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"inherits":"BaseCommandInteraction#deleteReply","inherited":true,"implements":["InteractionResponses#deleteReply"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","inherits":"BaseCommandInteraction#followUp","inherited":true,"implements":["InteractionResponses#followUp"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","inherits":"BaseCommandInteraction#showModal","inherited":true,"implements":["InteractionResponses#showModal"],"params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseCommandInteraction#awaitModalSubmit","inherited":true,"implements":["InteractionResponses#awaitModalSubmit"],"examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"inGuild","description":"Indicates whether this interaction is received from a guild.","inherits":"Interaction#inGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":173,"file":"Interaction.js","path":"src/structures"}},{"name":"inCachedGuild","description":"Indicates whether or not this interaction is both cached and received from a guild.","inherits":"Interaction#inCachedGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":181,"file":"Interaction.js","path":"src/structures"}},{"name":"inRawGuild","description":"Indicates whether or not this interaction is received from an uncached guild.","inherits":"Interaction#inRawGuild","inherited":true,"returns":[[["boolean"]]],"meta":{"line":189,"file":"Interaction.js","path":"src/structures"}},{"name":"isApplicationCommand","description":"Indicates whether this interaction is a {@link BaseCommandInteraction}.","inherits":"Interaction#isApplicationCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":197,"file":"Interaction.js","path":"src/structures"}},{"name":"isCommand","description":"Indicates whether this interaction is a {@link CommandInteraction}.","inherits":"Interaction#isCommand","inherited":true,"returns":[[["boolean"]]],"meta":{"line":205,"file":"Interaction.js","path":"src/structures"}},{"name":"isContextMenu","description":"Indicates whether this interaction is a {@link ContextMenuInteraction}","inherits":"Interaction#isContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":213,"file":"Interaction.js","path":"src/structures"}},{"name":"isModalSubmit","description":"Indicates whether this interaction is a {@link ModalSubmitInteraction}","inherits":"Interaction#isModalSubmit","inherited":true,"returns":[[["boolean"]]],"meta":{"line":221,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserContextMenu","description":"Indicates whether this interaction is a {@link UserContextMenuInteraction}","inherits":"Interaction#isUserContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":229,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageContextMenu","description":"Indicates whether this interaction is a {@link MessageContextMenuInteraction}","inherits":"Interaction#isMessageContextMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":237,"file":"Interaction.js","path":"src/structures"}},{"name":"isAutocomplete","description":"Indicates whether this interaction is an {@link AutocompleteInteraction}","inherits":"Interaction#isAutocomplete","inherited":true,"returns":[[["boolean"]]],"meta":{"line":245,"file":"Interaction.js","path":"src/structures"}},{"name":"isMessageComponent","description":"Indicates whether this interaction is a {@link MessageComponentInteraction}.","inherits":"Interaction#isMessageComponent","inherited":true,"returns":[[["boolean"]]],"meta":{"line":253,"file":"Interaction.js","path":"src/structures"}},{"name":"isButton","description":"Indicates whether this interaction is a {@link ButtonInteraction}.","inherits":"Interaction#isButton","inherited":true,"returns":[[["boolean"]]],"meta":{"line":261,"file":"Interaction.js","path":"src/structures"}},{"name":"isAnySelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction}.","inherits":"Interaction#isAnySelectMenu","inherited":true,"returns":[[["boolean"]]],"meta":{"line":272,"file":"Interaction.js","path":"src/structures"}},{"name":"isSelectMenu","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isSelectMenu","inherited":true,"deprecated":"Use {@link Interaction#isStringSelect()} instead","returns":[[["boolean"]]],"meta":{"line":281,"file":"Interaction.js","path":"src/structures"}},{"name":"isStringSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.","inherits":"Interaction#isStringSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":289,"file":"Interaction.js","path":"src/structures"}},{"name":"isUserSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.","inherits":"Interaction#isUserSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":300,"file":"Interaction.js","path":"src/structures"}},{"name":"isRoleSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.","inherits":"Interaction#isRoleSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":311,"file":"Interaction.js","path":"src/structures"}},{"name":"isMentionableSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.","inherits":"Interaction#isMentionableSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":322,"file":"Interaction.js","path":"src/structures"}},{"name":"isChannelSelect","description":"Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.","inherits":"Interaction#isChannelSelect","inherited":true,"returns":[[["boolean"]]],"meta":{"line":333,"file":"Interaction.js","path":"src/structures"}},{"name":"isRepliable","description":"Indicates whether this interaction can be replied to.","inherits":"Interaction#isRepliable","inherited":true,"returns":[[["boolean"]]],"meta":{"line":344,"file":"Interaction.js","path":"src/structures"}}],"meta":{"line":9,"file":"UserContextMenuInteraction.js","path":"src/structures"}},{"name":"VoiceChannel","description":"Represents a guild voice channel on Discord.","extends":[[["BaseGuildVoiceChannel"]]],"props":[{"name":"editable","description":"Whether the channel is editable by the client user","readonly":true,"deprecated":"Use {@link VoiceChannel#manageable} instead","type":[[["boolean"]]],"meta":{"line":20,"file":"VoiceChannel.js","path":"src/structures"}},{"name":"joinable","description":"Whether the channel is joinable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":38,"file":"VoiceChannel.js","path":"src/structures"}},{"name":"speakable","description":"Checks if the client has permission to send audio to the voice channel","readonly":true,"type":[[["boolean"]]],"meta":{"line":49,"file":"VoiceChannel.js","path":"src/structures"}},{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":23,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"nsfw","description":"If the guild considers this channel NSFW","type":[[["boolean"]]],"meta":{"line":29,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":35,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"bitrate","description":"The bitrate of this voice-based channel","type":[[["number"]]],"meta":{"line":48,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"rtcRegion","description":"The RTC region for this voice-based channel. This region is automatically selected if `null`.","nullable":true,"type":[[["string"]]],"meta":{"line":56,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"userLimit","description":"The maximum amount of users allowed in this channel.","type":[[["number"]]],"meta":{"line":64,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"videoQualityMode","description":"The camera video quality mode of the channel.","nullable":true,"type":[[["VideoQualityMode"]]],"meta":{"line":72,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"lastMessageId","description":"The last message id sent in the channel, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":82,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for this channel in seconds","type":[[["number"]]],"meta":{"line":94,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"members","description":"The members in this voice-based channel","readonly":true,"type":[[["Collection","<"],["Snowflake",", "],["GuildMember",">"]]],"meta":{"line":107,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"full","description":"Checks if the voice-based channel is full","readonly":true,"type":[[["boolean"]]],"meta":{"line":122,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"guild","description":"The guild the channel is in","type":[[["Guild"]]],"meta":{"line":30,"file":"GuildChannel.js","path":"src/structures"}},{"name":"guildId","description":"The id of the guild the channel is in","type":[[["Snowflake"]]],"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionOverwrites","description":"A manager of permission overwrites that belong to this channel","type":[[["PermissionOverwriteManager"]]],"meta":{"line":43,"file":"GuildChannel.js","path":"src/structures"}},{"name":"name","description":"The name of the guild channel","type":[[["string"]]],"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rawPosition","description":"The raw position of the channel from Discord","type":[[["number"]]],"meta":{"line":64,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parentId","description":"The id of the category parent of this channel","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"}},{"name":"parent","description":"The category parent of this channel","readonly":true,"nullable":true,"type":[[["CategoryChannel"]]],"meta":{"line":98,"file":"GuildChannel.js","path":"src/structures"}},{"name":"permissionsLocked","description":"If the permissionOverwrites match the parent channel, null if no parent","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":107,"file":"GuildChannel.js","path":"src/structures"}},{"name":"position","description":"The position of the channel","readonly":true,"type":[[["number"]]],"meta":{"line":148,"file":"GuildChannel.js","path":"src/structures"}},{"name":"deletable","description":"Whether the channel is deletable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":416,"file":"GuildChannel.js","path":"src/structures"}},{"name":"manageable","description":"Whether the channel is manageable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":425,"file":"GuildChannel.js","path":"src/structures"}},{"name":"viewable","description":"Whether the channel is viewable by the client user","readonly":true,"type":[[["boolean"]]],"meta":{"line":445,"file":"GuildChannel.js","path":"src/structures"}},{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]],"meta":{"line":41,"file":"Channel.js","path":"src/structures"}},{"name":"id","description":"The channel's id","type":[[["Snowflake"]]],"meta":{"line":51,"file":"Channel.js","path":"src/structures"}},{"name":"flags","description":"The flags that are applied to the channel.\nThis is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.","nullable":true,"type":[[["Readonly","<"],["ChannelFlags",">"]]],"meta":{"line":59,"file":"Channel.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the channel was created at","readonly":true,"type":[[["number"]]],"meta":{"line":70,"file":"Channel.js","path":"src/structures"}},{"name":"createdAt","description":"The time the channel was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":79,"file":"Channel.js","path":"src/structures"}},{"name":"deleted","description":"Whether or not the structure has been deleted","deprecated":"This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091","type":[[["boolean"]]],"meta":{"line":88,"file":"Channel.js","path":"src/structures"}},{"name":"partial","description":"Whether this Channel is a partial\nThis is always false outside of DM channels.","readonly":true,"type":[[["boolean"]]],"meta":{"line":119,"file":"Channel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"createInvite","description":"Creates an invite to this guild channel.","inherits":"BaseGuildVoiceChannel#createInvite","inherited":true,"examples":["// Create an invite to a channel\nchannel.createInvite()\n .then(invite => console.log(`Created an invite with a code of ${invite.code}`))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for creating the invite","optional":true,"default":"{}","type":[[["CreateInviteOptions"]]]}],"returns":[[["Promise","<"],["Invite",">"]]],"meta":{"line":155,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"fetchInvites","description":"Fetches a collection of invites to this guild channel.\nResolves with a collection mapping invites by their codes.","inherits":"BaseGuildVoiceChannel#fetchInvites","inherited":true,"params":[{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Collection","<"],["string",", "],["Invite",">>"]]],"meta":{"line":165,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setBitrate","description":"Sets the bitrate of the channel.","inherits":"BaseGuildVoiceChannel#setBitrate","inherited":true,"examples":["// Set the bitrate of a voice channel\nvoiceChannel.setBitrate(48_000)\n .then(vc => console.log(`Set bitrate to ${vc.bitrate}bps for ${vc.name}`))\n .catch(console.error);"],"params":[{"name":"bitrate","description":"The new bitrate","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's bitrate","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":180,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setRTCRegion","description":"Sets the RTC region of the channel.","inherits":"BaseGuildVoiceChannel#setRTCRegion","inherited":true,"examples":["// Set the RTC region to sydney\nchannel.setRTCRegion('sydney');","// Remove a fixed region for this channel - let Discord decide automatically\nchannel.setRTCRegion(null, 'We want to let Discord decide.');"],"params":[{"name":"rtcRegion","description":"The new region of the channel. Set to `null` to remove a specific region for the channel","nullable":true,"type":[[["string"]]]},{"name":"reason","description":"The reason for modifying this region.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["BaseGuildVoiceChannel",">"]]],"meta":{"line":196,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setUserLimit","description":"Sets the user limit of the channel.","inherits":"BaseGuildVoiceChannel#setUserLimit","inherited":true,"examples":["// Set the user limit of a voice channel\nvoiceChannel.setUserLimit(42)\n .then(vc => console.log(`Set user limit to ${vc.userLimit} for ${vc.name}`))\n .catch(console.error);"],"params":[{"name":"userLimit","description":"The new user limit","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the user limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":211,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"setVideoQualityMode","description":"Sets the camera video quality mode of the channel.","inherits":"BaseGuildVoiceChannel#setVideoQualityMode","inherited":true,"params":[{"name":"videoQualityMode","description":"The new camera video quality mode.","type":[[["VideoQualityMode"]],[["number"]]]},{"name":"reason","description":"Reason for changing the camera video quality mode.","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["VoiceChannel",">"]]],"meta":{"line":221,"file":"BaseGuildVoiceChannel.js","path":"src/structures"}},{"name":"send","description":"Sends a message to this channel.","inherits":"BaseGuildVoiceChannel#send","inherited":true,"implements":["TextBasedChannel#send"],"examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","inherits":"BaseGuildVoiceChannel#sendTyping","inherited":true,"implements":["TextBasedChannel#sendTyping"],"examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","inherits":"BaseGuildVoiceChannel#createMessageCollector","inherited":true,"implements":["TextBasedChannel#createMessageCollector"],"examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","inherits":"BaseGuildVoiceChannel#awaitMessages","inherited":true,"implements":["TextBasedChannel#awaitMessages"],"examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","inherits":"BaseGuildVoiceChannel#createMessageComponentCollector","inherited":true,"implements":["TextBasedChannel#createMessageComponentCollector"],"examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","inherits":"BaseGuildVoiceChannel#awaitMessageComponent","inherited":true,"implements":["TextBasedChannel#awaitMessageComponent"],"examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"bulkDelete","description":"Bulk deletes given messages that are newer than two weeks.","inherits":"BaseGuildVoiceChannel#bulkDelete","inherited":true,"implements":["TextBasedChannel#bulkDelete"],"examples":["// Bulk delete messages\nchannel.bulkDelete(5)\n .then(messages => console.log(`Bulk deleted ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"messages","description":"Messages or number of messages to delete","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]],[["Array","<"],["MessageResolvable",">"]],[["number"]]]},{"name":"filterOld","description":"Filter messages to remove those which are older than two weeks automatically","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Collection","<"],["Snowflake",", ("],["Message","|"],["undefined",")>>"]]],"description":"Returns the deleted messages"},"meta":{"line":319,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","inherits":"BaseGuildVoiceChannel#fetchWebhooks","inherited":true,"implements":["TextBasedChannel#fetchWebhooks"],"examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":368,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","inherits":"BaseGuildVoiceChannel#createWebhook","inherited":true,"implements":["TextBasedChannel#createWebhook"],"examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":393,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","inherits":"BaseGuildVoiceChannel#setRateLimitPerUser","inherited":true,"implements":["TextBasedChannel#setRateLimitPerUser"],"params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":403,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","inherits":"BaseGuildVoiceChannel#setNSFW","inherited":true,"implements":["TextBasedChannel#setNSFW"],"params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":413,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"permissionsFor","description":"Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.","inherits":"GuildChannel#permissionsFor","inherited":true,"params":[{"name":"memberOrRole","description":"The member or role to obtain the overall permissions for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":{"types":[[["Readonly","<"],["Permissions",">"]]],"nullable":true},"meta":{"line":172,"file":"GuildChannel.js","path":"src/structures"}},{"name":"memberPermissions","description":"Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#memberPermissions","inherited":true,"params":[{"name":"member","description":"The member to obtain the overall permissions for","type":[[["GuildMember"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","default":true,"type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":212,"file":"GuildChannel.js","path":"src/structures"}},{"name":"rolePermissions","description":"Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.","access":"private","inherits":"GuildChannel#rolePermissions","inherited":true,"params":[{"name":"role","description":"The role to obtain the overall permissions for","type":[[["Role"]]]},{"name":"checkAdmin","description":"Whether having `ADMINISTRATOR` will return all permissions","type":[[["boolean"]]]}],"returns":[[["Readonly","<"],["Permissions",">"]]],"meta":{"line":241,"file":"GuildChannel.js","path":"src/structures"}},{"name":"lockPermissions","description":"Locks in the permission overwrites from the parent channel.","inherits":"GuildChannel#lockPermissions","inherited":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":261,"file":"GuildChannel.js","path":"src/structures"}},{"name":"edit","description":"Edits the channel.","inherits":"GuildChannel#edit","inherited":true,"examples":["// Edit a channel\nchannel.edit({ name: 'new-channel' })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"data","description":"The new data for the channel","type":[[["ChannelData"]]]},{"name":"reason","description":"Reason for editing this channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":289,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setName","description":"Sets a new name for the guild channel.","inherits":"GuildChannel#setName","inherited":true,"examples":["// Set a new channel name\nchannel.setName('not_general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.error);"],"params":[{"name":"name","description":"The new name for the guild channel","type":[[["string"]]]},{"name":"reason","description":"Reason for changing the guild channel's name","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":304,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setParent","description":"Sets the parent of this channel.","inherits":"GuildChannel#setParent","inherited":true,"examples":["// Add a parent to a channel\nmessage.channel.setParent('355908108431917066', { lockPermissions: false })\n .then(channel => console.log(`New parent of ${message.channel.name}: ${channel.name}`))\n .catch(console.error);"],"params":[{"name":"channel","description":"The category channel to set as the parent","nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"options","description":"The options for setting the parent","optional":true,"default":"{}","type":[[["SetParentOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":326,"file":"GuildChannel.js","path":"src/structures"}},{"name":"setPosition","description":"Sets a new position for the guild channel.","inherits":"GuildChannel#setPosition","inherited":true,"examples":["// Set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.error);"],"params":[{"name":"position","description":"The new position for the guild channel","type":[[["number"]]]},{"name":"options","description":"Options for setting position","optional":true,"type":[[["SetChannelPositionOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":354,"file":"GuildChannel.js","path":"src/structures"}},{"name":"clone","description":"Clones this channel.","inherits":"GuildChannel#clone","inherited":true,"params":[{"name":"options","description":"The options for cloning this channel","optional":true,"type":[[["GuildChannelCloneOptions"]]]}],"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":369,"file":"GuildChannel.js","path":"src/structures"}},{"name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","inherits":"GuildChannel#equals","inherited":true,"params":[{"name":"channel","description":"Channel to compare with","type":[[["GuildChannel"]]]}],"returns":[[["boolean"]]],"meta":{"line":391,"file":"GuildChannel.js","path":"src/structures"}},{"name":"delete","description":"Deletes this channel.","inherits":"GuildChannel#delete","inherited":true,"examples":["// Delete the channel\nchannel.delete('making room for new channels')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"reason","description":"Reason for deleting this channel","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["GuildChannel",">"]]],"meta":{"line":462,"file":"GuildChannel.js","path":"src/structures"}},{"name":"toString","description":"When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.","inherits":"Channel#toString","inherited":true,"examples":["// Logs: Hello from <#123456789012345678>!\nconsole.log(`Hello from ${channel}!`);"],"returns":[[["string"]]],"meta":{"line":130,"file":"Channel.js","path":"src/structures"}},{"name":"fetch","description":"Fetches this channel.","inherits":"Channel#fetch","inherited":true,"params":[{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Promise","<"],["Channel",">"]]],"meta":{"line":153,"file":"Channel.js","path":"src/structures"}},{"name":"isText","description":"Indicates whether this channel is {@link TextBasedChannels text-based}.","inherits":"Channel#isText","inherited":true,"returns":[[["boolean"]]],"meta":{"line":161,"file":"Channel.js","path":"src/structures"}},{"name":"isVoice","description":"Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.","inherits":"Channel#isVoice","inherited":true,"returns":[[["boolean"]]],"meta":{"line":169,"file":"Channel.js","path":"src/structures"}},{"name":"isThread","description":"Indicates whether this channel is a {@link ThreadChannel}.","inherits":"Channel#isThread","inherited":true,"returns":[[["boolean"]]],"meta":{"line":177,"file":"Channel.js","path":"src/structures"}},{"name":"isDirectory","description":"Indicates whether this channel is a {@link DirectoryChannel}","inherits":"Channel#isDirectory","inherited":true,"returns":[[["boolean"]]],"meta":{"line":185,"file":"Channel.js","path":"src/structures"}}],"meta":{"line":13,"file":"VoiceChannel.js","path":"src/structures"}},{"name":"VoiceRegion","description":"Represents a Discord voice region for guilds.","props":[{"name":"id","description":"The region's id","type":[[["string"]]],"meta":{"line":14,"file":"VoiceRegion.js","path":"src/structures"}},{"name":"name","description":"Name of the region","type":[[["string"]]],"meta":{"line":20,"file":"VoiceRegion.js","path":"src/structures"}},{"name":"vip","description":"Whether the region is VIP-only","deprecated":"This property is no longer being sent by the API.","type":[[["boolean"]]],"meta":{"line":27,"file":"VoiceRegion.js","path":"src/structures"}},{"name":"deprecated","description":"Whether the region is deprecated","type":[[["boolean"]]],"meta":{"line":33,"file":"VoiceRegion.js","path":"src/structures"}},{"name":"optimal","description":"Whether the region is optimal","type":[[["boolean"]]],"meta":{"line":39,"file":"VoiceRegion.js","path":"src/structures"}},{"name":"custom","description":"Whether the region is custom","type":[[["boolean"]]],"meta":{"line":45,"file":"VoiceRegion.js","path":"src/structures"}}],"meta":{"line":8,"file":"VoiceRegion.js","path":"src/structures"}},{"name":"VoiceState","description":"Represents the voice state for a Guild Member.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild of this voice state","type":[[["Guild"]]],"meta":{"line":17,"file":"VoiceState.js","path":"src/structures"}},{"name":"id","description":"The id of the member of this voice state","type":[[["Snowflake"]]],"meta":{"line":22,"file":"VoiceState.js","path":"src/structures"}},{"name":"serverDeaf","description":"Whether this member is deafened server-wide","nullable":true,"type":[[["boolean"]]],"meta":{"line":32,"file":"VoiceState.js","path":"src/structures"}},{"name":"serverMute","description":"Whether this member is muted server-wide","nullable":true,"type":[[["boolean"]]],"meta":{"line":42,"file":"VoiceState.js","path":"src/structures"}},{"name":"selfDeaf","description":"Whether this member is self-deafened","nullable":true,"type":[[["boolean"]]],"meta":{"line":52,"file":"VoiceState.js","path":"src/structures"}},{"name":"selfMute","description":"Whether this member is self-muted","nullable":true,"type":[[["boolean"]]],"meta":{"line":62,"file":"VoiceState.js","path":"src/structures"}},{"name":"selfVideo","description":"Whether this member's camera is enabled","nullable":true,"type":[[["boolean"]]],"meta":{"line":72,"file":"VoiceState.js","path":"src/structures"}},{"name":"sessionId","description":"The session id for this member's connection","nullable":true,"type":[[["string"]]],"meta":{"line":82,"file":"VoiceState.js","path":"src/structures"}},{"name":"streaming","description":"Whether this member is streaming using \"Screen Share\"","type":[[["boolean"]]],"meta":{"line":93,"file":"VoiceState.js","path":"src/structures"}},{"name":"channelId","description":"The {@link VoiceChannel} or {@link StageChannel} id the member is in","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":100,"file":"VoiceState.js","path":"src/structures"}},{"name":"suppress","description":"Whether this member is suppressed from speaking. This property is specific to stage channels only.","type":[[["boolean"]]],"meta":{"line":110,"file":"VoiceState.js","path":"src/structures"}},{"name":"requestToSpeakTimestamp","description":"The time at which the member requested to speak. This property is specific to stage channels only.","nullable":true,"type":[[["number"]]],"meta":{"line":118,"file":"VoiceState.js","path":"src/structures"}},{"name":"member","description":"The member that this voice state belongs to","readonly":true,"nullable":true,"type":[[["GuildMember"]]],"meta":{"line":131,"file":"VoiceState.js","path":"src/structures"}},{"name":"user","description":"The user that this voice state belongs to","readonly":true,"nullable":true,"type":[[["User"]]],"meta":{"line":141,"file":"VoiceState.js","path":"src/structures"}},{"name":"channel","description":"The channel that the member is connected to","readonly":true,"nullable":true,"type":[[["VoiceChannel"]],[["StageChannel"]]],"meta":{"line":150,"file":"VoiceState.js","path":"src/structures"}},{"name":"deaf","description":"Whether this member is either self-deafened or server-deafened","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":160,"file":"VoiceState.js","path":"src/structures"}},{"name":"mute","description":"Whether this member is either self-muted or server-muted","readonly":true,"nullable":true,"type":[[["boolean"]]],"meta":{"line":169,"file":"VoiceState.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"setMute","description":"Mutes/unmutes the member of this voice state.","params":[{"name":"mute","description":"Whether or not the member should be muted","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for muting or unmuting","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":179,"file":"VoiceState.js","path":"src/structures"}},{"name":"setDeaf","description":"Deafens/undeafens the member of this voice state.","params":[{"name":"deaf","description":"Whether or not the member should be deafened","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for deafening or undeafening","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":190,"file":"VoiceState.js","path":"src/structures"}},{"name":"disconnect","description":"Disconnects the member from the channel.","params":[{"name":"reason","description":"Reason for disconnecting the member from the channel","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":200,"file":"VoiceState.js","path":"src/structures"}},{"name":"setChannel","description":"Moves the member to a different channel, or disconnects them from the one they're in.","params":[{"name":"channel","description":"Channel to move the member to, or `null` if you want to\ndisconnect them from voice.","type":[[["GuildVoiceChannelResolvable"]],[["null"]]]},{"name":"reason","description":"Reason for moving member to another channel or disconnecting","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["GuildMember",">"]]],"meta":{"line":212,"file":"VoiceState.js","path":"src/structures"}},{"name":"setStatus","description":"Sets the status of the voice channel","examples":["// Setting the status to something\nguild.members.me.voice.setStatus(\"something\")","// Removing the status\nguild.members.me.voice.setStatus(\"\")"],"params":[{"name":"status","description":"The message to set the channel status to","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":228,"file":"VoiceState.js","path":"src/structures"}},{"name":"setRequestToSpeak","description":"Toggles the request to speak in the channel.\nOnly applicable for stage channels and for the client's own voice state.","examples":["// Making the client request to speak in a stage channel (raise its hand)\nguild.members.me.voice.setRequestToSpeak(true);","// Making the client cancel a request to speak\nguild.members.me.voice.setRequestToSpeak(false);"],"params":[{"name":"request","description":"Whether or not the client is requesting to become a speaker.","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":255,"file":"VoiceState.js","path":"src/structures"}},{"name":"setSuppressed","description":"Suppress/unsuppress the user. Only applicable for stage channels.","examples":["// Making the client a speaker\nguild.members.me.voice.setSuppressed(false);","// Making the client an audience member\nguild.members.me.voice.setSuppressed(true);","// Inviting another user to speak\nvoiceState.setSuppressed(false);","// Moving another user to the audience, or cancelling their invite to speak\nvoiceState.setSuppressed(true);"],"params":[{"name":"suppressed","description":"Whether or not the user should be suppressed.","optional":true,"default":true,"type":[[["boolean"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":287,"file":"VoiceState.js","path":"src/structures"}},{"name":"getPreview","description":"Get URL Image of the user's streaming video (NOT STREAMING !!!)","async":true,"returns":{"types":[[["Promise","<"],["string",">"]]],"description":"URL Image of the user's streaming video"},"meta":{"line":309,"file":"VoiceState.js","path":"src/structures"}},{"name":"postPreview","description":"Post Preview Image to the client user's streaming video","params":[{"name":"base64Image","description":"Base64 URI (data:image/jpeg;base64,data)","type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":325,"file":"VoiceState.js","path":"src/structures"}}],"meta":{"line":10,"file":"VoiceState.js","path":"src/structures"}},{"name":"WebEmbed","description":"Send Embedlink to Discord\nNeed to change WebEmbed API server (because heroku is no longer free)","construct":{"name":"WebEmbed","params":[{"name":"data","description":"Raw data","optional":true,"default":"{}","type":[[["WebEmbed"]]]}]},"props":[{"name":"shorten","description":"Shorten the link","nullable":true,"type":[[["boolean"]]],"meta":{"line":50,"file":"WebEmbed.js","path":"src/structures"}},{"name":"hidden","description":"Hidden Embed link","nullable":true,"type":[[["boolean"]]],"meta":{"line":56,"file":"WebEmbed.js","path":"src/structures"}},{"name":"baseURL","description":"Using Custom WebEmbed server ?","see":["https://github.com/aiko-chan-ai/WebEmbed"],"nullable":true,"type":[[["string"]]],"meta":{"line":63,"file":"WebEmbed.js","path":"src/structures"}},{"name":"imageType","description":"Type image of this embed","type":[[["thumbnail"]],[["image"]]],"meta":{"line":74,"file":"WebEmbed.js","path":"src/structures"}},{"name":"title","description":"The title of this embed","nullable":true,"type":[[["string"]]],"meta":{"line":79,"file":"WebEmbed.js","path":"src/structures"}},{"name":"description","description":"The description of this embed","nullable":true,"type":[[["string"]]],"meta":{"line":85,"file":"WebEmbed.js","path":"src/structures"}},{"name":"url","description":"The URL of this embed","nullable":true,"type":[[["string"]]],"meta":{"line":91,"file":"WebEmbed.js","path":"src/structures"}},{"name":"color","description":"The color of this embed","nullable":true,"type":[[["number"]]],"meta":{"line":97,"file":"WebEmbed.js","path":"src/structures"}},{"name":"image","description":"The image of this embed, if there is one","nullable":true,"type":[[["WebEmbedImage"]]],"meta":{"line":112,"file":"WebEmbed.js","path":"src/structures"}},{"name":"thumbnail","description":"The thumbnail of this embed (if there is one)","nullable":true,"type":[[["WebEmbedThumbnail"]]],"meta":{"line":125,"file":"WebEmbed.js","path":"src/structures"}},{"name":"video","description":"The video of this embed (if there is one)","readonly":true,"nullable":true,"type":[[["WebEmbedVideo"]]],"meta":{"line":148,"file":"WebEmbed.js","path":"src/structures"}},{"name":"author","description":"The author of this embed (if there is one)","nullable":true,"type":[[["WebEmbedAuthor"]]],"meta":{"line":168,"file":"WebEmbed.js","path":"src/structures"}},{"name":"provider","description":"The provider of this embed (if there is one)","nullable":true,"type":[[["WebEmbedProvider"]]],"meta":{"line":186,"file":"WebEmbed.js","path":"src/structures"}},{"name":"redirect","description":"Redirect URL","type":[[["string"]]],"meta":{"line":197,"file":"WebEmbed.js","path":"src/structures"}}],"methods":[{"name":"_setup","access":"private","params":[{"name":"data","description":"The data for the embed","type":[[["Object"]]]}],"meta":{"line":69,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setAuthor","description":"Sets the author of this embed.","params":[{"name":"options","description":"The options to provide for the author.\nProvide `null` to remove the author data.","type":[[["string"]],[["EmbedAuthorData"]],[["null"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":211,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setProvider","description":"Sets the provider of this embed.","params":[{"name":"options","description":"The options to provide for the provider.\nProvide `null` to remove the provider data.","type":[[["string"]],[["EmbedProviderData"]],[["null"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":236,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setColor","description":"Sets the color of this embed.","params":[{"name":"color","description":"The color of the embed","type":[[["ColorResolvable"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":254,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setDescription","description":"Sets the description of this embed.","params":[{"name":"description","description":"The description (Limit 350 characters)","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":264,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setImage","description":"Sets the image of this embed.","params":[{"name":"url","description":"The URL of the image","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":274,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setThumbnail","description":"Sets the thumbnail of this embed.","params":[{"name":"url","description":"The URL of the image","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":289,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setVideo","description":"Sets the video of this embed.","params":[{"name":"url","description":"The URL of the video","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":304,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setTitle","description":"Sets the title of this embed.","params":[{"name":"title","description":"The title","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":314,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setURL","description":"Sets the URL of this embed.","params":[{"name":"url","description":"The URL","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":324,"file":"WebEmbed.js","path":"src/structures"}},{"name":"setRedirect","description":"Sets the redirect URL of this embed.","params":[{"name":"url","description":"The URL","type":[[["string"]]]}],"returns":[[["WebEmbed"]]],"meta":{"line":334,"file":"WebEmbed.js","path":"src/structures"}},{"name":"toMessage","description":"Return Message Content + Embed (if hidden, pls check content length because it has 1000+ length)","async":true,"returns":{"types":[[["string"]]],"description":"Message Content"},"meta":{"line":389,"file":"WebEmbed.js","path":"src/structures"}}],"meta":{"line":13,"file":"WebEmbed.js","path":"src/structures"}},{"name":"Webhook","description":"Represents a webhook.","props":[{"name":"client","description":"The client that instantiated the webhook","readonly":true,"type":[[["Client"]]],"meta":{"line":17,"file":"Webhook.js","path":"src/structures"}},{"name":"name","description":"The name of the webhook","type":[[["string"]]],"meta":{"line":33,"file":"Webhook.js","path":"src/structures"}},{"name":"token","description":"The token for the webhook, unavailable for follower webhooks and webhooks owned by another application.","nullable":true,"type":[[["string"]]],"meta":{"line":36,"file":"Webhook.js","path":"src/structures"}},{"name":"avatar","description":"The avatar for the webhook","nullable":true,"type":[[["string"]]],"meta":{"line":48,"file":"Webhook.js","path":"src/structures"}},{"name":"id","description":"The webhook's id","type":[[["Snowflake"]]],"meta":{"line":55,"file":"Webhook.js","path":"src/structures"}},{"name":"type","description":"The type of the webhook","type":[[["WebhookType"]]],"meta":{"line":62,"file":"Webhook.js","path":"src/structures"}},{"name":"guildId","description":"The guild the webhook belongs to","type":[[["Snowflake"]]],"meta":{"line":70,"file":"Webhook.js","path":"src/structures"}},{"name":"channelId","description":"The channel the webhook belongs to","type":[[["Snowflake"]]],"meta":{"line":78,"file":"Webhook.js","path":"src/structures"}},{"name":"owner","description":"The owner of the webhook","nullable":true,"type":[[["User"]],[["APIUser"]]],"meta":{"line":86,"file":"Webhook.js","path":"src/structures"}},{"name":"sourceGuild","description":"The source guild of the webhook","nullable":true,"type":[[["Guild"]],[["APIGuild"]]],"meta":{"line":96,"file":"Webhook.js","path":"src/structures"}},{"name":"sourceChannel","description":"The source channel of the webhook","nullable":true,"type":[[["NewsChannel"]],[["APIChannel"]]],"meta":{"line":106,"file":"Webhook.js","path":"src/structures"}},{"name":"createdTimestamp","description":"The timestamp the webhook was created at","readonly":true,"type":[[["number"]]],"meta":{"line":394,"file":"Webhook.js","path":"src/structures"}},{"name":"createdAt","description":"The time the webhook was created at","readonly":true,"type":[[["Date"]]],"meta":{"line":403,"file":"Webhook.js","path":"src/structures"}},{"name":"url","description":"The URL of this webhook","readonly":true,"type":[[["string"]]],"meta":{"line":412,"file":"Webhook.js","path":"src/structures"}}],"methods":[{"name":"send","description":"Sends a message with this webhook.","examples":["// Send a basic message\nwebhook.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a basic message in a thread\nwebhook.send({ content: 'hello!', threadId: '836856309672348295' })\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nwebhook.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nwebhook.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg'\n }]\n})\n .then(console.log)\n .catch(console.error);","// Send an embed with a local image inside\nwebhook.send({\n content: 'This is an embed',\n embeds: [{\n thumbnail: {\n url: 'attachment://file.jpg'\n }\n }],\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["WebhookMessageOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":185,"file":"Webhook.js","path":"src/structures"}},{"name":"sendSlackMessage","description":"Sends a raw slack message with this webhook.","see":["{@link https://api.slack.com/messaging/webhooks}"],"examples":["// Send a slack message\nwebhook.sendSlackMessage({\n 'username': 'Wumpus',\n 'attachments': [{\n 'pretext': 'this looks pretty cool',\n 'color': '#F0F',\n 'footer_icon': 'http://snek.s3.amazonaws.com/topSnek.png',\n 'footer': 'Powered by sneks',\n 'ts': Date.now() / 1_000\n }]\n}).catch(console.error);"],"params":[{"name":"body","description":"The raw body to send","type":[[["Object"]]]}],"async":true,"returns":[[["Promise","<"],["boolean",">"]]],"meta":{"line":225,"file":"Webhook.js","path":"src/structures"}},{"name":"edit","description":"Edits this webhook.","params":[{"name":"options","description":"Options for editing the webhook","type":[[["WebhookEditData"]]]},{"name":"reason","description":"Reason for editing the webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["Webhook",">"]]],"meta":{"line":252,"file":"Webhook.js","path":"src/structures"}},{"name":"fetchMessage","description":"Gets a message that was sent by this webhook.","params":[{"name":"message","description":"The id of the message to fetch","type":[[["Snowflake"]],[["original","'"]]]},{"name":"cacheOrOptions","description":"The options to provide to fetch the message.\nA **deprecated** boolean may be passed instead to specify whether to cache the message.","optional":true,"default":"{}","type":[[["WebhookFetchMessageOptions"]],[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"description":"Returns the raw message data if the webhook was instantiated as a\n{@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned"},"meta":{"line":286,"file":"Webhook.js","path":"src/structures"}},{"name":"editMessage","description":"Edits a message that was sent by this webhook.","params":[{"name":"message","description":"The message to edit","type":[[["MessageResolvable"]],[["original","'"]]]},{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["WebhookEditMessageOptions"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"description":"Returns the raw message data if the webhook was instantiated as a\n{@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned"},"meta":{"line":322,"file":"Webhook.js","path":"src/structures"}},{"name":"delete","description":"Deletes the webhook.","params":[{"name":"reason","description":"Reason for deleting this webhook","optional":true,"type":[[["string"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":364,"file":"Webhook.js","path":"src/structures"}},{"name":"deleteMessage","description":"Delete a message that was sent by this webhook.","params":[{"name":"message","description":"The message to delete","type":[[["MessageResolvable"]],[["original","'"]]]},{"name":"threadId","description":"The id of the thread this message belongs to","optional":true,"type":[[["Snowflake"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":374,"file":"Webhook.js","path":"src/structures"}},{"name":"avatarURL","description":"A link to the webhook's avatar.","params":[{"name":"options","description":"Options for the Image URL","optional":true,"default":"{}","type":[[["StaticImageURLOptions"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":421,"file":"Webhook.js","path":"src/structures"}},{"name":"isChannelFollower","description":"Whether or not this webhook is a channel follower webhook.","returns":[[["boolean"]]],"meta":{"line":430,"file":"Webhook.js","path":"src/structures"}},{"name":"isIncoming","description":"Whether or not this webhook is an incoming webhook.","returns":[[["boolean"]]],"meta":{"line":438,"file":"Webhook.js","path":"src/structures"}}],"meta":{"line":15,"file":"Webhook.js","path":"src/structures"}},{"name":"WelcomeChannel","description":"Represents a channel link in a guild's welcome screen.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild for this welcome channel","type":[[["Guild"]],[["InviteGuild"]]],"meta":{"line":18,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"description","description":"The description of this welcome channel","type":[[["string"]]],"meta":{"line":24,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"_emoji","description":"The raw emoji data","access":"private","type":[[["Object"]]],"meta":{"line":31,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"channelId","description":"The id of this welcome channel","type":[[["Snowflake"]]],"meta":{"line":40,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"channel","description":"The channel of this welcome channel","nullable":true,"type":[[["TextChannel"]],[["NewsChannel"]],[["StoreChannel"]],[["ForumChannel"]]],"meta":{"line":47,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"emoji","description":"The emoji of this welcome channel","type":[[["GuildEmoji"]],[["Emoji"]]],"meta":{"line":55,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"meta":{"line":10,"file":"WelcomeChannel.js","path":"src/structures"}},{"name":"WelcomeScreen","description":"Represents a welcome screen.","extends":[[["Base"]]],"props":[{"name":"guild","description":"The guild for this welcome screen","type":[[["Guild"]]],"meta":{"line":19,"file":"WelcomeScreen.js","path":"src/structures"}},{"name":"description","description":"The description of this welcome screen","nullable":true,"type":[[["string"]]],"meta":{"line":25,"file":"WelcomeScreen.js","path":"src/structures"}},{"name":"welcomeChannels","description":"Collection of welcome channels belonging to this welcome screen","type":[[["Collection","<"],["Snowflake",", "],["WelcomeChannel",">"]]],"meta":{"line":31,"file":"WelcomeScreen.js","path":"src/structures"}},{"name":"enabled","description":"Whether the welcome screen is enabled on the guild or not","type":[[["boolean"]]],"meta":{"line":43,"file":"WelcomeScreen.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"meta":{"line":11,"file":"WelcomeScreen.js","path":"src/structures"}},{"name":"Widget","description":"Represents a Widget.","extends":[[["Base"]]],"props":[{"name":"id","description":"The id of the guild.","type":[[["Snowflake"]]],"meta":{"line":30,"file":"Widget.js","path":"src/structures"}},{"name":"name","description":"The name of the guild.","type":[[["string"]]],"meta":{"line":37,"file":"Widget.js","path":"src/structures"}},{"name":"instantInvite","description":"The invite of the guild.","nullable":true,"type":[[["string"]]],"meta":{"line":45,"file":"Widget.js","path":"src/structures"}},{"name":"channels","description":"The list of channels in the guild.","type":[[["Collection","<"],["Snowflake",", "],["WidgetChannel",">"]]],"meta":{"line":52,"file":"Widget.js","path":"src/structures"}},{"name":"members","description":"The list of members in the guild.\nThese strings are just arbitrary numbers, they aren't Snowflakes.","type":[[["Collection","<"],["string",", "],["WidgetMember",">"]]],"meta":{"line":62,"file":"Widget.js","path":"src/structures"}},{"name":"presenceCount","description":"The number of members online.","type":[[["number"]]],"meta":{"line":72,"file":"Widget.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"methods":[{"name":"fetch","description":"Update the Widget.","async":true,"returns":[[["Promise","<"],["Widget",">"]]],"meta":{"line":80,"file":"Widget.js","path":"src/structures"}}],"meta":{"line":11,"file":"Widget.js","path":"src/structures"}},{"name":"WidgetMember","description":"Represents a WidgetMember.","extends":[[["Base"]]],"props":[{"name":"id","description":"The id of the user. It's an arbitrary number.","type":[[["string"]]],"meta":{"line":23,"file":"WidgetMember.js","path":"src/structures"}},{"name":"username","description":"The username of the member.","type":[[["string"]]],"meta":{"line":29,"file":"WidgetMember.js","path":"src/structures"}},{"name":"discriminator","description":"The discriminator of the member.","type":[[["string"]]],"meta":{"line":35,"file":"WidgetMember.js","path":"src/structures"}},{"name":"avatar","description":"The avatar of the member.","nullable":true,"type":[[["string"]]],"meta":{"line":41,"file":"WidgetMember.js","path":"src/structures"}},{"name":"status","description":"The status of the member.","type":[[["PresenceStatus"]]],"meta":{"line":47,"file":"WidgetMember.js","path":"src/structures"}},{"name":"deaf","description":"If the member is server deafened","nullable":true,"type":[[["boolean"]]],"meta":{"line":53,"file":"WidgetMember.js","path":"src/structures"}},{"name":"mute","description":"If the member is server muted","nullable":true,"type":[[["boolean"]]],"meta":{"line":59,"file":"WidgetMember.js","path":"src/structures"}},{"name":"selfDeaf","description":"If the member is self deafened","nullable":true,"type":[[["boolean"]]],"meta":{"line":65,"file":"WidgetMember.js","path":"src/structures"}},{"name":"selfMute","description":"If the member is self muted","nullable":true,"type":[[["boolean"]]],"meta":{"line":71,"file":"WidgetMember.js","path":"src/structures"}},{"name":"suppress","description":"If the member is suppressed","nullable":true,"type":[[["boolean"]]],"meta":{"line":77,"file":"WidgetMember.js","path":"src/structures"}},{"name":"channelId","description":"The id of the voice channel the member is in, if any","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":83,"file":"WidgetMember.js","path":"src/structures"}},{"name":"avatarURL","description":"The avatar URL of the member.","type":[[["string"]]],"meta":{"line":89,"file":"WidgetMember.js","path":"src/structures"}},{"name":"activity","description":"The activity of the member.","nullable":true,"type":[[["WidgetActivity"]]],"meta":{"line":95,"file":"WidgetMember.js","path":"src/structures"}},{"name":"client","description":"The client that instantiated this","readonly":true,"type":[[["Client"]]],"meta":{"line":11,"file":"Base.js","path":"src/structures"}}],"meta":{"line":9,"file":"WidgetMember.js","path":"src/structures"}},{"name":"ActivityFlags","description":"Data structure that makes it easy to interact with an {@link Activity#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"ActivityFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric activity flags. All available properties:\n* `INSTANCE`\n* `JOIN`\n* `SPECTATE`\n* `JOIN_REQUEST`\n* `SYNC`\n* `PLAY`\n* `PARTY_PRIVACY_FRIENDS`\n* `PARTY_PRIVACY_VOICE_CHANNEL`\n* `EMBEDDED`","see":["{@link https://discord.com/developers/docs/topics/gateway-events#activity-object-activity-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":32,"file":"ActivityFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"ActivityFlags.js","path":"src/util"}},{"name":"ApplicationFlags","description":"Data structure that makes it easy to interact with a {@link ClientApplication#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"ApplicationFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]]],"meta":{"line":18,"file":"ApplicationFlags.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric application flags. All available properties:\n* `EMBEDDED_RELEASED`\n* `MANAGED_EMOJI`\n* `GROUP_DM_CREATE`\n* `RPC_PRIVATE_BETA`\n* `APPLICATION_AUTO_MODERATION_RULE_CREATE_BADGE`\n* `ALLOW_ASSETS`\n* `ALLOW_ACTIVITY_ACTION_SPECTATE`\n* `ALLOW_ACTIVITY_ACTION_JOIN_REQUEST`\n* `RPC_HAS_CONNECTED`\n* `GATEWAY_PRESENCE`\n* `GATEWAY_PRESENCE_LIMITED`\n* `GATEWAY_GUILD_MEMBERS`\n* `GATEWAY_GUILD_MEMBERS_LIMITED`\n* `VERIFICATION_PENDING_GUILD_LIMIT`\n* `EMBEDDED`\n* `GATEWAY_MESSAGE_CONTENT`\n* `GATEWAY_MESSAGE_CONTENT_LIMITED`\n* `EMBEDDED_FIRST_PARTY`\n* `APPLICATION_COMMAND_BADGE`\n* `ACTIVE`\n* `IFRAME_MODAL`","see":["{@link https://discord.com/developers/docs/resources/application#application-object-application-flags}","{@link https://flags.lewistehminerz.dev/}"],"scope":"static","type":[[["Object"]]],"meta":{"line":51,"file":"ApplicationFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"ApplicationFlags.js","path":"src/util"}},{"name":"AttachmentFlags","description":"Data structure that makes it easy to interact with an {@link GuildMember#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"AttachmentFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric guild member flags. All available properties:\n* `IS_REMIX`","see":["{@link https://discord.com/developers/docs/resources/channel#attachment-object-attachment-structure-attachment-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":25,"file":"AttachmentFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"AttachmentFlags.js","path":"src/util"}},{"name":"BitField","description":"Data structure that makes it easy to interact with a bitfield.","construct":{"name":"BitField","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":"this.constructor.defaultBit","type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric bitfield flags.\nDefined in extension classes","scope":"static","abstract":true,"type":[[["Object"]]],"meta":{"line":162,"file":"BitField.js","path":"src/util"}},{"name":"defaultBit","scope":"static","access":"private","type":[[["number"]],[["bigint"]]],"meta":{"line":168,"file":"BitField.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}},{"name":"resolve","description":"Resolves bitfields to their numeric form.","scope":"static","params":[{"name":"bit","description":"bit(s) to resolve","optional":true,"type":[[["BitFieldResolvable"]]]}],"returns":[[["number"]],[["bigint"]]],"meta":{"line":143,"file":"BitField.js","path":"src/util"}}],"meta":{"line":8,"file":"BitField.js","path":"src/util"}},{"name":"ChannelFlags","description":"Data structure that makes it easy to interact with a {@link Channel#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"ChannelFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]]],"meta":{"line":30,"file":"ChannelFlags.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric guild channel flags. All available properties:\n* `PINNED`\n* `REQUIRE_TAG`","see":["{@link https://discord.com/developers/docs/resources/channel#channel-object-channel-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":18,"file":"ChannelFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"ChannelFlags.js","path":"src/util"}},{"name":"DataResolver","description":"The DataResolver identifies different objects and tries to resolve a specific piece of information from them.","access":"private","methods":[{"name":"resolveCode","description":"Resolves the string to a code based on the passed regex.","scope":"static","params":[{"name":"data","description":"The string to resolve","type":[[["string"]]]},{"name":"regex","description":"The RegExp used to extract the code","type":[[["RegExp"]]]}],"returns":[[["string"]]],"meta":{"line":36,"file":"DataResolver.js","path":"src/util"}},{"name":"resolveInviteCode","description":"Resolves InviteResolvable to an invite code.","scope":"static","params":[{"name":"data","description":"The invite resolvable to resolve","type":[[["InviteResolvable"]]]}],"returns":[[["string"]]],"meta":{"line":45,"file":"DataResolver.js","path":"src/util"}},{"name":"resolveGuildTemplateCode","description":"Resolves GuildTemplateResolvable to a template code.","scope":"static","params":[{"name":"data","description":"The template resolvable to resolve","type":[[["GuildTemplateResolvable"]]]}],"returns":[[["string"]]],"meta":{"line":54,"file":"DataResolver.js","path":"src/util"}},{"name":"resolveImage","description":"Resolves a Base64Resolvable, a string, or a BufferResolvable to a Base 64 image.","scope":"static","params":[{"name":"image","description":"The image to be resolved","type":[[["BufferResolvable"]],[["Base64Resolvable"]]]}],"async":true,"returns":[[["Promise",""]]],"meta":{"line":64,"file":"DataResolver.js","path":"src/util"}},{"name":"resolveBase64","description":"Resolves a Base64Resolvable to a Base 64 image.","scope":"static","params":[{"name":"data","description":"The base 64 resolvable you want to resolve","type":[[["Base64Resolvable"]]]}],"returns":{"types":[[["string"]]],"nullable":true},"meta":{"line":85,"file":"DataResolver.js","path":"src/util"}},{"name":"resolveFile","description":"Resolves a BufferResolvable to a Buffer or a Stream.","scope":"static","params":[{"name":"resource","description":"The buffer or stream resolvable to resolve","type":[[["BufferResolvable"]],[["Stream"]]]}],"async":true,"returns":[[["Promise","<("],["Buffer","|"],["Stream",")>"]]],"meta":{"line":109,"file":"DataResolver.js","path":"src/util"}},{"name":"resolveFileAsBuffer","description":"Resolves a BufferResolvable to a Buffer.","scope":"static","params":[{"name":"resource","description":"The buffer or stream resolvable to resolve","type":[[["BufferResolvable"]],[["Stream"]]]}],"async":true,"returns":[[["Promise","<"],["Buffer",">"]]],"meta":{"line":135,"file":"DataResolver.js","path":"src/util"}}],"meta":{"line":15,"file":"DataResolver.js","path":"src/util"}},{"name":"Formatters","description":"Contains various Discord-specific functions for formatting messages.","props":[{"name":"TimestampStyles","description":"The message formatting timestamp\n[styles](https://discord.com/developers/docs/reference#message-formatting-timestamp-styles) supported by Discord.","scope":"static","type":[[["Object","<"],["string",", "],["TimestampStylesString",">"]]],"meta":{"line":194,"file":"Formatters.js","path":"src/util"}}],"methods":[{"name":"blockQuote","description":"Formats the content into a block quote. This needs to be at the start of the line for Discord to format it.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":29,"file":"Formatters.js","path":"src/util"}},{"name":"bold","description":"Formats the content into bold text.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":38,"file":"Formatters.js","path":"src/util"}},{"name":"channelMention","description":"Formats a channel id into a channel mention.","scope":"static","params":[{"name":"channelId","description":"The channel id to format.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":47,"file":"Formatters.js","path":"src/util"}},{"name":"chatInputApplicationCommandMention","description":"Formats an application command name, subcommand group name, subcommand name, and ID\ninto an application command mention","scope":"static","params":[{"name":"commandName","description":"The name of the application command","type":[[["string"]]]},{"name":"subcommandGroupOrSubOrId","description":"The subcommand group name, subcommand name, or application command id","type":[[["string"]],[["Snowflake"]]]},{"name":"subcommandNameOrId","description":"The subcommand name or application command id","optional":true,"nullable":true,"type":[[["string"]],[["Snowflake"]]]},{"name":"commandId","description":"The id of the application command","optional":true,"nullable":true,"type":[[["Snowflake"]]]}],"returns":[[["string"]]],"meta":{"line":56,"file":"Formatters.js","path":"src/util"}},{"name":"codeBlock","description":"Wraps the content inside a code block with an optional language.","scope":"static","params":[{"name":"contentOrLanguage","description":"The language to use, content if a second parameter isn't provided.","type":[[["string"]]]},{"name":"content","description":"The content to wrap.","optional":true,"type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":71,"file":"Formatters.js","path":"src/util"}},{"name":"formatEmoji","description":"Formats an emoji id into a fully qualified emoji identifier","scope":"static","params":[{"name":"emojiId","description":"The emoji id to format.","type":[[["string"]]]},{"name":"animated","description":"Whether the emoji is animated or not. Defaults to `false`","optional":true,"type":[[["boolean"]]]}],"returns":[[["string"]]],"meta":{"line":81,"file":"Formatters.js","path":"src/util"}},{"name":"hideLinkEmbed","description":"Wraps the URL into `<>`, which stops it from embedding.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":91,"file":"Formatters.js","path":"src/util"}},{"name":"hyperlink","description":"Formats the content and the URL into a masked URL with an optional title.","scope":"static","params":[{"name":"content","description":"The content to display.","type":[[["string"]]]},{"name":"url","description":"The URL the content links to.","type":[[["string"]]]},{"name":"title","description":"The title shown when hovering on the masked link.","optional":true,"type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":100,"file":"Formatters.js","path":"src/util"}},{"name":"inlineCode","description":"Wraps the content inside \\`backticks\\`, which formats it as inline code.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":111,"file":"Formatters.js","path":"src/util"}},{"name":"italic","description":"Formats the content into italic text.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":120,"file":"Formatters.js","path":"src/util"}},{"name":"quote","description":"Formats the content into a quote. This needs to be at the start of the line for Discord to format it.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":129,"file":"Formatters.js","path":"src/util"}},{"name":"roleMention","description":"Formats a role id into a role mention.","scope":"static","params":[{"name":"roleId","description":"The role id to format.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":138,"file":"Formatters.js","path":"src/util"}},{"name":"spoiler","description":"Formats the content into spoiler text.","scope":"static","params":[{"name":"content","description":"The content to spoiler.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":147,"file":"Formatters.js","path":"src/util"}},{"name":"strikethrough","description":"Formats the content into strike-through text.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":156,"file":"Formatters.js","path":"src/util"}},{"name":"time","description":"Formats a date into a short date-time string.","scope":"static","params":[{"name":"date","description":"The date to format.","optional":true,"type":[[["number"]],[["Date"]]]},{"name":"style","description":"The style to use.","optional":true,"type":[[["TimestampStylesString"]]]}],"returns":[[["string"]]],"meta":{"line":165,"file":"Formatters.js","path":"src/util"}},{"name":"underscore","description":"Formats the content into underscored text.","scope":"static","params":[{"name":"content","description":"The content to wrap.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":196,"file":"Formatters.js","path":"src/util"}},{"name":"userMention","description":"Formats a user id into a user mention.","scope":"static","params":[{"name":"userId","description":"The user id to format.","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":205,"file":"Formatters.js","path":"src/util"}}],"meta":{"line":27,"file":"Formatters.js","path":"src/util"}},{"name":"GuildMemberFlags","description":"Data structure that makes it easy to interact with an {@link GuildMember#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"GuildMemberFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric guild member flags. All available properties:\n* `DID_REJOIN`\n* `COMPLETED_ONBOARDING`\n* `BYPASSES_VERIFICATION`\n* `STARTED_ONBOARDING`","see":["{@link https://discord.com/developers/docs/resources/guild#guild-member-object-guild-member-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":27,"file":"GuildMemberFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"GuildMemberFlags.js","path":"src/util"}},{"name":"Intents","description":"Data structure that makes it easy to calculate intents.","extends":[[["BitField"]]],"construct":{"name":"Intents","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["IntentsResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric WebSocket intents. All available properties:\n* `GUILDS`\n* `GUILD_MEMBERS`\n* `GUILD_BANS`\n* `GUILD_EMOJIS_AND_STICKERS`\n* `GUILD_INTEGRATIONS`\n* `GUILD_WEBHOOKS`\n* `GUILD_INVITES`\n* `GUILD_VOICE_STATES`\n* `GUILD_PRESENCES`\n* `GUILD_MESSAGES`\n* `GUILD_MESSAGE_REACTIONS`\n* `GUILD_MESSAGE_TYPING`\n* `DIRECT_MESSAGES`\n* `DIRECT_MESSAGE_REACTIONS`\n* `DIRECT_MESSAGE_TYPING`\n* `MESSAGE_CONTENT`\n* `GUILD_SCHEDULED_EVENTS`\n* `AUTO_MODERATION_CONFIGURATION`\n* `AUTO_MODERATION_EXECUTION`","see":["{@link https://discord.com/developers/docs/topics/gateway#list-of-intents}"],"scope":"static","type":[[["Object"]]],"meta":{"line":50,"file":"Intents.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":8,"file":"Intents.js","path":"src/util"}},{"name":"LimitedCollection","description":"A Collection which holds a max amount of entries and sweeps periodically.","extends":[[["Collection"]]],"construct":{"name":"LimitedCollection","params":[{"name":"options","description":"Options for constructing the Collection.","optional":true,"default":"{}","type":[[["LimitedCollectionOptions"]]]},{"name":"iterable","description":"Optional entries passed to the Map constructor.","optional":true,"default":null,"type":[[["Iterable"]]]}]},"props":[{"name":"maxSize","description":"The max size of the Collection.","type":[[["number"]]],"meta":{"line":63,"file":"LimitedCollection.js","path":"src/util"}},{"name":"keepOverLimit","description":"A function called to check if an entry should be kept when the Collection is at max size.","nullable":true,"type":[[["function"]]],"meta":{"line":69,"file":"LimitedCollection.js","path":"src/util"}},{"name":"sweepFilter","description":"A function called every sweep interval that returns a function passed to `sweep`.","nullable":true,"deprecated":"in favor of {@link Client#sweepers}","type":[[["SweepFilter"]]],"meta":{"line":76,"file":"LimitedCollection.js","path":"src/util"}},{"name":"interval","description":"The id of the interval being used to sweep.","nullable":true,"deprecated":"in favor of {@link Client#sweepers}","type":[[["Timeout"]]],"meta":{"line":83,"file":"LimitedCollection.js","path":"src/util"}}],"methods":[{"name":"filterByLifetime","description":"Create a sweepFilter function that uses a lifetime to determine sweepability.","scope":"static","deprecated":"Use {@link Sweepers.filterByLifetime} instead","params":[{"name":"options","description":"The options used to generate the filter function","optional":true,"default":"{}","type":[[["LifetimeFilterOptions"]]]}],"returns":[[["SweepFilter"]]],"meta":{"line":114,"file":"LimitedCollection.js","path":"src/util"}}],"meta":{"line":37,"file":"LimitedCollection.js","path":"src/util"}},{"name":"MessageFlags","description":"Data structure that makes it easy to interact with a {@link Message#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"MessageFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]]],"meta":{"line":18,"file":"MessageFlags.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric message flags. All available properties:\n* `CROSSPOSTED`\n* `IS_CROSSPOST`\n* `SUPPRESS_EMBEDS`\n* `SOURCE_MESSAGE_DELETED`\n* `URGENT`\n* `HAS_THREAD`\n* `EPHEMERAL`\n* `LOADING`\n* `FAILED_TO_MENTION_SOME_ROLES_IN_THREAD`\n* `SUPPRESS_NOTIFICATIONS`\n* `IS_VOICE_MESSAGE`","see":["{@link https://discord.com/developers/docs/resources/channel#message-object-message-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":40,"file":"MessageFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"MessageFlags.js","path":"src/util"}},{"name":"Options","description":"Contains various utilities for client options.","props":[{"name":"defaultMakeCacheSettings","description":"The default settings passed to {@link ClientOptions.makeCache}.\nThe caches that this changes are:\n* `MessageManager` - Limit to 200 messages\n* `ChannelManager` - Sweep archived threads\n* `GuildChannelManager` - Sweep archived threads\n* `ThreadManager` - Sweep archived threads\nIf you want to keep default behavior and add on top of it you can use this object and add on to it, e.g.\n`makeCache: Options.cacheWithLimits({ ...Options.defaultMakeCacheSettings, ReactionManager: 0 })`","scope":"static","type":[[["Object","<"],["string",", ("],["LimitedCollectionOptions","|"],["number",")>"]]],"meta":{"line":328,"file":"Options.js","path":"src/util"}},{"name":"defaultSweeperSettings","description":"The default settings passed to {@link ClientOptions.sweepers}.\nThe sweepers that this changes are:\n* `threads` - Sweep archived threads every hour, removing those archived more than 4 hours ago\nIf you want to keep default behavior and add on top of it you can use this object and add on to it, e.g.\n`sweepers: { ...Options.defaultSweeperSettings, messages: { interval: 300, lifetime: 600 } }`","scope":"static","type":[[["SweeperOptions"]]],"meta":{"line":357,"file":"Options.js","path":"src/util"}}],"methods":[{"name":"createDefault","description":"The default client options.","scope":"static","returns":[[["ClientOptions"]]],"meta":{"line":159,"file":"Options.js","path":"src/util"}},{"name":"cacheWithLimits","description":"Create a cache factory using predefined settings to sweep or limit.","scope":"static","examples":["// Store up to 200 messages per channel and discard archived threads if they were archived more than 4 hours ago.\n// Note archived threads will remain in the guild and client caches with these settings\nOptions.cacheWithLimits({\n MessageManager: 200,\n ThreadManager: {\n sweepInterval: 3600,\n sweepFilter: LimitedCollection.filterByLifetime({\n getComparisonTimestamp: e => e.archiveTimestamp,\n excludeFromSweep: e => !e.archived,\n }),\n },\n });","// Sweep messages every 5 minutes, removing messages that have not been edited or created in the last 30 minutes\nOptions.cacheWithLimits({\n // Keep default thread sweeping behavior\n ...Options.defaultMakeCacheSettings,\n // Override MessageManager\n MessageManager: {\n sweepInterval: 300,\n sweepFilter: LimitedCollection.filterByLifetime({\n lifetime: 1800,\n getComparisonTimestamp: e => e.editedTimestamp ?? e.createdTimestamp,\n })\n }\n});"],"params":[{"name":"settings","description":"Settings passed to the relevant constructor.\nIf no setting is provided for a manager, it uses Collection.\nIf a number is provided for a manager, it uses that number as the max size for a LimitedCollection.\nIf LimitedCollectionOptions are provided for a manager, it uses those settings to form a LimitedCollection.","optional":true,"default":"{}","type":[[["Object","<"],["string",", ("],["LimitedCollectionOptions","|"],["number",")>"]]]}],"returns":[[["CacheFactory"]]],"meta":{"line":277,"file":"Options.js","path":"src/util"}},{"name":"cacheEverything","description":"Create a cache factory that always caches everything.","scope":"static","returns":[[["CacheFactory"]]],"meta":{"line":312,"file":"Options.js","path":"src/util"}}],"meta":{"line":154,"file":"Options.js","path":"src/util"}},{"name":"Permissions","description":"Data structure that makes it easy to interact with a permission bitfield. All {@link GuildMember}s have a set of\npermissions in their guild, and each channel in the guild may also have {@link PermissionOverwrites} for the member\nthat override their default permissions.","extends":[[["BitField"]]],"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["bigint"]]],"meta":{"line":12,"file":"Permissions.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric permission flags. All available properties:\n* `CREATE_INSTANT_INVITE` (create invitations to the guild)\n* `KICK_MEMBERS`\n* `BAN_MEMBERS`\n* `ADMINISTRATOR` (implicitly has *all* permissions, and bypasses all channel overwrites)\n* `MANAGE_CHANNELS` (edit and reorder channels)\n* `MANAGE_GUILD` (edit the guild information, region, etc.)\n* `ADD_REACTIONS` (add new reactions to messages)\n* `VIEW_AUDIT_LOG`\n* `PRIORITY_SPEAKER`\n* `STREAM`\n* `VIEW_CHANNEL`\n* `SEND_MESSAGES`\n* `SEND_TTS_MESSAGES`\n* `MANAGE_MESSAGES` (delete messages and reactions)\n* `EMBED_LINKS` (links posted will have a preview embedded)\n* `ATTACH_FILES`\n* `READ_MESSAGE_HISTORY` (view messages that were posted prior to opening Discord)\n* `MENTION_EVERYONE`\n* `USE_EXTERNAL_EMOJIS` (use emojis from different guilds)\n* `VIEW_GUILD_INSIGHTS`\n* `CONNECT` (connect to a voice channel)\n* `SPEAK` (speak in a voice channel)\n* `MUTE_MEMBERS` (mute members across all voice channels)\n* `DEAFEN_MEMBERS` (deafen members across all voice channels)\n* `MOVE_MEMBERS` (move members between voice channels)\n* `USE_VAD` (use voice activity detection)\n* `CHANGE_NICKNAME`\n* `MANAGE_NICKNAMES` (change other members' nicknames)\n* `MANAGE_ROLES`\n* `MANAGE_WEBHOOKS`\n* `MANAGE_EMOJIS_AND_STICKERS`\n* `USE_APPLICATION_COMMANDS`\n* `REQUEST_TO_SPEAK`\n* `MANAGE_EVENTS`\n* `MANAGE_THREADS`\n* `USE_PUBLIC_THREADS` (deprecated)\n* `CREATE_PUBLIC_THREADS`\n* `USE_PRIVATE_THREADS` (deprecated)\n* `CREATE_PRIVATE_THREADS`\n* `USE_EXTERNAL_STICKERS` (use stickers from different guilds)\n* `SEND_MESSAGES_IN_THREADS`\n* `START_EMBEDDED_ACTIVITIES`\n* `MODERATE_MEMBERS`\n* `VIEW_CREATOR_MONETIZATION_ANALYTICS`\n* `USE_SOUNDBOARD`","see":["{@link https://discord.com/developers/docs/topics/permissions#permissions-bitwise-permission-flags}"],"scope":"static","type":[[["Object","<"],["string",", "],["bigint",">"]]],"meta":{"line":116,"file":"Permissions.js","path":"src/util"}},{"name":"ALL","description":"Bitfield representing every permission combined","scope":"static","type":[[["bigint"]]],"meta":{"line":170,"file":"Permissions.js","path":"src/util"}},{"name":"DEFAULT","description":"Bitfield representing the default permissions for users","scope":"static","type":[[["bigint"]]],"meta":{"line":176,"file":"Permissions.js","path":"src/util"}},{"name":"STAGE_MODERATOR","description":"Bitfield representing the permissions required for moderators of stage channels","scope":"static","type":[[["bigint"]]],"meta":{"line":182,"file":"Permissions.js","path":"src/util"}}],"methods":[{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"checkAdmin","description":"Whether to allow the administrator permission to override","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":33,"file":"Permissions.js","path":"src/util"}},{"name":"any","description":"Checks whether the bitfield has a permission, or any of multiple permissions.","params":[{"name":"permission","description":"Permission(s) to check for","type":[[["PermissionResolvable"]]]},{"name":"checkAdmin","description":"Whether to allow the administrator permission to override","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"Permissions.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a permission, or multiple permissions.","params":[{"name":"permission","description":"Permission(s) to check for","type":[[["PermissionResolvable"]]]},{"name":"checkAdmin","description":"Whether to allow the administrator permission to override","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["boolean"]]],"meta":{"line":53,"file":"Permissions.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the permissions available.","returns":[[["Array","<"],["string",">"]]],"meta":{"line":61,"file":"Permissions.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}}],"meta":{"line":11,"file":"Permissions.js","path":"src/util"}},{"name":"PremiumUsageFlags","description":"Data structure that makes it easy to interact with an {@link PremiumUsageFlags#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"PremiumUsageFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric the Discord premium usage flags. All available properties:\n* `PREMIUM_DISCRIMINATOR`\n* `ANIMATED_AVATAR`\n* `PROFILE_BANNER`","scope":"static","type":[[["Object"]]],"meta":{"line":25,"file":"PremiumUsageFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"PremiumUsageFlags.js","path":"src/util"}},{"name":"PurchasedFlags","description":"Data structure that makes it easy to interact with an {@link PurchasedFlags#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"PurchasedFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric the Discord purchased flags. All available properties:\n* `NITRO_CLASSIC`\n* `NITRO`\n* `GUILD_BOOST`","scope":"static","type":[[["Object"]]],"meta":{"line":25,"file":"PurchasedFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"PurchasedFlags.js","path":"src/util"}},{"name":"DiscordAuthWebsocket","description":"Discord Auth QR (Discord.RemoteAuth will be removed in the future, v13.9.0 release)","extends":[[["EventEmitter"]]],"abstract":true,"construct":{"name":"DiscordAuthWebsocket","description":"Creates a new DiscordAuthWebsocket instance.","params":[{"name":"options","description":"Options","nullable":true,"type":[[["DiscordAuthWebsocketOptions"]]]}]},"props":[{"name":"ws","description":"WebSocket","nullable":true,"type":[[["WebSocket"]]],"meta":{"line":74,"file":"RemoteAuth.js","path":"src/util"}},{"name":"heartbeatInterval","description":"Heartbeat Interval","nullable":true,"type":[[["number"]]],"meta":{"line":79,"file":"RemoteAuth.js","path":"src/util"}},{"name":"user","description":"User (Scan QR Code)","nullable":true,"type":[[["Object"]]],"meta":{"line":86,"file":"RemoteAuth.js","path":"src/util"}},{"name":"token","description":"Temporary Token (Scan QR Code)","nullable":true,"type":[[["string"]]],"meta":{"line":91,"file":"RemoteAuth.js","path":"src/util"}},{"name":"realToken","description":"Real Token (Login)","nullable":true,"type":[[["string"]]],"meta":{"line":96,"file":"RemoteAuth.js","path":"src/util"}},{"name":"fingerprint","description":"Fingerprint (QR Code)","nullable":true,"type":[[["string"]]],"meta":{"line":101,"file":"RemoteAuth.js","path":"src/util"}},{"name":"captchaCache","description":"Captcha Cache","nullable":true,"type":[[["Captcha"]]],"meta":{"line":132,"file":"RemoteAuth.js","path":"src/util"}},{"name":"exprireTime","description":"Get expire time","readonly":true,"type":[[["string"]]],"meta":{"line":143,"file":"RemoteAuth.js","path":"src/util"}},{"name":"options","description":"Options","nullable":true,"type":[[["DiscordAuthWebsocketOptions"]]],"meta":{"line":151,"file":"RemoteAuth.js","path":"src/util"}}],"methods":[{"name":"captchaSolver","description":"Captcha Handler","params":[{"name":"data","description":"hcaptcha data","type":[[["Captcha"]]]}],"returns":{"types":[[["Promise","<"],["string",">"]]],"description":"Captcha token"},"meta":{"line":110,"file":"RemoteAuth.js","path":"src/util"}},{"name":"connect","description":"Connect to DiscordAuthWebsocket.","params":[{"name":"client","description":"Using only for auto login.","nullable":true,"type":[[["Client"]]]}],"returns":[[["undefined"]]],"meta":{"line":387,"file":"RemoteAuth.js","path":"src/util"}},{"name":"destroy","description":"Disconnect from DiscordAuthWebsocket.","returns":[[["undefined"]]],"meta":{"line":395,"file":"RemoteAuth.js","path":"src/util"}},{"name":"generateQR","description":"Generate QR code for user to scan (Terminal)","returns":[[["undefined"]]],"meta":{"line":410,"file":"RemoteAuth.js","path":"src/util"}}],"events":[{"name":"cancel","description":"Emitted whenever a user cancels the login process.","params":[{"name":"user","description":"User (Raw)","type":[[["object"]]]}],"meta":{"line":222,"file":"RemoteAuth.js","path":"src/util"}},{"name":"success","description":"Emitted whenever a token is created. (Fake token)","params":[{"name":"user","description":"Discord User","type":[[["object"]]]},{"name":"token","description":"Discord Token (Fake)","type":[[["string"]]]}],"meta":{"line":233,"file":"RemoteAuth.js","path":"src/util"}},{"name":"pending","description":"Emitted whenever a user is scan QR Code.","params":[{"name":"user","description":"Discord User Raw","type":[[["object"]]]}],"meta":{"line":354,"file":"RemoteAuth.js","path":"src/util"}},{"name":"ready","description":"Emitted whenever a url is created.","params":[{"name":"fingerprint","description":"Fingerprint","type":[[["string"]]]},{"name":"url","description":"DiscordAuthWebsocket","type":[[["string"]]]}],"meta":{"line":366,"file":"RemoteAuth.js","path":"src/util"}},{"name":"closed","description":"Emitted whenever a connection is closed.","params":[{"name":"loginState","description":"Login state","type":[[["boolean"]]]}],"meta":{"line":398,"file":"RemoteAuth.js","path":"src/util"}},{"name":"finish","description":"Emitted whenever a real token is found.","params":[{"name":"user","description":"User","type":[[["object"]]]},{"name":"token","description":"Real token","type":[[["string"]]]}],"meta":{"line":474,"file":"RemoteAuth.js","path":"src/util"}}],"meta":{"line":63,"file":"RemoteAuth.js","path":"src/util"}},{"name":"RoleFlags","description":"Data structure that makes it easy to interact with an {@link GuildMember#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"RoleFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]],[["bigint"]]],"meta":{"line":17,"file":"BitField.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric guild member flags. All available properties:\n* `IN_PROMPT`","see":["{@link https://discord.com/developers/docs/topics/permissions#role-object-role-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":24,"file":"RoleFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"RoleFlags.js","path":"src/util"}},{"name":"SnowflakeUtil","description":"A container for useful snowflake-related methods.","props":[{"name":"EPOCH","description":"Discord's epoch value (2015-01-01T00:00:00.000Z).","scope":"static","readonly":true,"type":[[["number"]]],"meta":{"line":87,"file":"SnowflakeUtil.js","path":"src/util"}}],"methods":[{"name":"generate","description":"Generates a Discord snowflake.\nThis hardcodes the worker's id as 1 and the process's id as 0.","scope":"static","params":[{"name":"timestamp","description":"Timestamp or date of the snowflake to generate","optional":true,"default":"Date.now()","type":[[["number"]],[["Date"]]]}],"returns":{"types":[[["Snowflake"]]],"description":"The generated snowflake"},"meta":{"line":30,"file":"SnowflakeUtil.js","path":"src/util"}},{"name":"deconstruct","description":"Deconstructs a Discord snowflake.","scope":"static","params":[{"name":"snowflake","description":"Snowflake to deconstruct","type":[[["Snowflake"]]]}],"returns":[[["DeconstructedSnowflake"]]],"meta":{"line":59,"file":"SnowflakeUtil.js","path":"src/util"}},{"name":"timestampFrom","description":"Retrieves the timestamp field's value from a Discord snowflake.","scope":"static","params":[{"name":"snowflake","description":"Snowflake to get the timestamp value from","type":[[["Snowflake"]]]}],"returns":[[["number"]]],"meta":{"line":78,"file":"SnowflakeUtil.js","path":"src/util"}}],"meta":{"line":10,"file":"SnowflakeUtil.js","path":"src/util"}},{"name":"Sweepers","description":"A container for all cache sweeping intervals and their associated sweep methods.","props":[{"name":"options","description":"The options the sweepers were instantiated with","type":[[["SweeperOptions"]]],"meta":{"line":30,"file":"Sweepers.js","path":"src/util"}},{"name":"intervals","description":"A record of interval timeout that is used to sweep the indicated items, or null if not being swept","type":[[["Object","<"],["SweeperKey",", ?"],["Timeout",">"]]],"meta":{"line":36,"file":"Sweepers.js","path":"src/util"}}],"methods":[{"name":"sweepApplicationCommands","description":"Sweeps all guild and global application commands and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which commands will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of commands that were removed from the caches"},"meta":{"line":68,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepAutoModerationRules","description":"Sweeps all auto moderation rules and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine\nwhich auto moderation rules will be removed from the caches","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of auto moderation rules that were removed from the caches"},"meta":{"line":86,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepBans","description":"Sweeps all guild bans and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which bans will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of bans that were removed from the caches"},"meta":{"line":95,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepEmojis","description":"Sweeps all guild emojis and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which emojis will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of emojis that were removed from the caches"},"meta":{"line":104,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepInvites","description":"Sweeps all guild invites and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which invites will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of invites that were removed from the caches"},"meta":{"line":113,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepGuildMembers","description":"Sweeps all guild members and removes the ones which are indicated by the filter.\nIt is highly recommended to keep the client guild member cached","params":[{"name":"filter","description":"The function used to determine which guild members will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of guild members that were removed from the caches"},"meta":{"line":123,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepMessages","description":"Sweeps all text-based channels' messages and removes the ones which are indicated by the filter.","examples":["// Remove all messages older than 1800 seconds from the messages cache\nconst amount = sweepers.sweepMessages(\n Sweepers.filterByLifetime({\n lifetime: 1800,\n getComparisonTimestamp: m => m.editedTimestamp ?? m.createdTimestamp,\n })(),\n);\nconsole.log(`Successfully removed ${amount} messages from the cache.`);"],"params":[{"name":"filter","description":"The function used to determine which messages will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of messages that were removed from the caches"},"meta":{"line":141,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepPresences","description":"Sweeps all presences and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which presences will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of presences that were removed from the caches"},"meta":{"line":163,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepReactions","description":"Sweeps all message reactions and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which reactions will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of reactions that were removed from the caches"},"meta":{"line":172,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepStageInstances","description":"Sweeps all guild stage instances and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which stage instances will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of stage instances that were removed from the caches"},"meta":{"line":201,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepStickers","description":"Sweeps all guild stickers and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which stickers will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of stickers that were removed from the caches"},"meta":{"line":210,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepThreadMembers","description":"Sweeps all thread members and removes the ones which are indicated by the filter.\nIt is highly recommended to keep the client thread member cached","params":[{"name":"filter","description":"The function used to determine which thread members will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of thread members that were removed from the caches"},"meta":{"line":220,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepThreads","description":"Sweeps all threads and removes the ones which are indicated by the filter.","examples":["// Remove all threads archived greater than 1 day ago from all the channel caches\nconst amount = sweepers.sweepThreads(\n Sweepers.filterByLifetime({\n getComparisonTimestamp: t => t.archivedTimestamp,\n excludeFromSweep: t => !t.archived,\n })(),\n);\nconsole.log(`Successfully removed ${amount} threads from the cache.`);"],"params":[{"name":"filter","description":"The function used to determine which threads will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"filter Amount of threads that were removed from the caches"},"meta":{"line":250,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepUsers","description":"Sweeps all users and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which users will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of users that were removed from the caches"},"meta":{"line":272,"file":"Sweepers.js","path":"src/util"}},{"name":"sweepVoiceStates","description":"Sweeps all guild voice states and removes the ones which are indicated by the filter.","params":[{"name":"filter","description":"The function used to determine which voice states will be removed from the caches.","type":[[["function"]]]}],"returns":{"types":[[["number"]]],"description":"Amount of voice states that were removed from the caches"},"meta":{"line":289,"file":"Sweepers.js","path":"src/util"}},{"name":"destroy","description":"Cancels all sweeping intervals","returns":[[["void"]]],"meta":{"line":297,"file":"Sweepers.js","path":"src/util"}},{"name":"_sweepGuildDirectProp","description":"Sweep a direct sub property of all guilds","access":"private","params":[{"name":"key","description":"The name of the property","type":[[["string"]]]},{"name":"filter","description":"Filter function passed to sweep","type":[[["function"]]]},{"name":"eventOptions","description":"Options for the Client event emitted here","optional":true,"default":"{}","type":[[["SweepEventOptions"]]]}],"returns":{"types":[[["Object"]]],"description":"Object containing the number of guilds swept and the number of items swept"},"meta":{"line":401,"file":"Sweepers.js","path":"src/util"}},{"name":"_validateProperties","description":"Validates a set of properties","access":"private","params":[{"name":"key","description":"Key of the options object to check","type":[[["string"]]]}],"meta":{"line":428,"file":"Sweepers.js","path":"src/util"}},{"name":"_initInterval","description":"Initialize an interval for sweeping","access":"private","params":[{"name":"intervalKey","description":"The name of the property that stores the interval for this sweeper","type":[[["string"]]]},{"name":"sweepKey","description":"The name of the function that sweeps the desired caches","type":[[["string"]]]},{"name":"opts","description":"Validated options for a sweep","type":[[["Object"]]]}],"meta":{"line":455,"file":"Sweepers.js","path":"src/util"}},{"name":"filterByLifetime","description":"Create a sweepFilter function that uses a lifetime to determine sweepability.","scope":"static","params":[{"name":"options","description":"The options used to generate the filter function","optional":true,"default":"{}","type":[[["LifetimeFilterOptions"]]]}],"returns":[[["GlobalSweepFilter"]]],"meta":{"line":319,"file":"Sweepers.js","path":"src/util"}},{"name":"archivedThreadSweepFilter","description":"Creates a sweep filter that sweeps archived threads","scope":"static","params":[{"name":"lifetime","description":"How long a thread has to be archived to be valid for sweeping","optional":true,"default":14400,"type":[[["number"]]]}],"returns":[[["GlobalSweepFilter"]]],"meta":{"line":353,"file":"Sweepers.js","path":"src/util"}},{"name":"expiredInviteSweepFilter","description":"Creates a sweep filter that sweeps expired invites","scope":"static","params":[{"name":"lifetime","description":"How long ago an invite has to have expired to be valid for sweeping","optional":true,"default":14400,"type":[[["number"]]]}],"returns":[[["GlobalSweepFilter"]]],"meta":{"line":366,"file":"Sweepers.js","path":"src/util"}},{"name":"outdatedMessageSweepFilter","description":"Creates a sweep filter that sweeps outdated messages (edits taken into account)","scope":"static","params":[{"name":"lifetime","description":"How long ago a message has to have been sent or edited to be valid for sweeping","optional":true,"default":3600,"type":[[["number"]]]}],"returns":[[["GlobalSweepFilter"]]],"meta":{"line":378,"file":"Sweepers.js","path":"src/util"}}],"meta":{"line":17,"file":"Sweepers.js","path":"src/util"}},{"name":"SystemChannelFlags","description":"Data structure that makes it easy to interact with a {@link Guild#systemChannelFlags} bitfield.\nNote that all event message types are enabled by default,\nand by setting their corresponding flags you are disabling them","extends":[[["BitField"]]],"construct":{"name":"SystemChannelFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["SystemChannelFlagsResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]]],"meta":{"line":20,"file":"SystemChannelFlags.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric system channel flags. All available properties:\n* `SUPPRESS_JOIN_NOTIFICATIONS` (Suppress member join notifications)\n* `SUPPRESS_PREMIUM_SUBSCRIPTIONS` (Suppress server boost notifications)\n* `SUPPRESS_GUILD_REMINDER_NOTIFICATIONS` (Suppress server setup tips)\n* `SUPPRESS_JOIN_NOTIFICATION_REPLIES` (Hide member join sticker reply buttons)\n* `SUPPRESS_ROLE_SUBSCRIPTION_PURCHASE_NOTIFICATIONS` (Suppress role subscription purchase and renewal notifications)\n* `SUPPRESS_ROLE_SUBSCRIPTION_PURCHASE_NOTIFICATION_REPLIES` (HHide role subscription sticker reply buttons)","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-system-channel-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":46,"file":"SystemChannelFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":11,"file":"SystemChannelFlags.js","path":"src/util"}},{"name":"ThreadMemberFlags","description":"Data structure that makes it easy to interact with a {@link ThreadMember#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"ThreadMemberFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]]],"meta":{"line":18,"file":"ThreadMemberFlags.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric thread member flags. There are currently no bitflags relevant to bots for this.","scope":"static","type":[[["Object","<"],["string",", "],["number",">"]]],"meta":{"line":28,"file":"ThreadMemberFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":9,"file":"ThreadMemberFlags.js","path":"src/util"}},{"name":"UserFlags","description":"Data structure that makes it easy to interact with a {@link User#flags} bitfield.","extends":[[["BitField"]]],"construct":{"name":"UserFlags","params":[{"name":"bits","description":"Bit(s) to read from","optional":true,"default":0,"type":[[["BitFieldResolvable"]]]}]},"props":[{"name":"bitfield","description":"Bitfield of the packed bits","type":[[["number"]]],"meta":{"line":17,"file":"UserFlags.js","path":"src/util"}},{"name":"FLAGS","description":"Numeric user flags. All available properties:\n* `DISCORD_EMPLOYEE`\n* `PARTNERED_SERVER_OWNER`\n* `HYPESQUAD_EVENTS`\n* `BUGHUNTER_LEVEL_1`\n* `MFA_SMS`\n* `PREMIUM_PROMO_DISMISSED`\n* `HOUSE_BRAVERY`\n* `HOUSE_BRILLIANCE`\n* `HOUSE_BALANCE`\n* `EARLY_SUPPORTER`\n* `TEAM_USER`\n* `INTERNAL_APPLICATION`\n* `SYSTEM`\n* `HAS_UNREAD_URGENT_MESSAGES`\n* `BUGHUNTER_LEVEL_2`\n* `UNDERAGE_DELETED`\n* `VERIFIED_BOT`\n* `EARLY_VERIFIED_BOT_DEVELOPER`\n* `DISCORD_CERTIFIED_MODERATOR`\n* `BOT_HTTP_INTERACTIONS`\n* `SPAMMER`\n* `DISABLE_PREMIUM`\n* `ACTIVE_DEVELOPER`\n* `HIGH_GLOBAL_RATE_LIMIT`\n* `DELETED`\n* `DISABLED_SUSPICIOUS_ACTIVITY`\n* `SELF_DELETED`\n* `PREMIUM_DISCRIMINATOR`\n* `USED_DESKTOP_CLIENT`\n* `USED_WEB_CLIENT`\n* `USED_MOBILE_CLIENT`\n* `DISABLED`\n* `VERIFIED_EMAIL`\n* `QUARANTINED`\n* `COLLABORATOR`\n* `RESTRICTED_COLLABORATOR`","see":["{@link https://discord.com/developers/docs/resources/user#user-object-user-flags}","{@link https://github.com/LewisTehMinerz/discord-flags}"],"scope":"static","type":[[["Object"]]],"meta":{"line":65,"file":"UserFlags.js","path":"src/util"}}],"methods":[{"name":"any","description":"Checks whether the bitfield has a bit, or any of multiple bits.","inherits":"BitField#any","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":25,"file":"BitField.js","path":"src/util"}},{"name":"equals","description":"Checks if this bitfield equals another","inherits":"BitField#equals","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":34,"file":"BitField.js","path":"src/util"}},{"name":"has","description":"Checks whether the bitfield has a bit, or multiple bits.","inherits":"BitField#has","inherited":true,"params":[{"name":"bit","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]}],"returns":[[["boolean"]]],"meta":{"line":43,"file":"BitField.js","path":"src/util"}},{"name":"missing","description":"Gets all given bits that are missing from the bitfield.","inherits":"BitField#missing","inherited":true,"params":[{"name":"bits","description":"Bit(s) to check for","type":[[["BitFieldResolvable"]]]},{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":54,"file":"BitField.js","path":"src/util"}},{"name":"freeze","description":"Freezes these bits, making them immutable.","inherits":"BitField#freeze","inherited":true,"returns":[[["Readonly","<"],["BitField",">"]]],"meta":{"line":62,"file":"BitField.js","path":"src/util"}},{"name":"add","description":"Adds bits to these ones.","inherits":"BitField#add","inherited":true,"params":[{"name":"bits","description":"Bits to add","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":71,"file":"BitField.js","path":"src/util"}},{"name":"remove","description":"Removes bits from these.","inherits":"BitField#remove","inherited":true,"params":[{"name":"bits","description":"Bits to remove","optional":true,"variable":true,"type":[[["BitFieldResolvable"]]]}],"returns":{"types":[[["BitField"]]],"description":"These bits or new BitField if the instance is frozen."},"meta":{"line":86,"file":"BitField.js","path":"src/util"}},{"name":"serialize","description":"Gets an object mapping field names to a {@link boolean} indicating whether the\nbit is available.","inherits":"BitField#serialize","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Object"]]],"meta":{"line":102,"file":"BitField.js","path":"src/util"}},{"name":"toArray","description":"Gets an {@link Array} of bitfield names based on the bits available.","inherits":"BitField#toArray","inherited":true,"params":[{"name":"hasParams","description":"Additional parameters for the has method, if any","variable":true,"type":[["*"]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":113,"file":"BitField.js","path":"src/util"}}],"meta":{"line":8,"file":"UserFlags.js","path":"src/util"}},{"name":"Util","description":"Contains various general-purpose utility methods.","methods":[{"name":"flatten","description":"Flatten an object. Any properties that are collections will get converted to an array of keys.","scope":"static","params":[{"name":"obj","description":"The object to flatten.","type":[[["Object"]]]},{"name":"props","description":"Specific properties to include/exclude.","optional":true,"variable":true,"type":[[["Object","<"],["string",", ("],["boolean","|"],["string",")>"]]]}],"returns":[[["Object"]]],"meta":{"line":29,"file":"Util.js","path":"src/util"}},{"name":"splitMessage","description":"Splits a string into multiple chunks at a designated character that do not exceed a specific length.","scope":"static","deprecated":"This will be removed in the next major version.","params":[{"name":"text","description":"Content to split","type":[[["string"]]]},{"name":"options","description":"Options controlling the behavior of the split","optional":true,"type":[[["SplitOptions"]]]}],"returns":[[["Array","<"],["string",">"]]],"meta":{"line":85,"file":"Util.js","path":"src/util"}},{"name":"escapeMarkdown","description":"Escapes any Discord-flavour markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]},{"name":"options","description":"Options for escaping the markdown","optional":true,"default":"{}","type":[[["EscapeMarkdownOptions"]]]}],"returns":[[["string"]]],"meta":{"line":147,"file":"Util.js","path":"src/util"}},{"name":"escapeCodeBlock","description":"Escapes code block markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":228,"file":"Util.js","path":"src/util"}},{"name":"escapeInlineCode","description":"Escapes inline code markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":236,"file":"Util.js","path":"src/util"}},{"name":"escapeItalic","description":"Escapes italic markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":244,"file":"Util.js","path":"src/util"}},{"name":"escapeBold","description":"Escapes bold markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":261,"file":"Util.js","path":"src/util"}},{"name":"escapeUnderline","description":"Escapes underline markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":273,"file":"Util.js","path":"src/util"}},{"name":"escapeStrikethrough","description":"Escapes strikethrough markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":285,"file":"Util.js","path":"src/util"}},{"name":"escapeSpoiler","description":"Escapes spoiler markdown in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":293,"file":"Util.js","path":"src/util"}},{"name":"escapeEscape","description":"Escapes escape characters in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":301,"file":"Util.js","path":"src/util"}},{"name":"escapeHeading","description":"Escapes heading characters in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":309,"file":"Util.js","path":"src/util"}},{"name":"escapeBulletedList","description":"Escapes bulleted list characters in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":317,"file":"Util.js","path":"src/util"}},{"name":"escapeNumberedList","description":"Escapes numbered list characters in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":325,"file":"Util.js","path":"src/util"}},{"name":"escapeMaskedLink","description":"Escapes masked link characters in a string.","scope":"static","params":[{"name":"text","description":"Content to escape","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":333,"file":"Util.js","path":"src/util"}},{"name":"parseEmoji","description":"Parses emoji info out of a string. The string must be one of:\n* A UTF-8 emoji (no id)\n* A URL-encoded UTF-8 emoji (no id)\n* A Discord custom emoji (`<:name:id>` or ``)","scope":"static","access":"private","params":[{"name":"text","description":"Emoji string to parse","type":[[["string"]]]}],"returns":{"types":[[["APIEmoji"]]],"description":"Object with `animated`, `name`, and `id` properties"},"meta":{"line":346,"file":"Util.js","path":"src/util"}},{"name":"resolvePartialEmoji","description":"Resolves a partial emoji object from an {@link EmojiIdentifierResolvable}, without checking a Client.","scope":"static","access":"private","params":[{"name":"emoji","description":"Emoji identifier to resolve","type":[[["EmojiIdentifierResolvable"]]]}],"returns":{"types":[[["RawEmoji"]]],"nullable":true},"meta":{"line":359,"file":"Util.js","path":"src/util"}},{"name":"cloneObject","description":"Shallow-copies an object with its class/prototype intact.","scope":"static","access":"private","params":[{"name":"obj","description":"Object to clone","type":[[["Object"]]]}],"returns":[[["Object"]]],"meta":{"line":373,"file":"Util.js","path":"src/util"}},{"name":"mergeDefault","description":"Sets default properties on an object that aren't already specified.","scope":"static","access":"private","params":[{"name":"def","description":"Default properties","type":[[["Object"]]]},{"name":"given","description":"Object to assign defaults to","type":[[["Object"]]]}],"returns":[[["Object"]]],"meta":{"line":384,"file":"Util.js","path":"src/util"}},{"name":"makeError","description":"Makes an Error from a plain info object.","scope":"static","access":"private","params":[{"name":"obj","description":"Error info","type":[[["MakeErrorOptions"]]]}],"returns":[[["Error"]]],"meta":{"line":411,"file":"Util.js","path":"src/util"}},{"name":"makePlainError","description":"Makes a plain error info object from an Error.","scope":"static","access":"private","params":[{"name":"err","description":"Error to get info from","type":[[["Error"]]]}],"returns":[[["MakeErrorOptions"]]],"meta":{"line":424,"file":"Util.js","path":"src/util"}},{"name":"moveElementInArray","description":"Moves an element in an array *in place*.","scope":"static","access":"private","params":[{"name":"array","description":"Array to modify","type":[[["Array","<"],["*",">"]]]},{"name":"element","description":"Element to move","type":[["*"]]},{"name":"newIndex","description":"Index or offset to move the element to","type":[[["number"]]]},{"name":"offset","description":"Move the element by an offset amount rather than to a set index","optional":true,"default":false,"type":[[["boolean"]]]}],"returns":[[["number"]]],"meta":{"line":441,"file":"Util.js","path":"src/util"}},{"name":"verifyString","description":"Verifies the provided data is a string, otherwise throws provided error.","scope":"static","params":[{"name":"data","description":"The string resolvable to resolve","type":[[["string"]]]},{"name":"error","description":"The Error constructor to instantiate. Defaults to Error","optional":true,"type":[[["function"]]]},{"name":"errorMessage","description":"The error message to throw with. Defaults to \"Expected string, got instead.\"","optional":true,"type":[[["string"]]]},{"name":"allowEmpty","description":"Whether an empty string should be allowed","optional":true,"default":true,"type":[[["boolean"]]]}],"returns":[[["string"]]],"meta":{"line":459,"file":"Util.js","path":"src/util"}},{"name":"resolveColor","description":"Resolves a ColorResolvable into a color number.","scope":"static","params":[{"name":"color","description":"Color to resolve","type":[[["ColorResolvable"]]]}],"returns":{"types":[[["number"]]],"description":"A color"},"meta":{"line":483,"file":"Util.js","path":"src/util"}},{"name":"discordSort","description":"Sorts by Discord's position and id.","scope":"static","params":[{"name":"collection","description":"Collection of objects to sort","type":[[["Collection"]]]}],"returns":[[["Collection"]]],"meta":{"line":503,"file":"Util.js","path":"src/util"}},{"name":"setPosition","description":"Sets the position of a Channel or Role.","scope":"static","access":"private","params":[{"name":"item","description":"Object to set the position of","type":[[["Channel"]],[["Role"]]]},{"name":"position","description":"New position for the object","type":[[["number"]]]},{"name":"relative","description":"Whether `position` is relative to its current position","type":[[["boolean"]]]},{"name":"sorted","description":"A collection of the objects sorted properly","type":[[["Collection","<"],["string",", ("],["Channel","|"],["Role",")>"]]]},{"name":"route","description":"Route to call PATCH on","type":[[["APIRouter"]]]},{"name":"reason","description":"Reason for the change","optional":true,"type":[[["string"]]]}],"async":true,"returns":{"types":[[["Promise","<("],["Array","<"],["Channel",">|"],["Array","<"],["Role",">)>"]]],"description":"Updated item list, with `id` and `position` properties"},"meta":{"line":523,"file":"Util.js","path":"src/util"}},{"name":"basename","description":"Alternative to Node's `path.basename`, removing query string after the extension if it exists.","scope":"static","access":"private","params":[{"name":"path","description":"Path to get the basename of","type":[[["string"]]]},{"name":"ext","description":"File extension to remove","optional":true,"type":[[["string"]]]}],"returns":{"types":[[["string"]]],"description":"Basename of the path"},"meta":{"line":538,"file":"Util.js","path":"src/util"}},{"name":"removeMentions","description":"Breaks user, role and everyone/here mentions by adding a zero width space after every @ character","scope":"static","deprecated":"Use {@link BaseMessageOptions#allowedMentions} instead.","params":[{"name":"str","description":"The string to sanitize","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":549,"file":"Util.js","path":"src/util"}},{"name":"cleanContent","description":"The content to have all mentions replaced by the equivalent text.\nWhen {@link Util.removeMentions} is removed, this method will no longer sanitize mentions.\nUse {@link BaseMessageOptions#allowedMentions} instead to prevent mentions when sending a message.","scope":"static","params":[{"name":"str","description":"The string to be converted","type":[[["string"]]]},{"name":"channel","description":"The channel the string was sent in","type":[[["TextBasedChannels"]]]}],"returns":[[["string"]]],"meta":{"line":574,"file":"Util.js","path":"src/util"}},{"name":"cleanCodeBlockContent","description":"The content to put in a code block with all code block fences replaced by the equivalent backticks.","scope":"static","params":[{"name":"text","description":"The string to be converted","type":[[["string"]]]}],"returns":[[["string"]]],"meta":{"line":608,"file":"Util.js","path":"src/util"}},{"name":"archivedThreadSweepFilter","description":"Creates a sweep filter that sweeps archived threads","scope":"static","deprecated":"When not using with `makeCache` use `Sweepers.archivedThreadSweepFilter` instead","params":[{"name":"lifetime","description":"How long a thread has to be archived to be valid for sweeping","optional":true,"default":14400,"type":[[["number"]]]}],"returns":[[["SweepFilter"]]],"meta":{"line":618,"file":"Util.js","path":"src/util"}},{"name":"resolveAutoArchiveMaxLimit","description":"Resolves the maximum time a guild's thread channels should automatically archive in case of no recent activity.","scope":"static","deprecated":true,"returns":[[["number"]]],"meta":{"line":629,"file":"Util.js","path":"src/util"}},{"name":"lazy","description":"Lazily evaluates a callback function (yea it's v14 :yay:)","scope":"static","examples":["const User = lazy(() => require('./User'));\nconst user = new (User())(client, data);"],"params":[{"name":"cb","description":"The callback to lazily evaluate","type":[[["function"]]]}],"returns":[[["function"]]],"meta":{"line":641,"file":"Util.js","path":"src/util"}},{"name":"transformAPIGuildForumTag","description":"Transforms an API guild forum tag to camel-cased guild forum tag.","scope":"static","params":[{"name":"tag","description":"The tag to transform","type":[[["APIGuildForumTag"]]]}],"returns":[[["GuildForumTag"]]],"meta":{"line":652,"file":"Util.js","path":"src/util"}},{"name":"transformGuildForumTag","description":"Transforms a camel-cased guild forum tag to an API guild forum tag.","scope":"static","params":[{"name":"tag","description":"The tag to transform","type":[[["GuildForumTag"]]]}],"returns":[[["APIGuildForumTag"]]],"meta":{"line":673,"file":"Util.js","path":"src/util"}},{"name":"transformAPIGuildDefaultReaction","description":"Transforms an API guild forum default reaction object to a\ncamel-cased guild forum default reaction object.","scope":"static","params":[{"name":"defaultReaction","description":"The default reaction to transform","type":[[["APIGuildForumDefaultReactionEmoji"]]]}],"returns":[[["DefaultReactionEmoji"]]],"meta":{"line":690,"file":"Util.js","path":"src/util"}},{"name":"transformGuildDefaultReaction","description":"Transforms a camel-cased guild forum default reaction object to an\nAPI guild forum default reaction object.","scope":"static","params":[{"name":"defaultReaction","description":"The default reaction to transform","type":[[["DefaultReactionEmoji"]]]}],"returns":[[["APIGuildForumDefaultReactionEmoji"]]],"meta":{"line":704,"file":"Util.js","path":"src/util"}},{"name":"getSortableGroupTypes","description":"Gets an array of the channel types that can be moved in the channel group. For example, a GuildText channel would\nreturn an array containing the types that can be ordered within the text channels (always at the top), and a voice\nchannel would return an array containing the types that can be ordered within the voice channels (always at the\nbottom).","scope":"static","params":[{"name":"type","description":"The type of the channel","type":[[["ChannelType"]]]}],"returns":[[["Array","<"],["ChannelType",">"]]],"meta":{"line":763,"file":"Util.js","path":"src/util"}},{"name":"calculateUserDefaultAvatarIndex","description":"Calculates the default avatar index for a given user id.","scope":"static","params":[{"name":"userId","description":"The user id to calculate the default avatar index for","type":[[["Snowflake"]]]}],"returns":[[["number"]]],"meta":{"line":784,"file":"Util.js","path":"src/util"}}],"meta":{"line":22,"file":"Util.js","path":"src/util"}}],"interfaces":[{"name":"InteractionResponses","description":"Interface for classes that support shared interaction response types.","methods":[{"name":"deferReply","description":"Defers the reply to this interaction.","examples":["// Defer the reply to this interaction\ninteraction.deferReply()\n .then(console.log)\n .catch(console.error)","// Defer to send an ephemeral reply later\ninteraction.deferReply({ ephemeral: true })\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the reply to this interaction","optional":true,"type":[[["InteractionDeferReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":58,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"reply","description":"Creates a reply to this interaction.\nUse the `fetchReply` option to get the bot's reply message.","examples":["// Reply to the interaction and fetch the response\ninteraction.reply({ content: 'Pong!', fetchReply: true })\n .then((message) => console.log(`Reply sent with content ${message.content}`))\n .catch(console.error);","// Create an ephemeral reply with an embed\nconst embed = new MessageEmbed().setDescription('Pong!');\n\ninteraction.reply({ embeds: [embed], ephemeral: true })\n .then(() => console.log('Reply sent.'))\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":93,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"fetchReply","description":"Fetches a reply to this interaction.","see":["Webhook#fetchMessage"],"examples":["// Fetch the initial reply to this interaction\ninteraction.fetchReply()\n .then(reply => console.log(`Replied with ${reply.content}`))\n .catch(console.error);"],"params":[{"name":"message","description":"The response to fetch","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":127,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"editReply","description":"Edits a reply to this interaction.","see":["Webhook#editMessage"],"examples":["// Edit the initial reply to this interaction\ninteraction.editReply('New content')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The new options for the message","type":[[["string"]],[["MessagePayload"]],[["InteractionEditReplyOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":148,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deleteReply","description":"Deletes a reply to this interaction.","see":["Webhook#deleteMessage"],"examples":["// Delete the initial reply to this interaction\ninteraction.deleteReply()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"message","description":"The response to delete","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":166,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"followUp","description":"Send a follow-up message to this interaction.","params":[{"name":"options","description":"The options for the reply","type":[[["string"]],[["MessagePayload"]],[["InteractionReplyOptions"]]]}],"returns":[[["Promise","<("],["Message","|"],["APIMessage",")>"]]],"meta":{"line":175,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"deferUpdate","description":"Defers an update to the message to which the component was attached.","examples":["// Defer updating and reset the component's loading state\ninteraction.deferUpdate()\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"Options for deferring the update to this interaction","optional":true,"type":[[["InteractionDeferUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":190,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"update","description":"Updates the original message of the component on which the interaction was received on.","examples":["// Remove the components from the message\ninteraction.update({\n content: \"A component interaction was received\",\n components: []\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options for the updated message","type":[[["string"]],[["MessagePayload"]],[["InteractionUpdateOptions"]]]}],"async":true,"returns":[[["Promise","<("],["Message","|"],["APIMessage","|"],["void",")>"]]],"meta":{"line":216,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"showModal","description":"Shows a modal component","params":[{"name":"modal","description":"The modal to show","type":[[["Modal"]],[["ModalOptions"]]]}],"async":true,"returns":[[["Promise","<"],["void",">"]]],"meta":{"line":243,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"awaitModalSubmit","description":"Collects a single modal submit interaction that passes the filter.\nThe Promise will reject if the time expires.","examples":["// Collect a modal submit interaction\nconst filter = (interaction) => interaction.customId === 'modal';\ninteraction.awaitModalSubmit({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was submitted!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","type":[[["AwaitModalSubmitOptions"]]]}],"returns":[[["Promise","<"],["ModalSubmitInteraction",">"]]],"meta":{"line":275,"file":"InteractionResponses.js","path":"src/structures/interfaces"}}],"meta":{"line":14,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"TextBasedChannel","description":"Interface for classes that have text-channel-like features.","props":[{"name":"messages","description":"A manager of the messages sent to this channel","type":[[["MessageManager"]]],"meta":{"line":33,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"interactions","description":"A manager of the interactions sent to this channel","type":[[["InteractionManager"]]],"meta":{"line":39,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastMessageId","description":"The channel's last message id, if one was sent","nullable":true,"type":[[["Snowflake"]]],"meta":{"line":45,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinTimestamp","description":"The timestamp when the last pinned message was pinned, if there was one","nullable":true,"type":[[["number"]]],"meta":{"line":51,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastMessage","description":"The Message object of the last message in the channel, if one was sent","readonly":true,"nullable":true,"type":[[["Message"]]],"meta":{"line":59,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"lastPinAt","description":"The date when the last pinned message was pinned, if there was one","readonly":true,"nullable":true,"type":[[["Date"]]],"meta":{"line":68,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}}],"methods":[{"name":"send","description":"Sends a message to this channel.","examples":["// Send a basic message\nchannel.send('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.error);","// Send a remote file\nchannel.send({\n files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']\n})\n .then(console.log)\n .catch(console.error);","// Send a local file\nchannel.send({\n files: [{\n attachment: 'entire/path/to/file.jpg',\n name: 'file.jpg',\n description: 'A description of the file'\n }]\n})\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"options","description":"The options to provide","type":[[["string"]],[["MessagePayload"]],[["MessageOptions"]]]}],"async":true,"returns":[[["Promise","<"],["Message",">"]]],"meta":{"line":159,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendTyping","description":"Sends a typing indicator in the channel.","examples":["// Start typing in a channel\nchannel.sendTyping();"],"async":true,"returns":{"types":[[["Promise","<"],["void",">"]]],"description":"Resolves upon the typing status being sent"},"meta":{"line":213,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageCollector","description":"Creates a Message Collector.","examples":["// Create a message collector\nconst filter = m => m.content.includes('discord');\nconst collector = channel.createMessageCollector({ filter, time: 15_000 });\ncollector.on('collect', m => console.log(`Collected ${m.content}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"The options to pass to the collector","optional":true,"default":"{}","type":[[["MessageCollectorOptions"]]]}],"returns":[[["MessageCollector"]]],"meta":{"line":228,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessages","description":"Similar to createMessageCollector but in promise form.\nResolves with a collection of messages that pass the specified filter.","examples":["// Await !vote messages\nconst filter = m => m.content.startsWith('!vote');\n// Errors: ['time'] treats ending because of the time limit as an error\nchannel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })\n .then(collected => console.log(collected.size))\n .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));"],"params":[{"name":"options","description":"Optional options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessagesOptions"]]]}],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Message",">>"]]],"meta":{"line":251,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createMessageComponentCollector","description":"Creates a component interaction collector.","examples":["// Create a button interaction collector\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nconst collector = channel.createMessageComponentCollector({ filter, time: 15_000 });\ncollector.on('collect', i => console.log(`Collected ${i.customId}`));\ncollector.on('end', collected => console.log(`Collected ${collected.size} items`));"],"params":[{"name":"options","description":"Options to send to the collector","optional":true,"default":"{}","type":[[["MessageComponentCollectorOptions"]]]}],"returns":[[["InteractionCollector"]]],"meta":{"line":275,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"awaitMessageComponent","description":"Collects a single component interaction that passes the filter.\nThe Promise will reject if the time expires.","examples":["// Collect a message component interaction\nconst filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';\nchannel.awaitMessageComponent({ filter, time: 15_000 })\n .then(interaction => console.log(`${interaction.customId} was clicked!`))\n .catch(console.error);"],"params":[{"name":"options","description":"Options to pass to the internal collector","optional":true,"default":"{}","type":[[["AwaitMessageComponentOptions"]]]}],"returns":[[["Promise","<"],["MessageComponentInteraction",">"]]],"meta":{"line":295,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"bulkDelete","description":"Bulk deletes given messages that are newer than two weeks.","examples":["// Bulk delete messages\nchannel.bulkDelete(5)\n .then(messages => console.log(`Bulk deleted ${messages.size} messages`))\n .catch(console.error);"],"params":[{"name":"messages","description":"Messages or number of messages to delete","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]],[["Array","<"],["MessageResolvable",">"]],[["number"]]]},{"name":"filterOld","description":"Filter messages to remove those which are older than two weeks automatically","optional":true,"default":false,"type":[[["boolean"]]]}],"async":true,"returns":{"types":[[["Promise","<"],["Collection","<"],["Snowflake",", ("],["Message","|"],["undefined",")>>"]]],"description":"Returns the deleted messages"},"meta":{"line":319,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"fetchWebhooks","description":"Fetches all webhooks for the channel.","examples":["// Fetch webhooks\nchannel.fetchWebhooks()\n .then(hooks => console.log(`This channel has ${hooks.size} hooks`))\n .catch(console.error);"],"returns":[[["Promise","<"],["Collection","<"],["Snowflake",", "],["Webhook",">>"]]],"meta":{"line":368,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"createWebhook","description":"Creates a webhook for the channel.","examples":["// Create a webhook for the current channel\nchannel.createWebhook('Snek', {\n avatar: 'https://i.imgur.com/mI8XcpG.jpg',\n reason: 'Needed a cool new Webhook'\n})\n .then(console.log)\n .catch(console.error)"],"params":[{"name":"name","description":"The name of the webhook","type":[[["string"]]]},{"name":"options","description":"Options for creating the webhook","optional":true,"type":[[["ChannelWebhookCreateOptions"]]]}],"returns":{"types":[[["Promise","<"],["Webhook",">"]]],"description":"Returns the created Webhook"},"meta":{"line":393,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setRateLimitPerUser","description":"Sets the rate limit per user (slowmode) for this channel.","params":[{"name":"rateLimitPerUser","description":"The new rate limit in seconds","type":[[["number"]]]},{"name":"reason","description":"Reason for changing the channel's rate limit","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":403,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"setNSFW","description":"Sets whether this channel is flagged as NSFW.","params":[{"name":"nsfw","description":"Whether the channel should be considered NSFW","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"Reason for changing the channel's NSFW flag","optional":true,"type":[[["string"]]]}],"returns":[[["Promise","<"],["this",">"]]],"meta":{"line":413,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"searchInteraction","description":"Search Slash Command (return raw data)","params":[{"name":"applicationId","description":"Application ID","type":[[["Snowflake"]]]},{"name":"type","description":"Command Type","default":"CHAT_INPUT","nullable":true,"type":[[["ApplicationCommandType"]]]}],"returns":[[["Object"]]],"meta":{"line":423,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"sendSlash","description":"Send Slash to this channel","see":["{@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/SlashCommand.md}"],"examples":["// Send a basic slash\nchannel.sendSlash('botid', 'ping')\n .then(console.log)\n .catch(console.error);","// Send a remote file\nchannel.sendSlash('botid', 'emoji upload', 'https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048', 'test')\n .then(console.log)\n .catch(console.error);"],"params":[{"name":"bot","description":"Bot user (BotID, not applicationID)","type":[[["UserResolvable"]]]},{"name":"commandString","description":"Command name (and sub / group formats)","type":[[["string"]]]},{"name":"args","description":"Command arguments","variable":true,"type":[[["any"]],[["Array","<"],["any",">"]]]}],"async":true,"returns":[[["Promise","<"],["InteractionResponse",">"]]],"meta":{"line":463,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}}],"meta":{"line":27,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}}],"typedefs":[{"name":"ApplicationCommandPermissionsUpdateData","description":"The data received in the {@link Client#event:applicationCommandPermissionsUpdate} event","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the command or global entity that was updated","type":[[["Snowflake"]]]},{"name":"guildId","description":"The id of the guild in which permissions were updated","type":[[["Snowflake"]]]},{"name":"applicationId","description":"The id of the application that owns the command or entity being updated","type":[[["Snowflake"]]]},{"name":"permissions","description":"The updated permissions","type":[[["Array","<"],["ApplicationCommandPermissions",">"]]]}],"meta":{"line":6,"file":"ApplicationCommandPermissionsUpdate.js","path":"src/client/actions"}},{"name":"ClientFetchInviteOptions","description":"Options used when fetching an invite from Discord.","type":[[["Object"]]],"props":[{"name":"guildScheduledEventId","description":"The id of the guild scheduled event to include with\nthe invite","optional":true,"type":[[["Snowflake"]]]}],"meta":{"line":564,"file":"Client.js","path":"src/client"}},{"name":"InviteGenerationOptions","description":"Options for {@link Client#generateInvite}.","type":[[["Object"]]],"props":[{"name":"scopes","description":"Scopes that should be requested","type":[[["Array","<"],["InviteScope",">"]]]},{"name":"permissions","description":"Permissions to request","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"guild","description":"Guild to preselect","optional":true,"type":[[["GuildResolvable"]]]},{"name":"disableGuildSelect","description":"Whether to disable the guild selection","optional":true,"type":[[["boolean"]]]}],"meta":{"line":784,"file":"Client.js","path":"src/client"}},{"name":"OAuth2AuthorizeOptions","type":[[["Object"]]],"props":[{"name":"guild_id","description":"Guild ID","optional":true,"type":[[["string"]]]},{"name":"permissions","description":"Permissions","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"authorize","description":"Whether to authorize or not","optional":true,"type":[[["boolean"]]]},{"name":"code","description":"2FA Code","optional":true,"type":[[["string"]]]},{"name":"webhook_channel_id","description":"Webhook Channel ID","optional":true,"type":[[["string"]]]}],"meta":{"line":899,"file":"Client.js","path":"src/client"}},{"name":"WebhookClientData","description":"The data for the webhook client containing either an id and token or just a URL","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the webhook","optional":true,"type":[[["Snowflake"]]]},{"name":"token","description":"The token of the webhook","optional":true,"type":[[["string"]]]},{"name":"url","description":"The full URL for the webhook client","optional":true,"type":[[["string"]]]}],"meta":{"line":13,"file":"WebhookClient.js","path":"src/client"}},{"name":"AutocompleteResponseChoice","type":[[["object"]]],"props":[{"name":"name","description":"The name of the choice","type":[[["string"]]]},{"name":"value","description":"The value of the choice","type":[[["string"]]]}],"meta":{"line":6,"file":"APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE.js","path":"src/client/websocket/handlers"}},{"name":"AutocompleteResponse","type":[[["object"]]],"props":[{"name":"nonce","description":"Snowflake of the data","optional":true,"type":[[["Snowflake"]]]},{"name":"choices","description":"Array of choices","optional":true,"type":[[["Array","<"],["AutocompleteResponseChoice",">"]]]}],"meta":{"line":11,"file":"APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE.js","path":"src/client/websocket/handlers"}},{"name":"GuildMembersChunk","description":"Represents the properties of a guild members chunk","type":[[["Object"]]],"props":[{"name":"index","description":"Index of the received chunk","type":[[["number"]]]},{"name":"count","description":"Number of chunks the client should receive","type":[[["number"]]]},{"name":"nonce","description":"Nonce for this chunk","nullable":true,"type":[[["string"]]]},{"name":"notFound","description":"An array of whatever could not be found\nwhen using {@link Opcodes.REQUEST_GUILD_MEMBERS}","type":[[["Array","<"],["*",">"]]]}],"meta":{"line":16,"file":"GUILD_MEMBERS_CHUNK.js","path":"src/client/websocket/handlers"}},{"name":"InteractionResponseBody","type":[[["Object"]]],"props":[{"name":"id","description":"Interaction ID","type":[[["Snowflake"]]]},{"name":"nonce","description":"nonce in POST /interactions","type":[[["Snowflake"]]]}],"meta":{"line":4,"file":"INTERACTION_CREATE.js","path":"src/client/websocket/handlers"}},{"name":"ApplicationCommandResolvable","description":"Data that resolves to give an ApplicationCommand object. This can be:\n* An ApplicationCommand object\n* A Snowflake","type":[[["ApplicationCommand"]],[["Snowflake"]]],"meta":{"line":51,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"ApplicationCommandDataResolvable","description":"Data that resolves to the data of an ApplicationCommand","type":[[["ApplicationCommandDataResolvable"]],[["SlashCommandBuilder"]],[["ContextMenuCommandBuilder"]]],"meta":{"line":59,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"BaseFetchOptions","description":"Options used to fetch data from Discord","type":[[["Object"]]],"props":[{"name":"cache","description":"Whether to cache the fetched data if it wasn't already","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":65,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"FetchApplicationCommandOptions","description":"Options used to fetch Application Commands from Discord","type":[[["BaseFetchOptions"]]],"props":[{"name":"guildId","description":"The guild's id to fetch commands for, for when the guild is not cached","optional":true,"type":[[["Snowflake"]]]},{"name":"locale","description":"The locale to use when fetching this command","optional":true,"type":[[["LocaleString"]]]},{"name":"withLocalizations","description":"Whether to fetch all localization data","optional":true,"type":[[["boolean"]]]}],"meta":{"line":72,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"ApplicationCommandPermissionData","description":"Data for setting the permissions of an application command.","type":[[["Object"]]],"props":[{"name":"id","description":"The role or user's id","type":[[["Snowflake"]]]},{"name":"type","description":"Whether this permission is for a role or a user","type":[[["ApplicationCommandPermissionType"]],[["number"]]]},{"name":"permission","description":"Whether the role or user has the permission to use this command","type":[[["boolean"]]]}],"meta":{"line":58,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"ApplicationCommandPermissions","description":"The object returned when fetching permissions for an application command.","type":[[["Object"]]],"props":[{"name":"id","description":"The role or user's id","type":[[["Snowflake"]]]},{"name":"type","description":"Whether this permission is for a role or a user","type":[[["ApplicationCommandPermissionType"]]]},{"name":"permission","description":"Whether the role or user has the permission to use this command","type":[[["boolean"]]]}],"meta":{"line":66,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"BaseApplicationCommandPermissionsOptions","description":"Options for managing permissions for one or more Application Commands\nWhen passing these options to a manager where `guildId` is `null`,\n`guild` is a required parameter","type":[[["Object"]]],"props":[{"name":"guild","description":"The guild to modify / check permissions for\nIgnored when the manager has a non-null `guildId` property","optional":true,"type":[[["GuildResolvable"]]]},{"name":"command","description":"The command to modify / check permissions for\nIgnored when the manager has a non-null `commandId` property","optional":true,"type":[[["ApplicationCommandResolvable"]]]}],"meta":{"line":74,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"GuildApplicationCommandPermissionData","description":"Data used for overwriting the permissions for all application commands in a guild.","type":[[["Object"]]],"props":[{"name":"id","description":"The command's id","type":[[["Snowflake"]]]},{"name":"permissions","description":"The permissions for this command","type":[[["Array","<"],["ApplicationCommandPermissionData",">"]]]}],"meta":{"line":118,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"SetApplicationCommandPermissionsOptions","description":"Options used to set permissions for one or more Application Commands in a guild\nOne of `command` AND `permissions`, OR `fullPermissions` is required.\n`fullPermissions` is not a valid option when passing to a manager where `commandId` is non-null","type":[[["BaseApplicationCommandPermissionsOptions"]]],"props":[{"name":"permissions","description":"The new permissions for the command","optional":true,"type":[[["Array","<"],["ApplicationCommandPermissionData",">"]]]},{"name":"fullPermissions","description":"The new permissions for all commands\nin a guild When this parameter is set, `permissions` and `command` are ignored","optional":true,"type":[[["Array","<"],["GuildApplicationCommandPermissionData",">"]]]}],"meta":{"line":125,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"AddApplicationCommandPermissionsOptions","description":"Options used to add permissions to a command\nThe `command` parameter is not optional when the managers `commandId` is `null`","type":[[["BaseApplicationCommandPermissionsOptions"]]],"props":[{"name":"permissions","description":"The permissions to add to the command","type":[[["Array","<"],["ApplicationCommandPermissionData",">"]]]}],"meta":{"line":205,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"RemoveApplicationCommandPermissionsOptions","description":"Options used to remove permissions from a command\nThe `command` parameter is not optional when the managers `commandId` is `null`","type":[[["BaseApplicationCommandPermissionsOptions"]]],"props":[{"name":"users","description":"The user(s) to remove from the command permissions\nOne of `users` or `roles` is required","optional":true,"type":[[["UserResolvable"]],[["Array","<"],["UserResolvable",">"]]]},{"name":"roles","description":"The role(s) to remove from the command permissions\nOne of `users` or `roles` is required","optional":true,"type":[[["RoleResolvable"]],[["Array","<"],["RoleResolvable",">"]]]}],"meta":{"line":253,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"HasApplicationCommandPermissionsOptions","description":"Options used to check the existence of permissions on a command\nThe `command` parameter is not optional when the managers `commandId` is `null`","type":[[["BaseApplicationCommandPermissionsOptions"]]],"props":[{"name":"permissionId","description":"The user or role to check if a permission exists for\non this command.","type":[[["UserResolvable"]],[["RoleResolvable"]]]}],"meta":{"line":338,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"AutoModerationTriggerMetadataOptions","description":"Options used to set the trigger metadata of an auto moderation rule.","type":[[["Object"]]],"props":[{"name":"keywordFilter","description":"The substrings that will be searched for in the content","optional":true,"type":[[["Array","<"],["string",">"]]]},{"name":"regexPatterns","description":"The regular expression patterns which will be matched against the content\nOnly Rust-flavored regular expressions are supported.","optional":true,"type":[[["Array","<"],["string",">"]]]},{"name":"presets","description":"The internally pre-defined wordsets which will be searched for in the content","optional":true,"type":[[["Array","<"],["AutoModerationRuleKeywordPresetType",">"]]]},{"name":"allowList","description":"The substrings that will be exempt from triggering\n{@link AutoModerationRuleTriggerType.KEYWORD} and {@link AutoModerationRuleTriggerType.KEYWORD_PRESET}","optional":true,"type":[[["Array","<"],["string",">"]]]},{"name":"mentionTotalLimit","description":"The total number of role & user mentions allowed per message","optional":true,"nullable":true,"type":[[["number"]]]},{"name":"mentionRaidProtectionEnabled","description":"Whether to automatically detect mention raids","optional":true,"type":[[["boolean"]]]}],"meta":{"line":50,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"AutoModerationActionOptions","description":"Options used to set the actions of an auto moderation rule.","type":[[["Object"]]],"props":[{"name":"type","description":"The type of this auto moderation rule action","type":[[["AutoModerationActionType"]]]},{"name":"metadata","description":"Additional metadata needed during execution\nThis property is required if using a `type` of\n{@link AutoModerationActionType.SEND_ALERT_MESSAGE} or {@link AutoModerationActionType.TIMEOUT}.","optional":true,"type":[[["AutoModerationActionMetadataOptions"]]]}],"meta":{"line":64,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"AutoModerationActionMetadataOptions","description":"Options used to set the metadata of an auto moderation rule action.","type":[[["Object"]]],"props":[{"name":"channel","description":"The channel to which content will be logged","optional":true,"type":[[["GuildTextChannelResolvable"]],[["ThreadChannel"]]]},{"name":"durationSeconds","description":"The timeout duration in seconds","optional":true,"type":[[["number"]]]},{"name":"customMessage","description":"The custom message that is shown whenever a message is blocked","optional":true,"type":[[["string"]]]}],"meta":{"line":73,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"AutoModerationRuleCreateOptions","description":"Options used to create an auto moderation rule.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the auto moderation rule","type":[[["string"]]]},{"name":"eventType","description":"The event type of the auto moderation rule","type":[[["AutoModerationRuleEventType"]]]},{"name":"triggerType","description":"The trigger type of the auto moderation rule","type":[[["AutoModerationRuleTriggerType"]]]},{"name":"triggerMetadata","description":"The trigger metadata of the auto moderation rule\nThis property is required if the following `triggerType`s are used:\n* {@link AutoModerationRuleTriggerType.KEYWORD KEYWORD}\n* {@link AutoModerationRuleTriggerType.KEYWORD_PRESET KEYWORD_PRESET}\n* {@link AutoModerationRuleTriggerType.MENTION_SPAM MENTION_SPAM}\n","optional":true,"type":[[["AutoModerationTriggerMetadataOptions"]]]},{"name":"actions","description":"The actions that will execute when the auto moderation rule is triggered","type":[[["Array","<"],["AutoModerationActionOptions",">"]]]},{"name":"enabled","description":"Whether the auto moderation rule should be enabled","optional":true,"type":[[["boolean"]]]},{"name":"exemptRoles","description":"The roles that should not be affected by the auto moderation rule","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"exemptChannels","description":"The channels that should not be affected by the auto moderation rule","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["GuildChannel","|"],["ThreadChannel",")>"]],[["Array","<"],["GuildChannelResolvable",">"]]]},{"name":"reason","description":"The reason for creating the auto moderation rule","optional":true,"type":[[["string"]]]}],"meta":{"line":81,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"AutoModerationRuleEditOptions","description":"Options used to edit an auto moderation rule.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the auto moderation rule","optional":true,"type":[[["string"]]]},{"name":"eventType","description":"The event type of the auto moderation rule","optional":true,"type":[[["AutoModerationRuleEventType"]]]},{"name":"triggerMetadata","description":"The trigger metadata of the auto moderation rule","optional":true,"type":[[["AutoModerationTriggerMetadataOptions"]]]},{"name":"actions","description":"The actions that will execute when the auto moderation rule is triggered","optional":true,"type":[[["Array","<"],["AutoModerationActionOptions",">"]]]},{"name":"enabled","description":"Whether the auto moderation rule should be enabled","optional":true,"type":[[["boolean"]]]},{"name":"exemptRoles","description":"The roles that should not be affected by the auto moderation rule","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"exemptChannels","description":"The channels that should not be affected by the auto moderation rule","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["GuildChannel","|"],["ThreadChannel",")>"]],[["Array","<"],["GuildChannelResolvable",">"]]]},{"name":"reason","description":"The reason for creating the auto moderation rule","optional":true,"type":[[["string"]]]}],"meta":{"line":152,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"AutoModerationRuleResolvable","description":"Data that can be resolved to give an AutoModerationRule object. This can be:\n* An AutoModerationRule\n* A Snowflake","type":[[["AutoModerationRule"]],[["Snowflake"]]],"meta":{"line":215,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"FetchAutoModerationRuleOptions","description":"Options used to fetch a single auto moderation rule from a guild.","type":[[["BaseFetchOptions"]]],"props":[{"name":"autoModerationRule","description":"The auto moderation rule to fetch","type":[[["AutoModerationRuleResolvable"]]]}],"meta":{"line":222,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"FetchAutoModerationRulesOptions","description":"Options used to fetch all auto moderation rules from a guild.","type":[[["Object"]]],"props":[{"name":"cache","description":"Whether to cache the fetched auto moderation rules","optional":true,"type":[[["boolean"]]]}],"meta":{"line":228,"file":"AutoModerationRuleManager.js","path":"src/managers"}},{"name":"EmojiResolvable","description":"Data that can be resolved into a GuildEmoji object. This can be:\n* A Snowflake\n* A GuildEmoji object\n* A ReactionEmoji object","type":[[["Snowflake"]],[["GuildEmoji"]],[["ReactionEmoji"]]],"meta":{"line":23,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"EmojiIdentifierResolvable","description":"Data that can be resolved to give an emoji identifier. This can be:\n* An EmojiResolvable\n* The ``, `<:name:id>`, `a:name:id` or `name:id` emoji identifier string of an emoji\n* The Unicode representation of an emoji","type":[[["string"]],[["EmojiResolvable"]]],"meta":{"line":51,"file":"BaseGuildEmojiManager.js","path":"src/managers"}},{"name":"ChannelResolvable","description":"Data that can be resolved to give a Channel object. This can be:\n* A Channel object\n* A Snowflake","type":[[["Channel"]],[["Snowflake"]]],"meta":{"line":66,"file":"ChannelManager.js","path":"src/managers"}},{"name":"FetchChannelOptions","description":"Options for fetching a channel from Discord","type":[[["BaseFetchOptions"]]],"props":[{"name":"allowUnknownGuild","description":"Allows the channel to be returned even if the guild is not in cache,\nit will not be cached. Many of the properties and methods on the returned channel will throw errors","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":91,"file":"ChannelManager.js","path":"src/managers"}},{"name":"CustomStatusOption","description":"CustomStatus Object","type":[[["Object"]]],"props":[{"name":"text","description":"Text to set","type":[[["string"]],[["null"]]]},{"name":"status","description":"The status to set: 'online', 'idle', 'dnd', 'invisible' or null.","type":[[["string"]],[["null"]]]},{"name":"emoji","description":"UnicodeEmoji, DiscordEmoji, or null.","type":[[["EmojiResolvable"]],[["null"]]]},{"name":"expires","description":"The number of seconds until the status expires, or null.","type":[[["number"]],[["null"]]]}],"meta":{"line":267,"file":"ClientUserSettingManager.js","path":"src/managers"}},{"name":"GuildBanResolvable","description":"Data that resolves to give a GuildBan object. This can be:\n* A GuildBan object\n* A User resolvable","type":[[["GuildBan"]],[["UserResolvable"]]],"meta":{"line":37,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"FetchBanOptions","description":"Options used to fetch a single ban from a guild.","type":[[["BaseFetchOptions"]]],"props":[{"name":"user","description":"The ban to fetch","type":[[["UserResolvable"]]]}],"meta":{"line":53,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"FetchBansOptions","description":"Options used to fetch multiple bans from a guild.","type":[[["Object"]]],"props":[{"name":"limit","description":"The maximum number of bans to return","optional":true,"type":[[["number"]]]},{"name":"before","description":"Consider only bans before this id","optional":true,"type":[[["Snowflake"]]]},{"name":"after","description":"Consider only bans after this id","optional":true,"type":[[["Snowflake"]]]},{"name":"cache","description":"Whether to cache the fetched bans","optional":true,"type":[[["boolean"]]]}],"meta":{"line":59,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"BanOptions","description":"Options used to ban a user from a guild.","type":[[["Object"]]],"props":[{"name":"days","description":"Number of days of messages to delete, must be between 0 and 7, inclusive\nThis property is deprecated. Use `deleteMessageSeconds` instead.","optional":true,"default":0,"type":[[["number"]]]},{"name":"deleteMessageSeconds","description":"Number of seconds of messages to delete,\nmust be between 0 and 604800 (7 days), inclusive","optional":true,"default":0,"type":[[["number"]]]},{"name":"reason","description":"The reason for the ban","optional":true,"type":[[["string"]]]}],"meta":{"line":128,"file":"GuildBanManager.js","path":"src/managers"}},{"name":"GuildChannelResolvable","description":"Data that can be resolved to give a Guild Channel object. This can be:\n* A GuildChannel object\n* A ThreadChannel object\n* A Snowflake","type":[[["GuildChannel"]],[["ThreadChannel"]],[["Snowflake"]]],"meta":{"line":79,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"GuildChannelCreateOptions","description":"Options used to create a new channel in a guild.","type":[[["CategoryCreateChannelOptions"]]],"props":[{"name":"parent","description":"Parent of the new channel","optional":true,"type":[[["CategoryChannelResolvable"]]]}],"meta":{"line":107,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"ChannelData","description":"The data for a guild channel.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the channel","optional":true,"type":[[["string"]]]},{"name":"type","description":"The type of the channel (only conversion between text and news is supported)","optional":true,"type":[[["ChannelType"]]]},{"name":"position","description":"The position of the channel","optional":true,"type":[[["number"]]]},{"name":"topic","description":"The topic of the text channel","optional":true,"type":[[["string"]]]},{"name":"nsfw","description":"Whether the channel is NSFW","optional":true,"type":[[["boolean"]]]},{"name":"bitrate","description":"The bitrate of the voice channel","optional":true,"type":[[["number"]]]},{"name":"userLimit","description":"The user limit of the voice channel","optional":true,"type":[[["number"]]]},{"name":"parent","description":"The parent of the channel","optional":true,"nullable":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"lockPermissions","description":"Lock the permissions of the channel to what the parent's permissions are","optional":true,"type":[[["boolean"]]]},{"name":"permissionOverwrites","description":"Permission overwrites for the channel","optional":true,"type":[[["Array","<"],["OverwriteResolvable",">"]],[["Collection","<"],["Snowflake",", "],["OverwriteResolvable",">"]]]},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for the channel in seconds","optional":true,"type":[[["number"]]]},{"name":"defaultAutoArchiveDuration","description":"The default auto archive duration for all new threads in this channel","optional":true,"type":[[["ThreadAutoArchiveDuration"]]]},{"name":"rtcRegion","description":"The RTC region of the channel","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"videoQualityMode","description":"The camera video quality mode of the channel","optional":true,"type":[[["VideoQualityMode"]],[["number"]]]},{"name":"flags","description":"The flags to set on the channel","optional":true,"type":[[["ChannelFlagsResolvable"]]]},{"name":"availableTags","description":"The tags to set as available in a forum channel","optional":true,"type":[[["Array","<"],["GuildForumTagData",">"]]]},{"name":"defaultReactionEmoji","description":"The emoji to set as the default reaction emoji","optional":true,"nullable":true,"type":[[["DefaultReactionEmoji"]]]},{"name":"defaultThreadRateLimitPerUser","description":"The rate limit per user (slowmode) to set on forum posts","optional":true,"type":[[["number"]]]},{"name":"defaultSortOrder","description":"The default sort order mode to set on the channel","optional":true,"nullable":true,"type":[[["SortOrderType"]]]}],"meta":{"line":251,"file":"GuildChannelManager.js","path":"src/managers"}},{"name":"CategoryChannelResolvable","description":"Data that can be resolved to give a Category Channel object. This can be:\n* A CategoryChannel object\n* A Snowflake","type":[[["CategoryChannel"]],[["Snowflake"]]],"meta":{"line":1363,"file":"Guild.js","path":"src/structures"}},{"name":"ChannelPosition","description":"The data needed for updating a channel's position.","type":[[["Object"]]],"props":[{"name":"channel","description":"Channel to update","type":[[["GuildChannel"]],[["Snowflake"]]]},{"name":"position","description":"New position for the channel","optional":true,"type":[[["number"]]]},{"name":"parent","description":"Parent channel for this channel","optional":true,"type":[[["CategoryChannelResolvable"]]]},{"name":"lockPermissions","description":"If the overwrites should be locked to the parents overwrites","optional":true,"type":[[["boolean"]]]}],"meta":{"line":1370,"file":"Guild.js","path":"src/structures"}},{"name":"GuildEmojiCreateOptions","description":"Options used for creating an emoji in a guild.","type":[[["Object"]]],"props":[{"name":"roles","description":"The roles to limit the emoji to","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"reason","description":"The reason for creating the emoji","optional":true,"type":[[["string"]]]}],"meta":{"line":28,"file":"GuildEmojiManager.js","path":"src/managers"}},{"name":"GuildForumThreadMessageCreateOptions","type":[[["BaseMessageOptions"]]],"props":[{"name":"stickers","description":"The stickers to send with the message","optional":true,"type":[[["StickerResolvable"]]]},{"name":"flags","description":"The flags to send with the message.\nOnly `SUPPRESS_EMBEDS`, `SUPPRESS_NOTIFICATIONS` and `IS_VOICE_MESSAGE` can be set.","optional":true,"type":[[["BitFieldResolvable"]]]}],"meta":{"line":19,"file":"GuildForumThreadManager.js","path":"src/managers"}},{"name":"GuildForumThreadCreateOptions","description":"Options for creating a thread.","type":[[["StartThreadOptions"]]],"props":[{"name":"message","description":"The message associated with the thread post","type":[[["GuildForumThreadMessageCreateOptions"]],[["MessagePayload"]]]},{"name":"appliedTags","description":"The tags to apply to the thread","optional":true,"type":[[["Array","<"],["Snowflake",">"]]]}],"meta":{"line":26,"file":"GuildForumThreadManager.js","path":"src/managers"}},{"name":"InviteResolvable","description":"Data that can be resolved to give an invite code. This can be:\n* An invite code\n* An invite URL","type":[[["string"]]],"meta":{"line":16,"file":"DataResolver.js","path":"src/util"}},{"name":"GuildInvitableChannelResolvable","description":"Data that can be resolved to a channel that an invite can be created on. This can be:\n* TextChannel\n* VoiceChannel\n* NewsChannel\n* StoreChannel\n* StageChannel\n* Snowflake","type":[[["TextChannel"]],[["VoiceChannel"]],[["NewsChannel"]],[["StoreChannel"]],[["StageChannel"]],[["Snowflake"]]],"meta":{"line":41,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"FetchInviteOptions","description":"Options used to fetch a single invite from a guild.","type":[[["Object"]]],"props":[{"name":"code","description":"The invite to fetch","type":[[["InviteResolvable"]]]},{"name":"cache","description":"Whether or not to cache the fetched invite","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":71,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"FetchInvitesOptions","description":"Options used to fetch all invites from a guild.","type":[[["Object"]]],"props":[{"name":"channelId","description":"The channel to fetch all invites from","optional":true,"type":[[["GuildInvitableChannelResolvable"]]]},{"name":"cache","description":"Whether or not to cache the fetched invites","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":79,"file":"GuildInviteManager.js","path":"src/managers"}},{"name":"GuildResolvable","description":"Data that resolves to give a Guild object. This can be:\n* A Guild object\n* A GuildChannel object\n* A GuildEmoji object\n* A Role object\n* A Snowflake\n* An Invite object","type":[[["Guild"]],[["GuildChannel"]],[["GuildMember"]],[["GuildEmoji"]],[["Role"]],[["Snowflake"]],[["Invite"]]],"meta":{"line":52,"file":"GuildManager.js","path":"src/managers"}},{"name":"PartialRoleData","description":"Partial data for a Role.","type":[[["Object"]]],"props":[{"name":"id","description":"The role's id, used to set channel overrides,\nthis is a placeholder and will be replaced by the API after consumption","optional":true,"type":[[["Snowflake"]],[["number"]]]},{"name":"name","description":"The name of the role","optional":true,"type":[[["string"]]]},{"name":"color","description":"The color of the role, either a hex string or a base 10 number","optional":true,"type":[[["ColorResolvable"]]]},{"name":"hoist","description":"Whether or not the role should be hoisted","optional":true,"type":[[["boolean"]]]},{"name":"position","description":"The position of the role","optional":true,"type":[[["number"]]]},{"name":"permissions","description":"The permissions of the role","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"mentionable","description":"Whether or not the role should be mentionable","optional":true,"type":[[["boolean"]]]}],"meta":{"line":63,"file":"GuildManager.js","path":"src/managers"}},{"name":"PartialOverwriteData","description":"Partial overwrite data.","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the {@link Role} or {@link User} this overwrite belongs to","type":[[["Snowflake"]],[["number"]]]},{"name":"type","description":"The type of this overwrite","optional":true,"type":[[["OverwriteType"]]]},{"name":"allow","description":"The permissions to allow","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"deny","description":"The permissions to deny","optional":true,"type":[[["PermissionResolvable"]]]}],"meta":{"line":76,"file":"GuildManager.js","path":"src/managers"}},{"name":"PartialChannelData","description":"Partial data for a Channel.","type":[[["Object"]]],"props":[{"name":"id","description":"The channel's id, used to set its parent,\nthis is a placeholder and will be replaced by the API after consumption","optional":true,"type":[[["Snowflake"]],[["number"]]]},{"name":"parentId","description":"The parent id for this channel","optional":true,"type":[[["Snowflake"]],[["number"]]]},{"name":"type","description":"The type of the channel","optional":true,"type":[[["ChannelType"]],[["number"]]]},{"name":"name","description":"The name of the channel","type":[[["string"]]]},{"name":"topic","description":"The topic of the text channel","optional":true,"type":[[["string"]]]},{"name":"nsfw","description":"Whether the channel is NSFW","optional":true,"type":[[["boolean"]]]},{"name":"bitrate","description":"The bitrate of the voice channel","optional":true,"type":[[["number"]]]},{"name":"userLimit","description":"The user limit of the channel","optional":true,"type":[[["number"]]]},{"name":"rtcRegion","description":"The RTC region of the channel","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"videoQualityMode","description":"The camera video quality mode of the channel","optional":true,"type":[[["VideoQualityMode"]],[["number"]]]},{"name":"permissionOverwrites","description":"Overwrites of the channel","optional":true,"type":[[["Array","<"],["PartialOverwriteData",">"]]]},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) of the channel in seconds","optional":true,"type":[[["number"]]]}],"meta":{"line":85,"file":"GuildManager.js","path":"src/managers"}},{"name":"GuildCreateOptions","description":"Options used to create a guild.","type":[[["Object"]]],"props":[{"name":"afkChannelId","description":"The AFK channel's id","optional":true,"type":[[["Snowflake"]],[["number"]]]},{"name":"afkTimeout","description":"The AFK timeout in seconds","optional":true,"type":[[["number"]]]},{"name":"channels","description":"The channels for this guild","optional":true,"default":"[]","type":[[["Array","<"],["PartialChannelData",">"]]]},{"name":"defaultMessageNotifications","description":"The default message notifications\nfor the guild","optional":true,"type":[[["DefaultMessageNotificationLevel"]],[["number"]]]},{"name":"explicitContentFilter","description":"The explicit content filter level for the guild","optional":true,"type":[[["ExplicitContentFilterLevel"]]]},{"name":"icon","description":"The icon for the guild","optional":true,"default":null,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"roles","description":"The roles for this guild,\nthe first element of this array is used to change properties of the guild's everyone role.","optional":true,"default":"[]","type":[[["Array","<"],["PartialRoleData",">"]]]},{"name":"systemChannelId","description":"The system channel's id","optional":true,"type":[[["Snowflake"]],[["number"]]]},{"name":"systemChannelFlags","description":"The flags of the system channel","optional":true,"type":[[["SystemChannelFlagsResolvable"]]]},{"name":"verificationLevel","description":"The verification level for the guild","optional":true,"type":[[["VerificationLevel"]]]}],"meta":{"line":146,"file":"GuildManager.js","path":"src/managers"}},{"name":"FetchGuildOptions","description":"Options used to fetch a single guild.","type":[[["BaseFetchOptions"]]],"props":[{"name":"guild","description":"The guild to fetch","type":[[["GuildResolvable"]]]},{"name":"withCounts","description":"Whether the approximate member and presence counts should be returned","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":266,"file":"GuildManager.js","path":"src/managers"}},{"name":"FetchGuildsOptions","description":"Options used to fetch multiple guilds.","type":[[["Object"]]],"props":[{"name":"before","description":"Get guilds before this guild id","optional":true,"type":[[["Snowflake"]]]},{"name":"after","description":"Get guilds after this guild id","optional":true,"type":[[["Snowflake"]]]},{"name":"limit","description":"Maximum number of guilds to request (1-200)","optional":true,"default":200,"type":[[["number"]]]}],"meta":{"line":273,"file":"GuildManager.js","path":"src/managers"}},{"name":"GuildMemberResolvable","description":"Data that resolves to give a GuildMember object. This can be:\n* A GuildMember object\n* A User resolvable","type":[[["GuildMember"]],[["UserResolvable"]]],"meta":{"line":44,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"AddGuildMemberOptions","description":"Options used to add a user to a guild using OAuth2.","type":[[["Object"]]],"props":[{"name":"accessToken","description":"An OAuth2 access token for the user with the `guilds.join` scope granted to the\nbot's application","type":[[["string"]]]},{"name":"nick","description":"The nickname to give to the member (requires `MANAGE_NICKNAMES`)","optional":true,"type":[[["string"]]]},{"name":"roles","description":"The roles to add to the member\n(requires `MANAGE_ROLES`)","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"mute","description":"Whether the member should be muted (requires `MUTE_MEMBERS`)","optional":true,"type":[[["boolean"]]]},{"name":"deaf","description":"Whether the member should be deafened (requires `DEAFEN_MEMBERS`)","optional":true,"type":[[["boolean"]]]},{"name":"force","description":"Whether to skip the cache check and call the API directly","optional":true,"type":[[["boolean"]]]},{"name":"fetchWhenExisting","description":"Whether to fetch the user if not cached and already a member","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":76,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"FetchMemberOptions","description":"Options used to fetch a single member from a guild.","type":[[["BaseFetchOptions"]]],"props":[{"name":"user","description":"The user to fetch","type":[[["UserResolvable"]]]}],"meta":{"line":140,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"FetchMembersOptions","description":"Options used to fetch multiple members from a guild.","type":[[["Object"]]],"props":[{"name":"user","description":"The user(s) to fetch","type":[[["UserResolvable"]],[["Array","<"],["UserResolvable",">"]]]},{"name":"query","description":"Limit fetch to members with similar usernames","nullable":true,"type":[[["string"]]]},{"name":"limit","description":"Maximum number of members to request","optional":true,"default":0,"type":[[["number"]]]},{"name":"withPresences","description":"Whether or not to include the presences","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"time","description":"Timeout for receipt of members","optional":true,"default":"120e3","type":[[["number"]]]},{"name":"nonce","description":"Nonce for this request (32 characters max - default to base 16 now timestamp)","nullable":true,"type":[[["string"]]]},{"name":"force","description":"Whether to skip the cache check and request the API","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":146,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"GuildSearchMembersOptions","description":"Options used for searching guild members.","type":[[["Object"]]],"props":[{"name":"query","description":"Filter members whose username or nickname start with this query","type":[[["string"]]]},{"name":"limit","description":"Maximum number of members to search","optional":true,"default":1,"type":[[["number"]]]},{"name":"cache","description":"Whether or not to cache the fetched member(s)","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":238,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"GuildListMembersOptions","description":"Options used for listing guild members.","type":[[["Object"]]],"props":[{"name":"after","description":"Limit fetching members to those with an id greater than the supplied id","optional":true,"type":[[["Snowflake"]]]},{"name":"limit","description":"Maximum number of members to list","optional":true,"default":1,"type":[[["number"]]]},{"name":"cache","description":"Whether or not to cache the fetched member(s)","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":256,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"GuildMemberEditData","description":"The data for editing a guild member.","type":[[["Object"]]],"props":[{"name":"nick","description":"The nickname to set for the member","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"roles","description":"The roles or role ids to apply","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]},{"name":"mute","description":"Whether or not the member should be muted","optional":true,"type":[[["boolean"]]]},{"name":"deaf","description":"Whether or not the member should be deafened","optional":true,"type":[[["boolean"]]]},{"name":"channel","description":"Channel to move the member to\n(if they are connected to voice), or `null` if you want to disconnect them from voice","optional":true,"type":[[["GuildVoiceChannelResolvable"]],[["null"]]]},{"name":"communicationDisabledUntil","description":"The date or timestamp\nfor the member's communication to be disabled until. Provide `null` to enable communication again.","optional":true,"type":[[["DateResolvable"]],[["null"]]]},{"name":"flags","description":"The flags to set for the member","optional":true,"type":[[["GuildMemberFlagsResolvable"]]]},{"name":"avatar","description":"The new guild avatar","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"banner","description":"The new guild banner","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"bio","description":"The new guild about me","optional":true,"nullable":true,"type":[[["string"]]]}],"meta":{"line":274,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"GuildPruneMembersOptions","description":"Options used for pruning guild members.\nIt's recommended to set {@link GuildPruneMembersOptions#count options.count}\nto `false` for large guilds.","type":[[["Object"]]],"props":[{"name":"days","description":"Number of days of inactivity required to kick","optional":true,"default":7,"type":[[["number"]]]},{"name":"dry","description":"Get the number of users that will be kicked, without actually kicking them","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"count","description":"Whether or not to return the number of users that have been kicked.","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"roles","description":"Array of roles to bypass the \"...and no roles\" constraint when pruning","optional":true,"type":[[["Array","<"],["RoleResolvable",">"]]]},{"name":"reason","description":"Reason for this prune","optional":true,"type":[[["string"]]]}],"meta":{"line":349,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"BruteforceOptions","description":"Options used to fetch multiple members from a guild.","type":[[["Object"]]],"props":[{"name":"limit","description":"Maximum number of members per request","optional":true,"default":100,"type":[[["number"]]]},{"name":"delay","description":"Timeout for new requests in ms","optional":true,"default":500,"type":[[["number"]]]},{"name":"depth","description":"Permutations length","optional":true,"default":1,"type":[[["number"]]]}],"meta":{"line":474,"file":"GuildMemberManager.js","path":"src/managers"}},{"name":"GuildScheduledEventResolvable","description":"Data that resolves to give a GuildScheduledEvent object. This can be:\n* A Snowflake\n* A GuildScheduledEvent object","type":[[["Snowflake"]],[["GuildScheduledEvent"]]],"meta":{"line":31,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"GuildScheduledEventCreateOptions","description":"Options used to create a guild scheduled event.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the guild scheduled event","type":[[["string"]]]},{"name":"scheduledStartTime","description":"The time to schedule the event at","type":[[["DateResolvable"]]]},{"name":"scheduledEndTime","description":"The time to end the event at\nThis is required if `entityType` is 'EXTERNAL'","optional":true,"type":[[["DateResolvable"]]]},{"name":"privacyLevel","description":"The privacy level of the guild scheduled event","type":[[["PrivacyLevel"]],[["number"]]]},{"name":"entityType","description":"The scheduled entity type of the event","type":[[["GuildScheduledEventEntityType"]],[["number"]]]},{"name":"description","description":"The description of the guild scheduled event","optional":true,"type":[[["string"]]]},{"name":"channel","description":"The channel of the guild scheduled event\nThis is required if `entityType` is 'STAGE_INSTANCE' or `VOICE`","optional":true,"type":[[["GuildVoiceChannelResolvable"]]]},{"name":"entityMetadata","description":"The entity metadata of the\nguild scheduled event\nThis is required if `entityType` is 'EXTERNAL'","optional":true,"type":[[["GuildScheduledEventEntityMetadataOptions"]]]},{"name":"image","description":"The cover image of the guild scheduled event","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"reason","description":"The reason for creating the guild scheduled event","optional":true,"type":[[["string"]]]}],"meta":{"line":38,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"GuildScheduledEventEntityMetadataOptions","description":"Options used to set entity metadata of a guild scheduled event.","type":[[["Object"]]],"props":[{"name":"location","description":"The location of the guild scheduled event\nThis is required if `entityType` is 'EXTERNAL'","optional":true,"type":[[["string"]]]}],"meta":{"line":57,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"FetchGuildScheduledEventOptions","description":"Options used to fetch a single guild scheduled event from a guild.","type":[[["BaseFetchOptions"]]],"props":[{"name":"guildScheduledEvent","description":"The guild scheduled event to fetch","type":[[["GuildScheduledEventResolvable"]]]},{"name":"withUserCount","description":"Whether to fetch the number of users subscribed to the scheduled event","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":115,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"FetchGuildScheduledEventsOptions","description":"Options used to fetch multiple guild scheduled events from a guild.","type":[[["Object"]]],"props":[{"name":"cache","description":"Whether or not to cache the fetched guild scheduled events","optional":true,"type":[[["boolean"]]]},{"name":"withUserCount","description":"Whether to fetch the number of users subscribed to each scheduled event\nshould be returned","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":122,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"GuildScheduledEventEditOptions","description":"Options used to edit a guild scheduled event.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the guild scheduled event","optional":true,"type":[[["string"]]]},{"name":"scheduledStartTime","description":"The time to schedule the event at","optional":true,"type":[[["DateResolvable"]]]},{"name":"scheduledEndTime","description":"The time to end the event at","optional":true,"type":[[["DateResolvable"]]]},{"name":"privacyLevel","description":"The privacy level of the guild scheduled event","optional":true,"type":[[["PrivacyLevel"]],[["number"]]]},{"name":"entityType","description":"The scheduled entity type of the event","optional":true,"type":[[["GuildScheduledEventEntityType"]],[["number"]]]},{"name":"description","description":"The description of the guild scheduled event","optional":true,"type":[[["string"]]]},{"name":"channel","description":"The channel of the guild scheduled event","optional":true,"nullable":true,"type":[[["GuildVoiceChannelResolvable"]]]},{"name":"status","description":"The status of the guild scheduled event","optional":true,"type":[[["GuildScheduledEventStatus"]],[["number"]]]},{"name":"entityMetadata","description":"The entity metadata of the\nguild scheduled event\nThis can be modified only if `entityType` of the `GuildScheduledEvent` to be edited is 'EXTERNAL'","optional":true,"type":[[["GuildScheduledEventEntityMetadataOptions"]]]},{"name":"image","description":"The cover image of the guild scheduled event","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"reason","description":"The reason for editing the guild scheduled event","optional":true,"type":[[["string"]]]}],"meta":{"line":165,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"FetchGuildScheduledEventSubscribersOptions","description":"Options used to fetch subscribers of a guild scheduled event","type":[[["Object"]]],"props":[{"name":"limit","description":"The maximum numbers of users to fetch","optional":true,"type":[[["number"]]]},{"name":"withMember","description":"Whether to fetch guild member data of the users","optional":true,"type":[[["boolean"]]]},{"name":"before","description":"Consider only users before this user id","optional":true,"type":[[["Snowflake"]]]},{"name":"after","description":"Consider only users after this user id\nIf both `before` and `after` are provided, only `before` is respected","optional":true,"type":[[["Snowflake"]]]}],"meta":{"line":250,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"GuildScheduledEventUser","description":"Represents a subscriber of a {@link GuildScheduledEvent}","type":[[["Object"]]],"props":[{"name":"guildScheduledEventId","description":"The id of the guild scheduled event which the user subscribed to","type":[[["Snowflake"]]]},{"name":"user","description":"The user that subscribed to the guild scheduled event","type":[[["User"]]]},{"name":"member","description":"The guild member associated with the user, if any","nullable":true,"type":[[["GuildMember"]]]}],"meta":{"line":260,"file":"GuildScheduledEventManager.js","path":"src/managers"}},{"name":"GuildStickerCreateOptions","description":"Options for creating a guild sticker.","type":[[["Object"]]],"props":[{"name":"description","description":"The description for the sticker","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"reason","description":"Reason for creating the sticker","optional":true,"type":[[["string"]]]}],"meta":{"line":34,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"StickerResolvable","description":"Data that resolves to give a Sticker object. This can be:\n* A Sticker object\n* A Snowflake","type":[[["Sticker"]],[["Snowflake"]]],"meta":{"line":72,"file":"GuildStickerManager.js","path":"src/managers"}},{"name":"GuildTextThreadCreateOptions","description":"Options for creating a thread. Only one of `startMessage` or `type` can be defined.","type":[[["StartThreadOptions"]]],"props":[{"name":"startMessage","description":"The message to start a thread from. If this is defined then type\nof thread gets automatically defined and cannot be changed. The provided `type` field will be ignored","optional":true,"type":[[["MessageResolvable"]]]},{"name":"type","description":"The type of thread to create. Defaults to `GUILD_PUBLIC_THREAD` if\ncreated in a {@link TextChannel} When creating threads in a {@link NewsChannel} this is ignored and is always\n`GUILD_NEWS_THREAD`","optional":true,"type":[[["ThreadChannelTypes"]],[["number"]]]},{"name":"invitable","description":"Whether non-moderators can add other non-moderators to the thread\nCan only be set when type will be `GUILD_PRIVATE_THREAD`","optional":true,"type":[[["boolean"]]]},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for the new channel in seconds","optional":true,"type":[[["number"]]]}],"meta":{"line":19,"file":"GuildTextThreadManager.js","path":"src/managers"}},{"name":"ChannelLogsQueryOptions","description":"The parameters to pass in when requesting previous messages from a channel. `around`, `before` and\n`after` are mutually exclusive. All the parameters are optional.","type":[[["Object"]]],"props":[{"name":"limit","description":"Number of messages to acquire","optional":true,"default":50,"type":[[["number"]]]},{"name":"before","description":"The message's id to get the messages that were posted before it","optional":true,"type":[[["Snowflake"]]]},{"name":"after","description":"The message's id to get the messages that were posted after it","optional":true,"type":[[["Snowflake"]]]},{"name":"around","description":"The message's id to get the messages that were posted around it","optional":true,"type":[[["Snowflake"]]]}],"meta":{"line":35,"file":"MessageManager.js","path":"src/managers"}},{"name":"MessageResolvable","description":"Data that can be resolved to a Message object. This can be:\n* A Message\n* A Snowflake","type":[[["Message"]],[["Snowflake"]]],"meta":{"line":91,"file":"MessageManager.js","path":"src/managers"}},{"name":"MessageSearchOptions","type":[[["object"]]],"props":[{"name":"authors","description":"An array of author to filter by","optional":true,"type":[[["Array","<"],["UserResolvable",">"]]]},{"name":"mentions","description":"An array of user (mentioned) to filter by","optional":true,"type":[[["Array","<"],["UserResolvable",">"]]]},{"name":"content","description":"A messageContent to filter by","optional":true,"type":[[["string"]]]},{"name":"maxId","description":"The maximum Message ID to filter by","optional":true,"type":[[["Snowflake"]]]},{"name":"minId","description":"The minimum Message ID to filter by","optional":true,"type":[[["Snowflake"]]]},{"name":"channels","description":"An array of channel to filter by","optional":true,"type":[[["Array","<"],["TextChannelResolvable",">"]]]},{"name":"pinned","description":"Whether to filter by pinned messages","optional":true,"type":[[["boolean"]]]},{"name":"has","description":"Message has: `link`, `embed`, `file`, `video`, `image`, or `sound`","optional":true,"type":[[["Array","<"],["string",">"]]]},{"name":"nsfw","description":"Whether to filter by NSFW channels","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"offset","description":"The number of messages to skip (for pagination, 25 results per page)","optional":true,"default":0,"type":[[["number"]]]},{"name":"limit","description":"The number of messages to fetch\nThe maximum limit allowed is 25.","optional":true,"default":25,"type":[[["number"]]]},{"name":"sortBy","description":"The order to sort by (`timestamp` or `relevance`)","optional":true,"type":[[["string"]]]},{"name":"sortOrder","description":"The order to return results in (`asc` or `desc`)\nThe default sort is timestamp in descending order desc (newest first).","optional":true,"type":[[["string"]]]}],"meta":{"line":274,"file":"MessageManager.js","path":"src/managers"}},{"name":"MessageSearchResult","type":[[["object"]]],"props":[{"name":"messages","description":"A collection of found messages","type":[[["Collection","<"],["Snowflake",", "],["Message",">"]]]},{"name":"total","description":"The total number of messages that match the search criteria","type":[[["number"]]]}],"meta":{"line":293,"file":"MessageManager.js","path":"src/managers"}},{"name":"GuildChannelOverwriteOptions","description":"Extra information about the overwrite","type":[[["Object"]]],"props":[{"name":"reason","description":"Reason for creating/editing this overwrite","optional":true,"type":[[["string"]]]},{"name":"type","description":"The type of overwrite, either `0` for a role or `1` for a member. Use this to bypass\nautomatic resolution of type that results in an error for uncached structure","optional":true,"type":[[["number"]]]}],"meta":{"line":74,"file":"PermissionOverwriteManager.js","path":"src/managers"}},{"name":"PresenceResolvable","description":"Data that can be resolved to a Presence object. This can be:\n* A Presence\n* A UserResolvable\n* A Snowflake","type":[[["Presence"]],[["UserResolvable"]],[["Snowflake"]]],"meta":{"line":25,"file":"PresenceManager.js","path":"src/managers"}},{"name":"MessageReactionResolvable","description":"Data that can be resolved to a MessageReaction object. This can be:\n* A MessageReaction\n* A Snowflake\n* The Unicode representation of an emoji","type":[[["MessageReaction"]],[["Snowflake"]]],"meta":{"line":31,"file":"ReactionManager.js","path":"src/managers"}},{"name":"FetchReactionUsersOptions","description":"Options used to fetch users who gave a reaction.","type":[[["Object"]]],"props":[{"name":"limit","description":"The maximum amount of users to fetch, defaults to `100`","optional":true,"default":100,"type":[[["number"]]]},{"name":"after","description":"Limit fetching users to those with an id greater than the supplied id","optional":true,"type":[[["Snowflake"]]]}],"meta":{"line":29,"file":"ReactionUserManager.js","path":"src/managers"}},{"name":"RoleResolvable","description":"Data that can be resolved to a Role object. This can be:\n* A Role\n* A Snowflake","type":[[["Role"]],[["Snowflake"]]],"meta":{"line":76,"file":"RoleManager.js","path":"src/managers"}},{"name":"CreateRoleOptions","description":"Options used to create a new role.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the new role","optional":true,"type":[[["string"]]]},{"name":"color","description":"The data to create the role with","optional":true,"type":[[["ColorResolvable"]]]},{"name":"hoist","description":"Whether or not the new role should be hoisted","optional":true,"type":[[["boolean"]]]},{"name":"permissions","description":"The permissions for the new role","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"position","description":"The position of the new role","optional":true,"type":[[["number"]]]},{"name":"mentionable","description":"Whether or not the new role should be mentionable","optional":true,"type":[[["boolean"]]]},{"name":"icon","description":"The icon for the role\nThe `EmojiResolvable` should belong to the same guild as the role.\nIf not, pass the emoji's URL directly","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]],[["EmojiResolvable"]]]},{"name":"unicodeEmoji","description":"The unicode emoji for the role","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"reason","description":"The reason for creating this role","optional":true,"type":[[["string"]]]}],"meta":{"line":101,"file":"RoleManager.js","path":"src/managers"}},{"name":"GuildRolePosition","description":"The data needed for updating a guild role's position.","type":[[["Object"]]],"props":[{"name":"role","description":"The role's id","type":[[["RoleResolvable"]]]},{"name":"position","description":"The position to update","type":[[["number"]]]}],"meta":{"line":1403,"file":"Guild.js","path":"src/structures"}},{"name":"StageInstanceCreateOptions","description":"Options used to create a stage instance.","type":[[["Object"]]],"props":[{"name":"topic","description":"The topic of the stage instance","type":[[["string"]]]},{"name":"privacyLevel","description":"The privacy level of the stage instance","optional":true,"type":[[["PrivacyLevel"]],[["number"]]]},{"name":"sendStartNotification","description":"Whether to notify `@everyone` that the stage instance has started","optional":true,"type":[[["boolean"]]]},{"name":"guildScheduledEvent","description":"The guild scheduled event associated with the stage instance","optional":true,"type":[[["GuildScheduledEventResolvable"]]]}],"meta":{"line":29,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"StageChannelResolvable","description":"Data that can be resolved to a Stage Channel object. This can be:\n* A StageChannel\n* A Snowflake","type":[[["StageChannel"]],[["Snowflake"]]],"meta":{"line":39,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"StageInstanceEditOptions","description":"Options used to edit an existing stage instance.","type":[[["Object"]]],"props":[{"name":"topic","description":"The new topic of the stage instance","optional":true,"type":[[["string"]]]},{"name":"privacyLevel","description":"The new privacy level of the stage instance","optional":true,"type":[[["PrivacyLevel"]],[["number"]]]}],"meta":{"line":106,"file":"StageInstanceManager.js","path":"src/managers"}},{"name":"ThreadChannelResolvable","description":"Data that can be resolved to a Thread Channel object. This can be:\n* A ThreadChannel object\n* A Snowflake","type":[[["ThreadChannel"]],[["Snowflake"]]],"meta":{"line":36,"file":"ThreadManager.js","path":"src/managers"}},{"name":"FetchThreadsOptions","description":"Options for fetching multiple threads.","type":[[["Object"]]],"props":[{"name":"archived","description":"The options used to fetch archived threads","optional":true,"type":[[["FetchArchivedThreadOptions"]]]}],"meta":{"line":61,"file":"ThreadManager.js","path":"src/managers"}},{"name":"DateResolvable","description":"Data that can be resolved to a Date object. This can be:\n* A Date object\n* A number representing a timestamp\n* An [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) string","type":[[["Date"]],[["number"]],[["string"]]],"meta":{"line":90,"file":"ThreadManager.js","path":"src/managers"}},{"name":"FetchArchivedThreadOptions","description":"The options used to fetch archived threads.","type":[[["Object"]]],"props":[{"name":"type","description":"The type of threads to fetch, either `public` or `private`","optional":true,"default":"'public'","type":[[["string"]]]},{"name":"fetchAll","description":"Whether to fetch **all** archived threads when type is `private`.\nRequires `MANAGE_THREADS` if true","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"before","description":"Only return threads that were archived before this Date\nor Snowflake. Must be a {@link ThreadChannelResolvable} when type is `private` and fetchAll is `false`","optional":true,"type":[[["DateResolvable"]],[["ThreadChannelResolvable"]]]},{"name":"limit","description":"Maximum number of threads to return","optional":true,"type":[[["number"]]]}],"meta":{"line":98,"file":"ThreadManager.js","path":"src/managers"}},{"name":"FetchedThreads","description":"The data returned from a thread fetch that returns multiple threads.","type":[[["Object"]]],"props":[{"name":"threads","description":"The threads that were fetched, with any members returned","type":[[["Collection","<"],["Snowflake",", "],["ThreadChannel",">"]]]},{"name":"hasMore","description":"Whether there are potentially additional threads that require a subsequent call","nullable":true,"type":[[["boolean"]]]}],"meta":{"line":109,"file":"ThreadManager.js","path":"src/managers"}},{"name":"FetchChannelThreadsOptions","description":"Discord.js self-bot specific options field for fetching active threads.","type":[[["Object"]]],"props":[{"name":"archived","description":"Whether to fetch archived threads (default is false)","optional":true,"type":[[["boolean"]]]},{"name":"sortBy","description":"The order in which the threads should be fetched in (default is last_message_time)","optional":true,"type":[[["string"]]]},{"name":"sortOrder","description":"How the threads should be ordered (default is desc)","optional":true,"type":[[["string"]]]},{"name":"limit","description":"The maximum number of threads to return (default is 25)","optional":true,"type":[[["number"]]]},{"name":"offset","description":"The number of threads to offset fetching (useful when making multiple fetches) (default is 0)","optional":true,"type":[[["number"]]]}],"meta":{"line":152,"file":"ThreadManager.js","path":"src/managers"}},{"name":"ThreadMemberResolvable","description":"Data that resolves to give a ThreadMember object. This can be:\n* A ThreadMember object\n* A User resolvable","type":[[["ThreadMember"]],[["UserResolvable"]]],"meta":{"line":60,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"FetchThreadMemberOptions","description":"Options used to fetch a thread member.","type":[[["BaseFetchOptions"]]],"props":[{"name":"withMember","description":"Whether to also return the guild member associated with this thread member","optional":true,"type":[[["boolean"]]]}],"meta":{"line":135,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"FetchThreadMembersWithGuildMemberDataOptions","description":"Options used to fetch multiple thread members with guild member data.\nWith `withMember` set to `true`, pagination is enabled.","type":[[["Object"]]],"props":[{"name":"withMember","description":"Whether to also return the guild member data","type":[[["true"]]]},{"name":"after","description":"Consider only thread members after this id","optional":true,"type":[[["Snowflake"]]]},{"name":"limit","description":"The maximum number of thread members to return","optional":true,"type":[[["number"]]]},{"name":"cache","description":"Whether to cache the fetched thread members and guild members","optional":true,"type":[[["boolean"]]]}],"meta":{"line":141,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"FetchThreadMembersWithoutGuildMemberDataOptions","description":"Options used to fetch multiple thread members without guild member data.","type":[[["Object"]]],"props":[{"name":"withMember","description":"Whether to also return the guild member data","optional":true,"type":[[["false"]]]},{"name":"cache","description":"Whether to cache the fetched thread members","optional":true,"type":[[["boolean"]]]}],"meta":{"line":151,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"FetchThreadMembersOptions","description":"Options used to fetch multiple thread members.","type":[[["FetchThreadMembersWithGuildMemberDataOptions"]],[["FetchThreadMembersWithoutGuildMemberDataOptions"]]],"meta":{"line":158,"file":"ThreadMemberManager.js","path":"src/managers"}},{"name":"UserResolvable","description":"Data that resolves to give a User object. This can be:\n* A User object\n* A Snowflake\n* A Message object (resolves to the message author)\n* A GuildMember object\n* A ThreadMember object","type":[[["User"]],[["Snowflake"]],[["Message"]],[["GuildMember"]],[["ThreadMember"]]],"meta":{"line":25,"file":"UserManager.js","path":"src/managers"}},{"name":"Captcha","type":[[["Object"]]],"props":[{"name":"captcha_key","description":"['message']","type":[[["Array","<"],["string",">"]]]},{"name":"captcha_sitekey","description":"Captcha sitekey (hcaptcha)","type":[[["string"]]]},{"name":"captcha_service","description":"hcaptcha","type":[[["string"]]]},{"name":"captcha_rqdata","optional":true,"type":[[["string"]]]},{"name":"captcha_rqtoken","optional":true,"type":[[["string"]]]}],"meta":{"line":38,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"HTTPErrorData","description":"The HTTP data that was sent to Discord","type":[[["Object"]]],"props":[{"name":"json","description":"The JSON data that was sent","type":[["*"]]},{"name":"files","description":"The files that were sent with this request, if any","type":[[["Array","<"],["HTTPAttachmentData",">"]]]}],"meta":{"line":35,"file":"HTTPError.js","path":"src/rest"}},{"name":"HTTPAttachmentData","description":"The attachment data that is sent to Discord","type":[[["Object"]]],"props":[{"name":"attachment","description":"The source of this attachment data","type":[[["string"]],[["Buffer"]],[["Stream"]]]},{"name":"name","description":"The file name","type":[[["string"]]]},{"name":"file","description":"The file buffer","type":[[["Buffer"]],[["Stream"]]]}],"meta":{"line":42,"file":"HTTPError.js","path":"src/rest"}},{"name":"APIRequest","description":"Represents a request that will or has been made to the Discord API","type":[[["Object"]]],"props":[{"name":"method","description":"The HTTP method used in this request","type":[[["HTTPMethod"]]]},{"name":"path","description":"The full path used to make the request","type":[[["string"]]]},{"name":"route","description":"The API route identifying the rate limit for this request","type":[[["string"]]]},{"name":"options","description":"Additional options for this request","type":[[["Object"]]]},{"name":"retries","description":"The number of times this request has been attempted","type":[[["number"]]]}],"meta":{"line":177,"file":"RequestHandler.js","path":"src/rest"}},{"name":"InvalidRequestWarningData","type":[[["Object"]]],"props":[{"name":"count","description":"Number of invalid requests that have been made in the window","type":[[["number"]]]},{"name":"remainingTime","description":"Time in milliseconds remaining before the count resets","type":[[["number"]]]}],"meta":{"line":291,"file":"RequestHandler.js","path":"src/rest"}},{"name":"ShardRespawnOptions","description":"Options used to respawn a shard.","type":[[["Object"]]],"props":[{"name":"delay","description":"How long to wait between killing the process/worker and\nrestarting it (in milliseconds)","optional":true,"default":500,"type":[[["number"]]]},{"name":"timeout","description":"The amount in milliseconds to wait until the {@link Client}\nhas become ready before resolving (`-1` or `Infinity` for no wait)","optional":true,"default":30000,"type":[[["number"]]]}],"meta":{"line":191,"file":"Shard.js","path":"src/sharding"}},{"name":"ShardingManagerMode","description":"The mode to spawn shards with for a {@link ShardingManager}. Can be either one of:\n* 'process' to use child processes\n* 'worker' to use [Worker threads](https://nodejs.org/api/worker_threads.html)","type":[[["string"]]],"meta":{"line":23,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"ShardingManagerOptions","description":"The options to spawn shards with for a {@link ShardingManager}.","type":[[["Object"]]],"props":[{"name":"totalShards","description":"Number of total shards of all shard managers or \"auto\"","optional":true,"default":"'auto'","type":[[["string"]],[["number"]]]},{"name":"shardList","description":"List of shards to spawn or \"auto\"","optional":true,"default":"'auto'","type":[[["string"]],[["Array","<"],["number",">"]]]},{"name":"mode","description":"Which mode to use for shards","optional":true,"default":"'process'","type":[[["ShardingManagerMode"]]]},{"name":"respawn","description":"Whether shards should automatically respawn upon exiting","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"shardArgs","description":"Arguments to pass to the shard script when spawning\n(only available when mode is set to 'process')","optional":true,"default":"[]","type":[[["Array","<"],["string",">"]]]},{"name":"execArgv","description":"Arguments to pass to the shard script executable when spawning\n(only available when mode is set to 'process')","optional":true,"default":"[]","type":[[["Array","<"],["string",">"]]]},{"name":"token","description":"Token to use for automatic shard count and passing to shards","optional":true,"type":[[["string"]]]}],"meta":{"line":30,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"MultipleShardSpawnOptions","description":"Options used to spawn multiple shards.","type":[[["Object"]]],"props":[{"name":"amount","description":"Number of shards to spawn","optional":true,"default":"this.totalShards","type":[[["number"]],[["string"]]]},{"name":"delay","description":"How long to wait in between spawning each shard (in milliseconds)","optional":true,"default":5500,"type":[[["number"]]]},{"name":"timeout","description":"The amount in milliseconds to wait until the {@link Client} has become ready","optional":true,"default":30000,"type":[[["number"]]]}],"meta":{"line":170,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"BroadcastEvalOptions","description":"Options for {@link ShardingManager#broadcastEval} and {@link ShardClientUtil#broadcastEval}.","type":[[["Object"]]],"props":[{"name":"shard","description":"Shard to run script on, all if undefined","optional":true,"type":[[["number"]]]},{"name":"context","description":"The JSON-serializable values to call the script with","optional":true,"type":[["*"]]}],"meta":{"line":237,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"MultipleShardRespawnOptions","description":"Options used to respawn all shards.","type":[[["Object"]]],"props":[{"name":"shardDelay","description":"How long to wait between shards (in milliseconds)","optional":true,"default":5000,"type":[[["number"]]]},{"name":"respawnDelay","description":"How long to wait between killing a shard's process and restarting it\n(in milliseconds)","optional":true,"default":500,"type":[[["number"]]]},{"name":"timeout","description":"The amount in milliseconds to wait for a shard to become ready before\ncontinuing to another (`-1` or `Infinity` for no wait)","optional":true,"default":30000,"type":[[["number"]]]}],"meta":{"line":292,"file":"ShardingManager.js","path":"src/sharding"}},{"name":"ApplicationCommandData","description":"Data for creating or editing an application command.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the command","type":[[["string"]]]},{"name":"nameLocalizations","description":"The localizations for the command name","optional":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]]},{"name":"description","description":"The description of the command","type":[[["string"]]]},{"name":"descriptionLocalizations","description":"The localizations for the command description","optional":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]]},{"name":"type","description":"The type of the command","optional":true,"type":[[["ApplicationCommandType"]]]},{"name":"options","description":"Options for the command","optional":true,"type":[[["Array","<"],["ApplicationCommandOptionData",">"]]]},{"name":"defaultPermission","description":"Whether the command is enabled by default when the app is added to a guild","optional":true,"type":[[["boolean"]]]},{"name":"defaultMemberPermissions","description":"The bitfield used to determine the default permissions\na member needs in order to run the command","optional":true,"nullable":true,"type":[[["PermissionResolvable"]]]},{"name":"dmPermission","description":"Whether the command is enabled in DMs","optional":true,"type":[[["boolean"]]]}],"meta":{"line":213,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"ApplicationCommandOptionData","description":"An option for an application command or subcommand.\nIn addition to the listed properties, when used as a parameter,\nAPI style `snake_case` properties can be used for compatibility with generators like `@discordjs/builders`.\nNote that providing a value for the `camelCase` counterpart for any `snake_case` property\nwill discard the provided `snake_case` property.","type":[[["Object"]]],"props":[{"name":"type","description":"The type of the option","type":[[["ApplicationCommandOptionType"]],[["number"]]]},{"name":"name","description":"The name of the option","type":[[["string"]]]},{"name":"nameLocalizations","description":"The name localizations for the option","optional":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]]},{"name":"description","description":"The description of the option","type":[[["string"]]]},{"name":"descriptionLocalizations","description":"The description localizations for the option","optional":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]]},{"name":"autocomplete","description":"Whether the option is an autocomplete option","optional":true,"type":[[["boolean"]]]},{"name":"required","description":"Whether the option is required","optional":true,"type":[[["boolean"]]]},{"name":"choices","description":"The choices of the option for the user to pick from","optional":true,"type":[[["Array","<"],["ApplicationCommandOptionChoiceData",">"]]]},{"name":"options","description":"Additional options if this option is a subcommand (group)","optional":true,"type":[[["Array","<"],["ApplicationCommandOptionData",">"]]]},{"name":"channelTypes","description":"When the option type is channel,\nthe allowed types of channels that can be selected","optional":true,"type":[[["Array","<"],["ChannelType",">"]],[["Array","<"],["number",">"]]]},{"name":"minValue","description":"The minimum value for an `INTEGER` or `NUMBER` option","optional":true,"type":[[["number"]]]},{"name":"maxValue","description":"The maximum value for an `INTEGER` or `NUMBER` option","optional":true,"type":[[["number"]]]},{"name":"minLength","description":"The minimum length for a `STRING` option\n(maximum of `6000`)","optional":true,"type":[[["number"]]]},{"name":"maxLength","description":"The maximum length for a `STRING` option\n(maximum of `6000`)","optional":true,"type":[[["number"]]]}],"meta":{"line":228,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"ApplicationCommandOptionChoiceData","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the choice","type":[[["string"]]]},{"name":"nameLocalizations","description":"The localized names for this choice","optional":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]]},{"name":"value","description":"The value of the choice","type":[[["string"]],[["number"]]]}],"meta":{"line":254,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"ApplicationCommandOption","description":"An option for an application command or subcommand.","type":[[["Object"]]],"props":[{"name":"type","description":"The type of the option","type":[[["ApplicationCommandOptionType"]]]},{"name":"name","description":"The name of the option","type":[[["string"]]]},{"name":"nameLocalizations","description":"The localizations for the option name","optional":true,"type":[[["Object","<"],["string",", "],["string",">"]]]},{"name":"nameLocalized","description":"The localized name for this option","optional":true,"type":[[["string"]]]},{"name":"description","description":"The description of the option","type":[[["string"]]]},{"name":"descriptionLocalizations","description":"The localizations for the option description","optional":true,"type":[[["Object","<"],["string",", "],["string",">"]]]},{"name":"descriptionLocalized","description":"The localized description for this option","optional":true,"type":[[["string"]]]},{"name":"required","description":"Whether the option is required","optional":true,"type":[[["boolean"]]]},{"name":"autocomplete","description":"Whether the option is an autocomplete option","optional":true,"type":[[["boolean"]]]},{"name":"choices","description":"The choices of the option for the user to pick from","optional":true,"type":[[["Array","<"],["ApplicationCommandOptionChoice",">"]]]},{"name":"options","description":"Additional options if this option is a subcommand (group)","optional":true,"type":[[["Array","<"],["ApplicationCommandOption",">"]]]},{"name":"channelTypes","description":"When the option type is channel,\nthe allowed types of channels that can be selected","optional":true,"type":[[["Array","<"],["ChannelType",">"]]]},{"name":"minValue","description":"The minimum value for an `INTEGER` or `NUMBER` option","optional":true,"type":[[["number"]]]},{"name":"maxValue","description":"The maximum value for an `INTEGER` or `NUMBER` option","optional":true,"type":[[["number"]]]},{"name":"minLength","description":"The minimum length for a `STRING` option\n(maximum of `6000`)","optional":true,"type":[[["number"]]]},{"name":"maxLength","description":"The maximum length for a `STRING` option\n(maximum of `6000`)","optional":true,"type":[[["number"]]]}],"meta":{"line":520,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"ApplicationCommandOptionChoice","description":"A choice for an application command option.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the choice","type":[[["string"]]]},{"name":"nameLocalized","description":"The localized name of the choice in the provided locale, if any","nullable":true,"type":[[["string"]]]},{"name":"nameLocalizations","description":"The localized names for this choice","optional":true,"nullable":true,"type":[[["Object","<"],["string",", "],["string",">"]]]},{"name":"value","description":"The value of the choice","type":[[["string"]],[["number"]]]}],"meta":{"line":544,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"AutoModerationTriggerMetadata","description":"Additional data used to determine whether an auto moderation rule should be triggered.","type":[[["Object"]]],"props":[{"name":"keywordFilter","description":"The substrings that will be searched for in the content","type":[[["Array","<"],["string",">"]]]},{"name":"regexPatterns","description":"The regular expression patterns which will be matched against the content\nOnly Rust-flavored regular expressions are supported.","type":[[["Array","<"],["string",">"]]]},{"name":"presets","description":"The internally pre-defined wordsets which will be searched for in the content","type":[[["Array","<"],["AutoModerationRuleKeywordPresetType",">"]]]},{"name":"allowList","description":"The substrings that will be exempt from triggering\n{@link AutoModerationRuleTriggerType.KEYWORD} and {@link AutoModerationRuleTriggerType.KEYWORD_PRESET}","type":[[["Array","<"],["string",">"]]]},{"name":"mentionTotalLimit","description":"The total number of role & user mentions allowed per message","nullable":true,"type":[[["number"]]]},{"name":"mentionRaidProtectionEnabled","description":"Whether mention raid protection is enabled","type":[[["boolean"]]]}],"meta":{"line":65,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"AutoModerationAction","description":"An object containing information about an auto moderation rule action.","type":[[["Object"]]],"props":[{"name":"type","description":"The type of this auto moderation rule action","type":[[["AutoModerationActionType"]]]},{"name":"metadata","description":"Additional metadata needed during execution","type":[[["AutoModerationActionMetadata"]]]}],"meta":{"line":94,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"AutoModerationActionMetadata","description":"Additional data used when an auto moderation rule is executed.","type":[[["Object"]]],"props":[{"name":"channelId","description":"The id of the channel to which content will be logged","nullable":true,"type":[[["Snowflake"]]]},{"name":"durationSeconds","description":"The timeout duration in seconds","nullable":true,"type":[[["number"]]]},{"name":"customMessage","description":"The custom message that is shown whenever a message is blocked","nullable":true,"type":[[["string"]]]}],"meta":{"line":101,"file":"AutoModerationRule.js","path":"src/structures"}},{"name":"CommandInteractionResolvedData","description":"Represents the resolved data of a received command interaction.","type":[[["Object"]]],"props":[{"name":"users","description":"The resolved users","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["User",">"]]]},{"name":"members","description":"The resolved guild members","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["GuildMember","|"],["APIGuildMember",")>"]]]},{"name":"roles","description":"The resolved roles","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["Role","|"],["APIRole",")>"]]]},{"name":"channels","description":"The resolved channels","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["Channel","|"],["APIChannel",")>"]]]},{"name":"messages","description":"The resolved messages","optional":true,"type":[[["Collection","<"],["Snowflake",", ("],["Message","|"],["APIMessage",")>"]]]},{"name":"attachments","description":"The resolved attachments","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["MessageAttachment",">"]]]}],"meta":{"line":72,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"CommandInteractionOption","description":"Represents an option of a received command interaction.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the option","type":[[["string"]]]},{"name":"type","description":"The type of the option","type":[[["ApplicationCommandOptionType"]]]},{"name":"autocomplete","description":"Whether the option is an autocomplete option","optional":true,"type":[[["boolean"]]]},{"name":"value","description":"The value of the option","optional":true,"type":[[["string"]],[["number"]],[["boolean"]]]},{"name":"options","description":"Additional options if this option is a\nsubcommand (group)","optional":true,"type":[[["Array","<"],["CommandInteractionOption",">"]]]},{"name":"user","description":"The resolved user","optional":true,"type":[[["User"]]]},{"name":"member","description":"The resolved member","optional":true,"type":[[["GuildMember"]],[["APIGuildMember"]]]},{"name":"channel","description":"The resolved channel","optional":true,"type":[[["GuildChannel"]],[["ThreadChannel"]],[["APIChannel"]]]},{"name":"role","description":"The resolved role","optional":true,"type":[[["Role"]],[["APIRole"]]]},{"name":"attachment","description":"The resolved attachment","optional":true,"type":[[["MessageAttachment"]]]}],"meta":{"line":139,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"ApplicationResolvable","description":"Data that can be resolved to an Application. This can be:\n* An Application\n* An Activity with associated Application\n* A Snowflake","type":[[["Application"]],[["Snowflake"]]],"meta":{"line":134,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"CreateInviteOptions","description":"Options used to create an invite to a guild channel.","type":[[["Object"]]],"props":[{"name":"temporary","description":"Whether members that joined via the invite should be automatically\nkicked after 24 hours if they have not yet received a role","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"maxAge","description":"How long the invite should last (in seconds, 0 for forever)","optional":true,"default":86400,"type":[[["number"]]]},{"name":"maxUses","description":"Maximum number of uses","optional":true,"default":0,"type":[[["number"]]]},{"name":"unique","description":"Create a unique invite, or use an existing one with similar settings","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"targetUser","description":"The user whose stream to display for this invite,\nrequired if `targetType` is 1, the user must be streaming in the channel","optional":true,"type":[[["UserResolvable"]]]},{"name":"targetApplication","description":"The embedded application to open for this invite,\nrequired if `targetType` is 2, the application must have the `EMBEDDED` flag","optional":true,"type":[[["ApplicationResolvable"]]]},{"name":"targetType","description":"The type of the target for this voice channel invite","optional":true,"type":[[["TargetType"]]]},{"name":"reason","description":"The reason for creating the invite","optional":true,"type":[[["string"]]]}],"meta":{"line":142,"file":"BaseGuildTextChannel.js","path":"src/structures"}},{"name":"BaseMessageComponentOptions","description":"Options for a BaseMessageComponent","type":[[["Object"]]],"props":[{"name":"type","description":"The type of this component","type":[[["MessageComponentTypeResolvable"]]]}],"meta":{"line":11,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"MessageComponentOptions","description":"Data that can be resolved into options for a component. This can be:\n* MessageActionRowOptions\n* MessageButtonOptions\n* MessageSelectMenuOptions\n* TextInputComponentOptions","type":[[["MessageActionRowOptions"]],[["MessageButtonOptions"]],[["MessageSelectMenuOptions"]]],"meta":{"line":17,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"MessageComponent","description":"Components that can be sent in a payload. These can be:\n* MessageActionRow\n* MessageButton\n* MessageSelectMenu\n* TextInputComponent","see":["{@link https://discord.com/developers/docs/interactions/message-components#component-object-component-types}"],"type":[[["MessageActionRow"]],[["MessageButton"]],[["MessageSelectMenu"]]],"meta":{"line":26,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"MessageComponentTypeResolvable","description":"Data that can be resolved to a MessageComponentType. This can be:\n* MessageComponentType\n* string\n* number","type":[[["string"]],[["number"]],[["MessageComponentType"]]],"meta":{"line":36,"file":"BaseMessageComponent.js","path":"src/structures"}},{"name":"CategoryCreateChannelOptions","description":"Options for creating a channel using {@link CategoryChannel#createChannel}.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the new channel","optional":true,"type":[[["string"]]]},{"name":"type","description":"The type of the new channel.","optional":true,"default":"'GUILD_TEXT'","type":[[["ChannelType"]],[["number"]]]},{"name":"position","description":"Position of the new channel","optional":true,"type":[[["number"]]]},{"name":"topic","description":"The topic for the new channel","optional":true,"type":[[["string"]]]},{"name":"nsfw","description":"Whether the new channel is NSFW","optional":true,"type":[[["boolean"]]]},{"name":"bitrate","description":"Bitrate of the new channel in bits (only voice)","optional":true,"type":[[["number"]]]},{"name":"userLimit","description":"Maximum amount of users allowed in the new channel (only voice)","optional":true,"type":[[["number"]]]},{"name":"permissionOverwrites","description":"Permission overwrites of the new channel","optional":true,"type":[[["Array","<"],["OverwriteResolvable",">"]],[["Collection","<"],["Snowflake",", "],["OverwriteResolvable",">"]]]},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for the new channel in seconds","optional":true,"type":[[["number"]]]},{"name":"defaultAutoArchiveDuration","description":"The default auto archive duration for all new threads in this channel","optional":true,"type":[[["ThreadAutoArchiveDuration"]]]},{"name":"rtcRegion","description":"The specific region of the new channel","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"videoQualityMode","description":"The camera video quality mode of the new channel","optional":true,"type":[[["VideoQualityMode"]],[["number"]]]},{"name":"flags","description":"The flags to set on the new channel","optional":true,"type":[[["ChannelFlagsResolvable"]]]},{"name":"availableTags","description":"The tags to set as available in a forum channel","optional":true,"type":[[["Array","<"],["GuildForumTagData",">"]]]},{"name":"defaultReactionEmoji","description":"The emoji to set as the default reaction emoji","optional":true,"nullable":true,"type":[[["DefaultReactionEmoji"]]]},{"name":"defaultThreadRateLimitPerUser","description":"The rate limit per user (slowmode) to set on forum posts","optional":true,"type":[[["number"]]]},{"name":"defaultSortOrder","description":"The default sort order mode to set on the new channel","optional":true,"nullable":true,"type":[[["SortOrderType"]]]},{"name":"defaultThreadRateLimitPerUser","description":"The initial rate limit per user (slowmode)\nto set on newly created threads in a channel.","optional":true,"type":[[["number"]]]},{"name":"reason","description":"Reason for creating the new channel","optional":true,"type":[[["string"]]]}],"meta":{"line":43,"file":"CategoryChannel.js","path":"src/structures"}},{"name":"ClientApplicationInstallParams","type":[[["Object"]]],"props":[{"name":"scopes","description":"The scopes to add the application to the server with","type":[[["Array","<"],["InviteScope",">"]]]},{"name":"permissions","description":"The permissions this bot will request upon joining","type":[[["Readonly","<"],["Permissions",">"]]]}],"meta":{"line":12,"file":"ClientApplication.js","path":"src/structures"}},{"name":"ApplicationRoleConnectionMetadataEditOptions","description":"Data for creating or editing an application role connection metadata.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the metadata field","type":[[["string"]]]},{"name":"nameLocalizations","description":"The name localizations for the metadata field","optional":true,"nullable":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]]},{"name":"description","description":"The description of the metadata field","type":[[["string"]]]},{"name":"descriptionLocalizations","description":"The description localizations for the metadata field","optional":true,"nullable":true,"type":[[["Object","<"],["Locale",", "],["string",">"]]]},{"name":"key","description":"The dictionary key of the metadata field","type":[[["string"]]]},{"name":"type","description":"The type of the metadata field","type":[[["ApplicationRoleConnectionMetadataType"]]]}],"meta":{"line":470,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"ClientUserEditData","description":"Data used to edit the logged in client","type":[[["Object"]]],"props":[{"name":"username","description":"The new username","optional":true,"type":[[["string"]]]},{"name":"avatar","description":"The new avatar","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"banner","description":"The new banner","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"bio","description":"The new bio","optional":true,"nullable":true,"type":[[["string"]]]}],"meta":{"line":142,"file":"ClientUser.js","path":"src/structures"}},{"name":"ActivitiesOptions","description":"Options for setting activities","type":[[["Object"]]],"props":[{"name":"name","description":"Name of the activity","type":[[["string"]]]},{"name":"state","description":"State of the activity","optional":true,"type":[[["string"]]]},{"name":"type","description":"Type of the activity","optional":true,"type":[[["ActivityType"]],[["number"]]]},{"name":"url","description":"Twitch / YouTube stream URL","optional":true,"type":[[["string"]]]}],"meta":{"line":381,"file":"ClientUser.js","path":"src/structures"}},{"name":"PresenceData","description":"Data resembling a raw Discord presence.","type":[[["Object"]]],"props":[{"name":"status","description":"Status of the user","optional":true,"type":[[["PresenceStatusData"]]]},{"name":"afk","description":"Whether the user is AFK","optional":true,"type":[[["boolean"]]]},{"name":"activities","description":"Activity the user is playing","optional":true,"type":[[["Array","<"],["ActivitiesOptions",">"]],[["Array","<"],["CustomStatus",">"]],[["Array","<"],["RichPresence",">"]],[["Array","<"],["SpotifyRPC",">"]]]},{"name":"shardId","description":"Shard id(s) to have the activity set on","optional":true,"type":[[["number"]],[["Array","<"],["number",">"]]]}],"meta":{"line":390,"file":"ClientUser.js","path":"src/structures"}},{"name":"PresenceStatusData","description":"A user's status. Must be one of:\n* `online`\n* `idle`\n* `invisible`\n* `dnd` (do not disturb)","type":[[["string"]]],"meta":{"line":412,"file":"ClientUser.js","path":"src/structures"}},{"name":"ActivityOptions","description":"Options for setting an activity.","type":[[["Object"]]],"props":[{"name":"name","description":"Name of the activity","type":[[["string"]]]},{"name":"url","description":"Twitch / YouTube stream URL","optional":true,"type":[[["string"]]]},{"name":"type","description":"Type of the activity","optional":true,"type":[[["ActivityType"]],[["number"]]]},{"name":"shardId","description":"Shard Id(s) to have the activity set on","optional":true,"type":[[["number"]],[["Array","<"],["number",">"]]]}],"meta":{"line":434,"file":"ClientUser.js","path":"src/structures"}},{"name":"AutocompleteFocusedOption","description":"The full autocomplete option object.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the option","type":[[["string"]]]},{"name":"type","description":"The type of the application command option","type":[[["ApplicationCommandOptionType"]]]},{"name":"value","description":"The value of the option","type":[[["string"]]]},{"name":"focused","description":"Whether this option is currently in focus for autocomplete","type":[[["boolean"]]]}],"meta":{"line":243,"file":"CommandInteractionOptionResolver.js","path":"src/structures"}},{"name":"Tester","type":[[["Object"]]],"props":[{"name":"state","description":"The state of the tester (2: Accepted, 1: Pending)","type":[[["number"]]]},{"name":"user","description":"The user that the tester is","type":[[["User"]]]}],"meta":{"line":174,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"ApplicationAsset","description":"Asset data.","type":[[["Object"]]],"props":[{"name":"id","description":"The asset's id","type":[[["Snowflake"]]]},{"name":"name","description":"The asset's name","type":[[["string"]]]},{"name":"type","description":"The asset's type","type":[[["string"]]]}],"meta":{"line":142,"file":"Application.js","path":"src/structures/interfaces"}},{"name":"ApplicationEditData","description":"The data for editing a application.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the app","optional":true,"type":[[["string"]]]},{"name":"description","description":"The description of the app","optional":true,"type":[[["string"]]]},{"name":"icon","description":"The icon of the app","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"cover","description":"The application's default rich presence invite","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"botPublic","description":"When false only app owner can join the app's bot to guilds","optional":true,"type":[[["boolean"]]]},{"name":"botRequireCodeGrant","description":"When true the app's bot will only join upon completion of the full oauth2 code grant flow","optional":true,"type":[[["boolean"]]]},{"name":"TermsOfService","description":"ToS URL","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"PrivacyPolicy","description":"Privacy policy URL","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"flags","description":"The application's public flags","optional":true,"type":[[["number"]]]},{"name":"redirectURIs","description":"Redirect URIs (OAuth2 only)","optional":true,"type":[[["Array","<"],["string",">"]]]},{"name":"tags","description":"Up to 5 tags describing the content and functionality of the application","optional":true,"type":[[["Array","<"],["string",">"]]]}],"meta":{"line":334,"file":"DeveloperPortalApplication.js","path":"src/structures"}},{"name":"RawEmoji","description":"Represents raw emoji data from the API","type":[[["APIEmoji"]]],"props":[{"name":"id","description":"The emoji's id","nullable":true,"type":[[["Snowflake"]]]},{"name":"name","description":"The emoji's name","nullable":true,"type":[[["string"]]]},{"name":"animated","description":"Whether the emoji is animated","nullable":true,"type":[[["boolean"]]]}],"meta":{"line":15,"file":"Emoji.js","path":"src/structures"}},{"name":"GuildForumTagEmoji","type":[[["Object"]]],"props":[{"name":"id","description":"The id of a guild's custom emoji","nullable":true,"type":[[["Snowflake"]]]},{"name":"name","description":"The unicode character of the emoji","nullable":true,"type":[[["string"]]]}],"meta":{"line":10,"file":"ForumChannel.js","path":"src/structures"}},{"name":"GuildForumTag","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the tag","type":[[["Snowflake"]]]},{"name":"name","description":"The name of the tag","type":[[["string"]]]},{"name":"moderated","description":"Whether this tag can only be added to or removed from threads\nby a member with the `ManageThreads` permission","type":[[["boolean"]]]},{"name":"emoji","description":"The emoji of this tag","nullable":true,"type":[[["GuildForumTagEmoji"]]]}],"meta":{"line":16,"file":"ForumChannel.js","path":"src/structures"}},{"name":"GuildForumTagData","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the tag","optional":true,"type":[[["Snowflake"]]]},{"name":"name","description":"The name of the tag","type":[[["string"]]]},{"name":"moderated","description":"Whether this tag can only be added to or removed from threads\nby a member with the `ManageThreads` permission","optional":true,"type":[[["boolean"]]]},{"name":"emoji","description":"The emoji of this tag","optional":true,"nullable":true,"type":[[["GuildForumTagEmoji"]]]}],"meta":{"line":25,"file":"ForumChannel.js","path":"src/structures"}},{"name":"DefaultReactionEmoji","type":[[["Object"]]],"props":[{"name":"id","description":"The id of a guild's custom emoji","nullable":true,"type":[[["Snowflake"]]]},{"name":"name","description":"The unicode character of the emoji","nullable":true,"type":[[["string"]]]}],"meta":{"line":34,"file":"ForumChannel.js","path":"src/structures"}},{"name":"Features","description":"An array of enabled guild features, here are the possible values:\n* ANIMATED_ICON\n* AUTO_MODERATION\n* BANNER\n* CLYDE_ENABLED\n `CLYDE_ENABLED` is now an experimental feature of Discord.\nSee [this](https://rollouts.advaith.io/#2023-03_clyde_ai) for more information.\n* COMMERCE\n* COMMUNITY\n* CREATOR_MONETIZABLE_PROVISIONAL\n* CREATOR_STORE_PAGE\n* DISCOVERABLE\n* FEATURABLE\n* INVITES_DISABLED\n* INVITE_SPLASH\n* MEMBER_VERIFICATION_GATE_ENABLED\n* NEWS\n* PARTNERED\n* PREVIEW_ENABLED\n* VANITY_URL\n* VERIFIED\n* VIP_REGIONS\n* WELCOME_SCREEN_ENABLED\n* TICKETED_EVENTS_ENABLED\n* MONETIZATION_ENABLED\n`MONETIZATION_ENABLED` has been replaced.\nSee [this pull request](https://github.com/discord/discord-api-docs/pull/5724) for more information.\n* MORE_STICKERS\n* THREE_DAY_THREAD_ARCHIVE\n* SEVEN_DAY_THREAD_ARCHIVE\n* RAID_ALERTS_DISABLED\n* PRIVATE_THREADS\n* ROLE_ICONS\n* ROLE_SUBSCRIPTIONS_AVAILABLE_FOR_PURCHASE\n* ROLE_SUBSCRIPTIONS_ENABLED","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-guild-features}"],"type":[[["string"]]],"meta":{"line":226,"file":"Guild.js","path":"src/structures"}},{"name":"Vanity","description":"An object containing information about a guild's vanity invite.","type":[[["Object"]]],"props":[{"name":"code","description":"Vanity invite code","nullable":true,"type":[[["string"]]]},{"name":"uses","description":"How many times this invite has been used","type":[[["number"]]]}],"meta":{"line":756,"file":"Guild.js","path":"src/structures"}},{"name":"GuildWidgetSettings","description":"Data for the Guild Widget Settings object.","type":[[["Object"]]],"props":[{"name":"enabled","description":"Whether the widget is enabled","type":[[["boolean"]]]},{"name":"channel","description":"The widget invite channel","nullable":true,"type":[[["GuildChannel"]]]}],"meta":{"line":814,"file":"Guild.js","path":"src/structures"}},{"name":"GuildWidgetSettingsData","description":"The Guild Widget Settings object.","type":[[["Object"]]],"props":[{"name":"enabled","description":"Whether the widget is enabled","type":[[["boolean"]]]},{"name":"channel","description":"The widget invite channel","nullable":true,"type":[[["GuildChannelResolvable"]]]}],"meta":{"line":821,"file":"Guild.js","path":"src/structures"}},{"name":"GuildAuditLogsFetchOptions","description":"Options used to fetch audit logs.","type":[[["Object"]]],"props":[{"name":"before","description":"Consider only entries before this entry","optional":true,"type":[[["Snowflake"]],[["GuildAuditLogsEntry"]]]},{"name":"after","description":"Consider only entries after this entry","optional":true,"type":[[["Snowflake"]],[["GuildAuditLogsEntry"]]]},{"name":"limit","description":"The number of entries to return","optional":true,"type":[[["number"]]]},{"name":"user","description":"Only return entries for actions made by this user","optional":true,"type":[[["UserResolvable"]]]},{"name":"type","description":"Only return entries for this action type","optional":true,"type":[[["AuditLogAction"]],[["number"]]]}],"meta":{"line":847,"file":"Guild.js","path":"src/structures"}},{"name":"GuildEditData","description":"The data for editing a guild.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the guild","optional":true,"type":[[["string"]]]},{"name":"verificationLevel","description":"The verification level of the guild","optional":true,"nullable":true,"type":[[["VerificationLevel"]],[["number"]]]},{"name":"explicitContentFilter","description":"The level of the explicit content filter","optional":true,"nullable":true,"type":[[["ExplicitContentFilterLevel"]],[["number"]]]},{"name":"afkChannel","description":"The AFK channel of the guild","optional":true,"nullable":true,"type":[[["VoiceChannelResolvable"]]]},{"name":"systemChannel","description":"The system channel of the guild","optional":true,"nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"afkTimeout","description":"The AFK timeout of the guild","optional":true,"type":[[["number"]]]},{"name":"icon","description":"The icon of the guild","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"owner","description":"The owner of the guild","optional":true,"type":[[["GuildMemberResolvable"]]]},{"name":"splash","description":"The invite splash image of the guild","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"discoverySplash","description":"The discovery splash image of the guild","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"banner","description":"The banner of the guild","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"defaultMessageNotifications","description":"The default message notification\nlevel of the guild","optional":true,"nullable":true,"type":[[["DefaultMessageNotificationLevel"]],[["number"]]]},{"name":"systemChannelFlags","description":"The system channel flags of the guild","optional":true,"type":[[["SystemChannelFlagsResolvable"]]]},{"name":"rulesChannel","description":"The rules channel of the guild","optional":true,"nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"publicUpdatesChannel","description":"The community updates channel of the guild","optional":true,"nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"preferredLocale","description":"The preferred locale of the guild","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"safetyAlertsChannel","description":"The safety alerts channel of the guild","optional":true,"nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"premiumProgressBarEnabled","description":"Whether the guild's premium progress bar is enabled","optional":true,"type":[[["boolean"]]]},{"name":"description","description":"The discovery description of the guild","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"features","description":"The features of the guild","optional":true,"type":[[["Array","<"],["Features",">"]]]}],"meta":{"line":880,"file":"Guild.js","path":"src/structures"}},{"name":"TextChannelResolvable","description":"Data that can be resolved to a Text Channel object. This can be:\n* A TextChannel\n* A Snowflake","type":[[["TextChannel"]],[["Snowflake"]]],"meta":{"line":906,"file":"Guild.js","path":"src/structures"}},{"name":"VoiceChannelResolvable","description":"Data that can be resolved to a Voice Channel object. This can be:\n* A VoiceChannel\n* A Snowflake","type":[[["VoiceChannel"]],[["Snowflake"]]],"meta":{"line":913,"file":"Guild.js","path":"src/structures"}},{"name":"WelcomeChannelData","description":"Welcome channel data.","type":[[["Object"]]],"props":[{"name":"description","description":"The description to show for this welcome channel","type":[[["string"]]]},{"name":"channel","description":"The channel to link for this welcome channel","type":[[["TextChannel"]],[["NewsChannel"]],[["StoreChannel"]],[["Snowflake"]]]},{"name":"emoji","description":"The emoji to display for this welcome channel","optional":true,"type":[[["EmojiIdentifierResolvable"]]]}],"meta":{"line":1000,"file":"Guild.js","path":"src/structures"}},{"name":"WelcomeScreenEditData","description":"Welcome screen edit data.","type":[[["Object"]]],"props":[{"name":"enabled","description":"Whether the welcome screen is enabled","optional":true,"type":[[["boolean"]]]},{"name":"description","description":"The description for the welcome screen","optional":true,"type":[[["string"]]]},{"name":"welcomeChannels","description":"The welcome channel data for the welcome screen","optional":true,"type":[[["Array","<"],["WelcomeChannelData",">"]]]}],"meta":{"line":1008,"file":"Guild.js","path":"src/structures"}},{"name":"GuildTextChannelResolvable","description":"Data that can be resolved to a GuildTextChannel object. This can be:\n* A TextChannel\n* A NewsChannel\n* A Snowflake","type":[[["TextChannel"]],[["NewsChannel"]],[["Snowflake"]]],"meta":{"line":1016,"file":"Guild.js","path":"src/structures"}},{"name":"GuildVoiceChannelResolvable","description":"Data that can be resolved to a GuildVoiceChannel object. This can be:\n* A VoiceChannel\n* A StageChannel\n* A Snowflake","type":[[["VoiceChannel"]],[["StageChannel"]],[["Snowflake"]]],"meta":{"line":1024,"file":"Guild.js","path":"src/structures"}},{"name":"AuditLogTargetType","description":"The target type of an entry. Here are the available types:\n* GUILD\n* CHANNEL\n* USER\n* ROLE\n* INVITE\n* WEBHOOK\n* EMOJI\n* MESSAGE\n* INTEGRATION\n* STAGE_INSTANCE\n* STICKER\n* THREAD\n* GUILD_SCHEDULED_EVENT\n* APPLICATION_COMMAND\n* AUTO_MODERATION","type":[[["string"]]],"meta":{"line":16,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"AuditLogAction","description":"The action of an entry. Here are the available actions:\n* ALL: null\n* GUILD_UPDATE: 1\n* CHANNEL_CREATE: 10\n* CHANNEL_UPDATE: 11\n* CHANNEL_DELETE: 12\n* CHANNEL_OVERWRITE_CREATE: 13\n* CHANNEL_OVERWRITE_UPDATE: 14\n* CHANNEL_OVERWRITE_DELETE: 15\n* MEMBER_KICK: 20\n* MEMBER_PRUNE: 21\n* MEMBER_BAN_ADD: 22\n* MEMBER_BAN_REMOVE: 23\n* MEMBER_UPDATE: 24\n* MEMBER_ROLE_UPDATE: 25\n* MEMBER_MOVE: 26\n* MEMBER_DISCONNECT: 27\n* BOT_ADD: 28,\n* ROLE_CREATE: 30\n* ROLE_UPDATE: 31\n* ROLE_DELETE: 32\n* INVITE_CREATE: 40\n* INVITE_UPDATE: 41\n* INVITE_DELETE: 42\n* WEBHOOK_CREATE: 50\n* WEBHOOK_UPDATE: 51\n* WEBHOOK_DELETE: 52\n* EMOJI_CREATE: 60\n* EMOJI_UPDATE: 61\n* EMOJI_DELETE: 62\n* MESSAGE_DELETE: 72\n* MESSAGE_BULK_DELETE: 73\n* MESSAGE_PIN: 74\n* MESSAGE_UNPIN: 75\n* INTEGRATION_CREATE: 80\n* INTEGRATION_UPDATE: 81\n* INTEGRATION_DELETE: 82\n* STAGE_INSTANCE_CREATE: 83\n* STAGE_INSTANCE_UPDATE: 84\n* STAGE_INSTANCE_DELETE: 85\n* STICKER_CREATE: 90\n* STICKER_UPDATE: 91\n* STICKER_DELETE: 92\n* GUILD_SCHEDULED_EVENT_CREATE: 100\n* GUILD_SCHEDULED_EVENT_UPDATE: 101\n* GUILD_SCHEDULED_EVENT_DELETE: 102\n* THREAD_CREATE: 110\n* THREAD_UPDATE: 111\n* THREAD_DELETE: 112\n* APPLICATION_COMMAND_PERMISSION_UPDATE: 121\n* AUTO_MODERATION_RULE_CREATE: 140\n* AUTO_MODERATION_RULE_UPDATE: 141\n* AUTO_MODERATION_RULE_DELETE: 142\n* AUTO_MODERATION_BLOCK_MESSAGE: 143\n* AUTO_MODERATION_FLAG_TO_CHANNEL: 144\n* AUTO_MODERATION_USER_COMMUNICATION_DISABLED: 145","see":["{@link https://discord.com/developers/docs/resources/audit-log#audit-log-entry-object-audit-log-events}"],"type":[[["number"]],[["string"]]],"meta":{"line":61,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"AuditLogEntryTarget","description":"The target of an entry. It can be one of:\n* A guild\n* A channel\n* A user\n* A role\n* An invite\n* A webhook\n* An emoji\n* A message\n* An integration\n* A stage instance\n* A sticker\n* A guild scheduled event\n* A thread\n* An application command\n* An auto moderation rule\n* An object with an id key if target was deleted\n* An object where the keys represent either the new value or the old value","type":[[["Object"]],[["Guild"]],[["Channel"]],[["User"]],[["Role"]],[["Invite"]],[["Webhook"]],[["GuildEmoji"]],[["Message"]],[["Integration"]],[["StageInstance"]],[["Sticker"]],[["GuildScheduledEvent"]],[["ApplicationCommand"]],[["AutoModerationRule"]]],"meta":{"line":260,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"AuditLogActionType","description":"The action type of an entry, e.g. `CREATE`. Here are the available types:\n* CREATE\n* DELETE\n* UPDATE\n* ALL","type":[[["string"]]],"meta":{"line":307,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"AuditLogChange","description":"An entry in the audit log representing a specific change.","type":[[["Object"]]],"props":[{"name":"key","description":"The property that was changed, e.g. `nick` for nickname changes","type":[[["string"]]]},{"name":"old","description":"The old value of the change, e.g. for nicknames, the old nickname","optional":true,"type":[["*"]]},{"name":"new","description":"The new value of the change, e.g. for nicknames, the new nickname","optional":true,"type":[["*"]]}],"meta":{"line":449,"file":"GuildAuditLogs.js","path":"src/structures"}},{"name":"SetParentOptions","description":"Options used to set the parent of a channel.","type":[[["Object"]]],"props":[{"name":"lockPermissions","description":"Whether to lock the permissions to what the parent's permissions are","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"reason","description":"The reason for modifying the parent of the channel","optional":true,"type":[[["string"]]]}],"meta":{"line":308,"file":"GuildChannel.js","path":"src/structures"}},{"name":"SetChannelPositionOptions","description":"Options used to set the position of a channel.","type":[[["Object"]]],"props":[{"name":"relative","description":"Whether or not to change the position relative to its current value","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"reason","description":"The reason for changing the position","optional":true,"type":[[["string"]]]}],"meta":{"line":336,"file":"GuildChannel.js","path":"src/structures"}},{"name":"GuildChannelCloneOptions","description":"Options used to clone a guild channel.","type":[[["GuildChannelCreateOptions"]]],"props":[{"name":"name","description":"Name of the new channel","optional":true,"default":"this.name","type":[[["string"]]]}],"meta":{"line":358,"file":"GuildChannel.js","path":"src/structures"}},{"name":"GuildEmojiEditData","description":"Data for editing an emoji.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the emoji","optional":true,"type":[[["string"]]]},{"name":"roles","description":"Roles to restrict emoji to","optional":true,"type":[[["Collection","<"],["Snowflake",", "],["Role",">"]],[["Array","<"],["RoleResolvable",">"]]]}],"meta":{"line":79,"file":"GuildEmoji.js","path":"src/structures"}},{"name":"GuildScheduledEventEntityMetadata","description":"Represents the additional metadata for a {@link GuildScheduledEvent}","see":["{@link https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-entity-metadata}"],"type":[[["Object"]]],"props":[{"name":"location","description":"The location of the guild scheduled event","nullable":true,"type":[[["string"]]]}],"meta":{"line":136,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"CreateGuildScheduledEventInviteURLOptions","description":"Options used to create an invite URL to a {@link GuildScheduledEvent}","type":[[["CreateInviteOptions"]]],"props":[{"name":"channel","description":"The channel to create the invite in.\nThis is required when the `entityType` of `GuildScheduledEvent` is `EXTERNAL`, gets ignored otherwise","optional":true,"type":[[["GuildInvitableChannelResolvable"]]]}],"meta":{"line":244,"file":"GuildScheduledEvent.js","path":"src/structures"}},{"name":"EditGuildTemplateOptions","description":"Options used to edit a guild template.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this template","optional":true,"type":[[["string"]]]},{"name":"description","description":"The description of this template","optional":true,"type":[[["string"]]]}],"meta":{"line":147,"file":"GuildTemplate.js","path":"src/structures"}},{"name":"IntegrationAccount","description":"The information account for an integration","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the account","type":[[["Snowflake"]],[["string"]]]},{"name":"name","description":"The name of the account","type":[[["string"]]]}],"meta":{"line":6,"file":"Integration.js","path":"src/structures"}},{"name":"IntegrationType","description":"The type of an {@link Integration}. This can be:\n* `twitch`\n* `youtube`\n* `discord`\n* `guild_subscription`","type":[[["string"]]],"meta":{"line":13,"file":"Integration.js","path":"src/structures"}},{"name":"Locale","description":"A Discord locale string, possible values are:\n* en-US (English, US)\n* en-GB (English, UK)\n* bg (Bulgarian)\n* zh-CN (Chinese, China)\n* zh-TW (Chinese, Taiwan)\n* hr (Croatian)\n* cs (Czech)\n* da (Danish)\n* nl (Dutch)\n* fi (Finnish)\n* fr (French)\n* de (German)\n* el (Greek)\n* hi (Hindi)\n* hu (Hungarian)\n* it (Italian)\n* ja (Japanese)\n* ko (Korean)\n* lt (Lithuanian)\n* no (Norwegian)\n* pl (Polish)\n* pt-BR (Portuguese, Brazilian)\n* ro (Romanian, Romania)\n* ru (Russian)\n* es-ES (Spanish)\n* sv-SE (Swedish)\n* th (Thai)\n* tr (Turkish)\n* uk (Ukrainian)\n* vi (Vietnamese)","see":["{@link https://discord.com/developers/docs/reference#locales}"],"type":[[["string"]]],"meta":{"line":84,"file":"Interaction.js","path":"src/structures"}},{"name":"InteractionCollectorOptions","type":[[["CollectorOptions"]]],"props":[{"name":"channel","description":"The channel to listen to interactions from","optional":true,"type":[[["TextBasedChannelsResolvable"]]]},{"name":"componentType","description":"The type of component to listen for","optional":true,"type":[[["MessageComponentType"]]]},{"name":"guild","description":"The guild to listen to interactions from","optional":true,"type":[[["GuildResolvable"]]]},{"name":"interactionType","description":"The type of interaction to listen for","optional":true,"type":[[["InteractionType"]]]},{"name":"max","description":"The maximum total amount of interactions to collect","optional":true,"type":[[["number"]]]},{"name":"maxComponents","description":"The maximum number of components to collect","optional":true,"type":[[["number"]]]},{"name":"maxUsers","description":"The maximum number of users to interact","optional":true,"type":[[["number"]]]},{"name":"message","description":"The message to listen to interactions from","optional":true,"type":[[["Message"]],[["APIMessage"]]]}],"meta":{"line":8,"file":"InteractionCollector.js","path":"src/structures"}},{"name":"CollectorFilter","description":"Filter to be applied to the collector.","type":[[["function"]]],"params":[{"name":"args","description":"Any arguments received by the listener","variable":true,"type":[["*"]]},{"name":"collection","description":"The items collected by this collector","type":[[["Collection"]]]}],"returns":[[["boolean"]],[["Promise","<"],["boolean",">"]]],"meta":{"line":9,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"CollectorOptions","description":"Options to be applied to the collector.","type":[[["Object"]]],"props":[{"name":"filter","description":"The filter applied to this collector","optional":true,"type":[[["CollectorFilter"]]]},{"name":"time","description":"How long to run the collector for in milliseconds","optional":true,"type":[[["number"]]]},{"name":"idle","description":"How long to stop the collector after inactivity in milliseconds","optional":true,"type":[[["number"]]]},{"name":"dispose","description":"Whether to dispose data when it's deleted","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":17,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"CollectorResetTimerOptions","description":"Options used to reset the timeout and idle timer of a {@link Collector}.","type":[[["Object"]]],"props":[{"name":"time","description":"How long to run the collector for (in milliseconds)","optional":true,"type":[[["number"]]]},{"name":"idle","description":"How long to wait to stop the collector after inactivity (in milliseconds)","optional":true,"type":[[["number"]]]}],"meta":{"line":202,"file":"Collector.js","path":"src/structures/interfaces"}},{"name":"InteractionDeferReplyOptions","description":"Options for deferring the reply to an {@link Interaction}.","type":[[["Object"]]],"props":[{"name":"ephemeral","description":"Whether the reply should be ephemeral","optional":true,"type":[[["boolean"]]]},{"name":"fetchReply","description":"Whether to fetch the reply","optional":true,"type":[[["boolean"]]]}],"meta":{"line":15,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"InteractionDeferUpdateOptions","description":"Options for deferring and updating the reply to a {@link MessageComponentInteraction}.","type":[[["Object"]]],"props":[{"name":"fetchReply","description":"Whether to fetch the reply","optional":true,"type":[[["boolean"]]]}],"meta":{"line":22,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"InteractionReplyOptions","description":"Options for a reply to an {@link Interaction}.","type":[[["BaseMessageOptions"]]],"props":[{"name":"ephemeral","description":"Whether the reply should be ephemeral","optional":true,"type":[[["boolean"]]]},{"name":"fetchReply","description":"Whether to fetch the reply","optional":true,"type":[[["boolean"]]]},{"name":"flags","description":"Which flags to set for the message.\nOnly `SUPPRESS_EMBEDS` and `EPHEMERAL` can be set.","optional":true,"type":[[["MessageFlags"]]]}],"meta":{"line":28,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"InteractionUpdateOptions","description":"Options for updating the message received from a {@link MessageComponentInteraction}.","type":[[["MessageEditOptions"]]],"props":[{"name":"fetchReply","description":"Whether to fetch the reply","optional":true,"type":[[["boolean"]]]}],"meta":{"line":37,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"InteractionEditReplyOptions","description":"Options that can be passed into {@link InteractionResponses#editReply}.","type":[[["WebhookEditMessageOptions"]]],"props":[{"name":"message","description":"The response to edit","optional":true,"default":"'@original'","type":[[["MessageResolvable"]],[["original","'"]]]}],"meta":{"line":131,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"AwaitModalSubmitOptions","description":"An object containing the same properties as CollectorOptions, but a few more:","type":[[["Object"]]],"props":[{"name":"filter","description":"The filter applied to this collector","optional":true,"type":[[["CollectorFilter"]]]},{"name":"time","description":"Time in milliseconds to wait for an interaction before rejecting","type":[[["number"]]]}],"meta":{"line":256,"file":"InteractionResponses.js","path":"src/structures/interfaces"}},{"name":"BaseMessageOptions","description":"Base options provided when sending.","type":[[["Object"]]],"props":[{"name":"activity","description":"Group activity","optional":true,"type":[[["MessageActivity"]]]},{"name":"tts","description":"Whether or not the message should be spoken aloud","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"nonce","description":"The nonce for the message","optional":true,"default":"''","type":[[["string"]]]},{"name":"content","description":"The content for the message","optional":true,"default":"''","type":[[["string"]]]},{"name":"embeds","description":"The embeds for the message\n(see [here](https://discord.com/developers/docs/resources/channel#embed-object) for more details)","optional":true,"type":[[["Array","<("],["MessageEmbed","|"],["APIEmbed","|"],["WebEmbed",")>"]]]},{"name":"allowedMentions","description":"Which mentions should be parsed from the message content\n(see [here](https://discord.com/developers/docs/resources/channel#allowed-mentions-object) for more details)","optional":true,"type":[[["MessageMentionOptions"]]]},{"name":"files","description":"Files to send with the message","optional":true,"type":[[["Array","<("],["FileOptions","|"],["BufferResolvable","|"],["Array","<"],["MessageAttachment",">)>"]]]},{"name":"components","description":"Action rows containing interactive components for the message (buttons, select menus)","optional":true,"type":[[["Array","<("],["MessageActionRow","|"],["MessageActionRowOptions",")>"]]]},{"name":"attachments","description":"Attachments to send in the message","optional":true,"type":[[["Array","<"],["MessageAttachment",">"]]]},{"name":"usingNewAttachmentAPI","description":"Whether to use the new attachment API (`channels/:id/attachments`)","optional":true,"type":[[["boolean"]]]}],"meta":{"line":72,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"MessageOptions","description":"Options provided when sending or editing a message.","type":[[["BaseMessageOptions"]]],"props":[{"name":"reply","description":"The options for replying to a message","optional":true,"type":[[["ReplyOptions"]]]},{"name":"stickers","description":"Stickers to send in the message","optional":true,"default":"[]","type":[[["Array","<"],["StickerResolvable",">"]]]},{"name":"flags","description":"Which flags to set for the message.\nOnly `SUPPRESS_EMBEDS`, `SUPPRESS_NOTIFICATIONS` and `IS_VOICE_MESSAGE` can be set.","optional":true,"type":[[["MessageFlags"]]]}],"meta":{"line":90,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"MessageMentionOptions","description":"Options provided to control parsing of mentions by Discord","type":[[["Object"]]],"props":[{"name":"parse","description":"Types of mentions to be parsed","optional":true,"type":[[["Array","<"],["MessageMentionTypes",">"]]]},{"name":"users","description":"Snowflakes of Users to be parsed as mentions","optional":true,"type":[[["Array","<"],["Snowflake",">"]]]},{"name":"roles","description":"Snowflakes of Roles to be parsed as mentions","optional":true,"type":[[["Array","<"],["Snowflake",">"]]]},{"name":"repliedUser","description":"Whether the author of the Message being replied to should be pinged","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":99,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"MessageMentionTypes","description":"Types of mentions to enable in MessageMentionOptions.\n- `roles`\n- `users`\n- `everyone`","type":[[["string"]]],"meta":{"line":108,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"FileOptions","type":[[["Object"]]],"props":[{"name":"attachment","description":"File to attach","type":[[["BufferResolvable"]]]},{"name":"name","description":"Filename of the attachment","optional":true,"default":"'file.jpg'","type":[[["string"]]]},{"name":"description","description":"The description of the file","type":[[["string"]]]}],"meta":{"line":116,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"ReplyOptions","description":"Options for sending a message with a reply.","type":[[["Object"]]],"props":[{"name":"messageReference","description":"The message to reply to (must be in the same channel and not system)","type":[[["MessageResolvable"]]]},{"name":"failIfNotExists","description":"Whether to error if the referenced message\ndoes not exist (creates a standard message in this case when false)","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":123,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"AwaitMessagesOptions","description":"An object containing the same properties as CollectorOptions, but a few more:","type":[[["MessageCollectorOptions"]]],"props":[{"name":"errors","description":"Stop/end reasons that cause the promise to reject","optional":true,"type":[[["Array","<"],["string",">"]]]}],"meta":{"line":232,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"ChannelWebhookCreateOptions","description":"Options used to create a {@link Webhook} in a guild text-based channel.","type":[[["Object"]]],"props":[{"name":"avatar","description":"Avatar for the webhook","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]]]},{"name":"reason","description":"Reason for creating the webhook","optional":true,"type":[[["string"]]]}],"meta":{"line":372,"file":"TextBasedChannel.js","path":"src/structures/interfaces"}},{"name":"TargetType","description":"The type of the invite target:\n* 1: STREAM\n* 2: EMBEDDED_APPLICATION","see":["{@link https://discord.com/developers/docs/resources/invite#invite-object-invite-target-types}"],"type":[[["number"]]],"meta":{"line":155,"file":"Invite.js","path":"src/structures"}},{"name":"MessageReference","description":"Reference data sent in a message that contains ids identifying the referenced message.\nThis can be present in the following types of message:\n* Crossposted messages (IS_CROSSPOST {@link MessageFlags.FLAGS message flag})\n* CHANNEL_FOLLOW_ADD\n* CHANNEL_PINNED_MESSAGE\n* REPLY\n* THREAD_STARTER_MESSAGE","see":["{@link https://discord.com/developers/docs/resources/channel#message-types}"],"type":[[["Object"]]],"props":[{"name":"channelId","description":"The channel's id the message was referenced","type":[[["Snowflake"]]]},{"name":"guildId","description":"The guild's id the message was referenced","nullable":true,"type":[[["Snowflake"]]]},{"name":"messageId","description":"The message's id that was referenced","nullable":true,"type":[[["Snowflake"]]]}],"meta":{"line":309,"file":"Message.js","path":"src/structures"}},{"name":"MessageInteraction","description":"Partial data of the interaction that a message is a reply to","type":[[["Object"]]],"props":[{"name":"id","description":"The interaction's id","type":[[["Snowflake"]]]},{"name":"type","description":"The type of the interaction","type":[[["InteractionType"]]]},{"name":"commandName","description":"The name of the interaction's application command,\nas well as the subcommand and subcommand group, where applicable","type":[[["string"]]]},{"name":"user","description":"The user that invoked the interaction","type":[[["User"]]]}],"meta":{"line":342,"file":"Message.js","path":"src/structures"}},{"name":"AwaitReactionsOptions","description":"An object containing the same properties as CollectorOptions, but a few more:","type":[[["ReactionCollectorOptions"]]],"props":[{"name":"errors","description":"Stop/end reasons that cause the promise to reject","optional":true,"type":[[["Array","<"],["string",">"]]]}],"meta":{"line":508,"file":"Message.js","path":"src/structures"}},{"name":"MessageComponentCollectorOptions","type":[[["CollectorOptions"]]],"props":[{"name":"componentType","description":"The type of component to listen for","optional":true,"type":[[["MessageComponentType"]]]},{"name":"max","description":"The maximum total amount of interactions to collect","optional":true,"type":[[["number"]]]},{"name":"maxComponents","description":"The maximum number of components to collect","optional":true,"type":[[["number"]]]},{"name":"maxUsers","description":"The maximum number of users to interact","optional":true,"type":[[["number"]]]}],"meta":{"line":536,"file":"Message.js","path":"src/structures"}},{"name":"AwaitMessageComponentOptions","description":"An object containing the same properties as CollectorOptions, but a few more:","type":[[["Object"]]],"props":[{"name":"filter","description":"The filter applied to this collector","optional":true,"type":[[["CollectorFilter"]]]},{"name":"time","description":"Time to wait for an interaction before rejecting","optional":true,"type":[[["number"]]]},{"name":"componentType","description":"The type of component interaction to collect","optional":true,"type":[[["MessageComponentType"]]]}],"meta":{"line":563,"file":"Message.js","path":"src/structures"}},{"name":"MessageEditOptions","description":"Options that can be passed into {@link Message#edit}.","type":[[["Object"]]],"props":[{"name":"content","description":"Content to be edited","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"embeds","description":"Embeds to be added/edited","optional":true,"type":[[["Array","<"],["MessageEmbed",">"]],[["Array","<"],["APIEmbed",">"]]]},{"name":"allowedMentions","description":"Which mentions should be parsed from the message content","optional":true,"type":[[["MessageMentionOptions"]]]},{"name":"flags","description":"Which flags to set for the message. Only `SUPPRESS_EMBEDS` can be edited.","optional":true,"type":[[["MessageFlags"]]]},{"name":"attachments","description":"An array of attachments to keep,\nall attachments will be kept if omitted","optional":true,"type":[[["Array","<"],["MessageAttachment",">"]]]},{"name":"files","description":"Files to add to the message","optional":true,"type":[[["Array","<"],["FileOptions",">"]],[["Array","<"],["BufferResolvable",">"]],[["Array","<"],["MessageAttachment",">"]]]},{"name":"components","description":"Action rows containing interactive components for the message (buttons, select menus)","optional":true,"type":[[["Array","<("],["MessageActionRow","|"],["MessageActionRowOptions",")>"]]]}],"meta":{"line":715,"file":"Message.js","path":"src/structures"}},{"name":"ReplyMessageOptions","description":"Options provided when sending a message as an inline reply.","type":[[["BaseMessageOptions"]]],"props":[{"name":"failIfNotExists","description":"Whether to error if the referenced message\ndoes not exist (creates a standard message in this case when false)","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"stickers","description":"Stickers to send in the message","optional":true,"default":"[]","type":[[["Array","<"],["StickerResolvable",">"]]]}],"meta":{"line":839,"file":"Message.js","path":"src/structures"}},{"name":"ThreadAutoArchiveDuration","description":"A number that is allowed to be the duration (in minutes) of inactivity after which a thread is automatically\narchived. This can be:\n* `60` (1 hour)\n* `1440` (1 day)\n* `4320` (3 days)\n* `10080` (7 days)\n* `'MAX'` (7 days)\nThis option is deprecated and will be removed in the next major version.","type":[[["number"]],[["string"]]],"meta":{"line":874,"file":"Message.js","path":"src/structures"}},{"name":"StartThreadOptions","description":"Options for starting a thread on a message.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the new thread","type":[[["string"]]]},{"name":"autoArchiveDuration","description":"The amount of\ntime (in minutes) after which the thread should automatically archive in case of no recent activity","optional":true,"default":"this.channel.defaultAutoArchiveDuration","type":[[["ThreadAutoArchiveDuration"]]]},{"name":"reason","description":"Reason for creating the thread","optional":true,"type":[[["string"]]]},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for the thread in seconds","optional":true,"type":[[["number"]]]}],"meta":{"line":886,"file":"Message.js","path":"src/structures"}},{"name":"MessageButtonLocation","type":[[["Object"]]],"props":[{"name":"row","description":"Index of the row","type":[[["number"]]]},{"name":"col","description":"Index of the column","type":[[["number"]]]}],"meta":{"line":1061,"file":"Message.js","path":"src/structures"}},{"name":"MessageActionRowComponent","description":"Components that can be placed in an action row\n* MessageButton\n* MessageSelectMenu\n* TextInputComponent","type":[[["MessageButton"]],[["MessageSelectMenu"]],[["TextInputComponent"]]],"meta":{"line":11,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"MessageActionRowComponentOptions","description":"Options for components that can be placed in an action row\n* MessageButtonOptions\n* MessageSelectMenuOptions\n* TextInputComponentOptions","type":[[["MessageButtonOptions"]],[["MessageSelectMenuOptions"]],[["TextInputComponentOptions"]]],"meta":{"line":19,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"MessageActionRowComponentResolvable","description":"Data that can be resolved into components that can be placed in an action row\n* MessageActionRowComponent\n* MessageActionRowComponentOptions","type":[[["MessageActionRowComponent"]],[["MessageActionRowComponentOptions"]]],"meta":{"line":27,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"MessageActionRowOptions","type":[[["BaseMessageComponentOptions"]]],"props":[{"name":"components","description":"The components to place in this action row","optional":true,"type":[[["Array","<"],["MessageActionRowComponentResolvable",">"]]]}],"meta":{"line":34,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"MessageButtonOptions","type":[[["BaseMessageComponentOptions"]]],"props":[{"name":"label","description":"The text to be displayed on this button","optional":true,"type":[[["string"]]]},{"name":"customId","description":"A unique string to be sent in the interaction when clicked","optional":true,"type":[[["string"]]]},{"name":"style","description":"The style of this button","optional":true,"type":[[["MessageButtonStyleResolvable"]]]},{"name":"emoji","description":"The emoji to be displayed to the left of the text","optional":true,"type":[[["EmojiIdentifierResolvable"]]]},{"name":"url","description":"Optional URL for link-style buttons","optional":true,"type":[[["string"]]]},{"name":"disabled","description":"Disables the button to prevent interactions","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":17,"file":"MessageButton.js","path":"src/structures"}},{"name":"MessageButtonStyleResolvable","description":"Data that can be resolved to a MessageButtonStyle. This can be\n* MessageButtonStyle\n* number","type":[[["number"]],[["MessageButtonStyle"]]],"meta":{"line":151,"file":"MessageButton.js","path":"src/structures"}},{"name":"MessageCollectorOptions","type":[[["CollectorOptions"]]],"props":[{"name":"max","description":"The maximum amount of messages to collect","type":[[["number"]]]},{"name":"maxProcessed","description":"The maximum amount of messages to process","type":[[["number"]]]}],"meta":{"line":6,"file":"MessageCollector.js","path":"src/structures"}},{"name":"APIMessageActionRowComponent","description":"Raw message components from the API\n* APIMessageButton\n* APIMessageSelectMenu","type":[[["APIMessageButton"]],[["APIMessageSelectMenu"]]],"meta":{"line":66,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"Partial","description":"A `Partial` object is a representation of any existing object.\nThis object contains between 0 and all of the original objects parameters.\nThis is true regardless of whether the parameters are optional in the base object.","type":[[["Object"]]],"meta":{"line":18,"file":"WebEmbed.js","path":"src/structures"}},{"name":"MessageEmbedOptions","description":"Represents the possible options for a MessageEmbed","type":[[["Object"]]],"props":[{"name":"title","description":"The title of this embed","optional":true,"type":[[["string"]]]},{"name":"description","description":"The description of this embed","optional":true,"type":[[["string"]]]},{"name":"url","description":"The URL of this embed","optional":true,"type":[[["string"]]]},{"name":"timestamp","description":"The timestamp of this embed","optional":true,"type":[[["Date"]],[["number"]]]},{"name":"color","description":"The color of this embed","optional":true,"type":[[["ColorResolvable"]]]},{"name":"fields","description":"The fields of this embed","optional":true,"type":[[["Array","<"],["EmbedFieldData",">"]]]},{"name":"author","description":"The author of this embed","optional":true,"type":[[["Partial","<"],["MessageEmbedAuthor",">"]]]},{"name":"thumbnail","description":"The thumbnail of this embed","optional":true,"type":[[["Partial","<"],["MessageEmbedThumbnail",">"]]]},{"name":"image","description":"The image of this embed","optional":true,"type":[[["Partial","<"],["MessageEmbedImage",">"]]]},{"name":"video","description":"The video of this embed","optional":true,"type":[[["Partial","<"],["MessageEmbedVideo",">"]]]},{"name":"footer","description":"The footer of this embed","optional":true,"type":[[["Partial","<"],["MessageEmbedFooter",">"]]]}],"meta":{"line":24,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"EmbedField","description":"Represents a field of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this field","type":[[["string"]]]},{"name":"value","description":"The value of this field","type":[[["string"]]]},{"name":"inline","description":"If this field will be displayed inline","type":[[["boolean"]]]}],"meta":{"line":93,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageEmbedThumbnail","description":"Represents the thumbnail of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"url","description":"URL for this thumbnail","type":[[["string"]]]},{"name":"proxyURL","description":"ProxyURL for this thumbnail","type":[[["string"]]]},{"name":"height","description":"Height of this thumbnail","type":[[["number"]]]},{"name":"width","description":"Width of this thumbnail","type":[[["number"]]]}],"meta":{"line":110,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageEmbedImage","description":"Represents the image of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"url","description":"URL for this image","type":[[["string"]]]},{"name":"proxyURL","description":"ProxyURL for this image","type":[[["string"]]]},{"name":"height","description":"Height of this image","type":[[["number"]]]},{"name":"width","description":"Width of this image","type":[[["number"]]]}],"meta":{"line":132,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageEmbedVideo","description":"Represents the video of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"url","description":"URL of this video","type":[[["string"]]]},{"name":"proxyURL","description":"ProxyURL for this video","type":[[["string"]]]},{"name":"height","description":"Height of this video","type":[[["number"]]]},{"name":"width","description":"Width of this video","type":[[["number"]]]}],"meta":{"line":154,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageEmbedAuthor","description":"Represents the author field of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this author","type":[[["string"]]]},{"name":"url","description":"URL of this author","type":[[["string"]]]},{"name":"iconURL","description":"URL of the icon for this author","type":[[["string"]]]},{"name":"proxyIconURL","description":"Proxied URL of the icon for this author","type":[[["string"]]]}],"meta":{"line":177,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageEmbedProvider","description":"Represents the provider of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this provider","type":[[["string"]]]},{"name":"url","description":"URL of this provider","type":[[["string"]]]}],"meta":{"line":199,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"MessageEmbedFooter","description":"Represents the footer field of a MessageEmbed","type":[[["Object"]]],"props":[{"name":"text","description":"The text of this footer","type":[[["string"]]]},{"name":"iconURL","description":"URL of the icon for this footer","type":[[["string"]]]},{"name":"proxyIconURL","description":"Proxied URL of the icon for this footer","type":[[["string"]]]}],"meta":{"line":217,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"EmbedAuthorData","description":"The options to provide for setting an author for a {@link WebEmbed}.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this author.","type":[[["string"]]]}],"meta":{"line":199,"file":"WebEmbed.js","path":"src/structures"}},{"name":"EmbedFooterData","description":"The options to provide for setting a footer for a {@link MessageEmbed}.","type":[[["Object"]]],"props":[{"name":"text","description":"The text of the footer.","type":[[["string"]]]},{"name":"iconURL","description":"The icon URL of the footer.","optional":true,"type":[[["string"]]]}],"meta":{"line":427,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"EmbedFieldData","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this field","type":[[["string"]]]},{"name":"value","description":"The value of this field","type":[[["string"]]]},{"name":"inline","description":"If this field will be displayed inline","optional":true,"type":[[["boolean"]]]}],"meta":{"line":560,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"CrosspostedChannel","description":"Crossposted channel data.","type":[[["Object"]]],"props":[{"name":"channelId","description":"The mentioned channel's id","type":[[["Snowflake"]]]},{"name":"guildId","description":"The id of the guild that has the channel","type":[[["Snowflake"]]]},{"name":"type","description":"The channel's type","type":[[["ChannelType"]]]},{"name":"name","description":"The channel's name","type":[[["string"]]]}],"meta":{"line":103,"file":"MessageMentions.js","path":"src/structures"}},{"name":"MessageMentionsHasOptions","description":"Options used to check for a mention.","type":[[["Object"]]],"props":[{"name":"ignoreDirect","description":"Whether to ignore direct mentions to the item","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"ignoreRoles","description":"Whether to ignore role mentions to a guild member","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"ignoreRepliedUser","description":"Whether to ignore replied user mention to an user","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"ignoreEveryone","description":"Whether to ignore `@everyone`/`@here` mentions","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":195,"file":"MessageMentions.js","path":"src/structures"}},{"name":"MessageTarget","description":"A target for a message.","type":[[["TextBasedChannels"]],[["DMChannel"]],[["User"]],[["GuildMember"]],[["Webhook"]],[["WebhookClient"]],[["Interaction"]],[["InteractionWebhook"]],[["Message"]],[["MessageManager"]]],"meta":{"line":349,"file":"MessagePayload.js","path":"src/structures"}},{"name":"MessageFile","type":[[["Object"]]],"props":[{"name":"attachment","description":"The original attachment that generated this file","type":[[["Buffer"]],[["string"]],[["Stream"]]]},{"name":"name","description":"The name of this file","type":[[["string"]]]},{"name":"file","description":"The file to be sent to the API","type":[[["Buffer"]],[["Stream"]]]}],"meta":{"line":40,"file":"MessagePayload.js","path":"src/structures"}},{"name":"ReactionCountDetailsData","description":"The reaction count details object contains information about super and normal reaction counts.","type":[[["Object"]]],"props":[{"name":"burst","description":"Count of super reaction","type":[[["number"]]]},{"name":"normal","description":"Count of normal reaction","type":[[["number"]]]}],"meta":{"line":76,"file":"MessageReaction.js","path":"src/structures"}},{"name":"MessageSelectMenuOptions","type":[[["BaseMessageComponentOptions"]]],"props":[{"name":"customId","description":"A unique string to be sent in the interaction when clicked","optional":true,"type":[[["string"]]]},{"name":"placeholder","description":"Custom placeholder text to display when nothing is selected","optional":true,"type":[[["string"]]]},{"name":"minValues","description":"The minimum number of selections required","optional":true,"type":[[["number"]]]},{"name":"maxValues","description":"The maximum number of selections allowed","optional":true,"type":[[["number"]]]},{"name":"options","description":"Options for the select menu","optional":true,"type":[[["Array","<"],["MessageSelectOption",">"]]]},{"name":"disabled","description":"Disables the select menu to prevent interactions","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"channelTypes","description":"List of channel types to include in the ChannelSelect component","optional":true,"type":[[["Array","<"],["ChannelType",">"]]]}],"meta":{"line":21,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"MessageSelectOption","type":[[["Object"]]],"props":[{"name":"label","description":"The text to be displayed on this option","type":[[["string"]]]},{"name":"value","description":"The value to be sent for this option","type":[[["string"]]]},{"name":"description","description":"Optional description to show for this option","nullable":true,"type":[[["string"]]]},{"name":"emoji","description":"Emoji to display for this option","nullable":true,"type":[[["RawEmoji"]]]},{"name":"default","description":"Render this option as the default selection","type":[[["boolean"]]]}],"meta":{"line":32,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"MessageSelectOptionData","type":[[["Object"]]],"props":[{"name":"label","description":"The text to be displayed on this option","type":[[["string"]]]},{"name":"value","description":"The value to be sent for this option","type":[[["string"]]]},{"name":"description","description":"Optional description to show for this option","optional":true,"type":[[["string"]]]},{"name":"emoji","description":"Emoji to display for this option","optional":true,"type":[[["EmojiIdentifierResolvable"]]]},{"name":"default","description":"Render this option as the default selection","optional":true,"type":[[["boolean"]]]}],"meta":{"line":41,"file":"MessageSelectMenu.js","path":"src/structures"}},{"name":"ModalOptions","type":[[["Object"]]],"props":[{"name":"customId","description":"A unique string to be sent in the interaction when clicked","optional":true,"type":[[["string"]]]},{"name":"title","description":"The title to be displayed on this modal","optional":true,"type":[[["string"]]]},{"name":"components","description":"Action rows containing interactive components for the modal (text input components)","optional":true,"type":[[["Array","<("],["MessageActionRow","|"],["MessageActionRowOptions",")>"]]]}],"meta":{"line":13,"file":"Modal.js","path":"src/structures"}},{"name":"TextInputComponentReplyData","type":[[["Object"]]],"props":[{"name":"customId","description":"TextInputComponent custom id","optional":true,"type":[[["string"]]]},{"name":"value","description":"TextInputComponent value","optional":true,"type":[[["string"]]]}],"meta":{"line":147,"file":"Modal.js","path":"src/structures"}},{"name":"ModalReplyData","type":[[["Object"]]],"props":[{"name":"guild","description":"Guild to send the modal to","optional":true,"nullable":true,"type":[[["GuildResolvable"]]]},{"name":"channel","description":"User to send the modal to","optional":true,"nullable":true,"type":[[["TextChannelResolvable"]]]},{"name":"data","description":"Reply data","optional":true,"nullable":true,"type":[[["Array","<"],["TextInputComponentReplyData",">"]]]}],"meta":{"line":153,"file":"Modal.js","path":"src/structures"}},{"name":"PartialTextInputData","type":[[["Object"]]],"props":[{"name":"customId","description":"A unique string to be sent in the interaction when submitted","optional":true,"type":[[["string"]]]},{"name":"type","description":"The type of this component","optional":true,"type":[[["MessageComponentType"]]]},{"name":"value","description":"Value of this text input component","optional":true,"type":[[["string"]]]}],"meta":{"line":24,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"PartialModalActionRow","type":[[["Object"]]],"props":[{"name":"type","description":"The type of this component","optional":true,"type":[[["MessageComponentType"]]]},{"name":"components","description":"Partial text input components","optional":true,"type":[[["Array","<"],["PartialTextInputData",">"]]]}],"meta":{"line":31,"file":"ModalSubmitInteraction.js","path":"src/structures"}},{"name":"CallOptions","type":[[["Object"]]],"props":[{"name":"selfDeaf","description":"Whether to deafen yourself","optional":true,"type":[[["boolean"]]]},{"name":"selfMute","description":"Whether to mute yourself","optional":true,"type":[[["boolean"]]]},{"name":"ring","description":"Emit a ringtone","optional":true,"default":true,"type":[[["boolean"]]]}],"meta":{"line":303,"file":"PartialGroupDMChannel.js","path":"src/structures"}},{"name":"PermissionOverwriteOptions","description":"An object mapping permission flags to `true` (enabled), `null` (unset) or `false` (disabled).\n```js\n{\n 'SEND_MESSAGES': true,\n 'EMBED_LINKS': null,\n 'ATTACH_FILES': false,\n}\n```","type":[[["Object"]]],"meta":{"line":97,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"ResolvedOverwriteOptions","type":[[["Object"]]],"props":[{"name":"allow","description":"The allowed permissions","type":[[["Permissions"]]]},{"name":"deny","description":"The denied permissions","type":[[["Permissions"]]]}],"meta":{"line":109,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"RawOverwriteData","description":"The raw data for a permission overwrite","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the {@link Role} or {@link User} this overwrite belongs to","type":[[["Snowflake"]]]},{"name":"allow","description":"The permissions to allow","type":[[["string"]]]},{"name":"deny","description":"The permissions to deny","type":[[["string"]]]},{"name":"type","description":"The type of this OverwriteData","type":[[["number"]]]}],"meta":{"line":141,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"OverwriteResolvable","description":"Data that can be resolved into {@link RawOverwriteData}. This can be:\n* PermissionOverwrites\n* OverwriteData","type":[[["PermissionOverwrites"]],[["OverwriteData"]]],"meta":{"line":150,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"OverwriteData","description":"Data that can be used for a permission overwrite","type":[[["Object"]]],"props":[{"name":"id","description":"Member or role this overwrite is for","type":[[["GuildMemberResolvable"]],[["RoleResolvable"]]]},{"name":"allow","description":"The permissions to allow","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"deny","description":"The permissions to deny","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"type","description":"The type of this OverwriteData","optional":true,"type":[[["OverwriteType"]]]}],"meta":{"line":157,"file":"PermissionOverwrites.js","path":"src/structures"}},{"name":"MessageActivity","description":"Activity sent in a message.","type":[[["Object"]]],"props":[{"name":"partyId","description":"Id of the party represented in activity","optional":true,"type":[[["string"]]]},{"name":"type","description":"Type of activity sent","type":[[["MessageActivityType"]]]}],"meta":{"line":10,"file":"Presence.js","path":"src/structures"}},{"name":"PresenceStatus","description":"The status of this presence:\n* **`online`** - user is online\n* **`idle`** - user is AFK\n* **`offline`** - user is offline or invisible\n* **`dnd`** - user is in Do Not Disturb","type":[[["string"]]],"meta":{"line":22,"file":"Presence.js","path":"src/structures"}},{"name":"ClientPresenceStatus","description":"The status of this presence:\n* **`online`** - user is online\n* **`idle`** - user is AFK\n* **`dnd`** - user is in Do Not Disturb","type":[[["string"]]],"meta":{"line":31,"file":"Presence.js","path":"src/structures"}},{"name":"ActivityPlatform","description":"The platform of this activity:\n* **`desktop`**\n* **`samsung`** - playing on Samsung Galaxy\n* **`xbox`** - playing on Xbox Live","type":[[["string"]]],"meta":{"line":166,"file":"Presence.js","path":"src/structures"}},{"name":"ActivityTimestamps","description":"Represents timestamps of an activity","type":[[["Object"]]],"props":[{"name":"start","description":"When the activity started","nullable":true,"type":[[["Date"]]]},{"name":"end","description":"When the activity will end","nullable":true,"type":[[["Date"]]]}],"meta":{"line":229,"file":"Presence.js","path":"src/structures"}},{"name":"ActivityParty","description":"Represents a party of an activity","type":[[["Object"]]],"props":[{"name":"id","description":"The party's id","nullable":true,"type":[[["string"]]]},{"name":"size","description":"Size of the party as `[current, max]`","type":[[["Array","<"],["number",">"]]]}],"meta":{"line":259,"file":"Presence.js","path":"src/structures"}},{"name":"ReactionCollectorOptions","type":[[["CollectorOptions"]]],"props":[{"name":"max","description":"The maximum total amount of reactions to collect","type":[[["number"]]]},{"name":"maxEmojis","description":"The maximum number of emojis to collect","type":[[["number"]]]},{"name":"maxUsers","description":"The maximum number of users to react","type":[[["number"]]]}],"meta":{"line":7,"file":"ReactionCollector.js","path":"src/structures"}},{"name":"CustomStatusOptions","type":[[["Object"]]],"props":[{"name":"state","description":"The state to be displayed","optional":true,"type":[[["string"]]]},{"name":"emoji","description":"The emoji to be displayed","optional":true,"type":[[["EmojiIdentifierResolvable"]]]}],"meta":{"line":19,"file":"RichPresence.js","path":"src/structures"}},{"name":"RichParty","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the party","type":[[["string"]]]},{"name":"max","description":"The maximum number of members in the party","type":[[["number"]]]},{"name":"current","description":"The current number of members in the party","type":[[["number"]]]}],"meta":{"line":338,"file":"RichPresence.js","path":"src/structures"}},{"name":"RichButton","type":[[["object"]]],"props":[{"name":"name","description":"The name of the button","type":[[["string"]]]},{"name":"url","description":"The url of the button","type":[[["string"]]]}],"meta":{"line":384,"file":"RichPresence.js","path":"src/structures"}},{"name":"SpotifyMetadata","type":[[["Object"]]],"props":[{"name":"album_id","description":"Album id","type":[[["string"]]]},{"name":"artist_ids","description":"Artist ids","type":[[["Array","<"],["string",">"]]]}],"meta":{"line":600,"file":"RichPresence.js","path":"src/structures"}},{"name":"ExternalAssets","type":[[["Object"]]],"props":[{"name":"url","description":"Orginal url of the image","nullable":true,"type":[[["string"]]]},{"name":"external_asset_path","description":"Proxy url of the image (Using to RPC)","nullable":true,"type":[[["string"]]]}],"meta":{"line":711,"file":"RichPresence.js","path":"src/structures"}},{"name":"RoleData","description":"The data for a role.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the role","optional":true,"type":[[["string"]]]},{"name":"color","description":"The color of the role, either a hex string or a base 10 number","optional":true,"type":[[["ColorResolvable"]]]},{"name":"hoist","description":"Whether or not the role should be hoisted","optional":true,"type":[[["boolean"]]]},{"name":"position","description":"The position of the role","optional":true,"type":[[["number"]]]},{"name":"permissions","description":"The permissions of the role","optional":true,"type":[[["PermissionResolvable"]]]},{"name":"mentionable","description":"Whether or not the role should be mentionable","optional":true,"type":[[["boolean"]]]},{"name":"icon","description":"The icon for the role\nThe `EmojiResolvable` should belong to the same guild as the role.\nIf not, pass the emoji's URL directly","optional":true,"nullable":true,"type":[[["BufferResolvable"]],[["Base64Resolvable"]],[["EmojiResolvable"]]]},{"name":"unicodeEmoji","description":"The unicode emoji for the role","optional":true,"nullable":true,"type":[[["string"]]]}],"meta":{"line":265,"file":"Role.js","path":"src/structures"}},{"name":"SetRolePositionOptions","description":"Options used to set the position of a role.","type":[[["Object"]]],"props":[{"name":"relative","description":"Whether to change the position relative to its current value or not","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"reason","description":"The reason for changing the position","optional":true,"type":[[["string"]]]}],"meta":{"line":415,"file":"Role.js","path":"src/structures"}},{"name":"SessionClientInfo","type":[[["Object"]]],"props":[{"name":"location","description":"Location of the client (using IP address)","type":[[["string"]]]},{"name":"platform","description":"Platform of the client","type":[[["string"]]]},{"name":"os","description":"Operating system of the client","type":[[["string"]]]}],"meta":{"line":5,"file":"Session.js","path":"src/structures"}},{"name":"GuildStickerEditData","description":"Data for editing a sticker.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the sticker","optional":true,"type":[[["string"]]]},{"name":"description","description":"The description of the sticker","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"tags","description":"The Discord name of a unicode emoji representing the sticker's expression","optional":true,"type":[[["string"]]]}],"meta":{"line":235,"file":"Sticker.js","path":"src/structures"}},{"name":"TextInputComponentOptions","type":[[["BaseMessageComponentOptions"]]],"props":[{"name":"customId","description":"A unique string to be sent in the interaction when submitted","optional":true,"type":[[["string"]]]},{"name":"label","description":"The text to be displayed above this text input component","optional":true,"type":[[["string"]]]},{"name":"maxLength","description":"Maximum length of text that can be entered","optional":true,"type":[[["number"]]]},{"name":"minLength","description":"Minimum length of text required to be entered","optional":true,"type":[[["number"]]]},{"name":"placeholder","description":"Custom placeholder text to display when no text is entered","optional":true,"type":[[["string"]]]},{"name":"required","description":"Whether or not this text input component is required","optional":true,"type":[[["boolean"]]]},{"name":"style","description":"The style of this text input component","optional":true,"type":[[["TextInputStyleResolvable"]]]},{"name":"value","description":"Value of this text input component","optional":true,"type":[[["string"]]]}],"meta":{"line":14,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"TextInputStyleResolvable","description":"Data that can be resolved to a TextInputStyle. This can be\n* TextInputStyle\n* number","type":[[["number"]],[["TextInputStyle"]]],"meta":{"line":183,"file":"TextInputComponent.js","path":"src/structures"}},{"name":"ThreadEditData","description":"The options used to edit a thread channel","type":[[["Object"]]],"props":[{"name":"name","description":"The new name for the thread","optional":true,"type":[[["string"]]]},{"name":"archived","description":"Whether the thread is archived","optional":true,"type":[[["boolean"]]]},{"name":"autoArchiveDuration","description":"The amount of time (in minutes) after which the thread\nshould automatically archive in case of no recent activity","optional":true,"type":[[["ThreadAutoArchiveDuration"]]]},{"name":"rateLimitPerUser","description":"The rate limit per user (slowmode) for the thread in seconds","optional":true,"type":[[["number"]]]},{"name":"locked","description":"Whether the thread is locked","optional":true,"type":[[["boolean"]]]},{"name":"invitable","description":"Whether non-moderators can add other non-moderators to a thread\nCan only be edited on `GUILD_PRIVATE_THREAD`","optional":true,"type":[[["boolean"]]]},{"name":"appliedTags","description":"The tags to apply to the thread","optional":true,"type":[[["Array","<"],["Snowflake",">"]]]},{"name":"flags","description":"The flags to set on the channel","optional":true,"type":[[["ChannelFlagsResolvable"]]]}],"meta":{"line":332,"file":"ThreadChannel.js","path":"src/structures"}},{"name":"ConnectionAccount","description":"An array of object (connected accounts), containing the following properties:","see":["{@link https://discord.com/developers/docs/resources/user#connection-object}"],"type":[[["Object"]]],"props":[{"name":"type","description":"The account type (twitch, youtube, etc)","type":[[["string"]]]},{"name":"name","description":"The account name","type":[[["string"]]]},{"name":"id","description":"The account id","type":[[["string"]]]},{"name":"verified","description":"Whether the account is verified","type":[[["boolean"]]]}],"meta":{"line":34,"file":"User.js","path":"src/structures"}},{"name":"BadgeIcon","type":[[["function"]]],"returns":[[["string"]]],"meta":{"line":318,"file":"User.js","path":"src/structures"}},{"name":"UserBadge","type":[[["Object"]]],"props":[{"name":"id","description":"The id of the badge","type":[[["string"]]]},{"name":"description","description":"The description of the badge","type":[[["string"]]]},{"name":"icon","description":"The icon hash of the badge","type":[[["string"]]]},{"name":"link","description":"The link of the badge","nullable":true,"type":[[["string"]]]},{"name":"iconURL","description":"The iconURL of the badge","type":[[["BadgeIcon"]]]}],"meta":{"line":323,"file":"User.js","path":"src/structures"}},{"name":"WebEmbedOptions","description":"Represents the possible options for a WebEmbed","type":[[["Object"]]],"props":[{"name":"title","description":"The title of this embed","optional":true,"type":[[["string"]]]},{"name":"description","description":"The description of this embed","optional":true,"type":[[["string"]]]},{"name":"url","description":"The URL of this embed","optional":true,"type":[[["string"]]]},{"name":"color","description":"The color of this embed","optional":true,"type":[[["ColorResolvable"]]]},{"name":"author","description":"The author of this embed","optional":true,"type":[[["Partial","<"],["WebEmbedAuthor",">"]]]},{"name":"thumbnail","description":"The thumbnail of this embed","optional":true,"type":[[["Partial","<"],["WebEmbedThumbnail",">"]]]},{"name":"image","description":"The image of this embed","optional":true,"type":[[["Partial","<"],["WebEmbedImage",">"]]]},{"name":"video","description":"The video of this embed","optional":true,"type":[[["Partial","<"],["WebEmbedVideo",">"]]]},{"name":"footer","description":"The footer of this embed","optional":true,"type":[[["Partial","<"],["WebEmbedFooter",">"]]]},{"name":"provider","description":"The provider of this embed","optional":true,"type":[[["Partial","<"],["WebEmbedProvider",">"]]]},{"name":"redirect","description":"Redirect URL","optional":true,"type":[[["string"]]]}],"meta":{"line":25,"file":"WebEmbed.js","path":"src/structures"}},{"name":"WebEmbedImage","description":"Represents the image of a WebEmbed","type":[[["Object"]]],"props":[{"name":"url","description":"URL for this image","type":[[["string"]]]},{"name":"proxyURL","description":"ProxyURL for this image","type":[[["string"]]]},{"name":"height","description":"Height of this image","type":[[["number"]]]},{"name":"width","description":"Width of this image","type":[[["number"]]]}],"meta":{"line":99,"file":"WebEmbed.js","path":"src/structures"}},{"name":"WebEmbedVideo","description":"Represents the video of a WebEmbed","type":[[["Object"]]],"props":[{"name":"url","description":"URL of this video","type":[[["string"]]]},{"name":"proxyURL","description":"ProxyURL for this video","type":[[["string"]]]},{"name":"height","description":"Height of this video","type":[[["number"]]]},{"name":"width","description":"Width of this video","type":[[["number"]]]}],"meta":{"line":134,"file":"WebEmbed.js","path":"src/structures"}},{"name":"WebEmbedAuthor","description":"Represents the author field of a WebEmbed","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this author","type":[[["string"]]]},{"name":"url","description":"URL of this author","type":[[["string"]]]}],"meta":{"line":157,"file":"WebEmbed.js","path":"src/structures"}},{"name":"WebEmbedProvider","description":"Represents the provider of a WebEmbed","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this provider","type":[[["string"]]]},{"name":"url","description":"URL of this provider","type":[[["string"]]]}],"meta":{"line":175,"file":"WebEmbed.js","path":"src/structures"}},{"name":"EmbedProviderData","description":"The options to provide for setting an provider for a {@link WebEmbed}.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of this provider.","type":[[["string"]]]}],"meta":{"line":224,"file":"WebEmbed.js","path":"src/structures"}},{"name":"WebhookMessageOptions","description":"Options that can be passed into send.","type":[[["BaseMessageOptions"]]],"props":[{"name":"username","description":"Username override for the message","optional":true,"default":"this.name","type":[[["string"]]]},{"name":"avatarURL","description":"Avatar URL override for the message","optional":true,"type":[[["string"]]]},{"name":"threadId","description":"The id of the thread in the channel to send to.\nFor interaction webhooks, this property is ignored","optional":true,"type":[[["Snowflake"]]]},{"name":"flags","description":"Which flags to set for the message. Only `SUPPRESS_EMBEDS` can be set.","optional":true,"type":[[["MessageFlags"]]]}],"meta":{"line":112,"file":"Webhook.js","path":"src/structures"}},{"name":"WebhookEditMessageOptions","description":"Options that can be passed into editMessage.","type":[[["Object"]]],"props":[{"name":"embeds","description":"See {@link WebhookMessageOptions#embeds}","optional":true,"type":[[["Array","<"],["MessageEmbed",">"]],[["Array","<"],["APIEmbed",">"]]]},{"name":"content","description":"See {@link BaseMessageOptions#content}","optional":true,"type":[[["string"]]]},{"name":"files","description":"See {@link BaseMessageOptions#files}","optional":true,"type":[[["Array","<"],["FileOptions",">"]],[["Array","<"],["BufferResolvable",">"]],[["Array","<"],["MessageAttachment",">"]]]},{"name":"allowedMentions","description":"See {@link BaseMessageOptions#allowedMentions}","optional":true,"type":[[["MessageMentionOptions"]]]},{"name":"attachments","description":"Attachments to send with the message","optional":true,"type":[[["Array","<"],["MessageAttachment",">"]]]},{"name":"components","description":"Action rows containing interactive components for the message (buttons, select menus)","optional":true,"type":[[["Array","<("],["MessageActionRow","|"],["MessageActionRowOptions",")>"]]]},{"name":"threadId","description":"The id of the thread this message belongs to\nFor interaction webhooks, this property is ignored","optional":true,"type":[[["Snowflake"]]]},{"name":"threadName","description":"Name of the thread to create (only available if webhook is in a forum channel)","optional":true,"type":[[["string"]]]}],"meta":{"line":122,"file":"Webhook.js","path":"src/structures"}},{"name":"WebhookEditData","description":"Options used to edit a {@link Webhook}.","type":[[["Object"]]],"props":[{"name":"name","description":"The new name for the webhook","optional":true,"default":"this.name","type":[[["string"]]]},{"name":"avatar","description":"The new avatar for the webhook","optional":true,"nullable":true,"type":[[["BufferResolvable"]]]},{"name":"channel","description":"The new channel for the webhook","optional":true,"type":[[["GuildTextChannelResolvable"]],[["VoiceChannel"]],[["StageChannel"]],[["ForumChannel"]]]}],"meta":{"line":237,"file":"Webhook.js","path":"src/structures"}},{"name":"WebhookFetchMessageOptions","description":"Options that can be passed into fetchMessage.","type":[[["options"]]],"props":[{"name":"cache","description":"Whether to cache the message.","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"threadId","description":"The id of the thread this message belongs to.\nFor interaction webhooks, this property is ignored","optional":true,"type":[[["Snowflake"]]]}],"meta":{"line":270,"file":"Webhook.js","path":"src/structures"}},{"name":"WidgetChannel","description":"Represents a channel in a Widget","type":[[["Object"]]],"props":[{"name":"id","description":"Id of the channel","type":[[["Snowflake"]]]},{"name":"name","description":"Name of the channel","type":[[["string"]]]},{"name":"position","description":"Position of the channel","type":[[["number"]]]}],"meta":{"line":17,"file":"Widget.js","path":"src/structures"}},{"name":"WidgetActivity","description":"Activity sent in a {@link WidgetMember}.","type":[[["Object"]]],"props":[{"name":"name","description":"The name of the activity","type":[[["string"]]]}],"meta":{"line":10,"file":"WidgetMember.js","path":"src/structures"}},{"name":"AttachmentFlagsResolvable","description":"Data that can be resolved to give a guild attachment bitfield. This can be:\n* A string (see {@link AttachmentFlags.FLAGS})\n* A attachment flag\n* An instance of AttachmentFlags\n* An Array of AttachmentFlagsResolvable","type":[[["string"]],[["number"]],[["AttachmentFlags"]],[["Array","<"],["AttachmentFlagsResolvable",">"]]],"meta":{"line":29,"file":"AttachmentFlags.js","path":"src/util"}},{"name":"BitFieldResolvable","description":"Data that can be resolved to give a bitfield. This can be:\n* A bit number (this can be a number literal or a value taken from {@link BitField.FLAGS})\n* A string bit number\n* An instance of BitField\n* An Array of BitFieldResolvable","type":[[["number"]],[["string"]],[["bigint"]],[["BitField"]],[["Array","<"],["BitFieldResolvable",">"]]],"meta":{"line":129,"file":"BitField.js","path":"src/util"}},{"name":"ChannelFlagsResolvable","description":"Data that can be resolved to give a channel flag bitfield. This can be:\n* A string (see {@link ChannelFlags.FLAGS})\n* A channel flag\n* An instance of ChannelFlags\n* An Array of ChannelFlags","type":[[["string"]],[["number"]],[["ChannelFlags"]],[["Array","<"],["ChannelFlagsResolvable",">"]]],"meta":{"line":36,"file":"ChannelFlags.js","path":"src/util"}},{"name":"Constants","description":"Constants that can be used in an enum or object-like way.","type":[[["Object"]]],"props":[{"name":"ActivityTypes","description":"The type of an activity of a users presence.","type":[[["Object","<"],["ActivityType",", "],["number",">"]]]},{"name":"APIErrors","description":"An error encountered while performing an API request.","type":[[["Object","<"],["APIError",", "],["number",">"]]]},{"name":"ApplicationCommandOptionTypes","description":"The type of an {@link ApplicationCommandOption} object.","type":[[["Object","<"],["ApplicationCommandOptionType",", "],["number",">"]]]},{"name":"ApplicationCommandPermissionTypes","description":"The type of an {@link ApplicationCommandPermissions} object.","type":[[["Object","<"],["ApplicationCommandPermissionType",", "],["number",">"]]]},{"name":"ApplicationCommandTypes","description":"The type of an {@link ApplicationCommand} object.","type":[[["Object","<"],["ApplicationCommandType",", "],["number",">"]]]},{"name":"ApplicationRoleConnectionMetadataTypes","description":"The type of an {@link ApplicationRoleConnectionMetadata} object.","type":[[["Object","<"],["ApplicationRoleConnectionMetadataType",", "],["number",">"]]]},{"name":"AutoModerationActionTypes","description":"A type of an action which executes whenever a rule is triggered.","type":[[["Object","<"],["AutoModerationActionType",", "],["number",">"]]]},{"name":"AutoModerationRuleEventTypes","description":"Indicates in what event context\na rule should be checked.","type":[[["Object","<"],["AutoModerationRuleEventType",", "],["number",">"]]]},{"name":"AutoModerationRuleKeywordPresetTypes","description":"The internally pre-defined wordsetswhich will be searched for in content","type":[[["Object","<"],["AutoModerationRuleKeywordPresetType",", "],["number",">"]]]},{"name":"AutoModerationRuleTriggerTypes","description":"Characterizes the type\nof content which can trigger the rule.","type":[[["Object","<"],["AutoModerationRuleTriggerType",", "],["number",">"]]]},{"name":"ChannelTypes","description":"All available channel types.","type":[[["Object","<"],["ChannelType",", "],["number",">"]]]},{"name":"ClientApplicationAssetTypes","description":"The types of an {@link ApplicationAsset} object.","type":[[["ClientApplicationAssetTypes"]]]},{"name":"Colors","description":"An object with regularly used colors.","type":[[["Object","<"],["Color",", "],["number",">"]]]},{"name":"DefaultMessageNotificationLevels","description":"The value set for a guilds default message notifications.","type":[[["Object","<"],["DefaultMessageNotificationLevel",", "],["number",">"]]]},{"name":"Endpoints","description":"Object containing functions that return certain endpoints on the API.","type":[[["Endpoints"]]]},{"name":"Events","description":"The types of events emitted by the Client.","type":[[["Events"]]]},{"name":"ExplicitContentFilterLevels","description":"The value set for the explicit content filter levels for a guild.","type":[[["Object","<"],["ExplicitContentFilterLevel",", "],["number",">"]]]},{"name":"GuildScheduledEventEntityTypes","description":"The entity type of a {@link GuildScheduledEvent} object.","type":[[["Object","<"],["GuildScheduledEventEntityType",", "],["number",">"]]]},{"name":"GuildScheduledEventPrivacyLevels","description":"Privacy level of a {@link GuildScheduledEvent} object.","type":[[["Object","<"],["GuildScheduledEventPrivacyLevel",", "],["number",">"]]]},{"name":"GuildScheduledEventStatuses","description":"The status of a {@link GuildScheduledEvent} object.","type":[[["Object","<"],["GuildScheduledEventStatus",", "],["number",">"]]]},{"name":"IntegrationExpireBehaviors","description":"The behavior of expiring subscribers for Integrations.","type":[[["Object","<"],["IntegrationExpireBehavior",", "],["number",">"]]]},{"name":"InteractionResponseTypes","description":"The type of an interaction response.","type":[[["Object","<"],["InteractionResponseType",", "],["number",">"]]]},{"name":"InteractionTypes","description":"The type of an {@link Interaction} object.","type":[[["Object","<"],["InteractionType",", "],["number",">"]]]},{"name":"InviteScopes","description":"The scopes of an invite.","type":[[["Array","<"],["InviteScope",">"]]]},{"name":"MaxBulkDeletableMessageAge","description":"Max bulk deletable message age (Unavailable to selfbots)","type":[[["number"]]]},{"name":"MembershipStates","description":"The value set for a team members membership state.","type":[[["Object","<"],["MembershipState",", "],["number",">"]]]},{"name":"MessageButtonStyles","description":"The style of a message button.","type":[[["Object","<"],["MessageButtonStyle",", "],["number",">"]]]},{"name":"MessageComponentTypes","description":"The type of a message component.","type":[[["Object","<"],["MessageComponentType",", "],["number",">"]]]},{"name":"MessageTypes","description":"The type of a {@link Message} object.","type":[[["Array","<"],["MessageType",">"]]]},{"name":"SelectMenuComponentTypes","description":"The type of any select menu.","type":[[["Object","<"],["SelectMenuComponentType",", "],["number",">"]]]},{"name":"MFALevels","description":"The required MFA level for a guild.","type":[[["Object","<"],["MFALevel",", "],["number",">"]]]},{"name":"NSFWLevels","description":"NSFW level of a guild.","type":[[["Object","<"],["NSFWLevel",", "],["number",">"]]]},{"name":"Opcodes","description":"The types of Opcodes sent to the Gateway.","type":[[["Opcodes"]]]},{"name":"OverwriteTypes","description":"An overwrite type.","type":[[["Object","<"],["OverwriteType",", "],["number",">"]]]},{"name":"Package","description":"The package.json of the library.","type":[[["Object"]]]},{"name":"PartialTypes","description":"The type of Structure allowed to be a partial.","type":[[["Object","<"],["PartialType",", "],["PartialType",">"]]]},{"name":"PremiumTiers","description":"The premium tier (Server Boost level) of a guild.","type":[[["Object","<"],["PremiumTier",", "],["number",">"]]]},{"name":"PrivacyLevels","description":"Privacy level of a {@link StageInstance} object.","type":[[["Object","<"],["PrivacyLevel",", "],["number",">"]]]},{"name":"ShardEvents","description":"The type of events emitted by a Shard.","type":[[["ShardEvents"]]]},{"name":"Status","description":"The available statuses of the client.","type":[[["Status"]]]},{"name":"StickerFormatTypes","description":"The value set for a stickers format type.","type":[[["Object","<"],["StickerFormatType",", "],["number",">"]]]},{"name":"StickerTypes","description":"The value set for a stickers type.","type":[[["Object","<"],["StickerType",", "],["number",">"]]]},{"name":"SweeperKeys","description":"The name of an item to be swept in Sweepers.","type":[[["Array","<"],["SweeperKey",">"]]]},{"name":"SystemMessageTypes","description":"The types of messages that are `System`.","type":[[["Array","<"],["SystemMessageType",">"]]]},{"name":"TextInputStyles","description":"The style of a text input component.","type":[[["Object","<"],["TextInputStyle",", "],["number",">"]]]},{"name":"ThreadChannelTypes","description":"The type of a {@link ThreadChannel} object.","type":[[["Array","<"],["ThreadChannelTypes",">"]]]},{"name":"UserAgent","description":"The user agent used for requests.","type":[[["string"]]]},{"name":"VerificationLevels","description":"The value set for the verification levels for a guild.","type":[[["Object","<"],["VerificationLevel",", "],["number",">"]]]},{"name":"VideoQualityModes","description":"The camera video quality mode for a {@link VoiceChannel}.","type":[[["Object","<"],["VideoQualityMode",", "],["number",">"]]]},{"name":"WebhookTypes","description":"The value set for a webhooks type.","type":[[["Object","<"],["WebhookType",", "],["number",">"]]]},{"name":"WSCodes","description":"The types of WebSocket error codes.","type":[[["WSCodes"]]]},{"name":"WSEvents","description":"The type of a WebSocket message event.","type":[[["Object","<"],["WSEventType",", "],["WSEventType",">"]]]}],"meta":{"line":1870,"file":"Constants.js","path":"src/util"}},{"name":"MaxBulkDeletableMessageAge","description":"Max bulk deletable message age","type":[[["number"]]],"meta":{"line":11,"file":"Constants.js","path":"src/util"}},{"name":"captchaServices","description":"API captcha solver\n* `2captcha` - 2captcha.com\n* `capmonster` - capmonster.cloud","type":[[["Array","<"],["string",">"]]],"meta":{"line":17,"file":"Constants.js","path":"src/util"}},{"name":"DMScanLevel","description":"Automatically scan and delete direct messages you receive that contain explicit media content.\n* `NOT_SCAN` - Direct messages will not be scanned for explicit content.\n* `NOT_FRIEND` - Scan direct messages from everyone unless they are a friend.\n* `EVERYONE` - Scan direct messages from everyone.","type":[[["string"]]],"meta":{"line":25,"file":"Constants.js","path":"src/util"}},{"name":"stickerAnimationMode","description":"This controls when stickers animate:\n* `ALWAYS` - Always animate.\n* `INTERACTION` - On the desktop client, stickers will animate on hover or focus. On mobile clients, stickers will animate on long-press.\n* `NEVER` - Never animate.","type":[[["string"]]],"meta":{"line":34,"file":"Constants.js","path":"src/util"}},{"name":"NitroType","description":"All available nitro types:\n* `NONE` - None\n* `NITRO_CLASSIC` - Nitro Classic\n* `NITRO_BOOST` - Nitro\n* `NITRO_BASIC` - Nitro Basic\n* `UNKNOWN` - Unknown","see":["{@link https://discord.com/developers/docs/resources/user#user-object-premium-types}"],"type":[[["string"]]],"meta":{"line":43,"file":"Constants.js","path":"src/util"}},{"name":"HypeSquadType","description":"All available HypeSquad types:\n* `LEAVE` - None\n* `HOUSE_BRAVERY` - HypeSquad Bravery\n* `HOUSE_BRILLIANCE` - HypeSquad Brilliance\n* `HOUSE_BALANCE` - HypeSquad Balance","type":[[["string"]]],"meta":{"line":55,"file":"Constants.js","path":"src/util"}},{"name":"localeSetting","description":"All locale codes:\n* `DANISH`\n* `GERMAN`\n* `ENGLISH_UK`\n* `ENGLISH_US`\n* `SPANISH`\n* `FRENCH`\n* `CROATIAN`\n* `ITALIAN`\n* `LITHUANIAN`\n* `HUNGARIAN`\n* `DUTCH`\n* `NORWEGIAN`\n* `POLISH`\n* `BRAZILIAN_PORTUGUESE`\n* `ROMANIA_ROMANIAN`\n* `FINNISH`\n* `SWEDISH`\n* `VIETNAMESE`\n* `TURKISH`\n* `CZECH`\n* `GREEK`\n* `BULGARIAN`\n* `RUSSIAN`\n* `UKRAINIAN`\n* `HINDI`\n* `THAI`\n* `CHINA_CHINESE`\n* `JAPANESE`\n* `TAIWAN_CHINESE`\n* `KOREAN`","see":["{@link https://discord.com/developers/docs/reference#locales}"],"type":[[["Object","<"],["string",", "],["string",">"]]],"meta":{"line":65,"file":"Constants.js","path":"src/util"}},{"name":"WSCodes","description":"The types of WebSocket error codes:\n* 1000: WS_CLOSE_REQUESTED\n* 1011: INTERNAL_ERROR\n* 4004: TOKEN_INVALID\n* 4010: SHARDING_INVALID\n* 4011: SHARDING_REQUIRED\n* 4013: INVALID_INTENTS\n* 4014: DISALLOWED_INTENTS","type":[[["Object","<"],["number",", "],["string",">"]]],"meta":{"line":133,"file":"Constants.js","path":"src/util"}},{"name":"ImageURLOptions","description":"Options for Image URLs.","type":[[["StaticImageURLOptions"]]],"props":[{"name":"dynamic","description":"If true, the format will dynamically change to `gif` for animated avatars.","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":165,"file":"Constants.js","path":"src/util"}},{"name":"StaticImageURLOptions","description":"Options for static Image URLs.","type":[[["Object"]]],"props":[{"name":"format","description":"One of `webp`, `png`, `jpg`, `jpeg`.","optional":true,"default":"'webp'","type":[[["string"]]]},{"name":"size","description":"One of `16`, `32`, `56`, `64`, `96`, `128`, `256`, `300`, `512`, `600`, `1024`, `2048`,\n`4096`","optional":true,"type":[[["number"]]]}],"meta":{"line":171,"file":"Constants.js","path":"src/util"}},{"name":"Endpoints","description":"An object containing functions that return certain endpoints on the API.","see":["{@link https://discord.com/developers/docs/reference#image-formatting-cdn-endpoints}"],"type":[[["Object","<"],["string",", ("],["function","()|"],["string",")>"]]],"meta":{"line":179,"file":"Constants.js","path":"src/util"}},{"name":"Status","description":"The current status of the client. Here are the available statuses:\n* READY: 0\n* CONNECTING: 1\n* RECONNECTING: 2\n* IDLE: 3\n* NEARLY: 4\n* DISCONNECTED: 5\n* WAITING_FOR_GUILDS: 6\n* IDENTIFYING: 7\n* RESUMING: 8","type":[[["Object","<"],["string",", "],["number",">"]]],"meta":{"line":240,"file":"Constants.js","path":"src/util"}},{"name":"Opcodes","description":"The Opcodes sent to the Gateway:\n* DISPATCH: 0\n* HEARTBEAT: 1\n* IDENTIFY: 2\n* STATUS_UPDATE: 3\n* VOICE_STATE_UPDATE: 4\n* VOICE_GUILD_PING: 5\n* RESUME: 6\n* RECONNECT: 7\n* REQUEST_GUILD_MEMBERS: 8\n* INVALID_SESSION: 9\n* HELLO: 10\n* HEARTBEAT_ACK: 11\n* GUILD_SYNC: 12 [Unused]\n* DM_UPDATE: 13 # Send => used to get dm features\n* GUILD_SUBSCRIPTIONS: 14 # Send => discord responds back with GUILD_MEMBER_LIST_UPDATE type SYNC...\n* LOBBY_CONNECT: 15\n* LOBBY_DISCONNECT: 16\n* LOBBY_VOICE_STATE_UPDATE: 17 # Receive\n* STREAM_CREATE: 18\n* STREAM_DELETE: 19\n* STREAM_WATCH: 20\n* STREAM_PING: 21 # Send\n* STREAM_SET_PAUSED: 22\n* LFG_SUBSCRIPTIONS: 23 [Unused]\n* REQUEST_GUILD_APPLICATION_COMMANDS: 24 [Unused]\n* EMBEDDED_ACTIVITY_LAUNCH: 25 => Launch an embedded activity in a voice channel or call.\n* EMBEDDED_ACTIVITY_CLOSE: 26 => Stop an embedded activity.\n* EMBEDDED_ACTIVITY_UPDATE: 27 => Update an embedded activity.\n* REQUEST_FORUM_UNREADS: 28 => Request forum channel unread counts.\n* REMOTE_COMMAND: 29 => Send a remote command to an embedded (Xbox, PlayStation) voice session.\n* GET_DELETED_ENTITY_IDS_NOT_MATCHING_HASH: 30 => Request deleted entity IDs not matching a given hash for a guild.\n* REQUEST_SOUNDBOARD_SOUNDS: 31\n* SPEED_TEST_CREATE: 32 => Create a voice speed test.\n* SPEED_TEST_DELETE: 33 => Delete a voice speed test.\n* REQUEST_LAST_MESSAGES: 34 => \tRequest last messages for a guild's channels.\n* SEARCH_RECENT_MEMBERS: 35 => ~ Opcode 8 (Member Safety)","type":[[["Object","<"],["string",", "],["number",">"]]],"meta":{"line":265,"file":"Constants.js","path":"src/util"}},{"name":"Events","description":"The types of events emitted by the Client:\n* RATE_LIMIT: rateLimit\n* INVALID_REQUEST_WARNING: invalidRequestWarning\n* API_RESPONSE: apiResponse\n* API_REQUEST: apiRequest\n* CLIENT_READY: ready\n* APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE: applicationCommandAutocompleteResponse\n* APPLICATION_COMMAND_CREATE: applicationCommandCreate (deprecated)\n* APPLICATION_COMMAND_DELETE: applicationCommandDelete (deprecated)\n* APPLICATION_COMMAND_UPDATE: applicationCommandUpdate (deprecated)\n* APPLICATION_COMMAND_PERMISSIONS_UPDATE: applicationCommandPermissionsUpdate\n* AUTO_MODERATION_ACTION_EXECUTION: autoModerationActionExecution\n* AUTO_MODERATION_RULE_CREATE: autoModerationRuleCreate\n* AUTO_MODERATION_RULE_DELETE: autoModerationRuleDelete\n* AUTO_MODERATION_RULE_UPDATE: autoModerationRuleUpdate\n* CALL_CREATE: callCreate\n* CALL_DELETE: callDelete\n* CALL_UPDATE: callUpdate\n* GUILD_AVAILABLE: guildAvailable\n* GUILD_CREATE: guildCreate\n* GUILD_DELETE: guildDelete\n* GUILD_UPDATE: guildUpdate\n* GUILD_UNAVAILABLE: guildUnavailable\n* GUILD_MEMBER_ADD: guildMemberAdd\n* GUILD_MEMBER_REMOVE: guildMemberRemove\n* GUILD_MEMBER_UPDATE: guildMemberUpdate\n* GUILD_MEMBER_AVAILABLE: guildMemberAvailable\n* GUILD_MEMBERS_CHUNK: guildMembersChunk\n* GUILD_INTEGRATIONS_UPDATE: guildIntegrationsUpdate\n* GUILD_ROLE_CREATE: roleCreate\n* GUILD_ROLE_DELETE: roleDelete\n* INVITE_CREATE: inviteCreate\n* INVITE_DELETE: inviteDelete\n* GUILD_ROLE_UPDATE: roleUpdate\n* GUILD_EMOJI_CREATE: emojiCreate\n* GUILD_EMOJI_DELETE: emojiDelete\n* GUILD_EMOJI_UPDATE: emojiUpdate\n* GUILD_BAN_ADD: guildBanAdd\n* GUILD_BAN_REMOVE: guildBanRemove\n* CHANNEL_CREATE: channelCreate\n* CHANNEL_DELETE: channelDelete\n* CHANNEL_UPDATE: channelUpdate\n* CHANNEL_PINS_UPDATE: channelPinsUpdate\n* CHANNEL_RECIPIENT_REMOVE: channelRecipientRemove\n* CHANNEL_RECIPIENT_ADD: channelRecipientAdd\n* MESSAGE_ACK: messageAck\n* MESSAGE_CREATE: messageCreate\n* MESSAGE_DELETE: messageDelete\n* MESSAGE_UPDATE: messageUpdate\n* MESSAGE_BULK_DELETE: messageDeleteBulk\n* MESSAGE_REACTION_ADD: messageReactionAdd\n* MESSAGE_REACTION_REMOVE: messageReactionRemove\n* MESSAGE_REACTION_REMOVE_ALL: messageReactionRemoveAll\n* MESSAGE_REACTION_REMOVE_EMOJI: messageReactionRemoveEmoji\n* THREAD_CREATE: threadCreate\n* THREAD_DELETE: threadDelete\n* THREAD_UPDATE: threadUpdate\n* THREAD_LIST_SYNC: threadListSync\n* THREAD_MEMBER_UPDATE: threadMemberUpdate\n* THREAD_MEMBERS_UPDATE: threadMembersUpdate\n* USER_UPDATE: userUpdate\n* PRESENCE_UPDATE: presenceUpdate\n* VOICE_SERVER_UPDATE: voiceServerUpdate\n* VOICE_STATE_UPDATE: voiceStateUpdate\n* TYPING_START: typingStart\n* WEBHOOKS_UPDATE: webhookUpdate\n* INTERACTION_CREATE: interactionCreate\n* ERROR: error\n* WARN: warn\n* DEBUG: debug\n* CACHE_SWEEP: cacheSweep\n* SHARD_DISCONNECT: shardDisconnect\n* SHARD_ERROR: shardError\n* SHARD_RECONNECTING: shardReconnecting\n* SHARD_READY: shardReady\n* SHARD_RESUME: shardResume\n* INVALIDATED: invalidated\n* RAW: raw\n* STAGE_INSTANCE_CREATE: stageInstanceCreate\n* STAGE_INSTANCE_UPDATE: stageInstanceUpdate\n* STAGE_INSTANCE_DELETE: stageInstanceDelete\n* GUILD_STICKER_CREATE: stickerCreate\n* GUILD_STICKER_DELETE: stickerDelete\n* GUILD_STICKER_UPDATE: stickerUpdate\n* GUILD_SCHEDULED_EVENT_CREATE: guildScheduledEventCreate\n* GUILD_SCHEDULED_EVENT_UPDATE: guildScheduledEventUpdate\n* GUILD_SCHEDULED_EVENT_DELETE: guildScheduledEventDelete\n* GUILD_SCHEDULED_EVENT_USER_ADD: guildScheduledEventUserAdd\n* GUILD_SCHEDULED_EVENT_USER_REMOVE: guildScheduledEventUserRemove\n* GUILD_AUDIT_LOG_ENTRY_CREATE: guildAuditLogEntryCreate","type":[[["Object","<"],["string",", "],["string",">"]]],"meta":{"line":344,"file":"Constants.js","path":"src/util"}},{"name":"ShardEvents","description":"The types of events emitted by a Shard:\n* CLOSE: close\n* DESTROYED: destroyed\n* INVALID_SESSION: invalidSession\n* READY: ready\n* RESUMED: resumed\n* ALL_READY: allReady","type":[[["Object","<"],["string",", "],["string",">"]]],"meta":{"line":548,"file":"Constants.js","path":"src/util"}},{"name":"PartialType","description":"The type of Structure allowed to be a partial:\n* USER\n* CHANNEL (only affects DMChannels)\n* GUILD_MEMBER\n* MESSAGE\n* REACTION\n* GUILD_SCHEDULED_EVENT\nPartials require you to put checks in place when handling data. See the \"Partial Structures\" topic on the\n[guide](https://discordjs.guide/popular-topics/partials.html) for more information.","type":[[["string"]]],"meta":{"line":567,"file":"Constants.js","path":"src/util"}},{"name":"WSEventType","description":"The type of a WebSocket message event, e.g. `MESSAGE_CREATE`. Here are the available events:\n* READY\n* RESUMED\n* APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE\n* APPLICATION_COMMAND_CREATE (deprecated)\n* APPLICATION_COMMAND_DELETE (deprecated)\n* APPLICATION_COMMAND_UPDATE (deprecated)\n* APPLICATION_COMMAND_PERMISSIONS_UPDATE\n* AUTO_MODERATION_ACTION_EXECUTION\n* AUTO_MODERATION_RULE_CREATE\n* AUTO_MODERATION_RULE_DELETE\n* AUTO_MODERATION_RULE_UPDATE\n* GUILD_CREATE\n* GUILD_DELETE\n* GUILD_UPDATE\n* INVITE_CREATE\n* INVITE_DELETE\n* GUILD_MEMBER_ADD\n* GUILD_MEMBER_REMOVE\n* GUILD_MEMBER_UPDATE\n* GUILD_MEMBERS_CHUNK\n* GUILD_INTEGRATIONS_UPDATE\n* GUILD_ROLE_CREATE\n* GUILD_ROLE_DELETE\n* GUILD_ROLE_UPDATE\n* GUILD_BAN_ADD\n* GUILD_BAN_REMOVE\n* GUILD_EMOJIS_UPDATE\n* CHANNEL_CREATE\n* CHANNEL_DELETE\n* CHANNEL_UPDATE\n* CHANNEL_PINS_UPDATE\n* MESSAGE_CREATE\n* MESSAGE_DELETE\n* MESSAGE_UPDATE\n* MESSAGE_DELETE_BULK\n* MESSAGE_REACTION_ADD\n* MESSAGE_REACTION_REMOVE\n* MESSAGE_REACTION_REMOVE_ALL\n* MESSAGE_REACTION_REMOVE_EMOJI\n* THREAD_CREATE\n* THREAD_UPDATE\n* THREAD_DELETE\n* THREAD_LIST_SYNC\n* THREAD_MEMBER_UPDATE\n* THREAD_MEMBERS_UPDATE\n* USER_UPDATE\n* PRESENCE_UPDATE\n* TYPING_START\n* VOICE_STATE_UPDATE\n* VOICE_SERVER_UPDATE\n* WEBHOOKS_UPDATE\n* INTERACTION_CREATE\n* STAGE_INSTANCE_CREATE\n* STAGE_INSTANCE_UPDATE\n* STAGE_INSTANCE_DELETE\n* GUILD_STICKERS_UPDATE\n* GUILD_SCHEDULED_EVENT_CREATE\n* GUILD_SCHEDULED_EVENT_UPDATE\n* GUILD_SCHEDULED_EVENT_DELETE\n* GUILD_SCHEDULED_EVENT_USER_ADD\n* GUILD_SCHEDULED_EVENT_USER_REMOVE\n* GUILD_AUDIT_LOG_ENTRY_CREATE","see":["{@link https://discord.com/developers/docs/topics/gateway-events#receive-events}"],"type":[[["string"]]],"meta":{"line":581,"file":"Constants.js","path":"src/util"}},{"name":"InviteScope","description":"A valid scope to request when generating an invite link.\nScopes that require whitelist are not considered valid for this generator\n* `applications.builds.read`: allows reading build data for a users applications\n* `applications.commands`: allows this bot to create commands in the server\n* `applications.entitlements`: allows reading entitlements for a users applications\n* `applications.store.update`: allows reading and updating of store data for a users applications\n* `bot`: makes the bot join the selected guild\n* `connections`: makes the endpoint for getting a users connections available\n* `email`: allows the `/users/@me` endpoint return with an email\n* `identify`: allows the `/users/@me` endpoint without an email\n* `guilds`: makes the `/users/@me/guilds` endpoint available for a user\n* `guilds.join`: allows the bot to join the user to any guild it is in using Guild#addMember\n* `gdm.join`: allows joining the user to a group dm\n* `webhook.incoming`: generates a webhook to a channel","see":["{@link https://discord.com/developers/docs/topics/oauth2#shared-resources-oauth2-scopes}"],"type":[[["string"]]],"meta":{"line":713,"file":"Constants.js","path":"src/util"}},{"name":"IntegrationExpireBehavior","description":"The behavior of expiring subscribers for Integrations. This can be:\n* REMOVE_ROLE\n* KICK","see":["{@link https://discord.com/developers/docs/resources/guild#integration-object-integration-expire-behaviors}"],"type":[[["string"]]],"meta":{"line":747,"file":"Constants.js","path":"src/util"}},{"name":"MessageType","description":"The type of a message, e.g. `DEFAULT`. Here are the available types:\n* DEFAULT\n* RECIPIENT_ADD\n* RECIPIENT_REMOVE\n* CALL\n* CHANNEL_NAME_CHANGE\n* CHANNEL_ICON_CHANGE\n* CHANNEL_PINNED_MESSAGE\n* GUILD_MEMBER_JOIN\n* USER_PREMIUM_GUILD_SUBSCRIPTION\n* USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_1\n* USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_2\n* USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_3\n* CHANNEL_FOLLOW_ADD\n* GUILD_DISCOVERY_DISQUALIFIED\n* GUILD_DISCOVERY_REQUALIFIED\n* GUILD_DISCOVERY_GRACE_PERIOD_INITIAL_WARNING\n* GUILD_DISCOVERY_GRACE_PERIOD_FINAL_WARNING\n* THREAD_CREATED\n* REPLY\n* APPLICATION_COMMAND\n* THREAD_STARTER_MESSAGE\n* GUILD_INVITE_REMINDER\n* CONTEXT_MENU_COMMAND\n* AUTO_MODERATION_ACTION\n* ROLE_SUBSCRIPTION_PURCHASE","see":["{@link https://discord.com/developers/docs/resources/channel#message-object-message-types}"],"type":[[["string"]]],"meta":{"line":756,"file":"Constants.js","path":"src/util"}},{"name":"SweeperKey","description":"The name of an item to be swept in Sweepers\n* `applicationCommands` - both global and guild commands\n* `autoModerationRules`\n* `bans`\n* `emojis`\n* `invites` - accepts the `lifetime` property, using it will sweep based on expires timestamp\n* `guildMembers`\n* `messages` - accepts the `lifetime` property, using it will sweep based on edited or created timestamp\n* `presences`\n* `reactions`\n* `stageInstances`\n* `stickers`\n* `threadMembers`\n* `threads` - accepts the `lifetime` property, using it will sweep archived threads based on archived timestamp\n* `users`\n* `voiceStates`","type":[[["string"]]],"meta":{"line":815,"file":"Constants.js","path":"src/util"}},{"name":"SystemMessageType","description":"The types of messages that are `System`. The available types are `MessageTypes` excluding:\n* DEFAULT\n* REPLY\n* APPLICATION_COMMAND\n* CONTEXT_MENU_COMMAND","type":[[["string"]]],"meta":{"line":852,"file":"Constants.js","path":"src/util"}},{"name":"ActivityType","description":"Bots cannot set a `CUSTOM` activity type, it is only for custom statuses received from users\nThe type of an activity of a user's presence. Here are the available types:\n* PLAYING\n* STREAMING\n* LISTENING\n* WATCHING\n* CUSTOM\n* COMPETING","see":["{@link https://discord.com/developers/docs/game-sdk/activities#data-models-activitytype-enum}"],"type":[[["string"]]],"meta":{"line":864,"file":"Constants.js","path":"src/util"}},{"name":"ChannelType","description":"All available channel types:\n* `GUILD_TEXT` - a guild text channel\n* `DM` - a DM channel\n* `GUILD_VOICE` - a guild voice channel\n* `GROUP_DM` - a group DM channel\n* `GUILD_CATEGORY` - a guild category channel\n* `GUILD_NEWS` - a guild news channel\n* `GUILD_STORE` - a guild store channel\nStore channels are deprecated and will be removed from Discord in March 2022. See\n[Self-serve Game Selling Deprecation](https://support-dev.discord.com/hc/en-us/articles/6309018858647)\nfor more information.\n* `GUILD_NEWS_THREAD` - a guild news channel's public thread channel\n* `GUILD_PUBLIC_THREAD` - a guild text channel's public thread channel\n* `GUILD_PRIVATE_THREAD` - a guild text channel's private thread channel\n* `GUILD_STAGE_VOICE` - a guild stage voice channel\n* `GUILD_DIRECTORY` - the channel in a hub containing guilds\n* `GUILD_FORUM` - a guild channel that only contains threads\n* `UNKNOWN` - a generic channel of unknown type, could be Channel or GuildChannel","see":["{@link https://discord.com/developers/docs/resources/channel#channel-object-channel-types}"],"type":[[["string"]]],"meta":{"line":878,"file":"Constants.js","path":"src/util"}},{"name":"TextBasedChannels","description":"The channels that are text-based.\n* DMChannel\n* TextChannel\n* NewsChannel\n* ThreadChannel\n* VoiceChannel\n* StageChannel","type":[[["DMChannel"]],[["TextChannel"]],[["NewsChannel"]],[["ThreadChannel"]],[["VoiceChannel"]],[["StageChannel"]]],"meta":{"line":918,"file":"Constants.js","path":"src/util"}},{"name":"TextBasedChannelsResolvable","description":"Data that resolves to give a text-based channel. This can be:\n* A text-based channel\n* A snowflake","type":[[["TextBasedChannels"]],[["Snowflake"]]],"meta":{"line":929,"file":"Constants.js","path":"src/util"}},{"name":"TextBasedChannelTypes","description":"The types of channels that are text-based. The available types are:\n* DM\n* GUILD_TEXT\n* GUILD_NEWS\n* GUILD_NEWS_THREAD\n* GUILD_PUBLIC_THREAD\n* GUILD_PRIVATE_THREAD\n* GUILD_VOICE\n* GUILD_STAGE_VOICE","type":[[["string"]]],"meta":{"line":936,"file":"Constants.js","path":"src/util"}},{"name":"ThreadChannelTypes","description":"The types of channels that are threads. The available types are:\n* GUILD_NEWS_THREAD\n* GUILD_PUBLIC_THREAD\n* GUILD_PRIVATE_THREAD","type":[[["string"]]],"meta":{"line":959,"file":"Constants.js","path":"src/util"}},{"name":"VoiceBasedChannelTypes","description":"The types of channels that are voice-based. The available types are:\n* GUILD_VOICE\n* GUILD_STAGE_VOICE","type":[[["string"]]],"meta":{"line":968,"file":"Constants.js","path":"src/util"}},{"name":"ClientApplicationAssetTypes","description":"The types of assets of an application:\n* SMALL: 1\n* BIG: 2","type":[[["Object","<"],["string",", "],["number",">"]]],"meta":{"line":976,"file":"Constants.js","path":"src/util"}},{"name":"Color","description":"A commonly used color:\n* DEFAULT\n* WHITE\n* AQUA\n* GREEN\n* BLUE\n* YELLOW\n* PURPLE\n* LUMINOUS_VIVID_PINK\n* FUCHSIA\n* GOLD\n* ORANGE\n* RED\n* GREY\n* NAVY\n* DARK_AQUA\n* DARK_GREEN\n* DARK_BLUE\n* DARK_PURPLE\n* DARK_VIVID_PINK\n* DARK_GOLD\n* DARK_ORANGE\n* DARK_RED\n* DARK_GREY\n* DARKER_GREY\n* LIGHT_GREY\n* DARK_NAVY\n* BLURPLE\n* GREYPLE\n* DARK_BUT_NOT_BLACK\n* NOT_QUITE_BLACK","type":[[["string"]]],"meta":{"line":987,"file":"Constants.js","path":"src/util"}},{"name":"ExplicitContentFilterLevel","description":"The value set for the explicit content filter levels for a guild:\n* DISABLED\n* MEMBERS_WITHOUT_ROLES\n* ALL_MEMBERS","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-explicit-content-filter-level}"],"type":[[["string"]]],"meta":{"line":1054,"file":"Constants.js","path":"src/util"}},{"name":"VerificationLevel","description":"The value set for the verification levels for a guild:\n* NONE\n* LOW\n* MEDIUM\n* HIGH\n* VERY_HIGH","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-verification-level}"],"type":[[["string"]]],"meta":{"line":1064,"file":"Constants.js","path":"src/util"}},{"name":"APIError","description":"An error encountered while performing an API request. Here are the potential errors:\n* UNKNOWN_ACCOUNT\n* UNKNOWN_APPLICATION\n* UNKNOWN_CHANNEL\n* UNKNOWN_GUILD\n* UNKNOWN_INTEGRATION\n* UNKNOWN_INVITE\n* UNKNOWN_MEMBER\n* UNKNOWN_MESSAGE\n* UNKNOWN_OVERWRITE\n* UNKNOWN_PROVIDER\n* UNKNOWN_ROLE\n* UNKNOWN_TOKEN\n* UNKNOWN_USER\n* UNKNOWN_EMOJI\n* UNKNOWN_WEBHOOK\n* UNKNOWN_WEBHOOK_SERVICE\n* UNKNOWN_SESSION\n* UNKNOWN_BAN\n* UNKNOWN_SKU\n* UNKNOWN_STORE_LISTING\n* UNKNOWN_ENTITLEMENT\n* UNKNOWN_BUILD\n* UNKNOWN_LOBBY\n* UNKNOWN_BRANCH\n* UNKNOWN_STORE_DIRECTORY_LAYOUT\n* UNKNOWN_REDISTRIBUTABLE\n* UNKNOWN_GIFT_CODE\n* UNKNOWN_STREAM\n* UNKNOWN_PREMIUM_SERVER_SUBSCRIBE_COOLDOWN\n* UNKNOWN_GUILD_TEMPLATE\n* UNKNOWN_DISCOVERABLE_SERVER_CATEGORY\n* UNKNOWN_STICKER\n* UNKNOWN_INTERACTION\n* UNKNOWN_APPLICATION_COMMAND\n* UNKNOWN_APPLICATION_COMMAND_PERMISSIONS\n* UNKNOWN_STAGE_INSTANCE\n* UNKNOWN_GUILD_MEMBER_VERIFICATION_FORM\n* UNKNOWN_GUILD_WELCOME_SCREEN\n* UNKNOWN_GUILD_SCHEDULED_EVENT\n* UNKNOWN_GUILD_SCHEDULED_EVENT_USER\n* BOT_PROHIBITED_ENDPOINT\n* BOT_ONLY_ENDPOINT\n* CANNOT_SEND_EXPLICIT_CONTENT\n* NOT_AUTHORIZED\n* SLOWMODE_RATE_LIMIT\n* ACCOUNT_OWNER_ONLY\n* ANNOUNCEMENT_EDIT_LIMIT_EXCEEDED\n* CHANNEL_HIT_WRITE_RATELIMIT\n* SERVER_HIT_WRITE_RATELIMIT\n* CONTENT_NOT_ALLOWED\n* GUILD_PREMIUM_LEVEL_TOO_LOW\n* MAXIMUM_GUILDS\n* MAXIMUM_FRIENDS\n* MAXIMUM_PINS\n* MAXIMUM_RECIPIENTS\n* MAXIMUM_ROLES\n* MAXIMUM_USERNAMES\n* MAXIMUM_WEBHOOKS\n* MAXIMUM_EMOJIS\n* MAXIMUM_REACTIONS\n* MAXIMUM_CHANNELS\n* MAXIMUM_ATTACHMENTS\n* MAXIMUM_INVITES\n* MAXIMUM_ANIMATED_EMOJIS\n* MAXIMUM_SERVER_MEMBERS\n* MAXIMUM_NUMBER_OF_SERVER_CATEGORIES\n* GUILD_ALREADY_HAS_TEMPLATE\n* MAXIMUM_THREAD_PARTICIPANTS\n* MAXIMUM_NON_GUILD_MEMBERS_BANS\n* MAXIMUM_BAN_FETCHES\n* MAXIMUM_NUMBER_OF_UNCOMPLETED_GUILD_SCHEDULED_EVENTS_REACHED\n* MAXIMUM_NUMBER_OF_STICKERS_REACHED\n* MAXIMUM_PRUNE_REQUESTS\n* MAXIMUM_GUILD_WIDGET_SETTINGS_UPDATE\n* UNAUTHORIZED\n* ACCOUNT_VERIFICATION_REQUIRED\n* DIRECT_MESSAGES_TOO_FAST\n* REQUEST_ENTITY_TOO_LARGE\n* FEATURE_TEMPORARILY_DISABLED\n* USER_BANNED\n* TARGET_USER_NOT_CONNECTED_TO_VOICE\n* ALREADY_CROSSPOSTED\n* MISSING_ACCESS\n* INVALID_ACCOUNT_TYPE\n* CANNOT_EXECUTE_ON_DM\n* EMBED_DISABLED\n* CANNOT_EDIT_MESSAGE_BY_OTHER\n* CANNOT_SEND_EMPTY_MESSAGE\n* CANNOT_MESSAGE_USER\n* CANNOT_SEND_MESSAGES_IN_VOICE_CHANNEL\n* CHANNEL_VERIFICATION_LEVEL_TOO_HIGH\n* OAUTH2_APPLICATION_BOT_ABSENT\n* MAXIMUM_OAUTH2_APPLICATIONS\n* INVALID_OAUTH_STATE\n* MISSING_PERMISSIONS\n* INVALID_AUTHENTICATION_TOKEN\n* NOTE_TOO_LONG\n* INVALID_BULK_DELETE_QUANTITY\n* CANNOT_PIN_MESSAGE_IN_OTHER_CHANNEL\n* INVALID_OR_TAKEN_INVITE_CODE\n* CANNOT_EXECUTE_ON_SYSTEM_MESSAGE\n* CANNOT_EXECUTE_ON_CHANNEL_TYPE\n* INVALID_OAUTH_TOKEN\n* MISSING_OAUTH_SCOPE\n* INVALID_WEBHOOK_TOKEN\n* INVALID_ROLE\n* INVALID_RECIPIENTS\n* BULK_DELETE_MESSAGE_TOO_OLD\n* INVALID_FORM_BODY\n* INVITE_ACCEPTED_TO_GUILD_NOT_CONTAINING_BOT\n* INVALID_API_VERSION\n* FILE_UPLOADED_EXCEEDS_MAXIMUM_SIZE\n* INVALID_FILE_UPLOADED\n* GIFT_CODE_CLAIMED\n* CANNOT_SELF_REDEEM_GIFT\n* INVALID_GUILD\n* INVALID_MESSAGE_TYPE\n* PAYMENT_SOURCE_REQUIRED\n* CANNOT_DELETE_COMMUNITY_REQUIRED_CHANNEL\n* INVALID_STICKER_SENT\n* INVALID_OPERATION_ON_ARCHIVED_THREAD\n* INVALID_THREAD_NOTIFICATION_SETTINGS\n* PARAMETER_EARLIER_THAN_CREATION\n* GUILD_NOT_AVAILABLE_IN_LOCATION\n* GUILD_MONETIZATION_REQUIRED\n* INSUFFICIENT_BOOSTS\n* INVALID_JSON\n* TWO_FACTOR_REQUIRED\n* INVALID_TWO_FACTOR_CODE\n* NO_USERS_WITH_DISCORDTAG_EXIST\n* REACTION_BLOCKED\n* RESOURCE_OVERLOADED\n* STAGE_ALREADY_OPEN\n* CANNOT_REPLY_WITHOUT_READ_MESSAGE_HISTORY_PERMISSION\n* MESSAGE_ALREADY_HAS_THREAD\n* THREAD_LOCKED\n* MAXIMUM_ACTIVE_THREADS\n* MAXIMUM_ACTIVE_ANNOUNCEMENT_THREADS\n* INVALID_JSON_FOR_UPLOADED_LOTTIE_FILE\n* UPLOADED_LOTTIES_CANNOT_CONTAIN_RASTERIZED_IMAGES\n* STICKER_MAXIMUM_FRAMERATE_EXCEEDED\n* STICKER_FRAME_COUNT_EXCEEDS_MAXIMUM_OF_1000_FRAMES\n* LOTTIE_ANIMATION_MAXIMUM_DIMENSIONS_EXCEEDED\n* STICKER_FRAME_RATE_IS_TOO_SMALL_OR_TOO_LARGE\n* STICKER_ANIMATION_DURATION_EXCEEDS_MAXIMUM_OF_5_SECONDS\n* CANNOT_UPDATE_A_FINISHED_EVENT\n* FAILED_TO_CREATE_STAGE_NEEDED_FOR_STAGE_EVENT","see":["{@link https://discord.com/developers/docs/topics/opcodes-and-status-codes#json-json-error-codes}","{@link https://gist.github.com/Dziurwa14/de2498e5ee28d2089f095aa037957cbb}"],"type":[[["string"]]],"meta":{"line":1076,"file":"Constants.js","path":"src/util"}},{"name":"DefaultMessageNotificationLevel","description":"The value set for a guild's default message notifications, e.g. `ALL_MESSAGES`. Here are the available types:\n* ALL_MESSAGES\n* ONLY_MENTIONS","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-default-message-notification-level}"],"type":[[["string"]]],"meta":{"line":1434,"file":"Constants.js","path":"src/util"}},{"name":"MembershipState","description":"The value set for a team member's membership state:\n* INVITED\n* ACCEPTED","see":["{@link https://discord.com/developers/docs/topics/teams#data-models-membership-state-enum}"],"type":[[["string"]]],"meta":{"line":1443,"file":"Constants.js","path":"src/util"}},{"name":"WebhookType","description":"The value set for a webhook's type:\n* Incoming\n* Channel Follower\n* Application","see":["{@link https://discord.com/developers/docs/resources/webhook#webhook-object-webhook-types}"],"type":[[["string"]]],"meta":{"line":1452,"file":"Constants.js","path":"src/util"}},{"name":"StickerType","description":"The value set for a sticker's type:\n* STANDARD\n* GUILD","see":["{@link https://discord.com/developers/docs/resources/sticker#sticker-object-sticker-types}"],"type":[[["string"]]],"meta":{"line":1462,"file":"Constants.js","path":"src/util"}},{"name":"StickerFormatType","description":"The value set for a sticker's format type:\n* PNG\n* APNG\n* LOTTIE\n* GIF","see":["{@link https://discord.com/developers/docs/resources/sticker#sticker-object-sticker-format-types}"],"type":[[["string"]]],"meta":{"line":1471,"file":"Constants.js","path":"src/util"}},{"name":"OverwriteType","description":"An overwrite type:\n* role\n* member","see":["{@link https://discord.com/developers/docs/resources/channel#overwrite-object-overwrite-structure}"],"type":[[["string"]]],"meta":{"line":1482,"file":"Constants.js","path":"src/util"}},{"name":"ApplicationCommandType","description":"The type of an {@link ApplicationCommand} object:\n* CHAT_INPUT\n* USER\n* MESSAGE","see":["{@link https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-types}"],"type":[[["string"]]],"meta":{"line":1492,"file":"Constants.js","path":"src/util"}},{"name":"ApplicationCommandOptionType","description":"The type of an {@link ApplicationCommandOption} object:\n* SUB_COMMAND\n* SUB_COMMAND_GROUP\n* STRING\n* INTEGER\n* BOOLEAN\n* USER\n* CHANNEL\n* ROLE\n* MENTIONABLE\n* NUMBER\n* ATTACHMENT","see":["{@link https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-option-type}"],"type":[[["string"]]],"meta":{"line":1502,"file":"Constants.js","path":"src/util"}},{"name":"ApplicationCommandPermissionType","description":"The type of an {@link ApplicationCommandPermissions} object:\n* ROLE\n* USER","see":["{@link https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-application-command-permission-type}"],"type":[[["string"]]],"meta":{"line":1533,"file":"Constants.js","path":"src/util"}},{"name":"ApplicationRoleConnectionMetadataType","description":"Each metadata type offers a comparison operation that allows\nguilds to configure role requirements based on metadata values stored by the bot.\nBots specify a metadata value for each user and guilds specify\nthe required guild's configured value within the guild role settings.\nAll available channel types:\n* INTEGER_LESS_THAN_OR_EQUAL\n* INTEGER_GREATER_THAN_OR_EQUAL\n* INTEGER_EQUAL\n* INTEGER_NOT_EQUAL\n* DATATIME_LESS_THAN_OR_EQUAL\n* DATATIME_GREATER_THAN_OR_EQUAL\n* BOOLEAN_EQUAL\n* BOOLEAN_NOT_EQUAL","see":["{@link https://discord.com/developers/docs/resources/application-role-connection-metadata#application-role-connection-metadata-object-application-role-connection-metadata-type}"],"type":[[["string"]]],"meta":{"line":1542,"file":"Constants.js","path":"src/util"}},{"name":"AutoModerationRuleTriggerType","description":"The type of an {@link AutoModerationRuleTriggerTypes} object:\n* KEYWORD\n* SPAM\n* KEYWORD_PRESET\n* MENTION_SPAM","see":["{@link https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object-trigger-types}"],"type":[[["string"]]],"meta":{"line":1571,"file":"Constants.js","path":"src/util"}},{"name":"AutoModerationRuleKeywordPresetType","description":"The type of an {@link AutoModerationRuleKeywordPresetTypes} object:\n* KEYWORD\n* SPAM\n* KEYWORD_PRESET\n* MENTION_SPAM","see":["{@link https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object-keyword-preset-types}"],"type":[[["string"]]],"meta":{"line":1582,"file":"Constants.js","path":"src/util"}},{"name":"AutoModerationActionType","description":"The type of an {@link AutoModerationActionTypes} object:\n* BLOCK_MESSAGE\n* SEND_ALERT_MESSAGE\n* TIMEOUT","see":["{@link https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-action-object-action-types}"],"type":[[["string"]]],"meta":{"line":1592,"file":"Constants.js","path":"src/util"}},{"name":"AutoModerationRuleEventType","description":"The type of an {@link AutoModerationRuleEventTypes} object:\n* MESSAGE_SEND","see":["{@link https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object-event-types}"],"type":[[["string"]]],"meta":{"line":1602,"file":"Constants.js","path":"src/util"}},{"name":"InteractionType","description":"The type of an {@link Interaction} object:\n* PING\n* APPLICATION_COMMAND\n* MESSAGE_COMPONENT\n* APPLICATION_COMMAND_AUTOCOMPLETE\n* MODAL_SUBMIT","see":["{@link https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-object-interaction-type}"],"type":[[["string"]]],"meta":{"line":1611,"file":"Constants.js","path":"src/util"}},{"name":"InteractionResponseType","description":"The type of an interaction response:\n* PONG\n* CHANNEL_MESSAGE_WITH_SOURCE\n* DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE\n* DEFERRED_MESSAGE_UPDATE\n* UPDATE_MESSAGE\n* APPLICATION_COMMAND_AUTOCOMPLETE_RESULT\n* MODAL","see":["{@link https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-response-object-interaction-callback-type}"],"type":[[["string"]]],"meta":{"line":1630,"file":"Constants.js","path":"src/util"}},{"name":"MessageComponentType","description":"The type of a message component\n* ACTION_ROW\n* BUTTON\n* TEXT_INPUT\n* STRING_SELECT\n* USER_SELECT\n* ROLE_SELECT\n* MENTIONABLE_SELECT\n* CHANNEL_SELECT\n* SELECT_MENU (deprecated)","see":["{@link https://discord.com/developers/docs/interactions/message-components#component-object-component-types}"],"type":[[["string"]]],"meta":{"line":1655,"file":"Constants.js","path":"src/util"}},{"name":"SelectMenuComponentType","description":"The types of components that are select menus. The available types are:\n* SELECT_MENU (deprecated)\n* STRING_MENU\n* USER_SELECT\n* ROLE_SELECT\n* MENTIONABLE_SELECT\n* CHANNEL_SELECT","see":["{@link https://discord.com/developers/docs/interactions/message-components#component-object-component-types}"],"type":[[["string"]]],"meta":{"line":1687,"file":"Constants.js","path":"src/util"}},{"name":"MessageButtonStyle","description":"The style of a message button\n* PRIMARY\n* SECONDARY\n* SUCCESS\n* DANGER\n* LINK","see":["{@link https://discord.com/developers/docs/interactions/message-components#button-object-button-styles}"],"type":[[["string"]]],"meta":{"line":1712,"file":"Constants.js","path":"src/util"}},{"name":"MFALevel","description":"The required MFA level for a guild\n* NONE\n* ELEVATED","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-mfa-level}"],"type":[[["string"]]],"meta":{"line":1724,"file":"Constants.js","path":"src/util"}},{"name":"NSFWLevel","description":"NSFW level of a Guild:\n* DEFAULT\n* EXPLICIT\n* SAFE\n* AGE_RESTRICTED","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-guild-nsfw-level}"],"type":[[["string"]]],"meta":{"line":1733,"file":"Constants.js","path":"src/util"}},{"name":"PrivacyLevel","description":"Privacy level of a {@link StageInstance} object:\n* PUBLIC\n* GUILD_ONLY","see":["{@link https://discord.com/developers/docs/resources/stage-instance#stage-instance-object-privacy-level}"],"type":[[["string"]]],"meta":{"line":1744,"file":"Constants.js","path":"src/util"}},{"name":"TextInputStyle","description":"The style of a text input component\n* SHORT\n* PARAGRAPH","see":["{@link https://discord.com/developers/docs/interactions/message-components#text-inputs-text-input-styles}"],"type":[[["string"]]],"meta":{"line":1753,"file":"Constants.js","path":"src/util"}},{"name":"GuildScheduledEventPrivacyLevel","description":"Privacy level of a {@link GuildScheduledEvent} object:\n* GUILD_ONLY","see":["{@link https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-privacy-level}"],"type":[[["string"]]],"meta":{"line":1762,"file":"Constants.js","path":"src/util"}},{"name":"RelationshipTypes","description":"Relationship Enums:\n* 0: NONE\n* 1: FRIEND\n* 2: BLOCKED\n* 3: PENDING_INCOMING\n* 4: PENDING_OUTGOING\n* 5: IMPLICIT","see":["{@link https://luna.gitlab.io/discord-unofficial-docs/relationships.html}"],"type":[[["string"]]],"meta":{"line":1770,"file":"Constants.js","path":"src/util"}},{"name":"PremiumTier","description":"The premium tier (Server Boost level) of a guild:\n* NONE\n* TIER_1\n* TIER_2\n* TIER_3","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object-premium-tier}"],"type":[[["string"]]],"meta":{"line":1791,"file":"Constants.js","path":"src/util"}},{"name":"GuildScheduledEventStatus","description":"The status of a {@link GuildScheduledEvent}:\n* SCHEDULED\n* ACTIVE\n* COMPLETED\n* CANCELED","see":["{@link https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-status}"],"type":[[["string"]]],"meta":{"line":1802,"file":"Constants.js","path":"src/util"}},{"name":"GuildScheduledEventEntityType","description":"The entity type of a {@link GuildScheduledEvent}:\n* NONE\n* STAGE_INSTANCE\n* VOICE\n* EXTERNAL","see":["{@link https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-entity-types}"],"type":[[["string"]]],"meta":{"line":1813,"file":"Constants.js","path":"src/util"}},{"name":"VideoQualityMode","description":"The camera video quality mode of a {@link VoiceChannel}:\n* AUTO\n* FULL","see":["{@link https://discord.com/developers/docs/resources/channel#channel-object-video-quality-modes}"],"type":[[["string"]]],"meta":{"line":1824,"file":"Constants.js","path":"src/util"}},{"name":"SortOrderType","description":"Sort {@link ForumChannel} posts by ?\n* LATEST_ACTIVITY\n* CREATION_DATE","see":["{@link https://discord.com/developers/docs/resources/channel/#channel-object-sort-order-types}"],"type":[[["string"]]],"meta":{"line":1833,"file":"Constants.js","path":"src/util"}},{"name":"ForumLayoutType","description":"The default forum layout to set on the {@link ForumChannel}\n* NOT_SET\n* LIST_VIEW\n* GALLERY_VIEW","see":["{@link https://discord.com/developers/docs/resources/channel/#channel-object-forum-layout-types}"],"type":[[["string"]]],"meta":{"line":1842,"file":"Constants.js","path":"src/util"}},{"name":"GuildTemplateResolvable","description":"Data that can be resolved to give a template code. This can be:\n* A template code\n* A template URL","type":[[["string"]]],"meta":{"line":23,"file":"DataResolver.js","path":"src/util"}},{"name":"Base64Resolvable","description":"Data that resolves to give a Base64 string, typically for image uploading. This can be:\n* A Buffer\n* A base64 string","type":[[["Buffer"]],[["string"]]],"meta":{"line":73,"file":"DataResolver.js","path":"src/util"}},{"name":"BufferResolvable","description":"Data that can be resolved to give a Buffer. This can be:\n* A Buffer\n* The path to a local file\n* A URL When provided a URL, discord.js will fetch the URL internally in order to create a Buffer.\nThis can pose a security risk when the URL has not been sanitized","type":[[["string"]],[["Buffer"]]],"meta":{"line":90,"file":"DataResolver.js","path":"src/util"}},{"name":"TimestampStylesString","description":"A message formatting timestamp style, as defined in\n[here](https://discord.com/developers/docs/reference#message-formatting-timestamp-styles).\n* `t` Short time format, consisting of hours and minutes, e.g. 16:20.\n* `T` Long time format, consisting of hours, minutes, and seconds, e.g. 16:20:30.\n* `d` Short date format, consisting of day, month, and year, e.g. 20/04/2021.\n* `D` Long date format, consisting of day, month, and year, e.g. 20 April 2021.\n* `f` Short date-time format, consisting of short date and short time formats, e.g. 20 April 2021 16:20.\n* `F` Long date-time format, consisting of long date and short time formats, e.g. Tuesday, 20 April 2021 16:20.\n* `R` Relative time format, consisting of a relative duration format, e.g. 2 months ago.","type":[[["string"]]],"meta":{"line":175,"file":"Formatters.js","path":"src/util"}},{"name":"GuildMemberFlagsResolvable","description":"Data that can be resolved to give a guild member flag bitfield. This can be:\n* A string (see {@link GuildMemberFlags.FLAGS})\n* A guild member flag\n* An instance of GuildMemberFlags\n* An Array of GuildMemberFlagsResolvable","type":[[["string"]],[["number"]],[["GuildMemberFlags"]],[["Array","<"],["GuildMemberFlagsResolvable",">"]]],"meta":{"line":34,"file":"GuildMemberFlags.js","path":"src/util"}},{"name":"IntentsResolvable","description":"Data that can be resolved to give a permission number. This can be:\n* A string (see {@link Intents.FLAGS})\n* An intents flag\n* An instance of Intents\n* An array of IntentsResolvable","type":[[["string"]],[["number"]],[["Intents"]],[["Array","<"],["IntentsResolvable",">"]]],"meta":{"line":17,"file":"Intents.js","path":"src/util"}},{"name":"SweepFilter","type":[[["function"]]],"params":[{"name":"collection","description":"The collection being swept","type":[[["LimitedCollection"]]]}],"returns":{"types":[[["function"]],[["null"]]],"description":"Return `null` to skip sweeping, otherwise a function passed to `sweep()`,\nSee {@link [Collection#sweep](https://discord.js.org/docs/packages/collection/stable/Collection:Class?scrollTo=sweep)}\nfor the definition of this function."},"meta":{"line":9,"file":"LimitedCollection.js","path":"src/util"}},{"name":"LimitedCollectionOptions","description":"Options for defining the behavior of a LimitedCollection","type":[[["Object"]]],"props":[{"name":"maxSize","description":"The maximum size of the Collection","optional":true,"default":"Infinity","nullable":true,"type":[[["number"]]]},{"name":"keepOverLimit","description":"A function, which is passed the value and key of an entry, ran to decide\nto keep an entry past the maximum size","optional":true,"default":null,"nullable":true,"type":[[["function"]]]},{"name":"sweepFilter","description":"DEPRECATED: There is no direct alternative to this,\nhowever most of its purpose is fulfilled by {@link Client#sweepers}\nA function ran every `sweepInterval` to determine how to sweep","optional":true,"default":null,"nullable":true,"type":[[["SweepFilter"]]]},{"name":"sweepInterval","description":"DEPRECATED: There is no direct alternative to this,\nhowever most of its purpose is fulfilled by {@link Client#sweepers}\nHow frequently, in seconds, to sweep the collection.","optional":true,"default":0,"nullable":true,"type":[[["number"]]]}],"meta":{"line":17,"file":"LimitedCollection.js","path":"src/util"}},{"name":"RateLimitData","description":"Rate limit data","type":[[["Object"]]],"props":[{"name":"timeout","description":"Time until this rate limit ends, in milliseconds","type":[[["number"]]]},{"name":"limit","description":"The maximum amount of requests of this endpoint","type":[[["number"]]]},{"name":"method","description":"The HTTP method of this request","type":[[["string"]]]},{"name":"path","description":"The path of the request relative to the HTTP endpoint","type":[[["string"]]]},{"name":"route","description":"The route of the request relative to the HTTP endpoint","type":[[["string"]]]},{"name":"global","description":"Whether this is a global rate limit","type":[[["boolean"]]]}],"meta":{"line":6,"file":"Options.js","path":"src/util"}},{"name":"RateLimitQueueFilter","description":"Whether this rate limit should throw an Error","type":[[["function"]]],"params":[{"name":"rateLimitData","description":"The data of this rate limit","type":[[["RateLimitData"]]]}],"returns":[[["boolean"]],[["Promise","<"],["boolean",">"]]],"meta":{"line":17,"file":"Options.js","path":"src/util"}},{"name":"CacheFactory","type":[[["function"]]],"params":[{"name":"manager","description":"The manager class the cache is being requested from.","type":[[["function"]]]},{"name":"holds","description":"The class that the cache will hold.","type":[[["function"]]]}],"returns":{"types":[[["Collection"]]],"description":"A Collection used to store the cache of the manager."},"meta":{"line":24,"file":"Options.js","path":"src/util"}},{"name":"ClientOptions","description":"Options for a client.","type":[[["Object"]]],"props":[{"name":"shards","description":"The shard's id to run, or an array of shard ids. If not specified,\nthe client will spawn {@link ClientOptions#shardCount} shards. If set to `auto`, it will fetch the\nrecommended amount of shards from Discord and spawn that amount","optional":true,"type":[[["number"]],[["Array","<"],["number",">"]],[["string"]]]},{"name":"closeTimeout","description":"The amount of time in milliseconds to wait for the close frame to be received\nfrom the WebSocket. Don't have this too high/low. Its best to have it between 2_000-6_000 ms.","optional":true,"default":5000,"type":[[["number"]]]},{"name":"checkUpdate","description":"Display module update information on the screen","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"syncStatus","description":"Sync state with Discord Client","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"patchVoice","description":"Automatically patch @discordjs/voice module (support for call)","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"captchaService","description":"Captcha service to use for solving captcha {@link captchaServices}","optional":true,"default":null,"type":[[["string"]]]},{"name":"captchaKey","description":"Captcha service key","optional":true,"default":null,"type":[[["string"]]]},{"name":"captchaRetryLimit","description":"Captcha retry limit","optional":true,"default":3,"type":[[["string"]]]},{"name":"captchaWithProxy","description":"Whether to use proxy for captcha solving","optional":true,"default":false,"type":[[["string"]]]},{"name":"password","description":"Your Discord account password","optional":true,"default":null,"type":[[["string"]]]},{"name":"usingNewAttachmentAPI","description":"Use new attachment API","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"interactionTimeout","description":"The amount of time in milliseconds to wait for an interaction response, before rejecting","optional":true,"default":15000,"type":[[["string"]]]},{"name":"autoRedeemNitro","description":"Automaticlly redeems nitro codes ","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"proxy","description":"Proxy to use for the WebSocket + REST connection (proxy-agent uri type) {@link https://www.npmjs.com/package/proxy-agent}.","optional":true,"type":[[["string"]]]},{"name":"DMSync","description":"Automatically synchronize call status (DM and group) at startup (event synchronization) [Warning: May cause rate limit to gateway)","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"shardCount","description":"The total amount of shards used by all processes of this bot\n(e.g. recommended shard count, shard count of the ShardingManager)","optional":true,"default":1,"type":[[["number"]]]},{"name":"makeCache","description":"Function to create a cache.\nYou can use your own function, or the {@link Options} class to customize the Collection used for the cache.\nOverriding the cache used in `GuildManager`, `ChannelManager`, `GuildChannelManager`, `RoleManager`,\nand `PermissionOverwriteManager` is unsupported and **will** break functionality","optional":true,"type":[[["CacheFactory"]]]},{"name":"messageCacheLifetime","description":"DEPRECATED: Pass `lifetime` to `sweepers.messages` instead.\nHow long a message should stay in the cache until it is considered sweepable (in seconds, 0 for forever)","optional":true,"default":0,"type":[[["number"]]]},{"name":"messageSweepInterval","description":"DEPRECATED: Pass `interval` to `sweepers.messages` instead.\nHow frequently to remove messages from the cache that are older than the message cache lifetime\n(in seconds, 0 for never)","optional":true,"default":0,"type":[[["number"]]]},{"name":"allowedMentions","description":"Default value for {@link MessageOptions#allowedMentions}","optional":true,"type":[[["MessageMentionOptions"]]]},{"name":"invalidRequestWarningInterval","description":"The number of invalid REST requests (those that return\n401, 403, or 429) in a 10 minute window between emitted warnings (0 for no warnings). That is, if set to 500,\nwarnings will be emitted at invalid request number 500, 1000, 1500, and so on.","optional":true,"default":0,"type":[[["number"]]]},{"name":"partials","description":"Structures allowed to be partial. This means events can be emitted even when\nthey're missing all the data for a particular structure. See the \"Partial Structures\" topic on the\n[guide](https://discordjs.guide/popular-topics/partials.html) for some\nimportant usage information, as partials require you to put checks in place when handling data.","optional":true,"default":"['USER', 'CHANNEL', 'GUILD_MEMBER', 'MESSAGE', 'REACTION', 'GUILD_SCHEDULED_EVENT']","type":[[["Array","<"],["PartialType",">"]]]},{"name":"restWsBridgeTimeout","description":"Maximum time permitted between REST responses and their\ncorresponding WebSocket events","optional":true,"default":5000,"type":[[["number"]]]},{"name":"restTimeOffset","description":"Extra time in milliseconds to wait before continuing to make REST\nrequests (higher values will reduce rate-limiting errors on bad connections)","optional":true,"default":500,"type":[[["number"]]]},{"name":"restRequestTimeout","description":"Time to wait before cancelling a REST request, in milliseconds","optional":true,"default":15000,"type":[[["number"]]]},{"name":"restSweepInterval","description":"How frequently to delete inactive request buckets, in seconds\n(or 0 for never)","optional":true,"default":60,"type":[[["number"]]]},{"name":"restGlobalRateLimit","description":"How many requests to allow sending per second (0 for unlimited, 50 for\nthe standard global limit used by Discord)","optional":true,"default":0,"type":[[["number"]]]},{"name":"rejectOnRateLimit","description":"Decides how rate limits and pre-emptive throttles\nshould be handled. If this option is an array containing the prefix of the request route (e.g. /channels to match any\nroute starting with /channels, such as /channels/222197033908436994/messages) or a function returning true, a\n{@link RateLimitError} will be thrown. Otherwise the request will be queued for later","optional":true,"type":[[["Array","<"],["string",">"]],[["RateLimitQueueFilter"]]]},{"name":"retryLimit","description":"How many times to retry on 5XX errors\n(Infinity for an indefinite amount of retries)","optional":true,"default":1,"type":[[["number"]]]},{"name":"failIfNotExists","description":"Default value for {@link ReplyMessageOptions#failIfNotExists}","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"userAgentSuffix","description":"An array of additional bot info to be appended to the end of the required\n[User Agent](https://discord.com/developers/docs/reference#user-agent) header","optional":true,"type":[[["Array","<"],["string",">"]]]},{"name":"presence","description":"Presence data to use upon login","optional":true,"default":"{}","type":[[["PresenceData"]]]},{"name":"intents","description":"Intents to enable for this connection (but not using)","optional":true,"default":131071,"type":[[["IntentsResolvable"]]]},{"name":"waitGuildTimeout","description":"Time in milliseconds that Clients with the GUILDS intent should wait for","optional":true,"default":15000,"type":[[["number"]]]},{"name":"messageCreateEventGuildTimeout","description":"Time in milliseconds that Clients to register for messages with each guild\nmissing guilds to be received before starting the bot. If not specified, the default is 100 milliseconds.","optional":true,"default":100,"type":[[["number"]]]},{"name":"sweepers","description":"Options for cache sweeping","optional":true,"default":"{}","type":[[["SweeperOptions"]]]},{"name":"ws","description":"Options for the WebSocket","optional":true,"type":[[["WebsocketOptions"]]]},{"name":"http","description":"HTTP options","optional":true,"type":[[["HTTPOptions"]]]},{"name":"captchaSolver","description":"Function to solve a captcha (custom)","optional":true,"type":[[["CustomCaptchaSolver"]]]}],"meta":{"line":31,"file":"Options.js","path":"src/util"}},{"name":"CustomCaptchaSolver","description":"Function to solve a captcha","type":[[["function"]]],"params":[{"name":"captcha","description":"The captcha to solve","type":[[["Captcha"]]]},{"name":"userAgent","description":"The user agent to use for the request","type":[[["string"]]]}],"returns":{"types":[[["Promise","<"],["string",">"]]],"description":"hcaptcha token"},"meta":{"line":100,"file":"Options.js","path":"src/util"}},{"name":"SweeperOptions","description":"Options for {@link Sweepers} defining the behavior of cache sweeping","type":[[["Object","<"],["SweeperKey",", "],["SweepOptions",">"]]],"meta":{"line":108,"file":"Options.js","path":"src/util"}},{"name":"SweepOptions","description":"Options for sweeping a single type of item from cache","type":[[["Object"]]],"props":[{"name":"interval","description":"The interval (in seconds) at which to perform sweeping of the item","type":[[["number"]]]},{"name":"lifetime","description":"How long an item should stay in cache until it is considered sweepable.\nThis property is only valid for the `invites`, `messages`, and `threads` keys. The `filter` property\nis mutually exclusive to this property and takes priority","optional":true,"type":[[["number"]]]},{"name":"filter","description":"The function used to determine the function passed to the sweep method\nThis property is optional when the key is `invites`, `messages`, or `threads` and `lifetime` is set","type":[[["GlobalSweepFilter"]]]}],"meta":{"line":113,"file":"Options.js","path":"src/util"}},{"name":"WebsocketOptions","description":"WebSocket options (these are left as snake_case to match the API)","type":[[["Object"]]],"props":[{"name":"compress","description":"Whether to compress data sent on the connection","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"properties","description":"Properties to identify the client with","optional":true,"type":[[["WebSocketProperties"]]]}],"meta":{"line":124,"file":"Options.js","path":"src/util"}},{"name":"AgentOptions","description":"HTTPS Agent options.","see":["{@link https://nodejs.org/api/https.html#https_class_https_agent}","{@link https://nodejs.org/api/http.html#http_new_agent_options}"],"type":[[["Object"]]],"meta":{"line":131,"file":"Options.js","path":"src/util"}},{"name":"HTTPOptions","description":"HTTP options","type":[[["Object"]]],"props":[{"name":"version","description":"API version to use","optional":true,"default":9,"type":[[["number"]]]},{"name":"agent","description":"HTTPS Agent options","optional":true,"default":"{}","type":[[["AgentOptions"]]]},{"name":"api","description":"Base URL of the API","optional":true,"default":"'https://discord.com/api'","type":[[["string"]]]},{"name":"cdn","description":"Base URL of the CDN","optional":true,"default":"'https://cdn.discordapp.com'","type":[[["string"]]]},{"name":"invite","description":"Base URL of invites","optional":true,"default":"'https://discord.gg'","type":[[["string"]]]},{"name":"template","description":"Base URL of templates","optional":true,"default":"'https://discord.new'","type":[[["string"]]]},{"name":"headers","description":"Additional headers to send for all API requests","optional":true,"type":[[["Object"]]]},{"name":"scheduledEvent","description":"Base URL of guild scheduled events","optional":true,"default":"'https://discord.com/events'","type":[[["string"]]]}],"meta":{"line":138,"file":"Options.js","path":"src/util"}},{"name":"PermissionResolvable","description":"Data that can be resolved to give a permission number. This can be:\n* A string (see {@link Permissions.FLAGS})\n* A permission number\n* An instance of Permissions\n* An Array of PermissionResolvable","type":[[["string"]],[["bigint"]],[["Permissions"]],[["Array","<"],["PermissionResolvable",">"]]],"meta":{"line":18,"file":"Permissions.js","path":"src/util"}},{"name":"DiscordAuthWebsocketOptions","type":[[["Object"]]],"props":[{"name":"debug","description":"Log debug info","optional":true,"default":false,"nullable":true,"type":[[["boolean"]]]},{"name":"hiddenLog","description":"Hide log ?","optional":true,"default":false,"nullable":true,"type":[[["boolean"]]]},{"name":"autoLogin","description":"Automatically login (DiscordJS.Client Login) ?","optional":true,"default":false,"nullable":true,"type":[[["boolean"]]]},{"name":"failIfError","description":"Throw error ?","optional":true,"default":true,"nullable":true,"type":[[["boolean"]]]},{"name":"generateQR","description":"Create QR Code ?","optional":true,"default":true,"nullable":true,"type":[[["boolean"]]]},{"name":"apiVersion","description":"API Version","optional":true,"default":9,"nullable":true,"type":[[["number"]]]},{"name":"userAgent","description":"User Agent","optional":true,"nullable":true,"type":[[["string"]]]},{"name":"wsProperties","description":"Web Socket Properties","optional":true,"nullable":true,"type":[[["Object","<"],["string",", "],["string",">"]]]}],"meta":{"line":46,"file":"RemoteAuth.js","path":"src/util"}},{"name":"RoleFlagsResolvable","description":"Data that can be resolved to give a role flag bitfield. This can be:\n* A string (see {@link RoleFlags.FLAGS})\n* A role flag\n* An instance of RoleFlags\n* An Array of RoleFlagsResolvable","type":[[["string"]],[["number"]],[["RoleFlags"]],[["Array","<"],["RoleFlagsResolvable",">"]]],"meta":{"line":28,"file":"RoleFlags.js","path":"src/util"}},{"name":"Snowflake","description":"A {@link https://developer.twitter.com/en/docs/twitter-ids Twitter snowflake},\nexcept the epoch is 2015-01-01T00:00:00.000Z.\n\nIf we have a snowflake '266241948824764416' we can represent it as binary:\n```\n64 22 17 12 0\n 000000111011000111100001101001000101000000 00001 00000 000000000000\n number of milliseconds since Discord epoch worker pid increment\n```","type":[[["string"]]],"meta":{"line":11,"file":"SnowflakeUtil.js","path":"src/util"}},{"name":"DeconstructedSnowflake","description":"A deconstructed snowflake.","type":[[["Object"]]],"props":[{"name":"timestamp","description":"Timestamp the snowflake was created","type":[[["number"]]]},{"name":"date","description":"Date the snowflake was created","type":[[["Date"]]]},{"name":"workerId","description":"The worker's id in the snowflake","type":[[["number"]]]},{"name":"processId","description":"The process's id in the snowflake","type":[[["number"]]]},{"name":"increment","description":"Increment in the snowflake","type":[[["number"]]]},{"name":"binary","description":"Binary representation of the snowflake","type":[[["string"]]]}],"meta":{"line":43,"file":"SnowflakeUtil.js","path":"src/util"}},{"name":"GlobalSweepFilter","type":[[["function"]]],"returns":{"types":[[["function"]],[["null"]]],"description":"Return `null` to skip sweeping, otherwise a function passed to `sweep()`,\nSee {@link [Collection#sweep](https://discord.js.org/docs/packages/collection/stable/Collection:Class?scrollTo=sweep)}\nfor the definition of this function."},"meta":{"line":7,"file":"Sweepers.js","path":"src/util"}},{"name":"LifetimeFilterOptions","description":"Options for generating a filter function based on lifetime","type":[[["Object"]]],"props":[{"name":"lifetime","description":"How long, in seconds, an entry should stay in the collection\nbefore it is considered sweepable.","optional":true,"default":14400,"type":[[["number"]]]},{"name":"getComparisonTimestamp","description":"A function that takes an entry, key,\nand the collection and returns a timestamp to compare against in order to determine the lifetime of the entry.","optional":true,"default":"e => e?.createdTimestamp","type":[[["function"]]]},{"name":"excludeFromSweep","description":"A function that takes an entry, key, and the collection\nand returns a boolean, `true` when the entry should not be checked for sweepability.","optional":true,"default":"() => false","type":[[["function"]]]}],"meta":{"line":303,"file":"Sweepers.js","path":"src/util"}},{"name":"SweepEventOptions","description":"Configuration options for emitting the cache sweep client event","access":"private","type":[[["Object"]]],"props":[{"name":"emit","description":"Whether to emit the client event in this method","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"outputName","description":"A name to output in the client event if it should differ from the key","optional":true,"type":[[["string"]]]}],"meta":{"line":385,"file":"Sweepers.js","path":"src/util"}},{"name":"SystemChannelFlagsResolvable","description":"Data that can be resolved to give a system channel flag bitfield. This can be:\n* A string (see {@link SystemChannelFlags.FLAGS})\n* A system channel flag\n* An instance of SystemChannelFlags\n* An Array of SystemChannelFlagsResolvable","type":[[["string"]],[["number"]],[["SystemChannelFlags"]],[["Array","<"],["SystemChannelFlagsResolvable",">"]]],"meta":{"line":26,"file":"SystemChannelFlags.js","path":"src/util"}},{"name":"SplitOptions","description":"Options for splitting a message.","type":[[["Object"]]],"props":[{"name":"maxLength","description":"Maximum character length per message piece","optional":true,"default":2000,"type":[[["number"]]]},{"name":"char","description":"Character(s) or Regex(es) to split the message with,\nan array can be used to split multiple times","optional":true,"default":"'\\n'","type":[[["string"]],[["Array","<"],["string",">"]],[["RegExp"]],[["Array","<"],["RegExp",">"]]]},{"name":"prepend","description":"Text to prepend to every piece except the first","optional":true,"default":"''","type":[[["string"]]]},{"name":"append","description":"Text to append to every piece except the last","optional":true,"default":"''","type":[[["string"]]]}],"meta":{"line":68,"file":"Util.js","path":"src/util"}},{"name":"EscapeMarkdownOptions","description":"Options used to escape markdown.","type":[[["Object"]]],"props":[{"name":"codeBlock","description":"Whether to escape code blocks","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"inlineCode","description":"Whether to escape inline code","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"bold","description":"Whether to escape bolds","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"italic","description":"Whether to escape italics","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"underline","description":"Whether to escape underlines","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"strikethrough","description":"Whether to escape strikethroughs","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"spoiler","description":"Whether to escape spoilers","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"codeBlockContent","description":"Whether to escape text inside code blocks","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"inlineCodeContent","description":"Whether to escape text inside inline code","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"escape","description":"Whether to escape escape characters","optional":true,"default":true,"type":[[["boolean"]]]},{"name":"heading","description":"Whether to escape headings","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"bulletedList","description":"Whether to escape bulleted lists","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"numberedList","description":"Whether to escape numbered lists","optional":true,"default":false,"type":[[["boolean"]]]},{"name":"maskedLink","description":"Whether to escape masked links","optional":true,"default":false,"type":[[["boolean"]]]}],"meta":{"line":123,"file":"Util.js","path":"src/util"}},{"name":"MakeErrorOptions","description":"Options used to make an error object.","type":[[["Object"]]],"props":[{"name":"name","description":"Error type","type":[[["string"]]]},{"name":"message","description":"Message for the error","type":[[["string"]]]},{"name":"stack","description":"Stack for the error","type":[[["string"]]]}],"meta":{"line":397,"file":"Util.js","path":"src/util"}},{"name":"ColorResolvable","description":"Can be a number, hex string, a {@link Color}, or an RGB array like:\n```js\n[255, 0, 255] // purple\n```","type":[[["string"]],[["Color"]],[["number"]],[["Array","<"],["number",">"]]],"meta":{"line":470,"file":"Util.js","path":"src/util"}}],"externals":[{"name":"Collection","see":["{@link https://discord.js.org/docs/packages/collection/stable/Collection:Class}"],"meta":{"line":1098,"file":"Client.js","path":"src/client"}},{"name":"VoiceConnection","see":["{@link https://discord.js.org/#/docs/voice/main/class/VoiceConnection}"],"meta":{"line":294,"file":"Client.js","path":"src/client"}},{"name":"Inflate","see":["{@link https://www.npmjs.com/package/zlib-sync}"],"meta":{"line":122,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"CloseEvent","see":["{@link https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent}"],"meta":{"line":354,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"ErrorEvent","see":["{@link https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent}"],"meta":{"line":359,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"MessageEvent","see":["{@link https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent}"],"meta":{"line":364,"file":"WebSocketShard.js","path":"src/client/websocket"}},{"name":"SlashCommandBuilder","see":["{@link https://discord.js.org/docs/packages/builders/stable/SlashCommandBuilder:Class}"],"meta":{"line":259,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"ContextMenuCommandBuilder","see":["{@link https://discord.js.org/docs/packages/builders/stable/ContextMenuCommandBuilder:Class}"],"meta":{"line":264,"file":"ApplicationCommandManager.js","path":"src/managers"}},{"name":"APIApplicationCommandPermissions","see":["{@link https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-application-command-permissions-structure}"],"meta":{"line":422,"file":"ApplicationCommandPermissionsManager.js","path":"src/managers"}},{"name":"APIError","see":["{@link https://discord.com/developers/docs/reference#error-messages}"],"meta":{"line":100,"file":"DiscordAPIError.js","path":"src/rest"}},{"name":"HTTPMethod","see":["{@link https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods}"],"meta":{"line":422,"file":"RequestHandler.js","path":"src/rest"}},{"name":"Response","see":["{@link https://developer.mozilla.org/en-US/docs/Web/API/Response}"],"meta":{"line":427,"file":"RequestHandler.js","path":"src/rest"}},{"name":"APIApplicationCommand","see":["{@link https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-structure}"],"meta":{"line":1022,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"APIApplicationCommandOption","see":["{@link https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-option-structure}"],"meta":{"line":1027,"file":"ApplicationCommand.js","path":"src/structures"}},{"name":"APIInteractionDataResolved","see":["{@link https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-object-resolved-data-structure}"],"meta":{"line":208,"file":"BaseCommandInteraction.js","path":"src/structures"}},{"name":"APIChannel","see":["{@link https://discord.com/developers/docs/resources/channel#channel-object}"],"meta":{"line":268,"file":"Channel.js","path":"src/structures"}},{"name":"APIPresence","see":["{@link https://discord.com/developers/docs/rich-presence/how-to#updating-presence-update-presence-payload-fields}"],"meta":{"line":89,"file":"ClientPresence.js","path":"src/structures"}},{"name":"APIEmoji","see":["{@link https://discord.com/developers/docs/resources/emoji#emoji-object}"],"meta":{"line":145,"file":"Emoji.js","path":"src/structures"}},{"name":"APIGuild","see":["{@link https://discord.com/developers/docs/resources/guild#guild-object}"],"meta":{"line":1741,"file":"Guild.js","path":"src/structures"}},{"name":"APIGuildMember","see":["{@link https://discord.com/developers/docs/resources/guild#guild-member-object}"],"meta":{"line":683,"file":"GuildMember.js","path":"src/structures"}},{"name":"APIMessageComponent","see":["{@link https://discord.com/developers/docs/interactions/message-components#component-object}"],"meta":{"line":100,"file":"MessageActionRow.js","path":"src/structures"}},{"name":"APIAttachment","see":["{@link https://discord.com/developers/docs/resources/channel#attachment-object}"],"meta":{"line":201,"file":"MessageAttachment.js","path":"src/structures"}},{"name":"APIMessageSelectMenu","see":["{@link https://discord.com/developers/docs/interactions/message-components#select-menu-object}"],"meta":{"line":112,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"APIMessageButton","see":["{@link https://discord.com/developers/docs/interactions/message-components#button-object}"],"meta":{"line":117,"file":"MessageComponentInteraction.js","path":"src/structures"}},{"name":"APIEmbed","see":["{@link https://discord.com/developers/docs/resources/channel#embed-object}"],"meta":{"line":583,"file":"MessageEmbed.js","path":"src/structures"}},{"name":"APIMessage","see":["{@link https://discord.com/developers/docs/resources/channel#message-object}"],"meta":{"line":355,"file":"MessagePayload.js","path":"src/structures"}},{"name":"MessageActivityType","see":["{@link https://discord-api-types.dev/api/discord-api-types-v9/enum/MessageActivityType}"],"meta":{"line":17,"file":"Presence.js","path":"src/structures"}},{"name":"APIRole","see":["{@link https://discord.com/developers/docs/topics/permissions#role-object}"],"meta":{"line":528,"file":"Role.js","path":"src/structures"}},{"name":"APISticker","see":["{@link https://discord.com/developers/docs/resources/sticker#sticker-object}"],"meta":{"line":307,"file":"Sticker.js","path":"src/structures"}},{"name":"APIUser","see":["{@link https://discord.com/developers/docs/resources/user#user-object}"],"meta":{"line":727,"file":"User.js","path":"src/structures"}},{"name":"Stream","see":["{@link https://nodejs.org/api/stream.html}"],"meta":{"line":99,"file":"DataResolver.js","path":"src/util"}}]} \ No newline at end of file From 924c442ad4113e741e5e6aa3482e94b52fb879e9 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Mon, 8 Jan 2024 20:41:56 +0700 Subject: [PATCH 24/60] update --- src/client/actions/InteractionCreate.js | 115 -------- .../websocket/handlers/INTERACTION_CREATE.js | 16 -- .../websocket/handlers/INTERACTION_FAILURE.js | 18 -- .../handlers/INTERACTION_MODAL_CREATE.js | 1 + .../websocket/handlers/INTERACTION_SUCCESS.js | 30 --- .../websocket/handlers/RELATIONSHIP_ADD.js | 12 +- .../websocket/handlers/RELATIONSHIP_REMOVE.js | 10 +- .../websocket/handlers/RELATIONSHIP_UPDATE.js | 41 ++- src/managers/RelationshipManager.js | 157 +++++------ src/structures/InteractionResponse.js | 114 -------- src/structures/Modal.js | 253 +++++------------- 11 files changed, 202 insertions(+), 565 deletions(-) delete mode 100644 src/client/actions/InteractionCreate.js delete mode 100644 src/client/websocket/handlers/INTERACTION_CREATE.js delete mode 100644 src/client/websocket/handlers/INTERACTION_FAILURE.js delete mode 100644 src/client/websocket/handlers/INTERACTION_SUCCESS.js delete mode 100644 src/structures/InteractionResponse.js diff --git a/src/client/actions/InteractionCreate.js b/src/client/actions/InteractionCreate.js deleted file mode 100644 index 158b11f..00000000 --- a/src/client/actions/InteractionCreate.js +++ /dev/null @@ -1,115 +0,0 @@ -'use strict'; - -const process = require('node:process'); -const Action = require('./Action'); -const AutocompleteInteraction = require('../../structures/AutocompleteInteraction'); -const ButtonInteraction = require('../../structures/ButtonInteraction'); -const CommandInteraction = require('../../structures/CommandInteraction'); -const MessageContextMenuInteraction = require('../../structures/MessageContextMenuInteraction'); -const ModalSubmitInteraction = require('../../structures/ModalSubmitInteraction'); -const { - ChannelSelectInteraction, - MentionableSelectInteraction, - RoleSelectInteraction, - SelectMenuInteraction, - UserSelectInteraction, -} = require('../../structures/SelectMenuInteraction'); -const UserContextMenuInteraction = require('../../structures/UserContextMenuInteraction'); -const { Events, InteractionTypes, MessageComponentTypes, ApplicationCommandTypes } = require('../../util/Constants'); - -let deprecationEmitted = false; - -class InteractionCreateAction extends Action { - handle(data) { - const client = this.client; - - // Resolve and cache partial channels for Interaction#channel getter - const channel = this.getChannel(data); - // Do not emit this for interactions that cache messages that are non-text-based. - let InteractionType; - switch (data.type) { - case InteractionTypes.APPLICATION_COMMAND: - switch (data.data.type) { - case ApplicationCommandTypes.CHAT_INPUT: - InteractionType = CommandInteraction; - break; - case ApplicationCommandTypes.USER: - InteractionType = UserContextMenuInteraction; - break; - case ApplicationCommandTypes.MESSAGE: - InteractionType = MessageContextMenuInteraction; - break; - default: - client.emit( - Events.DEBUG, - `[INTERACTION] Received application command interaction with unknown type: ${data.data.type}`, - ); - return; - } - break; - case InteractionTypes.MESSAGE_COMPONENT: - if (channel && !channel.isText()) return; - switch (data.data.component_type) { - case MessageComponentTypes.BUTTON: - InteractionType = ButtonInteraction; - break; - case MessageComponentTypes.STRING_SELECT: - InteractionType = SelectMenuInteraction; - break; - case MessageComponentTypes.CHANNEL_SELECT: - InteractionType = ChannelSelectInteraction; - break; - case MessageComponentTypes.MENTIONABLE_SELECT: - InteractionType = MentionableSelectInteraction; - break; - case MessageComponentTypes.ROLE_SELECT: - InteractionType = RoleSelectInteraction; - break; - case MessageComponentTypes.USER_SELECT: - InteractionType = UserSelectInteraction; - break; - default: - client.emit( - Events.DEBUG, - `[INTERACTION] Received component interaction with unknown type: ${data.data.component_type}`, - ); - return; - } - break; - case InteractionTypes.APPLICATION_COMMAND_AUTOCOMPLETE: - InteractionType = AutocompleteInteraction; - break; - case InteractionTypes.MODAL_SUBMIT: - InteractionType = ModalSubmitInteraction; - break; - default: - client.emit( - Events.DEBUG, - `[INTERACTION] Received [BOT] / Send (Selfbot) interactionID ${data.id} with unknown type: ${data.type}`, - ); - return; - } - - const interaction = new InteractionType(client, data); - - /** - * Emitted when an interaction is created. - * @event Client#interactionCreate - * @param {InteractionResponseBody | Interaction} interaction The interaction which was created. - */ - client.emit(Events.INTERACTION_CREATE, interaction); - - /** - * Emitted when an interaction is created. - * @event Client#interaction - * @param {Interaction} interaction The interaction which was created - * @deprecated Use {@link Client#event:interactionCreate} instead - */ - if (client.emit('interaction', interaction) && !deprecationEmitted) { - deprecationEmitted = true; - process.emitWarning('The interaction event is deprecated. Use interactionCreate instead', 'DeprecationWarning'); - } - } -} - -module.exports = InteractionCreateAction; diff --git a/src/client/websocket/handlers/INTERACTION_CREATE.js b/src/client/websocket/handlers/INTERACTION_CREATE.js deleted file mode 100644 index 0007962..00000000 --- a/src/client/websocket/handlers/INTERACTION_CREATE.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; -const { Events } = require('../../../util/Constants'); - -/** - * @typedef {Object} InteractionResponseBody - * @property {Snowflake} id Interaction ID - * @property {Snowflake} nonce nonce in POST /interactions - */ - -module.exports = (client, { d: data }) => { - if (client.user.bot) { - client.actions.InteractionCreate.handle(data); - } else { - client.emit(Events.INTERACTION_CREATE, data); - } -}; diff --git a/src/client/websocket/handlers/INTERACTION_FAILURE.js b/src/client/websocket/handlers/INTERACTION_FAILURE.js deleted file mode 100644 index ebd6701..00000000 --- a/src/client/websocket/handlers/INTERACTION_FAILURE.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; -const { Events } = require('../../../util/Constants'); - -module.exports = (client, { d: data }) => { - /** - * Emitted whenever client user send interaction and error - * @event Client#interactionFailure - * @param {InteractionResponseBody} data data - */ - client.emit(Events.INTERACTION_FAILURE, data); - client.emit('interactionResponse', { - status: false, - metadata: client._interactionCache.get(data.nonce), - error: 'No response from bot', - }); - // Delete cache - client._interactionCache.delete(data.nonce); -}; diff --git a/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js b/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js index b94363e..584af85 100644 --- a/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +++ b/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js @@ -1,6 +1,7 @@ 'use strict'; const Modal = require('../../../structures/Modal'); const { Events } = require('../../../util/Constants'); + module.exports = (client, { d: data }) => { /** * Emitted whenever client user receive interaction.showModal() diff --git a/src/client/websocket/handlers/INTERACTION_SUCCESS.js b/src/client/websocket/handlers/INTERACTION_SUCCESS.js deleted file mode 100644 index ff6fe44..00000000 --- a/src/client/websocket/handlers/INTERACTION_SUCCESS.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; -const { Events } = require('../../../util/Constants'); - -module.exports = (client, { d: data }) => { - /** - * Emitted whenever client user send interaction and success - * @event Client#interactionSuccess - * @param {InteractionResponseBody} data data - */ - client.emit(Events.INTERACTION_SUCCESS, data); - // Get channel data - const cache = client._interactionCache.get(data.nonce); - if (!cache) return; - const channel = cache.guildId - ? client.guilds.cache.get(cache.guildId)?.channels.cache.get(cache.channelId) - : client.channels.cache.get(cache.channelId); - // Set data - const interaction = { - ...cache, - ...data, - }; - const data_ = channel.interactions._add(interaction); - client.emit('interactionResponse', { - status: true, - metadata: data_, - error: 'Success', - }); - // Delete cache - // client._interactionCache.delete(data.nonce); -}; diff --git a/src/client/websocket/handlers/RELATIONSHIP_ADD.js b/src/client/websocket/handlers/RELATIONSHIP_ADD.js index d2007de..422ba72 100644 --- a/src/client/websocket/handlers/RELATIONSHIP_ADD.js +++ b/src/client/websocket/handlers/RELATIONSHIP_ADD.js @@ -1,17 +1,19 @@ 'use strict'; -const { Events, RelationshipTypes } = require('../../../util/Constants'); +const { Events } = require('../../../util/Constants'); module.exports = (client, { d: data }) => { if (data.user) { client.users._add(data.user); } client.relationships.cache.set(data.id, data.type); + client.relationships.friendNicknames.set(data.id, data.nickname); + client.relationships.sinceCache.set(data.id, new Date(data.since || 0)); /** - * Emitted whenever a relationship is updated. + * Emitted when a relationship is created, relevant to the current user. * @event Client#relationshipAdd - * @param {Snowflake} user The userID that was updated - * @param {RelationshipTypes} type The new relationship type + * @param {Snowflake} user Target userId + * @param {boolean} shouldNotify Whether the client should notify the user of this relationship's creation */ - client.emit(Events.RELATIONSHIP_ADD, data.id, RelationshipTypes[data.type]); + client.emit(Events.RELATIONSHIP_ADD, data.id, Boolean(data.should_notify)); }; diff --git a/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js b/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js index cb613c5..584128d 100644 --- a/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +++ b/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js @@ -1,15 +1,17 @@ 'use strict'; -const { Events, RelationshipTypes } = require('../../../util/Constants'); +const { Events } = require('../../../util/Constants'); module.exports = (client, { d: data }) => { client.relationships.cache.delete(data.id); - client.user.friendNicknames.delete(data.id); + client.relationships.friendNicknames.delete(data.id); + client.relationships.sinceCache.delete(data.id); /** - * Emitted whenever a relationship is delete. + * Emitted when a relationship is removed, relevant to the current user. * @event Client#relationshipRemove * @param {Snowflake} user The userID that was updated * @param {RelationshipTypes} type The type of the old relationship + * @param {string | null} nickname The nickname of the user in this relationship (1-32 characters) */ - client.emit(Events.RELATIONSHIP_REMOVE, data.id, RelationshipTypes[data.type]); + client.emit(Events.RELATIONSHIP_REMOVE, data.id, data.type, data.nickname); }; diff --git a/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js b/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js index 6fa196d..fd8d84c 100644 --- a/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +++ b/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js @@ -1,18 +1,41 @@ 'use strict'; -const { Events, RelationshipTypes } = require('../../../util/Constants'); +const { Events } = require('../../../util/Constants'); module.exports = (client, { d: data }) => { - client.relationships.cache.set(data.id, data.type); /** - * Emitted whenever a relationship is updated. + * @typedef {Object} RelationshipUpdateObject + * @property {RelationshipTypes} type The type of relationship + * @property {Date} since When the user requested a relationship + * @property {string | null} nickname The nickname of the user in this relationship (1-32 characters) + */ + /** + * Emitted when a relationship is updated, relevant to the current user (e.g. friend nickname changed). + * This is not sent when the type of a relationship changes; see {@link Client#relationshipAdd} and {@link Client#relationshipRemove} for that. * @event Client#relationshipUpdate * @param {Snowflake} user The userID that was updated - * @param {RelationshipTypes} type The new relationship type - * @param {Object} data The raw data + * @param {RelationshipUpdateObject} oldData Old data + * @param {RelationshipUpdateObject} newData New data */ - if ('nickname' in data) { - client.user.friendNicknames.set(data.id, data.nickname); - } - client.emit(Events.RELATIONSHIP_UPDATE, data.id, RelationshipTypes[data.type], data); + const oldType = client.relationships.cache.get(data.id); + const oldSince = client.relationships.sinceCache.get(data.id); + const oldNickname = client.relationships.friendNicknames.get(data.id); + // Update + if (data.type) client.relationships.cache.set(data.id, data.type); + if (data.nickname) client.relationships.friendNicknames.set(data.id, data.nickname); + if (data.since) client.relationships.sinceCache.set(data.id, new Date(data.since || 0)); + client.emit( + Events.RELATIONSHIP_UPDATE, + data.id, + { + type: oldType, + nickname: oldNickname, + since: oldSince, + }, + { + type: data.type, + nickname: data.nickname, + since: new Date(data.since || 0), + }, + ); }; diff --git a/src/managers/RelationshipManager.js b/src/managers/RelationshipManager.js index 5c33159..d57d195 100644 --- a/src/managers/RelationshipManager.js +++ b/src/managers/RelationshipManager.js @@ -1,7 +1,7 @@ 'use strict'; -const Buffer = require('node:buffer').Buffer; const { Collection } = require('@discordjs/collection'); +const BaseManager = require('./BaseManager'); const { GuildMember } = require('../structures/GuildMember'); const { Message } = require('../structures/Message'); const ThreadMember = require('../structures/ThreadMember'); @@ -11,19 +11,22 @@ const { RelationshipTypes } = require('../util/Constants'); /** * Manages API methods for Relationships and stores their cache. */ -class RelationshipManager { +class RelationshipManager extends BaseManager { constructor(client, users) { - /** - * The client that instantiated this manager. - * @type {Client} - */ - this.client = client; + super(client); /** * A collection of users this manager is caching. (Type: Number) * @type {Collection} - * @readonly */ this.cache = new Collection(); + /** + * @type {Collection} + */ + this.friendNicknames = new Collection(); + /** + * @type {Collection} + */ + this.sinceCache = new Collection(); this._setup(users); } @@ -35,7 +38,7 @@ class RelationshipManager { get friendCache() { const users = this.cache .filter(value => value === RelationshipTypes.FRIEND) - .map((value, key) => [key, this.client.users.cache.get(key)]); + .map((_, key) => [key, this.client.users.cache.get(key)]); return new Collection(users); } @@ -47,7 +50,7 @@ class RelationshipManager { get blockedCache() { const users = this.cache .filter(value => value === RelationshipTypes.BLOCKED) - .map((value, key) => [key, this.client.users.cache.get(key)]); + .map((_, key) => [key, this.client.users.cache.get(key)]); return new Collection(users); } @@ -59,7 +62,7 @@ class RelationshipManager { get incomingCache() { const users = this.cache .filter(value => value === RelationshipTypes.PENDING_INCOMING) - .map((value, key) => [key, this.client.users.cache.get(key)]); + .map((_, key) => [key, this.client.users.cache.get(key)]); return new Collection(users); } @@ -71,16 +74,29 @@ class RelationshipManager { get outgoingCache() { const users = this.cache .filter(value => value === RelationshipTypes.PENDING_OUTGOING) - .map((value, key) => [key, this.client.users.cache.get(key)]); + .map((_, key) => [key, this.client.users.cache.get(key)]); return new Collection(users); } /** - * Return array of cache - * @returns {Array<{id: Snowflake, type: RelationshipTypes}>} + * @typedef {Object} RelationshipJSONData + * @property {Snowflake} id The ID of the target user + * @property {RelationshipTypes} type The type of relationship + * @property {string | null} nickname The nickname of the user in this relationship (1-32 characters) + * @property {string} since When the user requested a relationship (ISO8601 timestamp) */ - toArray() { - return this.cache.map((value, key) => ({ id: key, type: RelationshipTypes[value] })); + + /** + * Return array of cache + * @returns {RelationshipJSONData[]} + */ + toJSON() { + return this.cache.map((value, key) => ({ + id: key, + type: RelationshipTypes[value], + nickname: this.friendNicknames.get(key), + since: this.sinceCache.get(key).toISOString(), + })); } /** @@ -91,8 +107,9 @@ class RelationshipManager { _setup(users) { if (!Array.isArray(users)) return; for (const relationShip of users) { - this.client.user.friendNicknames.set(relationShip.id, relationShip.nickname); + this.friendNicknames.set(relationShip.id, relationShip.nickname); this.cache.set(relationShip.id, relationShip.type); + this.sinceCache.set(relationShip.id, new Date(relationShip.since || 0)); } } @@ -133,66 +150,55 @@ class RelationshipManager { } /** - * Deletes a friend relationship with a client user. + * Deletes a friend / blocked relationship with a client user or cancels a friend request. * @param {UserResolvable} user Target * @returns {Promise} */ - deleteFriend(user) { + async deleteRelationship(user) { const id = this.resolveId(user); - // Check if already friends - if (this.cache.get(id) !== RelationshipTypes.FRIEND) return false; - return this.__cancel(id); + if ( + ![RelationshipTypes.FRIEND, RelationshipTypes.BLOCKED, RelationshipTypes.PENDING_OUTGOING].includes( + this.cache.get(id), + ) + ) { + return Promise.resolve(false); + } + await this.client.api.users['@me'].relationships[id].delete({ + DiscordContext: { location: 'Friends' }, + }); + return true; } /** - * Deletes a blocked relationship with a client user. - * @param {UserResolvable} user Target - * @returns {Promise} + * @typedef {Object} FriendRequestOptions + * @property {UserResolvable} [user] Target + * @property {string} [username] Discord username + * @property {number | null} [discriminator] Discord discriminator */ - deleteBlocked(user) { - const id = this.resolveId(user); - // Check if already blocked - if (this.cache.get(id) !== RelationshipTypes.BLOCKED) return false; - return this.__cancel(id); - } /** * Sends a friend request. - * @param {string} username Username of the user to send the request to - * @param {?number} discriminator Discriminator of the user to send the request to + * @param {FriendRequestOptions} options Target * @returns {Promise} */ - async sendFriendRequest(username, discriminator) { - await this.client.api.users('@me').relationships.post({ - data: { - username, - discriminator: discriminator == 0 ? null : parseInt(discriminator), - }, - headers: { - 'X-Context-Properties': Buffer.from(JSON.stringify({ location: 'Add Friend' }), 'utf8').toString('base64'), - }, - }); - return true; - } - - /** - * Cancels a friend request. - * @param {UserResolvable} user the user you want to delete - * @returns {Promise} - */ - cancelFriendRequest(user) { - const id = this.resolveId(user); - if (this.cache.get(id) !== RelationshipTypes.PENDING_OUTGOING) return false; - return this.__cancel(id); - } - - async __cancel(id) { - await this.client.api.users['@me'].relationships[id].delete({ - headers: { - 'X-Context-Properties': Buffer.from(JSON.stringify({ location: 'Friends' }), 'utf8').toString('base64'), - }, - }); - return true; + async sendFriendRequest(options) { + if (options?.user) { + const id = this.resolveId(options.user); + await this.client.api.users['@me'].relationships[id].put({ + data: {}, + DiscordContext: { location: 'ContextMenu' }, + }); + return true; + } else { + await this.client.api.users['@me'].relationships.post({ + data: { + username: options.username, + discriminator: options.discriminator, + }, + DiscordContext: { location: 'Add Friend' }, + }); + return true; + } } /** @@ -203,16 +209,14 @@ class RelationshipManager { async addFriend(user) { const id = this.resolveId(user); // Check if already friends - if (this.cache.get(id) === RelationshipTypes.FRIEND) return false; + if (this.cache.get(id) === RelationshipTypes.FRIEND) return Promise.resolve(false); // Check if outgoing request - if (this.cache.get(id) === RelationshipTypes.PENDING_OUTGOING) return false; + if (this.cache.get(id) === RelationshipTypes.PENDING_OUTGOING) return Promise.resolve(false); await this.client.api.users['@me'].relationships[id].put({ data: { type: RelationshipTypes.FRIEND, }, - headers: { - 'X-Context-Properties': Buffer.from(JSON.stringify({ location: 'Friends' }), 'utf8').toString('base64'), - }, + DiscordContext: { location: 'Friends' }, }); return true; } @@ -223,14 +227,19 @@ class RelationshipManager { * @param {?string} nickname New nickname * @returns {Promise} */ - async setNickname(user, nickname) { + async setNickname(user, nickname = null) { const id = this.resolveId(user); - if (this.cache.get(id) !== RelationshipTypes.FRIEND) return false; + if (this.cache.get(id) !== RelationshipTypes.FRIEND) return Promise.resolve(false); await this.client.api.users['@me'].relationships[id].patch({ data: { nickname: typeof nickname === 'string' ? nickname : null, }, }); + if (nickname) { + this.friendNicknames.set(id, nickname); + } else { + this.friendNicknames.delete(id); + } return true; } @@ -242,14 +251,12 @@ class RelationshipManager { async addBlocked(user) { const id = this.resolveId(user); // Check - if (this.cache.get(id) === RelationshipTypes.BLOCKED) return false; + if (this.cache.get(id) === RelationshipTypes.BLOCKED) return Promise.resolve(false); await this.client.api.users['@me'].relationships[id].put({ data: { type: RelationshipTypes.BLOCKED, }, - headers: { - 'X-Context-Properties': Buffer.from(JSON.stringify({ location: 'ContextMenu' }), 'utf8').toString('base64'), - }, + DiscordContext: { location: 'ContextMenu' }, }); return true; } diff --git a/src/structures/InteractionResponse.js b/src/structures/InteractionResponse.js deleted file mode 100644 index e86f786..00000000 --- a/src/structures/InteractionResponse.js +++ /dev/null @@ -1,114 +0,0 @@ -'use strict'; - -const { setTimeout } = require('node:timers'); -const Base = require('./Base'); -const { Events } = require('../util/Constants'); -const SnowflakeUtil = require('../util/SnowflakeUtil'); - -/** - * Represents a interaction on Discord. - * @extends {Base} - */ -class InteractionResponse extends Base { - constructor(client, data) { - super(client); - /** - * The id of the channel the interaction was sent in - * @type {Snowflake} - */ - this.channelId = data.channelId; - - /** - * The id of the guild the interaction was sent in, if any - * @type {?Snowflake} - */ - this.guildId = data.guildId ?? this.channel?.guild?.id ?? null; - - /** - * The interaction data was sent in - * @type {Object} - */ - this.sendData = data.metadata; - this._patch(data); - } - - _patch(data) { - if ('id' in data) { - /** - * The interaction response's ID - * @type {Snowflake} - */ - this.id = data.id; - } - if ('nonce' in data) { - /** - * The interaction response's nonce - * @type {Snowflake} - */ - this.nonce = data.nonce; - } - } - /** - * The timestamp the interaction response was created at - * @type {number} - * @readonly - */ - get createdTimestamp() { - return SnowflakeUtil.timestampFrom(this.id); - } - - /** - * The time the interaction response was created at - * @type {Date} - * @readonly - */ - get createdAt() { - return new Date(this.createdTimestamp); - } - - /** - * The channel that the interaction was sent in - * @type {TextBasedChannels} - * @readonly - */ - get channel() { - return this.client.channels.resolve(this.channelId); - } - - /** - * The guild the inteaaction was sent in (if in a guild channel) - * @type {?Guild} - * @readonly - */ - get guild() { - return this.client.guilds.resolve(this.guildId) ?? this.channel?.guild ?? null; - } - - /** - * Get Modal send from interaction - * @param {number} time Time to wait for modal - * @returns {Modal} - */ - awaitModal(time) { - if (!time || typeof time !== 'number' || time < 0) throw new Error('INVALID_TIME'); - return new Promise((resolve, reject) => { - const handler = modal => { - timeout.refresh(); - if (modal.nonce != this.nonce || modal.id != this.id) return; - clearTimeout(timeout); - this.client.removeListener(Events.INTERACTION_MODAL_CREATE, handler); - this.client.decrementMaxListeners(); - resolve(modal); - }; - const timeout = setTimeout(() => { - this.client.removeListener(Events.INTERACTION_MODAL_CREATE, handler); - this.client.decrementMaxListeners(); - reject(new Error('MODAL_TIMEOUT')); - }, time).unref(); - this.client.incrementMaxListeners(); - this.client.on(Events.INTERACTION_MODAL_CREATE, handler); - }); - } -} - -module.exports = InteractionResponse; diff --git a/src/structures/Modal.js b/src/structures/Modal.js index 6e4aad1..697195e 100644 --- a/src/structures/Modal.js +++ b/src/structures/Modal.js @@ -2,24 +2,15 @@ const { setTimeout } = require('node:timers'); const BaseMessageComponent = require('./BaseMessageComponent'); -const User = require('./User'); +const { InteractionTypes, Events } = require('../util/Constants'); const SnowflakeUtil = require('../util/SnowflakeUtil'); -const Util = require('../util/Util'); /** * Represents a modal (form) to be shown in response to an interaction */ class Modal { /** - * @typedef {Object} ModalOptions - * @property {string} [customId] A unique string to be sent in the interaction when clicked - * @property {string} [title] The title to be displayed on this modal - * @property {Array<(MessageActionRow|MessageActionRowOptions)>} [components] - * Action rows containing interactive components for the modal (text input components) - */ - - /** - * @param {Modal|ModalOptions} data Modal to clone or raw data + * @param {Object} data Modal to clone or raw data * @param {Client} client The client constructing this Modal, if provided */ constructor(data = {}, client = null) { @@ -33,106 +24,69 @@ class Modal { * A unique string to be sent in the interaction when submitted * @type {?string} */ - this.customId = data.custom_id ?? data.customId ?? null; + this.customId = data.custom_id; /** * The title to be displayed on this modal * @type {?string} */ - this.title = data.title ?? null; + this.title = data.title; /** * Timestamp (Discord epoch) of when this modal was created - * @type {?Snowflake} + * @type {Snowflake} */ - this.nonce = data.nonce ?? null; + this.nonce = data.nonce; /** * ID slash / button / menu when modal is displayed - * @type {?Snowflake} + * @type {Snowflake} */ - this.id = data.id ?? null; + this.id = data.id; /** * Application sending the modal - * @type {?Object} + * @type {Snowflake} */ - this.application = data.application - ? { - ...data.application, - bot: data.application.bot ? new User(client, data.application.bot, data.application) : null, - } - : null; + this.applicationId = data.application.id; - this.client = client; + /** + * The id of the channel the message was sent in + * @type {Snowflake} + */ + this.channelId = data.channel_id; + + Object.defineProperty(this, 'client', { + value: client, + writable: false, + }); } /** - * Get Interaction Response - * @type {?InteractionResponse} + * The id of the guild the message was sent in, if any + * @type {?Snowflake} * @readonly */ - get sendFromInteraction() { - if (this.id && this.nonce && this.client) { - const cache = this.client._interactionCache.get(this.nonce); - const channel = cache.guildId - ? this.client.guilds.cache.get(cache.guildId)?.channels.cache.get(cache.channelId) - : this.client.channels.cache.get(cache.channelId); - return channel.interactions.cache.get(this.id); - } - return null; + get guildId() { + return this.client.channels.cache.get(this.channelId)?.guildId || null; } /** - * Adds components to the modal. - * @param {...MessageActionRowResolvable[]} components The components to add - * @returns {Modal} + * The channel that the message was sent in + * @type {TextBasedChannels} + * @readonly */ - addComponents(...components) { - this.components.push(...components.flat(Infinity).map(c => BaseMessageComponent.create(c))); - return this; + get channel() { + return this.client.channels.resolve(this.channelId); } /** - * Sets the components of the modal. - * @param {...MessageActionRowResolvable[]} components The components to set - * @returns {Modal} + * The guild the message was sent in (if in a guild channel) + * @type {?Guild} + * @readonly */ - setComponents(...components) { - this.spliceComponents(0, this.components.length, components); - return this; - } - - /** - * Sets the custom id for this modal - * @param {string} customId A unique string to be sent in the interaction when submitted - * @returns {Modal} - */ - setCustomId(customId) { - this.customId = Util.verifyString(customId, RangeError, 'MODAL_CUSTOM_ID'); - return this; - } - - /** - * Removes, replaces, and inserts components in the modal. - * @param {number} index The index to start at - * @param {number} deleteCount The number of components to remove - * @param {...MessageActionRowResolvable[]} [components] The replacing components - * @returns {Modal} - */ - spliceComponents(index, deleteCount, ...components) { - this.components.splice(index, deleteCount, ...components.flat(Infinity).map(c => BaseMessageComponent.create(c))); - return this; - } - - /** - * Sets the title of this modal - * @param {string} title The title to be displayed on this modal - * @returns {Modal} - */ - setTitle(title) { - this.title = Util.verifyString(title, RangeError, 'MODAL_TITLE'); - return this; + get guild() { + return this.client.guilds.resolve(this.guildId) ?? this.channel?.guild ?? null; } toJSON() { @@ -144,136 +98,77 @@ class Modal { }; } - /** - * @typedef {Object} TextInputComponentReplyData - * @property {string} [customId] TextInputComponent custom id - * @property {string} [value] TextInputComponent value - */ - - /** - * @typedef {Object} ModalReplyData - * @property {?GuildResolvable} [guild] Guild to send the modal to - * @property {?TextChannelResolvable} [channel] User to send the modal to - * @property {?TextInputComponentReplyData[]} [data] Reply data - */ - /** * Reply to this modal with data. (Event only) - * @param {ModalReplyData} data Data to send with the modal - * @returns {Promise} + * @returns {Promise} * @example * client.on('interactionModalCreate', modal => { - * // 1. - * modal.reply({ - * data: [ - * { - * customId: 'code', - * value: '1+1' - * }, { - * customId: 'message', - * value: 'hello' - * } - * ], - * channel: 'id', // optional - * guild: 'id', // optional - * }) - * // or 2. - * modal.components[0].components[0].setValue('1+1'); - * modal.components[1].components[0].setValue('hello'); - * modal.reply(); + * // Modal > ActionRow > TextInput + * modal.components[0].components[0].setValue('1+1'); + * modal.components[1].components[0].setValue('hello'); + * modal.reply(); * }) */ - async reply(data = {}) { - if (!this.application) throw new Error('Modal cannot reply (Missing Application)'); - const data_cache = this.sendFromInteraction; - const guild = this.client.guilds.resolveId(data?.guild) || data_cache.guildId || null; - const channel = this.client.channels.resolveId(data?.channel) || data_cache.channelId; - if (!channel) throw new Error('Modal cannot reply (Missing data)'); - // Add data to components - // this.components = [ MessageActionRow.components = [ TextInputComponent ] ] - // 5 MessageActionRow / Modal, 1 TextInputComponent / 1 MessageActionRow - if (Array.isArray(data?.data) && data?.data?.length > 0) { - for (let i = 0; i < this.components.length; i++) { - const value = data.data.find(d => d.customId == this.components[i].components[0].customId); - if (this.components[i].components[0].required == true && !value) { - throw new Error( - 'MODAL_REQUIRED_FIELD_MISSING\n' + - `Required fieldId ${this.components[i].components[0].customId} missing value`, - ); - } - if (value) { - if (value?.value?.includes('\n') && this.components[i].components[0].style == 'SHORT') { - throw new Error( - 'MODAL_REPLY_DATA_INVALID\n' + - `value must be a single line, got multiple lines [Custom ID: ${value.customId}]`, - ); - } - this.components[i].components[0].setValue(value.value); - } - } - } + reply() { + if (!this.applicationId || !this.client || !this.channelId) throw new Error('Modal cannot reply'); // Get Object const dataFinal = this.toJSON(); dataFinal.components = dataFinal.components .map(c => { - delete c.components[0].max_length; - delete c.components[0].min_length; - delete c.components[0].required; - delete c.components[0].placeholder; - delete c.components[0].label; - delete c.components[0].style; + c.components[0] = { + type: c.components[0].type, + value: c.components[0].value, + custom_id: c.components[0].custom_id, + }; return c; }) .filter(c => c.components[0].value && c.components[0].value !== ''); delete dataFinal.title; const nonce = SnowflakeUtil.generate(); const postData = { - type: 5, // Modal - application_id: this.application.id, - guild_id: guild || null, - channel_id: channel, + type: InteractionTypes.MODAL_SUBMIT, // Modal + application_id: this.applicationId, + guild_id: this.guildId, + channel_id: this.channelId, data: dataFinal, nonce, - session_id: this.client.sessionId, + session_id: this.client.ws.shards.first()?.sessionId, }; - await this.client.api.interactions.post({ + this.client.api.interactions.post({ data: postData, }); - this.client._interactionCache.set(nonce, { - channelId: channel, - guildId: guild, - metadata: postData, - }); return new Promise((resolve, reject) => { + const timeoutMs = 15_000; + // Waiting for MsgCreate / ModalCreate const handler = data => { - timeout.refresh(); - if (data.metadata?.nonce !== nonce) return; + if (data.nonce !== nonce) return; clearTimeout(timeout); - this.client.removeListener('interactionResponse', handler); + this.client.removeListener(Events.MESSAGE_CREATE, handler); + this.client.removeListener(Events.INTERACTION_MODAL_CREATE, handler); this.client.decrementMaxListeners(); - if (data.status) { - resolve(data.metadata); - } else { - reject( - new Error('INTERACTION_ERROR', { - cause: data, - }), - ); - } + resolve(data); }; const timeout = setTimeout(() => { - this.client.removeListener('interactionResponse', handler); + this.client.removeListener(Events.MESSAGE_CREATE, handler); + this.client.removeListener(Events.INTERACTION_MODAL_CREATE, handler); this.client.decrementMaxListeners(); - reject( - new Error('INTERACTION_TIMEOUT', { - cause: postData, - }), - ); - }, this.client.options.interactionTimeout).unref(); + reject(new Error('INTERACTION_FAILED')); + }, timeoutMs).unref(); this.client.incrementMaxListeners(); - this.client.on('interactionResponse', handler); + this.client.on(Events.MESSAGE_CREATE, handler); + this.client.on(Events.INTERACTION_MODAL_CREATE, handler); }); } + + // TypeScript + /** + * Check data + * @type {boolean} + * @readonly + */ + get isMessage() { + return false; + } } module.exports = Modal; From 7a821934b86de9131e7eaf3df017bb5d63111b21 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Mon, 8 Jan 2024 20:42:33 +0700 Subject: [PATCH 25/60] Delete APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE.js --- ...PLICATION_COMMAND_AUTOCOMPLETE_RESPONSE.js | 23 ------------------- 1 file changed, 23 deletions(-) delete mode 100644 src/client/websocket/handlers/APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE.js diff --git a/src/client/websocket/handlers/APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE.js b/src/client/websocket/handlers/APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE.js deleted file mode 100644 index b7b952a..00000000 --- a/src/client/websocket/handlers/APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -const { Events } = require('../../../util/Constants'); - -module.exports = (client, { d: data }) => { - /** - * @typedef {object} AutocompleteResponseChoice - * @property {string} name The name of the choice - * @property {string} value The value of the choice - */ - /** - * @typedef {object} AutocompleteResponse - * @property {Snowflake} [nonce] Snowflake of the data - * @property {Array} [choices] Array of choices - */ - /** - * Emitted when receiving a response from Discord - * @event Client#applicationCommandAutocompleteResponse - * @param {AutocompleteResponse} data Data - * @deprecated Test only - */ - client.emit(Events.APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE, data); -}; From 26c71d7777554793e48938c81fbd7cebde08a9d1 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Mon, 8 Jan 2024 20:42:43 +0700 Subject: [PATCH 26/60] Update ActionsManager.js --- src/client/actions/ActionsManager.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/client/actions/ActionsManager.js b/src/client/actions/ActionsManager.js index 5594fdd..0d49735 100644 --- a/src/client/actions/ActionsManager.js +++ b/src/client/actions/ActionsManager.js @@ -45,7 +45,6 @@ class ActionsManager { this.register(require('./GuildStickerUpdate')); this.register(require('./GuildStickersUpdate')); this.register(require('./GuildUpdate')); - this.register(require('./InteractionCreate')); this.register(require('./InviteCreate')); this.register(require('./InviteDelete')); this.register(require('./MessageCreate')); From 02fcfb881f173762abef5ff2027362bcebadb2bb Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Tue, 9 Jan 2024 20:15:49 +0700 Subject: [PATCH 27/60] update --- .../handlers/CHANNEL_RECIPIENT_ADD.js | 29 +- .../handlers/CHANNEL_RECIPIENT_REMOVE.js | 22 +- .../GUILD_APPLICATION_COMMANDS_UPDATE.js | 11 - src/client/websocket/handlers/MESSAGE_ACK.js | 16 -- .../websocket/handlers/USER_NOTE_UPDATE.js | 2 +- src/managers/GuildBanManager.js | 2 +- src/managers/PermissionOverwriteManager.js | 2 +- src/managers/ThreadMemberManager.js | 2 +- .../ApplicationRoleConnectionMetadata.js | 3 + src/structures/AutoModerationRule.js | 10 +- src/structures/AutocompleteInteraction.js | 1 + src/structures/BaseMessageComponent.js | 6 +- src/structures/Channel.js | 5 +- src/structures/ContextMenuInteraction.js | 2 +- src/structures/ForumChannel.js | 10 - src/structures/GroupDMChannel.js | 2 - src/structures/Interaction.js | 63 +---- src/structures/MessageButton.js | 68 +---- src/structures/MessageSelectMenu.js | 253 +----------------- src/structures/Modal.js | 2 +- src/structures/TextInputComponent.js | 70 ----- 21 files changed, 52 insertions(+), 529 deletions(-) delete mode 100644 src/client/websocket/handlers/GUILD_APPLICATION_COMMANDS_UPDATE.js delete mode 100644 src/client/websocket/handlers/MESSAGE_ACK.js diff --git a/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js b/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js index fc46539..b89bcbb 100644 --- a/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +++ b/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js @@ -1,16 +1,19 @@ 'use strict'; -const { Events } = require('../../../util/Constants'); -module.exports = (client, packet) => { - /** - * Emitted whenever a recipient is added from a group DM. - * @event Client#channelRecipientAdd - * @param {PartialGroupDMChannel} channel Group DM channel - * @param {User} user User - */ +const { Events, Status } = require('../../../util/Constants'); +module.exports = (client, packet, shard) => { const channel = client.channels.cache.get(packet.d.channel_id); - if (!channel) return; - if (!channel._recipients) channel._recipients = []; - channel._recipients.push(packet.d.user); - const user = client.users._add(packet.d.user); - client.emit(Events.CHANNEL_RECIPIENT_ADD, channel, user); + if (channel) { + if (!channel._recipients) channel._recipients = []; + channel._recipients.push(packet.d.user); + const user = client.users._add(packet.d.user); + if (shard.status == Status.READY) { + /** + * Emitted whenever a recipient is added from a group DM. + * @event Client#channelRecipientAdd + * @param {GroupDMChannel} channel Group DM channel + * @param {User} user User + */ + client.emit(Events.CHANNEL_RECIPIENT_ADD, channel, user); + } + } }; diff --git a/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js b/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js index 5a2c917..22b3f98 100644 --- a/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +++ b/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js @@ -1,16 +1,16 @@ 'use strict'; const { Events } = require('../../../util/Constants'); module.exports = (client, packet) => { - /** - * Emitted whenever a recipient is removed from a group DM. - * @event Client#channelRecipientRemove - * @param {PartialGroupDMChannel} channel Group DM channel - * @param {User} user User - */ const channel = client.channels.cache.get(packet.d.channel_id); - if (!channel) return; - if (!channel._recipients) channel._recipients = []; - channel._recipients = channel._recipients.filter(r => r !== packet.d.user.id); - const user = client.users._add(packet.d.user); - client.emit(Events.CHANNEL_RECIPIENT_REMOVE, channel, user); + if (channel) { + if (!channel._recipients) channel._recipients = []; + channel._recipients = channel._recipients.filter(u => u.id !== packet.d.user.id); + /** + * Emitted whenever a recipient is removed from a group DM. + * @event Client#channelRecipientRemove + * @param {GroupDMChannel} channel Group DM channel + * @param {User} user User + */ + client.emit(Events.CHANNEL_RECIPIENT_REMOVE, channel, client.users._add(packet.d.user)); + } }; diff --git a/src/client/websocket/handlers/GUILD_APPLICATION_COMMANDS_UPDATE.js b/src/client/websocket/handlers/GUILD_APPLICATION_COMMANDS_UPDATE.js deleted file mode 100644 index 1a1865d..00000000 --- a/src/client/websocket/handlers/GUILD_APPLICATION_COMMANDS_UPDATE.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; -const { Events } = require('../../../util/Constants'); - -module.exports = (client, { d: data }) => { - for (const command of data.application_commands) { - const user = client.users.cache.get(command.application_id); - if (!user || !user.bot) continue; - user.application?.commands?._add(command, true); - } - client.emit(Events.GUILD_APPLICATION_COMMANDS_UPDATE, data); -}; diff --git a/src/client/websocket/handlers/MESSAGE_ACK.js b/src/client/websocket/handlers/MESSAGE_ACK.js deleted file mode 100644 index cae8c5b..00000000 --- a/src/client/websocket/handlers/MESSAGE_ACK.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -const { Events } = require('../../../util/Constants'); - -module.exports = (client, { d: data }) => { - const channel = client.channels.cache.get(data.channel_id); - /** - * Emitted whenever message is acknowledged (mark read / unread) - * @event Client#messageAck - * @param {TextChannel} channel Channel - * @param {Snowflake} message_id Message ID - * @param {boolean} isRead Whether the message is read - * @param {Object} raw Raw data - */ - client.emit(Events.MESSAGE_ACK, channel, data.message_id, !data.manual, data); -}; diff --git a/src/client/websocket/handlers/USER_NOTE_UPDATE.js b/src/client/websocket/handlers/USER_NOTE_UPDATE.js index 5e36745..daa1708 100644 --- a/src/client/websocket/handlers/USER_NOTE_UPDATE.js +++ b/src/client/websocket/handlers/USER_NOTE_UPDATE.js @@ -1,5 +1,5 @@ 'use strict'; module.exports = (client, { d: data }) => { - client.user.notes.set(data.id, data.note); + client.notes.cache.set(data.id, data.note); }; diff --git a/src/managers/GuildBanManager.js b/src/managers/GuildBanManager.js index e0a40d9..543ed1d 100644 --- a/src/managers/GuildBanManager.js +++ b/src/managers/GuildBanManager.js @@ -130,7 +130,7 @@ class GuildBanManager extends CachedManager { * @typedef {Object} BanOptions * @property {number} [days=0] Number of days of messages to delete, must be between 0 and 7, inclusive * This property is deprecated. Use `deleteMessageSeconds` instead. - * @property {number} [deleteMessageSeconds=0] Number of seconds of messages to delete, + * @property {number} [deleteMessageSeconds] Number of seconds of messages to delete, * must be between 0 and 604800 (7 days), inclusive * @property {string} [reason] The reason for the ban */ diff --git a/src/managers/PermissionOverwriteManager.js b/src/managers/PermissionOverwriteManager.js index 5793073..d71badf 100644 --- a/src/managers/PermissionOverwriteManager.js +++ b/src/managers/PermissionOverwriteManager.js @@ -89,7 +89,7 @@ class PermissionOverwriteManager extends CachedManager { * @private */ async upsert(userOrRole, options, overwriteOptions = {}, existing) { - const userOrRoleId = this.channel.guild.roles.resolveId(userOrRole) ?? this.client.users.resolveId(userOrRole); + let userOrRoleId = this.channel.guild.roles.resolveId(userOrRole) ?? this.client.users.resolveId(userOrRole); let { type, reason } = overwriteOptions; if (typeof type !== 'number') { userOrRole = this.channel.guild.roles.resolve(userOrRole) ?? this.client.users.resolve(userOrRole); diff --git a/src/managers/ThreadMemberManager.js b/src/managers/ThreadMemberManager.js index be3f89f..b6d3809 100644 --- a/src/managers/ThreadMemberManager.js +++ b/src/managers/ThreadMemberManager.js @@ -179,7 +179,7 @@ class ThreadMemberManager extends CachedManager { const id = this.resolveId(member); return id ? this._fetchOne(id, options) - : this._fetchMany(typeof member !== 'boolean' ? member : { ...options, cache: member }); + : this._fetchMany(typeof member === 'boolean' ? { ...options, cache: member } : options); } } diff --git a/src/structures/ApplicationRoleConnectionMetadata.js b/src/structures/ApplicationRoleConnectionMetadata.js index 037c190..aaa7da6 100644 --- a/src/structures/ApplicationRoleConnectionMetadata.js +++ b/src/structures/ApplicationRoleConnectionMetadata.js @@ -2,6 +2,9 @@ const { ApplicationRoleConnectionMetadataTypes } = require('../util/Constants'); +/** + * Role connection metadata object for an application. + */ class ApplicationRoleConnectionMetadata { constructor(data) { /** diff --git a/src/structures/AutoModerationRule.js b/src/structures/AutoModerationRule.js index bfc1b98..838a0f9 100644 --- a/src/structures/AutoModerationRule.js +++ b/src/structures/AutoModerationRule.js @@ -194,7 +194,7 @@ class AutoModerationRule extends Base { * @returns {Promise} */ setKeywordFilter(keywordFilter, reason) { - return this.edit({ triggerMetadata: { keywordFilter }, reason }); + return this.edit({ triggerMetadata: { ...this.triggerMetadata, keywordFilter }, reason }); } /** @@ -205,7 +205,7 @@ class AutoModerationRule extends Base { * @returns {Promise} */ setRegexPatterns(regexPatterns, reason) { - return this.edit({ triggerMetadata: { regexPatterns }, reason }); + return this.edit({ triggerMetadata: { ...this.triggerMetadata, regexPatterns }, reason }); } /** @@ -215,7 +215,7 @@ class AutoModerationRule extends Base { * @returns {Promise} */ setPresets(presets, reason) { - return this.edit({ triggerMetadata: { presets }, reason }); + return this.edit({ triggerMetadata: { ...this.triggerMetadata, presets }, reason }); } /** @@ -225,7 +225,7 @@ class AutoModerationRule extends Base { * @returns {Promise} */ setAllowList(allowList, reason) { - return this.edit({ triggerMetadata: { allowList }, reason }); + return this.edit({ triggerMetadata: { ...this.triggerMetadata, allowList }, reason }); } /** @@ -235,7 +235,7 @@ class AutoModerationRule extends Base { * @returns {Promise} */ setMentionTotalLimit(mentionTotalLimit, reason) { - return this.edit({ triggerMetadata: { mentionTotalLimit }, reason }); + return this.edit({ triggerMetadata: { ...this.triggerMetadata, mentionTotalLimit }, reason }); } /** diff --git a/src/structures/AutocompleteInteraction.js b/src/structures/AutocompleteInteraction.js index 41900ab..4d57ebf 100644 --- a/src/structures/AutocompleteInteraction.js +++ b/src/structures/AutocompleteInteraction.js @@ -2,6 +2,7 @@ const CommandInteractionOptionResolver = require('./CommandInteractionOptionResolver'); const Interaction = require('./Interaction'); +const { Error } = require('../errors'); const { InteractionResponseTypes, ApplicationCommandOptionTypes } = require('../util/Constants'); /** diff --git a/src/structures/BaseMessageComponent.js b/src/structures/BaseMessageComponent.js index 4075827..8ae40df 100644 --- a/src/structures/BaseMessageComponent.js +++ b/src/structures/BaseMessageComponent.js @@ -76,7 +76,11 @@ class BaseMessageComponent { component = data instanceof MessageButton ? data : new MessageButton(data); break; } - case MessageComponentTypes.SELECT_MENU: { + case MessageComponentTypes.STRING_SELECT: + case MessageComponentTypes.USER_SELECT: + case MessageComponentTypes.ROLE_SELECT: + case MessageComponentTypes.MENTIONABLE_SELECT: + case MessageComponentTypes.CHANNEL_SELECT: { const MessageSelectMenu = require('./MessageSelectMenu'); component = data instanceof MessageSelectMenu ? data : new MessageSelectMenu(data); break; diff --git a/src/structures/Channel.js b/src/structures/Channel.js index cdffc3a..7370087 100644 --- a/src/structures/Channel.js +++ b/src/structures/Channel.js @@ -53,7 +53,6 @@ class Channel extends Base { if ('flags' in data) { /** * The flags that are applied to the channel. - * This is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`. * @type {?Readonly} */ this.flags = new ChannelFlags(data.flags).freeze(); @@ -203,8 +202,8 @@ class Channel extends Base { if ((data.recipients && data.type !== ChannelTypes.GROUP_DM) || data.type === ChannelTypes.DM) { channel = new DMChannel(client, data); } else if (data.type === ChannelTypes.GROUP_DM) { - const PartialGroupDMChannel = require('./PartialGroupDMChannel'); - channel = new PartialGroupDMChannel(client, data); + const GroupDMChannel = require('./GroupDMChannel'); + channel = new GroupDMChannel(client, data); } } else { guild ??= client.guilds.cache.get(data.guild_id); diff --git a/src/structures/ContextMenuInteraction.js b/src/structures/ContextMenuInteraction.js index f4f6ef4..2ddcb90 100644 --- a/src/structures/ContextMenuInteraction.js +++ b/src/structures/ContextMenuInteraction.js @@ -22,7 +22,7 @@ class ContextMenuInteraction extends BaseCommandInteraction { ); /** - * The id of the target of the interaction + * The id of the target of this interaction * @type {Snowflake} */ this.targetId = data.data.target_id; diff --git a/src/structures/ForumChannel.js b/src/structures/ForumChannel.js index 61723e4..589b01f 100644 --- a/src/structures/ForumChannel.js +++ b/src/structures/ForumChannel.js @@ -3,7 +3,6 @@ const GuildChannel = require('./GuildChannel'); const TextBasedChannel = require('./interfaces/TextBasedChannel'); const GuildForumThreadManager = require('../managers/GuildForumThreadManager'); -const InteractionManager = require('../managers/InteractionManager'); const { SortOrderTypes, ForumLayoutTypes } = require('../util/Constants'); const { transformAPIGuildForumTag, transformAPIGuildDefaultReaction } = require('../util/Util'); @@ -46,12 +45,6 @@ class ForumChannel extends GuildChannel { constructor(guild, data, client) { super(guild, data, client, false); - /** - * A manager of the interactions sent to this channel - * @type {InteractionManager} - */ - this.interactions = new InteractionManager(this); - /** * A manager of the threads belonging to this channel * @type {GuildForumThreadManager} @@ -260,12 +253,9 @@ TextBasedChannel.applyToClass(ForumChannel, true, [ 'send', 'lastMessage', 'lastPinAt', - 'bulkDelete', 'sendTyping', 'createMessageCollector', 'awaitMessages', - 'createMessageComponentCollector', - 'awaitMessageComponent', ]); module.exports = ForumChannel; diff --git a/src/structures/GroupDMChannel.js b/src/structures/GroupDMChannel.js index 207715e..723f2ec 100644 --- a/src/structures/GroupDMChannel.js +++ b/src/structures/GroupDMChannel.js @@ -299,8 +299,6 @@ class GroupDMChannel extends Channel { sendTyping() {} createMessageCollector() {} awaitMessages() {} - createMessageComponentCollector() {} - awaitMessageComponent() {} // Doesn't work on DM channels; setRateLimitPerUser() {} // Doesn't work on DM channels; setNSFW() {} } diff --git a/src/structures/Interaction.js b/src/structures/Interaction.js index 1cbc74c..393fb60 100644 --- a/src/structures/Interaction.js +++ b/src/structures/Interaction.js @@ -269,71 +269,10 @@ class Interaction extends Base { * Indicates whether this interaction is a {@link SelectMenuInteraction}. * @returns {boolean} */ - isAnySelectMenu() { - return InteractionTypes[this.type] === InteractionTypes.MESSAGE_COMPONENT && typeof this.values !== 'undefined'; - } - - /** - * Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type. - * @returns {boolean} - * @deprecated Use {@link Interaction#isStringSelect()} instead - */ isSelectMenu() { - return this.isStringSelect(); - } - - /** - * Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type. - * @returns {boolean} - */ - isStringSelect() { return ( InteractionTypes[this.type] === InteractionTypes.MESSAGE_COMPONENT && - MessageComponentTypes[this.componentType] === MessageComponentTypes.STRING_SELECT - ); - } - - /** - * Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type. - * @returns {boolean} - */ - isUserSelect() { - return ( - InteractionTypes[this.type] === InteractionTypes.MESSAGE_COMPONENT && - MessageComponentTypes[this.componentType] === MessageComponentTypes.USER_SELECT - ); - } - - /** - * Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type. - * @returns {boolean} - */ - isRoleSelect() { - return ( - InteractionTypes[this.type] === InteractionTypes.MESSAGE_COMPONENT && - MessageComponentTypes[this.componentType] === MessageComponentTypes.ROLE_SELECT - ); - } - - /** - * Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type. - * @returns {boolean} - */ - isMentionableSelect() { - return ( - InteractionTypes[this.type] === InteractionTypes.MESSAGE_COMPONENT && - MessageComponentTypes[this.componentType] === MessageComponentTypes.MENTIONABLE_SELECT - ); - } - - /** - * Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type. - * @returns {boolean} - */ - isChannelSelect() { - return ( - InteractionTypes[this.type] === InteractionTypes.MESSAGE_COMPONENT && - MessageComponentTypes[this.componentType] === MessageComponentTypes.CHANNEL_SELECT + MessageComponentTypes[this.componentType] === MessageComponentTypes.SELECT_MENU ); } diff --git a/src/structures/MessageButton.js b/src/structures/MessageButton.js index c3a0613..a94c1ec 100644 --- a/src/structures/MessageButton.js +++ b/src/structures/MessageButton.js @@ -1,13 +1,9 @@ 'use strict'; -const { setTimeout } = require('node:timers'); const BaseMessageComponent = require('./BaseMessageComponent'); const { RangeError } = require('../errors'); -const { MessageButtonStyles, MessageComponentTypes, InteractionTypes } = require('../util/Constants'); -const SnowflakeUtil = require('../util/SnowflakeUtil'); +const { MessageButtonStyles, MessageComponentTypes } = require('../util/Constants'); const Util = require('../util/Util'); -const { lazy } = require('../util/Util'); -const Message = lazy(() => require('../structures/Message').Message); /** * Represents a button message component. @@ -164,68 +160,6 @@ class MessageButton extends BaseMessageComponent { static resolveStyle(style) { return typeof style === 'string' ? style : MessageButtonStyles[style]; } - // Patch Click - /** - * Click the button - * @param {Message} message Discord Message - * @returns {Promise} - */ - async click(message) { - const nonce = SnowflakeUtil.generate(); - if (!(message instanceof Message())) throw new Error('[UNKNOWN_MESSAGE] Please pass a valid Message'); - if (!this.customId || this.style == MessageButtonStyles.LINK || this.disabled) return false; - const data = { - type: InteractionTypes.MESSAGE_COMPONENT, - nonce, - guild_id: message.guild?.id ?? null, - channel_id: message.channel.id, - message_id: message.id, - application_id: message.applicationId ?? message.author.id, - session_id: message.client.sessionId, - message_flags: message.flags.bitfield, - data: { - component_type: MessageComponentTypes.BUTTON, - custom_id: this.customId, - }, - }; - await message.client.api.interactions.post({ - data, - }); - message.client._interactionCache.set(nonce, { - channelId: message.channelId, - guildId: message.guildId, - metadata: data, - }); - return new Promise((resolve, reject) => { - const handler = data => { - timeout.refresh(); - if (data.metadata?.nonce !== nonce) return; - clearTimeout(timeout); - message.client.removeListener('interactionResponse', handler); - message.client.decrementMaxListeners(); - if (data.status) { - resolve(data.metadata); - } else { - reject( - new Error('INTERACTION_ERROR', { - cause: data, - }), - ); - } - }; - const timeout = setTimeout(() => { - message.client.removeListener('interactionResponse', handler); - message.client.decrementMaxListeners(); - reject( - new Error('INTERACTION_TIMEOUT', { - cause: data, - }), - ); - }, message.client.options.interactionTimeout).unref(); - message.client.incrementMaxListeners(); - message.client.on('interactionResponse', handler); - }); - } } module.exports = MessageButton; diff --git a/src/structures/MessageSelectMenu.js b/src/structures/MessageSelectMenu.js index cfeeb52..3a118dd 100644 --- a/src/structures/MessageSelectMenu.js +++ b/src/structures/MessageSelectMenu.js @@ -1,16 +1,7 @@ 'use strict'; -const { setTimeout } = require('node:timers'); const BaseMessageComponent = require('./BaseMessageComponent'); -const { - ChannelTypes, - MessageComponentTypes, - SelectMenuComponentTypes, - InteractionTypes, -} = require('../util/Constants'); -const SnowflakeUtil = require('../util/SnowflakeUtil'); -const { lazy } = require('../util/Util'); -const Message = lazy(() => require('./Message').Message); +const { ChannelTypes, MessageComponentTypes } = require('../util/Constants'); const Util = require('../util/Util'); /** @@ -103,130 +94,6 @@ class MessageSelectMenu extends BaseMessageComponent { ) ?? []; } - /** - * Adds the channel types to the select menu - * @param {...ChannelType[]} channelTypes Added channel types - * @returns {MessageSelectMenu} - */ - addChannelTypes(...channelTypes) { - if (!channelTypes.every(channelType => ChannelTypes[channelType])) { - throw new TypeError('INVALID_TYPE', 'channelTypes', 'Rest'); - } - this.channelTypes.push( - ...channelTypes.map(channelType => (typeof channelType === 'string' ? channelType : ChannelTypes[channelType])), - ); - return this; - } - - /** - * Sets the channel types of the select menu - * @param {...ChannelType[]} channelTypes An array of new channel types - * @returns {MessageSelectMenu} - */ - setChannelTypes(...channelTypes) { - if (!channelTypes.every(channelType => ChannelTypes[channelType])) { - throw new TypeError('INVALID_TYPE', 'channelTypes', 'Rest'); - } - this.channelTypes = channelTypes.map(channelType => - typeof channelType === 'string' ? channelType : ChannelTypes[channelType], - ); - return this; - } - - /** - * Sets the custom id of this select menu - * @param {string} customId A unique string to be sent in the interaction when clicked - * @returns {MessageSelectMenu} - */ - setCustomId(customId) { - this.customId = Util.verifyString(customId, RangeError, 'SELECT_MENU_CUSTOM_ID'); - return this; - } - - /** - * Sets the interactive status of the select menu - * @param {boolean} [disabled=true] Whether this select menu should be disabled - * @returns {MessageSelectMenu} - */ - setDisabled(disabled = true) { - this.disabled = disabled; - return this; - } - - /** - * Sets the maximum number of selections allowed for this select menu - * @param {number} maxValues Number of selections to be allowed - * @returns {MessageSelectMenu} - */ - setMaxValues(maxValues) { - this.maxValues = maxValues; - return this; - } - - /** - * Sets the minimum number of selections required for this select menu - * This will default the maxValues to the number of options, unless manually set - * @param {number} minValues Number of selections to be required - * @returns {MessageSelectMenu} - */ - setMinValues(minValues) { - this.minValues = minValues; - return this; - } - - /** - * Sets the placeholder of this select menu - * @param {string} placeholder Custom placeholder text to display when nothing is selected - * @returns {MessageSelectMenu} - */ - setPlaceholder(placeholder) { - this.placeholder = Util.verifyString(placeholder, RangeError, 'SELECT_MENU_PLACEHOLDER'); - return this; - } - - /** - * Sets the type of the select menu - * @param {SelectMenuComponentType} type Type of the select menu - * @returns {MessageSelectMenu} - */ - setType(type) { - if (!SelectMenuComponentTypes[type]) throw new TypeError('INVALID_TYPE', 'type', 'SelectMenuComponentType'); - this.type = BaseMessageComponent.resolveType(type); - return this; - } - - /** - * Adds options to the select menu. - * @param {...MessageSelectOptionData|MessageSelectOptionData[]} options The options to add - * @returns {MessageSelectMenu} - */ - addOptions(...options) { - this.options.push(...this.constructor.normalizeOptions(options)); - return this; - } - - /** - * Sets the options of the select menu. - * @param {...MessageSelectOptionData|MessageSelectOptionData[]} options The options to set - * @returns {MessageSelectMenu} - */ - setOptions(...options) { - this.spliceOptions(0, this.options.length, options); - return this; - } - - /** - * Removes, replaces, and inserts options in the select menu. - * @param {number} index The index to start at - * @param {number} deleteCount The number of options to remove - * @param {...MessageSelectOptionData|MessageSelectOptionData[]} [options] The replacing option objects - * @returns {MessageSelectMenu} - */ - spliceOptions(index, deleteCount, ...options) { - this.options.splice(index, deleteCount, ...this.constructor.normalizeOptions(...options)); - return this; - } - /** * Transforms the select menu into a plain object * @returns {APIMessageSelectMenu} The raw data of this select menu @@ -268,124 +135,6 @@ class MessageSelectMenu extends BaseMessageComponent { static normalizeOptions(...options) { return options.flat(Infinity).map(option => this.normalizeOption(option)); } - - // Add - /** - * Mesage select menu - * @param {Message} message The message this select menu is for - * @param {Array} values The values of the select menu - * @returns {Promise} - */ - async select(message, values) { - if (!(message instanceof Message())) throw new Error('[UNKNOWN_MESSAGE] Please pass a valid Message'); - if (!Array.isArray(values)) throw new TypeError('[INVALID_VALUES] Please pass an array of values'); - if (!this.customId || this.disabled) { - throw new Error('[INVALID_MENU] Menu does not contain Id or has been disabled'); - } // Disabled or null customID - if (values.length < this.minValues) { - throw new RangeError(`[SELECT_MENU_MIN_VALUES] The minimum number of values is ${this.minValues}`); - } - if (values.length > this.maxValues) { - throw new RangeError(`[SELECT_MENU_MAX_VALUES] The maximum number of values is ${this.maxValues}`); - } - const parseValues = value => { - switch (this.type) { - case 'SELECT_MENU': - case 'STRING_SELECT': { - if (typeof value !== 'string') throw new TypeError('[INVALID_VALUE] Please pass a string value'); - const value_ = this.options.find(obj => obj.value === value || obj.label === value); - if (!value_) throw new Error('[INVALID_VALUE] Please pass a valid value'); - return value_.value; - } - case 'USER_SELECT': { - const userId = this.client.users.resolveId(value); - if (!userId) throw new Error('[INVALID_VALUE] Please pass a valid user'); - return userId; - } - case 'ROLE_SELECT': { - const roleId = this.client.roles.resolveId(value); - if (!roleId) throw new Error('[INVALID_VALUE] Please pass a valid role'); - return roleId; - } - case 'MENTIONABLE_SELECT': { - const mentionableId = this.client.users.resolveId(value) || this.client.roles.resolveId(value); - if (!mentionableId) throw new Error('[INVALID_VALUE] Please pass a valid mentionable'); - return mentionableId; - } - case 'CHANNEL_SELECT': { - const channel = this.client.channels.resolve(value); - if (!channel) throw new Error('[INVALID_VALUE] Please pass a valid channel'); - if (!this.channelTypes.includes(channel.type)) { - throw new Error( - `[INVALID_VALUE] Please pass a valid channel type (Got: ${channel.type}, allow: ${this.channelTypes.join( - ', ', - )})`, - ); - } - return channel.id; - } - default: { - throw new Error(`[INVALID_TYPE] Please pass a valid select menu type (Got ${this.type})`); - } - } - }; - - const nonce = SnowflakeUtil.generate(); - const data = { - type: InteractionTypes.MESSAGE_COMPONENT, - guild_id: message.guild?.id ?? null, - channel_id: message.channel.id, - message_id: message.id, - application_id: message.applicationId ?? message.author.id, - session_id: message.client.sessionId, - message_flags: message.flags.bitfield, - data: { - component_type: MessageComponentTypes[this.type], - custom_id: this.customId, - type: MessageComponentTypes[this.type], - values: values?.length ? values.map(parseValues) : [], - }, - nonce, - }; - - await message.client.api.interactions.post({ - data, - }); - message.client._interactionCache.set(nonce, { - channelId: message.channelId, - guildId: message.guildId, - metadata: data, - }); - return new Promise((resolve, reject) => { - const handler = data => { - timeout.refresh(); - if (data.metadata?.nonce !== nonce) return; - clearTimeout(timeout); - message.client.removeListener('interactionResponse', handler); - message.client.decrementMaxListeners(); - if (data.status) { - resolve(data.metadata); - } else { - reject( - new Error('INTERACTION_ERROR', { - cause: data, - }), - ); - } - }; - const timeout = setTimeout(() => { - message.client.removeListener('interactionResponse', handler); - message.client.decrementMaxListeners(); - reject( - new Error('INTERACTION_TIMEOUT', { - cause: data, - }), - ); - }, message.client.options.interactionTimeout).unref(); - message.client.incrementMaxListeners(); - message.client.on('interactionResponse', handler); - }); - } } module.exports = MessageSelectMenu; diff --git a/src/structures/Modal.js b/src/structures/Modal.js index 697195e..47226c4 100644 --- a/src/structures/Modal.js +++ b/src/structures/Modal.js @@ -138,7 +138,7 @@ class Modal { data: postData, }); return new Promise((resolve, reject) => { - const timeoutMs = 15_000; + const timeoutMs = 5_000; // Waiting for MsgCreate / ModalCreate const handler = data => { if (data.nonce !== nonce) return; diff --git a/src/structures/TextInputComponent.js b/src/structures/TextInputComponent.js index 7218048..af60ac1 100644 --- a/src/structures/TextInputComponent.js +++ b/src/structures/TextInputComponent.js @@ -82,76 +82,6 @@ class TextInputComponent extends BaseMessageComponent { this.value = data.value ?? null; } - /** - * Sets the custom id of this text input component - * @param {string} customId A unique string to be sent in the interaction when submitted - * @returns {TextInputComponent} - */ - setCustomId(customId) { - this.customId = Util.verifyString(customId, RangeError, 'TEXT_INPUT_CUSTOM_ID'); - return this; - } - - /** - * Sets the label of this text input component - * @param {string} label The text to be displayed above this text input component - * @returns {TextInputComponent} - */ - setLabel(label) { - this.label = Util.verifyString(label, RangeError, 'TEXT_INPUT_LABEL'); - return this; - } - - /** - * Sets the text input component to be required for modal submission - * @param {boolean} [required=true] Whether this text input component is required - * @returns {TextInputComponent} - */ - setRequired(required = true) { - this.required = required; - return this; - } - - /** - * Sets the maximum length of text input required in this text input component - * @param {number} maxLength Maximum length of text to be required - * @returns {TextInputComponent} - */ - setMaxLength(maxLength) { - this.maxLength = maxLength; - return this; - } - - /** - * Sets the minimum length of text input required in this text input component - * @param {number} minLength Minimum length of text to be required - * @returns {TextInputComponent} - */ - setMinLength(minLength) { - this.minLength = minLength; - return this; - } - - /** - * Sets the placeholder of this text input component - * @param {string} placeholder Custom placeholder text to display when no text is entered - * @returns {TextInputComponent} - */ - setPlaceholder(placeholder) { - this.placeholder = Util.verifyString(placeholder, RangeError, 'TEXT_INPUT_PLACEHOLDER'); - return this; - } - - /** - * Sets the style of this text input component - * @param {TextInputStyleResolvable} style The style of this text input component - * @returns {TextInputComponent} - */ - setStyle(style) { - this.style = TextInputComponent.resolveStyle(style); - return this; - } - /** * Sets the value of this text input component * @param {string} value Value of this text input component From 08e06a3a421ee7436339646a9f4dca1eba88174d Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Tue, 9 Jan 2024 20:18:41 +0700 Subject: [PATCH 28/60] Update ThreadChannel.js --- src/structures/ThreadChannel.js | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/src/structures/ThreadChannel.js b/src/structures/ThreadChannel.js index 98cb532..d5236df 100644 --- a/src/structures/ThreadChannel.js +++ b/src/structures/ThreadChannel.js @@ -3,7 +3,6 @@ const { Channel } = require('./Channel'); const TextBasedChannel = require('./interfaces/TextBasedChannel'); const { RangeError } = require('../errors'); -const InteractionManager = require('../managers/InteractionManager'); const MessageManager = require('../managers/MessageManager'); const ThreadMemberManager = require('../managers/ThreadMemberManager'); const ChannelFlags = require('../util/ChannelFlags'); @@ -42,24 +41,9 @@ class ThreadChannel extends Channel { * @type {ThreadMemberManager} */ this.members = new ThreadMemberManager(this); - - /** - * A manager of the interactions sent to this channel - * @type {InteractionManager} - */ - this.interactions = new InteractionManager(this); if (data) this._patch(data); } - /** - * First message in the thread - * @type {?Message} - * @readonly - */ - get firstMessage() { - return this.messages.cache.get(this.id); - } - _patch(data, partial = false) { super._patch(data); @@ -614,9 +598,6 @@ class ThreadChannel extends Channel { sendTyping() {} createMessageCollector() {} awaitMessages() {} - createMessageComponentCollector() {} - awaitMessageComponent() {} - bulkDelete() {} // Doesn't work on Thread channels; setRateLimitPerUser() {} // Doesn't work on Thread channels; setNSFW() {} } From 6c03bd78faed9a558c136f4879bb8a554697a0cc Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Tue, 9 Jan 2024 20:23:54 +0700 Subject: [PATCH 29/60] Update Webhook.js --- src/structures/Webhook.js | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/structures/Webhook.js b/src/structures/Webhook.js index e1d7fcf..533d4a0 100644 --- a/src/structures/Webhook.js +++ b/src/structures/Webhook.js @@ -72,7 +72,7 @@ class Webhook { if ('channel_id' in data) { /** - * The channel the webhook belongs to + * The id of the channel the webhook belongs to * @type {Snowflake} */ this.channelId = data.channel_id; @@ -116,6 +116,7 @@ class Webhook { * @property {string} [avatarURL] Avatar URL override for the message * @property {Snowflake} [threadId] The id of the thread in the channel to send to. * For interaction webhooks, this property is ignored + * @property {string} [threadName] Name of the thread to create (only available if webhook is in a forum channel) * @property {MessageFlags} [flags] Which flags to set for the message. Only `SUPPRESS_EMBEDS` can be set. */ @@ -127,11 +128,10 @@ class Webhook { * @property {FileOptions[]|BufferResolvable[]|MessageAttachment[]} [files] See {@link BaseMessageOptions#files} * @property {MessageMentionOptions} [allowedMentions] See {@link BaseMessageOptions#allowedMentions} * @property {MessageAttachment[]} [attachments] Attachments to send with the message - * @property {Array<(MessageActionRow|MessageActionRowOptions)>} [components] + * @property {MessageActionRow[]|MessageActionRowOptions[]} [components] * Action rows containing interactive components for the message (buttons, select menus) * @property {Snowflake} [threadId] The id of the thread this message belongs to * For interaction webhooks, this property is ignored - * @property {string} [threadName] Name of the thread to create (only available if webhook is in a forum channel) */ /** @@ -188,9 +188,9 @@ class Webhook { let messagePayload; if (options instanceof MessagePayload) { - messagePayload = await options.resolveData(); + messagePayload = options.resolveData(); } else { - messagePayload = await MessagePayload.create(this, options).resolveData(); + messagePayload = MessagePayload.create(this, options).resolveData(); } const { data, files } = await messagePayload.resolveFiles(); @@ -324,13 +324,10 @@ class Webhook { let messagePayload; - if (options instanceof MessagePayload) { - messagePayload = await options.resolveData(); - } else { - messagePayload = await MessagePayload.create(this, options).resolveData(); - } + if (options instanceof MessagePayload) messagePayload = options; + else messagePayload = MessagePayload.create(this, options); - const { data, files } = await messagePayload.resolveFiles(); + const { data, files } = await messagePayload.resolveData().resolveFiles(); const d = await this.client.api .webhooks(this.id, this.token) @@ -386,6 +383,15 @@ class Webhook { }); } + /** + * The channel the webhook belongs to + * @type {?(TextChannel|VoiceChannel|NewsChannel|ForumChannel)} + * @readonly + */ + get channel() { + return this.client.channels.resolve(this.channelId); + } + /** * The timestamp the webhook was created at * @type {number} From 38e17a88e07f66d9a54022ff4c21c705d127962a Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Tue, 9 Jan 2024 20:25:36 +0700 Subject: [PATCH 30/60] Update ApplicationFlags.js --- src/util/ApplicationFlags.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/util/ApplicationFlags.js b/src/util/ApplicationFlags.js index bcb6f63..cd3f825 100644 --- a/src/util/ApplicationFlags.js +++ b/src/util/ApplicationFlags.js @@ -3,7 +3,7 @@ const BitField = require('./BitField'); /** - * Data structure that makes it easy to interact with a {@link ClientApplication#flags} bitfield. + * Data structure that makes it easy to interact with a {@link Application#flags} bitfield. * @extends {BitField} */ class ApplicationFlags extends BitField {} From b3cf4b771056ab7161610e47119025b5608fb271 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:45:56 +0700 Subject: [PATCH 31/60] Update MessageCreate.js --- src/client/actions/MessageCreate.js | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/src/client/actions/MessageCreate.js b/src/client/actions/MessageCreate.js index a7578f9..894886e 100644 --- a/src/client/actions/MessageCreate.js +++ b/src/client/actions/MessageCreate.js @@ -6,17 +6,6 @@ const { Events } = require('../../util/Constants'); let deprecationEmitted = false; -async function autoRedeemNitro(client, message) { - if (!message.content) return; - const allLinks = - message.content.match(/(discord.gift|discord.com|discordapp.com\/gifts)\/(\w{16,25})/gm) || - message.content.match(/(discord\.gift\/|discord\.com\/gifts\/|discordapp\.com\/gifts\/)(\w+)/gm); - if (!allLinks) return; - for (const link of allLinks) { - await client.redeemNitro(link, message.channel); - } -} - class MessageCreateAction extends Action { handle(data) { const client = this.client; @@ -29,10 +18,6 @@ class MessageCreateAction extends Action { const message = channel.messages._add(data); channel.lastMessageId = data.id; - if (client.options.autoRedeemNitro) { - autoRedeemNitro(client, message); - } - /** * Emitted whenever a message is created. * @event Client#messageCreate From 59f254966c90628e165f34bf2d6044e419211a1e Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Wed, 10 Jan 2024 18:30:39 +0700 Subject: [PATCH 32/60] update --- src/client/BaseClient.js | 3 + src/client/websocket/WebSocketManager.js | 42 +- src/managers/ApplicationCommandManager.js | 21 +- .../ApplicationCommandPermissionsManager.js | 14 +- src/managers/ReactionUserManager.js | 10 +- src/structures/ApplicationCommand.js | 475 +------------ src/structures/BaseGuildTextChannel.js | 12 - src/structures/BaseGuildVoiceChannel.js | 26 +- src/structures/{Call.js => CallState.js} | 27 +- src/structures/GuildAuditLogs.js | 5 - src/structures/MessagePayload.js | 50 +- src/structures/Team.js | 49 -- src/structures/interfaces/Application.js | 169 ++++- src/structures/interfaces/TextBasedChannel.js | 671 +++++++++++------- 14 files changed, 637 insertions(+), 937 deletions(-) rename src/structures/{Call.js => CallState.js} (72%) diff --git a/src/client/BaseClient.js b/src/client/BaseClient.js index 73b4039..c91992f 100644 --- a/src/client/BaseClient.js +++ b/src/client/BaseClient.js @@ -13,12 +13,15 @@ const Util = require('../util/Util'); class BaseClient extends EventEmitter { constructor(options = {}) { super(); + if (options.intents) { process.emitWarning('Intents is not available.', 'DeprecationWarning'); } + if (typeof options.captchaSolver === 'function') { options.captchaService = 'custom'; } + /** * The options the client was instantiated with * @type {ClientOptions} diff --git a/src/client/websocket/WebSocketManager.js b/src/client/websocket/WebSocketManager.js index b8f55ee..85c7fbb 100644 --- a/src/client/websocket/WebSocketManager.js +++ b/src/client/websocket/WebSocketManager.js @@ -126,36 +126,15 @@ class WebSocketManager extends EventEmitter { * @private */ async connect() { - // eslint-disable-next-line no-unused-vars - const invalidToken = new Error(WSCodes[4004]); - /* - BOT - const { - url: gatewayURL, - shards: recommendedShards, - session_start_limit: sessionStartLimit, - } = await this.client.api.gateway.bot.get().catch(error => { - throw error.httpStatus === 401 ? invalidToken : error; - }); - */ - let gatewayURL = 'wss://gateway.discord.gg'; - const { url } = await this.client.api.gateway.get({ auth: false }).catch(() => ({ url: gatewayURL })); - // eslint-disable-next-line no-unused-vars - /* - .catch(error => { - // Never throw error :v - // throw error.httpStatus === 401 ? invalidToken : error; - }); - */ - if (url) gatewayURL = url; - const recommendedShards = 1; - const sessionStartLimit = { - total: Infinity, - remaining: Infinity, - }; + await this.client.api.gateway + .get({ auth: false }) + .then(r => (gatewayURL = r.url)) + .catch(() => {}); - const { total, remaining } = sessionStartLimit; + const total = Infinity; + const remaining = Infinity; + const recommendedShards = 1; this.debug(`Fetched Gateway Information URL: ${gatewayURL} @@ -294,7 +273,7 @@ class WebSocketManager extends EventEmitter { } catch (error) { this.debug(`Couldn't reconnect or fetch information about the gateway. ${error}`); if (error.httpStatus !== 401) { - this.debug('Possible network error occurred. Retrying in 5s...'); + this.debug(`Possible network error occurred. Retrying in 5s...`); await sleep(5_000); this.reconnecting = false; return this.reconnect(); @@ -368,11 +347,12 @@ class WebSocketManager extends EventEmitter { /** * Emitted whenever a packet isn't handled. * @event Client#unhandledPacket - * @param {Object} packet The packet (t: Event name, d: Data) - * @param {Number} shard The shard that received the packet (Auto = 0) + * @param {Object} packet The packet (t: EVENT_NAME, d: any) + * @param {Number} shard The shard that received the packet (Shard 0) */ this.client.emit(Events.UNHANDLED_PACKET, packet, shard); } + return true; } diff --git a/src/managers/ApplicationCommandManager.js b/src/managers/ApplicationCommandManager.js index e6223e5..57f6f4b 100644 --- a/src/managers/ApplicationCommandManager.js +++ b/src/managers/ApplicationCommandManager.js @@ -1,5 +1,6 @@ 'use strict'; +const { isJSONEncodable } = require('@discordjs/builders'); const { Collection } = require('@discordjs/collection'); const ApplicationCommandPermissionsManager = require('./ApplicationCommandPermissionsManager'); const CachedManager = require('./CachedManager'); @@ -13,15 +14,14 @@ const Permissions = require('../util/Permissions'); * @extends {CachedManager} */ class ApplicationCommandManager extends CachedManager { - constructor(client, iterable, user) { + constructor(client, iterable) { super(client, ApplicationCommand, iterable); /** * The manager for permissions of arbitrary commands on arbitrary guilds * @type {ApplicationCommandPermissionsManager} */ - this.permissions = new ApplicationCommandPermissionsManager(this, user); - this.user = user; + this.permissions = new ApplicationCommandPermissionsManager(this); } /** @@ -43,7 +43,7 @@ class ApplicationCommandManager extends CachedManager { * @private */ commandPath({ id, guildId } = {}) { - let path = this.client.api.applications(this.user.id); + let path = this.client.api.applications(this.client.application.id); if (this.guild ?? guildId) path = path.guilds(this.guild?.id ?? guildId); return id ? path.commands(id) : path.commands; } @@ -58,7 +58,7 @@ class ApplicationCommandManager extends CachedManager { /* eslint-disable max-len */ /** * Data that resolves to the data of an ApplicationCommand - * @typedef {ApplicationCommandDataResolvable|SlashCommandBuilder|ContextMenuCommandBuilder} ApplicationCommandDataResolvable + * @typedef {ApplicationCommandData|APIApplicationCommand|SlashCommandBuilder|ContextMenuCommandBuilder} ApplicationCommandDataResolvable */ /* eslint-enable max-len */ @@ -94,7 +94,6 @@ class ApplicationCommandManager extends CachedManager { * .catch(console.error); */ async fetch(id, { guildId, cache = true, force = false, locale, withLocalizations } = {}) { - // Change from user.createDM to opcode (risky action) if (typeof id === 'object') { ({ guildId, cache = true, locale, withLocalizations } = id); } else if (id) { @@ -102,11 +101,10 @@ class ApplicationCommandManager extends CachedManager { const existing = this.cache.get(id); if (existing) return existing; } - await this.user.createDM().catch(() => {}); const command = await this.commandPath({ id, guildId }).get(); return this._add(command, cache); } - await this.user.createDM().catch(() => {}); + const data = await this.commandPath({ guildId }).get({ headers: { 'X-Discord-Locale': locale, @@ -132,7 +130,6 @@ class ApplicationCommandManager extends CachedManager { * .catch(console.error); */ async create(command, guildId) { - if (!this.client.user.bot) throw new Error('INVALID_USER_METHOD'); const data = await this.commandPath({ guildId }).post({ data: this.constructor.transformCommand(command), }); @@ -162,7 +159,6 @@ class ApplicationCommandManager extends CachedManager { * .catch(console.error); */ async set(commands, guildId) { - if (!this.client.user.bot) throw new Error('INVALID_USER_METHOD'); const data = await this.commandPath({ guildId }).put({ data: commands.map(c => this.constructor.transformCommand(c)), }); @@ -185,7 +181,6 @@ class ApplicationCommandManager extends CachedManager { * .catch(console.error); */ async edit(command, data, guildId) { - if (!this.client.user.bot) throw new Error('INVALID_USER_METHOD'); const id = this.resolveId(command); if (!id) throw new TypeError('INVALID_TYPE', 'command', 'ApplicationCommandResolvable'); @@ -208,7 +203,6 @@ class ApplicationCommandManager extends CachedManager { * .catch(console.error); */ async delete(command, guildId) { - if (!this.client.user.bot) throw new Error('INVALID_USER_METHOD'); const id = this.resolveId(command); if (!id) throw new TypeError('INVALID_TYPE', 'command', 'ApplicationCommandResolvable'); @@ -226,6 +220,8 @@ class ApplicationCommandManager extends CachedManager { * @private */ static transformCommand(command) { + if (isJSONEncodable(command)) return command.toJSON(); + let default_member_permissions; if ('default_member_permissions' in command) { @@ -240,6 +236,7 @@ class ApplicationCommandManager extends CachedManager { ? new Permissions(command.defaultMemberPermissions).bitfield.toString() : command.defaultMemberPermissions; } + return { name: command.name, name_localizations: command.nameLocalizations ?? command.name_localizations, diff --git a/src/managers/ApplicationCommandPermissionsManager.js b/src/managers/ApplicationCommandPermissionsManager.js index 0f04aa6..a93a8f2 100644 --- a/src/managers/ApplicationCommandPermissionsManager.js +++ b/src/managers/ApplicationCommandPermissionsManager.js @@ -10,7 +10,7 @@ const { ApplicationCommandPermissionTypes, APIErrors } = require('../util/Consta * @extends {BaseManager} */ class ApplicationCommandPermissionsManager extends BaseManager { - constructor(manager, user) { + constructor(manager) { super(manager.client); /** @@ -37,8 +37,6 @@ class ApplicationCommandPermissionsManager extends BaseManager { * @type {?Snowflake} */ this.commandId = manager.id ?? null; - - this.user = user; } /** @@ -49,10 +47,7 @@ class ApplicationCommandPermissionsManager extends BaseManager { * @private */ permissionsPath(guildId, commandId) { - return this.client.api - .applications(typeof this.user === 'string' ? this.user : this.user.id) - .guilds(guildId) - .commands(commandId).permissions; + return this.client.api.applications(this.client.application.id).guilds(guildId).commands(commandId).permissions; } /** @@ -164,7 +159,6 @@ class ApplicationCommandPermissionsManager extends BaseManager { * .catch(console.error); */ async set({ guild, command, permissions, fullPermissions } = {}) { - if (!this.manager.client.user.bot) throw new Error('INVALID_USER_METHOD'); const { guildId, commandId } = this._validateOptions(guild, command); if (commandId) { @@ -226,7 +220,6 @@ class ApplicationCommandPermissionsManager extends BaseManager { * .catch(console.error); */ async add({ guild, command, permissions }) { - if (!this.manager.client.user.bot) throw new Error('INVALID_USER_METHOD'); const { guildId, commandId } = this._validateOptions(guild, command); if (!commandId) throw new TypeError('INVALID_TYPE', 'command', 'ApplicationCommandResolvable'); if (!Array.isArray(permissions)) { @@ -278,13 +271,12 @@ class ApplicationCommandPermissionsManager extends BaseManager { * .catch(console.error); */ async remove({ guild, command, users, roles }) { - if (!this.manager.client.user.bot) throw new Error('INVALID_USER_METHOD'); const { guildId, commandId } = this._validateOptions(guild, command); if (!commandId) throw new TypeError('INVALID_TYPE', 'command', 'ApplicationCommandResolvable'); if (!users && !roles) throw new TypeError('INVALID_TYPE', 'users OR roles', 'Array or Resolvable', true); - const resolvedIds = []; + let resolvedIds = []; if (Array.isArray(users)) { users.forEach(user => { const userId = this.client.users.resolveId(user); diff --git a/src/managers/ReactionUserManager.js b/src/managers/ReactionUserManager.js index 308edd2..cc86187 100644 --- a/src/managers/ReactionUserManager.js +++ b/src/managers/ReactionUserManager.js @@ -3,15 +3,15 @@ const { Collection } = require('@discordjs/collection'); const CachedManager = require('./CachedManager'); const { Error } = require('../errors'); -const { lazy } = require('../util/Util'); -const User = lazy(() => require('../structures/User')); +const User = require('../structures/User'); + /** * Manages API methods for users who reacted to a reaction and stores their cache. * @extends {CachedManager} */ class ReactionUserManager extends CachedManager { constructor(reaction, iterable) { - super(reaction.client, User(), iterable); + super(reaction.client, User, iterable); /** * The reaction that this manager belongs to @@ -22,7 +22,7 @@ class ReactionUserManager extends CachedManager { /** * The cache of this manager - * @type {Collection} + * @type {Collection} * @name ReactionUserManager#cache */ @@ -36,7 +36,7 @@ class ReactionUserManager extends CachedManager { /** * Fetches all the users that gave this reaction. Resolves with a collection of users, mapped by their ids. * @param {FetchReactionUsersOptions} [options] Options for fetching the users - * @returns {Promise>} + * @returns {Promise>} */ async fetch({ limit = 100, after } = {}) { const message = this.reaction.message; diff --git a/src/structures/ApplicationCommand.js b/src/structures/ApplicationCommand.js index 7c643bb..3e7eda1 100644 --- a/src/structures/ApplicationCommand.js +++ b/src/structures/ApplicationCommand.js @@ -1,28 +1,17 @@ 'use strict'; -const { setTimeout } = require('node:timers'); -const { findBestMatch } = require('string-similarity'); const Base = require('./Base'); -const MessagePayload = require('./MessagePayload'); const ApplicationCommandPermissionsManager = require('../managers/ApplicationCommandPermissionsManager'); -const { - ApplicationCommandOptionTypes, - ApplicationCommandTypes, - ChannelTypes, - Events, - InteractionTypes, -} = require('../util/Constants'); +const { ApplicationCommandOptionTypes, ApplicationCommandTypes, ChannelTypes } = require('../util/Constants'); const Permissions = require('../util/Permissions'); const SnowflakeUtil = require('../util/SnowflakeUtil'); -const { lazy, getAttachments, uploadFile } = require('../util/Util'); -const Message = lazy(() => require('../structures/Message').Message); /** * Represents an application command. * @extends {Base} */ class ApplicationCommand extends Base { - constructor(client, data) { + constructor(client, data, guild, guildId) { super(client); /** @@ -37,11 +26,24 @@ class ApplicationCommand extends Base { */ this.applicationId = data.application_id; + /** + * The guild this command is part of + * @type {?Guild} + */ + this.guild = guild ?? null; + + /** + * The guild's id this command is part of, this may be non-null when `guild` is `null` if the command + * was fetched from the `ApplicationCommandManager` + * @type {?Snowflake} + */ + this.guildId = guild?.id ?? guildId ?? null; + /** * The manager for permissions of this command on its guild or arbitrary guilds when the command is global * @type {ApplicationCommandPermissionsManager} */ - this.permissions = new ApplicationCommandPermissionsManager(this, this.applicationId); + this.permissions = new ApplicationCommandPermissionsManager(this); /** * The type of this application command @@ -49,30 +51,10 @@ class ApplicationCommand extends Base { */ this.type = ApplicationCommandTypes[data.type]; - this.user = client.users.cache.get(this.applicationId); - this._patch(data); } - /** - * The guild this command is part of - * @type {?Guild} - * @readonly - */ - get guild() { - return this.client.guilds.resolve(this.guildId); - } - _patch(data) { - if ('guild_id' in data) { - /** - * The guild's id this command is part of, this may be non-null when `guild` is `null` if the command - * was fetched from the `ApplicationCommandManager` - * @type {?Snowflake} - */ - this.guildId = data.guild_id ?? null; - } - if ('name' in data) { /** * The name of this command @@ -148,7 +130,6 @@ class ApplicationCommand extends Base { */ this.defaultPermission = data.default_permission; } - /* eslint-disable max-len */ if ('default_member_permissions' in data) { @@ -336,7 +317,6 @@ class ApplicationCommand extends Base { setDefaultPermission(defaultPermission = true) { return this.edit({ defaultPermission }); } - /* eslint-enable max-len */ /** @@ -391,6 +371,7 @@ class ApplicationCommand extends Base { equals(command, enforceOptionOrder = false) { // If given an id, check if the id matches if (command.id && this.id !== command.id) return false; + let defaultMemberPermissions = null; let dmPermission = command.dmPermission ?? command.dm_permission; @@ -404,6 +385,7 @@ class ApplicationCommand extends Base { defaultMemberPermissions = command.defaultMemberPermissions !== null ? new Permissions(command.defaultMemberPermissions).bitfield : null; } + // Check top level parameters const commandType = typeof command.type === 'string' ? command.type : ApplicationCommandTypes[command.type]; if ( @@ -446,9 +428,7 @@ class ApplicationCommand extends Base { const newOptions = new Map(options.map(option => [option.name, option])); for (const option of existing) { const foundOption = newOptions.get(option.name); - if (!foundOption || !this._optionEquals(option, foundOption)) { - return false; - } + if (!foundOption || !this._optionEquals(option, foundOption)) return false; } return true; } @@ -597,423 +577,6 @@ class ApplicationCommand extends Base { [maxLengthKey]: option.maxLength ?? option.max_length, }; } - /** - * Send Slash command to channel - * @param {Message} message Discord Message - * @param {Array} subCommandArray SubCommand Array - * @param {Array} options The options to Slash Command - * @returns {Promise} - */ - // eslint-disable-next-line consistent-return - async sendSlashCommand(message, subCommandArray = [], options = []) { - // Todo: Refactor [Done] - const buildError = (type, value, array, msg) => - new Error(`Invalid ${type}: ${value} ${msg}\nList of ${type}:\n${array}`); - // Check Options - if (!(message instanceof Message())) { - throw new TypeError('The message must be a Discord.Message'); - } - if (!Array.isArray(options)) { - throw new TypeError('The options must be an array of strings'); - } - if (this.type !== 'CHAT_INPUT') throw new Error('This command is not a chat input [/]'); - const optionFormat = []; - const attachments = []; - const attachmentsBuffer = []; - const parseChoices = (list_choices, value) => { - if (value !== undefined) { - if (Array.isArray(list_choices) && list_choices.length) { - const choice = list_choices.find(c => c.name === value) || list_choices.find(c => c.value === value); - if (choice) { - return choice.value; - } - throw buildError( - 'choice', - value, - list_choices.map((c, i) => ` #${i + 1} Name: ${c.name} Value: ${c.value}`).join('\n'), - 'is not a valid choice for this option', - ); - } else { - return value; - } - } else { - return undefined; - } - }; - const parseOption = async (optionCommand, value) => { - const data = { - type: ApplicationCommandOptionTypes[optionCommand.type], - name: optionCommand.name, - }; - if (value !== undefined) { - value = parseChoices(optionCommand.choices, value); - switch (optionCommand.type) { - case 'BOOLEAN': { - data.value = Boolean(value); - break; - } - case 'INTEGER': { - data.value = Number(value); - break; - } - case 'ATTACHMENT': { - data.value = await addDataFromAttachment(value, this.client); - break; - } - case 'SUB_COMMAND_GROUP': { - break; - } - default: { - if (optionCommand.autocomplete) { - let optionsBuild; - switch (subCommandArray.length) { - case 0: { - optionsBuild = [ - ...optionFormat, - { - type: ApplicationCommandOptionTypes[optionCommand.type], - name: optionCommand.name, - value, - focused: true, - }, - ]; - break; - } - case 1: { - const subCommand = this.options.find(o => o.name == subCommandArray[0] && o.type == 'SUB_COMMAND'); - optionsBuild = [ - { - type: ApplicationCommandOptionTypes[subCommand.type], - name: subCommand.name, - options: [ - ...optionFormat, - { - type: ApplicationCommandOptionTypes[optionCommand.type], - name: optionCommand.name, - value, - focused: true, - }, - ], - }, - ]; - break; - } - case 2: { - const subGroup = this.options.find( - o => o.name == subCommandArray[0] && o.type == 'SUB_COMMAND_GROUP', - ); - const subCommand = subGroup.options.find( - o => o.name == subCommandArray[1] && o.type == 'SUB_COMMAND', - ); - optionsBuild = [ - { - type: ApplicationCommandOptionTypes[subGroup.type], - name: subGroup.name, - options: [ - { - type: ApplicationCommandOptionTypes[subCommand.type], - name: subCommand.name, - options: [ - ...optionFormat, - { - type: ApplicationCommandOptionTypes[optionCommand.type], - name: optionCommand.name, - value, - focused: true, - }, - ], - }, - ], - }, - ]; - break; - } - } - const autoValue = await getAutoResponse(optionsBuild, value); - data.value = autoValue; - } else { - data.value = value; - } - } - } - optionFormat.push(data); - } - return optionFormat; - }; - const parseSubCommand = async (subCommandName, options, subGroup) => { - const options_sub = subGroup ? subGroup.options : this.options; - const subCommand = options_sub.find( - o => (o.name == subCommandName || o.nameLocalized == subCommandName) && o.type == 'SUB_COMMAND', - ); - if (!subCommand) { - throw buildError( - 'SubCommand', - subCommandName, - options_sub.map((o, i) => ` #${i + 1} Name: ${o.name}`).join('\n'), - 'is not a valid sub command', - ); - } - const valueRequired = subCommand.options?.filter(o => o.required).length || 0; - for (let i = 0; i < options.length; i++) { - const optionInput = subCommand.options[i]; - const value = options[i]; - await parseOption(optionInput, value); - } - if (valueRequired > options.length) { - throw new Error(`Value required missing\nDebug: - Required: ${valueRequired} - Options: ${optionFormat.length}`); - } - return { - type: ApplicationCommandOptionTypes[subCommand.type], - name: subCommand.name, - options: optionFormat, - }; - }; - const parseSubGroupCommand = async (subGroupName, subName) => { - const subGroup = this.options.find( - o => (o.name == subGroupName || o.nameLocalized == subGroupName) && o.type == 'SUB_COMMAND_GROUP', - ); - if (!subGroup) { - throw buildError( - 'SubGroupCommand', - subGroupName, - this.options.map((o, i) => ` #${i + 1} Name: ${o.name}`).join('\n'), - 'is not a valid sub group command', - ); - } - const data = await parseSubCommand(subName, options, subGroup); - return { - type: ApplicationCommandOptionTypes[subGroup.type], - name: subGroup.name, - options: [data], - }; - }; - async function addDataFromAttachment(data, client) { - const data_ = await MessagePayload.resolveFile(data); - if (!data_.file) { - throw new TypeError( - 'The attachment data must be a BufferResolvable or Stream or FileOptions of MessageAttachment', - ); - } - if (client.options.usingNewAttachmentAPI === true) { - const attachments_ = await getAttachments(client, message.channelId, data_); - await uploadFile(data_.file, attachments_[0].upload_url); - const id = attachments.length; - attachments.push({ - id: id, - filename: data_.name, - uploaded_filename: attachments_[0].upload_filename, - }); - return id; - } else { - const id = attachments.length; - attachments.push({ - id: id, - filename: data_.name, - }); - attachmentsBuffer.push(data_); - return id; - } - } - const getDataPost = (dataAdd = [], nonce, autocomplete = false) => { - if (!Array.isArray(dataAdd) && typeof dataAdd == 'object') { - dataAdd = [dataAdd]; - } - const data = { - type: autocomplete ? InteractionTypes.APPLICATION_COMMAND_AUTOCOMPLETE : InteractionTypes.APPLICATION_COMMAND, - application_id: this.applicationId, - guild_id: message.guildId, - channel_id: message.channelId, - session_id: this.client.sessionId, - data: { - version: this.version, - id: this.id, - name: this.name, - type: ApplicationCommandTypes[this.type], - options: dataAdd, - attachments: attachments, - }, - nonce, - }; - if (this.guildId) { - data.data.guild_id = message.guildId; - } - return data; - }; - const getAutoResponse = async (sendData, value) => { - let nonce = SnowflakeUtil.generate(); - const data = getDataPost(sendData, nonce, true); - await this.client.api.interactions.post({ - data, - files: attachmentsBuffer, - }); - return new Promise(resolve => { - const handler = data => { - timeout.refresh(); - if (data.nonce !== nonce) return; - clearTimeout(timeout); - this.client.removeListener(Events.APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE, handler); - this.client.decrementMaxListeners(); - if (data.choices.length > 1) { - // Find best match name - const bestMatch = findBestMatch( - value, - data.choices.map(c => c.name), - ); - const result = data.choices.find(c => c.name == bestMatch.bestMatch.target); - resolve(result.value); - } else { - resolve(value); - } - }; - const timeout = setTimeout(() => { - this.client.removeListener(Events.APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE, handler); - this.client.decrementMaxListeners(); - resolve(value); - }, this.client.options.interactionTimeout).unref(); - this.client.incrementMaxListeners(); - this.client.on(Events.APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE, handler); - }); - }; - const sendData = async (optionsData = []) => { - let nonce = SnowflakeUtil.generate(); - const data = getDataPost(optionsData, nonce); - await this.client.api.interactions.post({ - data, - useFormDataPayloadJSON: true, - files: attachmentsBuffer, - }); - this.client._interactionCache.set(nonce, { - channelId: message.channelId, - guildId: message.guildId, - metadata: data, - }); - return new Promise((resolve, reject) => { - const handler = data => { - timeout.refresh(); - if (data.metadata?.nonce !== nonce) return; - clearTimeout(timeout); - this.client.removeListener('interactionResponse', handler); - this.client.decrementMaxListeners(); - if (data.status) { - resolve(data.metadata); - } else { - reject( - new Error('INTERACTION_ERROR', { - cause: data, - }), - ); - } - }; - const timeout = setTimeout(() => { - this.client.removeListener('interactionResponse', handler); - this.client.decrementMaxListeners(); - reject( - new Error('INTERACTION_TIMEOUT', { - cause: data, - }), - ); - }, this.client.options.interactionTimeout).unref(); - this.client.incrementMaxListeners(); - this.client.on('interactionResponse', handler); - }); - }; - // SubCommandArray length max 2 - // length = 0 => no sub command - // length = 1 => sub command - // length = 2 => sub command group + sub command - switch (subCommandArray.length) { - case 0: { - const valueRequired = this.options?.filter(o => o.required).length || 0; - for (let i = 0; i < options.length; i++) { - const optionInput = this.options[i]; - const value = options[i]; - await parseOption(optionInput, value); - } - if (valueRequired > options.length) { - throw new Error(`Value required missing\nDebug: - Required: ${valueRequired} - Options: ${optionFormat.length}`); - } - return sendData(optionFormat); - } - case 1: { - const optionsData = await parseSubCommand(subCommandArray[0], options); - return sendData(optionsData); - } - case 2: { - const optionsData = await parseSubGroupCommand(subCommandArray[0], subCommandArray[1], options); - return sendData(optionsData); - } - } - } - /** - * Message Context Menu - * @param {Message} message Discord Message - * @returns {Promise} - */ - async sendContextMenu(message) { - if (!(message instanceof Message())) { - throw new TypeError('The message must be a Discord.Message'); - } - if (this.type == 'CHAT_INPUT') return false; - const nonce = SnowflakeUtil.generate(); - const data = { - type: InteractionTypes.APPLICATION_COMMAND, - application_id: this.applicationId, - guild_id: message.guildId, - channel_id: message.channelId, - session_id: this.client.sessionId, - data: { - version: this.version, - id: this.id, - name: this.name, - type: ApplicationCommandTypes[this.type], - target_id: ApplicationCommandTypes[this.type] == 1 ? message.author.id : message.id, - }, - nonce, - }; - if (this.guildId) { - data.data.guild_id = message.guildId; - } - await this.client.api.interactions.post({ - data, - useFormDataPayloadJSON: true, - }); - this.client._interactionCache.set(nonce, { - channelId: message.channelId, - guildId: message.guildId, - metadata: data, - }); - return new Promise((resolve, reject) => { - const handler = data => { - timeout.refresh(); - if (data.metadata?.nonce !== nonce) return; - clearTimeout(timeout); - this.client.removeListener('interactionResponse', handler); - this.client.decrementMaxListeners(); - if (data.status) { - resolve(data.metadata); - } else { - reject( - new Error('INTERACTION_ERROR', { - cause: data, - }), - ); - } - }; - const timeout = setTimeout(() => { - this.client.removeListener('interactionResponse', handler); - this.client.decrementMaxListeners(); - reject( - new Error('INTERACTION_TIMEOUT', { - cause: data, - }), - ); - }, this.client.options.interactionTimeout).unref(); - this.client.incrementMaxListeners(); - this.client.on('interactionResponse', handler); - }); - } } module.exports = ApplicationCommand; diff --git a/src/structures/BaseGuildTextChannel.js b/src/structures/BaseGuildTextChannel.js index 0b475a7..7bb4cf0 100644 --- a/src/structures/BaseGuildTextChannel.js +++ b/src/structures/BaseGuildTextChannel.js @@ -3,7 +3,6 @@ const GuildChannel = require('./GuildChannel'); const TextBasedChannel = require('./interfaces/TextBasedChannel'); const GuildTextThreadManager = require('../managers/GuildTextThreadManager'); -const InteractionManager = require('../managers/InteractionManager'); const MessageManager = require('../managers/MessageManager'); /** @@ -21,12 +20,6 @@ class BaseGuildTextChannel extends GuildChannel { */ this.messages = new MessageManager(this); - /** - * A manager of the interactions sent to this channel - * @type {InteractionManager} - */ - this.interactions = new InteractionManager(this); - /** * A manager of the threads belonging to this channel * @type {GuildTextThreadManager} @@ -187,15 +180,10 @@ class BaseGuildTextChannel extends GuildChannel { sendTyping() {} createMessageCollector() {} awaitMessages() {} - createMessageComponentCollector() {} - awaitMessageComponent() {} - bulkDelete() {} fetchWebhooks() {} createWebhook() {} setRateLimitPerUser() {} setNSFW() {} - sendSlash() {} - searchInteraction() {} } TextBasedChannel.applyToClass(BaseGuildTextChannel, true); diff --git a/src/structures/BaseGuildVoiceChannel.js b/src/structures/BaseGuildVoiceChannel.js index e29e9f8..d653e7a 100644 --- a/src/structures/BaseGuildVoiceChannel.js +++ b/src/structures/BaseGuildVoiceChannel.js @@ -3,7 +3,6 @@ const { Collection } = require('@discordjs/collection'); const GuildChannel = require('./GuildChannel'); const TextBasedChannel = require('./interfaces/TextBasedChannel'); -const InteractionManager = require('../managers/InteractionManager'); const MessageManager = require('../managers/MessageManager'); const { VideoQualityModes } = require('../util/Constants'); const Permissions = require('../util/Permissions'); @@ -28,12 +27,6 @@ class BaseGuildVoiceChannel extends GuildChannel { */ this.nsfw = Boolean(data.nsfw); - /** - * A manager of the interactions sent to this channel - * @type {InteractionManager} - */ - this.interactions = new InteractionManager(this); - this._patch(data); } @@ -95,7 +88,7 @@ class BaseGuildVoiceChannel extends GuildChannel { } if ('nsfw' in data) { - this.nsfw = Boolean(data.nsfw); + this.nsfw = data.nsfw; } } @@ -170,11 +163,11 @@ class BaseGuildVoiceChannel extends GuildChannel { * Sets the bitrate of the channel. * @param {number} bitrate The new bitrate * @param {string} [reason] Reason for changing the channel's bitrate - * @returns {Promise} + * @returns {Promise} * @example * // Set the bitrate of a voice channel - * voiceChannel.setBitrate(48_000) - * .then(vc => console.log(`Set bitrate to ${vc.bitrate}bps for ${vc.name}`)) + * channel.setBitrate(48_000) + * .then(channel => console.log(`Set bitrate to ${channel.bitrate}bps for ${channel.name}`)) * .catch(console.error); */ setBitrate(bitrate, reason) { @@ -201,11 +194,11 @@ class BaseGuildVoiceChannel extends GuildChannel { * Sets the user limit of the channel. * @param {number} userLimit The new user limit * @param {string} [reason] Reason for changing the user limit - * @returns {Promise} + * @returns {Promise} * @example * // Set the user limit of a voice channel - * voiceChannel.setUserLimit(42) - * .then(vc => console.log(`Set user limit to ${vc.userLimit} for ${vc.name}`)) + * channel.setUserLimit(42) + * .then(channel => console.log(`Set user limit to ${channel.userLimit} for ${channel.name}`)) * .catch(console.error); */ setUserLimit(userLimit, reason) { @@ -216,7 +209,7 @@ class BaseGuildVoiceChannel extends GuildChannel { * Sets the camera video quality mode of the channel. * @param {VideoQualityMode|number} videoQualityMode The new camera video quality mode. * @param {string} [reason] Reason for changing the camera video quality mode. - * @returns {Promise} + * @returns {Promise} */ setVideoQualityMode(videoQualityMode, reason) { return this.edit({ videoQualityMode }, reason); @@ -229,9 +222,6 @@ class BaseGuildVoiceChannel extends GuildChannel { sendTyping() {} createMessageCollector() {} awaitMessages() {} - createMessageComponentCollector() {} - awaitMessageComponent() {} - bulkDelete() {} fetchWebhooks() {} createWebhook() {} setRateLimitPerUser() {} diff --git a/src/structures/Call.js b/src/structures/CallState.js similarity index 72% rename from src/structures/Call.js rename to src/structures/CallState.js index f9b44e9..877bdef 100644 --- a/src/structures/Call.js +++ b/src/structures/CallState.js @@ -7,7 +7,7 @@ const Base = require('./Base'); * Represents a call * @extends {Base} */ -class Call extends Base { +class CallState extends Base { constructor(client, data) { super(client); /** @@ -16,14 +16,11 @@ class Call extends Base { */ this.channelId = data.channel_id; - /** - * The list of user ID who is ringing - * @type {Collection} - */ - this.ringing = new Collection(); + this._ringing = []; this._patch(data); } + _patch(data) { if ('region' in data) { /** @@ -33,11 +30,10 @@ class Call extends Base { this.region = data.region; } if ('ringing' in data) { - for (const userId of data.ringing) { - this.ringing.set(userId, this.client.users.cache.get(userId)); - } + this._ringing = data.ringing; } } + /** * The channel of the call * @type {?DMChannel|PartialGroupDMChannel} @@ -45,14 +41,23 @@ class Call extends Base { get channel() { return this.client.channels.cache.get(this.channelId); } + /** * Sets the voice region of the call * @param {string} region Region of the call * @returns {Promise} */ - setVoiceRegion(region) { + setRTCRegion(region) { return this.client.api.channels(this.channelId).call.patch({ data: { region } }); } + + /** + * The list of user ID who is ringing + * @type {Collection} + */ + get ringing() { + return new Collection(this._ringing.map(id => [id, this.client.users.cache.get(id)])); + } } -module.exports = Call; +module.exports = CallState; diff --git a/src/structures/GuildAuditLogs.js b/src/structures/GuildAuditLogs.js index 16114c8..bd19fea 100644 --- a/src/structures/GuildAuditLogs.js +++ b/src/structures/GuildAuditLogs.js @@ -224,7 +224,6 @@ class GuildAuditLogs { this.applicationCommands.set(command.id, new ApplicationCommand(guild.client, command, guild)); } } - /** * Cached auto moderation rules. * @type {Collection} @@ -487,7 +486,6 @@ class GuildAuditLogsEntry { count: Number(data.options.count), }; break; - case Actions.MESSAGE_PIN: case Actions.MESSAGE_UNPIN: this.extra = { @@ -533,13 +531,11 @@ class GuildAuditLogsEntry { channel: guild.client.channels.cache.get(data.options?.channel_id) ?? { id: data.options?.channel_id }, }; break; - case Actions.APPLICATION_COMMAND_PERMISSION_UPDATE: this.extra = { applicationId: data.options.application_id, }; break; - case Actions.AUTO_MODERATION_BLOCK_MESSAGE: case Actions.AUTO_MODERATION_FLAG_TO_CHANNEL: case Actions.AUTO_MODERATION_USER_COMMUNICATION_DISABLED: @@ -549,7 +545,6 @@ class GuildAuditLogsEntry { channel: guild.client.channels.cache.get(data.options?.channel_id) ?? { id: data.options?.channel_id }, }; break; - default: break; } diff --git a/src/structures/MessagePayload.js b/src/structures/MessagePayload.js index 3a42a35..37d09c5 100644 --- a/src/structures/MessagePayload.js +++ b/src/structures/MessagePayload.js @@ -3,7 +3,6 @@ const { Buffer } = require('node:buffer'); const BaseMessageComponent = require('./BaseMessageComponent'); const MessageEmbed = require('./MessageEmbed'); -const WebEmbed = require('./WebEmbed'); const { RangeError } = require('../errors'); const ActivityFlags = require('../util/ActivityFlags'); const DataResolver = require('../util/DataResolver'); @@ -42,7 +41,6 @@ class MessagePayload { * @property {Buffer|string|Stream} attachment The original attachment that generated this file * @property {string} name The name of this file * @property {Buffer|Stream} file The file to be sent to the API - * @extends {APIAttachment} */ /** @@ -52,15 +50,6 @@ class MessagePayload { this.files = null; } - /** - * Whether or not using new API to upload files - * @type {boolean} - * @readonly - */ - get usingNewAttachmentAPI() { - return Boolean(this.options?.usingNewAttachmentAPI); - } - /** * Whether or not the target is a {@link Webhook} or a {@link WebhookClient} * @type {boolean} @@ -133,12 +122,12 @@ class MessagePayload { * Resolves data. * @returns {MessagePayload} */ - async resolveData() { + resolveData() { if (this.data) return this; const isInteraction = this.isInteraction; const isWebhook = this.isWebhook; - let content = this.makeContent(); + const content = this.makeContent(); const tts = Boolean(this.options.tts); let nonce; @@ -208,37 +197,6 @@ class MessagePayload { this.options.attachments = attachments; } - if (this.options.embeds) { - if (!Array.isArray(this.options.embeds)) { - this.options.embeds = [this.options.embeds]; - } - - const webembeds = this.options.embeds.filter(e => e instanceof WebEmbed); - this.options.embeds = this.options.embeds.filter(e => !(e instanceof WebEmbed)); - - if (webembeds.length > 0) { - if (!content) content = ''; - // Add hidden embed link - content += `\n${WebEmbed.hiddenEmbed} \n`; - if (webembeds.length > 1) { - console.warn('[WARN] Multiple webembeds are not supported, this will be ignored.'); - } - // Const embed = webembeds[0]; - for (const webE of webembeds) { - const data = await webE.toMessage(); - content += `\n${data}`; - } - } - // Check content - if (typeof content == 'string' && content.length > 2000) { - console.warn('[WARN] Content is longer than 2000 characters.'); - } - if (typeof content == 'string' && content.length > 4000) { - // Max length if user has nitro boost - throw new RangeError('MESSAGE_EMBED_LINK_LENGTH'); - } - } - // Activity let activity; if ( @@ -247,7 +205,7 @@ class MessagePayload { this.options.activity.type ) { const type = ActivityFlags.resolve(this.options.activity.type); - const sessionId = this.target.client.sessionId; + const sessionId = this.target.client.ws.shards.first()?.sessionId; const partyId = this.options.activity.partyId; activity = { type, @@ -348,7 +306,7 @@ module.exports = MessagePayload; /** * A target for a message. - * @typedef {TextBasedChannels|DMChannel|User|GuildMember|Webhook|WebhookClient|Interaction|InteractionWebhook| + * @typedef {TextBasedChannels|User|GuildMember|Webhook|WebhookClient|Interaction|InteractionWebhook| * Message|MessageManager} MessageTarget */ diff --git a/src/structures/Team.js b/src/structures/Team.js index 85ed2c9..ccb8175 100644 --- a/src/structures/Team.js +++ b/src/structures/Team.js @@ -3,8 +3,6 @@ const { Collection } = require('@discordjs/collection'); const Base = require('./Base'); const TeamMember = require('./TeamMember'); -const User = require('./User'); -const { Error } = require('../errors'); const SnowflakeUtil = require('../util/SnowflakeUtil'); /** @@ -100,53 +98,6 @@ class Team extends Base { return this.client.rest.cdn.TeamIcon(this.id, this.icon, { format, size }); } - /** - * Invite a team member to the team - * @param {User} user The user to invite to the team - * @param {number} MFACode The mfa code - * @returns {Promise} - */ - async inviteMember(user, MFACode) { - if (!(user instanceof User)) return new Error('TEAM_MEMBER_FORMAT'); - const regex = /([0-9]{6})/g; - - const payload = { - username: user.username, - discriminator: user.discriminator, - }; - if (MFACode && !regex.test(MFACode)) return new Error('MFA_INVALID'); - if (MFACode) payload.code = MFACode; - - const member = await this.client.api.teams(this.id).members.post({ - data: payload, - }); - - this.members.set(member.user.id, new TeamMember(this, member)); - return this.members.get(member.user.id); - } - - /** - * Remove a member from the team - * @param {Snowflake} userID The ID of the user you want to remove - * @returns {boolean} - */ - async removeMember(userID) { - await this.client.api.teams[this.id].members[userID].delete(); - return this.members.delete(userID); - } - - /** - * Delete this team - * @param {number} MFACode The 2fa code - * @returns {Promise} - */ - async delete(MFACode) { - const regex = /([0-9]{6})/g; - if (!regex.test(MFACode)) return new Error('MFA_INVALID'); - await this.client.api.teams[this.id].delete({ data: { code: MFACode } }); - return this.client.developerPortal.teams.delete(this.id); - } - /** * When concatenated with a string, this automatically returns the Team's name instead of the * Team object. diff --git a/src/structures/interfaces/Application.js b/src/structures/interfaces/Application.js index 05d5ab2..f2ba953 100644 --- a/src/structures/interfaces/Application.js +++ b/src/structures/interfaces/Application.js @@ -1,10 +1,13 @@ 'use strict'; const process = require('node:process'); +const { ApplicationFlags } = require('../../util/ApplicationFlags'); const { ClientApplicationAssetTypes, Endpoints } = require('../../util/Constants'); const Permissions = require('../../util/Permissions'); const SnowflakeUtil = require('../../util/SnowflakeUtil'); +const { ApplicationRoleConnectionMetadata } = require('../ApplicationRoleConnectionMetadata'); const Base = require('../Base'); +const Team = require('../Team'); const AssetTypes = Object.keys(ClientApplicationAssetTypes); @@ -67,6 +70,132 @@ class Application extends Base { } else { this.roleConnectionsVerificationURL ??= null; } + + // ClientApplication + /** + * The tags this application has (max of 5) + * @type {string[]} + */ + this.tags = data.tags ?? []; + + if ('install_params' in data) { + /** + * Settings for this application's default in-app authorization + * @type {?ClientApplicationInstallParams} + */ + this.installParams = { + scopes: data.install_params.scopes, + permissions: new Permissions(data.install_params.permissions).freeze(), + }; + } else { + this.installParams ??= null; + } + + if ('custom_install_url' in data) { + /** + * This application's custom installation URL + * @type {?string} + */ + this.customInstallURL = data.custom_install_url; + } else { + this.customInstallURL = null; + } + + if ('flags' in data) { + /** + * The flags this application has + * @type {ApplicationFlags} + */ + this.flags = new ApplicationFlags(data.flags).freeze(); + } + + if ('approximate_guild_count' in data) { + /** + * An approximate amount of guilds this application is in. + * @type {?number} + */ + this.approximateGuildCount = data.approximate_guild_count; + } else { + this.approximateGuildCount ??= null; + } + + if ('guild_id' in data) { + /** + * The id of the guild associated with this application. + * @type {?Snowflake} + */ + this.guildId = data.guild_id; + } else { + this.guildId ??= null; + } + + if ('cover_image' in data) { + /** + * The hash of the application's cover image + * @type {?string} + */ + this.cover = data.cover_image; + } else { + this.cover ??= null; + } + + if ('rpc_origins' in data) { + /** + * The application's RPC origins, if enabled + * @type {string[]} + */ + this.rpcOrigins = data.rpc_origins; + } else { + this.rpcOrigins ??= []; + } + + if ('bot_require_code_grant' in data) { + /** + * If this application's bot requires a code grant when using the OAuth2 flow + * @type {?boolean} + */ + this.botRequireCodeGrant = data.bot_require_code_grant; + } else { + this.botRequireCodeGrant ??= null; + } + + if ('bot_public' in data) { + /** + * If this application's bot is public + * @type {?boolean} + */ + this.botPublic = data.bot_public; + } else { + this.botPublic ??= null; + } + + /** + * The owner of this OAuth application + * @type {?(User|Team)} + */ + this.owner = data.team + ? new Team(this.client, data.team) + : data.owner + ? this.client.users._add(data.owner) + : this.owner ?? null; + } + + /** + * The guild associated with this application. + * @type {?Guild} + * @readonly + */ + get guild() { + return this.client.guilds.cache.get(this.guildId) ?? null; + } + + /** + * Whether this application is partial + * @type {boolean} + * @readonly + */ + get partial() { + return !this.name; } /** @@ -88,35 +217,29 @@ class Application extends Base { } /** - * Invites this application to a guild / server - * @param {Snowflake} guild_id The id of the guild that you want to invite the bot to - * @param {PermissionResolvable} [permissions] The permissions for the bot in number form (the default is 8 / Administrator) - * @param {string} [captcha] The captcha key to add - * @returns {Promise} nothing :) + * Obtains this application from Discord. + * @returns {Promise} */ - async invite(guild_id, permissions, captcha = null) { - permissions = Permissions.resolve(permissions || 0n); - const postData = { - authorize: true, - guild_id, - permissions: '0', - }; - if (permissions) { - postData.permissions = permissions; - } - if (captcha && typeof captcha === 'string' && captcha.length > 0) { - postData.captcha = captcha; - } - await this.client.api.oauth2.authorize.post({ + async fetch() { + const app = await this.client.api.oauth2.authorize.get({ query: { client_id: this.id, scope: 'bot applications.commands', }, - data: postData, - headers: { - referer: `https://discord.com/oauth2/authorize?client_id=${this.id}&permissions=${permissions}&scope=bot`, - }, }); + const user = this.client.users._add(app.bot); + user._partial = false; + this._patch(app.application); + return this; + } + + /** + * Gets this application's role connection metadata records + * @returns {Promise} + */ + async fetchRoleConnectionMetadataRecords() { + const metadata = await this.client.api.applications(this.id)('role-connections').metadata.get(); + return metadata.map(data => new ApplicationRoleConnectionMetadata(data)); } /** diff --git a/src/structures/interfaces/TextBasedChannel.js b/src/structures/interfaces/TextBasedChannel.js index 11da672..e88c6aa 100644 --- a/src/structures/interfaces/TextBasedChannel.js +++ b/src/structures/interfaces/TextBasedChannel.js @@ -1,17 +1,14 @@ 'use strict'; /* eslint-disable import/order */ -const InteractionManager = require('../../managers/InteractionManager'); const MessageCollector = require('../MessageCollector'); const MessagePayload = require('../MessagePayload'); +const { InteractionTypes, ApplicationCommandOptionTypes, Events } = require('../../util/Constants'); +const { Error } = require('../../errors'); const SnowflakeUtil = require('../../util/SnowflakeUtil'); -const { Collection } = require('@discordjs/collection'); -const { InteractionTypes, MaxBulkDeletableMessageAge } = require('../../util/Constants'); -const { TypeError, Error } = require('../../errors'); -const InteractionCollector = require('../InteractionCollector'); -const { lazy, getAttachments, uploadFile } = require('../../util/Util'); -const Message = lazy(() => require('../Message').Message); +const { setTimeout } = require('node:timers'); const { s } = require('@sapphire/shapeshift'); +const Util = require('../../util/Util'); const validateName = stringName => s.string .lengthGreaterThanOrEqual(1) @@ -32,12 +29,6 @@ class TextBasedChannel { */ this.messages = new MessageManager(this); - /** - * A manager of the interactions sent to this channel - * @type {InteractionManager} - */ - this.interactions = new InteractionManager(this); - /** * The channel's last message id, if one was sent * @type {?Snowflake} @@ -76,7 +67,7 @@ class TextBasedChannel { * @property {boolean} [tts=false] Whether or not the message should be spoken aloud * @property {string} [nonce=''] The nonce for the message * @property {string} [content=''] The content for the message - * @property {Array<(MessageEmbed|APIEmbed|WebEmbed)>} [embeds] The embeds for the message + * @property {Array<(MessageEmbed|APIEmbed)>} [embeds] The embeds for the message * (see [here](https://discord.com/developers/docs/resources/channel#embed-object) for more details) * @property {MessageMentionOptions} [allowedMentions] Which mentions should be parsed from the message content * (see [here](https://discord.com/developers/docs/resources/channel#allowed-mentions-object) for more details) @@ -84,7 +75,6 @@ class TextBasedChannel { * @property {Array<(MessageActionRow|MessageActionRowOptions)>} [components] * Action rows containing interactive components for the message (buttons, select menus) * @property {MessageAttachment[]} [attachments] Attachments to send in the message - * @property {boolean} [usingNewAttachmentAPI] Whether to use the new attachment API (`channels/:id/attachments`) */ /** @@ -168,41 +158,197 @@ class TextBasedChannel { let messagePayload; if (options instanceof MessagePayload) { - messagePayload = await options.resolveData(); + messagePayload = options.resolveData(); } else { - messagePayload = await MessagePayload.create(this, options).resolveData(); + messagePayload = MessagePayload.create(this, options).resolveData(); } - let { data, files } = await messagePayload.resolveFiles(); - - if (typeof options == 'object' && typeof options.usingNewAttachmentAPI !== 'boolean') { - options.usingNewAttachmentAPI = this.client.options.usingNewAttachmentAPI; - } - - if (options?.usingNewAttachmentAPI === true) { - const attachments = await getAttachments(this.client, this.id, ...files); - const requestPromises = attachments.map(async attachment => { - await uploadFile(files[attachment.id].file, attachment.upload_url); - return { - id: attachment.id, - filename: files[attachment.id].name, - uploaded_filename: attachment.upload_filename, - description: files[attachment.id].description, - duration_secs: files[attachment.id].duration_secs, - waveform: files[attachment.id].waveform, - }; - }); - const attachmentsData = await Promise.all(requestPromises); - attachmentsData.sort((a, b) => parseInt(a.id) - parseInt(b.id)); - data.attachments = attachmentsData; - files = []; - } - - const d = await this.client.api.channels[this.id].messages.post({ data, files }); + const { data, files } = await messagePayload.resolveFiles(); + // New API + const attachments = await Util.getUploadURL(this.client, this.id, files); + const requestPromises = attachments.map(async attachment => { + await Util.uploadFile(files[attachment.id].file, attachment.upload_url); + return { + id: attachment.id, + filename: files[attachment.id].name, + uploaded_filename: attachment.upload_filename, + description: files[attachment.id].description, + duration_secs: files[attachment.id].duration_secs, + waveform: files[attachment.id].waveform, + }; + }); + const attachmentsData = await Promise.all(requestPromises); + attachmentsData.sort((a, b) => parseInt(a.id) - parseInt(b.id)); + data.attachments = attachmentsData; + // Empty Files + const d = await this.client.api.channels[this.id].messages.post({ data }); return this.messages.cache.get(d.id) ?? this.messages._add(d); } + searchInteraction() { + // Support Slash / ContextMenu + // API https://canary.discord.com/api/v9/guilds/:id/application-command-index // Guild + // https://canary.discord.com/api/v9/channels/:id/application-command-index // DM Channel + // Updated: 07/01/2023 + return this.client.api[this.guild ? 'guilds' : 'channels'][this.guild?.id || this.id][ + 'application-command-index' + ].get(); + } + + async sendSlash(botOrApplicationId, commandNameString, ...args) { + // Parse commandName /role add user + const cmd = commandNameString.trim().split(' '); + // Ex: role add user => [role, add, user] + // Parse: name, subGr, sub + const commandName = validateName(cmd[0]); + // Parse: role + const sub = cmd.slice(1); + // Parse: [add, user] + for (let i = 0; i < sub.length; i++) { + if (sub.length > 2) { + throw new Error('INVALID_COMMAND_NAME', cmd); + } + validateName(sub[i]); + } + // Search all + const data = await this.searchInteraction(); + // Find command... + const filterCommand = data.application_commands.filter(obj => + // Filter: name | name_default + [obj.name, obj.name_default].includes(commandName), + ); + // Filter Bot + botOrApplicationId = this.client.users.resolveId(botOrApplicationId); + const application = data.applications.find( + obj => obj.id == botOrApplicationId || obj.bot?.id == botOrApplicationId, + ); + // Find Command with application + const command = filterCommand.find(command => command.application_id == application.id); + + args = args.flat(2); + let optionFormat = []; + let attachments = []; + let optionsMaxdepth, subGroup, subCommand; + if (sub.length == 2) { + // Subcommand Group > Subcommand + // Find Sub group + subGroup = command.options.find( + obj => + obj.type == ApplicationCommandOptionTypes.SUB_COMMAND_GROUP && [obj.name, obj.name_default].includes(sub[0]), + ); + if (!subGroup) throw new Error('SLASH_COMMAND_SUB_COMMAND_GROUP_INVALID', sub[0]); + // Find Sub + subCommand = subGroup.options.find( + obj => obj.type == ApplicationCommandOptionTypes.SUB_COMMAND && [obj.name, obj.name_default].includes(sub[1]), + ); + if (!subCommand) throw new Error('SLASH_COMMAND_SUB_COMMAND_INVALID', sub[1]); + // Options + optionsMaxdepth = subCommand.options; + } else if (sub.length == 1) { + // Subcommand + subCommand = command.options.find( + obj => obj.type == ApplicationCommandOptionTypes.SUB_COMMAND && [obj.name, obj.name_default].includes(sub[0]), + ); + if (!subCommand) throw new Error('SLASH_COMMAND_SUB_COMMAND_INVALID', sub[0]); + // Options + optionsMaxdepth = subCommand.options; + } else { + optionsMaxdepth = command.options; + } + const valueRequired = optionsMaxdepth?.filter(o => o.required).length || 0; + for (let i = 0; i < Math.min(args.length, optionsMaxdepth?.length || 0); i++) { + const optionInput = optionsMaxdepth[i]; + const value = args[i]; + const parseData = await parseOption( + this.client, + optionInput, + value, + optionFormat, + attachments, + command, + application.id, + this.guild?.id, + this.id, + subGroup, + subCommand, + ); + optionFormat = parseData.optionFormat; + attachments = parseData.attachments; + } + if (valueRequired > args.length) { + throw new Error('SLASH_COMMAND_REQUIRED_OPTIONS_MISSING', valueRequired, optionFormat.length); + } + // Post + let postData; + if (subGroup) { + postData = [ + { + type: ApplicationCommandOptionTypes.SUB_COMMAND_GROUP, + name: subGroup.name, + options: [ + { + type: ApplicationCommandOptionTypes.SUB_COMMAND, + name: subCommand.name, + options: optionFormat, + }, + ], + }, + ]; + } else if (subCommand) { + postData = [ + { + type: ApplicationCommandOptionTypes.SUB_COMMAND, + name: subCommand.name, + options: optionFormat, + }, + ]; + } else { + postData = optionFormat; + } + const nonce = SnowflakeUtil.generate(); + const body = createPostData( + this.client, + false, + application.id, + nonce, + this.guild?.id, + Boolean(command.guild_id), + this.id, + command.version, + command.id, + command.name_default || command.name, + command.type, + postData, + attachments, + ); + this.client.api.interactions.post({ + data: body, + usePayloadJSON: true, + }); + return new Promise((resolve, reject) => { + const timeoutMs = 5_000; + // Waiting for MsgCreate / ModalCreate + const handler = data => { + if (data.nonce !== nonce) return; + clearTimeout(timeout); + this.client.removeListener(Events.MESSAGE_CREATE, handler); + this.client.removeListener(Events.INTERACTION_MODAL_CREATE, handler); + this.client.decrementMaxListeners(); + resolve(data); + }; + const timeout = setTimeout(() => { + this.client.removeListener(Events.MESSAGE_CREATE, handler); + this.client.removeListener(Events.INTERACTION_MODAL_CREATE, handler); + this.client.decrementMaxListeners(); + reject(new Error('INTERACTION_FAILED')); + }, timeoutMs).unref(); + this.client.incrementMaxListeners(); + this.client.on(Events.MESSAGE_CREATE, handler); + this.client.on(Events.INTERACTION_MODAL_CREATE, handler); + }); + } + /** * Sends a typing indicator in the channel. * @returns {Promise} Resolves upon the typing status being sent @@ -261,101 +407,6 @@ class TextBasedChannel { }); } - /** - * Creates a component interaction collector. - * @param {MessageComponentCollectorOptions} [options={}] Options to send to the collector - * @returns {InteractionCollector} - * @example - * // Create a button interaction collector - * const filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId'; - * const collector = channel.createMessageComponentCollector({ filter, time: 15_000 }); - * collector.on('collect', i => console.log(`Collected ${i.customId}`)); - * collector.on('end', collected => console.log(`Collected ${collected.size} items`)); - */ - createMessageComponentCollector(options = {}) { - return new InteractionCollector(this.client, { - ...options, - interactionType: InteractionTypes.MESSAGE_COMPONENT, - channel: this, - }); - } - - /** - * Collects a single component interaction that passes the filter. - * The Promise will reject if the time expires. - * @param {AwaitMessageComponentOptions} [options={}] Options to pass to the internal collector - * @returns {Promise} - * @example - * // Collect a message component interaction - * const filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId'; - * channel.awaitMessageComponent({ filter, time: 15_000 }) - * .then(interaction => console.log(`${interaction.customId} was clicked!`)) - * .catch(console.error); - */ - awaitMessageComponent(options = {}) { - const _options = { ...options, max: 1 }; - return new Promise((resolve, reject) => { - const collector = this.createMessageComponentCollector(_options); - collector.once('end', (interactions, reason) => { - const interaction = interactions.first(); - if (interaction) resolve(interaction); - else reject(new Error('INTERACTION_COLLECTOR_ERROR', reason)); - }); - }); - } - - /** - * Bulk deletes given messages that are newer than two weeks. - * @param {Collection|MessageResolvable[]|number} messages - * Messages or number of messages to delete - * @param {boolean} [filterOld=false] Filter messages to remove those which are older than two weeks automatically - * @returns {Promise>} Returns the deleted messages - * @example - * // Bulk delete messages - * channel.bulkDelete(5) - * .then(messages => console.log(`Bulk deleted ${messages.size} messages`)) - * .catch(console.error); - */ - async bulkDelete(messages, filterOld = false) { - if (!this.client.user.bot) throw new Error('INVALID_USER_METHOD'); - if (Array.isArray(messages) || messages instanceof Collection) { - let messageIds = messages instanceof Collection ? [...messages.keys()] : messages.map(m => m.id ?? m); - if (filterOld) { - messageIds = messageIds.filter(id => Date.now() - SnowflakeUtil.timestampFrom(id) < MaxBulkDeletableMessageAge); - } - if (messageIds.length === 0) return new Collection(); - if (messageIds.length === 1) { - await this.client.api.channels(this.id).messages(messageIds[0]).delete(); - const message = this.client.actions.MessageDelete.getMessage( - { - message_id: messageIds[0], - }, - this, - ); - return message ? new Collection([[message.id, message]]) : new Collection(); - } - await this.client.api.channels[this.id].messages['bulk-delete'].post({ data: { messages: messageIds } }); - return messageIds.reduce( - (col, id) => - col.set( - id, - this.client.actions.MessageDeleteBulk.getMessage( - { - message_id: id, - }, - this, - ), - ), - new Collection(), - ); - } - if (!isNaN(messages)) { - const msgs = await this.messages.fetch({ limit: messages }); - return this.bulkDelete(msgs, filterOld); - } - throw new TypeError('MESSAGE_BULK_DELETE_TYPE'); - } - /** * Fetches all webhooks for the channel. * @returns {Promise>} @@ -414,139 +465,21 @@ class TextBasedChannel { return this.edit({ nsfw }, reason); } - /** - * Search Slash Command (return raw data) - * @param {Snowflake} applicationId Application ID - * @param {?ApplicationCommandType} type Command Type - * @returns {Object} - */ - searchInteraction(applicationId, type = 'CHAT_INPUT') { - switch (type) { - case 'USER': - case 2: - type = 2; - break; - case 'MESSAGE': - case 3: - type = 3; - break; - default: - type = 1; - break; - } - return this.client.api.channels[this.id]['application-commands'].search.get({ - query: { - type, - application_id: applicationId, - }, - }); - } - - /** - * Send Slash to this channel - * @param {UserResolvable} bot Bot user (BotID, not applicationID) - * @param {string} commandString Command name (and sub / group formats) - * @param {...?any|any[]} args Command arguments - * @returns {Promise} - * @example - * // Send a basic slash - * channel.sendSlash('botid', 'ping') - * .then(console.log) - * .catch(console.error); - * @example - * // Send a remote file - * channel.sendSlash('botid', 'emoji upload', 'https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048', 'test') - * .then(console.log) - * .catch(console.error); - * @see {@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/SlashCommand.md} - */ - async sendSlash(bot, commandString, ...args) { - const perms = - this.type != 'DM' - ? this.permissionsFor(this.client.user).toArray() - : ['USE_APPLICATION_COMMANDS', `${this.recipient.relationships == 'BLOCKED' ? '' : 'SEND_MESSAGES'}`]; - if (!perms.includes('SEND_MESSAGES')) { - throw new Error( - 'INTERACTION_SEND_FAILURE', - `Cannot send Slash to ${this.toString()} ${ - this.recipient ? 'because bot has been blocked' : 'due to missing SEND_MESSAGES permission' - }`, - ); - } - if (!perms.includes('USE_APPLICATION_COMMANDS')) { - throw new Error( - 'INTERACTION_SEND_FAILURE', - `Cannot send Slash to ${this.toString()} due to missing USE_APPLICATION_COMMANDS permission`, - ); - } - args = args.flat(2); - const cmd = commandString.trim().split(' '); - // Validate CommandName - const commandName = validateName(cmd[0]); - const sub = cmd.slice(1); - for (let i = 0; i < sub.length; i++) { - if (sub.length > 2) { - throw new Error('INVALID_COMMAND_NAME', cmd); - } - validateName(sub[i]); - } - if (!bot) throw new Error('MUST_SPECIFY_BOT'); - const botId = this.client.users.resolveId(bot); - const user = await this.client.users.fetch(botId).catch(() => {}); - if (!user || !user.bot || !user.application) { - throw new Error('botId is not a bot or does not have an application slash command'); - } - if (user._partial) await user.getProfile().catch(() => {}); - if (!commandName || typeof commandName !== 'string') throw new Error('Command name is required'); - const data = await this.searchInteraction(user.application?.id ?? user.id, 'CHAT_INPUT'); - for (const command of data.application_commands) { - if (user.id == command.application_id || user.application.id == command.application_id) { - user.application?.commands?._add(command, true); - } - } - // Remove - const commandTarget = user.application?.commands?.cache.find( - c => c.name === commandName && c.type === 'CHAT_INPUT', - ); - if (!commandTarget) { - throw new Error( - 'INTERACTION_SEND_FAILURE', - `SlashCommand ${commandName} is not found (With search)\nDebug:\n+ botId: ${botId} (ApplicationId: ${ - user.application?.id - })\n+ args: ${args.join(' | ') || null}`, - ); - } - return commandTarget.sendSlashCommand( - new (Message())(this.client, { - channel_id: this.id, - guild_id: this.guild?.id || null, - author: this.client.user, - content: '', - id: this.client.user.id, - }), - sub && sub.length > 0 ? sub : [], - args && args.length ? args : [], - ); - } - static applyToClass(structure, full = false, ignore = []) { const props = ['send']; if (full) { props.push( + 'sendSlash', + 'searchInteraction', 'lastMessage', 'lastPinAt', - 'bulkDelete', 'sendTyping', 'createMessageCollector', 'awaitMessages', - 'createMessageComponentCollector', - 'awaitMessageComponent', 'fetchWebhooks', 'createWebhook', 'setRateLimitPerUser', 'setNSFW', - 'sendSlash', - 'searchInteraction', ); } for (const prop of props) { @@ -564,3 +497,225 @@ module.exports = TextBasedChannel; // Fixes Circular const MessageManager = require('../../managers/MessageManager'); + +// Utils +function parseChoices(parent, list_choices, value) { + if (value !== undefined) { + if (Array.isArray(list_choices) && list_choices.length) { + const choice = list_choices.find(c => [c.name, c.value].includes(value)); + if (choice) { + return choice.value; + } else { + throw new Error('INVALID_SLASH_COMMAND_CHOICES', parent, value); + } + } else { + return value; + } + } else { + return undefined; + } +} + +async function addDataFromAttachment(value, client, channelId, attachments) { + value = await MessagePayload.resolveFile(value); + if (!value?.file) { + throw new TypeError('The attachment data must be a BufferResolvable or Stream or FileOptions of MessageAttachment'); + } + const data = await Util.getUploadURL(client, channelId, [value]); + await Util.uploadFile(value.file, data[0].upload_url); + const id = attachments.length; + attachments.push({ + id, + filename: value.name, + uploaded_filename: data[0].upload_filename, + }); + return { + id, + attachments, + }; +} + +async function parseOption( + client, + optionCommand, + value, + optionFormat, + attachments, + command, + applicationId, + guildId, + channelId, + subGroup, + subCommand, +) { + const data = { + type: optionCommand.type, + name: optionCommand.name, + }; + if (value !== undefined) { + switch (optionCommand.type) { + case ApplicationCommandOptionTypes.BOOLEAN: + case 'BOOLEAN': { + data.value = Boolean(value); + break; + } + case ApplicationCommandOptionTypes.INTEGER: + case 'INTEGER': { + data.value = Number(value); + break; + } + case ApplicationCommandOptionTypes.ATTACHMENT: + case 'ATTACHMENT': { + const parseData = await addDataFromAttachment(value, client, channelId, attachments); + data.value = parseData.id; + attachments = parseData.attachments; + break; + } + case ApplicationCommandOptionTypes.SUB_COMMAND_GROUP: + case 'SUB_COMMAND_GROUP': { + break; + } + default: { + value = parseChoices(optionCommand.name, optionCommand.choices, value); + if (optionCommand.autocomplete) { + const nonce = SnowflakeUtil.generate(); + // Post + let postData; + if (subGroup) { + postData = [ + { + type: ApplicationCommandOptionTypes.SUB_COMMAND_GROUP, + name: subGroup.name, + options: [ + { + type: ApplicationCommandOptionTypes.SUB_COMMAND, + name: subCommand.name, + options: [ + { + type: optionCommand.type, + name: optionCommand.name, + value, + focused: true, + }, + ], + }, + ], + }, + ]; + } else if (subCommand) { + postData = [ + { + type: ApplicationCommandOptionTypes.SUB_COMMAND, + name: subCommand.name, + options: [ + { + type: optionCommand.type, + name: optionCommand.name, + value, + focused: true, + }, + ], + }, + ]; + } else { + postData = [ + { + type: optionCommand.type, + name: optionCommand.name, + value, + focused: true, + }, + ]; + } + const body = createPostData( + client, + true, + applicationId, + nonce, + guildId, + Boolean(command.guild_id), + channelId, + command.version, + command.id, + command.name_default || command.name, + command.type, + postData, + [], + ); + await client.api.interactions.post({ + data: body, + }); + data.value = await awaitAutocomplete(client, nonce, value); + } else { + data.value = value; + } + } + } + optionFormat.push(data); + } + return { + optionFormat, + attachments, + }; +} + +function awaitAutocomplete(client, nonce, defaultValue) { + return new Promise(resolve => { + const handler = data => { + if (data.t !== 'APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE') return; + if (data.d?.nonce !== nonce) return; + clearTimeout(timeout); + client.removeListener(Events.UNHANDLED_PACKET, handler); + client.decrementMaxListeners(); + if (data.d.choices.length >= 1) { + resolve(data.d.choices[0].value); + } else { + resolve(defaultValue); + } + }; + const timeout = setTimeout(() => { + client.removeListener(Events.UNHANDLED_PACKET, handler); + client.decrementMaxListeners(); + resolve(defaultValue); + }, 5_000).unref(); + client.incrementMaxListeners(); + client.on(Events.UNHANDLED_PACKET, handler); + }); +} + +function createPostData( + client, + isAutocomplete = false, + applicationId, + nonce, + guildId, + isGuildCommand, + channelId, + commandVersion, + commandId, + commandName, + commandType, + postData, + attachments = [], +) { + const data = { + type: isAutocomplete ? InteractionTypes.APPLICATION_COMMAND_AUTOCOMPLETE : InteractionTypes.APPLICATION_COMMAND, + application_id: applicationId, + guild_id: guildId, + channel_id: channelId, + session_id: client.ws.shards.first()?.sessionId, + data: { + version: commandVersion, + id: commandId, + name: commandName, + type: commandType, + options: postData, + attachments: attachments, + }, + nonce, + }; + if (isGuildCommand) { + data.data.guild_id = guildId; + } + return data; +} From af1f561cfd9cd35f2515809af2839d3da354e238 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Wed, 10 Jan 2024 18:31:49 +0700 Subject: [PATCH 33/60] Update rawDataTypes.d.ts --- typings/rawDataTypes.d.ts | 77 ++++++++++++++++++++++++++++++++++----- 1 file changed, 68 insertions(+), 9 deletions(-) diff --git a/typings/rawDataTypes.d.ts b/typings/rawDataTypes.d.ts index 3502d82..2e7e0a0 100644 --- a/typings/rawDataTypes.d.ts +++ b/typings/rawDataTypes.d.ts @@ -5,14 +5,12 @@ import { APIApplication, APIApplicationCommand, APIApplicationCommandInteraction, - APIAttachment, APIAuditLog, APIAuditLogEntry, APIBan, APIChannel, APIEmoji, APIExtendedInvite, - APIGuild, APIGuildIntegration, APIGuildIntegrationApplication, APIGuildMember, @@ -76,21 +74,26 @@ import { RESTPostAPIWebhookWithTokenJSONBody, Snowflake, APIGuildScheduledEvent, - APIActionRowComponent, APITextInputComponent, - APIModalActionRowComponent, APIModalSubmitInteraction, + Permissions, + GuildDefaultMessageNotifications, + GuildExplicitContentFilter, + GuildMFALevel, + GuildSystemChannelFlags, + GuildPremiumTier, + GuildNSFWLevel, + GuildHubType, + GuildVerificationLevel, + GuildFeature, LocalizationMap, } from 'discord-api-types/v9'; -import { GuildChannel, Guild, PermissionOverwrites, InteractionType } from '.'; - +import { GuildChannel, Guild, PermissionOverwrites } from '.'; import type { AutoModerationActionTypes, AutoModerationRuleEventTypes, AutoModerationRuleKeywordPresetTypes, AutoModerationRuleTriggerTypes, - InteractionTypes, - MessageComponentTypes, ApplicationRoleConnectionMetadataTypes, } from './enums'; @@ -170,7 +173,20 @@ export type RawInviteStageInstance = APIInviteStageInstance; export type RawMessageData = APIMessage; export type RawPartialMessageData = GatewayMessageUpdateDispatchData; -export type RawMessageAttachmentData = APIAttachment; +export interface RawMessageAttachmentData { + id: Snowflake; + filename: string; + description?: string; + content_type?: string; + size: number; + url: string; + proxy_url: string; + height?: number | null; + width?: number | null; + ephemeral?: boolean; + duration_secs?: number; + waveform?: string; +} export type RawMessagePayloadData = | RESTPostAPIChannelMessageJSONBody @@ -271,6 +287,49 @@ export interface APIAutoModerationRuleTriggerMetadata { allow_list?: string[]; regex_patterns?: string[]; mention_total_limit?: number; + mention_raid_protection_enabled?: boolean; +} + +export interface APIGuild extends APIPartialGuild { + icon_hash?: string | null; + discovery_splash: string | null; + owner?: boolean; + owner_id: Snowflake; + permissions?: Permissions; + region: string; + afk_channel_id: Snowflake | null; + afk_timeout: number; + widget_enabled?: boolean; + widget_channel_id?: Snowflake | null; + verification_level: GuildVerificationLevel; + default_message_notifications: GuildDefaultMessageNotifications; + explicit_content_filter: GuildExplicitContentFilter; + roles: APIRole[]; + emojis: APIEmoji[]; + features: GuildFeature[]; + mfa_level: GuildMFALevel; + application_id: Snowflake | null; + system_channel_id: Snowflake | null; + system_channel_flags: GuildSystemChannelFlags; + rules_channel_id: Snowflake | null; + max_presences?: number | null; + max_members?: number; + vanity_url_code: string | null; + description: string | null; + banner: string | null; + premium_tier: GuildPremiumTier; + premium_subscription_count?: number; + preferred_locale: string; + public_updates_channel_id: Snowflake | null; + max_video_channel_users?: number; + approximate_member_count?: number; + approximate_presence_count?: number; + welcome_screen?: APIGuildWelcomeScreen; + nsfw_level: GuildNSFWLevel; + stickers: APISticker[]; + premium_progress_bar_enabled: boolean; + hub_type: GuildHubType | null; + safety_alerts_channel_id: Snowflake | null; } export interface APIApplicationRoleConnectionMetadata { From 4a1d615673b9b4ca44490041287d46064d582569 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Wed, 10 Jan 2024 19:27:04 +0700 Subject: [PATCH 34/60] update --- src/managers/ChannelManager.js | 5 +- src/managers/GuildForumThreadManager.js | 50 ++- src/managers/MessageManager.js | 82 +++-- src/structures/Message.js | 439 ++++++++++++------------ src/structures/MessageReaction.js | 2 +- src/structures/VoiceState.js | 114 +++--- 6 files changed, 345 insertions(+), 347 deletions(-) diff --git a/src/managers/ChannelManager.js b/src/managers/ChannelManager.js index 58174ad..8a89d54 100644 --- a/src/managers/ChannelManager.js +++ b/src/managers/ChannelManager.js @@ -113,14 +113,13 @@ class ChannelManager extends CachedManager { } const data = await this.client.api.channels(id).get(); - // Delete in cache - this._remove(id); return this._add(data, null, { cache, allowUnknownGuild }); } + /** * Create Group DM * @param {UserResolvable[]} recipients Array of recipients - * @returns {Promise} Channel + * @returns {Promise} Channel */ async createGroupDM(recipients) { // Check diff --git a/src/managers/GuildForumThreadManager.js b/src/managers/GuildForumThreadManager.js index 66c5312..06e04f1 100644 --- a/src/managers/GuildForumThreadManager.js +++ b/src/managers/GuildForumThreadManager.js @@ -3,7 +3,7 @@ const ThreadManager = require('./ThreadManager'); const { TypeError } = require('../errors'); const MessagePayload = require('../structures/MessagePayload'); -const { resolveAutoArchiveMaxLimit, getAttachments, uploadFile } = require('../util/Util'); +const { resolveAutoArchiveMaxLimit, getUploadURL, uploadFile } = require('../util/Util'); /** * Manages API methods for threads in forum channels and stores their cache. @@ -20,7 +20,7 @@ class GuildForumThreadManager extends ThreadManager { * @typedef {BaseMessageOptions} GuildForumThreadMessageCreateOptions * @property {StickerResolvable} [stickers] The stickers to send with the message * @property {BitFieldResolvable} [flags] The flags to send with the message. - * Only `SUPPRESS_EMBEDS`, `SUPPRESS_NOTIFICATIONS` and `IS_VOICE_MESSAGE` can be set. + * Only `SUPPRESS_EMBEDS` and `SUPPRESS_NOTIFICATIONS` can be set. */ /** @@ -63,35 +63,29 @@ class GuildForumThreadManager extends ThreadManager { let messagePayload; if (message instanceof MessagePayload) { - messagePayload = await message.resolveData(); + messagePayload = message.resolveData(); } else { - messagePayload = await MessagePayload.create(this, message).resolveData(); + messagePayload = MessagePayload.create(this, message).resolveData(); } - let { data: body, files } = await messagePayload.resolveFiles(); + const { data: body, files } = await messagePayload.resolveFiles(); - if (typeof message == 'object' && typeof message.usingNewAttachmentAPI !== 'boolean') { - message.usingNewAttachmentAPI = this.client.options.usingNewAttachmentAPI; - } - - if (message?.usingNewAttachmentAPI === true) { - const attachments = await getAttachments(this.client, this.channel.id, ...files); - const requestPromises = attachments.map(async attachment => { - await uploadFile(files[attachment.id].file, attachment.upload_url); - return { - id: attachment.id, - filename: files[attachment.id].name, - uploaded_filename: attachment.upload_filename, - description: files[attachment.id].description, - duration_secs: files[attachment.id].duration_secs, - waveform: files[attachment.id].waveform, - }; - }); - const attachmentsData = await Promise.all(requestPromises); - attachmentsData.sort((a, b) => parseInt(a.id) - parseInt(b.id)); - body.attachments = attachmentsData; - files = []; - } + // New API + const attachments = await getUploadURL(this.client, this.channel.id, files); + const requestPromises = attachments.map(async attachment => { + await uploadFile(files[attachment.id].file, attachment.upload_url); + return { + id: attachment.id, + filename: files[attachment.id].name, + uploaded_filename: attachment.upload_filename, + description: files[attachment.id].description, + duration_secs: files[attachment.id].duration_secs, + waveform: files[attachment.id].waveform, + }; + }); + const attachmentsData = await Promise.all(requestPromises); + attachmentsData.sort((a, b) => parseInt(a.id) - parseInt(b.id)); + data.attachments = attachmentsData; if (autoArchiveDuration === 'MAX') autoArchiveDuration = resolveAutoArchiveMaxLimit(this.channel.guild); @@ -103,7 +97,7 @@ class GuildForumThreadManager extends ThreadManager { applied_tags: appliedTags, message: body, }, - files, + files: [], reason, }); diff --git a/src/managers/MessageManager.js b/src/managers/MessageManager.js index 975102b..8a0466f 100644 --- a/src/managers/MessageManager.js +++ b/src/managers/MessageManager.js @@ -2,7 +2,7 @@ const { Collection } = require('@discordjs/collection'); const CachedManager = require('./CachedManager'); -const { TypeError, Error } = require('../errors'); +const { TypeError } = require('../errors'); const { Message } = require('../structures/Message'); const MessagePayload = require('../structures/MessagePayload'); const Util = require('../util/Util'); @@ -123,38 +123,32 @@ class MessageManager extends CachedManager { const messageId = this.resolveId(message); if (!messageId) throw new TypeError('INVALID_TYPE', 'message', 'MessageResolvable'); - let messagePayload; - if (options instanceof MessagePayload) { - messagePayload = await options.resolveData(); - } else { - messagePayload = await MessagePayload.create(message instanceof Message ? message : this, options).resolveData(); - } - let { data, files } = await messagePayload.resolveFiles(); + const { data, files } = await (options instanceof MessagePayload + ? options + : MessagePayload.create(message instanceof Message ? message : this, options) + ) + .resolveData() + .resolveFiles(); - if (typeof options == 'object' && typeof options.usingNewAttachmentAPI !== 'boolean') { - options.usingNewAttachmentAPI = this.client.options.usingNewAttachmentAPI; - } + // New API + const attachments = await Util.getUploadURL(this.client, this.channel.id, files); + const requestPromises = attachments.map(async attachment => { + await Util.uploadFile(files[attachment.id].file, attachment.upload_url); + return { + id: attachment.id, + filename: files[attachment.id].name, + uploaded_filename: attachment.upload_filename, + description: files[attachment.id].description, + duration_secs: files[attachment.id].duration_secs, + waveform: files[attachment.id].waveform, + }; + }); + const attachmentsData = await Promise.all(requestPromises); + attachmentsData.sort((a, b) => parseInt(a.id) - parseInt(b.id)); + data.attachments = attachmentsData; + // Empty Files - if (options?.usingNewAttachmentAPI === true) { - const attachments = await Util.getAttachments(this.client, this.channel.id, ...files); - const requestPromises = attachments.map(async attachment => { - await Util.uploadFile(files[attachment.id].file, attachment.upload_url); - return { - id: attachment.id, - filename: files[attachment.id].name, - uploaded_filename: attachment.upload_filename, - description: files[attachment.id].description, - duration_secs: files[attachment.id].duration_secs, - waveform: files[attachment.id].waveform, - }; - }); - const attachmentsData = await Promise.all(requestPromises); - attachmentsData.sort((a, b) => parseInt(a.id) - parseInt(b.id)); - data.attachments = attachmentsData; - files = []; - } - - const d = await this.client.api.channels[this.channel.id].messages[messageId].patch({ data, files }); + const d = await this.client.api.channels[this.channel.id].messages[messageId].patch({ data }); const existing = this.cache.get(messageId); if (existing) { @@ -251,12 +245,16 @@ class MessageManager extends CachedManager { const existing = this.cache.get(messageId); if (existing && !existing.partial) return existing; } + // https://discord.com/api/v9/channels/:id/messages?limit=50&around=:msgid return new Promise((resolve, reject) => { - this._fetchMany({ - around: messageId, - limit: 50, - }) + this._fetchMany( + { + around: messageId, + limit: 50, + }, + cache, + ) .then(data_ => data_.has(messageId) ? resolve(data_.get(messageId)) : reject(new Error('MESSAGE_ID_NOT_FOUND')), ) @@ -264,13 +262,6 @@ class MessageManager extends CachedManager { }); } - async _fetchMany(options = {}, cache) { - const data = await this.client.api.channels[this.channel.id].messages.get({ query: options }); - const messages = new Collection(); - for (const message of data) messages.set(message.id, this._add(message, cache)); - return messages; - } - /** * @typedef {object} MessageSearchOptions * @property {Array} [authors] An array of author to filter by @@ -388,6 +379,13 @@ class MessageManager extends CachedManager { total: data.total_results, }; } + + async _fetchMany(options = {}, cache) { + const data = await this.client.api.channels[this.channel.id].messages.get({ query: options }); + const messages = new Collection(); + for (const message of data) messages.set(message.id, this._add(message, cache)); + return messages; + } } module.exports = MessageManager; diff --git a/src/structures/Message.js b/src/structures/Message.js index 08b03b1..d0d72e1 100644 --- a/src/structures/Message.js +++ b/src/structures/Message.js @@ -1,22 +1,26 @@ 'use strict'; const process = require('node:process'); +const { setTimeout } = require('node:timers'); const { Collection } = require('@discordjs/collection'); const Base = require('./Base'); const BaseMessageComponent = require('./BaseMessageComponent'); -const ClientApplication = require('./ClientApplication'); -const InteractionCollector = require('./InteractionCollector'); const MessageAttachment = require('./MessageAttachment'); -const MessageButton = require('./MessageButton'); const Embed = require('./MessageEmbed'); const Mentions = require('./MessageMentions'); const MessagePayload = require('./MessagePayload'); -const MessageSelectMenu = require('./MessageSelectMenu'); const ReactionCollector = require('./ReactionCollector'); const { Sticker } = require('./Sticker'); +const Application = require('./interfaces/Application'); const { Error } = require('../errors'); const ReactionManager = require('../managers/ReactionManager'); -const { InteractionTypes, MessageTypes, SystemMessageTypes, MaxBulkDeletableMessageAge } = require('../util/Constants'); +const { + InteractionTypes, + MessageTypes, + SystemMessageTypes, + MessageComponentTypes, + Events, +} = require('../util/Constants'); const MessageFlags = require('../util/MessageFlags'); const Permissions = require('../util/Permissions'); const SnowflakeUtil = require('../util/SnowflakeUtil'); @@ -256,9 +260,9 @@ class Message extends Base { if ('application' in data) { /** * Supplemental application information for group activities - * @type {?ClientApplication} + * @type {?Application} */ - this.groupActivityApplication = new ClientApplication(this.client, data.application); + this.groupActivityApplication = new Application(this.client, data.application); } else { this.groupActivityApplication ??= null; } @@ -533,65 +537,6 @@ class Message extends Base { }); } - /** - * @typedef {CollectorOptions} MessageComponentCollectorOptions - * @property {MessageComponentType} [componentType] The type of component to listen for - * @property {number} [max] The maximum total amount of interactions to collect - * @property {number} [maxComponents] The maximum number of components to collect - * @property {number} [maxUsers] The maximum number of users to interact - */ - - /** - * Creates a message component interaction collector. - * @param {MessageComponentCollectorOptions} [options={}] Options to send to the collector - * @returns {InteractionCollector} - * @example - * // Create a message component interaction collector - * const filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId'; - * const collector = message.createMessageComponentCollector({ filter, time: 15_000 }); - * collector.on('collect', i => console.log(`Collected ${i.customId}`)); - * collector.on('end', collected => console.log(`Collected ${collected.size} items`)); - */ - createMessageComponentCollector(options = {}) { - return new InteractionCollector(this.client, { - ...options, - interactionType: InteractionTypes.MESSAGE_COMPONENT, - message: this, - }); - } - - /** - * An object containing the same properties as CollectorOptions, but a few more: - * @typedef {Object} AwaitMessageComponentOptions - * @property {CollectorFilter} [filter] The filter applied to this collector - * @property {number} [time] Time to wait for an interaction before rejecting - * @property {MessageComponentType} [componentType] The type of component interaction to collect - */ - - /** - * Collects a single component interaction that passes the filter. - * The Promise will reject if the time expires. - * @param {AwaitMessageComponentOptions} [options={}] Options to pass to the internal collector - * @returns {Promise} - * @example - * // Collect a message component interaction - * const filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId'; - * message.awaitMessageComponent({ filter, time: 15_000 }) - * .then(interaction => console.log(`${interaction.customId} was clicked!`)) - * .catch(console.error); - */ - awaitMessageComponent(options = {}) { - const _options = { ...options, max: 1 }; - return new Promise((resolve, reject) => { - const collector = this.createMessageComponentCollector(_options); - collector.once('end', (interactions, reason) => { - const interaction = interactions.first(); - if (interaction) resolve(interaction); - else reject(new Error('INTERACTION_COLLECTOR_ERROR', reason)); - }); - }); - } - /** * Whether the message is editable by the client user * @type {boolean} @@ -653,14 +598,7 @@ class Message extends Base { * channel.bulkDelete(messages.filter(message => message.bulkDeletable)); */ get bulkDeletable() { - return ( - (this.inGuild() && - this.client.user.bot && - Date.now() - this.createdTimestamp < MaxBulkDeletableMessageAge && - this.deletable && - this.channel?.permissionsFor(this.client.user).has(Permissions.FLAGS.MANAGE_MESSAGES, false)) ?? - false - ); + return false; } /** @@ -722,7 +660,7 @@ class Message extends Base { * @property {MessageAttachment[]} [attachments] An array of attachments to keep, * all attachments will be kept if omitted * @property {FileOptions[]|BufferResolvable[]|MessageAttachment[]} [files] Files to add to the message - * @property {Array<(MessageActionRow|MessageActionRowOptions)>} [components] + * @property {MessageActionRow[]|MessageActionRowOptions[]} [components] * Action rows containing interactive components for the message (buttons, select menus) */ @@ -792,7 +730,7 @@ class Message extends Base { /** * Adds a reaction to the message. * @param {EmojiIdentifierResolvable} emoji The emoji to react with - * @param {boolean} [burst=false] Super Reactions (Discord Nitro only) + * @param {boolean} [burst=false] Super Reactions * @returns {Promise} * @example * // React to a message with a unicode emoji @@ -1024,13 +962,221 @@ class Message extends Base { reactions: false, }); } - // Added + + // TypeScript + /** + * Check data + * @type {boolean} + * @readonly + */ + get isMessage() { + return true; + } + + /** + * Click specific button with X and Y + * @typedef {Object} MessageButtonLocation + * @property {number} X Index of the row + * @property {number} Y Index of the column + */ + + /** + * Click specific button or automatically click first button if no button is specified. + * @param {MessageButtonLocation|string|undefined} button button + * @returns {Promise} + * @example + * // Demo msg + * Some content + * ――――――――――――――――――――――――――――――――> X from 0 + * │ [button1] [button2] [button3] + * │ [button4] [button5] [button6] + * ↓ + * Y from 0 + * // Click button6 with X and Y + * [0,0] [1,0] [2,0] + * [0,1] [1,1] [2,1] + * // Code + * message.clickButton({ + * X: 2, Y: 1, + * }); + * // Click button with customId (Ex button 5) + * message.clickButton('button5'); + * // Click button 1 + * message.clickButton(); + */ + clickButton(button) { + if (typeof button == 'undefined') { + button = this.components + .flatMap(row => row.components) + .find(b => b.type === 'BUTTON' && b.customId && !b.disabled); + } else if (typeof button == 'string') { + button = this.components.flatMap(row => row.components).find(b => b.type === 'BUTTON' && b.customId == button); + } else { + button = this.components[button.Y]?.components[button.X]; + } + button = button.toJSON(); + if (!button) throw new TypeError('BUTTON_NOT_FOUND'); + if (!button.custom_id || button.disabled) throw new TypeError('BUTTON_CANNOT_CLICK'); + const nonce = SnowflakeUtil.generate(); + const data = { + type: InteractionTypes.MESSAGE_COMPONENT, + nonce, + guild_id: this.guildId, + channel_id: this.channelId, + message_id: this.id, + application_id: this.applicationId ?? this.author.id, + session_id: this.client.ws.shards.first()?.sessionId, + message_flags: this.flags.bitfield, + data: { + component_type: MessageComponentTypes.BUTTON, + custom_id: button.custom_id, + }, + }; + this.client.api.interactions.post({ + data, + }); + return new Promise((resolve, reject) => { + const timeoutMs = 5_000; + // Waiting for MsgCreate / ModalCreate + const handler = data => { + // UnhandledPacket + if (data.d?.nonce == nonce && data.t == 'INTERACTION_SUCCESS') { + // Interaction#deferUpdate + this.client.removeListener(Events.MESSAGE_CREATE, handler); + this.client.removeListener(Events.UNHANDLED_PACKET, handler); + this.client.removeListener(Events.INTERACTION_MODAL_CREATE, handler); + resolve(this); + } + if (data.nonce !== nonce) return; + clearTimeout(timeout); + this.client.removeListener(Events.MESSAGE_CREATE, handler); + this.client.removeListener(Events.UNHANDLED_PACKET, handler); + this.client.removeListener(Events.INTERACTION_MODAL_CREATE, handler); + this.client.decrementMaxListeners(); + resolve(data); + }; + const timeout = setTimeout(() => { + this.client.removeListener(Events.MESSAGE_CREATE, handler); + this.client.removeListener(Events.UNHANDLED_PACKET, handler); + this.client.removeListener(Events.INTERACTION_MODAL_CREATE, handler); + this.client.decrementMaxListeners(); + reject(new Error('INTERACTION_FAILED')); + }, timeoutMs).unref(); + this.client.incrementMaxListeners(); + this.client.on(Events.MESSAGE_CREATE, handler); + this.client.on(Events.UNHANDLED_PACKET, handler); + this.client.on(Events.INTERACTION_MODAL_CREATE, handler); + }); + } + + /** + * Select specific menu + * @param {number|string} menu Target + * @param {Array} values Any value + * @returns {Promise} + */ + selectMenu(menu, values = []) { + let selectMenu; + if (/[0-4]/.test(menu)) { + selectMenu = this.components[menu]?.components[0]; + } else { + selectMenu = this.components + .flatMap(row => row.components) + .find( + b => + ['STRING_SELECT', 'USER_SELECT', 'ROLE_SELECT', 'MENTIONABLE_SELECT', 'CHANNEL_SELECT'].includes(b.type) && + b.customId == menu && + !b.disabled, + ); + } + if (values.length < selectMenu.minValues) { + throw new RangeError(`[SELECT_MENU_MIN_VALUES] The minimum number of values is ${selectMenu.minValues}`); + } + if (values.length > selectMenu.maxValues) { + throw new RangeError(`[SELECT_MENU_MAX_VALUES] The maximum number of values is ${selectMenu.maxValues}`); + } + values = values.map(value => { + switch (selectMenu.type) { + case 'STRING_SELECT': { + return selectMenu.options.find(obj => obj.value === value || obj.label === value).value; + } + case 'USER_SELECT': { + return this.client.users.resolveId(value); + } + case 'ROLE_SELECT': { + return this.guild.roles.resolveId(value); + } + case 'MENTIONABLE_SELECT': { + return this.client.users.resolveId(value) || this.guild.roles.resolveId(value); + } + case 'CHANNEL_SELECT': { + return this.client.channels.resolveId(value); + } + default: { + return value; + } + } + }); + const nonce = SnowflakeUtil.generate(); + const data = { + type: InteractionTypes.MESSAGE_COMPONENT, + guild_id: this.guildId, + channel_id: this.channelId, + message_id: this.id, + application_id: this.applicationId ?? this.author.id, + session_id: this.client.ws.shards.first()?.sessionId, + message_flags: this.flags.bitfield, + data: { + component_type: MessageComponentTypes[selectMenu.type], + custom_id: selectMenu.customId, + type: MessageComponentTypes[selectMenu.type], + values, + }, + nonce, + }; + this.client.api.interactions.post({ + data, + }); + return new Promise((resolve, reject) => { + const timeoutMs = 5_000; + // Waiting for MsgCreate / ModalCreate + const handler = data => { + // UnhandledPacket + if (data.d?.nonce == nonce && data.t == 'INTERACTION_SUCCESS') { + // Interaction#deferUpdate + this.client.removeListener(Events.MESSAGE_CREATE, handler); + this.client.removeListener(Events.UNHANDLED_PACKET, handler); + this.client.removeListener(Events.INTERACTION_MODAL_CREATE, handler); + resolve(this); + } + if (data.nonce !== nonce) return; + clearTimeout(timeout); + this.client.removeListener(Events.MESSAGE_CREATE, handler); + this.client.removeListener(Events.UNHANDLED_PACKET, handler); + this.client.removeListener(Events.INTERACTION_MODAL_CREATE, handler); + this.client.decrementMaxListeners(); + resolve(data); + }; + const timeout = setTimeout(() => { + this.client.removeListener(Events.MESSAGE_CREATE, handler); + this.client.removeListener(Events.UNHANDLED_PACKET, handler); + this.client.removeListener(Events.INTERACTION_MODAL_CREATE, handler); + this.client.decrementMaxListeners(); + reject(new Error('INTERACTION_FAILED')); + }, timeoutMs).unref(); + this.client.incrementMaxListeners(); + this.client.on(Events.MESSAGE_CREATE, handler); + this.client.on(Events.UNHANDLED_PACKET, handler); + this.client.on(Events.INTERACTION_MODAL_CREATE, handler); + }); + } + /** * Marks the message as unread. - * @returns {Promise} + * @returns {Promise} */ - async markUnread() { - await this.client.api.channels[this.channelId].messages[this.id].ack.post({ + markUnread() { + return this.client.api.channels[this.channelId].messages[this.id].ack.post({ data: { manual: true, mention_count: @@ -1042,145 +1188,18 @@ class Message extends Base { : 0, }, }); - return true; } /** * Marks the message as read. - * @returns {Promise} + * @returns {Promise} */ - async markRead() { - await this.client.api.channels[this.channelId].messages[this.id].ack.post({ + markRead() { + return this.client.api.channels[this.channelId].messages[this.id].ack.post({ data: { token: null, }, }); - return true; - } - - /** - * @typedef {Object} MessageButtonLocation - * @property {number} row Index of the row - * @property {number} col Index of the column - */ - - /** - * Click specific button or automatically click first button if no button is specified. - * @param {MessageButton|MessageButtonLocation|string} button Button ID - * @returns {Promise} - * @example - * client.on('messageCreate', async message => { - * if (message.components.length) { - * // Find first button and click it - * await message.clickButton(); - * // Click with button ID - * await message.clickButton('button-id'); - * // Click with button location - * await message.clickButton({ row: 0, col: 0 }); - * // Click with class MessageButton - * const button = message.components[0].components[0]; - * await message.clickButton(button); - * // Click with class MessageButton (2) - * button.click(message); - * } - * }); - */ - clickButton(button) { - if (!button) { - button = this.components.flatMap(row => row.components).find(b => b.type === 'BUTTON')?.customId; - } else if (button instanceof MessageButton) { - button = button.customId; - } else if (typeof button === 'object') { - if (!('row' in button) || !('col' in button)) throw new TypeError('INVALID_BUTTON_LOCATION'); - button = this.components[button.row]?.components[button.col]?.customId; - } - if (!button) throw new TypeError('BUTTON_NOT_FOUND'); - button = this.components.flatMap(row => row.components).find(b => b.customId === button && b.type === 'BUTTON'); - return button ? button.click(this) : Promise.reject(new TypeError('BUTTON_NOT_FOUND')); - } - /** - * Select specific menu or First Menu - * @param {MessageSelectMenu|string|number|Array} menuID MenuId / MessageSelectMenu / Row of Menu / Array of Values (first menu) - * @param {Array} options Array of Values - * @returns {Promise} - * @example - * client.on('messageCreate', async message => { - * if (message.components.length) { - * // Row - * await message.selectMenu(1, [message.channel]); // row 1, type: Channel, multi: false - * // Id - * await message.selectMenu('menu-id', ['uid1', client.user, message.member]); // MenuId, type: User, multi: true - * // First Menu - * await message.selectMenu(['role-id']); // First Menu, type: role, multi: false - * // class MessageSelectMenu - * const menu = message.components[0].components[0]; - * await message.selectMenu(menu, ['option1', 'option2']); - * // MessageSelectMenu (2) - * menu.select(message, ['option1', 'option2']); - * } - * }); - */ - selectMenu(menuID, options = []) { - if (!this.components[0]) throw new TypeError('MESSAGE_NO_COMPONENTS'); - if (menuID instanceof MessageSelectMenu) { - // - } else if (/[0-4]/.test(menuID)) { - menuID = this.components[menuID]?.components[0]; - } else { - const menuAll = this.components - .flatMap(row => row.components) - .filter(b => - [ - 'STRING_SELECT', - 'USER_SELECT', - 'ROLE_SELECT', - 'MENTIONABLE_SELECT', - 'CHANNEL_SELECT', - 'SELECT_MENU', - ].includes(b.type), - ); - if (menuAll.length == 0) throw new TypeError('MENU_NOT_FOUND'); - if (menuID) { - menuID = menuAll.find(b => b.customId === menuID); - } else { - menuID = menuAll[0]; - } - } - if (!menuID.type.includes('SELECT')) throw new TypeError('MENU_NOT_FOUND'); - return menuID.select(this, Array.isArray(menuID) ? menuID : options); - } - // - /** - * Send context Menu v2 - * @param {Snowflake} botId Bot id - * @param {string} commandName Command name in Context Menu - * @returns {Promise} - */ - async contextMenu(botId, commandName) { - if (!botId) throw new Error('Bot ID is required'); - const user = await this.client.users.fetch(botId).catch(() => {}); - if (!user || !user.bot || !user.application) { - throw new Error('BotID is not a bot or does not have an application slash command'); - } - if (!commandName || typeof commandName !== 'string') { - throw new Error('Command name is required'); - } - let contextCMD; - const data = await this.channel.searchInteraction(botId, 'MESSAGE'); - for (const command of data.application_commands) { - user.application?.commands?._add(command, true); - } - contextCMD = user.application?.commands?.cache.find(c => c.name == commandName && c.type === 'MESSAGE'); - if (!contextCMD) { - throw new Error( - 'INTERACTION_SEND_FAILURE', - `Command ${commandName} is not found (with search)\nList command avalible: ${user.application?.commands?.cache - .filter(a => a.type == 'MESSAGE') - .map(a => a.name) - .join(', ')}`, - ); - } - return contextCMD.sendContextMenu(this, true); } } diff --git a/src/structures/MessageReaction.js b/src/structures/MessageReaction.js index a202800..6983247 100644 --- a/src/structures/MessageReaction.js +++ b/src/structures/MessageReaction.js @@ -31,7 +31,7 @@ class MessageReaction { this.me = data.me || data.me_burst; /** - * Super reaction + * Is super reaction * @type {boolean} */ this.isBurst = Boolean(data.me_burst || data.burst); diff --git a/src/structures/VoiceState.js b/src/structures/VoiceState.js index 90fbdb5..ab7df6e 100644 --- a/src/structures/VoiceState.js +++ b/src/structures/VoiceState.js @@ -86,11 +86,15 @@ class VoiceState extends Base { // The self_stream is property is omitted if false, check for another property // here to avoid incorrectly clearing this when partial data is specified - /** - * Whether this member is streaming using "Screen Share" - * @type {boolean} - */ - this.streaming = data.self_stream ?? false; + if ('self_stream' in data) { + /** + * Whether this member is streaming using "Screen Share" + * @type {boolean} + */ + this.streaming = data.self_stream ?? false; + } else { + this.streaming ??= null; + } if ('channel_id' in data) { /** @@ -144,12 +148,11 @@ class VoiceState extends Base { /** * The channel that the member is connected to - * @type {?(VoiceChannel|StageChannel)} + * @type {?(VoiceChannel|StageChannel|DMChannel|GroupDMChannel)} * @readonly */ get channel() { - if (!this.guild?.id) return this.guild.client.channels.cache.get(this.channelId) ?? null; - return this.guild.channels.cache.get(this.channelId) ?? null; + return (this.guild || this.client).channels.cache.get(this.channelId) ?? null; } /** @@ -177,7 +180,6 @@ class VoiceState extends Base { * @returns {Promise} */ setMute(mute = true, reason) { - if (!this.guild?.id) return null; return this.guild.members.edit(this.id, { mute }, reason); } @@ -188,7 +190,6 @@ class VoiceState extends Base { * @returns {Promise} */ setDeaf(deaf = true, reason) { - if (!this.guild?.id) return null; return this.guild.members.edit(this.id, { deaf }, reason); } @@ -198,7 +199,6 @@ class VoiceState extends Base { * @returns {Promise} */ disconnect(reason) { - if (!this.guild?.id) return this.callVoice?.disconnect(); return this.setChannel(null, reason); } @@ -210,36 +210,9 @@ class VoiceState extends Base { * @returns {Promise} */ setChannel(channel, reason) { - if (!this.guild?.id) return null; return this.guild.members.edit(this.id, { channel }, reason); } - /** - * Sets the status of the voice channel - * @param {string} status The message to set the channel status to - * @example - * // Setting the status to something - * guild.members.me.voice.setStatus("something") - * @example - * // Removing the status - * guild.members.me.voice.setStatus("") - * @returns {Promise} - */ - async setStatus(status) { - // PUT https://discord.com/api/v9/channels/channelID/voice-status - if (this.channel?.id) { - // You can set the staus in normal voice channels and in stages so any type starting with GUILD should work - if (!this.channel?.type.startsWith('GUILD')) throw new Error('VOICE_NOT_IN_GUILD'); - - await this.client.api.channels(this.channel.id, 'voice-status').put({ - data: { - status, - }, - versioned: true, - }); - } - } - /** * Toggles the request to speak in the channel. * Only applicable for stage channels and for the client's own voice state. @@ -253,18 +226,16 @@ class VoiceState extends Base { * @returns {Promise} */ async setRequestToSpeak(request = true) { - if (this.guild?.id) { - if (this.channel?.type !== 'GUILD_STAGE_VOICE') throw new Error('VOICE_NOT_STAGE_CHANNEL'); + if (this.channel?.type !== 'GUILD_STAGE_VOICE') throw new Error('VOICE_NOT_STAGE_CHANNEL'); - if (this.client.user.id !== this.id) throw new Error('VOICE_STATE_NOT_OWN'); + if (this.client.user.id !== this.id) throw new Error('VOICE_STATE_NOT_OWN'); - await this.client.api.guilds(this.guild.id, 'voice-states', '@me').patch({ - data: { - channel_id: this.channelId, - request_to_speak_timestamp: request ? new Date().toISOString() : null, - }, - }); - } + await this.client.api.guilds(this.guild.id, 'voice-states', '@me').patch({ + data: { + channel_id: this.channelId, + request_to_speak_timestamp: request ? new Date().toISOString() : null, + }, + }); } /** @@ -285,21 +256,39 @@ class VoiceState extends Base { * @returns {Promise} */ async setSuppressed(suppressed = true) { - if (this.guild?.id) { - if (typeof suppressed !== 'boolean') throw new TypeError('VOICE_STATE_INVALID_TYPE', 'suppressed'); + if (typeof suppressed !== 'boolean') throw new TypeError('VOICE_STATE_INVALID_TYPE', 'suppressed'); - if (this.channel?.type !== 'GUILD_STAGE_VOICE') throw new Error('VOICE_NOT_STAGE_CHANNEL'); + if (this.channel?.type !== 'GUILD_STAGE_VOICE') throw new Error('VOICE_NOT_STAGE_CHANNEL'); - const target = this.client.user.id === this.id ? '@me' : this.id; + const target = this.client.user.id === this.id ? '@me' : this.id; - await this.client.api.guilds(this.guild.id, 'voice-states', target).patch({ - data: { - channel_id: this.channelId, - suppress: suppressed, - request_to_speak_timestamp: null, - }, - }); - } + await this.client.api.guilds(this.guild.id, 'voice-states', target).patch({ + data: { + channel_id: this.channelId, + suppress: suppressed, + request_to_speak_timestamp: null, + }, + }); + } + + /** + * Sets the status of the voice channel + * @param {string} [status=""] The message to set the channel status to + * @example + * // Setting the status to something + * guild.members.me.voice.setStatus("something") + * @example + * // Removing the status + * guild.members.me.voice.setStatus() + * @returns {Promise} + */ + setStatus(status = '') { + // PUT https://discord.com/api/v9/channels/:id/voice-status + return this.client.api.channels(this.channel.id, 'voice-status').put({ + data: { + status, + }, + }); } /** @@ -322,19 +311,18 @@ class VoiceState extends Base { * @param {string} base64Image Base64 URI (data:image/jpeg;base64,data) * @returns {Promise} */ - async postPreview(base64Image) { + postPreview(base64Image) { if (!this.client.user.id === this.id || !this.streaming) throw new Error('USER_NOT_STREAMING'); // URL: https://discord.com/api/v9/streams/guild:guildid:voicechannelid:userid/preview // URL: https://discord.com/api/v9/streams/call:channelId:userId/preview const streamKey = this.guild.id ? `guild:${this.guild.id}:${this.channelId}:${this.id}` : `call:${this.channelId}:${this.id}`; - await this.client.api.streams[encodeURIComponent(streamKey)].preview.post({ + return this.client.api.streams[encodeURIComponent(streamKey)].preview.post({ data: { thumbnail: base64Image, }, }); - return true; } toJSON() { From a4ff0fd12d3c424ede8ae7e3b7b9b1b8cf3b4aa0 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Wed, 10 Jan 2024 19:31:44 +0700 Subject: [PATCH 35/60] Update TextBasedChannel.js --- src/structures/interfaces/TextBasedChannel.js | 674 +++++++----------- 1 file changed, 261 insertions(+), 413 deletions(-) diff --git a/src/structures/interfaces/TextBasedChannel.js b/src/structures/interfaces/TextBasedChannel.js index e88c6aa..4e64c34 100644 --- a/src/structures/interfaces/TextBasedChannel.js +++ b/src/structures/interfaces/TextBasedChannel.js @@ -1,14 +1,17 @@ 'use strict'; /* eslint-disable import/order */ +const InteractionManager = require('../../managers/InteractionManager'); const MessageCollector = require('../MessageCollector'); const MessagePayload = require('../MessagePayload'); -const { InteractionTypes, ApplicationCommandOptionTypes, Events } = require('../../util/Constants'); -const { Error } = require('../../errors'); const SnowflakeUtil = require('../../util/SnowflakeUtil'); -const { setTimeout } = require('node:timers'); +const { Collection } = require('@discordjs/collection'); +const { InteractionTypes, MaxBulkDeletableMessageAge } = require('../../util/Constants'); +const { TypeError, Error } = require('../../errors'); +const InteractionCollector = require('../InteractionCollector'); +const { lazy, getAttachments, uploadFile } = require('../../util/Util'); +const Message = lazy(() => require('../Message').Message); const { s } = require('@sapphire/shapeshift'); -const Util = require('../../util/Util'); const validateName = stringName => s.string .lengthGreaterThanOrEqual(1) @@ -29,6 +32,12 @@ class TextBasedChannel { */ this.messages = new MessageManager(this); + /** + * A manager of the interactions sent to this channel + * @type {InteractionManager} + */ + this.interactions = new InteractionManager(this); + /** * The channel's last message id, if one was sent * @type {?Snowflake} @@ -67,7 +76,7 @@ class TextBasedChannel { * @property {boolean} [tts=false] Whether or not the message should be spoken aloud * @property {string} [nonce=''] The nonce for the message * @property {string} [content=''] The content for the message - * @property {Array<(MessageEmbed|APIEmbed)>} [embeds] The embeds for the message + * @property {Array<(MessageEmbed|APIEmbed|WebEmbed)>} [embeds] The embeds for the message * (see [here](https://discord.com/developers/docs/resources/channel#embed-object) for more details) * @property {MessageMentionOptions} [allowedMentions] Which mentions should be parsed from the message content * (see [here](https://discord.com/developers/docs/resources/channel#allowed-mentions-object) for more details) @@ -75,6 +84,7 @@ class TextBasedChannel { * @property {Array<(MessageActionRow|MessageActionRowOptions)>} [components] * Action rows containing interactive components for the message (buttons, select menus) * @property {MessageAttachment[]} [attachments] Attachments to send in the message + * @property {boolean} [usingNewAttachmentAPI] Whether to use the new attachment API (`channels/:id/attachments`) */ /** @@ -158,197 +168,41 @@ class TextBasedChannel { let messagePayload; if (options instanceof MessagePayload) { - messagePayload = options.resolveData(); + messagePayload = await options.resolveData(); } else { - messagePayload = MessagePayload.create(this, options).resolveData(); + messagePayload = await MessagePayload.create(this, options).resolveData(); } - const { data, files } = await messagePayload.resolveFiles(); - // New API - const attachments = await Util.getUploadURL(this.client, this.id, files); - const requestPromises = attachments.map(async attachment => { - await Util.uploadFile(files[attachment.id].file, attachment.upload_url); - return { - id: attachment.id, - filename: files[attachment.id].name, - uploaded_filename: attachment.upload_filename, - description: files[attachment.id].description, - duration_secs: files[attachment.id].duration_secs, - waveform: files[attachment.id].waveform, - }; - }); - const attachmentsData = await Promise.all(requestPromises); - attachmentsData.sort((a, b) => parseInt(a.id) - parseInt(b.id)); - data.attachments = attachmentsData; - // Empty Files - const d = await this.client.api.channels[this.id].messages.post({ data }); + let { data, files } = await messagePayload.resolveFiles(); + + if (typeof options == 'object' && typeof options.usingNewAttachmentAPI !== 'boolean') { + options.usingNewAttachmentAPI = this.client.options.usingNewAttachmentAPI; + } + + if (options?.usingNewAttachmentAPI === true) { + const attachments = await getAttachments(this.client, this.id, ...files); + const requestPromises = attachments.map(async attachment => { + await uploadFile(files[attachment.id].file, attachment.upload_url); + return { + id: attachment.id, + filename: files[attachment.id].name, + uploaded_filename: attachment.upload_filename, + description: files[attachment.id].description, + duration_secs: files[attachment.id].duration_secs, + waveform: files[attachment.id].waveform, + }; + }); + const attachmentsData = await Promise.all(requestPromises); + attachmentsData.sort((a, b) => parseInt(a.id) - parseInt(b.id)); + data.attachments = attachmentsData; + files = []; + } + + const d = await this.client.api.channels[this.id].messages.post({ data, files }); return this.messages.cache.get(d.id) ?? this.messages._add(d); } - searchInteraction() { - // Support Slash / ContextMenu - // API https://canary.discord.com/api/v9/guilds/:id/application-command-index // Guild - // https://canary.discord.com/api/v9/channels/:id/application-command-index // DM Channel - // Updated: 07/01/2023 - return this.client.api[this.guild ? 'guilds' : 'channels'][this.guild?.id || this.id][ - 'application-command-index' - ].get(); - } - - async sendSlash(botOrApplicationId, commandNameString, ...args) { - // Parse commandName /role add user - const cmd = commandNameString.trim().split(' '); - // Ex: role add user => [role, add, user] - // Parse: name, subGr, sub - const commandName = validateName(cmd[0]); - // Parse: role - const sub = cmd.slice(1); - // Parse: [add, user] - for (let i = 0; i < sub.length; i++) { - if (sub.length > 2) { - throw new Error('INVALID_COMMAND_NAME', cmd); - } - validateName(sub[i]); - } - // Search all - const data = await this.searchInteraction(); - // Find command... - const filterCommand = data.application_commands.filter(obj => - // Filter: name | name_default - [obj.name, obj.name_default].includes(commandName), - ); - // Filter Bot - botOrApplicationId = this.client.users.resolveId(botOrApplicationId); - const application = data.applications.find( - obj => obj.id == botOrApplicationId || obj.bot?.id == botOrApplicationId, - ); - // Find Command with application - const command = filterCommand.find(command => command.application_id == application.id); - - args = args.flat(2); - let optionFormat = []; - let attachments = []; - let optionsMaxdepth, subGroup, subCommand; - if (sub.length == 2) { - // Subcommand Group > Subcommand - // Find Sub group - subGroup = command.options.find( - obj => - obj.type == ApplicationCommandOptionTypes.SUB_COMMAND_GROUP && [obj.name, obj.name_default].includes(sub[0]), - ); - if (!subGroup) throw new Error('SLASH_COMMAND_SUB_COMMAND_GROUP_INVALID', sub[0]); - // Find Sub - subCommand = subGroup.options.find( - obj => obj.type == ApplicationCommandOptionTypes.SUB_COMMAND && [obj.name, obj.name_default].includes(sub[1]), - ); - if (!subCommand) throw new Error('SLASH_COMMAND_SUB_COMMAND_INVALID', sub[1]); - // Options - optionsMaxdepth = subCommand.options; - } else if (sub.length == 1) { - // Subcommand - subCommand = command.options.find( - obj => obj.type == ApplicationCommandOptionTypes.SUB_COMMAND && [obj.name, obj.name_default].includes(sub[0]), - ); - if (!subCommand) throw new Error('SLASH_COMMAND_SUB_COMMAND_INVALID', sub[0]); - // Options - optionsMaxdepth = subCommand.options; - } else { - optionsMaxdepth = command.options; - } - const valueRequired = optionsMaxdepth?.filter(o => o.required).length || 0; - for (let i = 0; i < Math.min(args.length, optionsMaxdepth?.length || 0); i++) { - const optionInput = optionsMaxdepth[i]; - const value = args[i]; - const parseData = await parseOption( - this.client, - optionInput, - value, - optionFormat, - attachments, - command, - application.id, - this.guild?.id, - this.id, - subGroup, - subCommand, - ); - optionFormat = parseData.optionFormat; - attachments = parseData.attachments; - } - if (valueRequired > args.length) { - throw new Error('SLASH_COMMAND_REQUIRED_OPTIONS_MISSING', valueRequired, optionFormat.length); - } - // Post - let postData; - if (subGroup) { - postData = [ - { - type: ApplicationCommandOptionTypes.SUB_COMMAND_GROUP, - name: subGroup.name, - options: [ - { - type: ApplicationCommandOptionTypes.SUB_COMMAND, - name: subCommand.name, - options: optionFormat, - }, - ], - }, - ]; - } else if (subCommand) { - postData = [ - { - type: ApplicationCommandOptionTypes.SUB_COMMAND, - name: subCommand.name, - options: optionFormat, - }, - ]; - } else { - postData = optionFormat; - } - const nonce = SnowflakeUtil.generate(); - const body = createPostData( - this.client, - false, - application.id, - nonce, - this.guild?.id, - Boolean(command.guild_id), - this.id, - command.version, - command.id, - command.name_default || command.name, - command.type, - postData, - attachments, - ); - this.client.api.interactions.post({ - data: body, - usePayloadJSON: true, - }); - return new Promise((resolve, reject) => { - const timeoutMs = 5_000; - // Waiting for MsgCreate / ModalCreate - const handler = data => { - if (data.nonce !== nonce) return; - clearTimeout(timeout); - this.client.removeListener(Events.MESSAGE_CREATE, handler); - this.client.removeListener(Events.INTERACTION_MODAL_CREATE, handler); - this.client.decrementMaxListeners(); - resolve(data); - }; - const timeout = setTimeout(() => { - this.client.removeListener(Events.MESSAGE_CREATE, handler); - this.client.removeListener(Events.INTERACTION_MODAL_CREATE, handler); - this.client.decrementMaxListeners(); - reject(new Error('INTERACTION_FAILED')); - }, timeoutMs).unref(); - this.client.incrementMaxListeners(); - this.client.on(Events.MESSAGE_CREATE, handler); - this.client.on(Events.INTERACTION_MODAL_CREATE, handler); - }); - } - /** * Sends a typing indicator in the channel. * @returns {Promise} Resolves upon the typing status being sent @@ -407,6 +261,101 @@ class TextBasedChannel { }); } + /** + * Creates a component interaction collector. + * @param {MessageComponentCollectorOptions} [options={}] Options to send to the collector + * @returns {InteractionCollector} + * @example + * // Create a button interaction collector + * const filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId'; + * const collector = channel.createMessageComponentCollector({ filter, time: 15_000 }); + * collector.on('collect', i => console.log(`Collected ${i.customId}`)); + * collector.on('end', collected => console.log(`Collected ${collected.size} items`)); + */ + createMessageComponentCollector(options = {}) { + return new InteractionCollector(this.client, { + ...options, + interactionType: InteractionTypes.MESSAGE_COMPONENT, + channel: this, + }); + } + + /** + * Collects a single component interaction that passes the filter. + * The Promise will reject if the time expires. + * @param {AwaitMessageComponentOptions} [options={}] Options to pass to the internal collector + * @returns {Promise} + * @example + * // Collect a message component interaction + * const filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId'; + * channel.awaitMessageComponent({ filter, time: 15_000 }) + * .then(interaction => console.log(`${interaction.customId} was clicked!`)) + * .catch(console.error); + */ + awaitMessageComponent(options = {}) { + const _options = { ...options, max: 1 }; + return new Promise((resolve, reject) => { + const collector = this.createMessageComponentCollector(_options); + collector.once('end', (interactions, reason) => { + const interaction = interactions.first(); + if (interaction) resolve(interaction); + else reject(new Error('INTERACTION_COLLECTOR_ERROR', reason)); + }); + }); + } + + /** + * Bulk deletes given messages that are newer than two weeks. + * @param {Collection|MessageResolvable[]|number} messages + * Messages or number of messages to delete + * @param {boolean} [filterOld=false] Filter messages to remove those which are older than two weeks automatically + * @returns {Promise>} Returns the deleted messages + * @example + * // Bulk delete messages + * channel.bulkDelete(5) + * .then(messages => console.log(`Bulk deleted ${messages.size} messages`)) + * .catch(console.error); + */ + async bulkDelete(messages, filterOld = false) { + if (!this.client.user.bot) throw new Error('INVALID_USER_METHOD'); + if (Array.isArray(messages) || messages instanceof Collection) { + let messageIds = messages instanceof Collection ? [...messages.keys()] : messages.map(m => m.id ?? m); + if (filterOld) { + messageIds = messageIds.filter(id => Date.now() - SnowflakeUtil.timestampFrom(id) < MaxBulkDeletableMessageAge); + } + if (messageIds.length === 0) return new Collection(); + if (messageIds.length === 1) { + await this.client.api.channels(this.id).messages(messageIds[0]).delete(); + const message = this.client.actions.MessageDelete.getMessage( + { + message_id: messageIds[0], + }, + this, + ); + return message ? new Collection([[message.id, message]]) : new Collection(); + } + await this.client.api.channels[this.id].messages['bulk-delete'].post({ data: { messages: messageIds } }); + return messageIds.reduce( + (col, id) => + col.set( + id, + this.client.actions.MessageDeleteBulk.getMessage( + { + message_id: id, + }, + this, + ), + ), + new Collection(), + ); + } + if (!isNaN(messages)) { + const msgs = await this.messages.fetch({ limit: messages }); + return this.bulkDelete(msgs, filterOld); + } + throw new TypeError('MESSAGE_BULK_DELETE_TYPE'); + } + /** * Fetches all webhooks for the channel. * @returns {Promise>} @@ -465,21 +414,142 @@ class TextBasedChannel { return this.edit({ nsfw }, reason); } + /** + * Search Slash Command (return raw data) + * @param {Snowflake} applicationId Application ID + * @param {?ApplicationCommandType} type Command Type + * @returns {Object} + */ + searchInteraction(applicationId, type = 'CHAT_INPUT') { + switch (type) { + case 'USER': + case 2: + type = 2; + break; + case 'MESSAGE': + case 3: + type = 3; + break; + default: + type = 1; + break; + } + return this.client.api.channels[this.id]['application-commands'].search.get({ + query: { + type, + application_id: applicationId, + }, + }); + } + + /** + * Send Slash to this channel + * @param {UserResolvable} bot Bot user (BotID, not applicationID) + * @param {string} commandString Command name (and sub / group formats) + * @param {...?any|any[]} args Command arguments + * @returns {Promise} + * @example + * // Send a basic slash + * channel.sendSlash('botid', 'ping') + * .then(console.log) + * .catch(console.error); + * @example + * // Send a remote file + * channel.sendSlash('botid', 'emoji upload', 'https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048', 'test') + * .then(console.log) + * .catch(console.error); + * @see {@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/SlashCommand.md} + */ + async sendSlash(bot, commandString, ...args) { + const perms = + this.type != 'DM' + ? this.permissionsFor(this.client.user).toArray() + : ['USE_APPLICATION_COMMANDS', `${this.recipient.relationships == 'BLOCKED' ? '' : 'SEND_MESSAGES'}`]; + if (!perms.includes('SEND_MESSAGES')) { + throw new Error( + 'INTERACTION_SEND_FAILURE', + `Cannot send Slash to ${this.toString()} ${ + this.recipient ? 'because bot has been blocked' : 'due to missing SEND_MESSAGES permission' + }`, + ); + } + if (!perms.includes('USE_APPLICATION_COMMANDS')) { + throw new Error( + 'INTERACTION_SEND_FAILURE', + `Cannot send Slash to ${this.toString()} due to missing USE_APPLICATION_COMMANDS permission`, + ); + } + args = args.flat(2); + const cmd = commandString.trim().split(' '); + // Validate CommandName + const commandName = validateName(cmd[0]); + const sub = cmd.slice(1); + for (let i = 0; i < sub.length; i++) { + if (sub.length > 2) { + throw new Error('INVALID_COMMAND_NAME', cmd); + } + validateName(sub[i]); + } + if (!bot) throw new Error('MUST_SPECIFY_BOT'); + const botId = this.client.users.resolveId(bot); + const user = await this.client.users.fetch(botId).catch(() => {}); + if (!user || !user.bot || !user.application) { + throw new Error('botId is not a bot or does not have an application slash command'); + } + if (user._partial) await user.getProfile().catch(() => {}); + if (!commandName || typeof commandName !== 'string') throw new Error('Command name is required'); + const API = + this.client.api[this.guild ? 'guilds' : 'channels'][this.guild?.id || this.id]['application-command-index']; + const data = await API.get(); + for (const command of data.application_commands) { + if (command.type !== 1) continue; + if (user.id == command.application_id || user.application.id == command.application_id) { + user.application?.commands?._add(command, true); + } + } + // Remove + const commandTarget = user.application?.commands?.cache.find( + c => c.name === commandName && c.type === 'CHAT_INPUT', + ); + if (!commandTarget) { + throw new Error( + 'INTERACTION_SEND_FAILURE', + `SlashCommand ${commandName} is not found (With search)\nDebug:\n+ botId: ${botId} (ApplicationId: ${ + user.application?.id + })\n+ args: ${args.join(' | ') || null}`, + ); + } + return commandTarget.sendSlashCommand( + new (Message())(this.client, { + channel_id: this.id, + guild_id: this.guild?.id || null, + author: this.client.user, + content: '', + id: this.client.user.id, + }), + sub && sub.length > 0 ? sub : [], + args && args.length ? args : [], + ); + } + static applyToClass(structure, full = false, ignore = []) { const props = ['send']; if (full) { props.push( - 'sendSlash', - 'searchInteraction', 'lastMessage', 'lastPinAt', + 'bulkDelete', 'sendTyping', 'createMessageCollector', 'awaitMessages', + 'createMessageComponentCollector', + 'awaitMessageComponent', 'fetchWebhooks', 'createWebhook', 'setRateLimitPerUser', 'setNSFW', + 'sendSlash', + 'searchInteraction', ); } for (const prop of props) { @@ -497,225 +567,3 @@ module.exports = TextBasedChannel; // Fixes Circular const MessageManager = require('../../managers/MessageManager'); - -// Utils -function parseChoices(parent, list_choices, value) { - if (value !== undefined) { - if (Array.isArray(list_choices) && list_choices.length) { - const choice = list_choices.find(c => [c.name, c.value].includes(value)); - if (choice) { - return choice.value; - } else { - throw new Error('INVALID_SLASH_COMMAND_CHOICES', parent, value); - } - } else { - return value; - } - } else { - return undefined; - } -} - -async function addDataFromAttachment(value, client, channelId, attachments) { - value = await MessagePayload.resolveFile(value); - if (!value?.file) { - throw new TypeError('The attachment data must be a BufferResolvable or Stream or FileOptions of MessageAttachment'); - } - const data = await Util.getUploadURL(client, channelId, [value]); - await Util.uploadFile(value.file, data[0].upload_url); - const id = attachments.length; - attachments.push({ - id, - filename: value.name, - uploaded_filename: data[0].upload_filename, - }); - return { - id, - attachments, - }; -} - -async function parseOption( - client, - optionCommand, - value, - optionFormat, - attachments, - command, - applicationId, - guildId, - channelId, - subGroup, - subCommand, -) { - const data = { - type: optionCommand.type, - name: optionCommand.name, - }; - if (value !== undefined) { - switch (optionCommand.type) { - case ApplicationCommandOptionTypes.BOOLEAN: - case 'BOOLEAN': { - data.value = Boolean(value); - break; - } - case ApplicationCommandOptionTypes.INTEGER: - case 'INTEGER': { - data.value = Number(value); - break; - } - case ApplicationCommandOptionTypes.ATTACHMENT: - case 'ATTACHMENT': { - const parseData = await addDataFromAttachment(value, client, channelId, attachments); - data.value = parseData.id; - attachments = parseData.attachments; - break; - } - case ApplicationCommandOptionTypes.SUB_COMMAND_GROUP: - case 'SUB_COMMAND_GROUP': { - break; - } - default: { - value = parseChoices(optionCommand.name, optionCommand.choices, value); - if (optionCommand.autocomplete) { - const nonce = SnowflakeUtil.generate(); - // Post - let postData; - if (subGroup) { - postData = [ - { - type: ApplicationCommandOptionTypes.SUB_COMMAND_GROUP, - name: subGroup.name, - options: [ - { - type: ApplicationCommandOptionTypes.SUB_COMMAND, - name: subCommand.name, - options: [ - { - type: optionCommand.type, - name: optionCommand.name, - value, - focused: true, - }, - ], - }, - ], - }, - ]; - } else if (subCommand) { - postData = [ - { - type: ApplicationCommandOptionTypes.SUB_COMMAND, - name: subCommand.name, - options: [ - { - type: optionCommand.type, - name: optionCommand.name, - value, - focused: true, - }, - ], - }, - ]; - } else { - postData = [ - { - type: optionCommand.type, - name: optionCommand.name, - value, - focused: true, - }, - ]; - } - const body = createPostData( - client, - true, - applicationId, - nonce, - guildId, - Boolean(command.guild_id), - channelId, - command.version, - command.id, - command.name_default || command.name, - command.type, - postData, - [], - ); - await client.api.interactions.post({ - data: body, - }); - data.value = await awaitAutocomplete(client, nonce, value); - } else { - data.value = value; - } - } - } - optionFormat.push(data); - } - return { - optionFormat, - attachments, - }; -} - -function awaitAutocomplete(client, nonce, defaultValue) { - return new Promise(resolve => { - const handler = data => { - if (data.t !== 'APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE') return; - if (data.d?.nonce !== nonce) return; - clearTimeout(timeout); - client.removeListener(Events.UNHANDLED_PACKET, handler); - client.decrementMaxListeners(); - if (data.d.choices.length >= 1) { - resolve(data.d.choices[0].value); - } else { - resolve(defaultValue); - } - }; - const timeout = setTimeout(() => { - client.removeListener(Events.UNHANDLED_PACKET, handler); - client.decrementMaxListeners(); - resolve(defaultValue); - }, 5_000).unref(); - client.incrementMaxListeners(); - client.on(Events.UNHANDLED_PACKET, handler); - }); -} - -function createPostData( - client, - isAutocomplete = false, - applicationId, - nonce, - guildId, - isGuildCommand, - channelId, - commandVersion, - commandId, - commandName, - commandType, - postData, - attachments = [], -) { - const data = { - type: isAutocomplete ? InteractionTypes.APPLICATION_COMMAND_AUTOCOMPLETE : InteractionTypes.APPLICATION_COMMAND, - application_id: applicationId, - guild_id: guildId, - channel_id: channelId, - session_id: client.ws.shards.first()?.sessionId, - data: { - version: commandVersion, - id: commandId, - name: commandName, - type: commandType, - options: postData, - attachments: attachments, - }, - nonce, - }; - if (isGuildCommand) { - data.data.guild_id = guildId; - } - return data; -} From f61d47f03d9800d0e4a98e83c724f5d299d39da5 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Wed, 10 Jan 2024 19:31:56 +0700 Subject: [PATCH 36/60] Update TextBasedChannel.js --- src/structures/interfaces/TextBasedChannel.js | 674 +++++++++++------- 1 file changed, 413 insertions(+), 261 deletions(-) diff --git a/src/structures/interfaces/TextBasedChannel.js b/src/structures/interfaces/TextBasedChannel.js index 4e64c34..e88c6aa 100644 --- a/src/structures/interfaces/TextBasedChannel.js +++ b/src/structures/interfaces/TextBasedChannel.js @@ -1,17 +1,14 @@ 'use strict'; /* eslint-disable import/order */ -const InteractionManager = require('../../managers/InteractionManager'); const MessageCollector = require('../MessageCollector'); const MessagePayload = require('../MessagePayload'); +const { InteractionTypes, ApplicationCommandOptionTypes, Events } = require('../../util/Constants'); +const { Error } = require('../../errors'); const SnowflakeUtil = require('../../util/SnowflakeUtil'); -const { Collection } = require('@discordjs/collection'); -const { InteractionTypes, MaxBulkDeletableMessageAge } = require('../../util/Constants'); -const { TypeError, Error } = require('../../errors'); -const InteractionCollector = require('../InteractionCollector'); -const { lazy, getAttachments, uploadFile } = require('../../util/Util'); -const Message = lazy(() => require('../Message').Message); +const { setTimeout } = require('node:timers'); const { s } = require('@sapphire/shapeshift'); +const Util = require('../../util/Util'); const validateName = stringName => s.string .lengthGreaterThanOrEqual(1) @@ -32,12 +29,6 @@ class TextBasedChannel { */ this.messages = new MessageManager(this); - /** - * A manager of the interactions sent to this channel - * @type {InteractionManager} - */ - this.interactions = new InteractionManager(this); - /** * The channel's last message id, if one was sent * @type {?Snowflake} @@ -76,7 +67,7 @@ class TextBasedChannel { * @property {boolean} [tts=false] Whether or not the message should be spoken aloud * @property {string} [nonce=''] The nonce for the message * @property {string} [content=''] The content for the message - * @property {Array<(MessageEmbed|APIEmbed|WebEmbed)>} [embeds] The embeds for the message + * @property {Array<(MessageEmbed|APIEmbed)>} [embeds] The embeds for the message * (see [here](https://discord.com/developers/docs/resources/channel#embed-object) for more details) * @property {MessageMentionOptions} [allowedMentions] Which mentions should be parsed from the message content * (see [here](https://discord.com/developers/docs/resources/channel#allowed-mentions-object) for more details) @@ -84,7 +75,6 @@ class TextBasedChannel { * @property {Array<(MessageActionRow|MessageActionRowOptions)>} [components] * Action rows containing interactive components for the message (buttons, select menus) * @property {MessageAttachment[]} [attachments] Attachments to send in the message - * @property {boolean} [usingNewAttachmentAPI] Whether to use the new attachment API (`channels/:id/attachments`) */ /** @@ -168,41 +158,197 @@ class TextBasedChannel { let messagePayload; if (options instanceof MessagePayload) { - messagePayload = await options.resolveData(); + messagePayload = options.resolveData(); } else { - messagePayload = await MessagePayload.create(this, options).resolveData(); + messagePayload = MessagePayload.create(this, options).resolveData(); } - let { data, files } = await messagePayload.resolveFiles(); - - if (typeof options == 'object' && typeof options.usingNewAttachmentAPI !== 'boolean') { - options.usingNewAttachmentAPI = this.client.options.usingNewAttachmentAPI; - } - - if (options?.usingNewAttachmentAPI === true) { - const attachments = await getAttachments(this.client, this.id, ...files); - const requestPromises = attachments.map(async attachment => { - await uploadFile(files[attachment.id].file, attachment.upload_url); - return { - id: attachment.id, - filename: files[attachment.id].name, - uploaded_filename: attachment.upload_filename, - description: files[attachment.id].description, - duration_secs: files[attachment.id].duration_secs, - waveform: files[attachment.id].waveform, - }; - }); - const attachmentsData = await Promise.all(requestPromises); - attachmentsData.sort((a, b) => parseInt(a.id) - parseInt(b.id)); - data.attachments = attachmentsData; - files = []; - } - - const d = await this.client.api.channels[this.id].messages.post({ data, files }); + const { data, files } = await messagePayload.resolveFiles(); + // New API + const attachments = await Util.getUploadURL(this.client, this.id, files); + const requestPromises = attachments.map(async attachment => { + await Util.uploadFile(files[attachment.id].file, attachment.upload_url); + return { + id: attachment.id, + filename: files[attachment.id].name, + uploaded_filename: attachment.upload_filename, + description: files[attachment.id].description, + duration_secs: files[attachment.id].duration_secs, + waveform: files[attachment.id].waveform, + }; + }); + const attachmentsData = await Promise.all(requestPromises); + attachmentsData.sort((a, b) => parseInt(a.id) - parseInt(b.id)); + data.attachments = attachmentsData; + // Empty Files + const d = await this.client.api.channels[this.id].messages.post({ data }); return this.messages.cache.get(d.id) ?? this.messages._add(d); } + searchInteraction() { + // Support Slash / ContextMenu + // API https://canary.discord.com/api/v9/guilds/:id/application-command-index // Guild + // https://canary.discord.com/api/v9/channels/:id/application-command-index // DM Channel + // Updated: 07/01/2023 + return this.client.api[this.guild ? 'guilds' : 'channels'][this.guild?.id || this.id][ + 'application-command-index' + ].get(); + } + + async sendSlash(botOrApplicationId, commandNameString, ...args) { + // Parse commandName /role add user + const cmd = commandNameString.trim().split(' '); + // Ex: role add user => [role, add, user] + // Parse: name, subGr, sub + const commandName = validateName(cmd[0]); + // Parse: role + const sub = cmd.slice(1); + // Parse: [add, user] + for (let i = 0; i < sub.length; i++) { + if (sub.length > 2) { + throw new Error('INVALID_COMMAND_NAME', cmd); + } + validateName(sub[i]); + } + // Search all + const data = await this.searchInteraction(); + // Find command... + const filterCommand = data.application_commands.filter(obj => + // Filter: name | name_default + [obj.name, obj.name_default].includes(commandName), + ); + // Filter Bot + botOrApplicationId = this.client.users.resolveId(botOrApplicationId); + const application = data.applications.find( + obj => obj.id == botOrApplicationId || obj.bot?.id == botOrApplicationId, + ); + // Find Command with application + const command = filterCommand.find(command => command.application_id == application.id); + + args = args.flat(2); + let optionFormat = []; + let attachments = []; + let optionsMaxdepth, subGroup, subCommand; + if (sub.length == 2) { + // Subcommand Group > Subcommand + // Find Sub group + subGroup = command.options.find( + obj => + obj.type == ApplicationCommandOptionTypes.SUB_COMMAND_GROUP && [obj.name, obj.name_default].includes(sub[0]), + ); + if (!subGroup) throw new Error('SLASH_COMMAND_SUB_COMMAND_GROUP_INVALID', sub[0]); + // Find Sub + subCommand = subGroup.options.find( + obj => obj.type == ApplicationCommandOptionTypes.SUB_COMMAND && [obj.name, obj.name_default].includes(sub[1]), + ); + if (!subCommand) throw new Error('SLASH_COMMAND_SUB_COMMAND_INVALID', sub[1]); + // Options + optionsMaxdepth = subCommand.options; + } else if (sub.length == 1) { + // Subcommand + subCommand = command.options.find( + obj => obj.type == ApplicationCommandOptionTypes.SUB_COMMAND && [obj.name, obj.name_default].includes(sub[0]), + ); + if (!subCommand) throw new Error('SLASH_COMMAND_SUB_COMMAND_INVALID', sub[0]); + // Options + optionsMaxdepth = subCommand.options; + } else { + optionsMaxdepth = command.options; + } + const valueRequired = optionsMaxdepth?.filter(o => o.required).length || 0; + for (let i = 0; i < Math.min(args.length, optionsMaxdepth?.length || 0); i++) { + const optionInput = optionsMaxdepth[i]; + const value = args[i]; + const parseData = await parseOption( + this.client, + optionInput, + value, + optionFormat, + attachments, + command, + application.id, + this.guild?.id, + this.id, + subGroup, + subCommand, + ); + optionFormat = parseData.optionFormat; + attachments = parseData.attachments; + } + if (valueRequired > args.length) { + throw new Error('SLASH_COMMAND_REQUIRED_OPTIONS_MISSING', valueRequired, optionFormat.length); + } + // Post + let postData; + if (subGroup) { + postData = [ + { + type: ApplicationCommandOptionTypes.SUB_COMMAND_GROUP, + name: subGroup.name, + options: [ + { + type: ApplicationCommandOptionTypes.SUB_COMMAND, + name: subCommand.name, + options: optionFormat, + }, + ], + }, + ]; + } else if (subCommand) { + postData = [ + { + type: ApplicationCommandOptionTypes.SUB_COMMAND, + name: subCommand.name, + options: optionFormat, + }, + ]; + } else { + postData = optionFormat; + } + const nonce = SnowflakeUtil.generate(); + const body = createPostData( + this.client, + false, + application.id, + nonce, + this.guild?.id, + Boolean(command.guild_id), + this.id, + command.version, + command.id, + command.name_default || command.name, + command.type, + postData, + attachments, + ); + this.client.api.interactions.post({ + data: body, + usePayloadJSON: true, + }); + return new Promise((resolve, reject) => { + const timeoutMs = 5_000; + // Waiting for MsgCreate / ModalCreate + const handler = data => { + if (data.nonce !== nonce) return; + clearTimeout(timeout); + this.client.removeListener(Events.MESSAGE_CREATE, handler); + this.client.removeListener(Events.INTERACTION_MODAL_CREATE, handler); + this.client.decrementMaxListeners(); + resolve(data); + }; + const timeout = setTimeout(() => { + this.client.removeListener(Events.MESSAGE_CREATE, handler); + this.client.removeListener(Events.INTERACTION_MODAL_CREATE, handler); + this.client.decrementMaxListeners(); + reject(new Error('INTERACTION_FAILED')); + }, timeoutMs).unref(); + this.client.incrementMaxListeners(); + this.client.on(Events.MESSAGE_CREATE, handler); + this.client.on(Events.INTERACTION_MODAL_CREATE, handler); + }); + } + /** * Sends a typing indicator in the channel. * @returns {Promise} Resolves upon the typing status being sent @@ -261,101 +407,6 @@ class TextBasedChannel { }); } - /** - * Creates a component interaction collector. - * @param {MessageComponentCollectorOptions} [options={}] Options to send to the collector - * @returns {InteractionCollector} - * @example - * // Create a button interaction collector - * const filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId'; - * const collector = channel.createMessageComponentCollector({ filter, time: 15_000 }); - * collector.on('collect', i => console.log(`Collected ${i.customId}`)); - * collector.on('end', collected => console.log(`Collected ${collected.size} items`)); - */ - createMessageComponentCollector(options = {}) { - return new InteractionCollector(this.client, { - ...options, - interactionType: InteractionTypes.MESSAGE_COMPONENT, - channel: this, - }); - } - - /** - * Collects a single component interaction that passes the filter. - * The Promise will reject if the time expires. - * @param {AwaitMessageComponentOptions} [options={}] Options to pass to the internal collector - * @returns {Promise} - * @example - * // Collect a message component interaction - * const filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId'; - * channel.awaitMessageComponent({ filter, time: 15_000 }) - * .then(interaction => console.log(`${interaction.customId} was clicked!`)) - * .catch(console.error); - */ - awaitMessageComponent(options = {}) { - const _options = { ...options, max: 1 }; - return new Promise((resolve, reject) => { - const collector = this.createMessageComponentCollector(_options); - collector.once('end', (interactions, reason) => { - const interaction = interactions.first(); - if (interaction) resolve(interaction); - else reject(new Error('INTERACTION_COLLECTOR_ERROR', reason)); - }); - }); - } - - /** - * Bulk deletes given messages that are newer than two weeks. - * @param {Collection|MessageResolvable[]|number} messages - * Messages or number of messages to delete - * @param {boolean} [filterOld=false] Filter messages to remove those which are older than two weeks automatically - * @returns {Promise>} Returns the deleted messages - * @example - * // Bulk delete messages - * channel.bulkDelete(5) - * .then(messages => console.log(`Bulk deleted ${messages.size} messages`)) - * .catch(console.error); - */ - async bulkDelete(messages, filterOld = false) { - if (!this.client.user.bot) throw new Error('INVALID_USER_METHOD'); - if (Array.isArray(messages) || messages instanceof Collection) { - let messageIds = messages instanceof Collection ? [...messages.keys()] : messages.map(m => m.id ?? m); - if (filterOld) { - messageIds = messageIds.filter(id => Date.now() - SnowflakeUtil.timestampFrom(id) < MaxBulkDeletableMessageAge); - } - if (messageIds.length === 0) return new Collection(); - if (messageIds.length === 1) { - await this.client.api.channels(this.id).messages(messageIds[0]).delete(); - const message = this.client.actions.MessageDelete.getMessage( - { - message_id: messageIds[0], - }, - this, - ); - return message ? new Collection([[message.id, message]]) : new Collection(); - } - await this.client.api.channels[this.id].messages['bulk-delete'].post({ data: { messages: messageIds } }); - return messageIds.reduce( - (col, id) => - col.set( - id, - this.client.actions.MessageDeleteBulk.getMessage( - { - message_id: id, - }, - this, - ), - ), - new Collection(), - ); - } - if (!isNaN(messages)) { - const msgs = await this.messages.fetch({ limit: messages }); - return this.bulkDelete(msgs, filterOld); - } - throw new TypeError('MESSAGE_BULK_DELETE_TYPE'); - } - /** * Fetches all webhooks for the channel. * @returns {Promise>} @@ -414,142 +465,21 @@ class TextBasedChannel { return this.edit({ nsfw }, reason); } - /** - * Search Slash Command (return raw data) - * @param {Snowflake} applicationId Application ID - * @param {?ApplicationCommandType} type Command Type - * @returns {Object} - */ - searchInteraction(applicationId, type = 'CHAT_INPUT') { - switch (type) { - case 'USER': - case 2: - type = 2; - break; - case 'MESSAGE': - case 3: - type = 3; - break; - default: - type = 1; - break; - } - return this.client.api.channels[this.id]['application-commands'].search.get({ - query: { - type, - application_id: applicationId, - }, - }); - } - - /** - * Send Slash to this channel - * @param {UserResolvable} bot Bot user (BotID, not applicationID) - * @param {string} commandString Command name (and sub / group formats) - * @param {...?any|any[]} args Command arguments - * @returns {Promise} - * @example - * // Send a basic slash - * channel.sendSlash('botid', 'ping') - * .then(console.log) - * .catch(console.error); - * @example - * // Send a remote file - * channel.sendSlash('botid', 'emoji upload', 'https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048', 'test') - * .then(console.log) - * .catch(console.error); - * @see {@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/SlashCommand.md} - */ - async sendSlash(bot, commandString, ...args) { - const perms = - this.type != 'DM' - ? this.permissionsFor(this.client.user).toArray() - : ['USE_APPLICATION_COMMANDS', `${this.recipient.relationships == 'BLOCKED' ? '' : 'SEND_MESSAGES'}`]; - if (!perms.includes('SEND_MESSAGES')) { - throw new Error( - 'INTERACTION_SEND_FAILURE', - `Cannot send Slash to ${this.toString()} ${ - this.recipient ? 'because bot has been blocked' : 'due to missing SEND_MESSAGES permission' - }`, - ); - } - if (!perms.includes('USE_APPLICATION_COMMANDS')) { - throw new Error( - 'INTERACTION_SEND_FAILURE', - `Cannot send Slash to ${this.toString()} due to missing USE_APPLICATION_COMMANDS permission`, - ); - } - args = args.flat(2); - const cmd = commandString.trim().split(' '); - // Validate CommandName - const commandName = validateName(cmd[0]); - const sub = cmd.slice(1); - for (let i = 0; i < sub.length; i++) { - if (sub.length > 2) { - throw new Error('INVALID_COMMAND_NAME', cmd); - } - validateName(sub[i]); - } - if (!bot) throw new Error('MUST_SPECIFY_BOT'); - const botId = this.client.users.resolveId(bot); - const user = await this.client.users.fetch(botId).catch(() => {}); - if (!user || !user.bot || !user.application) { - throw new Error('botId is not a bot or does not have an application slash command'); - } - if (user._partial) await user.getProfile().catch(() => {}); - if (!commandName || typeof commandName !== 'string') throw new Error('Command name is required'); - const API = - this.client.api[this.guild ? 'guilds' : 'channels'][this.guild?.id || this.id]['application-command-index']; - const data = await API.get(); - for (const command of data.application_commands) { - if (command.type !== 1) continue; - if (user.id == command.application_id || user.application.id == command.application_id) { - user.application?.commands?._add(command, true); - } - } - // Remove - const commandTarget = user.application?.commands?.cache.find( - c => c.name === commandName && c.type === 'CHAT_INPUT', - ); - if (!commandTarget) { - throw new Error( - 'INTERACTION_SEND_FAILURE', - `SlashCommand ${commandName} is not found (With search)\nDebug:\n+ botId: ${botId} (ApplicationId: ${ - user.application?.id - })\n+ args: ${args.join(' | ') || null}`, - ); - } - return commandTarget.sendSlashCommand( - new (Message())(this.client, { - channel_id: this.id, - guild_id: this.guild?.id || null, - author: this.client.user, - content: '', - id: this.client.user.id, - }), - sub && sub.length > 0 ? sub : [], - args && args.length ? args : [], - ); - } - static applyToClass(structure, full = false, ignore = []) { const props = ['send']; if (full) { props.push( + 'sendSlash', + 'searchInteraction', 'lastMessage', 'lastPinAt', - 'bulkDelete', 'sendTyping', 'createMessageCollector', 'awaitMessages', - 'createMessageComponentCollector', - 'awaitMessageComponent', 'fetchWebhooks', 'createWebhook', 'setRateLimitPerUser', 'setNSFW', - 'sendSlash', - 'searchInteraction', ); } for (const prop of props) { @@ -567,3 +497,225 @@ module.exports = TextBasedChannel; // Fixes Circular const MessageManager = require('../../managers/MessageManager'); + +// Utils +function parseChoices(parent, list_choices, value) { + if (value !== undefined) { + if (Array.isArray(list_choices) && list_choices.length) { + const choice = list_choices.find(c => [c.name, c.value].includes(value)); + if (choice) { + return choice.value; + } else { + throw new Error('INVALID_SLASH_COMMAND_CHOICES', parent, value); + } + } else { + return value; + } + } else { + return undefined; + } +} + +async function addDataFromAttachment(value, client, channelId, attachments) { + value = await MessagePayload.resolveFile(value); + if (!value?.file) { + throw new TypeError('The attachment data must be a BufferResolvable or Stream or FileOptions of MessageAttachment'); + } + const data = await Util.getUploadURL(client, channelId, [value]); + await Util.uploadFile(value.file, data[0].upload_url); + const id = attachments.length; + attachments.push({ + id, + filename: value.name, + uploaded_filename: data[0].upload_filename, + }); + return { + id, + attachments, + }; +} + +async function parseOption( + client, + optionCommand, + value, + optionFormat, + attachments, + command, + applicationId, + guildId, + channelId, + subGroup, + subCommand, +) { + const data = { + type: optionCommand.type, + name: optionCommand.name, + }; + if (value !== undefined) { + switch (optionCommand.type) { + case ApplicationCommandOptionTypes.BOOLEAN: + case 'BOOLEAN': { + data.value = Boolean(value); + break; + } + case ApplicationCommandOptionTypes.INTEGER: + case 'INTEGER': { + data.value = Number(value); + break; + } + case ApplicationCommandOptionTypes.ATTACHMENT: + case 'ATTACHMENT': { + const parseData = await addDataFromAttachment(value, client, channelId, attachments); + data.value = parseData.id; + attachments = parseData.attachments; + break; + } + case ApplicationCommandOptionTypes.SUB_COMMAND_GROUP: + case 'SUB_COMMAND_GROUP': { + break; + } + default: { + value = parseChoices(optionCommand.name, optionCommand.choices, value); + if (optionCommand.autocomplete) { + const nonce = SnowflakeUtil.generate(); + // Post + let postData; + if (subGroup) { + postData = [ + { + type: ApplicationCommandOptionTypes.SUB_COMMAND_GROUP, + name: subGroup.name, + options: [ + { + type: ApplicationCommandOptionTypes.SUB_COMMAND, + name: subCommand.name, + options: [ + { + type: optionCommand.type, + name: optionCommand.name, + value, + focused: true, + }, + ], + }, + ], + }, + ]; + } else if (subCommand) { + postData = [ + { + type: ApplicationCommandOptionTypes.SUB_COMMAND, + name: subCommand.name, + options: [ + { + type: optionCommand.type, + name: optionCommand.name, + value, + focused: true, + }, + ], + }, + ]; + } else { + postData = [ + { + type: optionCommand.type, + name: optionCommand.name, + value, + focused: true, + }, + ]; + } + const body = createPostData( + client, + true, + applicationId, + nonce, + guildId, + Boolean(command.guild_id), + channelId, + command.version, + command.id, + command.name_default || command.name, + command.type, + postData, + [], + ); + await client.api.interactions.post({ + data: body, + }); + data.value = await awaitAutocomplete(client, nonce, value); + } else { + data.value = value; + } + } + } + optionFormat.push(data); + } + return { + optionFormat, + attachments, + }; +} + +function awaitAutocomplete(client, nonce, defaultValue) { + return new Promise(resolve => { + const handler = data => { + if (data.t !== 'APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE') return; + if (data.d?.nonce !== nonce) return; + clearTimeout(timeout); + client.removeListener(Events.UNHANDLED_PACKET, handler); + client.decrementMaxListeners(); + if (data.d.choices.length >= 1) { + resolve(data.d.choices[0].value); + } else { + resolve(defaultValue); + } + }; + const timeout = setTimeout(() => { + client.removeListener(Events.UNHANDLED_PACKET, handler); + client.decrementMaxListeners(); + resolve(defaultValue); + }, 5_000).unref(); + client.incrementMaxListeners(); + client.on(Events.UNHANDLED_PACKET, handler); + }); +} + +function createPostData( + client, + isAutocomplete = false, + applicationId, + nonce, + guildId, + isGuildCommand, + channelId, + commandVersion, + commandId, + commandName, + commandType, + postData, + attachments = [], +) { + const data = { + type: isAutocomplete ? InteractionTypes.APPLICATION_COMMAND_AUTOCOMPLETE : InteractionTypes.APPLICATION_COMMAND, + application_id: applicationId, + guild_id: guildId, + channel_id: channelId, + session_id: client.ws.shards.first()?.sessionId, + data: { + version: commandVersion, + id: commandId, + name: commandName, + type: commandType, + options: postData, + attachments: attachments, + }, + nonce, + }; + if (isGuildCommand) { + data.data.guild_id = guildId; + } + return data; +} From 11d6cef5510b873130df4e8d311c58641c06034a Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Thu, 11 Jan 2024 18:03:49 +0700 Subject: [PATCH 37/60] Update PresenceUpdate.js --- src/client/actions/PresenceUpdate.js | 33 ++++++++++++++-------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/client/actions/PresenceUpdate.js b/src/client/actions/PresenceUpdate.js index 6275a69..d74003d 100644 --- a/src/client/actions/PresenceUpdate.js +++ b/src/client/actions/PresenceUpdate.js @@ -13,11 +13,9 @@ class PresenceUpdateAction extends Action { if (!user._equals(data.user)) this.client.actions.UserUpdate.handle(data.user); } - // Shet, user not received guild_id - let emited = false; - for (const guild of this.client.guilds.cache.map(g => g)) { - if (!guild.members.cache.get(user.id)) continue; - const oldPresence = guild.presences.cache.get(user.id)?._clone() ?? null; + const guild = this.client.guilds.cache.get(data.guild_id); + + if (guild) { let member = guild.members.cache.get(user.id); if (!member && data.status !== 'offline') { member = guild.members._add({ @@ -27,17 +25,20 @@ class PresenceUpdateAction extends Action { }); this.client.emit(Events.GUILD_MEMBER_AVAILABLE, member); } - const newPresence = guild.presences._add(Object.assign(data, { guild })); - if (this.client.listenerCount(Events.PRESENCE_UPDATE) && !newPresence.equals(oldPresence) && !emited) { - /** - * Emitted whenever a guild member's presence (e.g. status, activity) is changed. - * @event Client#presenceUpdate - * @param {?Presence} oldPresence The presence before the update, if one at all - * @param {Presence} newPresence The presence after the update - */ - this.client.emit(Events.PRESENCE_UPDATE, oldPresence, newPresence); - emited = true; - } + } + + const oldPresence = (guild || this.client).presences.cache.get(user.id)?._clone() ?? null; + + const newPresence = (guild || this.client).presences._add(Object.assign(data, { guild })); + + if (this.client.listenerCount(Events.PRESENCE_UPDATE) && !newPresence.equals(oldPresence)) { + /** + * Emitted whenever a guild member's presence (e.g. status, activity) is changed. + * @event Client#presenceUpdate + * @param {?Presence} oldPresence The presence before the update, if one at all + * @param {Presence} newPresence The presence after the update + */ + this.client.emit(Events.PRESENCE_UPDATE, oldPresence, newPresence); } } } From 37d3b4aa3307c407b2f83bc52bf49cbaadee8f7e Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Thu, 11 Jan 2024 18:11:17 +0700 Subject: [PATCH 38/60] Update ThreadManager.js --- src/managers/ThreadManager.js | 57 ++++++++--------------------------- 1 file changed, 12 insertions(+), 45 deletions(-) diff --git a/src/managers/ThreadManager.js b/src/managers/ThreadManager.js index a9c6dd1..aa096f7 100644 --- a/src/managers/ThreadManager.js +++ b/src/managers/ThreadManager.js @@ -2,7 +2,6 @@ const { Collection } = require('@discordjs/collection'); const CachedManager = require('./CachedManager'); -const { TypeError } = require('../errors'); const ThreadChannel = require('../structures/ThreadChannel'); /** @@ -119,34 +118,8 @@ class ThreadManager extends CachedManager { * @param {boolean} [cache=true] Whether to cache the new thread objects if they aren't already * @returns {Promise} */ - async fetchArchived(options = {}, cache = true) { - if (this.client.user.bot) { - let { type = 'public', fetchAll = false, before, limit } = options; - let path = this.client.api.channels(this.channel.id); - if (type === 'private' && !fetchAll) { - path = path.users('@me'); - } - let timestamp; - let id; - if (typeof before !== 'undefined') { - if (before instanceof ThreadChannel || /^\d{17,19}$/.test(String(before))) { - id = this.resolveId(before); - timestamp = this.resolve(before)?.archivedAt?.toISOString(); - } else { - try { - timestamp = new Date(before).toISOString(); - } catch { - throw new TypeError('INVALID_TYPE', 'before', 'DateResolvable or ThreadChannelResolvable'); - } - } - } - const raw = await path.threads - .archived(type) - .get({ query: { before: type === 'private' && !fetchAll ? id : timestamp, limit } }); - return this.constructor._mapThreads(raw, this.client, { parent: this.channel, cache }); - } else { - return this.fetchActive(cache, { archived: true, ...options }); - } + fetchArchived(options = {}, cache = true) { + return this.fetchActive(cache, { archived: true, ...options }); } /** @@ -165,22 +138,16 @@ class ThreadManager extends CachedManager { * @param {FetchChannelThreadsOptions} [options] Options for self-bots where advanced users can specify further options * @returns {Promise} */ - async fetchActive(cache = true, options = null) { - if (options && this.client.user.bot) { - throw new Error('INVALID_BOT_OPTIONS: Options can only be specified for user accounts.'); - } - - const raw = this.client.user.bot - ? await this.client.api.guilds(this.channel.guild.id).threads.active.get() - : await this.client.api.channels(this.channel.id).threads.search.get({ - query: { - archived: options?.archived ?? false, - limit: options?.limit ?? 25, - offset: options?.offset ?? 0, - sort_by: options?.sortBy ?? 'last_message_time', - sort_order: options?.sortOrder ?? 'desc', - }, - }); + async fetchActive(cache = true, options = {}) { + const raw = await this.client.api.channels(this.channel.id).threads.search.get({ + query: { + archived: options?.archived ?? false, + limit: options?.limit ?? 25, + offset: options?.offset ?? 0, + sort_by: options?.sortBy ?? 'last_message_time', + sort_order: options?.sortOrder ?? 'desc', + }, + }); return this.constructor._mapThreads(raw, this.client, { parent: this.channel, cache }); } From 07c40b400334b5356adb746e34657c4c5802106e Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Thu, 11 Jan 2024 18:24:08 +0700 Subject: [PATCH 39/60] Update Guild.js pls wait --- src/structures/Guild.js | 408 ++++++++++++++-------------------------- 1 file changed, 136 insertions(+), 272 deletions(-) diff --git a/src/structures/Guild.js b/src/structures/Guild.js index fb04620..0de5780 100644 --- a/src/structures/Guild.js +++ b/src/structures/Guild.js @@ -11,13 +11,13 @@ const Webhook = require('./Webhook'); const WelcomeScreen = require('./WelcomeScreen'); const { Error } = require('../errors'); const AutoModerationRuleManager = require('../managers/AutoModerationRuleManager'); +const GuildApplicationCommandManager = require('../managers/GuildApplicationCommandManager'); const GuildBanManager = require('../managers/GuildBanManager'); const GuildChannelManager = require('../managers/GuildChannelManager'); const GuildEmojiManager = require('../managers/GuildEmojiManager'); const GuildInviteManager = require('../managers/GuildInviteManager'); const GuildMemberManager = require('../managers/GuildMemberManager'); const GuildScheduledEventManager = require('../managers/GuildScheduledEventManager'); -const GuildSettingManager = require('../managers/GuildSettingManager'); const GuildStickerManager = require('../managers/GuildStickerManager'); const PresenceManager = require('../managers/PresenceManager'); const RoleManager = require('../managers/RoleManager'); @@ -33,7 +33,6 @@ const { PremiumTiers, } = require('../util/Constants'); const DataResolver = require('../util/DataResolver'); -const Permissions = require('../util/Permissions'); const SystemChannelFlags = require('../util/SystemChannelFlags'); const Util = require('../util/Util'); @@ -60,55 +59,61 @@ class Guild extends AnonymousGuild { super(client, data, false); /** - * A manager of the members belonging to this guild. + * A manager of the application commands belonging to this guild + * @type {GuildApplicationCommandManager} + */ + this.commands = new GuildApplicationCommandManager(this); + + /** + * A manager of the members belonging to this guild * @type {GuildMemberManager} */ this.members = new GuildMemberManager(this); /** - * A manager of the channels belonging to this guild. + * A manager of the channels belonging to this guild * @type {GuildChannelManager} */ this.channels = new GuildChannelManager(this); /** - * A manager of the bans belonging to this guild. + * A manager of the bans belonging to this guild * @type {GuildBanManager} */ this.bans = new GuildBanManager(this); /** - * A manager of the roles belonging to this guild. + * A manager of the roles belonging to this guild * @type {RoleManager} */ this.roles = new RoleManager(this); /** - * A manager of the presences belonging to this guild. + * A manager of the presences belonging to this guild * @type {PresenceManager} */ this.presences = new PresenceManager(this.client); /** - * A manager of the voice states of this guild. + * A manager of the voice states of this guild * @type {VoiceStateManager} */ this.voiceStates = new VoiceStateManager(this); /** - * A manager of the stage instances of this guild. + * A manager of the stage instances of this guild * @type {StageInstanceManager} */ this.stageInstances = new StageInstanceManager(this); /** - * A manager of the invites of this guild. + * A manager of the invites of this guild * @type {GuildInviteManager} */ this.invites = new GuildInviteManager(this); /** - * A manager of the scheduled events of this guild. + * A manager of the scheduled events of this guild * @type {GuildScheduledEventManager} */ this.scheduledEvents = new GuildScheduledEventManager(this); @@ -120,10 +125,9 @@ class Guild extends AnonymousGuild { this.autoModerationRules = new AutoModerationRuleManager(this); if (!data) return; - if (data.unavailable) { /** - * Whether the guild is available to access. If it is not available, it indicates a server outage. + * Whether the guild is available to access. If it is not available, it indicates a server outage * @type {boolean} */ this.available = false; @@ -137,12 +141,10 @@ class Guild extends AnonymousGuild { * @type {number} */ this.shardId = data.shardId; - - this.settings = new GuildSettingManager(this.client, this.id); } /** - * Whether or not the structure has been deleted. + * Whether or not the structure has been deleted * @type {boolean} * @deprecated This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091 */ @@ -193,7 +195,7 @@ class Guild extends AnonymousGuild { if ('discovery_splash' in data) { /** - * The hash of the guild discovery splash image. + * The hash of the guild discovery splash image * @type {?string} */ this.discoverySplash = data.discovery_splash; @@ -201,7 +203,7 @@ class Guild extends AnonymousGuild { if ('member_count' in data) { /** - * The full amount of members in this guild. + * The full amount of members in this guild * @type {number} */ this.memberCount = data.member_count; @@ -209,7 +211,7 @@ class Guild extends AnonymousGuild { if ('large' in data) { /** - * Whether the guild is "large" (has more than {@link WebsocketOptions large_threshold} members, 50 by default). + * Whether the guild is "large" (has more than {@link WebsocketOptions large_threshold} members, 50 by default) * @type {boolean} */ this.large = Boolean(data.large); @@ -217,7 +219,7 @@ class Guild extends AnonymousGuild { if ('premium_progress_bar_enabled' in data) { /** - * Whether this guild has its premium (boost) progress bar enabled. + * Whether this guild has its premium (boost) progress bar enabled * @type {boolean} */ this.premiumProgressBarEnabled = data.premium_progress_bar_enabled; @@ -228,9 +230,6 @@ class Guild extends AnonymousGuild { * * ANIMATED_ICON * * AUTO_MODERATION * * BANNER - * * CLYDE_ENABLED - * `CLYDE_ENABLED` is now an experimental feature of Discord. - * See [this](https://rollouts.advaith.io/#2023-03_clyde_ai) for more information. * * COMMERCE * * COMMUNITY * * CREATOR_MONETIZABLE_PROVISIONAL @@ -254,9 +253,9 @@ class Guild extends AnonymousGuild { * * MORE_STICKERS * * THREE_DAY_THREAD_ARCHIVE * * SEVEN_DAY_THREAD_ARCHIVE - * * RAID_ALERTS_DISABLED * * PRIVATE_THREADS * * ROLE_ICONS + * * RAID_ALERTS_DISABLED * * ROLE_SUBSCRIPTIONS_AVAILABLE_FOR_PURCHASE * * ROLE_SUBSCRIPTIONS_ENABLED * @typedef {string} Features @@ -265,7 +264,7 @@ class Guild extends AnonymousGuild { if ('application_id' in data) { /** - * The id of the application that created this guild (if applicable). + * The id of the application that created this guild (if applicable) * @type {?Snowflake} */ this.applicationId = data.application_id; @@ -273,7 +272,7 @@ class Guild extends AnonymousGuild { if ('afk_timeout' in data) { /** - * The time in seconds before a user is counted as "away from keyboard". + * The time in seconds before a user is counted as "away from keyboard" * @type {?number} */ this.afkTimeout = data.afk_timeout; @@ -281,7 +280,7 @@ class Guild extends AnonymousGuild { if ('afk_channel_id' in data) { /** - * The id of the voice channel where AFK members are moved. + * The id of the voice channel where AFK members are moved * @type {?Snowflake} */ this.afkChannelId = data.afk_channel_id; @@ -289,7 +288,7 @@ class Guild extends AnonymousGuild { if ('system_channel_id' in data) { /** - * The system channel's id. + * The system channel's id * @type {?Snowflake} */ this.systemChannelId = data.system_channel_id; @@ -297,7 +296,7 @@ class Guild extends AnonymousGuild { if ('premium_tier' in data) { /** - * The premium tier of this guild. + * The premium tier of this guild * @type {PremiumTier} */ this.premiumTier = PremiumTiers[data.premium_tier]; @@ -305,7 +304,7 @@ class Guild extends AnonymousGuild { if ('widget_enabled' in data) { /** - * Whether widget images are enabled on this guild. + * Whether widget images are enabled on this guild * @type {?boolean} */ this.widgetEnabled = data.widget_enabled; @@ -313,7 +312,7 @@ class Guild extends AnonymousGuild { if ('widget_channel_id' in data) { /** - * The widget channel's id, if enabled. + * The widget channel's id, if enabled * @type {?string} */ this.widgetChannelId = data.widget_channel_id; @@ -321,7 +320,7 @@ class Guild extends AnonymousGuild { if ('explicit_content_filter' in data) { /** - * The explicit content filter level of the guild. + * The explicit content filter level of the guild * @type {ExplicitContentFilterLevel} */ this.explicitContentFilter = ExplicitContentFilterLevels[data.explicit_content_filter]; @@ -329,7 +328,7 @@ class Guild extends AnonymousGuild { if ('mfa_level' in data) { /** - * The required MFA level for this guild. + * The required MFA level for this guild * @type {MFALevel} */ this.mfaLevel = MFALevels[data.mfa_level]; @@ -337,7 +336,7 @@ class Guild extends AnonymousGuild { if ('joined_at' in data) { /** - * The timestamp the client user joined the guild at. + * The timestamp the client user joined the guild at * @type {number} */ this.joinedTimestamp = new Date(data.joined_at).getTime(); @@ -345,7 +344,7 @@ class Guild extends AnonymousGuild { if ('default_message_notifications' in data) { /** - * The default message notification level of the guild. + * The default message notification level of the guild * @type {DefaultMessageNotificationLevel} */ this.defaultMessageNotifications = DefaultMessageNotificationLevels[data.default_message_notifications]; @@ -353,7 +352,7 @@ class Guild extends AnonymousGuild { if ('system_channel_flags' in data) { /** - * The value set for the guild's system channel flags. + * The value set for the guild's system channel flags * @type {Readonly} */ this.systemChannelFlags = new SystemChannelFlags(data.system_channel_flags).freeze(); @@ -361,7 +360,7 @@ class Guild extends AnonymousGuild { if ('max_members' in data) { /** - * The maximum amount of members the guild can have. + * The maximum amount of members the guild can have * @type {?number} */ this.maximumMembers = data.max_members; @@ -371,8 +370,8 @@ class Guild extends AnonymousGuild { if ('max_presences' in data) { /** - * The maximum amount of presences the guild can have. - * You will need to fetch the guild using {@link Guild#fetch} if you want to receive this parameter. + * The maximum amount of presences the guild can have + * You will need to fetch the guild using {@link Guild#fetch} if you want to receive this parameter * @type {?number} */ this.maximumPresences = data.max_presences ?? 25_000; @@ -402,8 +401,8 @@ class Guild extends AnonymousGuild { if ('approximate_member_count' in data) { /** - * The approximate amount of members the guild has. - * You will need to fetch the guild using {@link Guild#fetch} if you want to receive this parameter. + * The approximate amount of members the guild has + * You will need to fetch the guild using {@link Guild#fetch} if you want to receive this parameter * @type {?number} */ this.approximateMemberCount = data.approximate_member_count; @@ -413,8 +412,8 @@ class Guild extends AnonymousGuild { if ('approximate_presence_count' in data) { /** - * The approximate amount of presences the guild has. - * You will need to fetch the guild using {@link Guild#fetch} if you want to receive this parameter. + * The approximate amount of presences the guild has + * You will need to fetch the guild using {@link Guild#fetch} if you want to receive this parameter * @type {?number} */ this.approximatePresenceCount = data.approximate_presence_count; @@ -423,15 +422,15 @@ class Guild extends AnonymousGuild { } /** - * The use count of the vanity URL code of the guild, if any. - * You will need to fetch this parameter using {@link Guild#fetchVanityData} if you want to receive it. + * The use count of the vanity URL code of the guild, if any + * You will need to fetch this parameter using {@link Guild#fetchVanityData} if you want to receive it * @type {?number} */ this.vanityURLUses ??= null; if ('rules_channel_id' in data) { /** - * The rules channel's id for the guild. + * The rules channel's id for the guild * @type {?Snowflake} */ this.rulesChannelId = data.rules_channel_id; @@ -439,7 +438,7 @@ class Guild extends AnonymousGuild { if ('public_updates_channel_id' in data) { /** - * The community updates channel's id for the guild. + * The community updates channel's id for the guild * @type {?Snowflake} */ this.publicUpdatesChannelId = data.public_updates_channel_id; @@ -447,7 +446,7 @@ class Guild extends AnonymousGuild { if ('preferred_locale' in data) { /** - * The preferred locale of the guild, defaults to `en-US`. + * The preferred locale of the guild, defaults to `en-US` * @type {Locale} * @see {@link https://discord.com/developers/docs/reference#locales} */ @@ -489,7 +488,7 @@ class Guild extends AnonymousGuild { if ('owner_id' in data) { /** - * The user id of this guild's owner. + * The user id of this guild's owner * @type {Snowflake} */ this.ownerId = data.owner_id; @@ -524,7 +523,7 @@ class Guild extends AnonymousGuild { if (!this.emojis) { /** - * A manager of the emojis belonging to this guild. + * A manager of the emojis belonging to this guild * @type {GuildEmojiManager} */ this.emojis = new GuildEmojiManager(this); @@ -538,13 +537,11 @@ class Guild extends AnonymousGuild { if (!this.stickers) { /** - * A manager of the stickers belonging to this guild. + * A manager of the stickers belonging to this guild * @type {GuildStickerManager} */ this.stickers = new GuildStickerManager(this); - if (data.stickers) { - for (const sticker of data.stickers) this.stickers._add(sticker); - } + if (data.stickers) for (const sticker of data.stickers) this.stickers._add(sticker); } else if (data.stickers) { this.client.actions.GuildStickersUpdate.handle({ guild_id: this.id, @@ -554,7 +551,7 @@ class Guild extends AnonymousGuild { } /** - * The time the client user joined the guild. + * The time the client user joined the guild * @type {Date} * @readonly */ @@ -582,7 +579,7 @@ class Guild extends AnonymousGuild { } /** - * AFK voice channel for this guild. + * AFK voice channel for this guild * @type {?VoiceChannel} * @readonly */ @@ -591,7 +588,7 @@ class Guild extends AnonymousGuild { } /** - * System channel for this guild. + * System channel for this guild * @type {?TextChannel} * @readonly */ @@ -609,7 +606,7 @@ class Guild extends AnonymousGuild { } /** - * Widget channel for this guild. + * Widget channel for this guild * @type {?(TextChannel|NewsChannel|VoiceChannel|StageChannel|ForumChannel)} * @readonly */ @@ -618,7 +615,7 @@ class Guild extends AnonymousGuild { } /** - * Rules channel for this guild. + * Rules channel for this guild * @type {?TextChannel} * @readonly */ @@ -627,7 +624,7 @@ class Guild extends AnonymousGuild { } /** - * Public updates channel for this guild. + * Public updates channel for this guild * @type {?TextChannel} * @readonly */ @@ -636,7 +633,7 @@ class Guild extends AnonymousGuild { } /** - * The client user as a GuildMember of this guild. + * The client user as a GuildMember of this guild * @type {?GuildMember} * @deprecated Use {@link GuildMemberManager#me} instead. * @readonly @@ -651,7 +648,7 @@ class Guild extends AnonymousGuild { } /** - * The maximum bitrate available for this guild. + * The maximum bitrate available for this guild * @type {number} * @readonly */ @@ -672,30 +669,6 @@ class Guild extends AnonymousGuild { } } - /** - * Mute a guild - * @param {boolean} mute Weather or not you want to mute the guild - * @param {?number} time The amount of time you want to mute the server for in seconds - * @returns {boolean} true if it worked and false if it didn't - * @example - * guild.mute(true, 3600) // mutes the guild for an hour - * guild.mute(true, -1) // mutes the guild forever - * guild.mute(false); // unmutes the guild - */ - async mute(mute, time) { - if (mute && time == null) return false; - if (time == null && !mute) await this.client.api.guilds(this.id).settings.patch({ muted: false }); - let ms = time * 1000; - let date = new Date(Date.now() + ms).toISOString(); - return this.settings.edit({ - mute_config: { - end_time: date, - selected_time_window: time, - }, - muted: true, - }); - } - /** * Fetches a collection of integrations to this guild. * Resolves with a collection mapping integrations by their ids. @@ -762,7 +735,7 @@ class Guild extends AnonymousGuild { /** * Fetches the vanity URL invite object to this guild. - * Resolves with an object containing the vanity URL invite code and the use count. + * Resolves with an object containing the vanity URL invite code and the use count * @returns {Promise} * @example * // Fetch invite data @@ -792,9 +765,7 @@ class Guild extends AnonymousGuild { async fetchWebhooks() { const apiHooks = await this.client.api.guilds(this.id).webhooks.get(); const hooks = new Collection(); - for (const hook of apiHooks) { - hooks.set(hook.id, new Webhook(this.client, hook)); - } + for (const hook of apiHooks) hooks.set(hook.id, new Webhook(this.client, hook)); return hooks; } @@ -812,14 +783,14 @@ class Guild extends AnonymousGuild { } /** - * Data for the Guild Widget Settings object. + * Data for the Guild Widget Settings object * @typedef {Object} GuildWidgetSettings * @property {boolean} enabled Whether the widget is enabled * @property {?GuildChannel} channel The widget invite channel */ /** - * The Guild Widget Settings object. + * The Guild Widget Settings object * @typedef {Object} GuildWidgetSettingsData * @property {boolean} enabled Whether the widget is enabled * @property {?GuildChannelResolvable} channel The widget invite channel @@ -874,6 +845,7 @@ class Guild extends AnonymousGuild { action_type: typeof type === 'string' ? GuildAuditLogs.Actions[type] : type, }, }); + return GuildAuditLogs.build(this, data); } @@ -891,8 +863,8 @@ class Guild extends AnonymousGuild { * @property {?(BufferResolvable|Base64Resolvable)} [splash] The invite splash image of the guild * @property {?(BufferResolvable|Base64Resolvable)} [discoverySplash] The discovery splash image of the guild * @property {?(BufferResolvable|Base64Resolvable)} [banner] The banner of the guild - * @property {?(DefaultMessageNotificationLevel|number)} [defaultMessageNotifications] The default message notification - * level of the guild + * @property {?(DefaultMessageNotificationLevel|number)} [defaultMessageNotifications] The default message + * notification level of the guild * @property {SystemChannelFlagsResolvable} [systemChannelFlags] The system channel flags of the guild * @property {?TextChannelResolvable} [rulesChannel] The rules channel of the guild * @property {?TextChannelResolvable} [publicUpdatesChannel] The community updates channel of the guild @@ -946,19 +918,13 @@ class Guild extends AnonymousGuild { _data.system_channel_id = this.client.channels.resolveId(data.systemChannel); } if (data.afkTimeout) _data.afk_timeout = Number(data.afkTimeout); - if (typeof data.icon !== 'undefined') { - _data.icon = await DataResolver.resolveImage(data.icon); - } + if (typeof data.icon !== 'undefined') _data.icon = await DataResolver.resolveImage(data.icon); if (data.owner) _data.owner_id = this.client.users.resolveId(data.owner); - if (typeof data.splash !== 'undefined') { - _data.splash = await DataResolver.resolveImage(data.splash); - } + if (typeof data.splash !== 'undefined') _data.splash = await DataResolver.resolveImage(data.splash); if (typeof data.discoverySplash !== 'undefined') { _data.discovery_splash = await DataResolver.resolveImage(data.discoverySplash); } - if (typeof data.banner !== 'undefined') { - _data.banner = await DataResolver.resolveImage(data.banner); - } + if (typeof data.banner !== 'undefined') _data.banner = await DataResolver.resolveImage(data.banner); if (typeof data.explicitContentFilter !== 'undefined') { _data.explicit_content_filter = typeof data.explicitContentFilter === 'number' @@ -990,15 +956,13 @@ class Guild extends AnonymousGuild { if (typeof data.safetyAlertsChannel !== 'undefined') { _data.safety_alerts_channel_id = this.client.channels.resolveId(data.safetyAlertsChannel); } - if ('premiumProgressBarEnabled' in data) { - _data.premium_progress_bar_enabled = data.premiumProgressBarEnabled; - } + if ('premiumProgressBarEnabled' in data) _data.premium_progress_bar_enabled = data.premiumProgressBarEnabled; const newData = await this.client.api.guilds(this.id).patch({ data: _data, reason }); return this.client.actions.GuildUpdate.handle(newData).updated; } /** - * Welcome channel data. + * Welcome channel data * @typedef {Object} WelcomeChannelData * @property {string} description The description to show for this welcome channel * @property {TextChannel|NewsChannel|StoreChannel|Snowflake} channel The channel to link for this welcome channel @@ -1006,7 +970,7 @@ class Guild extends AnonymousGuild { */ /** - * Welcome screen edit data. + * Welcome screen edit data * @typedef {Object} WelcomeScreenEditData * @property {boolean} [enabled] Whether the welcome screen is enabled * @property {string} [description] The description for the welcome screen @@ -1030,7 +994,7 @@ class Guild extends AnonymousGuild { */ /** - * Updates the guild's welcome screen. + * Updates the guild's welcome screen * @param {WelcomeScreenEditData} data Data to edit the welcome screen with * @returns {Promise} * @example @@ -1080,7 +1044,7 @@ class Guild extends AnonymousGuild { /* eslint-disable max-len */ /** * Edits the setting of the default message notifications of the guild. - * @param {DefaultMessageNotificationLevel|number} defaultMessageNotifications The new default message notification level of the guild + * @param {?(DefaultMessageNotificationLevel|number)} defaultMessageNotifications The new default message notification level of the guild * @param {string} [reason] Reason for changing the setting of the default message notifications * @returns {Promise} */ @@ -1116,7 +1080,7 @@ class Guild extends AnonymousGuild { /** * Edits the verification level of the guild. - * @param {(VerificationLevel|number)} verificationLevel The new verification level of the guild + * @param {?(VerificationLevel|number)} verificationLevel The new verification level of the guild * @param {string} [reason] Reason for changing the guild's verification level * @returns {Promise} * @example @@ -1236,7 +1200,7 @@ class Guild extends AnonymousGuild { } /** - * Sets a new guild's banner. + * Sets a new guild banner. * @param {?(Base64Resolvable|BufferResolvable)} banner The new banner of the guild * @param {string} [reason] Reason for changing the guild's banner * @returns {Promise} @@ -1263,47 +1227,6 @@ class Guild extends AnonymousGuild { setRulesChannel(rulesChannel, reason) { return this.edit({ rulesChannel }, reason); } - /** - * Change Guild Position (from * to Folder or Home). - * @param {number} position Guild Position - * * **WARNING**: Type = `FOLDER`, newPosition is the guild's index in the Folder. - * @param {string|number} type Move to folder or home - * * `FOLDER`: 1 - * * `HOME`: 2 - * @param {string|number|void|null} folderID If you want to move to folder - * @returns {Promise} - * @example - * // Move guild to folderID 123456, index 1 - * guild.setPosition(1, 'FOLDER', 123456) - * .then(guild => console.log(`Guild moved to folderID ${guild.folder.folderId}`)); - */ - async setPosition(position, type, folderID) { - if (type == 1 || `${type}`.toUpperCase() === 'FOLDER') { - folderID = folderID || this.folder.folderId; - if (!['number', 'string'].includes(typeof folderID)) { - throw new TypeError('INVALID_TYPE', 'folderID', 'String | Number'); - } - // Get Data from Folder ID - const folder = await this.client.settings.rawSetting.guild_folders.find(obj => obj.id == folderID); - if (!folder) throw new Error('FOLDER_NOT_FOUND'); - if (folder.guild_ids.length - 1 < position || position < 0) { - throw new Error('FOLDER_POSITION_INVALID'); - } - if (position !== folder.guild_ids.indexOf(this.id)) { - await this.client.settings.guildChangePosition(this.id, position, 1, folderID); - } - } else if (type == 2 || `${type}`.toUpperCase() === 'HOME') { - if (this.client.settings.guild_positions - 1 < position || position < 0) { - throw new Error('FOLDER_POSITION_INVALID'); - } - if (position !== this.position) { - await this.client.settings.guildChangePosition(this.id, position, 2, null); - } - } else { - throw new TypeError('INVALID_TYPE', 'type', '`Folder`| `Home`'); - } - return this; - } /** * Edits the community updates channel of the guild. @@ -1351,7 +1274,7 @@ class Guild extends AnonymousGuild { } /** - * Edits the enabled state of the guild's premium progress bar. + * Edits the enabled state of the guild's premium progress bar * @param {boolean} [enabled=true] The new enabled state of the guild's premium progress bar * @param {string} [reason] Reason for changing the state of the guild's premium progress bar * @returns {Promise} @@ -1378,7 +1301,7 @@ class Guild extends AnonymousGuild { /** * Batch-updates the guild's channels' positions. - * Only one channel's parent can be changed at a time. + * Only one channel's parent can be changed at a time * @param {ChannelPosition[]} channelPositions Channel positions to update * @returns {Promise} * @deprecated Use {@link GuildChannelManager#setPositions} instead @@ -1401,14 +1324,14 @@ class Guild extends AnonymousGuild { } /** - * The data needed for updating a guild role's position. + * The data needed for updating a guild role's position * @typedef {Object} GuildRolePosition * @property {RoleResolvable} role The role's id * @property {number} position The position to update */ /** - * Batch-updates the guild's role positions. + * Batch-updates the guild's role positions * @param {GuildRolePosition[]} rolePositions Role positions to update * @returns {Promise} * @deprecated Use {@link RoleManager#setPositions} instead @@ -1446,6 +1369,7 @@ class Guild extends AnonymousGuild { }); return this; } + /** * Sets whether this guild's invites are disabled. * @param {boolean} [disabled=true] Whether the invites are disabled @@ -1463,7 +1387,7 @@ class Guild extends AnonymousGuild { * @example * // Leave a guild * guild.leave() - * .then(guild => console.log(`Left the guild ${guild.name}`)) + * .then(guild => console.log(`Left the guild: ${guild.name}`)) * .catch(console.error); */ async leave() { @@ -1472,32 +1396,17 @@ class Guild extends AnonymousGuild { return this.client.actions.GuildDelete.handle({ id: this.id }).guild; } - /** - * Marks the guild as read. - * @returns {Promise} nothing :) - * @example - * const guild = client.guilds.fetch('222078108977594368'); - * guild.read(); - */ - async read() { - await this.client.api.guilds(this.id).ack.post(); - } - /** * Deletes the guild. - * @param {string} [mfaCode] The MFA code for the guild owner * @returns {Promise} * @example * // Delete a guild * guild.delete() - * .then(guild => console.log(`Deleted the guild ${guild.name}`)) + * .then(g => console.log(`Deleted the guild ${g}`)) * .catch(console.error); */ - async delete(mfaCode) { - if ((!mfaCode || typeof mfaCode !== 'string' || mfaCode.length !== 6) && this.client.user.mfaEnabled) { - throw new Error('MFA_INVALID'); - } - await this.client.api.guilds(this.id).delete({ data: mfaCode ? { code: mfaCode } : undefined }); + async delete() { + await this.client.api.guilds(this.id).delete(); return this.client.actions.GuildDelete.handle({ id: this.id }).guild; } @@ -1528,14 +1437,41 @@ class Guild extends AnonymousGuild { ); } + toJSON() { + const json = super.toJSON({ + available: false, + createdTimestamp: true, + nameAcronym: true, + presences: false, + voiceStates: false, + }); + json.iconURL = this.iconURL(); + json.splashURL = this.splashURL(); + json.discoverySplashURL = this.discoverySplashURL(); + json.bannerURL = this.bannerURL(); + return json; + } + + /** + * Marks the guild as read. + * @returns {Promise} + * @example + * const guild = client.guilds.cache.get('id'); + * guild.markAsRead(); + */ + markAsRead() { + return this.client.api.guilds(this.id).ack.post(); + } + /** * Set Community Feature. * @param {boolean} stats True / False to enable / disable Community Feature - * @param {TextChannelResolvable} publicUpdatesChannel The community updates channel of the guild - * @param {TextChannelResolvable} rulesChannel The new rules channel - * @param {string} reason Reason for changing the community feature + * @param {GuildTextChannelResolvable} [publicUpdatesChannel] The community updates channel of the guild + * @param {GuildTextChannelResolvable} [rulesChannel] The new rules channel + * @param {string} [reason] Reason for changing the community feature + * @returns {Promise} */ - async setCommunity(stats = true, publicUpdatesChannel = '1', rulesChannel = '1', reason) { + async setCommunity(stats = true, publicUpdatesChannel, rulesChannel, reason) { if (stats) { // Check everyone role const everyoneRole = this.roles.everyone; @@ -1543,19 +1479,19 @@ class Guild extends AnonymousGuild { await everyoneRole.setMentionable(false, reason); } // Setting - this.edit( + return this.edit( { defaultMessageNotifications: 'ONLY_MENTIONS', explicitContentFilter: 'ALL_MEMBERS', features: [...this.features, 'COMMUNITY'], - publicUpdatesChannel, - rulesChannel, + publicUpdatesChannel: this.channels.resolveId(publicUpdatesChannel) || '1', + rulesChannel: this.channels.resolveId(rulesChannel) || '1', verificationLevel: VerificationLevels[this.verificationLevel] < 1 ? 'LOW' : this.verificationLevel, // Email }, reason, ); } else { - this.edit( + return this.edit( { publicUpdatesChannel: null, rulesChannel: null, @@ -1569,60 +1505,23 @@ class Guild extends AnonymousGuild { } /** - * Add Integrations to the guild. - * @param {Snowflake} applicationId Application (ID) target - * @returns {Promise} + * Get the top emojis of this guild. + * @returns {Promise>} */ - addIntegration(applicationId) { - if (!this.me.permissions.has('MANAGE_WEBHOOKS')) { - throw new Error('MISSING_PERMISSIONS', 'MANAGE_WEBHOOKS'); - } - if (!this.me.permissions.has('MANAGE_GUILD')) { - throw new Error('MISSING_PERMISSIONS', 'MANAGE_GUILD'); - } - if (!applicationId || typeof applicationId !== 'string') throw new TypeError('INVALID_APPLICATION_ID'); - return this.client.authorizeURL( - `https://discord.com/api/oauth2/authorize?client_id=${applicationId}&scope=applications.commands`, - { - guild_id: this.id, - permissions: `0`, - authorize: true, - }, - ); - } - - /** - * Add Bot to the guild. - * @param {UserResolvable} bot BotId / ApplicationId - * @param {?PermissionResolvable} permissions Permissions - * @returns {Promise} - */ - addBot(bot, permissions) { - if (!this.me.permissions.has('MANAGE_WEBHOOKS')) { - throw new Error('MISSING_PERMISSIONS', 'MANAGE_WEBHOOKS'); - } - if (!this.me.permissions.has('MANAGE_GUILD')) { - throw new Error('MISSING_PERMISSIONS', 'MANAGE_GUILD'); - } - if (!this.client.options.captchaService) throw new Error('MISSING_CAPTCHA_SERVICE'); - const botId = this.client.users.resolveId(bot); - const permission = new Permissions(Permissions.resolve(permissions ?? 0n)); - if (!botId) throw new TypeError('INVALID_BOT_ID'); - // Check permission - const selfPerm = this.me.permissions.toArray(); - const missingPerms = permission.toArray().filter(x => !selfPerm.includes(x)); - if (missingPerms.length) { - throw new Error('MISSING_PERMISSIONS', missingPerms.join(', ')); - } - // Add bot - return this.client.authorizeURL( - `https://discord.com/api/oauth2/authorize?client_id=${botId}&permissions=${permission.bitfield}&scope=applications.commands%20bot`, - { - guild_id: this.id, - permissions: `${permission.bitfield}`, - authorize: true, - }, - ); + topEmojis() { + return new Promise((resolve, reject) => { + this.client.api + .guilds(this.id) + ['top-emojis'].get() + .then(data => { + const emojis = new Collection(); + for (const emoji of data.items) { + emojis.set(emoji.emoji_rank, this.emojis.cache.get(emoji.emoji_id)); + } + resolve(emojis); + }) + .catch(reject); + }); } /** @@ -1649,21 +1548,6 @@ class Guild extends AnonymousGuild { return data; } - toJSON() { - const json = super.toJSON({ - available: false, - createdTimestamp: true, - nameAcronym: true, - presences: false, - voiceStates: false, - }); - json.iconURL = this.iconURL(); - json.splashURL = this.splashURL(); - json.discoverySplashURL = this.discoverySplashURL(); - json.bannerURL = this.bannerURL(); - return json; - } - /** * The voice state adapter for this guild that can be used with @discordjs/voice to play audio in voice * and stage channels. @@ -1686,26 +1570,6 @@ class Guild extends AnonymousGuild { }; } - /** - * Get the top emojis of this guild. - * @returns {Promise>} - */ - topEmojis() { - return new Promise((resolve, reject) => { - this.client.api - .guilds(this.id) - ['top-emojis'].get() - .then(data => { - const emojis = new Collection(); - for (const emoji of data.items) { - emojis.set(emoji.emoji_rank, this.emojis.cache.get(emoji.emoji_id)); - } - resolve(emojis); - }) - .catch(reject); - }); - } - /** * Creates a collection of this guild's roles, sorted by their position and ids. * @returns {Collection} From 85f868887b0ae4936a9409091a5a6c0c45e372ba Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Thu, 11 Jan 2024 18:56:27 +0700 Subject: [PATCH 40/60] Delete GUILD_MEMBER_LIST_UPDATE.js --- .../handlers/GUILD_MEMBER_LIST_UPDATE.js | 55 ------------------- 1 file changed, 55 deletions(-) delete mode 100644 src/client/websocket/handlers/GUILD_MEMBER_LIST_UPDATE.js diff --git a/src/client/websocket/handlers/GUILD_MEMBER_LIST_UPDATE.js b/src/client/websocket/handlers/GUILD_MEMBER_LIST_UPDATE.js deleted file mode 100644 index 8f899e7..00000000 --- a/src/client/websocket/handlers/GUILD_MEMBER_LIST_UPDATE.js +++ /dev/null @@ -1,55 +0,0 @@ -'use strict'; - -const { Collection } = require('@discordjs/collection'); -const { Events } = require('../../../util/Constants'); - -module.exports = (client, { d: data }) => { - const guild = client.guilds.cache.get(data.guild_id); - if (!guild) return; - const members = new Collection(); - // Get Member from side Discord Channel (online counting if large server) - for (const object of data.ops) { - switch (object.op) { - case 'SYNC': { - for (const member_ of object.items) { - const member = member_.member; - if (!member) continue; - members.set(member.user.id, guild.members._add(member)); - if (member.presence) { - guild.presences._add(Object.assign(member.presence, { guild })); - } - } - break; - } - case 'INVALIDATE': { - client.emit( - Events.DEBUG, - `Invalidate [${object.range[0]}, ${object.range[1]}], Fetching GuildId: ${data.guild_id}`, - ); - break; - } - case 'UPDATE': - case 'INSERT': { - const member = object.item.member; - if (!member) continue; - members.set(member.user.id, guild.members._add(member)); - if (member.presence) { - guild.presences._add(Object.assign(member.presence, { guild })); - } - break; - } - case 'DELETE': { - break; - } - } - } - /** - * Emitted whenever a guild member list (sidebar) is updated. - * @event Client#guildMemberListUpdate - * @param {Collection} members Members that were updated - * @param {Guild} guild Guild - * @param {string} type Type of update (INVALIDATE | UPDATE | INSERT | DELETE | SYNC) - * @param {data} raw Raw data - */ - client.emit(Events.GUILD_MEMBER_LIST_UPDATE, members, guild, data.ops[0].op, data); -}; From 201e4376acb1eef59ee4ec5b97d7fcccd530f418 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Thu, 11 Jan 2024 19:05:22 +0700 Subject: [PATCH 41/60] Update USER_REQUIRED_ACTION_UPDATE.js --- .../handlers/USER_REQUIRED_ACTION_UPDATE.js | 78 ++++++++++++++++++- 1 file changed, 75 insertions(+), 3 deletions(-) diff --git a/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js b/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js index ed94726..a7bc168 100644 --- a/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js +++ b/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js @@ -1,5 +1,77 @@ 'use strict'; -const Util = require('../../../util/Util'); - -module.exports = (client, { d: data }) => Util.clientRequiredAction(client, data.required_action); +module.exports = (client, { d: data }) => { + let msg; + switch (data.required_action) { + case null: { + msg = 'All required actions have been completed.'; + break; + } + case 'AGREEMENTS': { + msg = 'You need to accept the new Terms of Service and Privacy Policy.'; + // https://discord.com/api/v9/users/@me/agreements + client.api + .users('@me') + .agreements.patch({ + data: { + terms: true, + privacy: true, + }, + }) + .then(() => { + client.emit( + 'debug', + '[USER_REQUIRED_ACTION] Successfully accepted the new Terms of Service and Privacy Policy.', + ); + }) + .catch(e => { + client.emit( + 'debug', + `[USER_REQUIRED_ACTION] Failed to accept the new Terms of Service and Privacy Policy: ${e}`, + ); + }); + break; + } + case 'REQUIRE_CAPTCHA': { + msg = 'You need to complete a captcha.'; + break; + } + case 'REQUIRE_VERIFIED_EMAIL': { + msg = 'You need to verify your email.'; + break; + } + case 'REQUIRE_REVERIFIED_EMAIL': { + msg = 'You need to reverify your email.'; + break; + } + case 'REQUIRE_VERIFIED_PHONE': { + msg = 'You need to verify your phone number.'; + break; + } + case 'REQUIRE_REVERIFIED_PHONE': { + msg = 'You need to reverify your phone number.'; + break; + } + case 'REQUIRE_VERIFIED_EMAIL_OR_VERIFIED_PHONE': { + msg = 'You need to verify your email or verify your phone number.'; + break; + } + case 'REQUIRE_REVERIFIED_EMAIL_OR_VERIFIED_PHONE': { + msg = 'You need to reverify your email or verify your phone number.'; + break; + } + case 'REQUIRE_VERIFIED_EMAIL_OR_REVERIFIED_PHONE': { + msg = 'You need to verify your email or reverify your phone number.'; + break; + } + case 'REQUIRE_REVERIFIED_EMAIL_OR_REVERIFIED_PHONE': { + msg = 'You need to reverify your email or reverify your phone number.'; + break; + } + default: { + msg = `Unknown required action: ${data.required_action}`; + break; + } + } + client.emit('debug', `[USER_REQUIRED_ACTION] ${msg}`); +}; From 609cce36311e9db7c5f106fac3965a8b6310d209 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Thu, 11 Jan 2024 19:23:00 +0700 Subject: [PATCH 42/60] update --- src/managers/GuildMemberManager.js | 281 ++++++----------------------- src/structures/DMChannel.js | 130 +++---------- src/structures/GroupDMChannel.js | 74 ++++++++ 3 files changed, 154 insertions(+), 331 deletions(-) diff --git a/src/managers/GuildMemberManager.js b/src/managers/GuildMemberManager.js index a97cce3..243ef56 100644 --- a/src/managers/GuildMemberManager.js +++ b/src/managers/GuildMemberManager.js @@ -1,10 +1,9 @@ +/* eslint-disable newline-per-chained-call */ 'use strict'; const { Buffer } = require('node:buffer'); const { setTimeout } = require('node:timers'); const { Collection } = require('@discordjs/collection'); -require('lodash.permutations'); -const _ = require('lodash'); const CachedManager = require('./CachedManager'); const { Error, TypeError, RangeError } = require('../errors'); const BaseGuildVoiceChannel = require('../structures/BaseGuildVoiceChannel'); @@ -191,25 +190,17 @@ class GuildMemberManager extends CachedManager { * guild.members.fetch({ query: 'hydra', limit: 1 }) * .then(console.log) * .catch(console.error); - * @see {@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/FetchGuildMember.md} */ fetch(options) { - if (!options || (typeof options === 'object' && !('user' in options) && !('query' in options))) { + if (!options) { if ( - this.guild.members.me.permissions.has('KICK_MEMBERS') || - this.guild.members.me.permissions.has('BAN_MEMBERS') || - this.guild.members.me.permissions.has('MANAGE_ROLES') + this.me.permissions.has('KICK_MEMBERS') || + this.me.permissions.has('BAN_MEMBERS') || + this.me.permissions.has('MANAGE_ROLES') ) { return this._fetchMany(); - } else if (this.guild.memberCount <= 10000) { - return this.fetchByMemberSafety(); } else { - // NOTE: This is a very slow method, and can take up to 999+ minutes to complete. - return this.fetchBruteforce({ - delay: 50, - skipWarn: true, - depth: 1, - }); + return this.fetchByMemberSafety(); } } const user = this.client.users.resolveId(options); @@ -471,221 +462,6 @@ class GuildMemberManager extends CachedManager { return this._add(data, cache); } - /** - * Options used to fetch multiple members from a guild. - * @typedef {Object} BruteforceOptions - * @property {number} [limit=100] Maximum number of members per request - * @property {number} [delay=500] Timeout for new requests in ms - * @property {number} [depth=1] Permutations length - */ - - /** - * Fetches multiple members from the guild. - * @param {BruteforceOptions} options Options for the bruteforce - * @returns {Collection} (All) members in the guild - * @see https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/FetchGuildMember.md - * @example - * guild.members.fetchBruteforce() - * .then(members => console.log(`Fetched ${members.size} members`)) - * .catch(console.error); - */ - fetchBruteforce(options = {}) { - const defaultQuery = 'abcdefghijklmnopqrstuvwxyz0123456789!"#$%&\'()*+,-./:;<=>?@[]^_`{|}~ '; - let dictionary; - let limit = 100; - let delay = 500; - let depth = 1; - if (options?.limit) limit = options?.limit; - if (options?.delay) delay = options?.delay; - if (options?.depth) depth = options?.depth; - if (typeof limit !== 'number') throw new TypeError('INVALID_TYPE', 'limit', 'Number'); - if (limit < 1 || limit > 100) throw new RangeError('INVALID_RANGE_QUERY_MEMBER'); - if (typeof delay !== 'number') throw new TypeError('INVALID_TYPE', 'delay', 'Number'); - if (typeof depth !== 'number') throw new TypeError('INVALID_TYPE', 'depth', 'Number'); - if (depth < 1) throw new RangeError('INVALID_RANGE_QUERY_MEMBER'); - if (depth > 2) { - console.warn(`[WARNING] GuildMemberManager#fetchBruteforce: depth greater than 2, can lead to very slow speeds`); - } - if (delay < 500 && !options?.skipWarn) { - console.warn( - `[WARNING] GuildMemberManager#fetchBruteforce: delay is less than 500ms, this may cause rate limits.`, - ); - } - let skipValues = []; - // eslint-disable-next-line no-async-promise-executor - return new Promise(async (resolve, reject) => { - for (let i = 1; i <= depth; i++) { - dictionary = _(defaultQuery) - .permutations(i) - .map(v => _.join(v, '')) - .value(); - for (const query of dictionary) { - if (this.guild.members.cache.size >= this.guild.memberCount) break; - this.client.emit( - 'debug', - `[INFO] GuildMemberManager#fetchBruteforce: Querying ${query}, Skip: [${skipValues.join(', ')}]`, - ); - if (skipValues.some(v => query.startsWith(v))) continue; - await this._fetchMany({ query, limit }) - .then(members => { - if (members.size === 0) skipValues.push(query); - }) - .catch(reject); - await this.guild.client.sleep(delay); - } - } - resolve(this.guild.members.cache); - }); - } - - /** - * Experimental method to fetch members from the guild. - * Lists up to 10000 members of the guild. - * @param {number} [timeout=15_000] Timeout for receipt of members in ms - * @returns {Promise>} - */ - fetchByMemberSafety(timeout = 15_000) { - return new Promise(resolve => { - const nonce = SnowflakeUtil.generate(); - let timeout_ = setTimeout(() => { - this.client.removeListener(Events.GUILD_MEMBER_LIST_UPDATE, handler); - resolve(this.guild.members.cache); - }, timeout).unref(); - const handler = (members, guild, raw) => { - if (guild.id == this.guild.id && raw.nonce == nonce) { - if (members.size > 0) { - this.client.ws.broadcast({ - op: 35, - d: { - guild_id: this.guild.id, - query: '', - continuation_token: members.first()?.id, - nonce, - }, - }); - } else { - clearTimeout(timeout_); - this.client.removeListener(Events.GUILD_MEMBER_LIST_UPDATE, handler); - resolve(this.guild.members.cache); - } - } - }; - this.client.on('guildMembersChunk', handler); - this.client.ws.broadcast({ - op: 35, - d: { - guild_id: this.guild.id, - query: '', - continuation_token: null, - nonce, - }, - }); - }); - } - - /** - * Fetches multiple members from the guild in the channel. - * @param {GuildTextChannelResolvable} channel The channel to get members from (Members has VIEW_CHANNEL permission) - * @param {number} [offset=0] Start index of the members to get - * @param {boolean} [double=false] Whether to use double range - * @param {number} [retryMax=3] Number of retries - * @param {number} [time=10e3] Timeout for receipt of members - * @returns {Collection} Members in the guild - * @see {@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/FetchGuildMember.md} - * @example - * const guild = client.guilds.cache.get('id'); - * const channel = guild.channels.cache.get('id'); - * // Overlap (slow) - * for (let index = 0; index <= guild.memberCount; index += 100) { - * await guild.members.fetchMemberList(channel, index, index !== 100).catch(() => {}); - * await client.sleep(500); - * } - * // Non-overlap (fast) - * for (let index = 0; index <= guild.memberCount; index += 200) { - * await guild.members.fetchMemberList(channel, index == 0 ? 100 : index, index !== 100).catch(() => {}); - * await client.sleep(500); - * } - * console.log(guild.members.cache.size); // will print the number of members in the guild - */ - fetchMemberList(channel, offset = 0, double = false, retryMax = 3, time = 10_000) { - const channel_ = this.guild.channels.resolve(channel); - if (!channel_?.isText()) throw new TypeError('INVALID_TYPE', 'channel', 'GuildTextChannelResolvable'); - if (typeof offset !== 'number') throw new TypeError('INVALID_TYPE', 'offset', 'Number'); - if (typeof time !== 'number') throw new TypeError('INVALID_TYPE', 'time', 'Number'); - if (typeof retryMax !== 'number') throw new TypeError('INVALID_TYPE', 'retryMax', 'Number'); - if (retryMax < 1) throw new RangeError('INVALID_RANGE_RETRY'); - if (typeof double !== 'boolean') throw new TypeError('INVALID_TYPE', 'double', 'Boolean'); - // TODO: if (this.guild.large) throw new Error('GUILD_IS_LARGE'); - return new Promise((resolve, reject) => { - const default_ = [[0, 99]]; - const fetchedMembers = new Collection(); - if (offset > 99) { - // eslint-disable-next-line no-unused-expressions - double - ? default_.push([offset, offset + 99], [offset + 100, offset + 199]) - : default_.push([offset, offset + 99]); - } - let retry = 0; - const handler = (members, guild, type, raw) => { - timeout.refresh(); - if (guild.id !== this.guild.id) return; - if (type == 'INVALIDATE' && offset > 100) { - if (retry < retryMax) { - this.guild.shard.send({ - op: Opcodes.GUILD_SUBSCRIPTIONS, - d: { - guild_id: this.guild.id, - typing: true, - threads: true, - activities: true, - channels: { - [channel_.id]: default_, - }, - thread_member_lists: [], - members: [], - }, - }); - retry++; - } else { - clearTimeout(timeout); - this.client.removeListener(Events.GUILD_MEMBER_LIST_UPDATE, handler); - this.client.decrementMaxListeners(); - reject(new Error('INVALIDATE_MEMBER', raw.ops[0].range)); - } - } else { - for (const member of members.values()) { - fetchedMembers.set(member.id, member); - } - clearTimeout(timeout); - this.client.removeListener(Events.GUILD_MEMBER_LIST_UPDATE, handler); - this.client.decrementMaxListeners(); - resolve(fetchedMembers); - } - }; - const timeout = setTimeout(() => { - this.client.removeListener(Events.GUILD_MEMBER_LIST_UPDATE, handler); - this.client.decrementMaxListeners(); - reject(new Error('GUILD_MEMBERS_TIMEOUT')); - }, time).unref(); - this.client.incrementMaxListeners(); - this.client.on(Events.GUILD_MEMBER_LIST_UPDATE, handler); - this.guild.shard.send({ - op: Opcodes.GUILD_SUBSCRIPTIONS, - d: { - guild_id: this.guild.id, - typing: true, - threads: true, - activities: true, - channels: { - [channel_.id]: default_, - }, - thread_member_lists: [], - members: [], - }, - }); - }); - } - /** * Adds a role to a member. * @param {GuildMemberResolvable} user The user to add the role from @@ -718,6 +494,51 @@ class GuildMemberManager extends CachedManager { return this.resolve(user) ?? this.client.users.resolve(user) ?? userId; } + /** + * Experimental method to fetch members from the guild. + * Lists up to 10000 members of the guild. + * @param {number} [timeout=15_000] Timeout for receipt of members in ms + * @returns {Promise>} + */ + fetchByMemberSafety(timeout = 15_000) { + return new Promise(resolve => { + const nonce = SnowflakeUtil.generate(); + let timeout_ = setTimeout(() => { + this.client.removeListener(Events.GUILD_MEMBER_LIST_UPDATE, handler); + resolve(this.guild.members.cache); + }, timeout).unref(); + const handler = (members, guild, raw) => { + if (guild.id == this.guild.id && raw.nonce == nonce) { + if (members.size > 0) { + this.client.ws.broadcast({ + op: Opcodes.SEARCH_RECENT_MEMBERS, + d: { + guild_id: this.guild.id, + query: '', + continuation_token: members.first()?.id, + nonce, + }, + }); + } else { + clearTimeout(timeout_); + this.client.removeListener(Events.GUILD_MEMBER_LIST_UPDATE, handler); + resolve(this.guild.members.cache); + } + } + }; + this.client.on('guildMembersChunk', handler); + this.client.ws.broadcast({ + op: Opcodes.SEARCH_RECENT_MEMBERS, + d: { + guild_id: this.guild.id, + query: '', + continuation_token: null, + nonce, + }, + }); + }); + } + _fetchMany({ limit = 0, withPresences: presences = true, diff --git a/src/structures/DMChannel.js b/src/structures/DMChannel.js index 748dc70..b1ad09d 100644 --- a/src/structures/DMChannel.js +++ b/src/structures/DMChannel.js @@ -1,12 +1,10 @@ 'use strict'; const { Collection } = require('@discordjs/collection'); -const { joinVoiceChannel, entersState, VoiceConnectionStatus } = require('@discordjs/voice'); const { Channel } = require('./Channel'); const TextBasedChannel = require('./interfaces/TextBasedChannel'); -const InteractionManager = require('../managers/InteractionManager'); const MessageManager = require('../managers/MessageManager'); -const { Status, Opcodes } = require('../util/Constants'); +const { Opcodes, Status } = require('../util/Constants'); /** * Represents a direct message channel between two users. @@ -25,12 +23,6 @@ class DMChannel extends Channel { * @type {MessageManager} */ this.messages = new MessageManager(this); - - /** - * A manager of the interactions sent to this channel - * @type {InteractionManager} - */ - this.interactions = new InteractionManager(this); } _patch(data) { @@ -65,7 +57,7 @@ class DMChannel extends Channel { if ('is_message_request' in data) { /** * Whether the channel is a message request - * @type {boolean} + * @type {?boolean} */ this.messageRequest = data.is_message_request; } @@ -138,78 +130,6 @@ class DMChannel extends Channel { return this.recipient.toString(); } - // These are here only for documentation purposes - they are implemented by TextBasedChannel - /* eslint-disable no-empty-function */ - get lastMessage() {} - get lastPinAt() {} - send() {} - sendTyping() {} - createMessageCollector() {} - awaitMessages() {} - createMessageComponentCollector() {} - awaitMessageComponent() {} - sendSlash() {} - searchInteraction() {} - // Doesn't work on DM channels; bulkDelete() {} - // Doesn't work on DM channels; setRateLimitPerUser() {} - // Doesn't work on DM channels; setNSFW() {} - // Testing feature: Call - // URL: https://discord.com/api/v9/channels/:DMchannelId/call/ring - /** - * Call this DMChannel. Return discordjs/voice VoiceConnection - * @param {CallOptions} options Options for the call - * @returns {Promise} - */ - call(options = {}) { - options = Object.assign( - { - ring: true, - }, - options || {}, - ); - return new Promise((resolve, reject) => { - if (!this.client.options.patchVoice) { - reject( - new Error( - 'VOICE_NOT_PATCHED', - 'Enable voice patching in client options\nhttps://discordjs-self-v13.netlify.app/#/docs/docs/main/typedef/ClientOptions', - ), - ); - } else { - if (options.ring) { - this.ring(); - } - const connection = joinVoiceChannel({ - channelId: this.id, - guildId: null, - adapterCreator: this.voiceAdapterCreator, - selfDeaf: options.selfDeaf ?? false, - selfMute: options.selfMute ?? false, - }); - entersState(connection, VoiceConnectionStatus.Ready, 30000) - .then(connection => { - resolve(connection); - }) - .catch(err => { - connection.destroy(); - reject(err); - }); - } - }); - } - - /** - * Ring the user's phone / PC (call) - * @returns {Promise} - */ - ring() { - return this.client.api.channels(this.id).call.ring.post({ - data: { - recipients: null, - }, - }); - } - /** * Sync VoiceState of this DMChannel. * @returns {undefined} @@ -222,6 +142,19 @@ class DMChannel extends Channel { }, }); } + + /** + * Ring the user's phone / PC (call) + * @returns {Promise} + */ + ring() { + return this.client.api.channels(this.id).call.ring.post({ + data: { + recipients: null, + }, + }); + } + /** * The user in this voice-based channel * @type {Collection} @@ -236,18 +169,7 @@ class DMChannel extends Channel { } return coll; } - /** - * Get connection to current call - * @type {?VoiceConnection} - * @readonly - */ - get voiceConnection() { - const check = this.client.callVoice?.joinConfig?.channelId == this.id; - if (check) { - return this.client.callVoice; - } - return null; - } + /** * Get current shard * @type {WebSocketShard} @@ -256,6 +178,7 @@ class DMChannel extends Channel { get shard() { return this.client.ws.shards.first(); } + /** * The voice state adapter for this client that can be used with @discordjs/voice to play audio in DM / Group DM channels. * @type {?Function} @@ -276,14 +199,19 @@ class DMChannel extends Channel { }; }; } + + // These are here only for documentation purposes - they are implemented by TextBasedChannel + /* eslint-disable no-empty-function */ + get lastMessage() {} + get lastPinAt() {} + send() {} + sendTyping() {} + createMessageCollector() {} + awaitMessages() {} + // Doesn't work on DM channels; setRateLimitPerUser() {} + // Doesn't work on DM channels; setNSFW() {} } -TextBasedChannel.applyToClass(DMChannel, true, [ - 'bulkDelete', - 'fetchWebhooks', - 'createWebhook', - 'setRateLimitPerUser', - 'setNSFW', -]); +TextBasedChannel.applyToClass(DMChannel, true, ['fetchWebhooks', 'createWebhook', 'setRateLimitPerUser', 'setNSFW']); module.exports = DMChannel; diff --git a/src/structures/GroupDMChannel.js b/src/structures/GroupDMChannel.js index 723f2ec..3f6f160 100644 --- a/src/structures/GroupDMChannel.js +++ b/src/structures/GroupDMChannel.js @@ -5,6 +5,7 @@ const { Channel } = require('./Channel'); const Invite = require('./Invite'); const TextBasedChannel = require('./interfaces/TextBasedChannel'); const MessageManager = require('../managers/MessageManager'); +const { Status, Opcodes } = require('../util/Constants'); const DataResolver = require('../util/DataResolver'); /** @@ -291,6 +292,79 @@ class GroupDMChannel extends Channel { return this; } + /** + * Ring the user's phone / PC (call) + * @param {UserResolvable[]} [recipients] Array of recipients + * @returns {Promise} + */ + ring(recipients) { + if (!recipients || !Array.isArray(recipients) || recipients.length == 0) recipients = null; + recipients = recipients.map(r => this.client.users.resolveId(r)).filter(r => r && this.recipients.get(r)); + return this.client.api.channels(this.id).call.ring.post({ + data: { + recipients, + }, + }); + } + + /** + * Sync VoiceState of this Group DMChannel. + * @returns {undefined} + */ + sync() { + this.client.ws.broadcast({ + op: Opcodes.DM_UPDATE, + d: { + channel_id: this.id, + }, + }); + } + + /** + * The user in this voice-based channel + * @type {Collection} + * @readonly + */ + get voiceUsers() { + const coll = new Collection(); + for (const state of this.client.voiceStates.cache.values()) { + if (state.channelId === this.id && state.user) { + coll.set(state.id, state.user); + } + } + return coll; + } + + /** + * Get current shard + * @type {WebSocketShard} + * @readonly + */ + get shard() { + return this.client.ws.shards.first(); + } + + /** + * The voice state adapter for this client that can be used with @discordjs/voice to play audio in DM / Group DM channels. + * @type {?Function} + * @readonly + */ + get voiceAdapterCreator() { + return methods => { + this.client.voice.adapters.set(this.id, methods); + return { + sendPayload: data => { + if (this.shard.status !== Status.READY) return false; + this.shard.send(data); + return true; + }, + destroy: () => { + this.client.voice.adapters.delete(this.id); + }, + }; + }; + } + // These are here only for documentation purposes - they are implemented by TextBasedChannel /* eslint-disable no-empty-function */ get lastMessage() {} From e48e9e8dd854ed5d64edb520d447c08100099149 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Fri, 12 Jan 2024 22:29:12 +0700 Subject: [PATCH 43/60] call state --- src/client/websocket/handlers/CALL_CREATE.js | 6 +++--- src/client/websocket/handlers/CALL_DELETE.js | 4 ++-- src/client/websocket/handlers/CALL_UPDATE.js | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/client/websocket/handlers/CALL_CREATE.js b/src/client/websocket/handlers/CALL_CREATE.js index 4ff9c01..d32888d 100644 --- a/src/client/websocket/handlers/CALL_CREATE.js +++ b/src/client/websocket/handlers/CALL_CREATE.js @@ -1,5 +1,5 @@ 'use strict'; -const Call = require('../../../structures/Call'); +const CallState = require('../../../structures/CallState'); const { Events } = require('../../../util/Constants'); module.exports = (client, packet) => { for (const voice of packet.d.voice_states) { @@ -8,7 +8,7 @@ module.exports = (client, packet) => { /** * Emitted whenever received a call * @event Client#callCreate - * @param {Call} call Call + * @param {CallState} call Call */ - client.emit(Events.CALL_CREATE, new Call(client, packet.d)); + client.emit(Events.CALL_CREATE, new CallState(client, packet.d)); }; diff --git a/src/client/websocket/handlers/CALL_DELETE.js b/src/client/websocket/handlers/CALL_DELETE.js index 996b97b..ccf4711 100644 --- a/src/client/websocket/handlers/CALL_DELETE.js +++ b/src/client/websocket/handlers/CALL_DELETE.js @@ -1,5 +1,5 @@ 'use strict'; -const Call = require('../../../structures/Call'); +const CallState = require('../../../structures/CallState'); const { Events } = require('../../../util/Constants'); module.exports = (client, packet) => { /** @@ -7,5 +7,5 @@ module.exports = (client, packet) => { * @event Client#callDelete * @param {Call} call Call */ - client.emit(Events.CALL_DELETE, new Call(client, packet.d)); + client.emit(Events.CALL_DELETE, new CallState(client, packet.d)); }; diff --git a/src/client/websocket/handlers/CALL_UPDATE.js b/src/client/websocket/handlers/CALL_UPDATE.js index 377527e..ef72fc0 100644 --- a/src/client/websocket/handlers/CALL_UPDATE.js +++ b/src/client/websocket/handlers/CALL_UPDATE.js @@ -1,5 +1,5 @@ 'use strict'; -const Call = require('../../../structures/Call'); +const CallState = require('../../../structures/CallState'); const { Events } = require('../../../util/Constants'); module.exports = (client, packet) => { /** @@ -7,5 +7,5 @@ module.exports = (client, packet) => { * @event Client#callUpdate * @param {Call} call Call */ - client.emit(Events.CALL_UPDATE, new Call(client, packet.d)); + client.emit(Events.CALL_UPDATE, new CallState(client, packet.d)); }; From 6fbf181d206937547c92a0c20731398f15c2cefa Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Fri, 12 Jan 2024 23:24:43 +0700 Subject: [PATCH 44/60] Support Proxy + Custom Captcha solver --- package.json | 1 - src/rest/APIRequest.js | 44 +++++++----- src/rest/CaptchaSolver.js | 139 ------------------------------------ src/rest/DiscordAPIError.js | 32 ++++----- src/rest/RESTManager.js | 22 +----- src/rest/RequestHandler.js | 28 +++----- 6 files changed, 53 insertions(+), 213 deletions(-) delete mode 100644 src/rest/CaptchaSolver.js diff --git a/package.json b/package.json index b1c9830..cf1bbc7 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,6 @@ "@sapphire/shapeshift": "^3.9.3", "@types/node-fetch": "^2.6.7", "@types/ws": "^8.5.8", - "chalk": "^4.1.2", "discord-api-types": "^0.37.61", "fetch-cookie": "^2.1.0", "form-data": "^4.0.0", diff --git a/src/rest/APIRequest.js b/src/rest/APIRequest.js index 3edebb8..b186b80 100644 --- a/src/rest/APIRequest.js +++ b/src/rest/APIRequest.js @@ -1,13 +1,14 @@ 'use strict'; const Buffer = require('node:buffer').Buffer; +const http = require('node:http'); const https = require('node:https'); const { setTimeout } = require('node:timers'); const makeFetchCookie = require('fetch-cookie'); const FormData = require('form-data'); const fetchOriginal = require('node-fetch'); const { CookieJar } = require('tough-cookie'); -const { getProxyObject } = require('../util/Util'); +const { UserAgent } = require('../util/Constants'); const cookieJar = new CookieJar(); const fetch = makeFetchCookie(fetchOriginal, cookieJar); @@ -23,6 +24,9 @@ class APIRequest { this.options = options; this.retries = 0; + const { userAgentSuffix } = this.client.options; + this.fullUserAgent = `${UserAgent}${userAgentSuffix.length ? `, ${userAgentSuffix.join(', ')}` : ''}`; + let queryString = ''; if (options.query) { const query = Object.entries(options.query) @@ -33,13 +37,11 @@ class APIRequest { this.path = `${path}${queryString && `?${queryString}`}`; } - make(captchaKey = undefined, captchaRqtoken = undefined) { - if (agent === null) { - if (typeof this.client.options.proxy === 'string' && this.client.options.proxy.length > 0) { - agent = getProxyObject(this.client.options.proxy); - } else if (this.client.options.http.agent instanceof https.Agent) { + make(captchaKey, captchaRqToken) { + if (!agent) { + if (this.client.options.http.agent instanceof http.Agent) { + this.client.options.http.agent.keepAlive = true; agent = this.client.options.http.agent; - agent.keepAlive = true; } else { agent = new https.Agent({ ...this.client.options.http.agent, keepAlive: true }); } @@ -56,7 +58,7 @@ class APIRequest { authority: 'discord.com', accept: '*/*', 'accept-language': 'en-US', - 'sec-ch-ua': `"Not?A_Brand";v="8", "Chromium";v="108"`, + 'sec-ch-ua': '"Not?A_Brand";v="8", "Chromium";v="108"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"Windows"', 'sec-fetch-dest': 'empty', @@ -65,18 +67,19 @@ class APIRequest { 'x-debug-options': 'bugReporterEnabled', 'x-discord-locale': 'en-US', 'x-discord-timezone': 'Asia/Saigon', - 'x-super-properties': `${Buffer.from( - this.client.options.jsonTransformer(this.client.options.ws.properties), - 'ascii', - ).toString('base64')}`, + 'x-super-properties': `${Buffer.from(JSON.stringify(this.client.options.ws.properties), 'ascii').toString( + 'base64', + )}`, Referer: 'https://discord.com/channels/@me', origin: 'https://discord.com', 'Referrer-Policy': 'strict-origin-when-cross-origin', + 'User-Agent': this.fullUserAgent, }; if (this.options.auth !== false) headers.Authorization = this.rest.getAuth(); if (this.options.reason) headers['X-Audit-Log-Reason'] = encodeURIComponent(this.options.reason); if (this.options.headers) headers = Object.assign(headers, this.options.headers); + // Delete all headers if undefined for (const [key, value] of Object.entries(headers)) { if (value === undefined) delete headers[key]; @@ -86,9 +89,12 @@ class APIRequest { 'User-Agent': this.client.options.http.headers['User-Agent'], }; } - if (captchaKey && typeof captchaKey == 'string') { - headers['x-captcha-key'] = captchaKey; - if (captchaRqtoken) headers['x-captcha-rqtoken'] = captchaRqtoken; + + // Some options + if (this.options.DiscordContext) { + headers['X-Context-Properties'] = Buffer.from(JSON.stringify(this.options.DiscordContext), 'utf8').toString( + 'base64', + ); } let body; @@ -107,19 +113,21 @@ class APIRequest { headers = Object.assign(headers, body.getHeaders()); // eslint-disable-next-line eqeqeq } else if (this.options.data != null) { - if (this.options.useFormDataPayloadJSON) { + if (this.options.usePayloadJSON) { body = new FormData(); body.append('payload_json', JSON.stringify(this.options.data)); - headers = Object.assign(headers, body.getHeaders()); } else { body = JSON.stringify(this.options.data); headers['Content-Type'] = 'application/json'; } } + // Captcha + if (captchaKey && typeof captchaKey == 'string') headers['X-Captcha-Key'] = captchaKey; + if (captchaRqToken && typeof captchaRqToken == 'string') headers['X-Captcha-Rqtoken'] = captchaRqToken; + const controller = new AbortController(); const timeout = setTimeout(() => controller.abort(), this.client.options.restRequestTimeout).unref(); - return fetch(url, { method: this.method, headers, diff --git a/src/rest/CaptchaSolver.js b/src/rest/CaptchaSolver.js deleted file mode 100644 index 9aae32a..00000000 --- a/src/rest/CaptchaSolver.js +++ /dev/null @@ -1,139 +0,0 @@ -'use strict'; - -const proxyParser = proxy => { - const protocolSplit = proxy.split('://'); - const protocol = protocolSplit.length === 1 ? null : protocolSplit[0]; - const rest = protocolSplit.length === 1 ? protocolSplit[0] : protocolSplit[1]; - const authSplit = rest.split('@'); - if (authSplit.length === 1) { - const host = authSplit[0].split(':')[0]; - const port = Number(authSplit[0].split(':')[1]); - const proxyConfig = { - host, - port, - }; - if (protocol != null) { - proxyConfig.protocol = protocol; - } - return proxyConfig; - } - const host = authSplit[1].split(':')[0]; - const port = Number(authSplit[1].split(':')[1]); - const [username, password] = authSplit[0].split(':'); - const proxyConfig = { - host, - port, - auth: { - username, - password, - }, - }; - if (protocol != null) { - proxyConfig.protocol = protocol; - } - return proxyConfig; -}; - -module.exports = class CaptchaSolver { - constructor(service, key, defaultCaptchaSolver, proxyString = '') { - this.service = 'custom'; - this.solver = undefined; - this.defaultCaptchaSolver = defaultCaptchaSolver; - this.key = null; - this.proxy = proxyString.length ? proxyParser(proxyString) : null; - this._setup(service, key); - } - _missingModule(name) { - return new Error(`${name} module not found, please install it with \`npm i ${name}\``); - } - _setup(service, key) { - switch (service) { - case '2captcha': { - if (!key || typeof key !== 'string') throw new Error('2captcha key is not provided'); - try { - const lib = require('2captcha'); - this.service = '2captcha'; - this.key = key; - this.solver = new lib.Solver(key); - this.solve = (data, userAgent) => - new Promise((resolve, reject) => { - const siteKey = data.captcha_sitekey; - let postD = { - invisible: 1, - userAgent, - }; - if (this.proxy !== null) { - postD = { - ...postD, - proxytype: this.proxy.protocol?.toUpperCase(), - proxy: `${'auth' in this.proxy ? `${this.proxy.auth.username}:${this.proxy.auth.password}@` : ''}${ - this.proxy.host - }:${this.proxy.port}`, - }; - } - if (data.captcha_rqdata) { - postD = { - ...postD, - data: data.captcha_rqdata, - }; - } - this.solver - .hcaptcha(siteKey, 'discord.com', postD) - .then(res => { - if (typeof res.data == 'string') { - resolve(res.data); - } else { - reject(new Error('Unknown Response')); - } - }) - .catch(reject); - }); - break; - } catch (e) { - throw this._missingModule('2captcha'); - } - } - case 'capmonster': { - if (!key || typeof key !== 'string') throw new Error('Capmonster key is not provided'); - try { - const { HCaptchaTask } = require('node-capmonster'); - this.service = 'capmonster'; - this.key = key; - const client = new HCaptchaTask(this.key); - this.solve = (captchaData, userAgent) => - new Promise((resolve, reject) => { - if (userAgent) client.setUserAgent(userAgent); - if (this.proxy !== null) { - client.setGlobalProxy( - this.proxy.protocol, - this.proxy.host, - this.proxy.port, - 'auth' in this.proxy ? this.proxy.auth.username : undefined, - 'auth' in this.proxy ? this.proxy.auth.password : undefined, - ); - } - client - .createWithTask( - client.task({ - websiteURL: 'https://discord.com/channels/@me', - websiteKey: captchaData.captcha_sitekey, - isInvisible: !!captchaData.captcha_rqdata, - data: captchaData.captcha_rqdata, - }), - ) - .then(id => client.joinTaskResult(id)) - .then(result => resolve(result.gRecaptchaResponse)) - .catch(reject); - }); - } catch (e) { - throw this._missingModule('node-capmonster'); - } - break; - } - default: { - this.solve = this.defaultCaptchaSolver; - } - } - } - solve() {} -}; diff --git a/src/rest/DiscordAPIError.js b/src/rest/DiscordAPIError.js index 0e5ff06..f5c6f0c 100644 --- a/src/rest/DiscordAPIError.js +++ b/src/rest/DiscordAPIError.js @@ -25,7 +25,7 @@ class DiscordAPIError extends Error { /** * HTTP error code returned by Discord - * @type {number | string} + * @type {number} */ this.code = error.code; @@ -35,21 +35,6 @@ class DiscordAPIError extends Error { */ this.httpStatus = status; - /** - * @typedef {Object} Captcha - * @property {Array} captcha_key ['message'] - * @property {string} captcha_sitekey Captcha sitekey (hcaptcha) - * @property {string} captcha_service hcaptcha - * @property {string} [captcha_rqdata] - * @property {string} [captcha_rqtoken] - */ - - /** - * Captcha response data if the request requires a captcha - * @type {Captcha | null} - */ - this.captcha = error?.captcha_service ? error : null; - /** * The data associated with the request that caused this error * @type {HTTPErrorData} @@ -64,6 +49,21 @@ class DiscordAPIError extends Error { * @type {number} */ this.retries = request.retries; + + /** + * @typedef {Object} Captcha + * @property {Array} captcha_key ['message'] + * @property {string} captcha_sitekey Captcha sitekey (hcaptcha) + * @property {string} captcha_service hcaptcha + * @property {string} [captcha_rqdata] + * @property {string} [captcha_rqtoken] + */ + + /** + * Captcha response data if the request requires a captcha + * @type {Captcha | null} + */ + this.captcha = error?.captcha_service ? error : null; } /** diff --git a/src/rest/RESTManager.js b/src/rest/RESTManager.js index 87450d6..1f4df50 100644 --- a/src/rest/RESTManager.js +++ b/src/rest/RESTManager.js @@ -4,7 +4,6 @@ const { setInterval } = require('node:timers'); const { Collection } = require('@discordjs/collection'); const APIRequest = require('./APIRequest'); const routeBuilder = require('./APIRouter'); -const CaptchaSolver = require('./CaptchaSolver'); const RequestHandler = require('./RequestHandler'); const { Error } = require('../errors'); const { Endpoints } = require('../util/Constants'); @@ -23,17 +22,6 @@ class RESTManager { this.handlers.sweep(handler => handler._inactive); }, client.options.restSweepInterval * 1_000).unref(); } - this.captchaService = null; - this.setup(); - } - - setup() { - this.captchaService = new CaptchaSolver( - this.client.options.captchaService, - this.client.options.captchaKey, - this.client.options.captchaSolver, - this.client.options.captchaWithProxy ? this.client.options.proxy : '', - ); } get api() { @@ -41,16 +29,8 @@ class RESTManager { } getAuth() { - if ((this.client.token && this.client.user && this.client.user.bot) || this.client.accessToken) { - return `Bot ${this.client.token}`; - } else if (this.client.token) { - return this.client.token; - } - /* - // v13.7 const token = this.client.token ?? this.client.accessToken; - if (token) return `Bot ${token}`; - */ + if (token) return token?.replace(/Bot /g, ''); throw new Error('TOKEN_MISSING'); } diff --git a/src/rest/RequestHandler.js b/src/rest/RequestHandler.js index bc6d526..1c79161 100644 --- a/src/rest/RequestHandler.js +++ b/src/rest/RequestHandler.js @@ -2,13 +2,12 @@ const { setTimeout } = require('node:timers'); const { setTimeout: sleep } = require('node:timers/promises'); -const { inspect } = require('util'); const { AsyncQueue } = require('@sapphire/async-queue'); const DiscordAPIError = require('./DiscordAPIError'); const HTTPError = require('./HTTPError'); const RateLimitError = require('./RateLimitError'); const { - Events: { DEBUG, RATE_LIMIT, INVALID_REQUEST_WARNING, API_RESPONSE, API_REQUEST, CAPTCHA_REQUIRED }, + Events: { DEBUG, RATE_LIMIT, INVALID_REQUEST_WARNING, API_RESPONSE, API_REQUEST }, } = require('../util/Constants'); const captchaMessage = [ @@ -23,7 +22,7 @@ const captchaMessage = [ function parseResponse(res) { if (res.headers.get('content-type')?.startsWith('application/json')) return res.json(); - return res.arrayBuffer(); // Cre: TheDevYellowy + return res.arrayBuffer(); } function getAPIOffset(serverDate) { @@ -354,18 +353,9 @@ class RequestHandler { let data; try { data = await parseResponse(res); - if (data?.captcha_service) { - /** - * Emitted when a request is blocked by a captcha - * @event Client#captchaRequired - * @param {Request} request The request that was blocked - * @param {Captcha} data The data returned by Discord - */ - this.manager.client.emit(CAPTCHA_REQUIRED, request, data); - } if ( data?.captcha_service && - this.manager.client.options.captchaService && + typeof this.manager.client.options.captchaSolver == 'function' && request.retries < this.manager.client.options.captchaRetryLimit && captchaMessage.some(s => data.captcha_key[0].includes(s)) ) { @@ -376,13 +366,14 @@ class RequestHandler { Method : ${request.method} Path : ${request.path} Route : ${request.route} - Info : ${inspect(data, { depth: null })}`, + Sitekey : ${data.captcha_sitekey} + rqToken : ${data.captcha_rqtoken}`, ); - const captcha = await this.manager.captchaService.solve( - data, - this.manager.client.options.http.headers['User-Agent'], + const captcha = await this.manager.client.options.captchaSolver( + data.captcha_sitekey, + request.fullUserAgent, + data.captcha_rqtoken, ); - // Sleep: await this.manager.client.sleep(5_000); this.manager.client.emit( DEBUG, `Captcha details: @@ -398,6 +389,7 @@ class RequestHandler { } catch (err) { throw new HTTPError(err.message, err.constructor.name, err.status, request); } + throw new DiscordAPIError(data, res.status, request); } From 0c42a5b409fa6001e4fe44d008604a9fd3292f86 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Fri, 12 Jan 2024 23:35:29 +0700 Subject: [PATCH 45/60] Update RequestHandler.js --- src/rest/RequestHandler.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/rest/RequestHandler.js b/src/rest/RequestHandler.js index 1c79161..1031f97 100644 --- a/src/rest/RequestHandler.js +++ b/src/rest/RequestHandler.js @@ -369,11 +369,7 @@ class RequestHandler { Sitekey : ${data.captcha_sitekey} rqToken : ${data.captcha_rqtoken}`, ); - const captcha = await this.manager.client.options.captchaSolver( - data.captcha_sitekey, - request.fullUserAgent, - data.captcha_rqtoken, - ); + const captcha = await this.manager.client.options.captchaSolver(data, request.fullUserAgent); this.manager.client.emit( DEBUG, `Captcha details: From 73734f310e6b47b88564fde40cf677df1d69737f Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sat, 13 Jan 2024 12:15:42 +0700 Subject: [PATCH 46/60] Update WebSocketShard.js --- src/client/websocket/WebSocketShard.js | 77 +++++++++++++------------- 1 file changed, 39 insertions(+), 38 deletions(-) diff --git a/src/client/websocket/WebSocketShard.js b/src/client/websocket/WebSocketShard.js index 49ff8a2..27fb046 100644 --- a/src/client/websocket/WebSocketShard.js +++ b/src/client/websocket/WebSocketShard.js @@ -1,11 +1,11 @@ 'use strict'; const EventEmitter = require('node:events'); +const http = require('node:http'); const { setTimeout, setInterval, clearTimeout } = require('node:timers'); const WebSocket = require('../../WebSocket'); const { Status, Events, ShardEvents, Opcodes, WSEvents, WSCodes } = require('../../util/Constants'); const Intents = require('../../util/Intents'); -const { getProxyObject } = require('../../util/Util'); const STATUS_KEYS = Object.keys(Status); const CONNECTION_STATE = Object.keys(WebSocket.WebSocket); @@ -18,6 +18,7 @@ try { /** * Represents a Shard's WebSocket connection + * @extends {EventEmitter} */ class WebSocketShard extends EventEmitter { constructor(manager, id) { @@ -35,6 +36,13 @@ class WebSocketShard extends EventEmitter { */ this.id = id; + /** + * The resume URL for this shard + * @type {?string} + * @private + */ + this.resumeURL = null; + /** * The current status of the shard * @type {Status} @@ -62,13 +70,6 @@ class WebSocketShard extends EventEmitter { */ this.sessionId = null; - /** - * URL to use when resuming - * @type {?string} - * @private - */ - this.resumeURL = null; - /** * The previous heartbeat ping of the shard * @type {number} @@ -200,12 +201,12 @@ class WebSocketShard extends EventEmitter { connect() { const { client } = this.manager; - const gateway = this.resumeURL ?? this.manager.gateway; - if (this.connection?.readyState === WebSocket.OPEN && this.status === Status.READY) { return Promise.resolve(); } + const gateway = this.resumeURL ?? this.manager.gateway; + return new Promise((resolve, reject) => { const cleanup = () => { this.removeListener(ShardEvents.CLOSE, onClose); @@ -271,7 +272,7 @@ class WebSocketShard extends EventEmitter { Version : ${client.options.ws.version} Encoding : ${WebSocket.encoding} Compression: ${zlib ? 'zlib-stream' : 'none'} - Proxy : ${client.options.proxy || 'none'}`, + Agent : ${client.options.ws.agent instanceof http.Agent}`, ); this.status = this.status === Status.DISCONNECTED ? Status.RECONNECTING : Status.CONNECTING; @@ -279,13 +280,11 @@ class WebSocketShard extends EventEmitter { this.setWsCloseTimeout(-1); this.connectedAt = Date.now(); - let args = { handshakeTimeout: 30_000 }; - if (client.options.proxy.length > 0) { - args.agent = getProxyObject(client.options.proxy); - this.debug(`Using proxy ${client.options.proxy}`, args); - } // Adding a handshake timeout to just make sure no zombie connection appears. - const ws = (this.connection = WebSocket.create(gateway, wsQuery, args)); + const ws = (this.connection = WebSocket.create(gateway, wsQuery, { + handshakeTimeout: 30_000, + agent: client.options.ws.agent instanceof http.Agent ? client.options.ws.agent : undefined, + })); ws.onopen = this.onOpen.bind(this); ws.onmessage = this.onMessage.bind(this); ws.onerror = this.onError.bind(this); @@ -433,11 +432,11 @@ class WebSocketShard extends EventEmitter { */ this.emit(ShardEvents.READY); - this.sessionId = packet.d.session_id; this.resumeURL = packet.d.resume_gateway_url; + this.sessionId = packet.d.session_id; this.expectedGuilds = new Set(packet.d.guilds.filter(d => d?.unavailable == true).map(d => d.id)); this.status = Status.WAITING_FOR_GUILDS; - this.debug(`[READY] Session ${this.sessionId} | ResumeURL ${this.resumeURL}`); + this.debug(`[READY] Session ${this.sessionId} | Resume url ${this.resumeURL}.`); this.lastHeartbeatAcked = true; this.sendHeartbeat('ReadyHeartbeat'); break; @@ -538,21 +537,23 @@ class WebSocketShard extends EventEmitter { const { waitGuildTimeout } = this.manager.client.options; - this.readyTimeout = setTimeout(() => { - this.debug( - `Shard ${hasGuildsIntent ? 'did' : 'will'} not receive any more guild packets` + - `${hasGuildsIntent ? ` in ${waitGuildTimeout} ms` : ''}.\nUnavailable guild count: ${ - this.expectedGuilds.size - }`, - ); + this.readyTimeout = setTimeout( + () => { + this.debug( + `Shard ${hasGuildsIntent ? 'did' : 'will'} not receive any more guild packets` + + `${hasGuildsIntent ? ` in ${waitGuildTimeout} ms` : ''}.\nUnavailable guild count: ${ + this.expectedGuilds.size + }`, + ); - this.readyTimeout = null; + this.readyTimeout = null; - this.status = Status.READY; + this.status = Status.READY; - this.emit(ShardEvents.ALL_READY, this.expectedGuilds); - // }, hasGuildsIntent && waitGuildTimeout).unref(); - }, waitGuildTimeout).unref(); + this.emit(ShardEvents.ALL_READY, this.expectedGuilds); + }, + hasGuildsIntent ? waitGuildTimeout : 0, + ).unref(); } /** @@ -593,6 +594,7 @@ class WebSocketShard extends EventEmitter { } this.wsCloseTimeout = setTimeout(() => { this.setWsCloseTimeout(-1); + // Check if close event was emitted. if (this.closeEmitted) { this.debug(`[WebSocket] close was already emitted, assuming the connection was closed properly.`); @@ -656,7 +658,6 @@ class WebSocketShard extends EventEmitter { Sequence : ${this.sequence} Connection State: ${this.connection ? CONNECTION_STATE[this.connection.readyState] : 'No Connection??'}`, ); - this.destroy({ reset: true, closeCode: 4009 }); return; } @@ -700,25 +701,24 @@ class WebSocketShard extends EventEmitter { this.status = Status.IDENTIFYING; + // Patch something Object.keys(client.options.ws.properties) .filter(k => k.startsWith('$')) .forEach(k => { client.options.ws.properties[k.slice(1)] = client.options.ws.properties[k]; delete client.options.ws.properties[k]; }); + + // Clone the identify payload and assign the token and shard info const d = { - presence: client.options.presence, ...client.options.ws, token: client.token, }; delete d.version; + delete d.agent; - this.debug( - `[IDENTIFY] Shard ${this.id}/${client.options.shardCount} with intents: ${Intents.resolve( - client.options.intents, - )} 😊`, - ); + this.debug(`[IDENTIFY] Shard ${this.id}/${client.options.shardCount} with intents: ${d.intents}`); this.send({ op: Opcodes.IDENTIFY, d }, true); } @@ -815,6 +815,7 @@ class WebSocketShard extends EventEmitter { // Step 0: Remove all timers this.setHeartbeatTimer(-1); this.setHelloTimeout(-1); + this.debug( `[WebSocket] Destroy: Attempting to close the WebSocket. | WS State: ${ CONNECTION_STATE[this.connection?.readyState ?? WebSocket.CLOSED] From e5edf322640161375cdc737f30b4f97cd1db03df Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sat, 13 Jan 2024 12:16:09 +0700 Subject: [PATCH 47/60] Update BaseClient.js --- src/client/BaseClient.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/client/BaseClient.js b/src/client/BaseClient.js index c91992f..d2e3f69 100644 --- a/src/client/BaseClient.js +++ b/src/client/BaseClient.js @@ -18,10 +18,6 @@ class BaseClient extends EventEmitter { process.emitWarning('Intents is not available.', 'DeprecationWarning'); } - if (typeof options.captchaSolver === 'function') { - options.captchaService = 'custom'; - } - /** * The options the client was instantiated with * @type {ClientOptions} From 2e7745d064ea33cd19dd4c79d5baedc06ee1e866 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sat, 13 Jan 2024 12:16:28 +0700 Subject: [PATCH 48/60] Update DiscordAPIError.js --- src/rest/DiscordAPIError.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/rest/DiscordAPIError.js b/src/rest/DiscordAPIError.js index f5c6f0c..47044b9 100644 --- a/src/rest/DiscordAPIError.js +++ b/src/rest/DiscordAPIError.js @@ -42,6 +42,7 @@ class DiscordAPIError extends Error { this.requestData = { json: request.options.data, files: request.options.files ?? [], + headers: request.options.headers, }; /** From b3d713e81039a128bf374ff549bc1545551b2dea Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sat, 13 Jan 2024 12:24:46 +0700 Subject: [PATCH 49/60] Update RequestHandler.js --- src/rest/RequestHandler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rest/RequestHandler.js b/src/rest/RequestHandler.js index 1031f97..b6e095e 100644 --- a/src/rest/RequestHandler.js +++ b/src/rest/RequestHandler.js @@ -376,7 +376,7 @@ class RequestHandler { Method : ${request.method} Path : ${request.path} Route : ${request.route} - Key : ${captcha ? `${captcha.slice(0, 30)}...` : '[Captcha not solved]'} + Key : ${captcha ? `${captcha.slice(0, 120)}...` : '[Captcha not solved]'} rqToken : ${data.captcha_rqtoken}`, ); request.retries++; From a9d170f016bb54c945cf542a723bd75c9cada8ba Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sat, 13 Jan 2024 17:52:57 +0700 Subject: [PATCH 50/60] Update RequestHandler.js --- src/rest/RequestHandler.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/rest/RequestHandler.js b/src/rest/RequestHandler.js index b6e095e..b85fd0a 100644 --- a/src/rest/RequestHandler.js +++ b/src/rest/RequestHandler.js @@ -18,6 +18,7 @@ const captchaMessage = [ 'invalid-response', 'You need to update your app', 'response-already-used-error', + 'rqkey-mismatch', ]; function parseResponse(res) { From 65e68a9ded24b59f42e8cbf79ef424573f623bd7 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sat, 13 Jan 2024 18:50:24 +0700 Subject: [PATCH 51/60] Update USER_REQUIRED_ACTION_UPDATE.js --- src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js b/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js index a7bc168..62fd152 100644 --- a/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js +++ b/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js @@ -3,6 +3,7 @@ module.exports = (client, { d: data }) => { let msg; switch (data.required_action) { + case undefined: case null: { msg = 'All required actions have been completed.'; break; From 39b1d33857069b61ae3e415177f1c35b388cf87b Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sat, 13 Jan 2024 18:50:29 +0700 Subject: [PATCH 52/60] Update PurchasedFlags.js --- src/util/PurchasedFlags.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/util/PurchasedFlags.js b/src/util/PurchasedFlags.js index 80ff00a..888768c 100644 --- a/src/util/PurchasedFlags.js +++ b/src/util/PurchasedFlags.js @@ -20,12 +20,14 @@ class PurchasedFlags extends BitField {} * * `NITRO_CLASSIC` * * `NITRO` * * `GUILD_BOOST` + * * `NITRO_BASIC` * @type {Object} */ PurchasedFlags.FLAGS = { NITRO_CLASSIC: 1 << 0, NITRO: 1 << 1, GUILD_BOOST: 1 << 2, + NITRO_BASIC: 1 << 3, }; module.exports = PurchasedFlags; From ce5143bf9ba9235fb38bc35803cef07e3d439354 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sat, 13 Jan 2024 19:31:15 +0700 Subject: [PATCH 53/60] Update UserNoteManager.js --- src/managers/UserNoteManager.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/managers/UserNoteManager.js b/src/managers/UserNoteManager.js index d31bf07..ee673dc 100644 --- a/src/managers/UserNoteManager.js +++ b/src/managers/UserNoteManager.js @@ -28,6 +28,26 @@ class UserNoteManager extends BaseManager { else this.cache.set(id, note); return this; } + + /** + * Obtains a user from Discord, or the user cache if it's already available. + * @param {UserResolvable} user The user to fetch + * @param {BaseFetchOptions} [options] Additional options for this fetch + * @returns {Promise} + */ + async fetch(user, { cache = true, force = false } = {}) { + const id = this.resolveId(user); + if (!force) { + const existing = this.cache.get(id); + if (existing) return existing; + } + const data = await this.client.api.users['@me'].notes[id] + .get() + .then(d => d.note) + .catch(() => ''); + if (cache) this.cache.set(id, data); + return data; + } } module.exports = UserNoteManager; From 1583c399c35cf144627a3fb8ae64420c4e2c6a8a Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sat, 13 Jan 2024 19:31:22 +0700 Subject: [PATCH 54/60] Update UserManager.js --- src/managers/UserManager.js | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/managers/UserManager.js b/src/managers/UserManager.js index e5fd8d9..ca72b10 100644 --- a/src/managers/UserManager.js +++ b/src/managers/UserManager.js @@ -60,12 +60,11 @@ class UserManager extends CachedManager { data: { recipients: [id], }, - headers: { - 'X-Context-Properties': 'e30=', // {} - }, + DiscordContext: {}, }); + const dm_channel = await this.client.channels._add(data, null, { cache }); - await dm_channel.sync(); + dm_channel.sync(); return dm_channel; } @@ -87,10 +86,9 @@ class UserManager extends CachedManager { * Obtains a user from Discord, or the user cache if it's already available. * @param {UserResolvable} user The user to fetch * @param {BaseFetchOptions} [options] Additional options for this fetch - * @param {?Snowflake} [options.guildId] The guild ID to fetch the member for * @returns {Promise} */ - async fetch(user, { cache = true, force = false, guildId = null } = {}) { + async fetch(user, { cache = true, force = false } = {}) { const id = this.resolveId(user); if (!force) { const existing = this.cache.get(id); @@ -98,9 +96,7 @@ class UserManager extends CachedManager { } const data = await this.client.api.users(id).get(); - const userObject = this._add(data, cache); - await userObject.getProfile(guildId ?? null).catch(() => {}); - return userObject; + return this._add(data, cache); } /** From 14b76367bc829814ebf05003120081beed4f851b Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sun, 14 Jan 2024 08:24:09 +0700 Subject: [PATCH 55/60] Update .eslintrc.json --- .eslintrc.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.eslintrc.json b/.eslintrc.json index b70dfd8..9702974 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -7,7 +7,7 @@ "import" ], "parserOptions": { - "ecmaVersion": 2021 + "ecmaVersion": 13 }, "env": { "es2021": true, From 39a74b22dc42425328b7304db41f732cd9476a30 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sun, 14 Jan 2024 09:10:25 +0700 Subject: [PATCH 56/60] update --- src/structures/ClientPresence.js | 12 +- src/structures/ClientUser.js | 416 ++++++++-------------------- src/structures/GuildMember.js | 172 ++---------- src/structures/Invite.js | 52 +--- src/structures/Presence.js | 2 +- src/structures/RichPresence.js | 18 +- src/structures/User.js | 455 ++++++++----------------------- src/util/Constants.js | 358 +++++------------------- src/util/Options.js | 96 +++---- 9 files changed, 380 insertions(+), 1201 deletions(-) diff --git a/src/structures/ClientPresence.js b/src/structures/ClientPresence.js index 2761668..3b98218 100644 --- a/src/structures/ClientPresence.js +++ b/src/structures/ClientPresence.js @@ -2,7 +2,7 @@ const { Presence } = require('./Presence'); const { TypeError } = require('../errors'); -const { Opcodes, ActivityTypes } = require('../util/Constants'); +const { ActivityTypes, Opcodes } = require('../util/Constants'); const CustomStatusActivityTypes = [ActivityTypes.CUSTOM, ActivityTypes[ActivityTypes.CUSTOM]]; @@ -22,7 +22,6 @@ class ClientPresence extends Presence { */ set(presence) { const packet = this._parse(presence); - // Parse with custom class this._patch(packet, true); if (typeof presence.shardId === 'undefined') { this.client.ws.broadcast({ op: Opcodes.STATUS_UPDATE, d: packet }); @@ -33,8 +32,6 @@ class ClientPresence extends Presence { } else { this.client.ws.shards.get(presence.shardId).send({ op: Opcodes.STATUS_UPDATE, d: packet }); } - // Parse with default class - // this._patch(packet, false); return this; } @@ -48,14 +45,13 @@ class ClientPresence extends Presence { const data = { activities: [], afk: typeof afk === 'boolean' ? afk : false, - since: 0, + since: typeof since === 'number' && !Number.isNaN(since) ? since : null, status: status ?? this.status, }; if (activities?.length) { for (const [i, activity] of activities.entries()) { - if (![ActivityTypes.CUSTOM, 'CUSTOM'].includes(activity.type) && typeof activity.name !== 'string') { - throw new TypeError('INVALID_TYPE', `activities[${i}].name`, 'string'); - } + if (typeof activity.name !== 'string') throw new TypeError('INVALID_TYPE', `activities[${i}].name`, 'string'); + activity.type ??= ActivityTypes.PLAYING; if (CustomStatusActivityTypes.includes(activity.type) && !activity.state) { diff --git a/src/structures/ClientUser.js b/src/structures/ClientUser.js index be2239f..e579fe2 100644 --- a/src/structures/ClientUser.js +++ b/src/structures/ClientUser.js @@ -3,19 +3,24 @@ const { setInterval } = require('node:timers'); const { Collection } = require('@discordjs/collection'); const Invite = require('./Invite'); -const { Message } = require('./Message'); const User = require('./User'); -const { Util } = require('..'); -const { Error: Error_ } = require('../errors'); -const { Opcodes, NitroType, HypeSquadType } = require('../util/Constants'); const DataResolver = require('../util/DataResolver'); const PremiumUsageFlags = require('../util/PremiumUsageFlags'); const PurchasedFlags = require('../util/PurchasedFlags'); +const Util = require('../util/Util'); + /** * Represents the logged in client's Discord user. * @extends {User} */ class ClientUser extends User { + #packageName = null; + #intervalSamsungPresence = setInterval(() => { + this.client.emit('debug', `[UPDATE] Samsung Presence: ${this.#packageName}`); + if (!this.#packageName) return; + this.setSamsungActivity(this.#packageName, 'UPDATE'); + }, 1000 * 60 * 10).unref(); + _patch(data) { super._patch(data); @@ -29,7 +34,7 @@ class ClientUser extends User { if ('mfa_enabled' in data) { /** - * If the bot's {@link ClientApplication#owner Owner} has MFA enabled on their account + * If the bot's {@link Application#owner Owner} has MFA enabled on their account * @type {?boolean} */ this.mfaEnabled = typeof data.mfa_enabled === 'boolean' ? data.mfa_enabled : null; @@ -39,16 +44,6 @@ class ClientUser extends User { if ('token' in data) this.client.token = data.token; - // Todo: Add (Selfbot) - if ('premium_type' in data) { - const nitro = NitroType[data.premium_type ?? 0]; - /** - * Nitro type of the client user. - * @type {NitroType} - */ - this.nitroType = nitro ?? `UNKNOWN_TYPE_${data.premium_type}`; - } - if ('purchased_flags' in data) { /** * Purchased state of the client user. @@ -70,7 +65,7 @@ class ClientUser extends User { * Phone number of the client user. * @type {?string} */ - this.phoneNumber = data.phone; + this.phone = data.phone; } if ('nsfw_allowed' in data) { @@ -86,48 +81,35 @@ class ClientUser extends User { * Email address of the client user. * @type {?string} */ - this.emailAddress = data.email; + this.email = data.email; } if ('bio' in data) { + /** + * About me (User) + * The user must be force fetched for this property to be present or be updated + * @type {?string} + */ this.bio = data.bio; } if ('pronouns' in data) { + /** + * Pronouns (User) + * The user must be force fetched for this property to be present or be updated + * @type {?string} + */ this.pronouns = data.pronouns; } - if (!this.friendNicknames?.size) { + if ('premium_type' in data) { /** - * The friend nicknames cache of the client user. - * @type {Collection} - * @private + * Premium types denote the level of premium a user has. + * @type {number} + * @see {@link https://discord-userdoccers.vercel.app/resources/user#premium-type} */ - this.friendNicknames = new Collection(); + this.premiumType = data.premium_type; } - - if (!this._intervalSamsungPresence) { - this._intervalSamsungPresence = setInterval(() => { - this.client.emit('debug', `Samsung Presence: ${this._packageName}`); - if (!this._packageName) return; - this.setSamsungActivity(this._packageName, 'UPDATE'); - }, 1000 * 60 * 10).unref(); - // 20 minutes max - } - } - - /** - * Patch note - * @param {Object} data Note data - * @private - */ - _patchNote(data) { - /** - * The notes cache of the client user. - * @type {Collection} - * @private - */ - this.notes = data ? new Collection(Object.entries(data)) : new Collection(); } /** @@ -165,7 +147,6 @@ class ClientUser extends User { * Changing usernames in Discord is heavily rate limited, with only 2 requests * every hour. Use this sparingly! * @param {string} username The new username - * @param {string} password The password of the account * @returns {Promise} * @example * // Set username @@ -173,14 +154,8 @@ class ClientUser extends User { * .then(user => console.log(`My new username is ${user.username}`)) * .catch(console.error); */ - setUsername(username, password) { - if (!password && !this.client.password) { - throw new Error('A password is required to change a username.'); - } - return this.edit({ - username, - password: this.client.password ? this.client.password : password, - }); + setUsername(username) { + return this.edit({ username }); } /** @@ -197,186 +172,6 @@ class ClientUser extends User { avatar = avatar && (await DataResolver.resolveImage(avatar)); return this.edit({ avatar }); } - /** - * Sets the banner of the logged in client. - * @param {?(BufferResolvable|Base64Resolvable)} banner The new banner - * @returns {Promise} - * @example - * // Set banner - * client.user.setBanner('./banner.png') - * .then(user => console.log(`New banner set!`)) - * .catch(console.error); - */ - async setBanner(banner) { - if (this.nitroType !== 'NITRO_BOOST') { - throw new Error('You must be a Nitro Boosted User to change your banner.'); - } - banner = banner && (await DataResolver.resolveImage(banner)); - return this.edit({ banner }); - } - - /** - * Set HyperSquad House - * @param {HypeSquadType} type - * * `LEAVE`: 0 - * * `HOUSE_BRAVERY`: 1 - * * `HOUSE_BRILLIANCE`: 2 - * * `HOUSE_BALANCE`: 3 - * @returns {Promise} - * @example - * // Set HyperSquad HOUSE_BRAVERY - * client.user.setHypeSquad(1); || client.user.setHypeSquad('HOUSE_BRAVERY'); - * // Leave - * client.user.setHypeSquad(0); - */ - async setHypeSquad(type) { - const id = typeof type === 'string' ? HypeSquadType[type] : type; - if (!id && id !== 0) throw new Error('Invalid HypeSquad type.'); - if (id !== 0) { - const data = await this.client.api.hypesquad.online.post({ - data: { house_id: id }, - }); - return data; - } else { - const data = await this.client.api.hypesquad.online.delete(); - return data; - } - } - - /** - * Set Accent color - * @param {ColorResolvable} color Color to set - * @returns {Promise} - */ - setAccentColor(color = null) { - return this.edit({ accent_color: color ? Util.resolveColor(color) : null }); - } - - /** - * Set discriminator - * @param {User.discriminator} discriminator It is #1234 - * @param {string} password The password of the account - * @returns {Promise} - */ - setDiscriminator(discriminator, password) { - if (this.nitroType == 'NONE') throw new Error('You must be a Nitro User to change your discriminator.'); - if (!password && !this.client.password) { - throw new Error('A password is required to change a discriminator.'); - } - return this.edit({ - discriminator, - username: this.username, - password: this.client.password ? this.client.password : password, - }); - } - - /** - * Set About me - * @param {string | null} bio Bio to set - * @returns {Promise} - */ - setAboutMe(bio = null) { - return this.edit({ - bio, - }); - } - - /** - * Change the email - * @param {Email} email Email to change - * @param {string} password Password of the account - * @returns {Promise} - */ - setEmail(email, password) { - throw new Error('This method is not available yet. Please use the official Discord client to change your email.'); - // eslint-disable-next-line no-unreachable - if (!password && !this.client.password) { - throw new Error('A password is required to change a email.'); - } - return this.edit({ - email, - password: this.client.password ? this.client.password : password, - }); - } - - /** - * Set new password - * @param {string} oldPassword Old password - * @param {string} newPassword New password to set - * @returns {Promise} - */ - setPassword(oldPassword, newPassword) { - if (!oldPassword && !this.client.password) { - throw new Error('A password is required to change a password.'); - } - if (!newPassword) throw new Error('New password is required.'); - return this.edit({ - password: this.client.password ? this.client.password : oldPassword, - new_password: newPassword, - }); - } - - /** - * Disable account - * @param {string} password Password of the account - * @returns {Promise} - */ - async disableAccount(password) { - if (!password && !this.client.password) { - throw new Error('A password is required to disable an account.'); - } - const data = await this.client.api.users['@me'].disable.post({ - data: { - password: this.client.password ? this.client.password : password, - }, - }); - return data; - } - - /** - * Set selfdeaf (Global) - * @param {boolean} status Whether or not the ClientUser is deafened - * @returns {boolean} - */ - setDeaf(status) { - if (typeof status !== 'boolean') throw new Error('Deaf status must be a boolean.'); - this.client.ws.broadcast({ - op: Opcodes.VOICE_STATE_UPDATE, - d: { self_deaf: status }, - }); - return status; - } - - /** - * Set selfmute (Global) - * @param {boolean} status Whether or not the ClientUser is muted - * @returns {boolean} - */ - setMute(status) { - if (typeof status !== 'boolean') throw new Error('Mute status must be a boolean.'); - this.client.ws.broadcast({ - op: Opcodes.VOICE_STATE_UPDATE, - d: { self_mute: status }, - }); - return status; - } - - /** - * Delete account. Warning: Cannot be changed once used! - * @param {string} password Password of the account - * @returns {Promise} - */ - async deleteAccount(password) { - if (!password && !this.client.password) { - throw new Error('A password is required to delete an account.'); - } - const data = await this.client.api.users['@me/delete'].post({ - data: { - password: this.client.password ? this.client.password : password, - }, - }); - return data; - } /** * Options for setting activities @@ -392,7 +187,7 @@ class ClientUser extends User { * @typedef {Object} PresenceData * @property {PresenceStatusData} [status] Status of the user * @property {boolean} [afk] Whether the user is AFK - * @property {ActivitiesOptions[]|CustomStatus[]|RichPresence[]|SpotifyRPC[]} [activities] Activity the user is playing + * @property {(ActivitiesOptions|CustomStatus|RichPresence|SpotifyRPC)[]} [activities] Activity the user is playing * @property {number|number[]} [shardId] Shard id(s) to have the activity set on */ @@ -451,15 +246,10 @@ class ClientUser extends User { * @see {@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/RichPresence.md} */ setActivity(name, options = {}) { - if (!name) { - return this.setPresence({ activities: [], shardId: options.shardId }); - } + if (!name) return this.setPresence({ activities: [], shardId: options.shardId }); const activity = Object.assign({}, options, typeof name === 'object' ? name : { name }); - return this.setPresence({ - activities: [activity], - shardId: activity.shardId, - }); + return this.setPresence({ activities: [activity], shardId: activity.shardId }); } /** @@ -472,6 +262,81 @@ class ClientUser extends User { return this.setPresence({ afk, shardId }); } + /** + * Sets the banner of the logged in client. + * @param {?(BufferResolvable|Base64Resolvable)} banner The new banner + * @returns {Promise} + * @example + * // Set banner + * client.user.setBanner('./banner.png') + * .then(user => console.log(`New banner set!`)) + * .catch(console.error); + */ + async setBanner(banner) { + banner = banner && (await DataResolver.resolveImage(banner)); + return this.edit({ banner }); + } + + /** + * Set HyperSquad House + * @param {string|number} type + * * `LEAVE`: 0 + * * `HOUSE_BRAVERY`: 1 + * * `HOUSE_BRILLIANCE`: 2 + * * `HOUSE_BALANCE`: 3 + * @returns {Promise} + * @example + * // Set HyperSquad HOUSE_BRAVERY + * client.user.setHypeSquad(1); || client.user.setHypeSquad('HOUSE_BRAVERY'); + * // Leave + * client.user.setHypeSquad(0); + */ + setHypeSquad(type) { + switch (type) { + case 'LEAVE': { + type = 0; + break; + } + case 'HOUSE_BRAVERY': { + type = 1; + break; + } + case 'HOUSE_BRILLIANCE': { + type = 2; + break; + } + case 'HOUSE_BALANCE': { + type = 3; + break; + } + } + if (type == 0) { + return this.client.api.hypesquad.online.delete(); + } else { + return this.client.api.hypesquad.online.post({ + data: { house_id: type }, + }); + } + } + + /** + * Set Accent color + * @param {ColorResolvable} color Color to set + * @returns {Promise} + */ + setAccentColor(color = null) { + return this.edit({ accent_color: color ? Util.resolveColor(color) : null }); + } + + /** + * Set About me + * @param {string} [bio=null] Bio to set + * @returns {Promise} + */ + setAboutMe(bio = null) { + return this.edit({ bio }); + } + /** * Create an invite [Friend Invites] * maxAge: 604800 | maxUses: 1 @@ -505,63 +370,10 @@ class ClientUser extends User { /** * Revoke all friend invites - * @returns {Promise>} + * @returns {Promise} */ - async revokeAllFriendInvites() { - const data = await this.client.api.users['@me'].invites.delete(); - const collection = new Collection(); - for (const invite of data) { - collection.set(invite.code, new Invite(this.client, invite)); - } - return collection; - } - - /** - * Get a collection of messages mentioning clientUser - * @param {number} [limit=25] Maximum number of messages to get - * @param {boolean} [mentionRoles=true] Whether or not to mention roles - * @param {boolean} [mentionEveryone=true] Whether or not to mention `@everyone` - * @returns {Promise>} - */ - async getMentions(limit = 25, mentionRoles = true, mentionEveryone = true) { - // https://canary.discord.com/api/v9/users/@me/mentions?limit=25&roles=true&everyone=true - const data = await this.client.api.users['@me'].mentions.get({ - query: { - limit, - roles: mentionRoles, - everyone: mentionEveryone, - }, - }); - const collection = new Collection(); - for (const msg of data) { - collection.set(msg.id, new Message(this.client, msg)); - } - return collection; - } - - /** - * Change Theme color - * @param {ColorResolvable} primary The primary color of the user's profile - * @param {ColorResolvable} accent The accent color of the user's profile - * @returns {Promise} - */ - async setThemeColors(primary, accent) { - if (!primary || !accent) throw new Error('PRIMARY_COLOR or ACCENT_COLOR are required.'); - // Check nitro - if (this.nitroType !== 'NITRO_BOOST') { - throw new Error_('NITRO_BOOST_REQUIRED', 'themeColors'); - } - primary = Util.resolveColor(primary) || this.themeColors[0]; - accent = Util.resolveColor(accent) || this.themeColors[1]; - const data_ = await this.client.api.users['@me'].profile.patch({ - data: { - theme_colors: [primary, accent], - }, - }); - this._ProfilePatch({ - user_profile: data_, - }); - return this; + revokeAllFriendInvites() { + return this.client.api.users['@me'].invites.delete(); } /** @@ -587,8 +399,8 @@ class ClientUser extends User { update: type, }, }); - if (type !== 'STOP') this._packageName = packageName; - else this._packageName = null; + if (type !== 'STOP') this.#packageName = packageName; + else this.#packageName = null; return this; } @@ -598,9 +410,7 @@ class ClientUser extends User { * @returns {Promise} */ stopRinging(channel) { - const id = this.client.channels.resolveId(channel); - if (!channel) return false; - return this.client.api.channels(id).call['stop-ringing'].post({ + return this.client.api.channels(this.client.channels.resolveId(channel)).call['stop-ringing'].post({ data: {}, }); } diff --git a/src/structures/GuildMember.js b/src/structures/GuildMember.js index 6756362..7574a78 100644 --- a/src/structures/GuildMember.js +++ b/src/structures/GuildMember.js @@ -8,7 +8,6 @@ const { Error } = require('../errors'); const GuildMemberRoleManager = require('../managers/GuildMemberRoleManager'); const GuildMemberFlags = require('../util/GuildMemberFlags'); const Permissions = require('../util/Permissions'); -const Util = require('../util/Util'); /** * @type {WeakSet} @@ -102,7 +101,6 @@ class GuildMember extends Base { this.communicationDisabledUntilTimestamp = data.communication_disabled_until && Date.parse(data.communication_disabled_until); } - if ('flags' in data) { /** * The flags of this member @@ -114,51 +112,6 @@ class GuildMember extends Base { } } - _ProfilePatch(data) { - if ('accent_color' in data) { - /** - * The member's accent color - * The user must be force fetched for this property to be present or be updated - * @type {?number} - */ - this.accentColor = data.accent_color; - } - if ('banner' in data) { - /** - * The member's banner hash - * The user must be force fetched for this property to be present or be updated - * @type {?string} - */ - this.banner = data.banner; - } - if ('bio' in data) { - /** - * The member's biography (About me) - * The user must be force fetched for this property to be present or be updated - * @type {?string} - */ - this.bio = data.bio; - } - if ('theme_colors' in data) { - /** - * The member's theme colors (Profile theme) [Primary, Accent] - * The user must be force fetched for this property to be present or be updated - * @type {?Array} - */ - this.themeColors = data.theme_colors; - } - } - - /** - * The hexadecimal version of the user theme color, with a leading hash [Primary, Accent] - * The user must be force fetched for this property to be present or be updated - * @type {?Array} - * @readonly - */ - get hexThemeColor() { - return this.themeColors?.map(c => `#${c.toString(16).padStart(6, '0')}`) || null; - } - _clone() { const clone = super._clone(); clone._roles = this._roles.slice(); @@ -232,21 +185,6 @@ class GuildMember extends Base { return this.client.rest.cdn.GuildMemberAvatar(this.guild.id, this.id, this.avatar, format, size, dynamic); } - /** - * A link to the user's banner. - * This method will throw an error if called before the user is force fetched Profile. - * See {@link GuildMember#banner} for more info - * @param {ImageURLOptions} [options={}] Options for the Image URL - * @returns {?string} - */ - bannerURL({ format, size, dynamic } = {}) { - if (typeof this.banner === 'undefined') { - throw new Error('USER_BANNER_NOT_FETCHED'); - } - if (!this.banner) return null; - return this.client.rest.cdn.GuildMemberBanner(this.guild.id, this.id, this.banner, format, size, dynamic); - } - /** * A link to the member's guild avatar if they have one. * Otherwise, a link to their {@link User#displayAvatarURL} will be returned. @@ -444,79 +382,6 @@ class GuildMember extends Base { return this.edit({ flags, reason }); } - /** - * Sets the guild avatar of the logged in client. - * @param {?(BufferResolvable|Base64Resolvable)} avatar The new avatar - * @returns {Promise} - */ - setAvatar(avatar) { - if (this.user.id !== this.client.user.id) { - throw new Error('ONLY_ME'); - } - if (this.client.user.nitroType !== 'NITRO_BOOST') { - throw new Error('NITRO_BOOST_REQUIRED', 'avatar'); - } - return this.edit({ avatar }); - } - - /** - * Sets the guild banner of the logged in client. - * @param {?(BufferResolvable|Base64Resolvable)} banner The new banner - * @returns {Promise} - */ - setBanner(banner) { - if (this.user.id !== this.client.user.id) { - throw new Error('ONLY_ME'); - } - if (this.client.user.nitroType !== 'NITRO_BOOST') { - throw new Error('NITRO_BOOST_REQUIRED', 'banner'); - } - return this.edit({ banner }); - } - - /** - * Set Guild About me - * @param {string | null} bio Bio to set - * @returns {Promise} - */ - setAboutMe(bio = null) { - if (this.user.id !== this.client.user.id) { - throw new Error('ONLY_ME'); - } - if (this.client.user.nitroType !== 'NITRO_BOOST') { - throw new Error('NITRO_BOOST_REQUIRED', 'bio'); - } - return this.edit({ bio }); - } - - /** - * Change Theme color - * @param {ColorResolvable} primary The primary color of the user's profile - * @param {ColorResolvable} accent The accent color of the user's profile - * @returns {Promise} - */ - async setThemeColors(primary, accent) { - if (this.user.id !== this.client.user.id) { - throw new Error('ONLY_ME'); - } - if (!primary || !accent) throw new Error('PRIMARY_COLOR or ACCENT_COLOR are required.'); - // Check nitro - if (this.nitroType !== 'NITRO_BOOST') { - throw new Error('NITRO_BOOST_REQUIRED', 'themeColors'); - } - primary = Util.resolveColor(primary) || this.themeColors ? this.themeColors[0] : 0; - accent = Util.resolveColor(accent) || this.themeColors ? this.themeColors[1] : 0; - const data_ = await this.client.api.guilds[this.guild.id].profile['@me'].patch({ - data: { - theme_colors: [primary, accent], - }, - }); - this._ProfilePatch({ - guild_member_profile: data_, - }); - return this; - } - /** * Creates a DM channel between the client and this member. * @param {boolean} [force=false] Whether to skip the cache check and request the API @@ -619,8 +484,6 @@ class GuildMember extends Base { this.joinedTimestamp === member.joinedTimestamp && this.nickname === member.nickname && this.avatar === member.avatar && - this.accentColor === member.accentColor && - this.bio === member.bio && this.pending === member.pending && this.communicationDisabledUntilTimestamp === member.communicationDisabledUntilTimestamp && this.flags.equals(member.flags) && @@ -629,14 +492,6 @@ class GuildMember extends Base { ); } - /** - * Get profile guildMember - * @returns {Promise} - */ - getProfile() { - return this.user.getProfile(this.guild.id); - } - /** * When concatenated with a string, this automatically returns the user's mention instead of the GuildMember object. * @returns {string} @@ -659,6 +514,33 @@ class GuildMember extends Base { json.displayAvatarURL = this.displayAvatarURL(); return json; } + + /** + * Sets the guild avatar of the logged in client. + * @param {?(BufferResolvable|Base64Resolvable)} avatar The new avatar + * @returns {Promise} + */ + setAvatar(avatar) { + return this.edit({ avatar }); + } + + /** + * Sets the guild banner of the logged in client. + * @param {?(BufferResolvable|Base64Resolvable)} banner The new banner + * @returns {Promise} + */ + setBanner(banner) { + return this.edit({ banner }); + } + + /** + * Set Guild About me + * @param {string | null} bio Bio to set + * @returns {Promise} + */ + setAboutMe(bio = null) { + return this.edit({ bio }); + } } /** diff --git a/src/structures/Invite.js b/src/structures/Invite.js index e26960d..6e5b9c5 100644 --- a/src/structures/Invite.js +++ b/src/structures/Invite.js @@ -1,12 +1,11 @@ 'use strict'; -const Buffer = require('node:buffer').Buffer; const Base = require('./Base'); const { GuildScheduledEvent } = require('./GuildScheduledEvent'); const IntegrationApplication = require('./IntegrationApplication'); const InviteStageInstance = require('./InviteStageInstance'); const { Error } = require('../errors'); -const { ChannelTypes, Endpoints } = require('../util/Constants'); +const { Endpoints } = require('../util/Constants'); const Permissions = require('../util/Permissions'); // TODO: Convert `inviter` and `channel` in this class to a getter. @@ -179,7 +178,7 @@ class Invite extends Base { this.channel = this.client.channels.cache.get(data.channel_id); } - if ('channel' in data && data.channel) { + if ('channel' in data) { /** * The channel this invite is for * @type {Channel} @@ -317,53 +316,6 @@ class Invite extends Base { valueOf() { return this.code; } - - /** - * Join this Guild using this invite. - * @param {boolean} [autoVerify] Whether to automatically verify member - * @returns {Promise} - * @example - * await client.fetchInvite('code').then(async invite => { - * await invite.acceptInvite(); - * }); - */ - async acceptInvite(autoVerify = false) { - if (!this.guild) throw new Error('INVITE_NO_GUILD'); - if (this.client.guilds.cache.get(this.guild.id)) return this.guild; - const dataHeader = { - location: 'Join Guild', - location_guild_id: this.guild?.id, - location_channel_id: this.channelId, - location_channel_type: ChannelTypes[this.channel?.type] ?? 0, - }; - await this.client.api.invites(this.code).post({ - data: { - session_id: this.client.sessionId, - }, - headers: { - 'X-Context-Properties': Buffer.from(JSON.stringify(dataHeader), 'utf8').toString('base64'), - }, - }); - const guild = this.client.guilds.cache.get(this.guild.id); - /* - // - if (autoVerify) { - console.warn('Feature is under maintenance - Invite#acceptInvite(true)'); - } - */ - if (autoVerify) { - const getForm = await this.client.api - .guilds(this.guild.id) - ['member-verification'].get({ query: { with_guild: false, invite_code: this.code } }) - .catch(() => {}); - if (!getForm) return guild; - const form = Object.assign(getForm.form_fields[0], { response: true }); - // Respond to the form - // https://discord.com/api/v9/guilds/:id/requests/@me - await this.client.api.guilds(this.guild.id).requests['@me'].put({ data: { form_fields: [form] } }); - } - return guild; - } } /** diff --git a/src/structures/Presence.js b/src/structures/Presence.js index 9f50945..f7352e0 100644 --- a/src/structures/Presence.js +++ b/src/structures/Presence.js @@ -91,7 +91,7 @@ class Presence extends Base { if ('activities' in data) { /** * The activities of this presence - * @type {Activity[]} + * @type {(Activity|CustomStatus|SpotifyRPC|RichPresence)[]} */ this.activities = data.activities.map(activity => { if (fromClient === true) { diff --git a/src/structures/RichPresence.js b/src/structures/RichPresence.js index 159d661..b649211 100644 --- a/src/structures/RichPresence.js +++ b/src/structures/RichPresence.js @@ -1,11 +1,8 @@ 'use strict'; +const { randomUUID } = require('node:crypto'); const { ActivityTypes } = require('../util/Constants'); const { resolvePartialEmoji } = require('../util/Util'); -// eslint-disable-next-line -const getUUID = () => - ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, a => (a ^ ((Math.random() * 16) >> (a / 4))).toString(16)); -// Function check url valid (ok copilot) // eslint-disable-next-line const checkUrl = url => { try { @@ -351,7 +348,7 @@ https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Documents/RichP if (!party.max || typeof party.max != 'number') throw new Error('Party must have max number'); if (!party.current || typeof party.current != 'number') throw new Error('Party must have current'); if (party.current > party.max) throw new Error('Party current must be less than max number'); - if (!party.id || typeof party.id != 'string') party.id = getUUID(); + if (!party.id || typeof party.id != 'string') party.id = randomUUID(); this.party = { size: [party.current, party.max], id: party.id, @@ -488,16 +485,6 @@ https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Documents/RichP } } - /** - * Get random UUID string (Util) - * @returns {string} - */ - static getUUID() { - return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, a => - (a ^ ((Math.random() * 16) >> (a / 4))).toString(16), - ); - } - /** * Get Assets from a RichPresence (Util) * @param {Client} client Discord Client @@ -718,5 +705,4 @@ module.exports = { CustomStatus, RichPresence, SpotifyRPC, - getUUID, }; diff --git a/src/structures/User.js b/src/structures/User.js index 4164bb1..a797220 100644 --- a/src/structures/User.js +++ b/src/structures/User.js @@ -1,12 +1,10 @@ 'use strict'; -const { Collection } = require('@discordjs/collection'); const Base = require('./Base'); -const ClientApplication = require('./ClientApplication'); const VoiceState = require('./VoiceState'); const TextBasedChannel = require('./interfaces/TextBasedChannel'); const { Error } = require('../errors'); -const { RelationshipTypes, NitroType } = require('../util/Constants'); +const { RelationshipTypes } = require('../util/Constants'); const SnowflakeUtil = require('../util/SnowflakeUtil'); const UserFlags = require('../util/UserFlags'); const Util = require('../util/Util'); @@ -17,8 +15,9 @@ const Util = require('../util/Util'); * @extends {Base} */ class User extends Base { - constructor(client, data, application) { + constructor(client, data) { super(client); + /** * The user's id * @type {Snowflake} @@ -31,52 +30,6 @@ class User extends Base { this.flags = null; - /** - * An array of object (connected accounts), containing the following properties: - * @property {string} type The account type (twitch, youtube, etc) - * @property {string} name The account name - * @property {string} id The account id - * @property {boolean} verified Whether the account is verified - * @see {@link https://discord.com/developers/docs/resources/user#connection-object} - * @typedef {Object} ConnectionAccount - */ - - /** - * Accounts connected to this user - * The user must be force fetched for this property to be present or be updated - * @type {?ConnectionAccount[]} - */ - this.connectedAccounts = []; - /** - * Time that User has nitro (Unix Timestamp) - * The user must be force fetched for this property to be present or be updated - * @type {?number} - */ - this.premiumSince = null; - /** - * Time that User has nitro and boost server (Unix Timestamp) - * @type {?number} - */ - this.premiumGuildSince = null; - /** - * About me (User) - * The user must be force fetched for this property to be present or be updated - * @type {?string} - */ - this.bio = null; - /** - * Pronouns (User) - * The user must be force fetched for this property to be present or be updated - * @type {?string} - */ - this.pronouns = null; - this._mutualGuilds = []; - /** - * [Bot] Application - * @type {?ClientApplication} - */ - this.application = application ? new ClientApplication(this.client, application, this) : null; - this._partial = true; this._patch(data); } @@ -107,10 +60,6 @@ class User extends Base { * @type {?boolean} */ this.bot = Boolean(data.bot); - if (this.bot === true && !this.application) { - this.application = new ClientApplication(this.client, { id: this.id }, this); - this.botInGuildsCount = null; - } } else if (!this.partial && typeof this.bot !== 'boolean') { this.bot = false; } @@ -147,6 +96,17 @@ class User extends Base { this.banner ??= undefined; } + if ('banner_color' in data) { + /** + * The user banner's hex + * The user must be force fetched for this property to be present or be updated + * @type {?string} + */ + this.bannerColor = data.banner_color; + } else if (this.bannerColor !== null) { + this.bannerColor ??= undefined; + } + if ('accent_color' in data) { /** * The base 10 accent color of the user's banner @@ -176,252 +136,23 @@ class User extends Base { this.flags = new UserFlags(data.public_flags); } - if ('approximate_guild_count' in data) { - /** - * Check how many guilds the bot is in (Probably only approximate) (application.fetch() first) - * @type {?number} - */ - this.botInGuildsCount = data.approximate_guild_count; - } - - if ('avatar_decoration' in data) { + if ('avatar_decoration_data' in data) { /** * The user avatar decoration's hash * @type {?string} */ - this.avatarDecoration = data.avatar_decoration; + this.avatarDecoration = data.avatar_decoration_data?.asset; + /** + * The ID of the avatar decoration's SKU + * @type {?Snowflake} + */ + this.avatarDecorationSKUId = data.avatar_decoration_data?.sku_id; } else { this.avatarDecoration ??= null; + this.avatarDecorationSKUId ??= null; } } - /** - * This user is on the same servers as Client User - * The user must be force fetched for this property to be present or be updated - * @type {Collection} - * @readonly - */ - get mutualGuilds() { - return new Collection(this._mutualGuilds.map(obj => [obj.id, obj])); - } - - /** - * Get all mutual friends (Client -> User) - * @type {Promise>} - * @readonly - */ - get mutualFriends() { - // eslint-disable-next-line no-async-promise-executor - return new Promise(async resolve => { - const all = new Collection(); - if (this.bot || this.client.user.id === this.id) return resolve(all); - const data = await this.client.api.users(this.id).relationships.get(); - for (const u of data) { - all.set(u.id, this.client.users._add(u)); - } - return resolve(all); - }); - } - - /** - * Check relationship status (Client -> User) - * @type {RelationshipTypes} - * @readonly - */ - get relationships() { - const i = this.client.relationships.cache.get(this.id) ?? 0; - return RelationshipTypes[parseInt(i)]; - } - - /** - * Check note - * @type {?string} - * @readonly - */ - get note() { - return this.client.user.notes.get(this.id); - } - - /** - * Get friend nickname - * @type {?string} - * @readonly - */ - get nickname() { - return this.client.user.friendNicknames.get(this.id); - } - - /** - * The voice state of this member - * @type {VoiceState} - * @readonly - */ - get voice() { - return ( - this.client.voiceStates.cache.get(this.id) ?? - this.client.guilds.cache.find(g => g?.voiceStates?.cache?.get(this.id))?.voiceStates?.cache?.get(this.id) ?? - new VoiceState({ client: this.client }, { user_id: this.id }) - ); - } - - _ProfilePatch(data) { - if (!data) return; - - this._partial = false; - - if (data.connected_accounts.length > 0) { - this.connectedAccounts = data.connected_accounts; - } - - if ('premium_since' in data) { - const date = new Date(data.premium_since); - this.premiumSince = date.getTime(); - } - - if ('premium_guild_since' in data) { - const date = new Date(data.premium_guild_since); - this.premiumGuildSince = date.getTime(); - } - - if ('premium_type' in data) { - const nitro = NitroType[data.premium_type ?? 0]; - /** - * Nitro type of the user. - * @type {NitroType} - */ - this.nitroType = nitro ?? `UNKNOWN_TYPE_${data.premium_type}`; - } - - if ('user_profile' in data) { - this.bio = data.user_profile.bio; - /** - * The user's theme colors (Profile theme) [Primary, Accent] - * The user must be force fetched for this property to be present or be updated - * @type {?Array} - */ - this.themeColors = data.user_profile.theme_colors; - - this.pronouns = data.user_profile.pronouns; - } - - if ('guild_member_profile' in data && 'guild_member' in data) { - const guild = this.client.guilds.cache.get(data.guild_member_profile.guild_id); - const member = guild?.members._add(data.guild_member); - member._ProfilePatch(data.guild_member_profile); - } - - if ('application' in data) { - this.application = new ClientApplication(this.client, data.application, this); - } - - if ('badges' in data) { - /** - * @callback BadgeIcon - * @returns {string} - */ - - /** - * @typedef {Object} UserBadge - * @property {string} id The id of the badge - * @property {string} description The description of the badge - * @property {string} icon The icon hash of the badge - * @property {?string} link The link of the badge - * @property {BadgeIcon} iconURL The iconURL of the badge - */ - - /** - * User badges (Boost, Slash, AutoMod, etc.) - * @type {?Array} - */ - this.badges = data.badges.map(o => ({ ...o, iconURL: () => this.client.rest.cdn.BadgeIcon(o.icon) })); - } - - if ('guild_badges' in data) { - // Unknown - } - - if ('mutual_guilds' in data) { - this._mutualGuilds = data.mutual_guilds; - } - } - - /** - * Get profile from Discord, if client is in a server with the target. - * @type {User} - * @param {Snowflake | null} guildId The guild id to get the profile from - * @returns {Promise} - */ - async getProfile(guildId) { - if (this.client.bot) throw new Error('INVALID_BOT_METHOD'); - const query = guildId - ? { - with_mutual_guilds: true, - guild_id: guildId, - } - : { - with_mutual_guilds: true, - }; - const data = await this.client.api.users(this.id).profile.get({ - query, - }); - this._ProfilePatch(data); - return this; - } - - /** - * Friends the user [If incoming request] - * @type {boolean} - * @returns {Promise} - */ - setFriend() { - return this.client.relationships.addFriend(this); - } - - /** - * Changes the nickname of the friend - * @param {?string} nickname The nickname to change - * @type {boolean} - * @returns {Promise} - */ - setNickname(nickname) { - return this.client.relationships.setNickname(this.id, nickname); - } - - /** - * Send Friend Request to the user - * @type {boolean} - * @returns {Promise} - */ - sendFriendRequest() { - return this.client.relationships.sendFriendRequest(this.username, this.discriminator); - } - /** - * Blocks the user - * @type {boolean} - * @returns {Promise} - */ - setBlock() { - return this.client.relationships.addBlocked(this); - } - - /** - * Removes the user from your blocks list - * @type {boolean} - * @returns {Promise} - */ - unBlock() { - return this.client.relationships.deleteBlocked(this); - } - - /** - * Removes the user from your friends list - * @type {boolean} - * @returns {Promise} - */ - unFriend() { - return this.client.relationships.deleteFriend(this); - } - /** * Whether this User is a partial * @type {boolean} @@ -508,40 +239,11 @@ class User extends Base { * @returns {?string} */ bannerURL({ format, size, dynamic } = {}) { - if (typeof this.banner === 'undefined') { - throw new Error('USER_BANNER_NOT_FETCHED'); - } + if (typeof this.banner === 'undefined') throw new Error('USER_BANNER_NOT_FETCHED'); if (!this.banner) return null; return this.client.rest.cdn.Banner(this.id, this.banner, format, size, dynamic); } - /** - * Ring the user's phone / PC (call) - * @returns {Promise} - * @deprecated - */ - ring() { - if (this.relationships !== 'FRIEND') return Promise.reject(new Error('USER_NOT_FRIEND')); - if (!this.client.user.voice?.channelId || !this.client.callVoice) { - return Promise.reject(new Error('CLIENT_NO_CALL')); - } - return this.client.api.channels(this.dmChannel.id).call.ring.post({ - data: { - recipients: [this.id], - }, - }); - } - - /** - * The hexadecimal version of the user theme color, with a leading hash [Primary, Accent] - * The user must be force fetched for this property to be present or be updated - * @type {?Array} - * @readonly - */ - get hexThemeColor() { - return this.themeColors?.map(c => `#${c.toString(16).padStart(6, '0')}`) || null; - } - /** * The tag of this user * This user's username, or their legacy tag (e.g. `hydrabolt#0001`) @@ -609,8 +311,7 @@ class User extends Base { this.avatar === user.avatar && this.flags?.bitfield === user.flags?.bitfield && this.banner === user.banner && - this.accentColor === user.accentColor && - this.bio === user.bio + this.accentColor === user.accentColor ); } @@ -652,6 +353,28 @@ class User extends Base { return this.client.users.fetch(this.id, { force }); } + /** + * Returns a user profile object for a given user ID. + * This endpoint requires one of the following: + * - The user is a bot + * - The user shares a mutual guild with the current user + * - The user is a friend of the current user + * - The user is a friend suggestion of the current user + * - The user has an outgoing friend request to the current user + * @param {Snowflake} [guildId] The guild ID to get the user's member profile in + * @returns {Promise} + * @see {@link https://discord-userdoccers.vercel.app/resources/user#response-body} + */ + getProfile(guildId) { + return this.client.api.users(this.id).profile.get({ + query: { + with_mutual_guilds: true, + with_mutual_friends_count: true, + guild_id: guildId, + }, + }); + } + /** * When concatenated with a string, this automatically returns the user's mention instead of the User object. * @returns {string} @@ -680,29 +403,85 @@ class User extends Base { } /** - * Set note to user - * @param {string} note Note to set - * @returns {Promise} + * The function updates the note of a user and returns the updated user. + * @param {string|null|undefined} [note=null] - The `note` parameter is the new value that you want to set for the note of the + * user. It is an optional parameter and its default value is `null`. + * @returns {Promise} The `setNote` method is returning the `User` object. */ async setNote(note = null) { - await this.client.api.users['@me'].notes(this.id).put({ data: { note } }); + await this.client.notes.updateNote(this.id, note); return this; } /** - * Get presence (~ v12) - * @returns {Promise} + * The function returns the note associated with a specific client ID from a cache. + * @type {?string} The note that corresponds to the given id. */ - async presenceFetch() { - let data = null; - await Promise.all( - this.client.guilds.cache.map(async guild => { - const res_ = await guild.presences.resolve(this.id); - if (res_) return (data = res_); - return true; - }), + get note() { + return this.client.notes.cache.get(this.id); + } + + /** + * The voice state of this member + * @type {VoiceState} + * @readonly + */ + get voice() { + return ( + this.client.voiceStates.cache.get(this.id) ?? + this.client.guilds.cache.find(g => g?.voiceStates?.cache?.get(this.id))?.voiceStates?.cache?.get(this.id) ?? + new VoiceState({ client: this.client }, { user_id: this.id }) ); - return data; + } + + /** + * Ring the user's phone / PC (call) + * @returns {Promise} + * @deprecated + */ + ring() { + return this.client.api.channels(this.dmChannel.id).call.ring.post({ + data: { + recipients: [this.id], + }, + }); + } + + /** + * Send Friend Request to the user + * @type {boolean} + * @returns {Promise} + */ + sendFriendRequest() { + return this.client.relationships.sendFriendRequest({ user: this }); + } + + /** + * Unblock / Unfriend / Cancels a friend request + * @type {boolean} + * @returns {Promise} + */ + deleteRelationship() { + return this.client.relationships.deleteRelationship(this); + } + + /** + * Check relationship status (Client -> User) + * @type {RelationshipTypes} + * @readonly + */ + get relationship() { + const i = this.client.relationships.cache.get(this.id) ?? 0; + return RelationshipTypes[parseInt(i)]; + } + + /** + * Get friend nickname + * @type {?string} + * @readonly + */ + get friendNickname() { + return this.client.relationships.friendNicknames.get(this.id); } } diff --git a/src/util/Constants.js b/src/util/Constants.js index f3fd33f..99d4b03 100644 --- a/src/util/Constants.js +++ b/src/util/Constants.js @@ -1,12 +1,6 @@ 'use strict'; -/* Not used: -const process = require('node:process'); -const Package = (exports.Package = require('../../package.json')); -*/ -const { Error, RangeError, TypeError } = require('../errors'); -exports.defaultUA = - 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) discord/1.0.9023 Chrome/108.0.5359.215 Electron/22.3.26 Safari/537.36'; +const { Error, RangeError, TypeError } = require('../errors'); /** * Max bulk deletable message age @@ -14,121 +8,8 @@ exports.defaultUA = */ exports.MaxBulkDeletableMessageAge = 1_209_600_000; -/** - * API captcha solver - * * `2captcha` - 2captcha.com - * * `capmonster` - capmonster.cloud - * @typedef {string[]} captchaServices - */ -exports.captchaServices = ['2captcha', 'capmonster', 'custom']; - -/** - * Automatically scan and delete direct messages you receive that contain explicit media content. - * * `NOT_SCAN` - Direct messages will not be scanned for explicit content. - * * `NOT_FRIEND` - Scan direct messages from everyone unless they are a friend. - * * `EVERYONE` - Scan direct messages from everyone. - * @typedef {string} DMScanLevel - */ -exports.DMScanLevel = createEnum(['NOT_SCAN', 'NOT_FRIEND', 'EVERYONE']); - -/** - * This controls when stickers animate: - * * `ALWAYS` - Always animate. - * * `INTERACTION` - On the desktop client, stickers will animate on hover or focus. On mobile clients, stickers will animate on long-press. - * * `NEVER` - Never animate. - * @typedef {string} stickerAnimationMode - */ -exports.stickerAnimationMode = createEnum(['ALWAYS', 'INTERACTION', 'NEVER']); - -/** - * All available nitro types: - * * `NONE` - None - * * `NITRO_CLASSIC` - Nitro Classic - * * `NITRO_BOOST` - Nitro - * * `NITRO_BASIC` - Nitro Basic - * * `UNKNOWN` - Unknown - * @typedef {string} NitroType - * @see {@link https://discord.com/developers/docs/resources/user#user-object-premium-types} - */ -exports.NitroType = createEnum(['NONE', 'NITRO_CLASSIC', 'NITRO_BOOST', 'NITRO_BASIC']); - -/** - * All available HypeSquad types: - * * `LEAVE` - None - * * `HOUSE_BRAVERY` - HypeSquad Bravery - * * `HOUSE_BRILLIANCE` - HypeSquad Brilliance - * * `HOUSE_BALANCE` - HypeSquad Balance - * @typedef {string} HypeSquadType - */ -exports.HypeSquadType = createEnum(['LEAVE', 'HOUSE_BRAVERY', 'HOUSE_BRILLIANCE', 'HOUSE_BALANCE']); - -/** - * All locale codes: - * * `DANISH` - * * `GERMAN` - * * `ENGLISH_UK` - * * `ENGLISH_US` - * * `SPANISH` - * * `FRENCH` - * * `CROATIAN` - * * `ITALIAN` - * * `LITHUANIAN` - * * `HUNGARIAN` - * * `DUTCH` - * * `NORWEGIAN` - * * `POLISH` - * * `BRAZILIAN_PORTUGUESE` - * * `ROMANIA_ROMANIAN` - * * `FINNISH` - * * `SWEDISH` - * * `VIETNAMESE` - * * `TURKISH` - * * `CZECH` - * * `GREEK` - * * `BULGARIAN` - * * `RUSSIAN` - * * `UKRAINIAN` - * * `HINDI` - * * `THAI` - * * `CHINA_CHINESE` - * * `JAPANESE` - * * `TAIWAN_CHINESE` - * * `KOREAN` - * @typedef {Object} localeSetting - * @see {@link https://discord.com/developers/docs/reference#locales} - */ -exports.localeSetting = { - da: 'DANISH', - de: 'GERMAN', - 'en-GB': 'ENGLISH_UK', - 'en-US': 'ENGLISH_US', - 'es-ES': 'SPANISH', - fr: 'FRENCH', - hr: 'CROATIAN', - it: 'ITALIAN', - lt: 'LITHUANIAN', - hu: 'HUNGARIAN', - nl: 'DUTCH', - no: 'NORWEGIAN', - pl: 'POLISH', - 'pt-BR': 'BRAZILIAN_PORTUGUESE', - ro: 'ROMANIA_ROMANIAN', - fi: 'FINNISH', - 'sv-SE': 'SWEDISH', - vi: 'VIETNAMESE', - tr: 'TURKISH', - cs: 'CZECH', - el: 'GREEK', - bg: 'BULGARIAN', - ru: 'RUSSIAN', - uk: 'UKRAINIAN', - hi: 'HINDI', - th: 'THAI', - 'zh-CN': 'CHINA_CHINESE', - ja: 'JAPANESE', - 'zh-TW': 'TAIWAN_CHINESE', - ko: 'KOREAN', -}; +exports.UserAgent = + 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) discord/1.0.9023 Chrome/108.0.5359.215 Electron/22.3.26 Safari/537.36'; /** * The types of WebSocket error codes: @@ -197,10 +78,6 @@ exports.Endpoints = { if (dynamic && hash.startsWith('a_')) format = 'gif'; return makeImageUrl(`${root}/guilds/${guildId}/users/${memberId}/avatars/${hash}`, { format, size }); }, - GuildMemberBanner: (guildId, memberId, hash, format = 'webp', size, dynamic = false) => { - if (dynamic && hash.startsWith('a_')) format = 'gif'; - return makeImageUrl(`${root}/guilds/${guildId}/users/${memberId}/banners/${hash}`, { format, size }); - }, Banner: (id, hash, format, size, dynamic = false) => { if (dynamic && hash.startsWith('a_')) format = 'gif'; return makeImageUrl(`${root}/banners/${id}/${hash}`, { format, size }); @@ -227,14 +104,11 @@ exports.Endpoints = { makeImageUrl(`${root}/role-icons/${roleId}/${hash}`, { size, format }), guildScheduledEventCover: (scheduledEventId, coverHash, format, size) => makeImageUrl(`${root}/guild-events/${scheduledEventId}/${coverHash}`, { size, format }), - // Test only - BadgeIcon: hash => makeImageUrl(`${root}/badge-icons/${hash}`, { format: 'png' }), }; }, invite: (root, code, eventId) => (eventId ? `${root}/${code}?event=${eventId}` : `${root}/${code}`), scheduledEvent: (root, guildId, eventId) => `${root}/${guildId}/${eventId}`, - botGateway: '/gateway/bot', - userGateway: '/gateway', + botGateway: '/gateway', }; /** @@ -348,7 +222,6 @@ exports.Opcodes = { * * API_RESPONSE: apiResponse * * API_REQUEST: apiRequest * * CLIENT_READY: ready - * * APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE: applicationCommandAutocompleteResponse * * APPLICATION_COMMAND_CREATE: applicationCommandCreate (deprecated) * * APPLICATION_COMMAND_DELETE: applicationCommandDelete (deprecated) * * APPLICATION_COMMAND_UPDATE: applicationCommandUpdate (deprecated) @@ -357,9 +230,6 @@ exports.Opcodes = { * * AUTO_MODERATION_RULE_CREATE: autoModerationRuleCreate * * AUTO_MODERATION_RULE_DELETE: autoModerationRuleDelete * * AUTO_MODERATION_RULE_UPDATE: autoModerationRuleUpdate - * * CALL_CREATE: callCreate - * * CALL_DELETE: callDelete - * * CALL_UPDATE: callUpdate * * GUILD_AVAILABLE: guildAvailable * * GUILD_CREATE: guildCreate * * GUILD_DELETE: guildDelete @@ -385,9 +255,6 @@ exports.Opcodes = { * * CHANNEL_DELETE: channelDelete * * CHANNEL_UPDATE: channelUpdate * * CHANNEL_PINS_UPDATE: channelPinsUpdate - * * CHANNEL_RECIPIENT_REMOVE: channelRecipientRemove - * * CHANNEL_RECIPIENT_ADD: channelRecipientAdd - * * MESSAGE_ACK: messageAck * * MESSAGE_CREATE: messageCreate * * MESSAGE_DELETE: messageDelete * * MESSAGE_UPDATE: messageUpdate @@ -408,7 +275,6 @@ exports.Opcodes = { * * VOICE_STATE_UPDATE: voiceStateUpdate * * TYPING_START: typingStart * * WEBHOOKS_UPDATE: webhookUpdate - * * INTERACTION_CREATE: interactionCreate * * ERROR: error * * WARN: warn * * DEBUG: debug @@ -432,6 +298,16 @@ exports.Opcodes = { * * GUILD_SCHEDULED_EVENT_USER_ADD: guildScheduledEventUserAdd * * GUILD_SCHEDULED_EVENT_USER_REMOVE: guildScheduledEventUserRemove * * GUILD_AUDIT_LOG_ENTRY_CREATE: guildAuditLogEntryCreate + * * UNHANDLED_PACKET: unhandledPacket + * * RELATIONSHIP_ADD: relationshipAdd + * * RELATIONSHIP_REMOVE: relationshipRemove + * * RELATIONSHIP_UPDATE: relationshipUpdate + * * CHANNEL_RECIPIENT_ADD: channelRecipientAdd + * * CHANNEL_RECIPIENT_REMOVE: channelRecipientRemove + * * INTERACTION_MODAL_CREATE: interactionModalCreate + * * CALL_CREATE: callCreate + * * CALL_UPDATE: callUpdate + * * CALL_DELETE: callDelete * @typedef {Object} Events */ exports.Events = { @@ -440,7 +316,6 @@ exports.Events = { API_RESPONSE: 'apiResponse', API_REQUEST: 'apiRequest', CLIENT_READY: 'ready', - APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE: 'applicationCommandAutocompleteResponse', APPLICATION_COMMAND_CREATE: 'applicationCommandCreate', APPLICATION_COMMAND_DELETE: 'applicationCommandDelete', APPLICATION_COMMAND_UPDATE: 'applicationCommandUpdate', @@ -449,21 +324,16 @@ exports.Events = { AUTO_MODERATION_RULE_CREATE: 'autoModerationRuleCreate', AUTO_MODERATION_RULE_DELETE: 'autoModerationRuleDelete', AUTO_MODERATION_RULE_UPDATE: 'autoModerationRuleUpdate', - CALL_CREATE: 'callCreate', - CALL_DELETE: 'callDelete', - CALL_UPDATE: 'callUpdate', GUILD_AVAILABLE: 'guildAvailable', GUILD_CREATE: 'guildCreate', GUILD_DELETE: 'guildDelete', GUILD_UPDATE: 'guildUpdate', - GUILD_APPLICATION_COMMANDS_UPDATE: 'guildApplicationCommandUpdate', GUILD_UNAVAILABLE: 'guildUnavailable', GUILD_MEMBER_ADD: 'guildMemberAdd', GUILD_MEMBER_REMOVE: 'guildMemberRemove', GUILD_MEMBER_UPDATE: 'guildMemberUpdate', GUILD_MEMBER_AVAILABLE: 'guildMemberAvailable', GUILD_MEMBERS_CHUNK: 'guildMembersChunk', - GUILD_MEMBER_LIST_UPDATE: 'guildMemberListUpdate', GUILD_INTEGRATIONS_UPDATE: 'guildIntegrationsUpdate', GUILD_ROLE_CREATE: 'roleCreate', GUILD_ROLE_DELETE: 'roleDelete', @@ -479,9 +349,6 @@ exports.Events = { CHANNEL_DELETE: 'channelDelete', CHANNEL_UPDATE: 'channelUpdate', CHANNEL_PINS_UPDATE: 'channelPinsUpdate', - CHANNEL_RECIPIENT_REMOVE: 'channelRecipientRemove', - CHANNEL_RECIPIENT_ADD: 'channelRecipientAdd', - MESSAGE_ACK: 'messageAck', MESSAGE_CREATE: 'messageCreate', MESSAGE_DELETE: 'messageDelete', MESSAGE_UPDATE: 'messageUpdate', @@ -497,17 +364,11 @@ exports.Events = { THREAD_MEMBER_UPDATE: 'threadMemberUpdate', THREAD_MEMBERS_UPDATE: 'threadMembersUpdate', USER_UPDATE: 'userUpdate', - USER_SETTINGS_UPDATE: 'userSettingsUpdate', - USER_GUILD_SETTINGS_UPDATE: 'userGuildSettingsUpdate', PRESENCE_UPDATE: 'presenceUpdate', VOICE_SERVER_UPDATE: 'voiceServerUpdate', VOICE_STATE_UPDATE: 'voiceStateUpdate', TYPING_START: 'typingStart', WEBHOOKS_UPDATE: 'webhookUpdate', - INTERACTION_CREATE: 'interactionCreate', - INTERACTION_SUCCESS: 'interactionSuccess', - INTERACTION_FAILURE: 'interactionFailure', - INTERACTION_MODAL_CREATE: 'interactionModalCreate', ERROR: 'error', WARN: 'warn', DEBUG: 'debug', @@ -531,18 +392,16 @@ exports.Events = { GUILD_SCHEDULED_EVENT_USER_ADD: 'guildScheduledEventUserAdd', GUILD_SCHEDULED_EVENT_USER_REMOVE: 'guildScheduledEventUserRemove', GUILD_AUDIT_LOG_ENTRY_CREATE: 'guildAuditLogEntryCreate', - RELATIONSHIP_ADD: 'relationshipAdd', - RELATIONSHIP_REMOVE: 'relationshipRemove', - RELATIONSHIP_UPDATE: 'relationshipUpdate', UNHANDLED_PACKET: 'unhandledPacket', - CAPTCHA_REQUIRED: 'captchaRequired', - // ! TODO: Add more events - SOUNDBOARD_SOUNDS: 'soundboardSounds', - VOICE_CHANNEL_EFFECT_SEND: 'voiceChannelEffectSend', - GUILD_SOUNDBOARD_SOUND_CREATE: 'guildSoundboardSoundCreate', - GUILD_SOUNDBOARD_SOUND_UPDATE: 'guildSoundboardSoundUpdate', - GUILD_SOUNDBOARD_SOUNDS_UPDATE: 'guildSoundboardSoundsUpdate', - GUILD_SOUNDBOARD_SOUND_DELETE: 'guildSoundboardSoundDelete', + RELATIONSHIP_ADD: 'relationshipAdd', + RELATIONSHIP_UPDATE: 'relationshipUpdate', + RELATIONSHIP_REMOVE: 'relationshipRemove', + CHANNEL_RECIPIENT_ADD: 'channelRecipientAdd', + CHANNEL_RECIPIENT_REMOVE: 'channelRecipientRemove', + INTERACTION_MODAL_CREATE: 'interactionModalCreate', + CALL_CREATE: 'callCreate', + CALL_UPDATE: 'callUpdate', + CALL_DELETE: 'callDelete', }; /** @@ -582,11 +441,10 @@ exports.PartialTypes = keyMirror(['USER', 'CHANNEL', 'GUILD_MEMBER', 'MESSAGE', * The type of a WebSocket message event, e.g. `MESSAGE_CREATE`. Here are the available events: * * READY * * RESUMED - * * APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE * * APPLICATION_COMMAND_CREATE (deprecated) * * APPLICATION_COMMAND_DELETE (deprecated) - * * APPLICATION_COMMAND_UPDATE (deprecated) * * APPLICATION_COMMAND_PERMISSIONS_UPDATE + * * APPLICATION_COMMAND_UPDATE (deprecated) * * AUTO_MODERATION_ACTION_EXECUTION * * AUTO_MODERATION_RULE_CREATE * * AUTO_MODERATION_RULE_DELETE @@ -631,7 +489,6 @@ exports.PartialTypes = keyMirror(['USER', 'CHANNEL', 'GUILD_MEMBER', 'MESSAGE', * * VOICE_STATE_UPDATE * * VOICE_SERVER_UPDATE * * WEBHOOKS_UPDATE - * * INTERACTION_CREATE * * STAGE_INSTANCE_CREATE * * STAGE_INSTANCE_UPDATE * * STAGE_INSTANCE_DELETE @@ -648,7 +505,6 @@ exports.PartialTypes = keyMirror(['USER', 'CHANNEL', 'GUILD_MEMBER', 'MESSAGE', exports.WSEvents = keyMirror([ 'READY', 'RESUMED', - 'APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE', 'APPLICATION_COMMAND_CREATE', 'APPLICATION_COMMAND_DELETE', 'APPLICATION_COMMAND_UPDATE', @@ -697,7 +553,6 @@ exports.WSEvents = keyMirror([ 'VOICE_STATE_UPDATE', 'VOICE_SERVER_UPDATE', 'WEBHOOKS_UPDATE', - 'INTERACTION_CREATE', 'STAGE_INSTANCE_CREATE', 'STAGE_INSTANCE_UPDATE', 'STAGE_INSTANCE_DELETE', @@ -725,6 +580,7 @@ exports.WSEvents = keyMirror([ * * `guilds.join`: allows the bot to join the user to any guild it is in using Guild#addMember * * `gdm.join`: allows joining the user to a group dm * * `webhook.incoming`: generates a webhook to a channel + * * `role_connections.write`: allows your app to update a user's connection and metadata for the app * @typedef {string} InviteScope * @see {@link https://discord.com/developers/docs/topics/oauth2#shared-resources-oauth2-scopes} */ @@ -741,6 +597,7 @@ exports.InviteScopes = [ 'guilds.join', 'gdm.join', 'webhook.incoming', + 'role_connections.write', ]; // TODO: change Integration#expireBehavior to this and clean up Integration @@ -892,7 +749,7 @@ exports.ActivityTypes = createEnum(['PLAYING', 'STREAMING', 'LISTENING', 'WATCHI * * `GUILD_PRIVATE_THREAD` - a guild text channel's private thread channel * * `GUILD_STAGE_VOICE` - a guild stage voice channel * * `GUILD_DIRECTORY` - the channel in a hub containing guilds - * * `GUILD_FORUM` - a guild channel that only contains threads + * * `GUILD_FORUM` - a channel that can only contain threads * * `UNKNOWN` - a generic channel of unknown type, could be Channel or GuildChannel * @typedef {string} ChannelType * @see {@link https://discord.com/developers/docs/resources/channel#channel-object-channel-types} @@ -1131,7 +988,6 @@ exports.VerificationLevels = createEnum(['NONE', 'LOW', 'MEDIUM', 'HIGH', 'VERY_ * * MAXIMUM_PINS * * MAXIMUM_RECIPIENTS * * MAXIMUM_ROLES - * * MAXIMUM_USERNAMES * * MAXIMUM_WEBHOOKS * * MAXIMUM_EMOJIS * * MAXIMUM_REACTIONS @@ -1188,7 +1044,6 @@ exports.VerificationLevels = createEnum(['NONE', 'LOW', 'MEDIUM', 'HIGH', 'VERY_ * * INVALID_API_VERSION * * FILE_UPLOADED_EXCEEDS_MAXIMUM_SIZE * * INVALID_FILE_UPLOADED - * * GIFT_CODE_CLAIMED * * CANNOT_SELF_REDEEM_GIFT * * INVALID_GUILD * * INVALID_MESSAGE_TYPE @@ -1203,7 +1058,6 @@ exports.VerificationLevels = createEnum(['NONE', 'LOW', 'MEDIUM', 'HIGH', 'VERY_ * * INSUFFICIENT_BOOSTS * * INVALID_JSON * * TWO_FACTOR_REQUIRED - * * INVALID_TWO_FACTOR_CODE * * NO_USERS_WITH_DISCORDTAG_EXIST * * REACTION_BLOCKED * * RESOURCE_OVERLOADED @@ -1269,27 +1123,20 @@ exports.APIErrors = { UNKNOWN_GUILD_SCHEDULED_EVENT_USER: 10071, BOT_PROHIBITED_ENDPOINT: 20001, BOT_ONLY_ENDPOINT: 20002, - RPC_PROXY_DISALLOWED: 20003, CANNOT_SEND_EXPLICIT_CONTENT: 20009, - ACCOUNT_SCHEDULED_FOR_DELETION: 20011, NOT_AUTHORIZED: 20012, - ACCOUNT_DISABLED: 20013, SLOWMODE_RATE_LIMIT: 20016, ACCOUNT_OWNER_ONLY: 20018, ANNOUNCEMENT_EDIT_LIMIT_EXCEEDED: 20022, - UNDER_MINIMUM_AGE: 20024, - QUARANTINED: 20026, CHANNEL_HIT_WRITE_RATELIMIT: 20028, SERVER_HIT_WRITE_RATELIMIT: 20029, CONTENT_NOT_ALLOWED: 20031, GUILD_PREMIUM_LEVEL_TOO_LOW: 20035, - VANITY_URL_REQUIRED_FOR_PUBLISHED_GUILDS: 20040, MAXIMUM_GUILDS: 30001, MAXIMUM_FRIENDS: 30002, MAXIMUM_PINS: 30003, MAXIMUM_RECIPIENTS: 30004, MAXIMUM_ROLES: 30005, - MAXIMUN_USERNAMES: 30006, MAXIMUM_WEBHOOKS: 30007, MAXIMUM_EMOJIS: 30008, MAXIMUM_REACTIONS: 30010, @@ -1298,7 +1145,6 @@ exports.APIErrors = { MAXIMUM_INVITES: 30016, MAXIMUM_ANIMATED_EMOJIS: 30018, MAXIMUM_SERVER_MEMBERS: 30019, - NOT_ENOUGH_GUILD_MEMBERS: 30029, MAXIMUM_NUMBER_OF_SERVER_CATEGORIES: 30030, GUILD_ALREADY_HAS_TEMPLATE: 30031, MAXIMUM_THREAD_PARTICIPANTS: 30033, @@ -1312,16 +1158,11 @@ exports.APIErrors = { UNAUTHORIZED: 40001, ACCOUNT_VERIFICATION_REQUIRED: 40002, DIRECT_MESSAGES_TOO_FAST: 40003, - SEND_MESSAGE_TEMPORARILY_DISABLED: 40004, REQUEST_ENTITY_TOO_LARGE: 40005, FEATURE_TEMPORARILY_DISABLED: 40006, USER_BANNED: 40007, - CONNECTION_REVOKED: 40012, - DELETE_ACCOUNT_TRANSFER_TEAM_OWNERSHIP: 40028, TARGET_USER_NOT_CONNECTED_TO_VOICE: 40032, ALREADY_CROSSPOSTED: 40033, - TAG_REQUIRED: 40067, - INVITES_DISABLED: 40069, MISSING_ACCESS: 50001, INVALID_ACCOUNT_TYPE: 50002, CANNOT_EXECUTE_ON_DM: 50003, @@ -1338,13 +1179,9 @@ exports.APIErrors = { INVALID_AUTHENTICATION_TOKEN: 50014, NOTE_TOO_LONG: 50015, INVALID_BULK_DELETE_QUANTITY: 50016, - INVALID_MFA_LEVEL: 50017, - INVALID_PASSWORD: 50018, CANNOT_PIN_MESSAGE_IN_OTHER_CHANNEL: 50019, INVALID_OR_TAKEN_INVITE_CODE: 50020, CANNOT_EXECUTE_ON_SYSTEM_MESSAGE: 50021, - INVALID_PHONE_NUMBER: 50022, - INVALID_CLIENT_ID: 50023, CANNOT_EXECUTE_ON_CHANNEL_TYPE: 50024, INVALID_OAUTH_TOKEN: 50025, MISSING_OAUTH_SCOPE: 50026, @@ -1357,8 +1194,6 @@ exports.APIErrors = { INVALID_API_VERSION: 50041, FILE_UPLOADED_EXCEEDS_MAXIMUM_SIZE: 50045, INVALID_FILE_UPLOADED: 50046, - GIFT_CODE_CLAIMED: 50050, - INVALID_GIFT_REDEMPTION_OWNED: 50051, CANNOT_SELF_REDEEM_GIFT: 50054, INVALID_GUILD: 50055, INVALID_MESSAGE_TYPE: 50068, @@ -1369,15 +1204,9 @@ exports.APIErrors = { INVALID_THREAD_NOTIFICATION_SETTINGS: 50084, PARAMETER_EARLIER_THAN_CREATION: 50085, GUILD_NOT_AVAILABLE_IN_LOCATION: 50095, - INVALID_CANNOT_FRIEND_SELF: 50096, GUILD_MONETIZATION_REQUIRED: 50097, INSUFFICIENT_BOOSTS: 50101, - INVALID_USER_SETTINGS_DATA: 50105, - INVALID_ACTIVITY_LAUNCH_NO_ACCESS: 50106, - INVALID_ACTIVITY_LAUNCH_PREMIUM_TIER: 50107, - INVALID_ACTIVITY_LAUNCH_CONCURRENT_ACTIVITIES: 50108, INVALID_JSON: 50109, - INVALID_FILE_ASSET_SIZE_RESIZE_GIF: 50138, CANNOT_MIX_SUBSCRIPTION_AND_NON_SUBSCRIPTION_ROLES_FOR_EMOJI: 50144, CANNOT_CONVERT_PREMIUM_EMOJI_TO_NORMAL_EMOJI: 50145, VOICE_MESSAGES_DO_NOT_SUPPORT_ADDITIONAL_CONTENT: 50159, @@ -1385,30 +1214,9 @@ exports.APIErrors = { VOICE_MESSAGES_MUST_HAVE_SUPPORTING_METADATA: 50161, VOICE_MESSAGES_CANNOT_BE_EDITED: 50162, YOU_CANNOT_SEND_VOICE_MESSAGES_IN_THIS_CHANNEL: 50173, - TWO_FACTOR_ENABLED: 60001, - TWO_FACTOR_DISABLED: 60002, TWO_FACTOR_REQUIRED: 60003, - TWO_FACTOR_UNVERIFIED: 60004, - TWO_FACTOR_INVALID_SECRET: 60005, - TWO_FACTOR_INVALID_TICKET: 60006, - INVALID_TWO_FACTOR_CODE: 60008, - TWO_FACTOR_INVALID_SESSION: 60009, - PHONE_NUMBER_UNABLE_TO_SEND: 70003, - PHONE_VERIFICATION_REQUIRED: 70007, - RELATIONSHIP_INCOMING_DISABLED: 80000, - RELATIONSHIP_INCOMING_BLOCKED: 80001, - RELATIONSHIP_INVALUD_USER_BOT: 80002, - RELATIONSHIP_INVALID_SELF: 80003, NO_USERS_WITH_DISCORDTAG_EXIST: 80004, - RELATIONSHIP_ALREADY_FRIENDS: 80007, REACTION_BLOCKED: 90001, - INVALID_GIFT_REDEMPTION_SUBSCRIPTION_MANAGED: 100021, - INVALID_GIFT_REDEMPTION_SUBSCRIPTION_INCOMPATIBLE: 100023, - INVALID_GIFT_REDEMPTION_INVOICE_OPEN: 100024, - BILLING_NON_REFUNDABLE_PAYMENT_SOURCE: 100060, - LISTING_ALREADY_JOINED: 120000, - LISTING_TOO_MANY_MEMBERS: 120001, - LISTING_JOIN_BLOCKED: 120002, RESOURCE_OVERLOADED: 130000, STAGE_ALREADY_OPEN: 150006, CANNOT_REPLY_WITHOUT_READ_MESSAGE_HISTORY_PERMISSION: 160002, @@ -1423,12 +1231,8 @@ exports.APIErrors = { LOTTIE_ANIMATION_MAXIMUM_DIMENSIONS_EXCEEDED: 170005, STICKER_FRAME_RATE_IS_TOO_SMALL_OR_TOO_LARGE: 170006, STICKER_ANIMATION_DURATION_EXCEEDS_MAXIMUM_OF_5_SECONDS: 170007, - POGGERMODE_TEMPORARILY_DISABLED: 170008, CANNOT_UPDATE_A_FINISHED_EVENT: 180000, FAILED_TO_CREATE_STAGE_NEEDED_FOR_STAGE_EVENT: 180002, - AUTOMOD_MESSAGE_BLOCKED: 200000, - AUTOMOD_TITLE_BLOCKED: 200001, - HARMFUL_LINK_MESSAGE_BLOCKED: 240000, }; /** @@ -1554,7 +1358,7 @@ exports.ApplicationCommandPermissionTypes = createEnum([null, 'ROLE', 'USER']); * * BOOLEAN_EQUAL * * BOOLEAN_NOT_EQUAL * @typedef {string} ApplicationRoleConnectionMetadataType - * @see {@link https://discord.com/developers/docs/resources/application-role-connection-metadata#application-role-connection-metadata-object-application-role-connection-metadata-type} + * @see{@link https://discord.com/developers/docs/resources/application-role-connection-metadata#application-role-connection-metadata-object-application-role-connection-metadata-type} */ exports.ApplicationRoleConnectionMetadataTypes = createEnum([ null, @@ -1607,7 +1411,6 @@ exports.AutoModerationActionTypes = createEnum([null, 'BLOCK_MESSAGE', 'SEND_ALE */ exports.AutoModerationRuleEventTypes = createEnum([null, 'MESSAGE_SEND']); - /** * The type of an {@link Interaction} object: * * PING @@ -1656,37 +1459,29 @@ exports.InteractionResponseTypes = createEnum([ * The type of a message component * * ACTION_ROW * * BUTTON - * * TEXT_INPUT * * STRING_SELECT + * * TEXT_INPUT * * USER_SELECT * * ROLE_SELECT * * MENTIONABLE_SELECT * * CHANNEL_SELECT - * * SELECT_MENU (deprecated) * @typedef {string} MessageComponentType * @see {@link https://discord.com/developers/docs/interactions/message-components#component-object-component-types} */ -exports.MessageComponentTypes = { - ...createEnum([ - null, - 'ACTION_ROW', - 'BUTTON', - 'STRING_SELECT', - 'TEXT_INPUT', - 'USER_SELECT', - 'ROLE_SELECT', - 'MENTIONABLE_SELECT', - 'CHANNEL_SELECT', - ]), - /** @deprecated Use `STRING_SELECT` instead */ - SELECT_MENU: 3, - /** @deprecated Use `STRING_SELECT` instead */ - 3: 'SELECT_MENU', -}; +exports.MessageComponentTypes = createEnum([ + null, + 'ACTION_ROW', + 'BUTTON', + 'STRING_SELECT', + 'TEXT_INPUT', + 'USER_SELECT', + 'ROLE_SELECT', + 'MENTIONABLE_SELECT', + 'CHANNEL_SELECT', +]); /** * The types of components that are select menus. The available types are: - * * SELECT_MENU (deprecated) * * STRING_MENU * * USER_SELECT * * ROLE_SELECT @@ -1695,19 +1490,15 @@ exports.MessageComponentTypes = { * @typedef {string} SelectMenuComponentType * @see {@link https://discord.com/developers/docs/interactions/message-components#component-object-component-types} */ -exports.SelectMenuComponentTypes = { - ...createEnum([ - ...new Array(3).fill(null), - 'STRING_MENU', - null, - 'USER_SELECT', - 'ROLE_SELECT', - 'MENTIONABLE_SELECT', - 'CHANNEL_SELECT', - ]), - /** @deprecated Use `STRING_SELECT` instead */ - SELECT_MENU: 3, -}; +exports.SelectMenuComponentTypes = createEnum([ + ...new Array(3).fill(null), + 'STRING_MENU', + null, + 'USER_SELECT', + 'ROLE_SELECT', + 'MENTIONABLE_SELECT', + 'CHANNEL_SELECT', +]); /** * The style of a message button @@ -1767,27 +1558,6 @@ exports.TextInputStyles = createEnum([null, 'SHORT', 'PARAGRAPH']); */ exports.GuildScheduledEventPrivacyLevels = createEnum([null, null, 'GUILD_ONLY']); -/** - * Relationship Enums: - * * 0: NONE - * * 1: FRIEND - * * 2: BLOCKED - * * 3: PENDING_INCOMING - * * 4: PENDING_OUTGOING - * * 5: IMPLICIT - * @typedef {string} RelationshipTypes - * @see {@link https://luna.gitlab.io/discord-unofficial-docs/relationships.html} - */ - -exports.RelationshipTypes = createEnum([ - 'NONE', - 'FRIEND', - 'BLOCKED', - 'PENDING_INCOMING', - 'PENDING_OUTGOING', - 'IMPLICIT', -]); - /** * The premium tier (Server Boost level) of a guild: * * NONE @@ -1821,6 +1591,7 @@ exports.GuildScheduledEventStatuses = createEnum([null, 'SCHEDULED', 'ACTIVE', ' */ exports.GuildScheduledEventEntityTypes = createEnum([null, 'STAGE_INSTANCE', 'VOICE', 'EXTERNAL']); /* eslint-enable max-len */ + /** * The camera video quality mode of a {@link VoiceChannel}: * * AUTO @@ -1831,7 +1602,7 @@ exports.GuildScheduledEventEntityTypes = createEnum([null, 'STAGE_INSTANCE', 'VO exports.VideoQualityModes = createEnum([null, 'AUTO', 'FULL']); /** - * Sort {@link ForumChannel} posts by ? + * Sort {@link ForumChannel} posts by creation time or activity * * LATEST_ACTIVITY * * CREATION_DATE * @typedef {string} SortOrderType @@ -1849,10 +1620,31 @@ exports.SortOrderTypes = createEnum([null, 'LATEST_ACTIVITY', 'CREATION_DATE']); */ exports.ForumLayoutTypes = createEnum(['NOT_SET', 'LIST_VIEW', 'GALLERY_VIEW']); +/** + * Relationship Enums: + * * 0: NONE + * * 1: FRIEND + * * 2: BLOCKED + * * 3: PENDING_INCOMING + * * 4: PENDING_OUTGOING + * * 5: IMPLICIT + * @typedef {string} RelationshipTypes + * @see {@link https://luna.gitlab.io/discord-unofficial-docs/relationships.html} + */ + +exports.RelationshipTypes = createEnum([ + 'NONE', + 'FRIEND', + 'BLOCKED', + 'PENDING_INCOMING', + 'PENDING_OUTGOING', + 'IMPLICIT', +]); + exports._cleanupSymbol = Symbol('djsCleanup'); function keyMirror(arr) { - const tmp = Object.create(null); + let tmp = Object.create(null); for (const value of arr) tmp[value] = value; return tmp; } @@ -1907,12 +1699,11 @@ function createEnum(keys) { * @property {Object} InteractionResponseTypes The type of an interaction response. * @property {Object} InteractionTypes The type of an {@link Interaction} object. * @property {InviteScope[]} InviteScopes The scopes of an invite. - * @property {number} MaxBulkDeletableMessageAge Max bulk deletable message age (Unavailable to selfbots) + * @property {Object} RelationshipTypes Relationship Enums * @property {Object} MembershipStates The value set for a team members membership state. * @property {Object} MessageButtonStyles The style of a message button. * @property {Object} MessageComponentTypes The type of a message component. * @property {MessageType[]} MessageTypes The type of a {@link Message} object. - * @property {Object} SelectMenuComponentTypes The type of any select menu. * @property {Object} MFALevels The required MFA level for a guild. * @property {Object} NSFWLevels NSFW level of a guild. * @property {Opcodes} Opcodes The types of Opcodes sent to the Gateway. @@ -1923,6 +1714,7 @@ function createEnum(keys) { * @property {Object} PrivacyLevels Privacy level of a {@link StageInstance} object. * @property {ShardEvents} ShardEvents The type of events emitted by a Shard. * @property {Status} Status The available statuses of the client. + * @property {Object} SelectMenuComponentTypes The type of any select menu. * @property {Object} StickerFormatTypes The value set for a stickers format type. * @property {Object} StickerTypes The value set for a stickers type. * @property {SweeperKey[]} SweeperKeys The name of an item to be swept in Sweepers. diff --git a/src/util/Options.js b/src/util/Options.js index 020eb5b..9e0846f 100644 --- a/src/util/Options.js +++ b/src/util/Options.js @@ -1,8 +1,8 @@ 'use strict'; -const JSONBig = require('json-bigint'); +const { UserAgent } = require('./Constants'); const Intents = require('./Intents'); -const { defaultUA } = require('../util/Constants'); + /** * Rate limit data * @typedef {Object} RateLimitData @@ -28,28 +28,34 @@ const { defaultUA } = require('../util/Constants'); * @returns {Collection} A Collection used to store the cache of the manager. */ +/** + * @typedef {Function} CaptchaSolver + * @param {Captcha} captcha Discord Captcha + * @param {string} UserAgent Current UserAgent + * @returns {Promise} HCaptcha Token + * @example + * const Captcha = require("2captcha") + * // A new 'solver' instance with our API key + * const solver = new Captcha.Solver("") + * function solveCaptcha(captcha, UA) { + * return solver.hcaptcha(captcha.captcha_sitekey, 'discord.com', { + * invisible: 1, + * userAgent: UA, + * data: captcha.captcha_rqdata, + * }).then(res => res.data) + * } + */ + /** * Options for a client. * @typedef {Object} ClientOptions - * @property {number|number[]|string} [shards] The shard's id to run, or an array of shard ids. If not specified, - * the client will spawn {@link ClientOptions#shardCount} shards. If set to `auto`, it will fetch the - * recommended amount of shards from Discord and spawn that amount + * @property {number} [messageCreateEventGuildTimeout=100] The amount of time in milliseconds that the Client to register for messages with each guild + * @property {number} [DMChannelVoiceStatusSync=0] The amount of time in milliseconds that the Client to register the event with each DM channel (0=Disable) + * @property {number} [captchaRetryLimit=3] Captcha retry limit + * @property {CaptchaSolver} [captchaSolver] Captcha Solver * @property {number} [closeTimeout=5000] The amount of time in milliseconds to wait for the close frame to be received - * from the WebSocket. Don't have this too high/low. Its best to have it between 2_000-6_000 ms. - * @property {boolean} [checkUpdate=true] Display module update information on the screen - * @property {boolean} [syncStatus=true] Sync state with Discord Client - * @property {boolean} [patchVoice=false] Automatically patch @discordjs/voice module (support for call) - * @property {string} [captchaService=null] Captcha service to use for solving captcha {@link captchaServices} - * @property {string} [captchaKey=null] Captcha service key - * @property {string} [captchaRetryLimit=3] Captcha retry limit - * @property {string} [captchaWithProxy=false] Whether to use proxy for captcha solving - * @property {string} [password=null] Your Discord account password - * @property {boolean} [usingNewAttachmentAPI=true] Use new attachment API - * @property {string} [interactionTimeout=15000] The amount of time in milliseconds to wait for an interaction response, before rejecting - * @property {boolean} [autoRedeemNitro=false] Automaticlly redeems nitro codes - * @property {string} [proxy] Proxy to use for the WebSocket + REST connection (proxy-agent uri type) {@link https://www.npmjs.com/package/proxy-agent}. - * @property {boolean} [DMSync=false] Automatically synchronize call status (DM and group) at startup (event synchronization) [Warning: May cause rate limit to gateway) - * @property {number} [shardCount=1] The total amount of shards used by all processes of this bot + * from the WebSocket. + * Don't have this too high/low. It's best to have it between 2000-6000 ms. * (e.g. recommended shard count, shard count of the ShardingManager) * @property {CacheFactory} [makeCache] Function to create a cache. * You can use your own function, or the {@link Options} class to customize the Collection used for the cache. @@ -86,23 +92,12 @@ const { defaultUA } = require('../util/Constants'); * @property {boolean} [failIfNotExists=true] Default value for {@link ReplyMessageOptions#failIfNotExists} * @property {string[]} [userAgentSuffix] An array of additional bot info to be appended to the end of the required * [User Agent](https://discord.com/developers/docs/reference#user-agent) header - * @property {PresenceData} [presence={}] Presence data to use upon login - * @property {IntentsResolvable} [intents=131071] Intents to enable for this connection (but not using) - * @property {number} [waitGuildTimeout=15000] Time in milliseconds that Clients with the GUILDS intent should wait for - * @property {number} [messageCreateEventGuildTimeout=100] Time in milliseconds that Clients to register for messages with each guild - * missing guilds to be received before starting the bot. If not specified, the default is 100 milliseconds. + * @property {PresenceData} [presence={ status: 'online', since: 0, activities: [], afk: false }] Presence data to use upon login + * @property {number} [waitGuildTimeout=15_000] Time in milliseconds that Clients with the GUILDS intent should wait for + * missing guilds to be received before starting the bot. If not specified, the default is 15 seconds. * @property {SweeperOptions} [sweepers={}] Options for cache sweeping * @property {WebsocketOptions} [ws] Options for the WebSocket * @property {HTTPOptions} [http] HTTP options - * @property {CustomCaptchaSolver} [captchaSolver] Function to solve a captcha (custom) - */ - -/** - * Function to solve a captcha - * @typedef {function} CustomCaptchaSolver - * @param {Captcha} captcha The captcha to solve - * @param {string} userAgent The user agent to use for the request - * @returns {Promise} hcaptcha token */ /** @@ -124,6 +119,7 @@ const { defaultUA } = require('../util/Constants'); /** * WebSocket options (these are left as snake_case to match the API) * @typedef {Object} WebsocketOptions + * @property {AgentOptions} [agent={}] HTTPS Agent options (WS Proxy) * @property {boolean} [compress=false] Whether to compress data sent on the connection * @property {WebSocketProperties} [properties] Properties to identify the client with */ @@ -158,23 +154,12 @@ class Options extends null { */ static createDefault() { return { - jsonTransformer: object => JSONBig.stringify(object), - captchaSolver: captcha => Promise.reject(new Error('CAPTCHA_SOLVER_NOT_IMPLEMENTED', captcha)), - closeTimeout: 5_000, - checkUpdate: true, - syncStatus: true, - autoRedeemNitro: false, - captchaService: '', - captchaKey: null, - captchaRetryLimit: 3, - captchaWithProxy: false, - DMSync: false, - patchVoice: false, - password: null, - usingNewAttachmentAPI: true, - interactionTimeout: 15_000, - waitGuildTimeout: 15_000, messageCreateEventGuildTimeout: 100, + DMChannelVoiceStatusSync: 0, + captchaRetryLimit: 3, + captchaSolver: () => Promise.reject(new Error('CAPTCHA_SOLVER_NOT_IMPLEMENTED')), + closeTimeout: 5_000, + waitGuildTimeout: 15_000, shardCount: 1, makeCache: this.cacheWithLimits(this.defaultMakeCacheSettings), messageCacheLifetime: 0, @@ -188,13 +173,11 @@ class Options extends null { retryLimit: 1, restTimeOffset: 500, restSweepInterval: 60, - failIfNotExists: false, + failIfNotExists: true, userAgentSuffix: [], presence: { status: 'online', since: 0, activities: [], afk: false }, sweepers: {}, - proxy: '', ws: { - // eslint-disable-next-line no-undef capabilities: 0, // https://discord-userdoccers.vercel.app/topics/gateway#gateway-capabilities properties: { os: 'Windows', @@ -205,7 +188,7 @@ class Options extends null { os_arch: 'x64', app_arch: 'ia32', system_locale: 'en-US', - browser_user_agent: defaultUA, + browser_user_agent: UserAgent, browser_version: '22.3.26', client_build_number: 244874, native_build_number: 39515, @@ -223,11 +206,12 @@ class Options extends null { api_code_version: 0, }, version: 9, + agent: {}, }, http: { agent: {}, headers: { - 'User-Agent': defaultUA, + 'User-Agent': UserAgent, }, version: 9, api: 'https://discord.com/api', @@ -328,7 +312,6 @@ class Options extends null { static get defaultMakeCacheSettings() { return { MessageManager: 200, - /* ChannelManager: { sweepInterval: 3600, sweepFilter: require('./Util').archivedThreadSweepFilter(), @@ -341,7 +324,6 @@ class Options extends null { sweepInterval: 3600, sweepFilter: require('./Util').archivedThreadSweepFilter(), }, - */ }; } } From f5e7dea9cf7df8fff71ef56f65f95db270b2944c Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sun, 14 Jan 2024 09:17:09 +0700 Subject: [PATCH 57/60] update 2 --- src/structures/ClientUser.js | 2 +- src/structures/Presence.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/structures/ClientUser.js b/src/structures/ClientUser.js index e579fe2..080e1d7 100644 --- a/src/structures/ClientUser.js +++ b/src/structures/ClientUser.js @@ -187,7 +187,7 @@ class ClientUser extends User { * @typedef {Object} PresenceData * @property {PresenceStatusData} [status] Status of the user * @property {boolean} [afk] Whether the user is AFK - * @property {(ActivitiesOptions|CustomStatus|RichPresence|SpotifyRPC)[]} [activities] Activity the user is playing + * @property {ActivitiesOptions[]|CustomStatus[]|RichPresence[]|SpotifyRPC[]} [activities] Activity the user is playing * @property {number|number[]} [shardId] Shard id(s) to have the activity set on */ diff --git a/src/structures/Presence.js b/src/structures/Presence.js index f7352e0..b31d1e7 100644 --- a/src/structures/Presence.js +++ b/src/structures/Presence.js @@ -91,7 +91,7 @@ class Presence extends Base { if ('activities' in data) { /** * The activities of this presence - * @type {(Activity|CustomStatus|SpotifyRPC|RichPresence)[]} + * @type {Activity[]|CustomStatus[]|RichPresence[]|SpotifyRPC[]} */ this.activities = data.activities.map(activity => { if (fromClient === true) { From e15b9ab7fe5c2c22dcc0df495c6fea21f4dbea28 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sun, 14 Jan 2024 09:49:38 +0700 Subject: [PATCH 58/60] Update WebEmbed.js --- src/structures/WebEmbed.js | 45 +------------------------------------- 1 file changed, 1 insertion(+), 44 deletions(-) diff --git a/src/structures/WebEmbed.js b/src/structures/WebEmbed.js index 20f09d6..8576690 100644 --- a/src/structures/WebEmbed.js +++ b/src/structures/WebEmbed.js @@ -1,8 +1,8 @@ 'use strict'; + const baseURL = 'https://webembed-sb.onrender.com/embed?'; const hiddenCharter = '||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||'; -const fetch = require('node-fetch'); const { RangeError } = require('../errors'); const Util = require('../util/Util'); @@ -43,24 +43,6 @@ class WebEmbed { * @param {WebEmbed|WebEmbedOptions|APIEmbed} [data={}] WebEmbed to clone or raw embed data */ this._setup(data); - /** - * Shorten the link - * @type {?boolean} - */ - this.shorten = data.shorten ?? true; - - /** - * Hidden Embed link - * @type {?boolean} - */ - this.hidden = data.hidden ?? false; - - /** - * Using Custom WebEmbed server ? - * @type {?string} https://webembed-sb.onrender.com/embed? - * @see https://github.com/aiko-chan-ai/WebEmbed - */ - this.baseURL = data.baseURL ?? baseURL; } /** * @private @@ -381,31 +363,6 @@ class WebEmbed { } return url.toString(); } - - /** - * Return Message Content + Embed (if hidden, pls check content length because it has 1000+ length) - * @returns {string} Message Content - */ - async toMessage() { - const fullURL = this.toString(); - if (this.shorten) { - const url = await this.constructor.getShorten(fullURL); - if (!url) console.log('Cannot shorten URL in WebEmbed'); - return this.hidden ? `${hiddenCharter} ${url || fullURL}` : url || fullURL; - } else { - return this.hidden ? `${hiddenCharter} ${fullURL}` : fullURL; - } - } - - static async getShorten(url) { - const shorten = `https://tinyurl.com/api-create.php?url=${encodeURIComponent(url)}`; - try { - const res = await (await fetch(shorten)).text(); - return res; - } catch { - return undefined; - } - } } module.exports = WebEmbed; From 039dd34cf26a8124c5a8d566b932ae52bdd4ca4e Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sun, 14 Jan 2024 12:33:11 +0700 Subject: [PATCH 59/60] Update --- Document/FetchGuildMember.md | 187 -- Document/Message.md | 40 +- Document/RichPresence.md | 61 +- Document/SlashCommand.md | 7 - Document/User.md | 170 -- Document/VoiceCall.md | 628 ----- README.md | 8 +- package.json | 8 +- src/client/Client.js | 565 +---- src/client/websocket/handlers/READY.js | 185 +- .../handlers/USER_GUILD_SETTINGS_UPDATE.js | 12 - .../handlers/USER_SETTINGS_UPDATE.js | 9 - src/client/websocket/handlers/index.js | 33 +- src/errors/Messages.js | 92 +- src/index.js | 53 +- src/managers/ClientUserSettingManager.js | 490 ---- src/managers/DeveloperPortalManager.js | 104 - src/managers/GuildFolderManager.js | 24 - src/managers/GuildSettingManager.js | 148 -- src/managers/SessionManager.js | 57 - src/structures/DeveloperPortalApplication.js | 520 ----- src/structures/GuildFolder.js | 75 - src/structures/Session.js | 81 - src/util/RemoteAuth.js | 597 ++--- src/util/Util.js | 259 +-- typings/enums.d.ts | 81 +- typings/index.d.ts | 2053 ++++++----------- 27 files changed, 1250 insertions(+), 5297 deletions(-) delete mode 100644 Document/FetchGuildMember.md delete mode 100644 Document/User.md delete mode 100644 Document/VoiceCall.md delete mode 100644 src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js delete mode 100644 src/client/websocket/handlers/USER_SETTINGS_UPDATE.js delete mode 100644 src/managers/ClientUserSettingManager.js delete mode 100644 src/managers/DeveloperPortalManager.js delete mode 100644 src/managers/GuildFolderManager.js delete mode 100644 src/managers/GuildSettingManager.js delete mode 100644 src/managers/SessionManager.js delete mode 100644 src/structures/DeveloperPortalApplication.js delete mode 100644 src/structures/GuildFolder.js delete mode 100644 src/structures/Session.js diff --git a/Document/FetchGuildMember.md b/Document/FetchGuildMember.md deleted file mode 100644 index fa8b924..00000000 --- a/Document/FetchGuildMember.md +++ /dev/null @@ -1,187 +0,0 @@ -### Credit: Discord-S.C.U.M -- Link: [Here](https://github.com/Merubokkusu/Discord-S.C.U.M/blob/master/docs/using/fetchingGuildMembers.md#Algorithm) - -# Fetching Guild Members - -### Assume you don't have one of the following permissions -> `ADMINISTRATOR`, `KICK_MEMBERS`, `BAN_MEMBERS`, `MANAGE_ROLES` - -Alright so this really needs a page of its own because it's special. There's no actual api endpoint to get the guild members, so instead you have 2 options: -1) fetch the member list sidebar (guild.members.fetchMemberList, which uses opcode 14) - - when to use: if you can see any categories/channels in the guild - - pro: fast - - con: for large servers (```guild.memberCount > 1000```), only not-offline members are fetched - -2) search for members by query (guild.members.fetchBruteforce, which uses opcode 8) - - when to use: if you cannot see any categories/channels in the guild - - pro: can potentially get the entire member list, can scrape members from multiple guilds at the same time - - con: slow af (speed is dependent on brute forcer optimizations) - -____________________________________ -# Links/Table of Contents -- [fetch the member list sidebar (faster, but less members)](#fetch-the-member-list-sidebar) - - [Algorithm](#Algorithm) - - [How many members can I fetch?](#how-many-members-can-i-fetch) - - [Examples](#Examples) - - [Efficiency & Effectiveness](#efficiency--effectiveness) - - [POC: fetching the memberlist backwards](#fetching-the-member-list-backwards) -- [search for members by query (slower, but more members)](#search-for-members-by-query) - - [Usage](#Usage) - - [Algorithm](#Algorithm-1) - - [How many members can I fetch?](#how-many-members-can-i-fetch-1) -___________________________________ -## Fetch the Member List Sidebar -#### Algorithm -1) load guild data (send an op14 with range [0,99]). If the guild is unavailable, discord will send over a GUILD_CREATE event. -2) subscribe to a list of ranges in member list sidebar. -3) after a GUILD_MEMBER_LIST_UPDATE is received, update the saved member list data and subscribe to a new list of ranges - -note: -- you don't have to wait for a GUILD_MEMBER_LIST_UPDATE event to send the next list of member ranges -- there're 2 methods to fetch the member list: - - overlap. Ranges subscribed to (in order) are: - ``` - [[0,99], [100,199]] - [[0,99], [100,199], [200,299]] - [[0,99], [200,299], [300,399]] - ... - ``` - - nonoverlap. Ranges subscribed to (in order) are: - ``` - [[0,99], [100,199]] - [[0,99], [200,299], [300,399]] - [[0,99], [400,499], [500,599]] - ... - ``` -- more info: https://arandomnewaccount.gitlab.io/discord-unofficial-docs/lazy_guilds.html - -#### How many members can I fetch? -Even though it's not yet known how discord calculates this, you can still come up with a "ground truth" number. The steps are as follows: -1) open your browser's dev tools (chrome dev tools is a favorite) -2) click on the network tab and make sure you can see websocket connections -3) go to a guild and scroll all the way down on the member list -4) see what are the ranges of the last gateway request your client sends (the # of fetchable members is somewhere in these ranges) - -#### Examples -all examples shown use the "overlap" method - -```js -const guild = client.guilds.cache.get('id'); -const channel = guild.channels.cache.get('id'); -// Overlap (slow) -for (let index = 0; index <= guild.memberCount; index += 100) { - await guild.members.fetchMemberList(channel, index, index !== 100).catch(() => {}); - await client.sleep(500); -} -// Non-overlap (fast) -for (let index = 0; index <= guild.memberCount; index += 200) { - await guild.members.fetchMemberList(channel, index == 0 ? 100 : index, index !== 100).catch(() => {}); - await client.sleep(500); -} -console.log(guild.members.cache.size); // will print the number of members in the guild -``` - -It's possible that fetchMembers doesn't fetch all not-offline members due to rate limiting. Don't worry if this happens, you can start fetching members from any index. -```js -const guild = client.guilds.cache.get('id'); -const channel = guild.channels.cache.get('id'); -// Fetch member range 5000-5099 -await guild.members.fetchMemberList(channel, 5000); -``` - -#### Efficiency & Effectiveness - -| | overlap                      | no overlap | -|------|---------|------------| -| 2.1k |![a](https://github.com/Merubokkusu/Discord-S.C.U.M/raw/master/docs/using/memberFetchingStats/2100a.jpg) |![c](https://github.com/Merubokkusu/Discord-S.C.U.M/raw/master/docs/using/memberFetchingStats/2100b.jpg) | -| 128k |![b](https://github.com/Merubokkusu/Discord-S.C.U.M/raw/master/docs/using/memberFetchingStats/128ka.jpg) |![d](https://github.com/Merubokkusu/Discord-S.C.U.M/raw/master/docs/using/memberFetchingStats/128kb.jpg) | - -As you can see, the "no overlap" method fetches 200 members/second while the "overlap" method fetches 100 members/second. However, "no overlap" is also a lot less effective. After doing a few more tests with both methods ("overlap" and "no overlap"), "no overlap" shows a lot less consistency/reliability than "overlap". - - -#### Fetching the member list backwards -(and in pretty much any "style" you want) -So, this is more proof-of-concept, but here's a short explanation. -Suppose you're in a guild with 1000 members and want to fetch the member list backwards (I dunno...more undetectable since noone fetches it backwards? lol). - Since discum requests members in 200-member chunks, you'll either have to request for the following range groups (safer): - ``` - [[0,99],[800,899],[900,999]] #target start: 800 - [[0,99],[700,799],[800,899]] #target start: 700 - [[0,99],[600,699],[700,799]] #target start: 600 - [[0,99],[500,599],[600,699]] #target start: 500 - [[0,99],[400,499],[500,599]] #target start: 400 - [[0,99],[300,399],[400,499]] #target start: 300 - [[0,99],[200,299],[300,399]] #target start: 200 - [[0,99],[100,199],[200,299]] #target start: 100 - [[0,99],[100,199]] #target start: 0 - ``` - or the following range groups (faster): - ``` - [[0,99],[800,899],[900,999]] #target start: 800 - [[0,99],[600,699],[700,799]] #target start: 600 - [[0,99],[400,499],[500,599]] #target start: 400 - [[0,99],[200,299],[300,399]] #target start: 200 - [[0,99],[100,199]] #target start: 0 - ``` - The first one looks like an overlap method while the second looks like a no-overlap method. However, since we're fetching the memberlist backwards, we cannot - use 100 and 200 for the methods. Instead, we need a list of multipliers (method) and a startIndex. -____________________________________ -## Search for Members by Query -#### Usage -1) run the function: - ```js - guild.members.fetchBruteforce({ - delay: 500, - depth: 1, // ['a', 'b', 'c', 'd', ...] or ['aa', 'ab', 'ac', 'ad', ...] if depth is 2, ... - }) - ``` - A wait time of at least 0.5 is needed to prevent the brute forcer from rate limiting too often. In the event that the brute forcer does get rate limited, some time will be lost reconnecting. -#### Algorithm -for simplicity, assume that the list of characters to search for is ['a', 'b', 'c', 'd'] -1) query for up to 100 members in guild who have a nickname/username starting with 'a' -2) on a GUILD_MEMBERS_CHUNK event: - - if there are 100 results: - - add on the 2nd character of the last result. For example, if the results are - ``` - aaaaaaaaaaaa - aaadfd3fgdftjh - ... - Acaddd - ``` - , - the next query will be 'ac'. Note: searches are case-insensitive and consecutive spaces are treated like single spaces. - - if there are less than 100 results: - - replace the last index of the query with the next option in the list - -This algorithm can definitely be made a lot better so have at it. The brute forcer example is just there to help you get started. - -#### How many members can I fetch? -- a limit is posed if many users have the same nickname & username (but different discriminators). Only the 1st 100 members will be able to be fetched. There's no known way to include the discriminator # in the search. -- also, in order to query users with fancy characters in their username/nickname, the op8 brute forcer needs to be slowed down (cause, more characters to search) - -#### Testing !!! - -- Example -```js -const Discord = require('discord.js-selfbot-v13'); -const client = new Discord.Client(); -client.on('debug', console.log) -client.on('ready', () => { - console.log('Logged in as', client.user.tag); - const guild = client.guilds.cache.get('662267976984297473'); // Midjourney - 13M members - guild.members.fetchBruteforce({ - depth: 2, // 2 levels of recursion - delay: 500, // 500ms delay between each request - }); - setInterval(() => { - console.log('Fetching members...', guild.members.cache.size); - }, 1000); -}); -client.login('token'); -``` - -- 2000 years later... - - - -`138k/13.8M (1%)` members fetched in `~30 mins` (with a delay of 500ms) :skull: \ No newline at end of file diff --git a/Document/Message.md b/Document/Message.md index 718a945..c2f909c 100644 --- a/Document/Message.md +++ b/Document/Message.md @@ -17,40 +17,10 @@ ## Interaction
-Button Click - -```js -await Button.click(Message); -// -await message.clickButton(buttonID); -// -await message.clickButton(); // first button -// -await message.clickButton({ row: 0, col: 0}) -``` -
-
-Message Select Menu - -```js -await MessageSelectMenu.select(Message, options); // (v1) -// value: ['value1', 'value2' , ...] -await message.selectMenu(menuID, options) // If message has >= 2 menu -await message.selectMenu(options) // If message has 1 menu -``` -
-
Slash Command ### [Click here](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/SlashCommand.md) -
-
-Message Context Command - -```js -await message.contextMenu(botID, commandName); -```
@@ -64,13 +34,7 @@ await message.contextMenu(botID, commandName); Code: ```js const Discord = require('discord.js-selfbot-v13'); -// Selfhost WebEmbed: https://github.com/aiko-chan-ai/WebEmbed -const w = new Discord.WebEmbed({ - shorten: true, - hidden: false, // if you send this embed with MessagePayload.options.embeds, it must set to false - baseURL: '', // if you want self-host API, else skip :v - shortenAPI: '', // if you want Custom shortenAPI (Method: Get, response: Text => URL), else skip :v -}) +const w = new Discord.WebEmbed() .setAuthor({ name: 'hello', url: 'https://google.com' }) .setColor('RED') .setDescription('description uh') @@ -83,7 +47,7 @@ const w = new Discord.WebEmbed({ .setVideo( 'https://cdn.discordapp.com/attachments/877060758092021801/957691816143097936/The_Quintessential_Quintuplets_And_Rick_Astley_Autotune_Remix.mp4', ); -message.channel.send({ content: `Hello world`, embeds: [w] }) // Patched :) +message.channel.send({ content: `Hello world ${Discord.WebEmbed.hiddenEmbed} ${w}` }); ``` ### Features & Issues diff --git a/Document/RichPresence.md b/Document/RichPresence.md index 36a81bc..9c29b64 100644 --- a/Document/RichPresence.md +++ b/Document/RichPresence.md @@ -1,10 +1,3 @@ -## Setup -```js -const client = new Client({ - syncStatus: false, -}); -``` - ## Custom Status and RPC Custom Status @@ -68,57 +61,7 @@ client.user.setActivity(r); > Tutorial: -## Method 1: - -+ Step 1: Send image to Discord - - - -+ Step 2: Get Image URL - - - -```sh -Demo URL: https://cdn.discordapp.com/attachments/820557032016969751/991172011483218010/unknown.png -``` - -+ Step 3: Replace `https://cdn.discordapp.com/` or `https://media.discordapp.net/` with `mp:` - -```diff -- https://cdn.discordapp.com/attachments/820557032016969751/991172011483218010/unknown.png - -- https://media.discordapp.net/attachments/820557032016969751/991172011483218010/unknown.png - -+ mp:attachments/820557032016969751/991172011483218010/unknown.png - -``` - -+ Step 4: - -```js -const Discord = require('discord.js-selfbot-v13'); -const r = new Discord.RichPresence() - .setApplicationId('817229550684471297') - .setType('PLAYING') - .setURL('https://youtube.com/watch?v=dQw4w9WgXcQ') - .setState('State') - .setName('Name') - .setDetails('Details') - .setParty({ - max: 9, - current: 1, - id: Discord.getUUID(), - }) - .setStartTimestamp(Date.now()) - .setAssetsLargeImage('mp:attachments/820557032016969751/991172011483218010/unknown.png') - .setAssetsLargeText('Youtube') - .setAssetsSmallImage('895316294222635008') - .setAssetsSmallText('Bot') - .addButton('name', 'https://link.com/') -client.user.setActivity(r); -``` - -## Method 2: (Discord URL, 2.3.78+) +## Method 1: (Discord URL, v2.3.78+) ```js const Discord = require('discord.js-selfbot-v13'); @@ -145,7 +88,7 @@ client.user.setActivity(r); -## Method 3 (Custom URL, 2.3.78+) +## Method 2 (Custom URL, 2.3.78+) ```js const Discord = require('discord.js-selfbot-v13'); diff --git a/Document/SlashCommand.md b/Document/SlashCommand.md index 5bd6d77..b7ca1b7 100644 --- a/Document/SlashCommand.md +++ b/Document/SlashCommand.md @@ -42,10 +42,3 @@ await message.channel.sendSlash('718642000898818048', 'sauce', a) ### Result ![image](https://user-images.githubusercontent.com/71698422/173347075-5c8a1347-3845-489e-956b-63975911b6e0.png) - -# Events - -- [interactionCreate](https://discordjs-self-v13.netlify.app/#/docs/docs/main/class/Client?scrollTo=e-interactionCreate) -- [interactionFailure](https://discordjs-self-v13.netlify.app/#/docs/docs/main/class/Client?scrollTo=e-interactionFailure) -- [interactionSuccess](https://discordjs-self-v13.netlify.app/#/docs/docs/main/class/Client?scrollTo=e-interactionSuccess) -- [interactionModalCreate](https://discordjs-self-v13.netlify.app/#/docs/docs/main/class/Client?scrollTo=e-interactionModalCreate) diff --git a/Document/User.md b/Document/User.md deleted file mode 100644 index 7da9279..00000000 --- a/Document/User.md +++ /dev/null @@ -1,170 +0,0 @@ -# Quick Links: -- [Setting](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/User.md#user-settings) -- [User Info](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/User.md#discord-user-info) -- [Relationship](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/User.md#discord-user-friend--blocked) -- [Other](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/User.md#user--clientuser-method) - -## User Settings -
-Click to show - -```js -client.setting // Return Data Setting User; -client.settings.setDisplayCompactMode(true | false); // Message Compact Mode -client.settings.setTheme('dark' | 'light'); // Discord App theme -client.settings.setLocale(value); // Set Language - /** - * * Locale Setting, must be one of: - * * `DANISH` - * * `GERMAN` - * * `ENGLISH_UK` - * * `ENGLISH_US` - * * `SPANISH` - * * `FRENCH` - * * `CROATIAN` - * * `ITALIAN` - * * `LITHUANIAN` - * * `HUNGARIAN` - * * `DUTCH` - * * `NORWEGIAN` - * * `POLISH` - * * `BRAZILIAN_PORTUGUESE` - * * `ROMANIA_ROMANIAN` - * * `FINNISH` - * * `SWEDISH` - * * `VIETNAMESE` - * * `TURKISH` - * * `CZECH` - * * `GREEK` - * * `BULGARIAN` - * * `RUSSIAN` - * * `UKRAINIAN` - * * `HINDI` - * * `THAI` - * * `CHINA_CHINESE` - * * `JAPANESE` - * * `TAIWAN_CHINESE` - * * `KOREAN` - */ -// Setting Status -client.settings.setCustomStatus({ - status: 'online', // 'online' | 'idle' | 'dnd' | 'invisible' | null - text: 'Hello world', // String | null - emoji: '🎮', // UnicodeEmoji | DiscordEmoji | null - expires: null, // Date.now() + 1 * 3600 * 1000 <= 1h to ms -}); -// => Clear -client.settings.setCustomStatus(); -``` - -
- -## Discord User Info -
-Click to show - -Code: -```js -GuildMember.user.getProfile(); -// or -User.getProfile(); -``` -Response -```js -User { - id: '721746046543331449', - bot: false, - system: false, - flags: UserFlagsBitField { bitfield: 256 }, - connectedAccounts: [], - premiumSince: 1623357181151, - premiumGuildSince: 0, - bio: null, - mutualGuilds: Collection(3) [Map] { - '906765260017516605' => { id: '906765260017516605', nick: null }, - '809133733591384155' => { id: '809133733591384155', nick: 'uwu' }, - '926065180788531261' => { id: '926065180788531261', nick: 'shiro' } - }, - username: 'Shiraori', - discriminator: '1782', - avatar: 'f9ba7fb35b223e5f1a12eb910faa40c2', - banner: undefined, - accentColor: undefined -} -``` -
- -## Discord User Friend / Blocked -
-Click to show - -Code: -```js -// You can use client.relationships to manage your friends and blocked users. -GuildMember.user.setFriend(); -User.unFriend(); -Message.member.user.sendFriendRequest(); -// or -GuildMember.user.setBlock(); -User.unBlock(); -``` -Response -```js -User { - id: '721746046543331449', - bot: false, - system: false, - flags: UserFlagsBitField { bitfield: 256 }, - note: null, - connectedAccounts: [], - premiumSince: 1623357181151, - premiumGuildSince: 0, - bio: null, - mutualGuilds: Collection(3) [Map] { - '906765260017516605' => { id: '906765260017516605', nick: null }, - '809133733591384155' => { id: '809133733591384155', nick: 'uwu' }, - '926065180788531261' => { id: '926065180788531261', nick: 'shiro' } - }, - username: 'Shiraori', - discriminator: '1782', - avatar: 'f9ba7fb35b223e5f1a12eb910faa40c2', - banner: undefined, - accentColor: undefined -} -``` -
- -## User & ClientUser Method -
-Click to show - -```js -// HypeSquad -await client.user.setHypeSquad('HOUSE_BRAVERY'); -await client.user.setHypeSquad('HOUSE_BRILLIANCE'); -await client.user.setHypeSquad('HOUSE_BALANCE'); -await client.user.setHypeSquad('LEAVE'); -// Set Note to User -await user.setNote('Hello World'); -// Set Username -await client.user.setUsername('new username', 'password'); -// Set Accent Color -await client.user.setAccentColor('RED'); // set color same as Embed.setColor() -// Set Banner -await client.user.setBanner('image file / image url'); // same as setAvatar & Require Nitro level 2 -// Set Discord Tag -await client.user.setDiscriminator('1234', 'password'); // #1234 & Require Nitro -// Set About me -await client.user.setAboutMe('Hello World'); -// Set Email -await client.user.setEmail('aiko.dev@mail.nezukobot.vn', 'password'); // It is clone email =)) -// Change Password -await client.user.setPassword('old password', 'new password'); -// Disable Account -await client.user.disableAccount('password'); -// Delete Account [WARNING] Cannot be changed once used! -await client.user.deleteAccount('password'); -// Redeem Nitro -await client.redeemNitro('code') -``` -
diff --git a/Document/VoiceCall.md b/Document/VoiceCall.md deleted file mode 100644 index 8f02383..00000000 --- a/Document/VoiceCall.md +++ /dev/null @@ -1,628 +0,0 @@ -# Setup -- Before you use it, properly initialize the module (`@discordjs/voice` patch) - -```js -new Client({ - patchVoice: true, -}) -``` - -# Usage: Call DM / Group DM - -```js -const dmChannel = client.channels.cache.get('id'); -/* or -const dmChannel = User.dmChannel || await User.createDM(); -*/ -const connection = await dmChannel.call(); -/* Return @discordjs/voice VoiceConnection */ -``` - -# Play Music using `play-dl` - -```js -const play = require('play-dl'); -const { - createAudioPlayer, - createAudioResource, - NoSubscriberBehavior, -} = require('@discordjs/voice'); -const channel = (await (message.member.user.dmChannel || message.member.user.createDM())); -const connection = channel.voiceConnection || await channel.call(); -let stream; -if (!args[0]) { - return message.channel.send('Enter something to search for.'); -} else if (args[0].startsWith('https://www.youtube.com/watch?v=')) { - stream = await play.stream(args.join(' ')); -} else { - const yt_info = await play.search(args, { - limit: 1 - }); - stream = await play.stream(yt_info[0].url); -} -const resource = createAudioResource(stream.stream, { - inputType: stream.type, - inlineVolume: true, -}); -resource.volume.setVolume(0.25); -const player = createAudioPlayer({ - behaviors: { - noSubscriber: NoSubscriberBehavior.Play, - }, -}); -let i = setInterval(() => { - const m = channel.voiceUsers.get(message.author.id); - if (m) { - player.play(resource); - connection.subscribe(player); - clearInterval(i); - } - else console.log('waiting for voice connection'); -}, 250); -``` - -# Play Music with module (support Play, Pause, Search, Skip, Previous, Volume, Loop) - -```js -/* Copyright aiko-chan-ai @2022. All rights reserved. */ -const DjsVoice = require('@discordjs/voice'); -const Discord = require('discord.js-selfbot-v13'); -const playDL = require('play-dl'); -const EventEmitter = require('events'); -const Event = { - READY: 'ready', - NO_SEARCH_RESULT: 'searchNoResult', - SEARCH_RESULT: 'searchResult', - PLAY_SONG: 'playSong', - ADD_SONG: 'addSong', - ADD_PLAYLIST: 'addPlaylist', - LEAVE_VC: 'disconnect', - FINISH: 'finish', - EMPTY: 'empty', - ERROR: 'error', -} -class Stack { - constructor() { - this.data = []; - } - - push(item) { - return this.data.push(item); - } - - pop() { - return this.data.pop(); - } - - peek() { - return this.data[this.length - 1]; - } - - get length() { - return this.data.length; - } - - isEmpty() { - return this.length === 0; - } - - reset () { - this.data = []; - return this; - } -} - -class Queue { - constructor() { - this.data = []; - } - - enqueue(item) { - return this.data.unshift(item); - } - - dequeue() { - return this.data.pop(); - } - - peek() { - return this.data[this.length - 1]; - } - - get length() { - return this.data.length; - } - - isEmpty() { - return this.data.length === 0; - } - - reset() { - this.data = []; - return this; - } -} -class Player extends EventEmitter { - constructor(client, options = {}) { - super(); - if (!client || !client instanceof Discord.Client) throw new Error('Invalid Discord Client (Selfbot)'); - Object.defineProperty(this, 'client', { value: client }); - this._playDl = playDL; - this._queue = new Queue(); - this._previousSongs = new Stack(); - this.song = null; - this.guild = undefined; - this.channel = undefined; - this._currentResourceAudio = undefined; - this._currentTime = 0; - this._playingTime = null; - this.isPlaying = false; - this.volume = 100; - this.loopMode = 0; - this.message = undefined; - this._timeoutEmpty = undefined; - this._player = DjsVoice.createAudioPlayer({ - behaviors: { - noSubscriber: DjsVoice.NoSubscriberBehavior.Play, - }, - }); - this._playerEvent(); - this._validateOptions(options); - this._discordEvent(); - this._privateEvent(); - } - get currentTime() { - return this._currentTime || Date.now() - this._playingTime; - } - get currentConnection() { - return DjsVoice.getVoiceConnection(this.guild?.id || null); - } - get queue() { - return this._queue.data; - } - get previousSongs() { - return this._previousSongs.data; - } - authorization() { - this._playDl.authorization(); - } - _validateOptions(options) { - if (typeof options !== 'object') throw new Error(`Invalid options type (Required: object, got: ${typeof options})`); - this.options = { - directLink: true, - joinNewVoiceChannel: true, - waitingUserToPlayInDMs: true, - nsfw: false, - leaveOnEmpty: true, - leaveOnFinish: true, - leaveOnStop: true, - savePreviousSongs: true, - emptyCooldown: 10_000, - } - if (typeof options.directLink === 'boolean') { - this.options.directLink = options.directLink; - } - if (typeof options.joinNewVoiceChannel === 'boolean') { - this.options.joinNewVoiceChannel = options.joinNewVoiceChannel; - } - if (typeof options.waitingUserToPlayInDMs === 'boolean') { - this.options.waitingUserToPlayInDMs = options.waitingUserToPlayInDMs; - } - if (typeof options.nsfw === 'boolean') { - this.options.nsfw = options.nsfw; - } - if (typeof options.leaveOnEmpty === 'boolean') { - if (typeof options.emptyCooldown === 'number') { - this.options.leaveOnEmpty = options.leaveOnEmpty; - this.options.emptyCooldown = options.emptyCooldown; - } else { - this.options.leaveOnEmpty = false; - } - } - if (typeof options.leaveOnFinish === 'boolean') { - this.options.leaveOnFinish = options.leaveOnFinish; - } - if (typeof options.leaveOnStop === 'boolean') { - this.options.leaveOnStop = options.leaveOnStop; - } - if (typeof options.savePreviousSongs === 'boolean') { - this.options.savePreviousSongs = options.savePreviousSongs; - } - } - async play(options = {}) { - const { - message, - channel, - query, - } = options; - if (!(message instanceof Discord.Message)) throw new Error(`Invalid message type (Required: Message, got: ${typeof message})`); - if (channel && - ( - channel instanceof Discord.DMChannel || - channel instanceof Discord.PartialGroupDMChannel || - channel instanceof Discord.VoiceChannel || - channel instanceof Discord.StageChannel - ) - ) { - let checkChangeVC = false; - if (!this.channel) this.channel = channel; - else { - if (this.options.joinNewVoiceChannel) { - if (this.channel.id !== channel.id) checkChangeVC = true; - this.channel = channel; - } - } - this.guild = channel.guild; - this.message = message; - if (typeof query !== 'string') throw new Error(`Invalid query type (Required: string, got: ${typeof query})`); - const result = await this.search(message, query); - if (result.length < 1) { - throw new Error('No search result with the given query: ' + query); - } else { - for (let i = 0; i < result.length; i++) { - this._queue.enqueue(result[i]); - } - if (!this.isPlaying) { - this._skip(checkChangeVC); - } else if (!result[0].playlist) { - this.emit(Event.ADD_SONG, result[0]); - } - } - } else { - throw new Error(`Invalid channel. Make sure the channel is a DMChannel | PartialGroupDMChannel | VoiceChannel | StageChannel.`); - } - } - async search(message, query, limit = 1) { - if (!(message instanceof Discord.Message)) throw new Error(`Invalid message type (Required: Message, got: ${typeof message})`); - if (typeof query !== 'string') throw new Error(`Invalid query type (Required: string, got: ${typeof query})`); - if (typeof limit !== 'number') throw new Error(`Invalid limit type (Required: number, got: ${typeof limit})`); - if (limit < 1) { - limit = 1; - process.emitWarning(`Invalid limit value (Required: 1 or more, got: ${limit})`); - }; - if (limit > 10) { - limit = 10; - process.emitWarning(`Invalid limit value (Required: 10 or less, got: ${limit})`); - }; - if (/^(https?\:\/\/)?(www\.youtube\.com|youtu\.be)\/.+$/.test(query)) { - const validateData = this._playDl.yt_validate(query); - if (validateData == 'video') { - const result = await this._playDl.video_info(query); - return [result.video_details]; - } else if (validateData == 'playlist') { - const result = await this._playDl.playlist_info(query); - this.emit(Event.ADD_PLAYLIST, result); - const allVideo = await result.all_videos(); - return allVideo.map(video => { - Object.defineProperty(video, 'playlist', { value: result }); - return video; - }); - } else { - return this.emit(Event.ERROR, new Error('Invalid YouTube URL: ' + query)); - } - } else { - const result = await this._playDl.search(query, { - limit, - unblurNSFWThumbnails: this.options.nsfw, - }); - if (result.length < 1) { - this.emit(Event.NO_SEARCH_RESULT, message, query, limit); - return []; - } else { - this.emit(Event.SEARCH_RESULT, message, result, query, limit); - return result; - } - } - } - setLoopMode(mode) { - if ([0, 1, 2].includes(mode)) { - this._loopMode = mode; - } else { - throw new Error(`Invalid mode value (Required: 0 [No loop], 1 [Loop song], 2 [Loop queue], got: ${mode})`); - } - } - async createStream(url) { - const stream = await this._playDl.stream(url); - const resource = DjsVoice.createAudioResource(stream.stream, { - inputType: stream.type, - inlineVolume: true, - }); - this._currentResourceAudio = resource; - this.setVolume(this.volume); - } - _play() { - this._player.play(this._currentResourceAudio); - } - setVolume(volume) { - if (!this._currentResourceAudio) throw new Error('No current resource audio'); - if (typeof volume !== 'number') throw new Error(`Invalid volume type (Required: number, got: ${typeof volume})`); - if (volume < 0) { - volume = 0; - process.emitWarning(`Invalid volume value (Required: 0 or more, got: ${volume})`); - } else if (volume > 100) { - volume = 100; - process.emitWarning(`Invalid volume value (Required: 100 or less, got: ${volume})`); - } - this._currentResourceAudio.volume.setVolume((volume / 100).toFixed(2)); - this.volume = (volume / 100).toFixed(2) * 100; - return (volume / 100).toFixed(2) * 100; - } - pause() { - if (!this._currentResourceAudio) throw new Error('No current resource audio'); - this._player.pause(); - } - resume() { - if (!this._currentResourceAudio) throw new Error('No current resource audio'); - this._player.unpause(); - } - stop() { - if (!this._currentResourceAudio) throw new Error('No current resource audio'); - this._stop(false, this.options.leaveOnStop); - } - _reset(){ - this._currentTime = 0; - this._currentResourceAudio = null; - this._playingTime = 0; - this.isPlaying = false; - this._player.stop(); - } - _stop(finish = false, force = false) { - if (!this._currentResourceAudio) return; - this._queue.reset(); - this._previousSongs.reset(); - this._timeoutEmpty = undefined; - this._reset(); - if (force || finish && this.options.leaveOnFinish) this.currentConnection?.destroy(); - this.channel = null; - this.guild = null; - this.song = null; - this.volume = 100; - this.loopMode = 0; - this.message = null; - } - skip() { - this._skip(); - } - async _skip(checkChangeVC = false) { - if (!this._queue.length) throw new Error('No song in the queue'); - const currentSong = this.song; - if (this.loopMode == 0) { - if (this.options.savePreviousSongs) this._previousSongs.push(currentSong); - const nextSong = this._queue.dequeue(); - this.song = nextSong; - } else if (this.loopMode == 1) { - this.song = currentSong; - } else if (this.loopMode == 2) { - this._queue.enqueue(currentSong); - const nextSong = this._queue.dequeue(); - this.song = nextSong; - } - await this.createStream(this.song.url); - await this.joinVC(checkChangeVC); - this.emit(Event.PLAY_SONG, this.song); - if (!this.guild?.id) await this._awaitDM(); - this._play(); - this._playingTime = Date.now(); - } - async previous() { - if (!this._previousSongs.length) throw new Error('No previous songs'); - const currentSong = this.song; - // add to queue - this._queue.enqueue(currentSong); - const previousSong = this._previousSongs.pop(); - this.song = previousSong; - await this.createStream(this.song.url); - await this.joinVC(); - this._play(); - this.emit(Event.PLAY_SONG, this.song, this.queue); - } - async joinVC(changeVC = false) { - if (this.currentConnection && !changeVC) { - this.currentConnection.subscribe(this._player); - } else if (this.channel instanceof Discord.VoiceChannel) { - const connection = DjsVoice.joinVoiceChannel({ - channelId: this.channel.id, - guildId: this.guild.id, - adapterCreator: this.guild.voiceAdapterCreator, - }); - await DjsVoice.entersState( - connection, - DjsVoice.VoiceConnectionStatus.Ready, - 10_000, - ); - connection.subscribe(this._player); - } else if (this.channel instanceof Discord.StageChannel) { - const connection = DjsVoice.joinVoiceChannel({ - channelId: this.channel.id, - guildId: this.guild.id, - adapterCreator: this.guild.voiceAdapterCreator, - }); - await DjsVoice.entersState( - connection, - DjsVoice.VoiceConnectionStatus.Ready, - 10_000, - ); - connection.subscribe(this._player); - await this.channel.guild.members.me.voice - .setSuppressed(false) - .catch(async () => { - return await this.channel.guild.members.me.voice - .setRequestToSpeak(true); - }); - } else { - const connection = this.channel.voiceConnection || await this.channel.call(); - connection.subscribe(this._player); - } - } - _discordEvent() { - // Event sus .-. - this.client.on('voiceStateUpdate', (oldState, newState) => { - if (!this._currentResourceAudio) return; - if (newState.guild?.id == this.guild?.id) { - if (oldState.channel?.id !== newState.channel?.id && oldState.channel?.id && newState.channel?.id && newState.id == this.client.user.id) { - // change vc - } - if (newState.id == this.client.user.id && oldState.channel?.members?.has(this.client.user.id) && !newState.channel?.members?.has(this.client.user.id)) { - this._stop(); - this.emit(Event.LEAVE_VC, this.message); - } - if (newState.channel?.members?.has(this.client.user.id) && !newState.channel?.members?.filter(m => m.id != this.client.user.id && !m.bot).size) { - // empty - if (this.options.leaveOnEmpty && !this._timeoutEmpty) { - this._timeoutEmpty = setTimeout(() => { - this._stop(false, true); - this.emit(Event.EMPTY, this.message); - }, this.options.emptyCooldown); - } - } - if (newState.channel?.members?.has(this.client.user.id) && newState.channel?.members?.filter(m => m.id != this.client.user.id && !m.bot).size > 0) { - // not empty - if (this._timeoutEmpty) clearTimeout(this._timeoutEmpty); - this._timeoutEmpty = undefined; - } - } else if (!this.guild?.id && !newState.guild?.id) { - // DM channels - if (!newState.channel?.voiceUsers?.filter(m => m.id != this.client.user.id).size) { - // empty - if (this.options.leaveOnEmpty && !this._timeoutEmpty) { - this._timeoutEmpty = setTimeout(() => { - this._stop(false, true); - this.emit(Event.EMPTY, this.message); - }, this.options.emptyCooldown); - } - } - if (newState.channel?.voiceUsers?.filter(m => m.id != this.client.user.id).size > 0) { - // not empty - if (this._timeoutEmpty) clearTimeout(this._timeoutEmpty); - this._timeoutEmpty = undefined; - } - } - }); - } - _awaitDM () { - if (!this.options.waitingUserToPlayInDMs) return true; - return new Promise(resolve => { - let i = setInterval(() => { - const m = this.channel.voiceUsers.get(this.client.user.id); - if (m) { - clearInterval(i); - resolve(true); - } - }, 250); - }) - } - _privateEvent() { - this.on('next_song', async () => { - await this._skip().catch(() => { - if (this.message) this.emit(Event.FINISH, this.message); - this._reset(); - }); - }); - } - _playerEvent() { - const player = this._player; - player.on('stateChange', async (oldState, newState) => { - // idle -> playing - // idle -> buffering - // buffering -> playing - // playing -> idle - if (newState.status.toLowerCase() == 'idle') { - this.isPlaying = false; - } else if (newState.status.toLowerCase() == 'paused' || newState.status.toLowerCase() == 'autopaused') { - this.isPlaying = false; - } else { - this.isPlaying = true; - } - this._currentTime = newState.playbackDuration; - // - if (oldState.status == 'playing' && newState.status == 'idle') { - this.emit('next_song'); - } - }); - player.on('error', (e) => { - this.emit(Event.ERROR, e); - }); - } -} - -module.exports = Player; - -/* Example -const player = new Player(client, options); - -player - .on('playSong', song => { - player.message.channel.send(`Now playing: ${song.title}`); - }) - .on('addSong', song => { - player.message.channel.send(`Added: ${song.title}`); - }) - .on('addPlaylist', playlist => { - player.message.channel.send(`Added Playlist: ${playlist.title}`); - }) - .on('disconnect', (message) => { - message.channel.send('Disconnected from voice channel.'); - }) - .on('finish', (message) => { - message.channel.send('Finished playing.'); - }) - .on('empty', (message) => { - message.channel.send('The queue is empty.'); - }) - .on('error', error => { - console.log('Music error', error); - }) - -client.player = player; - -// Method - -client.player.play({ - message, - channel: message.member.voice.channel, // VoiceChannel | DMChannel | StageChannel | GroupDMChannel - query: string, -}); - -client.player.skip(); - -client.player.previous(); - -client.player.pause(); - -client.player.resume(); - -client.player.setVolume(50); // 50% - -client.player.setLoopMode(1); // 0: none, 1: song, 2: queue; - -client.player.stop(); - -// Options - -options = { - directLink: true, // Whether or not play direct link of the song (not support) - joinNewVoiceChannel: true, // Whether or not joining the new voice channel when using #play method - waitingUserToPlayInDMs: true, // Waiting User join Call to play in DM channels - nsfw: false, // Whether or not play NSFW - leaveOnEmpty: true, // Whether or not leave voice channel when empty (not working) - leaveOnFinish: true, // Whether or not leave voice channel when finish - leaveOnStop: true, // Whether or not leave voice channel when stop - savePreviousSongs: true, // Whether or not save previous songs - emptyCooldown: 10_000, // Cooldown when empty voice channel -} - -// Properties - -song = Song; -guild = Discord.Guild; -channel = Channel; -client = Discord.Client; -isPlaying = false; -volume = 100; -currentTime = Unix timestamp miliseconds; -currentConnection = VoiceConnection; -queue: Song[]; -previousSongs: Song[]; -loopMode = 0; -*/ -``` diff --git a/README.md b/README.md index 3c8ab27..e4dbf45 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ ## About -Welcome to `discord.js-selfbot-v13@v2.15`, based on `discord.js@13.17` +Welcome to `discord.js-selfbot-v13@v3.0`, based on `discord.js@13.17` - discord.js-selfbot-v13 is a [Node.js](https://nodejs.org) module that allows user accounts to interact with the Discord API v9. @@ -57,7 +57,7 @@ **Node.js 16.6.0 or newer is required** -> Recommended Node.js version: 18 (LTS) +> Recommended Node.js version: 18+ (LTS) ```sh-session npm install discord.js-selfbot-v13@latest @@ -106,9 +106,6 @@ console.log('%cWorked!', 'font-size: 50px'); console.log(`%cYou now have your token in the clipboard!`, 'font-size: 16px'); ``` -Credit: . [hxr404](https://github.com/hxr404/Discord-Console-hacks) - - ## Contributing - Before creating an issue, please ensure that it hasn't already been reported/suggested, and double-check the @@ -127,7 +124,6 @@ Github Discussion: [Here](https://github.com/aiko-chan-ai/discord.js-selfbot-v13 A patched version of discord, with bot login support - 📕 [***aiko-chan-ai/Discord-Markdown***](https://github.com/aiko-chan-ai/Discord-Markdown)
Better Markdown to text chat Discord. -- 📗 ... ## Star History diff --git a/package.json b/package.json index cf1bbc7..743a76c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "discord.js-selfbot-v13", - "version": "2.15.1", + "version": "3.0.0", "description": "A unofficial discord.js fork for creating selfbots [Based on discord.js v13]", "main": "./src/index.js", "types": "./typings/index.d.ts", @@ -54,7 +54,6 @@ "@aikochan2k6/qrcode-terminal": "^0.12.1", "@discordjs/builders": "^1.6.3", "@discordjs/collection": "^1.5.3", - "@discordjs/voice": "^0.16.0", "@sapphire/async-queue": "^1.5.0", "@sapphire/shapeshift": "^3.9.3", "@types/node-fetch": "^2.6.7", @@ -62,12 +61,7 @@ "discord-api-types": "^0.37.61", "fetch-cookie": "^2.1.0", "form-data": "^4.0.0", - "json-bigint": "^1.0.0", - "lodash.permutations": "^1.0.0", "node-fetch": "^2.6.9", - "safe-base64": "^2.0.1-0", - "string-similarity": "^4.0.4", - "string_decoder": "^1.3.0", "tough-cookie": "^4.1.3", "ws": "^8.14.2" }, diff --git a/src/client/Client.js b/src/client/Client.js index 8459cb3..f520433 100644 --- a/src/client/Client.js +++ b/src/client/Client.js @@ -1,46 +1,40 @@ 'use strict'; const process = require('node:process'); -const { setInterval, setTimeout } = require('node:timers'); +const { setInterval } = require('node:timers'); +const { setTimeout } = require('node:timers'); const { Collection } = require('@discordjs/collection'); -const { getVoiceConnection } = require('@discordjs/voice'); -const chalk = require('chalk'); -const fetch = require('node-fetch'); const BaseClient = require('./BaseClient'); const ActionsManager = require('./actions/ActionsManager'); const ClientVoiceManager = require('./voice/ClientVoiceManager'); const WebSocketManager = require('./websocket/WebSocketManager'); const { Error, TypeError, RangeError } = require('../errors'); -const Discord = require('../index'); const BaseGuildEmojiManager = require('../managers/BaseGuildEmojiManager'); const BillingManager = require('../managers/BillingManager'); const ChannelManager = require('../managers/ChannelManager'); -const ClientUserSettingManager = require('../managers/ClientUserSettingManager'); -const DeveloperPortalManager = require('../managers/DeveloperPortalManager'); const GuildManager = require('../managers/GuildManager'); +const PresenceManager = require('../managers/PresenceManager'); const RelationshipManager = require('../managers/RelationshipManager'); -const SessionManager = require('../managers/SessionManager'); const UserManager = require('../managers/UserManager'); +const UserNoteManager = require('../managers/UserNoteManager'); const VoiceStateManager = require('../managers/VoiceStateManager'); const ShardClientUtil = require('../sharding/ShardClientUtil'); const ClientPresence = require('../structures/ClientPresence'); const GuildPreview = require('../structures/GuildPreview'); const GuildTemplate = require('../structures/GuildTemplate'); const Invite = require('../structures/Invite'); -const { CustomStatus } = require('../structures/RichPresence'); const { Sticker } = require('../structures/Sticker'); const StickerPack = require('../structures/StickerPack'); const VoiceRegion = require('../structures/VoiceRegion'); const Webhook = require('../structures/Webhook'); const Widget = require('../structures/Widget'); -const { Events, InviteScopes, Status, captchaServices } = require('../util/Constants'); +const { Events, Status } = require('../util/Constants'); const DataResolver = require('../util/DataResolver'); const Intents = require('../util/Intents'); const Options = require('../util/Options'); const Permissions = require('../util/Permissions'); const DiscordAuthWebsocket = require('../util/RemoteAuth'); const Sweepers = require('../util/Sweepers'); -const { getProxyObject } = require('../util/Util'); /** * The main hub for interacting with the Discord API, and the starting point for any bot. @@ -50,7 +44,7 @@ class Client extends BaseClient { /** * @param {ClientOptions} options Options for the client */ - constructor(options = {}) { + constructor(options) { super(options); const data = require('node:worker_threads').workerData ?? process.env; @@ -141,17 +135,6 @@ class Client extends BaseClient { */ this.users = new UserManager(this); - // Patch - /** - * All of the relationships {@link User} - * @type {RelationshipManager} - */ - this.relationships = new RelationshipManager(this); - /** - * All of the settings {@link Object} - * @type {ClientUserSettingManager} - */ - this.settings = new ClientUserSettingManager(this); /** * All of the guilds the client is currently handling, mapped by their ids - * as long as sharding isn't being used, this will be *every* guild the bot is a member of @@ -159,18 +142,6 @@ class Client extends BaseClient { */ this.guilds = new GuildManager(this); - /** - * Manages the API methods - * @type {BillingManager} - */ - this.billing = new BillingManager(this); - - /** - * All of the sessions of the client - * @type {SessionManager} - */ - this.sessions = new SessionManager(this); - /** * All of the {@link Channel}s that the client is currently handling, mapped by their ids - * as long as sharding isn't being used, this will be *every* channel in *every* guild the bot @@ -186,12 +157,6 @@ class Client extends BaseClient { */ this.sweepers = new Sweepers(this, this.options.sweepers); - /** - * The developer portal manager of the client - * @type {DeveloperPortalManager} - */ - this.developerPortal = new DeveloperPortalManager(this); - /** * The presence of the Client * @private @@ -199,6 +164,30 @@ class Client extends BaseClient { */ this.presence = new ClientPresence(this, this.options.presence); + /** + * A manager of the presences belonging to this client + * @type {PresenceManager} + */ + this.presences = new PresenceManager(this); + + /** + * All of the note that have been cached at any point, mapped by their ids + * @type {UserManager} + */ + this.notes = new UserNoteManager(this); + + /** + * All of the relationships {@link User} + * @type {RelationshipManager} + */ + this.relationships = new RelationshipManager(this); + + /** + * Manages the API methods + * @type {BillingManager} + */ + this.billing = new BillingManager(this); + Object.defineProperty(this, 'token', { writable: true }); if (!this.token && 'DISCORD_TOKEN' in process.env) { /** @@ -212,20 +201,12 @@ class Client extends BaseClient { this.token = null; } - this._interactionCache = new Collection(); - /** * User that the client is logged in as * @type {?ClientUser} */ this.user = null; - /** - * The application of this bot - * @type {?ClientApplication} - */ - this.application = null; - /** * Time at which the client was last regarded as being in the `READY` state * (each time the client disconnects and successfully reconnects, this will be overwritten) @@ -233,12 +214,6 @@ class Client extends BaseClient { */ this.readyAt = null; - /** - * Password cache - * @type {?string} - */ - this.password = this.options.password; - if (this.options.messageSweepInterval > 0) { process.emitWarning( 'The message sweeping client options are deprecated, use the global sweepers instead.', @@ -251,15 +226,6 @@ class Client extends BaseClient { } } - /** - * Session ID - * @type {?string} - * @readonly - */ - get sessionId() { - return this.ws.shards.first()?.sessionId; - } - /** * All custom emojis that the client has access to, mapped by their ids * @type {BaseGuildEmojiManager} @@ -291,19 +257,6 @@ class Client extends BaseClient { return this.readyAt ? Date.now() - this.readyAt : null; } - /** - * @external VoiceConnection - * @see {@link https://discord.js.org/#/docs/voice/main/class/VoiceConnection} - */ - /** - * Get connection to current call - * @type {?VoiceConnection} - * @readonly - */ - get callVoice() { - return getVoiceConnection(null); - } - /** * Logs the client in, establishing a WebSocket connection to Discord. * @param {string} [token=this.token] Token of the account to log in with @@ -320,8 +273,7 @@ class Client extends BaseClient { Logging on with a user token is unfortunately against the Discord \`Terms of Service\` and doing so might potentially get your account banned. - Use this at your own risk. -`, + Use this at your own risk.`, ); this.emit( Events.DEBUG, @@ -346,178 +298,10 @@ class Client extends BaseClient { } } - /** - * Login Discord with Username and Password - * @param {string} username Email or Phone Number - * @param {?string} password Password - * @param {?string} mfaCode 2FA Code / Backup Code - * @returns {Promise} - */ - async normalLogin(username, password = this.password, mfaCode) { - if (!username || !password || typeof username !== 'string' || typeof password !== 'string') { - throw new Error('NORMAL_LOGIN'); - } - this.emit( - Events.DEBUG, - `Connecting to Discord with: - username: ${username} - password: ${password.replace(/./g, '*')}`, - ); - const data = await this.api.auth.login.post({ - data: { - login: username, - password: password, - undelete: false, - captcha_key: null, - login_source: null, - gift_code_sku_id: null, - }, - auth: false, - }); - this.password = password; - if (!data.token && data.ticket && data.mfa) { - this.emit(Events.DEBUG, `Using 2FA Code: ${mfaCode}`); - const normal2fa = /(\d{6})/g; - const backupCode = /([a-z0-9]{4})-([a-z0-9]{4})/g; - if (!mfaCode || typeof mfaCode !== 'string') { - throw new Error('LOGIN_FAILED_2FA'); - } - if (normal2fa.test(mfaCode) || backupCode.test(mfaCode)) { - const data2 = await this.api.auth.mfa.totp.post({ - data: { - code: mfaCode, - ticket: data.ticket, - login_source: null, - gift_code_sku_id: null, - }, - auth: false, - }); - return this.login(data2.token); - } else { - throw new Error('LOGIN_FAILED_2FA'); - } - } else if (data.token) { - return this.login(data.token); - } else { - throw new Error('LOGIN_FAILED_UNKNOWN'); - } - } - - /** - * Switch the user - * @param {string} token User Token - * @returns {Promise} - */ - switchUser(token) { - this._clearCache(this.emojis.cache); - this._clearCache(this.guilds.cache); - this._clearCache(this.channels.cache); - this._clearCache(this.users.cache); - this._clearCache(this.relationships.cache); - this._clearCache(this.sessions.cache); - this._clearCache(this.voiceStates.cache); - this.ws.status = Status.IDLE; - return this.login(token); - } - - /** - * Sign in with the QR code on your phone. - * @param {DiscordAuthWebsocketOptions} options Options - * @returns {DiscordAuthWebsocket} - * @example - * client.QRLogin(); - */ - QRLogin(options = {}) { - const QR = new DiscordAuthWebsocket({ ...options, autoLogin: true }); - this.emit(Events.DEBUG, `Preparing to connect to the gateway (QR Login)`, QR); - return QR.connect(this); - } - - /** - * Implement `remoteAuth`, like using your phone to scan a QR code - * @param {string} url URL from QR code - * @returns {Promise} - */ - async remoteAuth(url) { - if (!this.isReady()) throw new Error('CLIENT_NOT_READY', 'Remote Auth'); - // Step 1: Parse URL - url = new URL(url); - if ( - !['discordapp.com', 'discord.com'].includes(url.hostname) || - !url.pathname.startsWith('/ra/') || - url.pathname.length <= 4 - ) { - throw new Error('INVALID_REMOTE_AUTH_URL'); - } - const hash = url.pathname.replace('/ra/', ''); - // Step 2: Post > Get handshake_token - const res = await this.api.users['@me']['remote-auth'].post({ - data: { - fingerprint: hash, - }, - }); - const handshake_token = res.handshake_token; - // Step 3: Post - return this.api.users['@me']['remote-auth'].finish.post({ data: { handshake_token, temporary_token: false } }); - // Cancel - // this.api.users['@me']['remote-auth'].cancel.post({ data: { handshake_token } }); - } - - /** - * Create a new token based on the current token - * @returns {Promise} New Discord Token - */ - createToken() { - return new Promise((resolve, reject) => { - // Step 1: Create DiscordAuthWebsocket - const QR = new DiscordAuthWebsocket({ - hiddenLog: true, - generateQR: false, - autoLogin: false, - debug: false, - failIfError: false, - userAgent: this.options.http.headers['User-Agent'], - wsProperties: this.options.ws.properties, - }); - // Step 2: Add event - QR.once('ready', async (_, url) => { - try { - await this.remoteAuth(url); - } catch (e) { - reject(e); - } - }).once('finish', (user, token) => { - resolve(token); - }); - // Step 3: Connect - QR.connect(); - }); - } - - /** - * Emitted whenever clientOptions.checkUpdate = false - * @event Client#update - * @param {string} oldVersion Current version - * @param {string} newVersion Latest version - */ - - /** - * Check for updates - * @returns {Promise} - */ - async checkUpdate() { - const res_ = await ( - await fetch(`https://registry.npmjs.com/${encodeURIComponent('discord.js-selfbot-v13')}`) - ).json(); - try { - const latest_tag = res_['dist-tags'].latest; - this.emit('update', Discord.version, latest_tag); - this.emit('debug', `${chalk.greenBright('[OK]')} Check Update success`); - } catch { - this.emit('debug', `${chalk.redBright('[Fail]')} Check Update error`); - this.emit('update', Discord.version, false); - } - return this; + QRLogin() { + const ws = new DiscordAuthWebsocket(); + ws.once('ready', () => ws.generateQR()); + return ws.connect(this); } /** @@ -544,7 +328,6 @@ class Client extends BaseClient { this.sweepers.destroy(); this.ws.destroy(); this.token = null; - this.password = null; } /** @@ -558,7 +341,7 @@ class Client extends BaseClient { voip_provider: null, }, }); - await this.destroy(); + return this.destroy(); } /** @@ -586,51 +369,6 @@ class Client extends BaseClient { return new Invite(this, data); } - /** - * Join this Guild using this invite (fast) - * @param {InviteResolvable} invite Invite code or URL - * @returns {Promise} - * @example - * await client.acceptInvite('https://discord.gg/genshinimpact') - */ - async acceptInvite(invite) { - const code = DataResolver.resolveInviteCode(invite); - if (!code) throw new Error('INVITE_RESOLVE_CODE'); - if (invite instanceof Invite) { - await invite.acceptInvite(); - } else { - await this.api.invites(code).post({ - headers: { - 'X-Context-Properties': 'eyJsb2NhdGlvbiI6Ik1hcmtkb3duIExpbmsifQ==', // Markdown Link - }, - data: { - session_id: this.sessionId, - }, - }); - } - } - - /** - * Redeem nitro from code or url. - * @param {string} nitro Nitro url or code - * @param {TextChannelResolvable} channel Channel that the code was sent in - * @param {Snowflake} [paymentSourceId] Payment source id - * @returns {Promise} - */ - redeemNitro(nitro, channel, paymentSourceId) { - if (typeof nitro !== 'string') throw new Error('INVALID_NITRO'); - const nitroCode = - nitro.match(/(discord.gift|discord.com|discordapp.com\/gifts)\/(\w{16,25})/) || - nitro.match(/(discord\.gift\/|discord\.com\/gifts\/|discordapp\.com\/gifts\/)(\w+)/); - if (!nitroCode) return false; - const code = nitroCode[2]; - channel = this.channels.resolveId(channel); - return this.api.entitlements['gift-codes'](code).redeem.post({ - auth: true, - data: { channel_id: channel || null, payment_source_id: paymentSourceId || null }, - }); - } - /** * Obtains a template from Discord. * @param {GuildTemplateResolvable} template Template code or URL @@ -721,16 +459,6 @@ class Client extends BaseClient { } } - /** - * Clear a cache - * @param {Collection} cache The cache to clear - * @returns {number} The number of removed entries - * @private - */ - _clearCache(cache) { - return cache.sweep(() => true); - } - /** * Sweeps all text-based channels' messages and removes the ones older than the max message lifetime. * If the message has been edited, the time of the edit is used rather than the time of the original message. @@ -791,65 +519,13 @@ class Client extends BaseClient { */ /** - * Generates a link that can be used to invite the bot to a guild. - * @param {InviteGenerationOptions} [options={}] Options for the invite - * @returns {string} - * @example - * const link = client.generateInvite({ - * scopes: ['applications.commands'], - * }); - * console.log(`Generated application invite link: ${link}`); - * @example - * const link = client.generateInvite({ - * permissions: [ - * Permissions.FLAGS.SEND_MESSAGES, - * Permissions.FLAGS.MANAGE_GUILD, - * Permissions.FLAGS.MENTION_EVERYONE, - * ], - * scopes: ['bot'], - * }); - * console.log(`Generated bot invite link: ${link}`); + * The sleep function in JavaScript returns a promise that resolves after a specified timeout. + * @param {number} timeout - The timeout parameter is the amount of time, in milliseconds, that the sleep + * function will wait before resolving the promise and continuing execution. + * @returns {void} The `sleep` function is returning a Promise. */ - generateInvite(options = {}) { - if (typeof options !== 'object') throw new TypeError('INVALID_TYPE', 'options', 'object', true); - if (!this.application) throw new Error('CLIENT_NOT_READY', 'generate an invite link'); - - const query = new URLSearchParams({ - client_id: this.application.id, - }); - - const { scopes } = options; - if (typeof scopes === 'undefined') { - throw new TypeError('INVITE_MISSING_SCOPES'); - } - if (!Array.isArray(scopes)) { - throw new TypeError('INVALID_TYPE', 'scopes', 'Array of Invite Scopes', true); - } - if (!scopes.some(scope => ['bot', 'applications.commands'].includes(scope))) { - throw new TypeError('INVITE_MISSING_SCOPES'); - } - const invalidScope = scopes.find(scope => !InviteScopes.includes(scope)); - if (invalidScope) { - throw new TypeError('INVALID_ELEMENT', 'Array', 'scopes', invalidScope); - } - query.set('scope', scopes.join(' ')); - - if (options.permissions) { - const permissions = Permissions.resolve(options.permissions); - if (permissions) query.set('permissions', permissions); - } - - if (options.disableGuildSelect) { - query.set('disable_guild_select', true); - } - - if (options.guild) { - const guildId = this.guilds.resolveId(options.guild); - if (!guildId) throw new TypeError('INVALID_TYPE', 'options.guild', 'GuildResolvable'); - query.set('guild_id', guildId); - } - - return `${this.options.http.api}${this.api.oauth2.authorize}?${query}`; + sleep(timeout) { + return new Promise(r => setTimeout(r, timeout)); } toJSON() { @@ -859,41 +535,46 @@ class Client extends BaseClient { } /** - * Calls {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval} on a script - * with the client as `this`. - * @param {string} script Script to eval - * @returns {*} - * @private + * Join this Guild using this invite (fast) + * @param {InviteResolvable} invite Invite code or URL + * @returns {Promise} + * @example + * await client.acceptInvite('https://discord.gg/genshinimpact') */ - _eval(script) { - return eval(script); + async acceptInvite(invite) { + const code = DataResolver.resolveInviteCode(invite); + if (!code) throw new Error('INVITE_RESOLVE_CODE'); + if (invite instanceof Invite) { + await invite.acceptInvite(); + } else { + await this.api.invites(code).post({ + DiscordContext: { location: 'Markdown Link' }, + data: { + session_id: this.ws.shards.first()?.sessionId, + }, + }); + } } /** - * Sets the client's presence. (Sync Setting). - * @param {Client} client Discord Client - * @private + * Redeem nitro from code or url. + * @param {string} nitro Nitro url or code + * @param {TextChannelResolvable} [channel] Channel that the code was sent in + * @param {Snowflake} [paymentSourceId] Payment source id + * @returns {Promise} */ - customStatusAuto(client) { - client = client ?? this; - if (!client.user) return; - const custom_status = new CustomStatus(); - if (!client.settings.rawSetting.custom_status?.text && !client.settings.rawSetting.custom_status?.emoji_name) { - client.user.setPresence({ - activities: this.presence.activities.filter(a => a.type !== 'CUSTOM'), - status: client.settings.rawSetting.status ?? 'invisible', - }); - } else { - custom_status.setEmoji({ - name: client.settings.rawSetting.custom_status?.emoji_name, - id: client.settings.rawSetting.custom_status?.emoji_id, - }); - custom_status.setState(client.settings.rawSetting.custom_status?.text); - client.user.setPresence({ - activities: [custom_status.toJSON(), ...this.presence.activities.filter(a => a.type !== 'CUSTOM')], - status: client.settings.rawSetting.status ?? 'invisible', - }); - } + redeemNitro(nitro, channel, paymentSourceId) { + if (typeof nitro !== 'string') throw new Error('INVALID_NITRO'); + const nitroCode = + nitro.match(/(discord.gift|discord.com|discordapp.com\/gifts)\/(\w{16,25})/) || + nitro.match(/(discord\.gift\/|discord\.com\/gifts\/|discordapp\.com\/gifts\/)(\w+)/); + if (!nitroCode) return false; + const code = nitroCode[2]; + channel = this.channels.resolveId(channel); + return this.api.entitlements['gift-codes'](code).redeem.post({ + auth: true, + data: { channel_id: channel || null, payment_source_id: paymentSourceId || null }, + }); } /** @@ -909,7 +590,7 @@ class Client extends BaseClient { * Authorize an application. * @param {string} url Discord Auth URL * @param {OAuth2AuthorizeOptions} options Oauth2 options - * @returns {Promise} + * @returns {Promise} * @example * client.authorizeURL(`https://discord.com/api/oauth2/authorize?client_id=botID&permissions=8&scope=applications.commands%20bot`, { guild_id: "guildID", @@ -937,12 +618,14 @@ class Client extends BaseClient { } /** - * Makes waiting time for Client. - * @param {number} miliseconds Sleeping time as milliseconds. - * @returns {Promise | null} + * Calls {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval} on a script + * with the client as `this`. + * @param {string} script Script to eval + * @returns {*} + * @private */ - sleep(miliseconds) { - return typeof miliseconds === 'number' ? new Promise(r => setTimeout(r, miliseconds).unref()) : null; + _eval(script) { + return eval(script); } /** @@ -956,73 +639,8 @@ class Client extends BaseClient { } else { options.intents = Intents.resolve(options.intents); } - if (options && typeof options.checkUpdate !== 'boolean') { - throw new TypeError('CLIENT_INVALID_OPTION', 'checkUpdate', 'a boolean'); - } - if (options && typeof options.syncStatus !== 'boolean') { - throw new TypeError('CLIENT_INVALID_OPTION', 'syncStatus', 'a boolean'); - } - if (options && typeof options.autoRedeemNitro !== 'boolean') { - throw new TypeError('CLIENT_INVALID_OPTION', 'autoRedeemNitro', 'a boolean'); - } - if (options && options.captchaService && !captchaServices.includes(options.captchaService)) { - throw new TypeError('CLIENT_INVALID_OPTION', 'captchaService', captchaServices.join(', ')); - } - // Parse captcha key - if (options && captchaServices.includes(options.captchaService) && options.captchaService !== 'custom') { - if (typeof options.captchaKey !== 'string') { - throw new TypeError('CLIENT_INVALID_OPTION', 'captchaKey', 'a string'); - } - switch (options.captchaService) { - case '2captcha': - if (options.captchaKey.length !== 32) { - throw new TypeError('CLIENT_INVALID_OPTION', 'captchaKey', 'a 32 character string'); - } - break; - case 'capmonster': - if (options.captchaKey.length !== 32) { - throw new TypeError('CLIENT_INVALID_OPTION', 'captchaKey', 'a 32 character string'); - } - break; - case 'nopecha': { - if (options.captchaKey.length !== 16) { - throw new TypeError('CLIENT_INVALID_OPTION', 'captchaKey', 'a 16 character string'); - } - break; - } - } - } - if (typeof options.captchaRetryLimit !== 'number' || isNaN(options.captchaRetryLimit)) { - throw new TypeError('CLIENT_INVALID_OPTION', 'captchaRetryLimit', 'a number'); - } - if (options && typeof options.captchaSolver !== 'function') { - throw new TypeError('CLIENT_INVALID_OPTION', 'captchaSolver', 'a function'); - } - if (options && typeof options.captchaWithProxy !== 'boolean') { - throw new TypeError('CLIENT_INVALID_OPTION', 'captchaWithProxy', 'a boolean'); - } - if (options && typeof options.DMSync !== 'boolean') { - throw new TypeError('CLIENT_INVALID_OPTION', 'DMSync', 'a boolean'); - } - if (options && typeof options.patchVoice !== 'boolean') { - throw new TypeError('CLIENT_INVALID_OPTION', 'patchVoice', 'a boolean'); - } - if (options && options.password && typeof options.password !== 'string') { - throw new TypeError('CLIENT_INVALID_OPTION', 'password', 'a string'); - } - if (options && options.usingNewAttachmentAPI && typeof options.usingNewAttachmentAPI !== 'boolean') { - throw new TypeError('CLIENT_INVALID_OPTION', 'usingNewAttachmentAPI', 'a boolean'); - } - if (options && options.interactionTimeout && typeof options.interactionTimeout !== 'number') { - throw new TypeError('CLIENT_INVALID_OPTION', 'interactionTimeout', 'a number'); - } - if (options && typeof options.proxy !== 'string') { - throw new TypeError('CLIENT_INVALID_OPTION', 'proxy', 'a string'); - } else if (options && options.proxy && typeof options.proxy === 'string') { - getProxyObject(options.proxy); - } - if (typeof options.shardCount !== 'number' || isNaN(options.shardCount) || options.shardCount < 1) { - throw new TypeError('CLIENT_INVALID_OPTION', 'shardCount', 'a number greater than or equal to 1'); + if (typeof options.shardCount !== 'number' || isNaN(options.shardCount) || options.shardCount !== 1) { + throw new TypeError('CLIENT_INVALID_OPTION', 'shardCount', 'a number equal to 1'); } if (options.shards && !(options.shards === 'auto' || Array.isArray(options.shards))) { throw new TypeError('CLIENT_INVALID_OPTION', 'shards', "'auto', a number or array of numbers"); @@ -1046,12 +664,15 @@ class Client extends BaseClient { if (!Array.isArray(options.partials)) { throw new TypeError('CLIENT_INVALID_OPTION', 'partials', 'an Array'); } - if (typeof options.waitGuildTimeout !== 'number' || isNaN(options.waitGuildTimeout)) { - throw new TypeError('CLIENT_INVALID_OPTION', 'waitGuildTimeout', 'a number'); - } if (typeof options.messageCreateEventGuildTimeout !== 'number' || isNaN(options.messageCreateEventGuildTimeout)) { throw new TypeError('CLIENT_INVALID_OPTION', 'messageCreateEventGuildTimeout', 'a number'); } + if (typeof options.DMChannelVoiceStatusSync !== 'number' || isNaN(options.DMChannelVoiceStatusSync)) { + throw new TypeError('CLIENT_INVALID_OPTION', 'DMChannelVoiceStatusSync', 'a number'); + } + if (typeof options.waitGuildTimeout !== 'number' || isNaN(options.waitGuildTimeout)) { + throw new TypeError('CLIENT_INVALID_OPTION', 'waitGuildTimeout', 'a number'); + } if (typeof options.restWsBridgeTimeout !== 'number' || isNaN(options.restWsBridgeTimeout)) { throw new TypeError('CLIENT_INVALID_OPTION', 'restWsBridgeTimeout', 'a number'); } diff --git a/src/client/websocket/handlers/READY.js b/src/client/websocket/handlers/READY.js index 6233b09..dfb0c41 100644 --- a/src/client/websocket/handlers/READY.js +++ b/src/client/websocket/handlers/READY.js @@ -1,105 +1,13 @@ 'use strict'; +const USER_REQUIRED_ACTION = require('./USER_REQUIRED_ACTION_UPDATE'); +const { Opcodes } = require('../../../util/Constants'); + let ClientUser; -const { VoiceConnection } = require('@discordjs/voice'); -const chalk = require('chalk'); -const { Events, Opcodes } = require('../../../util/Constants'); -const Util = require('../../../util/Util'); -const { VoiceConnection: VoiceConnection_patch } = require('../../../util/Voice'); -let firstReady = false; -function patchVoice(client) { - try { - /* eslint-disable */ - VoiceConnection.prototype.configureNetworking = VoiceConnection_patch.prototype.configureNetworking; - client.emit( - 'debug', - `${chalk.greenBright('[OK]')} Patched ${chalk.cyanBright( - 'VoiceConnection.prototype.configureNetworking', - )} [${chalk.bgMagentaBright('@discordjs/voice')} - ${chalk.redBright('v0.16.0')}]`, - ); - /* eslint-enable */ - } catch (e) { - client.emit( - 'debug', - `${chalk.redBright('[Fail]')} Patched ${chalk.cyanBright( - 'VoiceConnection.prototype.configureNetworking', - )} [${chalk.bgMagentaBright('@discordjs/voice')} - ${chalk.redBright('v0.16.0')}]\n${e.stack}`, - ); - client.emit( - Events.ERROR, - `${chalk.redBright('[Fail]')} Patched ${chalk.cyanBright( - 'VoiceConnection.prototype.configureNetworking', - )} [${chalk.bgMagentaBright('@discordjs/voice')} - ${chalk.redBright('v0.16.0')}]`, - ); - client.emit( - Events.ERROR, - `${chalk.redBright('[Error]')} Please install ${chalk.bgMagentaBright( - '@discordjs/voice', - )} version ${chalk.redBright('v0.16.0')}`, - ); - } -} - -module.exports = async (client, { d: data }, shard) => { - Util.clientRequiredAction(client, data.required_action); - if (!firstReady) { - if (client.options.checkUpdate) { - client.once('update', (currentVersion, newVersion) => { - if (!newVersion) { - console.log(` - ${chalk.redBright('[WARNING]')} Cannot check new Discord.js-selfbot-v13 version. - Current: ${chalk.blueBright(currentVersion)} - - If you don't want to show this message, set ${chalk.cyanBright('checkUpdate')} to false - - const client = new Client({ - checkUpdate: false, - }); - - and using event update - https://discordjs-self-v13.netlify.app/#/docs/docs/main/class/Client?scrollTo=e-update\n`); - } else if (currentVersion !== newVersion && !currentVersion.includes('-')) { - console.log(` - ${chalk.yellowBright('[WARNING]')} New Discord.js-selfbot-v13 version. - Current: ${chalk.redBright(currentVersion)} => Latest: ${chalk.greenBright(newVersion)} - - If you don't want to show this message, set ${chalk.cyanBright('checkUpdate')} to false - - const client = new Client({ - checkUpdate: false, - }); - - and using event update - https://discordjs-self-v13.netlify.app/#/docs/docs/main/class/Client?scrollTo=e-update\n`); - } else { - console.log( - ` - ${chalk.greenBright('[OK]')} Discord.js-selfbot-v13 is up to date. Current: ${chalk.blueBright(currentVersion)} - - If you don't want to show this message, set ${chalk.cyanBright('checkUpdate')} to false - - const client = new Client({ - checkUpdate: false, - }); - - and using event update - https://discordjs-self-v13.netlify.app/#/docs/docs/main/class/Client?scrollTo=e-update\n`, - ); - } - }); - client.checkUpdate(); - } - - if (client.options.patchVoice) { - patchVoice(client); - } - - if (client.options.syncStatus) { - client.customStatusAuto(client); - } - firstReady = true; - } +module.exports = (client, { d: data }, shard) => { + // Check + USER_REQUIRED_ACTION(client, { d: data }); if (client.user) { client.user._patch(data.user); @@ -109,31 +17,8 @@ module.exports = async (client, { d: data }, shard) => { client.users.cache.set(client.user.id, client.user); } - client.settings._patch(data.user_settings); - - client.user.connectedAccounts = data.connected_accounts ?? []; - - client.relationships._setup(data.relationships); - - client.user._patchNote(data.notes); - - const syncTime = Date.now(); for (const private_channel of data.private_channels) { - const channel = client.channels._add(private_channel); - // Rate limit warning - if (client.options.DMSync) { - client.ws.broadcast({ - op: Opcodes.DM_UPDATE, - d: { - channel_id: channel.id, - }, - }); - } - } - if (client.options.DMSync) { - console.warn( - `Gateway Rate Limit Warning: Sending ${data.private_channels.length} Requests / ${Date.now() - syncTime || 1} ms`, - ); + client.channels._add(private_channel); } for (const guild of data.guilds) { @@ -141,31 +26,41 @@ module.exports = async (client, { d: data }, shard) => { client.guilds._add(guild); } - for (const gSetting of Array.isArray(data.user_guild_settings) ? data.user_guild_settings : []) { - const guild = client.guilds.cache.get(gSetting.guild_id); - if (guild) guild.settings._patch(gSetting); - } - const largeGuilds = data.guilds.filter(g => g.large); - client.emit('debug', `[READY] Received ${data.guilds.length} guilds, ${largeGuilds.length} large guilds`); - // Receive messages in large guilds - for (const guild of largeGuilds) { - await client.sleep(client.options.messageCreateEventGuildTimeout); - client.ws.broadcast({ - op: Opcodes.GUILD_SUBSCRIPTIONS, - d: { - guild_id: guild.id, - typing: true, - threads: true, - activities: true, - thread_member_lists: [], - members: [], - channels: {}, - }, - }); - } + // User Notes + client.notes._reload(data.notes); - shard.checkReady(); + // Relationship + client.relationships._setup(data.relationships); + + Promise.all( + largeGuilds.map(async (guild, index) => { + client.ws.broadcast({ + op: Opcodes.GUILD_SUBSCRIPTIONS, + d: { + guild_id: guild.id, + typing: true, + threads: true, + activities: true, + thread_member_lists: [], + members: [], + channels: {}, + }, + }); + client.emit('debug', `[READY] Register guild ${guild.id}`); + await client.sleep(client.options.messageCreateEventGuildTimeout * index); + }), + data.private_channels.map(async (c, index) => { + if (client.options.DMChannelVoiceStatusSync < 1) return; + client.ws.broadcast({ + op: Opcodes.DM_UPDATE, + d: { + channel_id: c.id, + }, + }); + await client.sleep(client.options.DMChannelVoiceStatusSync * index); + }), + ).then(() => shard.checkReady()); }; diff --git a/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js b/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js deleted file mode 100644 index deddaf1..00000000 --- a/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; -const { Events } = require('../../../util/Constants'); -module.exports = (client, { d: data }) => { - const guild = client.guilds.cache.get(data.guild_id); - guild?.settings._patch(data); - /** - * Emitted whenever guild settings are updated - * @event Client#userGuildSettingsUpdate - * @param {Guild} guild Guild - */ - return client.emit(Events.USER_GUILD_SETTINGS_UPDATE, guild); -}; diff --git a/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js b/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js deleted file mode 100644 index 7f90916..00000000 --- a/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; -const { Events } = require('../../../util/Constants'); -module.exports = (client, { d: data }) => { - client.settings._patch(data); - if (('status' in data || 'custom_status' in data) && client.options.syncStatus) { - client.customStatusAuto(client); - } - return client.emit(Events.USER_SETTINGS_UPDATE, data); -}; diff --git a/src/client/websocket/handlers/index.js b/src/client/websocket/handlers/index.js index 3b046e8..5281ef3 100644 --- a/src/client/websocket/handlers/index.js +++ b/src/client/websocket/handlers/index.js @@ -3,10 +3,6 @@ const handlers = Object.fromEntries([ ['READY', require('./READY')], ['RESUMED', require('./RESUMED')], - ['RELATIONSHIP_ADD', require('./RELATIONSHIP_ADD')], - ['RELATIONSHIP_REMOVE', require('./RELATIONSHIP_REMOVE')], - ['RELATIONSHIP_UPDATE', require('./RELATIONSHIP_UPDATE')], - ['APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE', require('./APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE')], ['APPLICATION_COMMAND_CREATE', require('./APPLICATION_COMMAND_CREATE')], ['APPLICATION_COMMAND_DELETE', require('./APPLICATION_COMMAND_DELETE')], ['APPLICATION_COMMAND_UPDATE', require('./APPLICATION_COMMAND_UPDATE')], @@ -15,9 +11,6 @@ const handlers = Object.fromEntries([ ['AUTO_MODERATION_RULE_CREATE', require('./AUTO_MODERATION_RULE_CREATE')], ['AUTO_MODERATION_RULE_DELETE', require('./AUTO_MODERATION_RULE_DELETE')], ['AUTO_MODERATION_RULE_UPDATE', require('./AUTO_MODERATION_RULE_UPDATE')], - ['CALL_CREATE', require('./CALL_CREATE')], - ['CALL_UPDATE', require('./CALL_UPDATE')], - ['CALL_DELETE', require('./CALL_DELETE')], ['GUILD_CREATE', require('./GUILD_CREATE')], ['GUILD_DELETE', require('./GUILD_DELETE')], ['GUILD_UPDATE', require('./GUILD_UPDATE')], @@ -27,8 +20,6 @@ const handlers = Object.fromEntries([ ['GUILD_MEMBER_REMOVE', require('./GUILD_MEMBER_REMOVE')], ['GUILD_MEMBER_UPDATE', require('./GUILD_MEMBER_UPDATE')], ['GUILD_MEMBERS_CHUNK', require('./GUILD_MEMBERS_CHUNK')], - ['GUILD_MEMBER_LIST_UPDATE', require('./GUILD_MEMBER_LIST_UPDATE.js')], - ['GUILD_APPLICATION_COMMANDS_UPDATE', require('./GUILD_APPLICATION_COMMANDS_UPDATE.js')], ['GUILD_INTEGRATIONS_UPDATE', require('./GUILD_INTEGRATIONS_UPDATE')], ['GUILD_ROLE_CREATE', require('./GUILD_ROLE_CREATE')], ['GUILD_ROLE_DELETE', require('./GUILD_ROLE_DELETE')], @@ -40,9 +31,6 @@ const handlers = Object.fromEntries([ ['CHANNEL_DELETE', require('./CHANNEL_DELETE')], ['CHANNEL_UPDATE', require('./CHANNEL_UPDATE')], ['CHANNEL_PINS_UPDATE', require('./CHANNEL_PINS_UPDATE')], - ['CHANNEL_RECIPIENT_ADD', require('./CHANNEL_RECIPIENT_ADD')], - ['CHANNEL_RECIPIENT_REMOVE', require('./CHANNEL_RECIPIENT_REMOVE')], - ['MESSAGE_ACK', require('./MESSAGE_ACK')], ['MESSAGE_CREATE', require('./MESSAGE_CREATE')], ['MESSAGE_DELETE', require('./MESSAGE_DELETE')], ['MESSAGE_UPDATE', require('./MESSAGE_UPDATE')], @@ -57,21 +45,12 @@ const handlers = Object.fromEntries([ ['THREAD_LIST_SYNC', require('./THREAD_LIST_SYNC')], ['THREAD_MEMBER_UPDATE', require('./THREAD_MEMBER_UPDATE')], ['THREAD_MEMBERS_UPDATE', require('./THREAD_MEMBERS_UPDATE')], - ['USER_SETTINGS_UPDATE', require('./USER_SETTINGS_UPDATE')], // Opcode 0 - ['USER_GUILD_SETTINGS_UPDATE', require('./USER_GUILD_SETTINGS_UPDATE')], - // USER_SETTINGS_PROTO_UPDATE // opcode 0 - ['USER_NOTE_UPDATE', require('./USER_NOTE_UPDATE')], - ['USER_REQUIRED_ACTION_UPDATE', require('./USER_REQUIRED_ACTION_UPDATE')], ['USER_UPDATE', require('./USER_UPDATE')], ['PRESENCE_UPDATE', require('./PRESENCE_UPDATE')], ['TYPING_START', require('./TYPING_START')], ['VOICE_STATE_UPDATE', require('./VOICE_STATE_UPDATE')], ['VOICE_SERVER_UPDATE', require('./VOICE_SERVER_UPDATE')], ['WEBHOOKS_UPDATE', require('./WEBHOOKS_UPDATE')], - ['INTERACTION_CREATE', require('./INTERACTION_CREATE')], - ['INTERACTION_SUCCESS', require('./INTERACTION_SUCCESS')], - ['INTERACTION_MODAL_CREATE', require('./INTERACTION_MODAL_CREATE')], - ['INTERACTION_FAILURE', require('./INTERACTION_FAILURE')], ['STAGE_INSTANCE_CREATE', require('./STAGE_INSTANCE_CREATE')], ['STAGE_INSTANCE_UPDATE', require('./STAGE_INSTANCE_UPDATE')], ['STAGE_INSTANCE_DELETE', require('./STAGE_INSTANCE_DELETE')], @@ -82,6 +61,18 @@ const handlers = Object.fromEntries([ ['GUILD_SCHEDULED_EVENT_USER_ADD', require('./GUILD_SCHEDULED_EVENT_USER_ADD')], ['GUILD_SCHEDULED_EVENT_USER_REMOVE', require('./GUILD_SCHEDULED_EVENT_USER_REMOVE')], ['GUILD_AUDIT_LOG_ENTRY_CREATE', require('./GUILD_AUDIT_LOG_ENTRY_CREATE')], + // Selfbot + ['RELATIONSHIP_ADD', require('./RELATIONSHIP_ADD')], + ['RELATIONSHIP_REMOVE', require('./RELATIONSHIP_REMOVE')], + ['RELATIONSHIP_UPDATE', require('./RELATIONSHIP_UPDATE')], + ['USER_NOTE_UPDATE', require('./USER_NOTE_UPDATE')], + ['CHANNEL_RECIPIENT_ADD', require('./CHANNEL_RECIPIENT_ADD')], + ['CHANNEL_RECIPIENT_REMOVE', require('./CHANNEL_RECIPIENT_REMOVE')], + ['INTERACTION_MODAL_CREATE', require('./INTERACTION_MODAL_CREATE')], + ['USER_REQUIRED_ACTION_UPDATE', require('./USER_REQUIRED_ACTION_UPDATE')], + ['CALL_CREATE', require('./CALL_CREATE')], + ['CALL_UPDATE', require('./CALL_UPDATE')], + ['CALL_DELETE', require('./CALL_DELETE')], ]); module.exports = handlers; diff --git a/src/errors/Messages.js b/src/errors/Messages.js index f4c8126..bf0ebec 100644 --- a/src/errors/Messages.js +++ b/src/errors/Messages.js @@ -11,8 +11,6 @@ const Messages = { TOKEN_INVALID: 'An invalid token was provided.', TOKEN_MISSING: 'Request to use token, but token was unavailable to the client.', - MFA_INVALID: 'An invalid mfa code was provided', - WS_CLOSE_REQUESTED: 'WebSocket closed due to user request.', WS_CONNECTION_EXISTS: 'There is already an existing WebSocket connection.', WS_NOT_OPEN: (data = 'data') => `WebSocket not open to send ${data}`, @@ -20,8 +18,8 @@ const Messages = { BITFIELD_INVALID: bit => `Invalid bitfield flag or number: ${bit}.`, - SHARDING_INVALID: 'Invalid shard settings were provided.', - SHARDING_REQUIRED: 'This session would have handled too many guilds - Sharding is required.', + SHARDING_INVALID: '[Bot Token] Invalid shard settings were provided.', + SHARDING_REQUIRED: '[Bot Token] This session would have handled too many guilds - Sharding is required.', INVALID_INTENTS: '[Bot Token] Invalid intent provided for WebSocket intents.', DISALLOWED_INTENTS: '[Bot Token] Privileged intent provided is not enabled or whitelisted.', SHARDING_NO_SHARDS: 'No shards have been spawned.', @@ -49,12 +47,6 @@ const Messages = { EMBED_FOOTER_TEXT: 'MessageEmbed footer text must be a string.', EMBED_DESCRIPTION: 'MessageEmbed description must be a string.', EMBED_AUTHOR_NAME: 'MessageEmbed author name must be a string.', - /* Add */ - MISSING_PERMISSIONS: (...permission) => `You can't do this action [Missing Permission(s): ${permission.join(', ')}]`, - EMBED_PROVIDER_NAME: 'MessageEmbed provider name must be a string.', - INVALID_COMMAND_NAME: allCMD => `Could not parse subGroupCommand and subCommand due to too long: ${allCMD.join(' ')}`, - INVALID_RANGE_QUERY_MEMBER: 'Invalid range query member. (0 `Collector received no interactions before ending with reason: ${reason}`, FILE_NOT_FOUND: file => `File could not be found: ${file}`, USER_BANNER_NOT_FETCHED: "You must fetch this user's banner before trying to generate its URL!", USER_NO_DM_CHANNEL: 'No DM Channel exists!', - CLIENT_NO_CALL: 'No call exists!', VOICE_NOT_STAGE_CHANNEL: 'You are only allowed to do this in stage channels.', - VOICE_NOT_IN_GUILD: 'You are only allowed to do this in guild channels.', VOICE_STATE_NOT_OWN: 'You cannot self-deafen/mute/request to speak on VoiceStates that do not belong to the ClientUser.', @@ -103,17 +101,11 @@ const Messages = { GUILD_CHANNEL_UNOWNED: "The fetched channel does not belong to this manager's guild.", GUILD_OWNED: 'Guild is owned by the client.', GUILD_MEMBERS_TIMEOUT: "Members didn't arrive in time.", - GUILD_APPLICATION_COMMANDS_SEARCH_TIMEOUT: "Application commands didn't arrive in time.", GUILD_UNCACHED_ME: 'The client user as a member of this guild is uncached.', CHANNEL_NOT_CACHED: 'Could not find the channel where this message came from in the cache!', STAGE_CHANNEL_RESOLVE: 'Could not resolve channel to a stage channel.', GUILD_SCHEDULED_EVENT_RESOLVE: 'Could not resolve the guild scheduled event.', - REQUIRE_PASSWORD: 'You must provide a password.', - INVALIDATE_MEMBER: range => `Invalid member range: [${range[0]}, ${range[1]}]`, - - MISSING_VALUE: (where, type) => `Missing value for ${where} (${type})`, - INVALID_TYPE: (name, expected, an = false) => `Supplied ${name} is not a${an ? 'n' : ''} ${expected}.`, INVALID_ELEMENT: (type, name, elem) => `Supplied ${type} ${name} includes an invalid element: ${elem}`, @@ -141,10 +133,6 @@ const Messages = { INVITE_NOT_FOUND: 'Could not find the requested invite.', - NOT_OWNER_GROUP_DM_CHANNEL: "You can't do this action [Missing Permission]", - USER_ALREADY_IN_GROUP_DM_CHANNEL: 'User is already in the channel.', - USER_NOT_IN_GROUP_DM_CHANNEL: 'User is not in the channel.', - DELETE_GROUP_DM_CHANNEL: "Bots don't have access to Group DM Channels and cannot delete them", FETCH_GROUP_DM_CHANNEL: "Bots don't have access to Group DM Channels and cannot fetch them", @@ -169,60 +157,28 @@ const Messages = { COMMAND_INTERACTION_OPTION_NO_SUB_COMMAND_GROUP: 'No subcommand group specified for interaction.', AUTOCOMPLETE_INTERACTION_OPTION_NO_FOCUSED_OPTION: 'No focused option for autocomplete interaction.', + MODAL_SUBMIT_INTERACTION_FIELD_NOT_FOUND: customId => `Required field with custom id "${customId}" not found.`, + MODAL_SUBMIT_INTERACTION_FIELD_TYPE: (customId, type, expected) => + `Field with custom id "${customId}" is of type: ${type}; expected ${expected}.`, + INVITE_MISSING_SCOPES: 'At least one valid scope must be provided for the invite', NOT_IMPLEMENTED: (what, name) => `Method ${what} not implemented on ${name}.`, SWEEP_FILTER_RETURN: 'The return value of the sweepFilter function was not false or a Function', - INVALID_BOT_METHOD: 'Bot accounts cannot use this method', - INVALID_USER_METHOD: 'User accounts cannot use this method', - BOT_ONLY: 'This method only for bots', - USER_ONLY: 'This method only for users', - - INTERACTION_SEND_FAILURE: msg => `${msg}`, - - INVALID_LOCALE: 'Unable to select this location', - FOLDER_NOT_FOUND: 'Server directory not found', - FOLDER_POSITION_INVALID: 'The server index in the directory is invalid', - APPLICATION_ID_INVALID: "The application isn't BOT", - INVALID_NITRO: 'Invalid Nitro Code', - MESSAGE_ID_NOT_FOUND: 'Message ID not found', - MESSAGE_EMBED_LINK_LENGTH: 'Message content with embed link length is too long', - GUILD_MEMBERS_FETCH: msg => `${msg}`, - USER_NOT_STREAMING: 'User is not streaming', - // Djs v13.7 - TEXT_INPUT_CUSTOM_ID: 'TextInputComponent customId must be a string', - TEXT_INPUT_LABEL: 'TextInputComponent label must be a string', - TEXT_INPUT_PLACEHOLDER: 'TextInputComponent placeholder must be a string', - TEXT_INPUT_VALUE: 'TextInputComponent value must be a string', - - MODAL_CUSTOM_ID: 'Modal customId must be a string', - MODAL_TITLE: 'Modal title must be a string', - - MODAL_SUBMIT_INTERACTION_FIELD_NOT_FOUND: customId => `Required field with custom id "${customId}" not found.`, - MODAL_SUBMIT_INTERACTION_FIELD_TYPE: (customId, type, expected) => - `Field with custom id "${customId}" is of type: ${type}; expected ${expected}.`, - - INVALID_REMOTE_AUTH_URL: 'Invalid remote auth URL (https://discord.com/ra/{hash})', - INVALID_URL: url => - `Invalid URL: ${url}.\nMake sure you are using a valid URL (https://discord.com/oauth2/authorize?...)`, - - NITRO_REQUIRED: 'This feature is only available for Nitro users.', - NITRO_BOOST_REQUIRED: feature => `This feature (${feature}) is only available for Nitro Boost users.`, - ONLY_ME: 'This feature is only available for self.', - MISSING_CAPTCHA_SERVICE: 'This feature is only available for enabled captcha handler.', - GUILD_FORUM_MESSAGE_REQUIRED: 'You must provide a message to create a guild forum thread', - NORMAL_LOGIN: 'Username and password are required for normal login', - LOGIN_FAILED_UNKNOWN: 'Login failed', - LOGIN_FAILED_2FA: 'Login failed, 2FA code is required', - GUILD_IS_LARGE: 'This guild is too large to fetch all members with this method', - TEAM_MEMBER_FORMAT: 'The member provided is either not real or not of the User class', - - MISSING_MODULE: (name, installCommand) => - `The module "${name}" is missing. Please install it with "${installCommand}" and try again.`, + // Selfbot + INVALID_USER_API: 'User accounts cannot use this endpoint', + INVALID_COMMAND_NAME: allCMD => `Could not parse subGroupCommand and subCommand due to too long: ${allCMD.join(' ')}`, + INVALID_SLASH_COMMAND_CHOICES: (parentOptions, value) => + `${value} is not a valid choice for this option (${parentOptions})`, + SLASH_COMMAND_REQUIRED_OPTIONS_MISSING: (req, opt) => `Value required (${req}) missing (Options: ${opt})`, + SLASH_COMMAND_SUB_COMMAND_GROUP_INVALID: n => `${n} is not a valid sub command group`, + SLASH_COMMAND_SUB_COMMAND_INVALID: n => `${n} is not a valid sub command`, + INTERACTION_FAILED: 'No responsed from Application Command', + USER_NOT_STREAMING: 'User is not streaming', }; for (const [name, message] of Object.entries(Messages)) register(name, message); diff --git a/src/index.js b/src/index.js index 7edd79e..c3ac8c4 100644 --- a/src/index.js +++ b/src/index.js @@ -1,11 +1,5 @@ 'use strict'; -const tls = require('tls'); -// Cipher -tls.DEFAULT_CIPHERS = tls.DEFAULT_CIPHERS.split(':') - .sort(() => Math.random() - 0.5) - .join(':'); - // "Root" classes (starting points) exports.BaseClient = require('./client/BaseClient'); exports.Client = require('./client/Client'); @@ -15,7 +9,6 @@ exports.ShardingManager = require('./sharding/ShardingManager'); exports.WebhookClient = require('./client/WebhookClient'); // Utilities -exports.DiscordRPCServer = require('./util/arRPC/index'); exports.ActivityFlags = require('./util/ActivityFlags'); exports.ApplicationFlags = require('./util/ApplicationFlags'); exports.AttachmentFlags = require('./util/AttachmentFlags'); @@ -42,8 +35,6 @@ exports.ThreadMemberFlags = require('./util/ThreadMemberFlags'); exports.UserFlags = require('./util/UserFlags'); exports.Util = require('./util/Util'); exports.version = require('../package.json').version; -exports.DiscordAuthWebsocket = require('./util/RemoteAuth'); -exports.PurchasedFlags = require('./util/PurchasedFlags'); // Managers exports.ApplicationCommandManager = require('./managers/ApplicationCommandManager'); @@ -71,7 +62,6 @@ exports.PresenceManager = require('./managers/PresenceManager'); exports.ReactionManager = require('./managers/ReactionManager'); exports.ReactionUserManager = require('./managers/ReactionUserManager'); exports.RoleManager = require('./managers/RoleManager'); -exports.SessionManager = require('./managers/SessionManager'); exports.StageInstanceManager = require('./managers/StageInstanceManager'); exports.ThreadManager = require('./managers/ThreadManager'); exports.ThreadMemberManager = require('./managers/ThreadMemberManager'); @@ -80,6 +70,7 @@ exports.VoiceStateManager = require('./managers/VoiceStateManager'); exports.WebSocketManager = require('./client/websocket/WebSocketManager'); exports.WebSocketShard = require('./client/websocket/WebSocketShard'); exports.RelationshipManager = require('./managers/RelationshipManager'); +exports.UserNoteManager = require('./managers/UserNoteManager'); // Structures exports.Activity = require('./structures/Presence').Activity; @@ -88,26 +79,18 @@ exports.Application = require('./structures/interfaces/Application'); exports.ApplicationCommand = require('./structures/ApplicationCommand'); exports.ApplicationRoleConnectionMetadata = require('./structures/ApplicationRoleConnectionMetadata').ApplicationRoleConnectionMetadata; -exports.AutocompleteInteraction = require('./structures/AutocompleteInteraction'); exports.AutoModerationActionExecution = require('./structures/AutoModerationActionExecution'); exports.AutoModerationRule = require('./structures/AutoModerationRule'); exports.Base = require('./structures/Base'); -exports.BaseCommandInteraction = require('./structures/BaseCommandInteraction'); exports.BaseGuild = require('./structures/BaseGuild'); exports.BaseGuildEmoji = require('./structures/BaseGuildEmoji'); exports.BaseGuildTextChannel = require('./structures/BaseGuildTextChannel'); exports.BaseGuildVoiceChannel = require('./structures/BaseGuildVoiceChannel'); -exports.BaseMessageComponent = require('./structures/BaseMessageComponent'); -exports.ButtonInteraction = require('./structures/ButtonInteraction'); exports.CategoryChannel = require('./structures/CategoryChannel'); exports.Channel = require('./structures/Channel').Channel; -exports.ClientApplication = require('./structures/ClientApplication'); exports.ClientPresence = require('./structures/ClientPresence'); exports.ClientUser = require('./structures/ClientUser'); exports.Collector = require('./structures/interfaces/Collector'); -exports.CommandInteraction = require('./structures/CommandInteraction'); -exports.CommandInteractionOptionResolver = require('./structures/CommandInteractionOptionResolver'); -exports.ContextMenuInteraction = require('./structures/ContextMenuInteraction'); exports.DMChannel = require('./structures/DMChannel'); exports.Emoji = require('./structures/Emoji').Emoji; exports.Guild = require('./structures/Guild').Guild; @@ -123,49 +106,27 @@ exports.GuildScheduledEvent = require('./structures/GuildScheduledEvent').GuildS exports.GuildTemplate = require('./structures/GuildTemplate'); exports.Integration = require('./structures/Integration'); exports.IntegrationApplication = require('./structures/IntegrationApplication'); -exports.Interaction = require('./structures/Interaction'); -exports.InteractionCollector = require('./structures/InteractionCollector'); -exports.InteractionWebhook = require('./structures/InteractionWebhook'); exports.Invite = require('./structures/Invite'); exports.InviteStageInstance = require('./structures/InviteStageInstance'); exports.InviteGuild = require('./structures/InviteGuild'); exports.Message = require('./structures/Message').Message; exports.MessageActionRow = require('./structures/MessageActionRow'); exports.MessageAttachment = require('./structures/MessageAttachment'); -exports.MessageButton = require('./structures/MessageButton'); exports.MessageCollector = require('./structures/MessageCollector'); -exports.MessageComponentInteraction = require('./structures/MessageComponentInteraction'); -exports.MessageContextMenuInteraction = require('./structures/MessageContextMenuInteraction'); exports.MessageEmbed = require('./structures/MessageEmbed'); -exports.WebEmbed = require('./structures/WebEmbed'); exports.MessageMentions = require('./structures/MessageMentions'); exports.MessagePayload = require('./structures/MessagePayload'); exports.MessageReaction = require('./structures/MessageReaction'); -exports.MessageSelectMenu = require('./structures/MessageSelectMenu'); exports.Modal = require('./structures/Modal'); -exports.ModalSubmitInteraction = require('./structures/ModalSubmitInteraction'); exports.NewsChannel = require('./structures/NewsChannel'); exports.OAuth2Guild = require('./structures/OAuth2Guild'); -exports.PartialGroupDMChannel = require('./structures/PartialGroupDMChannel'); +exports.GroupDMChannel = require('./structures/GroupDMChannel'); exports.PermissionOverwrites = require('./structures/PermissionOverwrites'); exports.Presence = require('./structures/Presence').Presence; exports.ReactionCollector = require('./structures/ReactionCollector'); exports.ReactionEmoji = require('./structures/ReactionEmoji'); exports.RichPresenceAssets = require('./structures/Presence').RichPresenceAssets; exports.Role = require('./structures/Role').Role; -exports.Session = require('./structures/Session'); -// RPC -exports.getUUID = require('./structures/RichPresence').getUUID; -exports.CustomStatus = require('./structures/RichPresence').CustomStatus; -exports.RichPresence = require('./structures/RichPresence').RichPresence; -exports.SpotifyRPC = require('./structures/RichPresence').SpotifyRPC; -// SelectMenu -exports.ChannelSelectInteraction = require('./structures/SelectMenuInteraction').ChannelSelectInteraction; -exports.MentionableSelectInteraction = require('./structures/SelectMenuInteraction').MentionableSelectInteraction; -exports.RoleSelectInteraction = require('./structures/SelectMenuInteraction').RoleSelectInteraction; -exports.SelectMenuInteraction = require('./structures/SelectMenuInteraction').SelectMenuInteraction; -exports.UserSelectInteraction = require('./structures/SelectMenuInteraction').UserSelectInteraction; -// exports.StageChannel = require('./structures/StageChannel'); exports.StageInstance = require('./structures/StageInstance').StageInstance; exports.Sticker = require('./structures/Sticker').Sticker; @@ -179,7 +140,6 @@ exports.ThreadChannel = require('./structures/ThreadChannel'); exports.ThreadMember = require('./structures/ThreadMember'); exports.Typing = require('./structures/Typing'); exports.User = require('./structures/User'); -exports.UserContextMenuInteraction = require('./structures/UserContextMenuInteraction'); exports.VoiceChannel = require('./structures/VoiceChannel'); exports.VoiceRegion = require('./structures/VoiceRegion'); exports.VoiceState = require('./structures/VoiceState'); @@ -188,7 +148,12 @@ exports.Widget = require('./structures/Widget'); exports.WidgetMember = require('./structures/WidgetMember'); exports.WelcomeChannel = require('./structures/WelcomeChannel'); exports.WelcomeScreen = require('./structures/WelcomeScreen'); + exports.WebSocket = require('./WebSocket'); -// DiscordJSVoice Patch -exports.DiscordJSVoice = require('./util/Voice'); +exports.CustomStatus = require('./structures/RichPresence').CustomStatus; +exports.RichPresence = require('./structures/RichPresence').RichPresence; +exports.SpotifyRPC = require('./structures/RichPresence').SpotifyRPC; +exports.WebEmbed = require('./structures/WebEmbed'); +exports.DiscordAuthWebsocket = require('./util/RemoteAuth'); +exports.PurchasedFlags = require('./util/PurchasedFlags'); diff --git a/src/managers/ClientUserSettingManager.js b/src/managers/ClientUserSettingManager.js deleted file mode 100644 index e49959c..00000000 --- a/src/managers/ClientUserSettingManager.js +++ /dev/null @@ -1,490 +0,0 @@ -'use strict'; - -const { Collection } = require('@discordjs/collection'); -const BaseManager = require('./BaseManager'); -const GuildFolderManager = require('./GuildFolderManager'); -const { Error, TypeError } = require('../errors/DJSError'); -const GuildFolder = require('../structures/GuildFolder'); -const { CustomStatus } = require('../structures/RichPresence'); -const { localeSetting, DMScanLevel, stickerAnimationMode } = require('../util/Constants'); -/** - * Manages API methods for users and stores their cache. - * @extends {BaseManager} - * @see {@link https://luna.gitlab.io/discord-unofficial-docs/user_settings.html} - */ -class ClientUserSettingManager extends BaseManager { - constructor(client) { - super(client); - /** - * Raw data - * @type {Object} - */ - this.rawSetting = {}; - /** - * Language - * @type {?string} - */ - this.locale = null; - /** - * From: Setting => ACTIVITY SETTINGS => Activity Status => Display current activity as a status message - * @type {?boolean} - */ - this.activityDisplay = null; - /** - * Disable Direct Message from servers - * @type {Collection} - */ - this.disableDMfromServer = new Collection(); - /** - * Allow direct messages from server members - * @type {?boolean} - */ - this.DMfromServerMode = null; - /** - * Display images - * @type {?boolean} - */ - this.displayImage = null; - /** - * Display linked images - * @type {?boolean} - */ - this.linkedImageDisplay = null; - /** - * From: Setting => APP SETTINGS => Accessibility => Automatically play GIFs when Discord is focused. - * @type {?boolean} - */ - this.autoplayGIF = null; - /** - * Show embeds and preview website links pasted into chat - * @type {?boolean} - */ - this.previewLink = null; - /** - * From: Setting => APP SETTINGS => Accessibility => Play Animated Emojis - * @type {?boolean} - */ - this.animatedEmojis = null; - /** - * From: Setting => APP SETTINGS => Accessibility => Text-to-speech => Allow playback - * @type {?boolean} - */ - this.allowTTS = null; - /** - * From: Setting => APP SETTINGS => Appearance => Message Display => Compact Mode - * @type {?boolean} - */ - this.compactMode = null; - /** - * From: Setting => APP SETTINGS => Text & Images => Emoji => Convert Emoticons - * @type {?boolean} - */ - this.convertEmoticons = null; - /** - * SAFE DIRECT MESSAGING - * @type {?DMScanLevel} - */ - this.DMScanLevel = null; - /** - * From: Setting => APP SETTINGS => Appearance => Theme - * @type {'dark' | 'light' | null} - */ - this.theme = ''; - /** - * Developer Mode (Copy ID, etc.) - * @type {?boolean} - */ - this.developerMode = null; - /** - * AFK timeout (receives notifications) - * @type {?number} - */ - this.afkTimeout = null; - /** - * Sticker animation mode - * @type {?stickerAnimationMode} - */ - this.stickerAnimationMode = null; - /** - * WHO CAN ADD YOU AS A FRIEND ? - * @type {?object} - * @see {@link https://luna.gitlab.io/discord-unofficial-docs/user_settings.html#friend-source-flags-structure} - */ - this.addFriendFrom = { - all: null, - mutual_friends: null, - mutual_guilds: null, - }; - /** - * From: Setting => APP SETTINGS => Text & Images => Emoji => Show emoji reactions - * @type {?boolean} - */ - this.showEmojiReactions = null; - /** - * Custom Stauts - * @type {?object} - * @see {@link https://luna.gitlab.io/discord-unofficial-docs/custom_status.html#customstatus-structure} - */ - this.customStatus = null; - /** - * Guild folder and position - * @type {GuildFolderManager} - */ - this.guildFolder = new GuildFolderManager(client); - // Todo: add new method from Discum - } - /** - * Patch data file - * https://github.com/Merubokkusu/Discord-S.C.U.M/blob/master/discum/user/user.py - * @private - * @param {Object} data Raw Data to patch - */ - _patch(data = {}) { - this.rawSetting = Object.assign(this.rawSetting, data); - if ('locale' in data) { - this.locale = localeSetting[data.locale]; - } - if ('show_current_game' in data) { - this.activityDisplay = data.show_current_game; - } - if ('default_guilds_restricted' in data) { - this.DMfromServerMode = data.default_guilds_restricted; - } - if ('inline_attachment_media' in data) { - this.displayImage = data.inline_attachment_media; - } - if ('inline_embed_media' in data) { - this.linkedImageDisplay = data.inline_embed_media; - } - if ('gif_auto_play' in data) { - this.autoplayGIF = data.gif_auto_play; - } - if ('render_embeds' in data) { - this.previewLink = data.render_embeds; - } - if ('animate_emoji' in data) { - this.animatedEmojis = data.animate_emoji; - } - if ('enable_tts_command' in data) { - this.allowTTS = data.enable_tts_command; - } - if ('message_display_compact' in data) { - this.compactMode = data.message_display_compact; - } - if ('convert_emoticons' in data) { - this.convertEmoticons = data.convert_emoticons; - } - if ('explicit_content_filter' in data) { - this.DMScanLevel = DMScanLevel[data.explicit_content_filter]; - } - if ('theme' in data) { - this.theme = data.theme; - } - if ('developer_mode' in data) { - this.developerMode = data.developer_mode; - } - if ('afk_timeout' in data) { - this.afkTimeout = data.afk_timeout * 1000; // Second => milisecond - } - if ('animate_stickers' in data) { - this.stickerAnimationMode = stickerAnimationMode[data.animate_stickers]; - } - if ('render_reactions' in data) { - this.showEmojiReactions = data.render_reactions; - } - if ('custom_status' in data) { - this.customStatus = data.custom_status || {}; // Thanks PinkDuwc._#3443 reported this issue - this.customStatus.status = data.status; - } - if ('friend_source_flags' in data) { - this.addFriendFrom = { - all: data.friend_source_flags.all || false, - mutual_friends: data.friend_source_flags.all ? true : data.friend_source_flags.mutual_friends, - mutual_guilds: data.friend_source_flags.all ? true : data.friend_source_flags.mutual_guilds, - }; - } - if ('guild_folders' in data) { - data.guild_folders.map((folder, index) => - this.guildFolder.cache.set(index, new GuildFolder(this.client, folder)), - ); - } - if ('restricted_guilds' in data) { - this.disableDMfromServer = new Collection(data.restricted_guilds.map(guildId => [guildId, true])); - } - } - async fetch() { - if (this.client.bot) throw new Error('INVALID_BOT_METHOD'); - const data = await this.client.api.users('@me').settings.get(); - this._patch(data); - return this; - } - /** - * Edit data - * @param {Object} data Data to edit - * @private - */ - async edit(data) { - if (this.client.bot) throw new Error('INVALID_BOT_METHOD'); - const res = await this.client.api.users('@me').settings.patch({ data }); - this._patch(res); - return this; - } - /** - * Set compact mode - * @param {boolean | null} value Compact mode enable or disable - * @returns {boolean} - */ - async setDisplayCompactMode(value) { - if (typeof value !== 'boolean' && value !== null) { - throw new TypeError('INVALID_TYPE', 'value', 'boolean | null', true); - } - if (!value) value = !this.compactMode; - if (value !== this.compactMode) { - await this.edit({ message_display_compact: value }); - } - return this.compactMode; - } - /** - * Discord Theme - * @param {null |dark |light} value Theme to set - * @returns {theme} - */ - async setTheme(value) { - const validValues = ['dark', 'light']; - if (typeof value !== 'string' && value !== null) { - throw new TypeError('INVALID_TYPE', 'value', 'string | null', true); - } - if (!validValues.includes(value)) { - if (value == validValues[0]) value = validValues[1]; - else value = validValues[0]; - } - if (value !== this.theme) { - await this.edit({ theme: value }); - } - return this.theme; - } - - /** - * CustomStatus Object - * @typedef {Object} CustomStatusOption - * @property {string | null} text Text to set - * @property {string | null} status The status to set: 'online', 'idle', 'dnd', 'invisible' or null. - * @property {EmojiResolvable | null} emoji UnicodeEmoji, DiscordEmoji, or null. - * @property {number | null} expires The number of seconds until the status expires, or null. - */ - - /** - * Set custom status - * @param {?CustomStatus | CustomStatusOption} options CustomStatus - */ - setCustomStatus(options) { - if (typeof options !== 'object') { - this.edit({ custom_status: null }); - } else if (options instanceof CustomStatus) { - options = options.toJSON(); - let data = { - emoji_name: null, - expires_at: null, - text: null, - }; - if (typeof options.state === 'string') { - data.text = options.state; - } - if (options.emoji) { - if (options.emoji?.id) { - data.emoji_name = options.emoji?.name; - data.emoji_id = options.emoji?.id; - } else { - data.emoji_name = typeof options.emoji?.name === 'string' ? options.emoji?.name : null; - } - } - this.edit({ custom_status: data }); - } else { - let data = { - emoji_name: null, - expires_at: null, - text: null, - }; - if (typeof options.text === 'string') { - if (options.text.length > 128) { - throw new RangeError('[INVALID_VALUE] Custom status text must be less than 128 characters'); - } - data.text = options.text; - } - if (options.emoji) { - const emoji = this.client.emojis.resolve(options.emoji); - if (emoji) { - data.emoji_name = emoji.name; - data.emoji_id = emoji.id; - } else { - data.emoji_name = typeof options.emoji === 'string' ? options.emoji : null; - } - } - if (typeof options.expires === 'number') { - if (options.expires < Date.now()) { - throw new RangeError(`[INVALID_VALUE] Custom status expiration must be greater than ${Date.now()}`); - } - data.expires_at = new Date(options.expires).toISOString(); - } - if (['online', 'idle', 'dnd', 'invisible'].includes(options.status)) this.edit({ status: options.status }); - this.edit({ custom_status: data }); - } - } - - /** - * * Locale Setting, must be one of: - * * `DANISH` - * * `GERMAN` - * * `ENGLISH_UK` - * * `ENGLISH_US` - * * `SPANISH` - * * `FRENCH` - * * `CROATIAN` - * * `ITALIAN` - * * `LITHUANIAN` - * * `HUNGARIAN` - * * `DUTCH` - * * `NORWEGIAN` - * * `POLISH` - * * `BRAZILIAN_PORTUGUESE` - * * `ROMANIA_ROMANIAN` - * * `FINNISH` - * * `SWEDISH` - * * `VIETNAMESE` - * * `TURKISH` - * * `CZECH` - * * `GREEK` - * * `BULGARIAN` - * * `RUSSIAN` - * * `UKRAINIAN` - * * `HINDI` - * * `THAI` - * * `CHINA_CHINESE` - * * `JAPANESE` - * * `TAIWAN_CHINESE` - * * `KOREAN` - * @param {localeSetting} value Locale to set - * @returns {locale} - */ - async setLocale(value) { - if (typeof value !== 'string') { - throw new TypeError('INVALID_TYPE', 'value', 'string', true); - } - if (!localeSetting[value]) throw new Error('INVALID_LOCALE'); - if (localeSetting[value] !== this.locale) { - await this.edit({ locale: localeSetting[value] }); - } - return this.locale; - } - // TODO: Guild positions & folders - // Change Index in Array [Hidden] - /** - * - * @param {Array} array Array - * @param {number} from Index1 - * @param {number} to Index2 - * @returns {Array} - * @private - */ - _move(array, from, to) { - array.splice(to, 0, array.splice(from, 1)[0]); - return array; - } - // TODO: Move Guild - // folder to folder - // folder to home - // home to home - // home to folder - /** - * Change Guild Position (from * to Folder or Home) - * @param {GuildIDResolve} guildId guild.id - * @param {number} newPosition Guild Position - * * **WARNING**: Type = `FOLDER`, newPosition is the guild's index in the Folder. - * @param {number} type Move to folder or home - * * `FOLDER`: 1 - * * `HOME`: 2 - * @param {FolderID} folderId If you want to move to folder - * @private - */ - guildChangePosition(guildId, newPosition, type, folderId) { - // Get Guild default position - // Escape - const oldGuildFolderPosition = this.rawSetting.guild_folders.findIndex(value => value.guild_ids.includes(guildId)); - const newGuildFolderPosition = this.rawSetting.guild_folders.findIndex(value => - value.guild_ids.includes(this.rawSetting.guild_positions[newPosition]), - ); - if (type == 2 || `${type}`.toUpperCase() == 'HOME') { - // Delete GuildID from Folder and create new Folder - // Check it is folder - const folder = this.rawSetting.guild_folders[oldGuildFolderPosition]; - if (folder.id) { - this.rawSetting.guild_folders[oldGuildFolderPosition].guild_ids = this.rawSetting.guild_folders[ - oldGuildFolderPosition - ].guild_ids.filter(v => v !== guildId); - } - this.rawSetting.guild_folders = this._move( - this.rawSetting.guild_folders, - oldGuildFolderPosition, - newGuildFolderPosition, - ); - this.rawSetting.guild_folders[newGuildFolderPosition].id = null; - } else if (type == 1 || `${type}`.toUpperCase() == 'FOLDER') { - // Delete GuildID from oldFolder - this.rawSetting.guild_folders[oldGuildFolderPosition].guild_ids = this.rawSetting.guild_folders[ - oldGuildFolderPosition - ].guild_ids.filter(v => v !== guildId); - // Index new Folder - const folderIndex = this.rawSetting.guild_folders.findIndex(value => value.id == folderId); - const folder = this.rawSetting.guild_folders[folderIndex]; - folder.guild_ids.push(guildId); - folder.guild_ids = [...new Set(folder.guild_ids)]; - folder.guild_ids = this._move( - folder.guild_ids, - folder.guild_ids.findIndex(v => v == guildId), - newPosition, - ); - } - this.edit({ guild_folders: this.rawSetting.guild_folders }); - } - - /** - * Restricted guilds setting - * @param {boolean} status Restricted status - * @returns {Promise} - */ - restrictedGuilds(status) { - if (typeof status !== 'boolean') { - throw new TypeError('INVALID_TYPE', 'status', 'boolean', true); - } - return this.edit({ - default_guilds_restricted: status, - restricted_guilds: status ? this.client.guilds.cache.map(v => v.id) : [], - }); - } - /** - * Add a guild to the list of restricted guilds. - * @param {GuildIDResolve} guildId The guild to add - * @returns {Promise} - */ - addRestrictedGuild(guildId) { - const temp = Object.assign( - [], - this.disableDMfromServer.map((v, k) => k), - ); - if (temp.includes(guildId)) throw new Error('Guild is already restricted'); - temp.push(guildId); - return this.edit({ restricted_guilds: temp }); - } - - /** - * Remove a guild from the list of restricted guilds. - * @param {GuildIDResolve} guildId The guild to remove - * @returns {Promise} - */ - removeRestrictedGuild(guildId) { - if (!this.disableDMfromServer.delete(guildId)) throw new Error('Guild is already restricted'); - return this.edit({ restricted_guilds: this.disableDMfromServer.map((v, k) => k) }); - } -} - -module.exports = ClientUserSettingManager; diff --git a/src/managers/DeveloperPortalManager.js b/src/managers/DeveloperPortalManager.js deleted file mode 100644 index a907db0..00000000 --- a/src/managers/DeveloperPortalManager.js +++ /dev/null @@ -1,104 +0,0 @@ -'use strict'; - -const { Collection } = require('@discordjs/collection'); -const BaseManager = require('./BaseManager'); -const DeveloperPortalApplication = require('../structures/DeveloperPortalApplication'); -const Team = require('../structures/Team'); - -/** - * Manages API methods for users and stores their cache. - * @extends {BaseManager} - */ -class DeveloperPortalManager extends BaseManager { - constructor(client) { - super(client); - /** - * A collection of all the applications the client has. - * @type {Collection} - * @readonly - */ - this.applications = new Collection(); - /** - * A collection of all the teams the client has. - * @type {Collection} - * @readonly - */ - this.teams = new Collection(); // Collection - } - /** - * Fetches all the applications & teams the client has. - * @returns {Promise} - */ - async fetch() { - const promise1 = this.client.api.applications.get({ - query: { - with_team_applications: true, - }, - }); - const promise2 = this.client.api.teams.get(); - const [applications, teams] = await Promise.all([promise1, promise2]); - for (const team of teams) { - this.teams.set(team.id, new Team(this.client, team)); - } - for (const application of applications) { - this.applications.set(application.id, new DeveloperPortalApplication(this.client, application)); - } - return this; - } - - /** - * Creates a new Team. - * @param {string} name Name of the team - * @returns {Promise} - */ - async createTeam(name) { - const team = await this.client.api.teams.post({ - data: { - name: name, - }, - }); - - this.teams.set(team.id, new Team(this.client, team)); - return this.teams.get(team.id); - } - - /** - * Creates a new application. - * @param {string} name Name of the application - * @param {?Snowflake | Team} teamId The team to create the application in - * @returns {Promise} - */ - async createApplication(name, teamId = null) { - teamId = teamId instanceof Team ? teamId.id : teamId; - const application = await this.client.api.applications.post({ - data: { - name, - team_id: teamId, - }, - }); - this.applications.set(application.id, new DeveloperPortalApplication(this.client, application)); - return this.applications.get(application.id); - } - - /** - * Deletes an application. - * @param {Snowflake} id Application ID - * @param {?number} MFACode 2FA code (if 2FA is enabled) - * @returns {Promise} - */ - async deleteApplication(id, MFACode) { - if (MFACode) { - await this.client.api.applications[`${id}/delete`].post({ - query: { - code: MFACode, - }, - }); - } else { - await this.client.api.applications[`${id}/delete`].post(); - } - this.applications.delete(id); - return undefined; - } -} - -module.exports = DeveloperPortalManager; diff --git a/src/managers/GuildFolderManager.js b/src/managers/GuildFolderManager.js deleted file mode 100644 index a5c98b4..00000000 --- a/src/managers/GuildFolderManager.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -const { Collection } = require('@discordjs/collection'); -const BaseManager = require('./BaseManager'); - -/** - * Manages API methods for users and stores their cache. - * @extends {BaseManager} - */ -class GuildFolderManager extends BaseManager { - constructor(client) { - super(client); - /** - * The guild folder cache (Index, GuildFolder) - * @type {Collection} - */ - this.cache = new Collection(); - } - _refresh() { - this.cache.clear(); - } -} - -module.exports = GuildFolderManager; diff --git a/src/managers/GuildSettingManager.js b/src/managers/GuildSettingManager.js deleted file mode 100644 index dd0131d..00000000 --- a/src/managers/GuildSettingManager.js +++ /dev/null @@ -1,148 +0,0 @@ -'use strict'; - -const BaseManager = require('./BaseManager'); -/** - * Manages API methods for users and stores their cache. - * @extends {BaseManager} - * @see {@link https://luna.gitlab.io/discord-unofficial-docs/user_settings.html} - */ -class GuildSettingManager extends BaseManager { - constructor(client, guildId = null) { - super(client); - /** - * Raw data - * @type {Object} - */ - this.rawSetting = {}; - /** - * Guild Id - * @type {?Snowflake} - */ - this.guildId = guildId; - } - /** - * Get the guild - * @type {?Guild} - * @readonly - */ - get guild() { - return this.client.guilds.cache.get(this.guildId); - } - /** - * Patch data file - * @private - * @param {Object} data Raw Data to patch - */ - _patch(data = {}) { - this.rawSetting = Object.assign(this.rawSetting, data); - if ('suppress_everyone' in data) { - /** - * Notification setting > Suppress `@everyone` and `@here` - * @type {?boolean} - */ - this.suppressEveryone = data.suppress_everyone; - } - if ('suppress_roles' in data) { - /** - * Notification setting > Suppress all role `@mention` - * @type {?boolean} - */ - this.suppressRoles = data.suppress_roles; - } - if ('mute_scheduled_events' in data) { - /** - * Notification setting > Mute new events - * @type {?boolean} - */ - this.muteScheduledEvents = data.mute_scheduled_events; - } - if ('message_notifications' in data) { - /** - * Notification setting > Message notifications - * * `0` = All messages - * * `1` = Only @mentions - * * `2` = Nothing - * @type {?number} - */ - this.messageNotifications = data.message_notifications; - } - if ('flags' in data) { - /** - * Flags (unknown) - * @type {?number} - */ - this.flags = data.flags; - } - if ('mobile_push' in data) { - /** - * Notification setting > Mobile push notifications - * @type {?boolean} - */ - this.mobilePush = data.mobile_push; - } - if ('muted' in data) { - /** - * Mute server - * @type {?boolean} - */ - this.muted = data.muted; - } - if ('mute_config' in data && data.mute_config !== null) { - /** - * Mute config (muted = true) - * * `muteConfig.endTime`: End time (Date) - * * `muteConfig.selectedTimeWindow`: Selected time window (seconds) (number) - * @type {?Object} - */ - this.muteConfig = { - endTime: new Date(data.mute_config.end_time), - selectedTimeWindow: data.mute_config.selected_time_window, - }; - } else { - this.muteConfig = null; - } - if ('hide_muted_channels' in data) { - /** - * Hide muted channels - * @type {?boolean} - */ - this.hideMutedChannels = data.hide_muted_channels; - } - if ('channel_overrides' in data) { - /** - * Channel overrides (unknown) - * @type {?Array} - */ - this.channelOverrides = data.channel_overrides; - } - if ('notify_highlights' in data) { - /** - * Notification setting > Suppress highlights - * * `0` = ??? (unknown) - * * `1` = Enable - * * `2` = Disable - * @type {?number} - */ - this.notifyHighlights = data.notify_highlights; - } - if ('version' in data) { - /** - * Version (unknown) - * @type {?number} - */ - this.version = data.version; - } - } - /** - * Edit guild settings - * @param {Object} data Data to edit - * @returns {Promise} - */ - async edit(data) { - const data_ = await this.client.api.users('@me').settings.patch(data); - this._patch(data_); - return this; - } -} - -module.exports = GuildSettingManager; diff --git a/src/managers/SessionManager.js b/src/managers/SessionManager.js deleted file mode 100644 index 185a4e9..00000000 --- a/src/managers/SessionManager.js +++ /dev/null @@ -1,57 +0,0 @@ -'use strict'; - -const CachedManager = require('./CachedManager'); -const { Error } = require('../errors/DJSError'); -const Session = require('../structures/Session'); -/** - * Manages API methods for users and stores their cache. - * @extends {CachedManager} - */ -class SessionManager extends CachedManager { - constructor(client, iterable) { - super(client, Session, iterable); - } - /** - * The cache of Sessions - * @type {Collection} - * @name SessionManager#cache - */ - - /** - * Fetch all sessions of the client. - * @returns {Promise} - */ - fetch() { - return new Promise((resolve, reject) => { - this.client.api.auth.sessions - .get() - .then(data => { - const allData = data.user_sessions; - this.cache.clear(); - for (const session of allData) { - this._add(new Session(this.client, session), true, { id: session.id_hash }); - } - resolve(this); - }) - .catch(reject); - }); - } - - /** - * Logout the client (remote). - * @param {string | null} mfaCode MFA code (if 2FA is enabled) - * @returns {Promise} - */ - logoutAllDevices(mfaCode) { - if (typeof this.client.password !== 'string') throw new Error('REQUIRE_PASSWORD'); - return this.client.api.auth.sessions.logout({ - data: { - session_id_hashes: this.cache.map(session => session.id), - password: this.client.password, - code: typeof mfaCode === 'string' ? mfaCode : undefined, - }, - }); - } -} - -module.exports = SessionManager; diff --git a/src/structures/DeveloperPortalApplication.js b/src/structures/DeveloperPortalApplication.js deleted file mode 100644 index 7834d7c..00000000 --- a/src/structures/DeveloperPortalApplication.js +++ /dev/null @@ -1,520 +0,0 @@ -'use strict'; -const { Collection } = require('@discordjs/collection'); -const { ApplicationRoleConnectionMetadata } = require('./ApplicationRoleConnectionMetadata'); -const Base = require('./Base'); -const ApplicationFlags = require('../util/ApplicationFlags'); -const { ClientApplicationAssetTypes, Endpoints, ApplicationRoleConnectionMetadataTypes } = require('../util/Constants'); -const DataResolver = require('../util/DataResolver'); -const Permissions = require('../util/Permissions'); -const SnowflakeUtil = require('../util/SnowflakeUtil'); - -const AssetTypes = Object.keys(ClientApplicationAssetTypes); - -/** - * Represents an OAuth2 Application. - * @extends {Base} - * @abstract - */ -class DeveloperPortalApplication extends Base { - constructor(client, data) { - super(client); - this._patch(data); - } - _patch(data) { - /** - * The application's id - * @type {Snowflake} - */ - this.id = data.id; - - if ('name' in data) { - /** - * The name of the application - * @type {?string} - */ - this.name = data.name; - } else { - this.name ??= null; - } - - if ('description' in data) { - /** - * The application's description - * @type {?string} - */ - this.description = data.description; - } else { - this.description ??= null; - } - - if ('icon' in data) { - /** - * The application's icon hash - * @type {?string} - */ - this.icon = data.icon; - } else { - this.icon ??= null; - } - - if ('bot' in data) { - /** - * Bot application - * @type {User} - */ - this.bot = this.client.users._add(data.bot); - } - - /** - * The tags this application has (max of 5) - * @type {string[]} - */ - this.tags = data.tags ?? []; - - if ('install_params' in data) { - /** - * Settings for this application's default in-app authorization - * @type {?ClientApplicationInstallParams} - */ - this.installParams = { - scopes: data.install_params.scopes, - permissions: new Permissions(data.install_params.permissions).freeze(), - }; - } else { - this.installParams ??= null; - } - - if ('custom_install_url' in data) { - /** - * This application's custom installation URL - * @type {?string} - */ - this.customInstallURL = data.custom_install_url; - } else { - this.customInstallURL = null; - } - - if ('flags' in data) { - /** - * The flags this application has - * @type {ApplicationFlags} - */ - this.flags = new ApplicationFlags(data.flags).freeze(); - } - - if ('cover_image' in data) { - /** - * The hash of the application's cover image - * @type {?string} - */ - this.cover = data.cover_image; - } else { - this.cover ??= null; - } - - if ('rpc_origins' in data) { - /** - * The application's RPC origins, if enabled - * @type {string[]} - */ - this.rpcOrigins = data.rpc_origins; - } else { - this.rpcOrigins ??= []; - } - - if ('bot_require_code_grant' in data) { - /** - * If this application's bot requires a code grant when using the OAuth2 flow - * @type {?boolean} - */ - this.botRequireCodeGrant = data.bot_require_code_grant; - } else { - this.botRequireCodeGrant ??= null; - } - - if ('bot_public' in data) { - /** - * If this application's bot is public - * @type {?boolean} - */ - this.botPublic = data.bot_public; - } else { - this.botPublic ??= null; - } - - /** - * The owner of this OAuth application - * @type {?(User|Team)} - */ - this.owner = null; - if (data.owner.username == `team${data.owner.id}` && data.owner.discriminator == '0000') { - this.owner = this.client.developerPortal.teams.get(data.owner.id); - } else { - this.owner = data.owner ? this.client.users._add(data.owner) : this.owner ?? null; - } - - /** - * Redirect URIs for this application - * @type {Array} - */ - this.redirectURIs = data.redirect_uris ?? []; - - /** - * BOT_HTTP_INTERACTIONS feature flag - * @type {?string} - */ - this.interactionEndpointURL = data.interactions_endpoint_url ?? null; - - /** - * Public key - * @type {?string} - */ - this.publicKey = data.verify_key ?? null; - - /** - * @typedef {Object} Tester - * @property {number} state The state of the tester (2: Accepted, 1: Pending) - * @property {User} user The user that the tester is - */ - /** - * User tester - * @type {Collection} - */ - this.testers = new Collection(); // - - /** - * Terms of service URL - * @type {?string} - */ - this.TermsOfService = data.terms_of_service_url ?? null; - - /** - * Privacy policy URL - * @type {?string} - */ - this.PrivacyPolicy = data.privacy_policy_url ?? null; - - if ('role_connections_verification_url' in data) { - /** - * This application's role connection verification entry point URL - * @type {?string} - */ - this.roleConnectionsVerificationURL = data.role_connections_verification_url; - } else { - this.roleConnectionsVerificationURL ??= null; - } - } - /** - * The timestamp the application was created at - * @type {number} - * @readonly - */ - get createdTimestamp() { - return SnowflakeUtil.timestampFrom(this.id); - } - - /** - * The time the application was created at - * @type {Date} - * @readonly - */ - get createdAt() { - return new Date(this.createdTimestamp); - } - - /** - * A link to the application's icon. - * @param {StaticImageURLOptions} [options={}] Options for the Image URL - * @returns {?string} - */ - iconURL({ format, size } = {}) { - if (!this.icon) return null; - return this.client.rest.cdn.AppIcon(this.id, this.icon, { format, size }); - } - - /** - * A link to this application's cover image. - * @param {StaticImageURLOptions} [options={}] Options for the Image URL - * @returns {?string} - */ - coverURL({ format, size } = {}) { - if (!this.cover) return null; - return Endpoints.CDN(this.client.options.http.cdn).AppIcon(this.id, this.cover, { format, size }); - } - - /** - * Asset data. - * @typedef {Object} ApplicationAsset - * @property {Snowflake} id The asset's id - * @property {string} name The asset's name - * @property {string} type The asset's type - */ - - /** - * Gets the application's rich presence assets. - * @returns {Promise>} - * @deprecated This will be removed in the next major as it is unsupported functionality. - */ - async fetchAssets() { - const assets = await this.client.api.oauth2.applications(this.id).assets.get(); - return assets.map(a => ({ - id: a.id, - name: a.name, - type: AssetTypes[a.type - 1], - })); - } - - /** - * Whether this application is partial - * @type {boolean} - * @readonly - */ - get partial() { - return !this.name; - } - - /** - * Obtains this application from Discord. - * @returns {Promise} - */ - async fetch() { - const app = await this.client.api.applications[this.id].get(); - this._patch(app); - return this; - } - - /** - * Gets all testers for this application. - * @returns {Promise} - */ - async fetchTesters() { - const app = await this.client.api.applications[this.id].allowlist.get(); - this.testers = new Collection(); - for (const tester of app || []) { - this.testers.set(tester.user.id, { - state: tester.state, - user: this.client.users._add(tester.user), - }); - } - return this; - } - - /** - * Add user to this application's allowlist. - * @param {string} username Username of the user to add - * @param {string} discriminator Discriminator of the user to add - * @returns {Promise} - */ - async addTester(username, discriminator) { - const app = await this.client.api.applications[this.id].allowlist.post({ - data: { - username, - discriminator, - }, - }); - this.testers.set(app.user.id, { - state: app.state, - user: this.client.users._add(app.user), - }); - return this; - } - - /** - * Delete user from this application's allowlist. - * @param {UserResolvable} user User - * @returns {Promise} - */ - async deleteTester(user) { - const userId = this.client.users.resolveId(user); - await this.client.api.applications[this.id].allowlist[userId].delete(); - this.testers.delete(userId); - return this; - } - - /** - * The data for editing a application. - * @typedef {Object} ApplicationEditData - * @property {string} [name] The name of the app - * @property {string} [description] The description of the app - * @property {?(BufferResolvable|Base64Resolvable)} [icon] The icon of the app - * @property {?(BufferResolvable|Base64Resolvable)} [cover] The application's default rich presence invite - * @property {boolean} [botPublic] When false only app owner can join the app's bot to guilds - * @property {boolean} [botRequireCodeGrant] When true the app's bot will only join upon completion of the full oauth2 code grant flow - * @property {?string} [TermsOfService] ToS URL - * @property {?string} [PrivacyPolicy] Privacy policy URL - * @property {number} [flags] The application's public flags - * @property {Array} [redirectURIs] Redirect URIs (OAuth2 only) - * @property {Array} [tags] Up to 5 tags describing the content and functionality of the application - */ - /** - * Edits this application. - * @param {ApplicationEditData} data Edit data for the application - * @returns {Promise} - */ - async edit(data) { - const _data = {}; - if (data.name) _data.name = data.name; - if (typeof data.icon !== 'undefined') { - _data.icon = await DataResolver.resolveImage(data.icon); - } - if (data.description) _data.description = data.description; - if (typeof data.cover !== 'undefined') { - _data.cover = await DataResolver.resolveImage(data.cover); - } - if (data.botPublic) _data.bot_public = data.botPublic; - if (data.botRequireCodeGrant) _data.bot_require_code_grant = data.botRequireCodeGrant; - if (data.TermsOfService) _data.terms_of_service_url = data.TermsOfService; - if (data.PrivacyPolicy) _data.privacy_policy_url = data.PrivacyPolicy; - if (data.flags) _data.flags = data.flags; - if (data.redirectURIs) _data.redirect_uris = data.redirectURIs; - if (data.tags) _data.tags = data.tags; - // - const app = await this.client.api.applications[this.id].patch({ data: _data }); - this._patch(app); - return this; - } - - /** - * Creates a new bot for this application. - * @returns {Promise} - */ - async createBot() { - if (this.bot) throw new Error('Application already has a bot.'); - await this.client.api.applications[this.id].bot.post(); - const app = await this.fetch(); - return app; - } - - /** - * Reset CLient Secret for this application. - * @param {number} MFACode The MFA code (if required) - * @returns {Promise} - */ - async resetClientSecret(MFACode) { - const app = MFACode - ? await this.client.api.applications[this.id].reset.post({ - data: { - code: MFACode, - }, - }) - : await this.client.api.applications[this.id].reset.post(); - return app.secret; - } - - /** - * Reset Bot Token for this application. - * @param {number} MFACode The MFA code (if required) - * @returns {Promise} - */ - async resetBotToken(MFACode) { - const app = MFACode - ? await this.client.api.applications[this.id].bot.reset.post({ - data: { - code: MFACode, - }, - }) - : await this.client.api.applications[this.id].bot.reset.post(); - return app.token; - } - - /** - * Deletes this application. - * @param {number} MFACode The MFA code (if required) - * @returns {Promise} - */ - delete(MFACode) { - return this.client.developerPortal.deleteApplication(this.id, MFACode); - } - - /** - * Add new image to this application. (RPC) - * @param {BufferResolvable|Base64Resolvable} image Image Resolvable - * @param {string} name Name of the image - * @returns {ApplicationAsset} - */ - async addAsset(image, name) { - const data = await DataResolver.resolveImage(image); - const asset = await this.client.api.applications[this.id].assets.post({ - data: { - type: 1, - name, - image: data, - }, - }); - return { - id: asset.id, - name: asset.name, - type: AssetTypes[asset.type - 1], - }; - } - - /** - * Delete an image from this application. (RPC) - * @param {Snowflake} id ID of the image - * @returns {Promise} - */ - async deleteAsset(id) { - await this.client.api.applications[this.id].assets[id].delete(); - return undefined; - } - - /** - * Gets this application's role connection metadata records - * @returns {Promise} - */ - async fetchRoleConnectionMetadataRecords() { - const metadata = await this.client.api.applications(this.id)('role-connections').metadata.get(); - return metadata.map(data => new ApplicationRoleConnectionMetadata(data)); - } - - /** - * Data for creating or editing an application role connection metadata. - * @typedef {Object} ApplicationRoleConnectionMetadataEditOptions - * @property {string} name The name of the metadata field - * @property {?Object} [nameLocalizations] The name localizations for the metadata field - * @property {string} description The description of the metadata field - * @property {?Object} [descriptionLocalizations] The description localizations for the metadata field - * @property {string} key The dictionary key of the metadata field - * @property {ApplicationRoleConnectionMetadataType} type The type of the metadata field - */ - - /** - * Updates this application's role connection metadata records - * @param {ApplicationRoleConnectionMetadataEditOptions[]} records The new role connection metadata records - * @returns {Promise} - */ - async editRoleConnectionMetadataRecords(records) { - const newRecords = await this.client.api - .applications(this.client.user.id)('role-connections') - .metadata.put({ - data: records.map(record => ({ - type: typeof record.type === 'string' ? ApplicationRoleConnectionMetadataTypes[record.type] : record.type, - key: record.key, - name: record.name, - name_localizations: record.nameLocalizations, - description: record.description, - description_localizations: record.descriptionLocalizations, - })), - }); - - return newRecords.map(data => new ApplicationRoleConnectionMetadata(data)); - } - - /** - * When concatenated with a string, this automatically returns the application's name instead of the - * Application object. - * @returns {?string} - * @example - * // Logs: Application name: My App - * console.log(`Application name: ${application}`); - */ - toString() { - return this.name; - } - - toJSON() { - return super.toJSON({ createdTimestamp: true }); - } -} - -module.exports = DeveloperPortalApplication; diff --git a/src/structures/GuildFolder.js b/src/structures/GuildFolder.js deleted file mode 100644 index 7614ef9..00000000 --- a/src/structures/GuildFolder.js +++ /dev/null @@ -1,75 +0,0 @@ -'use strict'; - -const Base = require('./Base'); - -/** - * Guild Folder. - * @abstract - */ -class GuildFolder extends Base { - constructor(client, data) { - super(client); - this._patch(data); - } - _patch(data) { - if ('id' in data) { - /** - * The guild folder's id - * @type {Snowflake} - */ - this.id = data.id; - } - - if ('name' in data) { - /** - * The guild folder's name - * @type {string} - */ - this.name = data.name; - } - - if ('color' in data) { - /** - * The base 10 color of the folder - * @type {number} - */ - this.color = data.color; - } - - if ('guild_ids' in data) { - /** - * The guild folder's guild ids - * @type {Snowflake[]} - */ - this.guild_ids = data.guild_ids; - } - } - /** - * The hexadecimal version of the folder color, with a leading hashtag - * @type {string} - * @readonly - */ - get hexColor() { - return `#${this.color.toString(16).padStart(6, '0')}`; - } - - /** - * Guilds in the folder - * @type {Collection} - * @readonly - */ - get guilds() { - return this.client.guilds.cache.filter(guild => this.guild_ids.includes(guild.id)); - } - - toJSON() { - return { - id: this.id, - name: this.name, - color: this.color, - guild_ids: this.guild_ids, - }; - } -} - -module.exports = GuildFolder; diff --git a/src/structures/Session.js b/src/structures/Session.js deleted file mode 100644 index 1ec045e..00000000 --- a/src/structures/Session.js +++ /dev/null @@ -1,81 +0,0 @@ -'use strict'; - -const Base = require('./Base'); - -/** - * @typedef {Object} SessionClientInfo - * @property {string} location Location of the client (using IP address) - * @property {string} platform Platform of the client - * @property {string} os Operating system of the client - */ - -/** - * Represents a Client OAuth2 Application Team. - * @extends {Base} - */ -class Session extends Base { - constructor(client, data) { - super(client); - this._patch(data); - } - - _patch(data) { - if ('id_hash' in data) { - /** - * The session hash id - * @type {string} - */ - this.id = data.id_hash; - } - if ('approx_last_used_time' in data) { - this.approxLastUsedTime = data.approx_last_used_time; - } - if ('client_info' in data) { - /** - * The client info - * @type {SessionClientInfo} - */ - this.clientInfo = data.client_info; - } - } - - /** - * The timestamp the client was last used at. - * @type {number} - * @readonly - */ - get createdTimestamp() { - return this.createdAt.getTime(); - } - - /** - * The time the client was last used at. - * @type {Date} - * @readonly - */ - get createdAt() { - return new Date(this.approxLastUsedTime); - } - - /** - * Logout the client (remote). - * @param {string | null} mfaCode MFA code (if 2FA is enabled) - * @returns {Promise} - */ - logout(mfaCode) { - if (typeof this.client.password !== 'string') throw new Error('REQUIRE_PASSWORD', 'You must provide a password.'); - return this.client.api.auth.sessions.logout({ - data: { - session_id_hashes: [this.id], - password: this.client.password, - code: typeof mfaCode === 'string' ? mfaCode : undefined, - }, - }); - } - - toJSON() { - return super.toJSON(); - } -} - -module.exports = Session; diff --git a/src/util/RemoteAuth.js b/src/util/RemoteAuth.js index 5d6ca5f..18ad720 100644 --- a/src/util/RemoteAuth.js +++ b/src/util/RemoteAuth.js @@ -1,14 +1,13 @@ 'use strict'; -const { Buffer } = require('buffer'); -const crypto = require('crypto'); + +const { Buffer } = require('node:buffer'); +const crypto = require('node:crypto'); const EventEmitter = require('node:events'); +const { StringDecoder } = require('node:string_decoder'); const { setTimeout } = require('node:timers'); -const { StringDecoder } = require('string_decoder'); -const chalk = require('chalk'); const fetch = require('node-fetch'); -const { encode: urlsafe_b64encode } = require('safe-base64'); const WebSocket = require('ws'); -const { defaultUA } = require('./Constants'); +const { UserAgent } = require('./Constants'); const Options = require('./Options'); const defaultClientOptions = Options.createDefault(); @@ -22,9 +21,9 @@ const receiveEvent = { NONCE_PROOF: 'nonce_proof', PENDING_REMOTE_INIT: 'pending_remote_init', HEARTBEAT_ACK: 'heartbeat_ack', - PENDING_LOGIN: 'pending_ticket', + PENDING_TICKET: 'pending_ticket', CANCEL: 'cancel', - SUCCESS: 'pending_login', + PENDING_LOGIN: 'pending_login', }; const sendEvent = { @@ -37,266 +36,167 @@ const Event = { READY: 'ready', ERROR: 'error', CANCEL: 'cancel', - WAIT: 'pending', - SUCCESS: 'success', + WAIT_SCAN: 'pending', FINISH: 'finish', CLOSED: 'closed', + DEBUG: 'debug', }; /** - * @typedef {Object} DiscordAuthWebsocketOptions - * @property {?boolean} [debug=false] Log debug info - * @property {?boolean} [hiddenLog=false] Hide log ? - * @property {?boolean} [autoLogin=false] Automatically login (DiscordJS.Client Login) ? - * @property {?boolean} [failIfError=true] Throw error ? - * @property {?boolean} [generateQR=true] Create QR Code ? - * @property {?number} [apiVersion=9] API Version - * @property {?string} [userAgent] User Agent - * @property {?Object.} [wsProperties] Web Socket Properties - */ - -/** - * Discord Auth QR (Discord.RemoteAuth will be removed in the future, v13.9.0 release) + * Discord Auth QR * @extends {EventEmitter} * @abstract */ class DiscordAuthWebsocket extends EventEmitter { + #ws = null; + #heartbeatInterval = null; + #expire = null; + #publicKey = null; + #privateKey = null; + #ticket = null; + #fingerprint = ''; + #userDecryptString = ''; + /** * Creates a new DiscordAuthWebsocket instance. - * @param {?DiscordAuthWebsocketOptions} options Options */ - constructor(options) { + constructor() { super(); - /** - * WebSocket - * @type {?WebSocket} - */ - this.ws = null; - /** - * Heartbeat Interval - * @type {?number} - */ - this.heartbeatInterval = NaN; - this._expire = NaN; - this.key = null; - /** - * User (Scan QR Code) - * @type {?Object} - */ - this.user = null; - /** - * Temporary Token (Scan QR Code) - * @type {?string} - */ - this.token = undefined; - /** - * Real Token (Login) - * @type {?string} - */ - this.realToken = undefined; - /** - * Fingerprint (QR Code) - * @type {?string} - */ - this.fingerprint = null; - - /** - * Captcha Handler - * @type {Function} - * @param {Captcha} data hcaptcha data - * @returns {Promise} Captcha token - */ - // eslint-disable-next-line no-unused-vars - this.captchaSolver = data => - new Promise((resolve, reject) => { - reject( - new Error(` -Captcha Handler not found - Please set captchaSolver option -Example captchaSolver function: - -new DiscordAuthWebsocket({ - captchaSolver: async (data) => { - const token = await hcaptchaSolver(data.captcha_sitekey, 'discord.com'); - return token; + this.token = ''; } -}); -`), - ); - }); - - /** - * Captcha Cache - * @type {?Captcha} - */ - this.captchaCache = null; - - this._validateOptions(options); - - this.callFindRealTokenCount = 0; - } /** - * Get expire time - * @type {string} Expire time - * @readonly + * @type {string} */ - get exprireTime() { - return this._expire.toLocaleString('en-US'); + get AuthURL() { + return baseURL + this.#fingerprint; } - _validateOptions(options = {}) { - /** - * Options - * @type {?DiscordAuthWebsocketOptions} - */ - this.options = { - debug: false, - hiddenLog: false, - autoLogin: false, - failIfError: true, - generateQR: true, - apiVersion: 9, - userAgent: defaultUA, - wsProperties: defaultClientOptions.ws.properties, - captchaSolver: () => new Error('Captcha Handler not found. Please set captchaSolver option.'), - }; - if (typeof options == 'object') { - if (typeof options.debug == 'boolean') this.options.debug = options.debug; - if (typeof options.hiddenLog == 'boolean') this.options.hiddenLog = options.hiddenLog; - if (typeof options.autoLogin == 'boolean') this.options.autoLogin = options.autoLogin; - if (typeof options.failIfError == 'boolean') this.options.failIfError = options.failIfError; - if (typeof options.generateQR == 'boolean') this.options.generateQR = options.generateQR; - if (typeof options.apiVersion == 'number') this.options.apiVersion = options.apiVersion; - if (typeof options.userAgent == 'string') this.options.userAgent = options.userAgent; - if (typeof options.wsProperties == 'object') this.options.wsProperties = options.wsProperties; - if (typeof options.captchaSolver == 'function') this.captchaSolver = options.captchaSolver; - } + + /** + * @type {Date} + */ + get exprire() { + return this.#expire; } - _createWebSocket(url) { - this.ws = new WebSocket(url, { + + /** + * @type {UserRaw} + */ + get user() { + return DiscordAuthWebsocket.decryptUser(this.#userDecryptString); + } + + #createWebSocket(url) { + this.#ws = new WebSocket(url, { headers: { Origin: 'https://discord.com', - 'User-Agent': this.options.userAgent, + 'User-Agent': UserAgent, }, }); - this._handleWebSocket(); + this.#handleWebSocket(); } - _handleWebSocket() { - this.ws.on('error', error => { - this._logger('error', error); + + #handleWebSocket() { + this.#ws.on('error', error => { + /** + * WS Error + * @event DiscordAuthWebsocket#error + * @param {Error} error Error + */ + this.emit(Event.ERROR, error); }); - this.ws.on('open', () => { - this._logger('debug', 'Client Connected'); + this.#ws.on('open', () => { + /** + * Debug Event + * @event DiscordAuthWebsocket#debug + * @param {string} msg Debug msg + */ + this.emit(Event.DEBUG, '[WS] Client Connected'); }); - this.ws.on('close', () => { - this._logger('debug', 'Connection closed.'); - }); - this.ws.on('message', message => { - this._handleMessage(JSON.parse(message)); + this.#ws.on('close', () => { + this.emit(Event.DEBUG, '[WS] Connection closed'); }); + this.#ws.on('message', this.#handleMessage.bind(this)); } - _handleMessage(message) { + + #handleMessage(message) { + message = JSON.parse(message); switch (message.op) { case receiveEvent.HELLO: { - this._ready(message); + this.#ready(message); break; } + case receiveEvent.NONCE_PROOF: { - this._receiveNonceProof(message); + this.#receiveNonceProof(message); break; } + case receiveEvent.PENDING_REMOTE_INIT: { - this._pendingRemoteInit(message); - break; - } - case receiveEvent.HEARTBEAT_ACK: { - this._logger('debug', 'Heartbeat acknowledged.'); - this._heartbeatAck(); - break; - } - case receiveEvent.PENDING_LOGIN: { - this._pendingLogin(message); - break; - } - case receiveEvent.CANCEL: { - this._logger('debug', 'Cancel login.'); + this.#fingerprint = message.fingerprint; /** - * Emitted whenever a user cancels the login process. - * @event DiscordAuthWebsocket#cancel - * @param {object} user User (Raw) + * Ready Event + * @event DiscordAuthWebsocket#ready + * @param {DiscordAuthWebsocket} client WS */ - this.emit(Event.CANCEL, this.user); + this.emit(Event.READY, this); + break; + } + + case receiveEvent.HEARTBEAT_ACK: { + this.emit(Event.DEBUG, `Heartbeat acknowledged.`); + this.#heartbeatAck(); + break; + } + + case receiveEvent.PENDING_TICKET: { + this.#pendingLogin(message); + break; + } + + case receiveEvent.CANCEL: { + /** + * Cancel + * @event DiscordAuthWebsocket#cancel + * @param {DiscordAuthWebsocket} client WS + */ + this.emit(Event.CANCEL, this); this.destroy(); break; } - case receiveEvent.SUCCESS: { - this._logger('debug', 'Receive Token - Login Success.', message.ticket); - /** - * Emitted whenever a token is created. (Fake token) - * @event DiscordAuthWebsocket#success - * @param {object} user Discord User - * @param {string} token Discord Token (Fake) - */ - this.emit(Event.SUCCESS, this.user, message.ticket); - this.token = message.ticket; - this._findRealToken(); - this._logger('default', 'Get token success.'); - break; - } - default: { - this._logger('debug', `Unknown op: ${message.op}`, message); - } - } - } - _logger(type = 'default', ...message) { - if (this.options.hiddenLog) return; - switch (type.toLowerCase()) { - case 'error': { - // eslint-disable-next-line no-unused-expressions - this.options.failIfError - ? this._throwError(new Error(message[0])) - : console.error(chalk.red(`[DiscordRemoteAuth] ERROR`), ...message); - break; - } - case 'default': { - console.log(chalk.green(`[DiscordRemoteAuth]`), ...message); - break; - } - case 'debug': { - if (this.options.debug) console.log(chalk.yellow(`[DiscordRemoteAuth] DEBUG`), ...message); + + case receiveEvent.PENDING_LOGIN: { + this.#ticket = message.ticket; + this.#findRealToken(); break; } } } - _throwError(error) { - console.log(chalk.red(`[DiscordRemoteAuth] ERROR`), error); - throw error; - } - _send(op, data) { - if (!this.ws) this._throwError(new Error('WebSocket is not connected.')); + + #send(op, data) { + if (!this.#ws) return; let payload = { op: op }; if (data !== null) payload = { ...payload, ...data }; - this._logger('debug', `Send Data:`, payload); - this.ws.send(JSON.stringify(payload)); + this.#ws.send(JSON.stringify(payload)); } - _heartbeat() { - this._send(sendEvent.HEARTBEAT); - } - _heartbeatAck() { + + #heartbeatAck() { setTimeout(() => { - this._heartbeat(); - }, this.heartbeatInterval).unref(); + this.#send(sendEvent.HEARTBEAT); + }, this.#heartbeatInterval).unref(); } - _ready(data) { - this._logger('debug', 'Attempting server handshake...'); - this._expire = new Date(Date.now() + data.timeout_ms); - this.heartbeatInterval = data.heartbeat_interval; - this._createKey(); - this._heartbeatAck(); - this._init(); + + #ready(data) { + this.emit(Event.DEBUG, 'Attempting server handshake...'); + this.#expire = new Date(Date.now() + data.timeout_ms); + this.#heartbeatInterval = data.heartbeat_interval; + this.#createKey(); + this.#heartbeatAck(); + this.#init(); } - _createKey() { - if (this.key) this._throwError(new Error('Key is already created.')); - this.key = crypto.generateKeyPairSync('rsa', { + + #createKey() { + const key = crypto.generateKeyPairSync('rsa', { modulusLength: 2048, publicKeyEncoding: { type: 'spki', @@ -307,35 +207,41 @@ new DiscordAuthWebsocket({ format: 'pem', }, }); + this.#privateKey = key.privateKey; + this.#publicKey = key.publicKey; } - _createPublicKey() { - if (!this.key) this._throwError(new Error('Key is not created.')); - this._logger('debug', 'Generating public key...'); + + #encodePublicKey() { const decoder = new StringDecoder('utf-8'); - let pub_key = decoder.write(this.key.publicKey); + let pub_key = decoder.write(this.#publicKey); pub_key = pub_key.split('\n').slice(1, -2).join(''); - this._logger('debug', 'Public key generated.', pub_key); return pub_key; } - _init() { - const public_key = this._createPublicKey(); - this._send(sendEvent.INIT, { encoded_public_key: public_key }); + + #init() { + const public_key = this.#encodePublicKey(); + this.#send(sendEvent.INIT, { encoded_public_key: public_key }); } - _receiveNonceProof(data) { + + #receiveNonceProof(data) { const nonce = data.encrypted_nonce; - const decrypted_nonce = this._decryptPayload(nonce); - let proof = crypto.createHash('sha256').update(decrypted_nonce).digest(); - proof = urlsafe_b64encode(proof); - proof = proof.replace(/\s+$/, ''); - this._send(sendEvent.NONCE_PROOF, { proof: proof }); - this._logger('debug', `Nonce proof decrypted:`, proof); + const decrypted_nonce = this.#decryptPayload(nonce); + const proof = crypto + .createHash('sha256') + .update(decrypted_nonce) + .digest() + .toString('base64') + .replace(/\+/g, '-') + .replace(/\//g, '_') + .replace(/=+/, '') + .replace(/\s+$/, ''); + this.#send(sendEvent.NONCE_PROOF, { proof: proof }); } - _decryptPayload(encrypted_payload) { - if (!this.key) this._throwError(new Error('Key is not created.')); + + #decryptPayload(encrypted_payload) { const payload = Buffer.from(encrypted_payload, 'base64'); - this._logger('debug', `Encrypted Payload (Buffer):`, payload); const decoder = new StringDecoder('utf-8'); - const private_key = decoder.write(this.key.privateKey); + const private_key = decoder.write(this.#privateKey); const data = crypto.privateDecrypt( { key: private_key, @@ -344,170 +250,129 @@ new DiscordAuthWebsocket({ }, payload, ); - this._logger('debug', `Decrypted Payload:`, data.toString()); return data; } - _pendingLogin(data) { - const user_data = this._decryptPayload(data.encrypted_user_payload); - const user = new User(user_data.toString()); - this.user = user; + + #pendingLogin(data) { + const user_data = this.#decryptPayload(data.encrypted_user_payload); + this.#userDecryptString = user_data.toString(); + + /** + * @typedef {Object} UserRaw + * @property {Snowflake} id + * @property {string} username + * @property {number} discriminator + * @property {string} avatar + */ + /** * Emitted whenever a user is scan QR Code. * @event DiscordAuthWebsocket#pending - * @param {object} user Discord User Raw + * @param {UserRaw} user Discord User Raw */ - this.emit(Event.WAIT, user); - this._logger('debug', 'Waiting for user to finish login...'); - this.user.prettyPrint(this); - this._logger('default', 'Please check your phone again to confirm login.'); + this.emit(Event.WAIT_SCAN, this.user); } - _pendingRemoteInit(data) { - this._logger('debug', `Pending Remote Init:`, data); - /** - * Emitted whenever a url is created. - * @event DiscordAuthWebsocket#ready - * @param {string} fingerprint Fingerprint - * @param {string} url DiscordAuthWebsocket - */ - this.emit(Event.READY, data.fingerprint, `${baseURL}${data.fingerprint}`); - this.fingerprint = data.fingerprint; - if (this.options.generateQR) this.generateQR(); - } - _awaitLogin(client) { - this.once(Event.FINISH, (user, token) => { - this._logger('debug', 'Create login state...', user, token); - client.login(token); + + #awaitLogin(client) { + return new Promise(r => { + this.once(Event.FINISH, token => { + r(client.login(token)); + }); }); } + /** - * Connect to DiscordAuthWebsocket. - * @param {?Client} client Using only for auto login. - * @returns {undefined} + * Connect WS + * @param {Client} [client] DiscordJS Client + * @returns {Promise} */ connect(client) { - this._createWebSocket(wsURL); - if (client && this.options.autoLogin) this._awaitLogin(client); + this.#createWebSocket(wsURL); + if (client) { + return this.#awaitLogin(client); + } else { + return Promise.resolve(); + } } + /** - * Disconnect from DiscordAuthWebsocket. - * @returns {undefined} + * Destroy client + * @returns {void} */ destroy() { - if (!this.ws) this._throwError(new Error('WebSocket is not connected.')); + if (!this.ws) return; this.ws.close(); + this.emit(Event.DEBUG, 'WebSocket closed.'); /** * Emitted whenever a connection is closed. * @event DiscordAuthWebsocket#closed - * @param {boolean} loginState Login state */ - this.emit(Event.CLOSED, this.token); - this._logger('debug', 'WebSocket closed.'); + this.emit(Event.CLOSED); } + /** * Generate QR code for user to scan (Terminal) - * @returns {undefined} + * @returns {void} */ generateQR() { - if (!this.fingerprint) this._throwError(new Error('Fingerprint is not created.')); - require('@aikochan2k6/qrcode-terminal').generate(`${baseURL}${this.fingerprint}`, { + if (!this.#fingerprint) return; + require('@aikochan2k6/qrcode-terminal').generate(this.AuthURL, { small: true, }); - this._logger('default', `Please scan the QR code to continue.\nQR Code will expire in ${this.exprireTime}`); } - async _findRealToken(captchaSolveData) { - this.callFindRealTokenCount++; - if (!this.token) return this._throwError(new Error('Token is not created.')); - if (!captchaSolveData && this.captchaCache) return this._throwError(new Error('Captcha is not solved.')); - if (this.callFindRealTokenCount > 5) { - return this._throwError( - new Error( - `Failed to find real token (${this.callFindRealTokenCount} times) ${this.captchaCache ? '[Captcha]' : ''}`, - ), - ); - } - this._logger('debug', 'Find real token...'); - const res = await ( - await fetch(`https://discord.com/api/v${this.options.apiVersion}/users/@me/remote-auth/login`, { - method: 'POST', - headers: { - Accept: '*/*', - 'Accept-Language': 'en-US', - 'Content-Type': 'application/json', - 'Sec-Fetch-Dest': 'empty', - 'Sec-Fetch-Mode': 'cors', - 'Sec-Fetch-Site': 'same-origin', - 'X-Debug-Options': 'bugReporterEnabled', - 'X-Super-Properties': `${Buffer.from(JSON.stringify(this.options.wsProperties), 'ascii').toString('base64')}`, - 'X-Discord-Locale': 'en-US', - 'User-Agent': this.options.userAgent, - Referer: 'https://discord.com/channels/@me', - Connection: 'keep-alive', - Origin: 'https://discord.com', - }, - body: JSON.stringify( - captchaSolveData - ? { - ticket: this.token, - captcha_rqtoken: this.captchaCache.captcha_rqtoken, - captcha_key: captchaSolveData, - } - : { - ticket: this.token, - }, - ), + #findRealToken() { + return fetch(`https://discord.com/api/v9/users/@me/remote-auth/login`, { + method: 'POST', + headers: { + Accept: '*/*', + 'Accept-Language': 'en-US', + 'Content-Type': 'application/json', + 'Sec-Fetch-Dest': 'empty', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Site': 'same-origin', + 'X-Debug-Options': 'bugReporterEnabled', + 'X-Super-Properties': `${Buffer.from(JSON.stringify(defaultClientOptions.ws.properties), 'ascii').toString( + 'base64', + )}`, + 'X-Discord-Locale': 'en-US', + 'User-Agent': UserAgent, + Referer: 'https://discord.com/channels/@me', + Connection: 'keep-alive', + Origin: 'https://discord.com', + }, + body: JSON.stringify({ + ticket: this.#ticket, + }), + }) + .then(r => r.json()) + .then(res => { + if (res.encrypted_token) { + this.token = this.#decryptPayload(res.encrypted_token).toString(); + } + /** + * Emitted whenever a real token is found. + * @event DiscordAuthWebsocket#finish + * @param {string} token Discord Token + */ + this.emit(Event.FINISH, this.token); + this.destroy(); }) - ).json(); - if (res?.captcha_key) { - this.captchaCache = res; - } else if (!res.encrypted_token) { - this._throwError(new Error('Request failed. Please try again.', res)); - this.captchaCache = null; - } - if (!res && this.captchaCache) { - this._logger('default', 'Captcha is detected. Please solve the captcha to continue.'); - this._logger('debug', 'Try call captchaSolver()', this.captchaCache); - const token = await this.options.captchaSolver(this.captchaCache); - return this._findRealToken(token); - } - this.realToken = this._decryptPayload(res.encrypted_token).toString(); - /** - * Emitted whenever a real token is found. - * @event DiscordAuthWebsocket#finish - * @param {object} user User - * @param {string} token Real token - */ - this.emit(Event.FINISH, this.user, this.realToken); - return this; + .catch(() => false); } -} -class User { - constructor(payload) { + static decryptUser(payload) { const values = payload.split(':'); - this.id = values[0]; - this.username = values[3]; - this.discriminator = values[1]; - this.avatar = values[2]; - return this; - } - get avatarURL() { - return `https://cdn.discordapp.com/avatars/${this.id}/${this.avatar}.${ - this.avatar.startsWith('a_') ? 'gif' : 'png' - }`; - } - get tag() { - return `${this.username}#${this.discriminator}`; - } - prettyPrint(RemoteAuth) { - let string = `\n`; - string += ` ${chalk.bgBlue('User:')} `; - string += `${this.tag} (${this.id})\n`; - string += ` ${chalk.bgGreen('Avatar URL:')} `; - string += chalk.cyan(`${this.avatarURL}\n`); - string += ` ${chalk.bgMagenta('Token:')} `; - string += chalk.red(`${this.token ? this.token : 'Unknown'}`); - RemoteAuth._logger('default', string); + const id = values[0]; + const username = values[3]; + const discriminator = values[1]; + const avatar = values[2]; + return { + id, + username, + discriminator, + avatar, + }; } } diff --git a/src/util/Util.js b/src/util/Util.js index f0d956a..e6c7aa9 100644 --- a/src/util/Util.js +++ b/src/util/Util.js @@ -5,12 +5,13 @@ const process = require('node:process'); const { Collection } = require('@discordjs/collection'); const fetch = require('node-fetch'); const { Colors } = require('./Constants'); -const { RangeError, TypeError, Error: DJSError } = require('../errors'); +const { Error: DiscordError, RangeError, TypeError } = require('../errors'); const has = (o, k) => Object.prototype.hasOwnProperty.call(o, k); const isObject = d => typeof d === 'object' && d !== null; let deprecationEmittedForSplitMessage = false; let deprecationEmittedForRemoveMentions = false; +let deprecationEmittedForResolveAutoArchiveMaxLimit = false; const TextSortableGroupTypes = ['GUILD_TEXT', 'GUILD_ANNOUCMENT', 'GUILD_FORUM']; const VoiceSortableGroupTypes = ['GUILD_VOICE', 'GUILD_STAGE_VOICE']; @@ -138,6 +139,7 @@ class Util extends null { * @property {boolean} [numberedList=false] Whether to escape numbered lists * @property {boolean} [maskedLink=false] Whether to escape masked links */ + /** * Escapes any Discord-flavour markdown in a string. * @param {string} text Content to escape @@ -220,6 +222,7 @@ class Util extends null { if (maskedLink) text = Util.escapeMaskedLink(text); return text; } + /** * Escapes code block markdown in a string. * @param {string} text Content to escape @@ -228,6 +231,7 @@ class Util extends null { static escapeCodeBlock(text) { return text.replaceAll('```', '\\`\\`\\`'); } + /** * Escapes inline code markdown in a string. * @param {string} text Content to escape @@ -236,6 +240,7 @@ class Util extends null { static escapeInlineCode(text) { return text.replace(/(?<=^|[^`])``?(?=[^`]|$)/g, match => (match.length === 2 ? '\\`\\`' : '\\`')); } + /** * Escapes italic markdown in a string. * @param {string} text Content to escape @@ -253,6 +258,7 @@ class Util extends null { return `\\_${match}`; }); } + /** * Escapes bold markdown in a string. * @param {string} text Content to escape @@ -265,6 +271,7 @@ class Util extends null { return '\\*\\*'; }); } + /** * Escapes underline markdown in a string. * @param {string} text Content to escape @@ -277,6 +284,7 @@ class Util extends null { return '\\_\\_'; }); } + /** * Escapes strikethrough markdown in a string. * @param {string} text Content to escape @@ -285,6 +293,7 @@ class Util extends null { static escapeStrikethrough(text) { return text.replaceAll('~~', '\\~\\~'); } + /** * Escapes spoiler markdown in a string. * @param {string} text Content to escape @@ -293,6 +302,7 @@ class Util extends null { static escapeSpoiler(text) { return text.replaceAll('||', '\\|\\|'); } + /** * Escapes escape characters in a string. * @param {string} text Content to escape @@ -301,6 +311,7 @@ class Util extends null { static escapeEscape(text) { return text.replaceAll('\\', '\\\\'); } + /** * Escapes heading characters in a string. * @param {string} text Content to escape @@ -309,6 +320,7 @@ class Util extends null { static escapeHeading(text) { return text.replaceAll(/^( {0,2}[*-] +)?(#{1,3} )/gm, '$1\\$2'); } + /** * Escapes bulleted list characters in a string. * @param {string} text Content to escape @@ -317,6 +329,7 @@ class Util extends null { static escapeBulletedList(text) { return text.replaceAll(/^( *)[*-]( +)/gm, '$1\\-$2'); } + /** * Escapes numbered list characters in a string. * @param {string} text Content to escape @@ -325,6 +338,7 @@ class Util extends null { static escapeNumberedList(text) { return text.replaceAll(/^( *\d+)\./gm, '$1\\.'); } + /** * Escapes masked link characters in a string. * @param {string} text Content to escape @@ -334,6 +348,16 @@ class Util extends null { return text.replaceAll(/\[.+\]\(.+\)/gm, '\\$&'); } + /** + * @typedef {Object} FetchRecommendedShardsOptions + * @property {number} [guildsPerShard=1000] Number of guilds assigned per shard + * @property {number} [multipleOf=1] The multiple the shard count should round up to. (16 for large bot sharding) + */ + + static fetchRecommendedShards() { + throw new DiscordError('INVALID_USER_API'); + } + /** * Parses emoji info out of a string. The string must be one of: * * A UTF-8 emoji (no id) @@ -623,26 +647,22 @@ class Util extends null { /** * Resolves the maximum time a guild's thread channels should automatically archive in case of no recent activity. - * @deprecated + * @param {Guild} guild The guild to resolve this limit from. + * @deprecated This will be removed in the next major version. * @returns {number} */ static resolveAutoArchiveMaxLimit() { + if (!deprecationEmittedForResolveAutoArchiveMaxLimit) { + process.emitWarning( + // eslint-disable-next-line max-len + "The Util.resolveAutoArchiveMaxLimit method and the 'MAX' option are deprecated and will be removed in the next major version.", + 'DeprecationWarning', + ); + deprecationEmittedForResolveAutoArchiveMaxLimit = true; + } return 10080; } - /** - * Lazily evaluates a callback function (yea it's v14 :yay:) - * @param {Function} cb The callback to lazily evaluate - * @returns {Function} - * @example - * const User = lazy(() => require('./User')); - * const user = new (User())(client, data); - */ - static lazy(cb) { - let defaultValue; - return () => (defaultValue ??= cb()); - } - /** * Transforms an API guild forum tag to camel-cased guild forum tag. * @param {APIGuildForumTag} tag The tag to transform @@ -708,95 +728,6 @@ class Util extends null { }; } - static async getAttachments(client, channelId, ...files) { - files = files.flat(2); - if (!files.length) return []; - files = files.map((file, i) => ({ - filename: file.name ?? file.attachment?.name ?? file.attachment?.filename ?? 'file.jpg', - // 25MB = 26_214_400bytes - file_size: Math.floor((26_214_400 / 10) * Math.random()), - id: `${i}`, - })); - const { attachments } = await client.api.channels[channelId].attachments.post({ - data: { - files, - }, - }); - return attachments; - } - - static uploadFile(data, url) { - return new Promise((resolve, reject) => { - fetch(url, { - method: 'PUT', - body: data, - }) - .then(res => { - if (res.ok) { - resolve(res); - } else { - reject(res); - } - }) - .catch(reject); - }); - } - - static testImportModule(name) { - try { - require.resolve(name); - return true; - } catch { - return false; - } - } - - static getProxyObject(proxy) { - const protocol = new URL(proxy).protocol.slice(0, -1); - const mapObject = { - http: 'https', // Cuz we can't use http for discord - https: 'https', - socks4: 'socks', - socks5: 'socks', - 'pac+http': 'pac', - 'pac+https': 'pac', - }; - const proxyType = mapObject[protocol]; - switch (proxyType) { - case 'https': { - if (!Util.testImportModule('https-proxy-agent')) { - throw new DJSError('MISSING_MODULE', 'https-proxy-agent', 'npm install https-proxy-agent'); - } - const httpsProxyAgent = require('https-proxy-agent'); - return new httpsProxyAgent.HttpsProxyAgent(proxy); - } - - case 'socks': { - if (!Util.testImportModule('socks-proxy-agent')) { - throw new DJSError('MISSING_MODULE', 'socks-proxy-agent', 'npm install socks-proxy-agent'); - } - const socksProxyAgent = require('socks-proxy-agent'); - return new socksProxyAgent.SocksProxyAgent(proxy); - } - - case 'pac': { - if (!Util.testImportModule('pac-proxy-agent')) { - throw new DJSError('MISSING_MODULE', 'pac-proxy-agent', 'npm install pac-proxy-agent'); - } - const pacProxyAgent = require('pac-proxy-agent'); - return new pacProxyAgent.PacProxyAgent(proxy); - } - - default: { - if (!Util.testImportModule('proxy-agent')) { - throw new DJSError('MISSING_MODULE', 'proxy-agent', 'npm install proxy-agent@5'); - } - const proxyAgent = require('proxy-agent'); - return new proxyAgent(proxy); - } - } - } - /** * Gets an array of the channel types that can be moved in the channel group. For example, a GuildText channel would * return an array containing the types that can be ordered within the text channels (always at the top), and a voice @@ -831,94 +762,38 @@ class Util extends null { return Number(BigInt(userId) >> 22n) % 6; } - static clientRequiredAction(client, code) { - let msg = ''; - let stopClient = false; - switch (code) { - case null: { - msg = 'All required actions have been completed.'; - break; - } - case 'AGREEMENTS': { - msg = 'You need to accept the new Terms of Service and Privacy Policy.'; - // https://discord.com/api/v9/users/@me/agreements - client.api - .users('@me') - .agreements.patch({ - data: { - terms: true, - privacy: true, - }, - }) - .then(() => { - client.emit( - 'debug', - '[USER_REQUIRED_ACTION] Successfully accepted the new Terms of Service and Privacy Policy.', - ); - }) - .catch(e => { - client.emit( - 'debug', - `[USER_REQUIRED_ACTION] Failed to accept the new Terms of Service and Privacy Policy: ${e}`, - ); - }); - break; - } - case 'REQUIRE_CAPTCHA': { - msg = 'You need to complete a captcha.'; - stopClient = true; - break; - } - case 'REQUIRE_VERIFIED_EMAIL': { - msg = 'You need to verify your email.'; - stopClient = true; - break; - } - case 'REQUIRE_REVERIFIED_EMAIL': { - msg = 'You need to reverify your email.'; - stopClient = true; - break; - } - case 'REQUIRE_VERIFIED_PHONE': { - msg = 'You need to verify your phone number.'; - stopClient = true; - break; - } - case 'REQUIRE_REVERIFIED_PHONE': { - msg = 'You need to reverify your phone number.'; - stopClient = true; - break; - } - case 'REQUIRE_VERIFIED_EMAIL_OR_VERIFIED_PHONE': { - msg = 'You need to verify your email or verify your phone number.'; - stopClient = true; // Maybe not - break; - } - case 'REQUIRE_REVERIFIED_EMAIL_OR_VERIFIED_PHONE': { - msg = 'You need to reverify your email or verify your phone number.'; - stopClient = true; - break; - } - case 'REQUIRE_VERIFIED_EMAIL_OR_REVERIFIED_PHONE': { - msg = 'You need to verify your email or reverify your phone number.'; - stopClient = true; - break; - } - case 'REQUIRE_REVERIFIED_EMAIL_OR_REVERIFIED_PHONE': { - msg = 'You need to reverify your email or reverify your phone number.'; - stopClient = true; - break; - } - default: { - msg = `Unknown required action: ${code}`; - break; - } - } - if (stopClient) { - client.emit('error', new Error(`[USER_REQUIRED_ACTION] ${msg}`)); - } else { - client.emit('debug', `[USER_REQUIRED_ACTION] ${msg}`); - } + static async getUploadURL(client, channelId, files) { + if (!files.length) return []; + files = files.map((file, i) => ({ + filename: file.name, + // 25MB = 26_214_400bytes + file_size: Math.floor((26_214_400 / 10) * Math.random()), + id: `${i}`, + })); + const { attachments } = await client.api.channels[channelId].attachments.post({ + data: { + files, + }, + }); + return attachments; + } + + static uploadFile(data, url) { + return new Promise((resolve, reject) => { + fetch(url, { + method: 'PUT', + body: data, + duplex: 'half', // Node.js v20 + }) + .then(res => { + if (res.ok) { + resolve(res); + } else { + reject(res); + } + }) + .catch(reject); + }); } } diff --git a/typings/enums.d.ts b/typings/enums.d.ts index dd30437..56581f5 100644 --- a/typings/enums.d.ts +++ b/typings/enums.d.ts @@ -10,67 +10,6 @@ export const enum ActivityTypes { COMPETING = 5, } -export const enum DMScanLevel { - NOT_SCAN = 0, - NOT_FRIEND = 1, - EVERYONE = 2, -} - -export const enum stickerAnimationMode { - ALWAYS = 0, - INTERACTION = 1, - NEVER = 2, -} - -export const enum NitroType { - NONE = 0, - NITRO_CLASSIC = 1, - NITRO_BOOST = 2, - NITRO_BASIC = 3, -} - -export const enum RelationshipTypes { - NONE = 0, - FRIEND = 1, - BLOCKED = 2, - PENDING_INCOMING = 3, - PENDING_OUTGOING = 4, - IMPLICIT = 5, -} - -export const enum localeSetting { - DANISH = 'da', - GERMAN = 'de', - ENGLISH_UK = 'en-GB', - ENGLISH_US = 'en-US', - SPANISH = 'es-ES', - FRENCH = 'fr', - CROATIAN = 'hr', - ITALIAN = 'it', - LITHUANIAN = 'lt', - HUNGARIAN = 'hu', - DUTCH = 'nl', - NORWEGIAN = 'no', - POLISH = 'pl', - BRAZILIAN_PORTUGUESE = 'pt-BR', - ROMANIA_ROMANIAN = 'ro', - FINNISH = 'fi', - SWEDISH = 'sv-SE', - VIETNAMESE = 'vi', - TURKISH = 'tr', - CZECH = 'cs', - GREEK = 'el', - BULGARIAN = 'bg', - RUSSIAN = 'ru', - UKRAINIAN = 'uk', - HINDI = 'hi', - THAI = 'th', - CHINA_CHINESE = 'zh-CN', - JAPANESE = 'ja', - TAIWAN_CHINESE = 'zh-TW', - KOREAN = 'ko', -} - export const enum ApplicationCommandTypes { CHAT_INPUT = 1, USER = 2, @@ -203,13 +142,6 @@ export const enum GuildScheduledEventStatuses { CANCELED = 4, } -export const enum HypeSquadType { - LEAVE = 0, - HOUSE_BRAVERY = 1, - HOUSE_BRILLIANCE = 2, - HOUSE_BALANCE = 3, -} - export const enum InteractionResponseTypes { PONG = 1, CHANNEL_MESSAGE_WITH_SOURCE = 4, @@ -249,8 +181,6 @@ export const enum MessageButtonStyles { export const enum MessageComponentTypes { ACTION_ROW = 1, BUTTON = 2, - /** @deprecated Use `STRING_SELECT` instead */ - SELECT_MENU = 3, STRING_SELECT = 3, TEXT_INPUT = 4, USER_SELECT = 5, @@ -260,8 +190,6 @@ export const enum MessageComponentTypes { } export const enum SelectMenuComponentTypes { - /** @deprecated Use `STRING_SELECT` instead */ - SELECT_MENU = 3, STRING_SELECT = 3, USER_SELECT = 5, ROLE_SELECT = 6, @@ -344,3 +272,12 @@ export enum ApplicationRoleConnectionMetadataTypes { BOOLEAN_EQUAL, BOOLEAN_NOT_EQUAL, } + +export const enum RelationshipTypes { + NONE = 0, + FRIEND = 1, + BLOCKED = 2, + PENDING_INCOMING = 3, + PENDING_OUTGOING = 4, + IMPLICIT = 5, +} diff --git a/typings/index.d.ts b/typings/index.d.ts index 464632b..75d394b 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -2,7 +2,6 @@ import { blockQuote, bold, channelMention, - chatInputApplicationCommandMention, codeBlock, ContextMenuCommandBuilder, formatEmoji, @@ -21,7 +20,6 @@ import { underscore, userMention, } from '@discordjs/builders'; -import { VoiceConnection } from '@discordjs/voice'; import { Collection } from '@discordjs/collection'; import { APIActionRowComponent, @@ -47,13 +45,13 @@ import { APISelectMenuComponent, APITemplateSerializedSourceGuild, APIUser, - MessageActivityType, - GatewayOpcodes, GatewayVoiceServerUpdateDispatchData, GatewayVoiceStateUpdateDispatchData, + MessageActivityType, RESTPostAPIApplicationCommandsJSONBody, Snowflake, LocalizationMap, + LocaleString, APIGuildMember, APIChannel, } from 'discord-api-types/v9'; @@ -74,10 +72,6 @@ import { AutoModerationRuleKeywordPresetTypes, AutoModerationRuleTriggerTypes, ChannelTypes, - RelationshipTypes, - localeSetting, - stickerAnimationMode, - DMScanLevel, DefaultMessageNotificationLevels, ExplicitContentFilterLevels, InteractionResponseTypes, @@ -88,9 +82,6 @@ import { MessageComponentTypes, MessageTypes, MFALevels, - NitroType as NitroTypes, - HypeSquadType as HypeSquadTypes, - localeSetting as localeSettings, NSFWLevels, OverwriteTypes, PremiumTiers, @@ -103,12 +94,12 @@ import { GuildScheduledEventEntityTypes, GuildScheduledEventStatuses, GuildScheduledEventPrivacyLevels, - HypeSquadType, VideoQualityModes, SortOrderType, - SelectMenuComponentTypes, ForumLayoutType, ApplicationRoleConnectionMetadataTypes, + RelationshipTypes, + SelectMenuComponentTypes, } from './enums'; import { APIApplicationRoleConnectionMetadata, @@ -120,7 +111,6 @@ import { RawApplicationData, RawBaseGuildData, RawChannelData, - RawClientApplicationData, RawDMChannelData, RawEmojiData, RawGuildAuditLogData, @@ -173,106 +163,9 @@ import { RawWidgetData, RawWidgetMemberData, } from './rawDataTypes'; -// @ts-ignore + //#region Classes -export class SessionManager extends CachedManager { - private constructor(client: Client, iterable: Iterable); - public fetch(): Promise; - public logoutAllDevices(mfaCode?: string): Promise; -} - -export class BillingManager extends BaseManager { - constructor(client: Client); - public paymentSources: Collection; - public fetchPaymentSources(): Promise>; - public guildBoosts: Collection; - public fetchGuildBoosts(): Promise>; - public currentSubscription: Collection; - public fetchCurrentSubscription(): Promise>; -} - -export class GuildBoost extends Base { - constructor(client: Client, data: object); - public id: Snowflake; - public guildId?: Snowflake; - public readonly guild: Guild | null; - public subscriptionId: Snowflake; - public premiumGuildSubscriptionId?: Snowflake; - public ended?: boolean; - public canceled: boolean; - public cooldownEndsAt: Date; - public unsubscribe(): Promise; - public subscribe(guild: GuildResolvable): Promise; -} - -export class Session extends Base { - constructor(client: Client); - public id?: string; - public clientInfo?: SessionClientInfo; - public readonly createdTimestamp: number; - public readonly createdAt: Date; - public logout(mfaCode?: string): Promise; -} - -export interface SessionClientInfo { - location?: string; - platform?: string; - os?: string; -} - -export class DiscordAuthWebsocket extends EventEmitter { - constructor(options?: DiscordAuthWebsocketOptions); - public fingerprint?: string; - public heartbeatInterval?: number; - public ws?: WebSocket; - public token?: string; - public realToken?: string; - public user?: RawUserData; - public captchaCache?: Captcha; - public captchaHandler(data: Captcha): Promise; - public readonly exprireTime: string; - public connect(client?: Client): void; - public destroy(): void; - public generateQR(): void; - public on(event: 'ready', listener: (fingerprint: string, authURL: string) => void): this; - public on(event: 'finish', listener: (user: RawUserData, token: string) => void): this; - public on(event: 'cancel' | 'pending', listener: (user: RawUserData) => void): this; - public on(event: 'closed', listener: (token?: string) => void): this; - public on(event: string, listener: (...args: any[]) => Awaitable): this; -} - -export class DiscordRPCServer extends EventEmitter { - constructor(client: Client, debug?: boolean); - public debug?: boolean; - public client: Client; - public on(event: 'activity', listener: (data: RPCActivityData) => void): this; -} - -export class Call extends Base { - constructor(client: Client, data: object); - public channelId: Snowflake; - public ringing: Collection; - public region?: string; - public readonly channel: PartialDMChannel | PartialGroupDMChannel; - public setVoiceRegion(region: string): Promise; -} - -export interface RPCActivityData { - activity?: RichPresence; - pid: number; - socketId: string; -} - -export interface DiscordAuthWebsocketOptions { - debug: boolean; - hiddenLog: boolean; - autoLogin: boolean; - failIfError: boolean; - generateQR: boolean; - userAgent?: string; - wsProperties?: object; -} // RPC by aiko-chan-ai export interface RichButton { name: string; @@ -319,11 +212,32 @@ export class RichPresence { image1: string, image2: string, ): Promise; - public static getUUID(): string; public toJSON(): object; public toString(): string; } +export class DiscordAuthWebsocket extends EventEmitter { + constructor(); + public token: string; + public readonly user: { + id: Snowflake; + username: string; + discriminator: number; + avatar: string; + }; + public readonly exprire: Date; + public readonly AuthURL: string; + public connect(client?: Client): Promise; + public destroy(): void; + public generateQR(): void; + public on(event: 'ready', listener: (client: this) => void): this; + public on(event: 'finish', listener: (token: string) => void): this; + public on(event: 'cancel' | 'pending', listener: (user: RawUserData) => void): this; + public on(event: 'closed', listener: () => void): this; + public on(event: string, listener: (...args: any[]) => Awaitable): this; +} + + export interface ExternalAssets { url: string; external_asset_path: string; @@ -442,103 +356,43 @@ export abstract class Application extends Base { public id: Snowflake; public name: string | null; public roleConnectionsVerificationURL: string | null; - public coverURL(options?: StaticImageURLOptions): string | null; - /** @deprecated This method is deprecated as it is unsupported and will be removed in the next major version. */ - public fetchAssets(): Promise; - public invite(guildID: Snowflake, permissions?: PermissionResolvable, captcha?: string): Promise; - public iconURL(options?: StaticImageURLOptions): string | null; - public toJSON(): unknown; - public toString(): string | null; -} - -export interface Tester { - state: number; - user: User; -} - -export interface ApplicationEditData { - name?: string; - description?: string; - icon?: BufferResolvable | Base64Resolvable; - cover?: BufferResolvable | Base64Resolvable; - botPublic?: boolean; - botRequireCodeGrant?: boolean; - TermsOfService?: string; - PrivacyPolicy?: string; - flags?: number; - redirectURIs?: string[]; - tags?: string[]; -} -export class DeveloperPortalApplication extends Base { - private constructor(client: Client, data: object); + public approximateGuildCount: number | null; public botPublic: boolean | null; public botRequireCodeGrant: boolean | null; public commands: ApplicationCommandManager; public cover: string | null; public flags: Readonly; + public guildId: Snowflake | null; + public readonly guild: Guild | null; public tags: string[]; public installParams: ClientApplicationInstallParams | null; public customInstallURL: string | null; public owner: User | Team | null; public readonly partial: boolean; public rpcOrigins: string[]; - public readonly createdAt: Date; - public readonly createdTimestamp: number; - public description: string | null; - public icon: string | null; - public id: Snowflake; - public name: string | null; - public redirectURIs: string[]; - public interactionEndpointURL: string | null; - public publicKey: string; - public testers: Collection; - public TermsOfService: string | null; - public PrivacyPolicy: string | null; - public roleConnectionsVerificationURL: string | null; - public fetch(): Promise; + public fetch(): Promise; + public fetchRoleConnectionMetadataRecords(): Promise; public coverURL(options?: StaticImageURLOptions): string | null; /** @deprecated This method is deprecated as it is unsupported and will be removed in the next major version. */ public fetchAssets(): Promise; public iconURL(options?: StaticImageURLOptions): string | null; public toJSON(): unknown; public toString(): string | null; - public fetchTesters(): Promise; - public addTester(username: string, discriminator: string): Promise; - public deleteTester(user: UserResolvable): Promise; - public edit(data: ApplicationEditData): Promise; - public createBot(): Promise; - public resetClientSecret(MFACode?: number): Promise; - public resetBotToken(MFACode?: number): Promise; - public delete(MFACode?: number): Promise; - public addAsset(image: BufferResolvable | Base64Resolvable, name: string): Promise; - public deleteAsset(id: string): Promise; - public fetchRoleConnectionMetadataRecords(): Promise; - public editRoleConnectionMetadataRecords( - records: ApplicationRoleConnectionMetadataEditOptions[], - ): Promise; -} - -export class DeveloperPortalManager extends BaseManager { - constructor(client: Client); - public applications: Collection; - public teams: Collection; - public fetch(): Promise; - public createTeam(name: string): Promise; - public createApplication(name: string, teamId?: Team | Snowflake): Promise; - public deleteApplication(id: Snowflake, MFACode?: number): Promise; } export class ApplicationCommand extends Base { - private constructor(client: Client, data: RawApplicationCommandData); + private constructor(client: Client, data: RawApplicationCommandData, guild?: Guild, guildId?: Snowflake); public applicationId: Snowflake; public readonly createdAt: Date; public readonly createdTimestamp: number; /** @deprecated Use {@link defaultMemberPermissions} and {@link dmPermission} instead. */ public defaultPermission: boolean; + public defaultMemberPermissions: Readonly | null; public description: string; public descriptionLocalizations: LocalizationMap | null; public descriptionLocalized: string | null; - public readonly guild: Guild | null; + public dmPermission: boolean | null; + public guild: Guild | null; public guildId: Snowflake | null; public readonly manager: ApplicationCommandManager; public id: Snowflake; @@ -587,13 +441,6 @@ export class ApplicationCommand extends Base { private static transformOption(option: ApplicationCommandOptionData, received?: boolean): unknown; private static transformCommand(command: ApplicationCommandData): RESTPostAPIApplicationCommandsJSONBody; private static isAPICommandData(command: object): command is RESTPostAPIApplicationCommandsJSONBody; - // Add - public static sendSlashCommand( - message: Message, - subCommandArray?: string[], - options?: any[], - ): Promise; - public static sendContextMenu(message: Message): Promise; } export class ApplicationRoleConnectionMetadata { @@ -886,7 +733,6 @@ export class CategoryChannel extends GuildChannel { name: string, options: CategoryCreateChannelOptions & { type: T }, ): Promise; - /** @deprecated See [Self-serve Game Selling Deprecation](https://support-dev.discord.com/hc/en-us/articles/6309018858647) for more information */ public createChannel( name: string, @@ -918,30 +764,12 @@ export abstract class Channel extends Base { export type If = T extends true ? A : T extends false ? B : A | B; -export interface OAuth2AuthorizeOptions { - guild_id: Snowflake; - permissions?: PermissionResolvable; - authorize?: boolean; - code?: string; - webhook_channel_id?: Snowflake; -} - export class Client extends BaseClient { - public constructor(options?: ClientOptions); /* Bug report by Mavri#0001 [721347809667973141] */ + public constructor(options: ClientOptions); private actions: unknown; private presence: ClientPresence; private _eval(script: string): unknown; private _validateOptions(options: ClientOptions): void; - - public application: If; - // Added - public settings: ClientUserSettingManager; - public relationships: RelationshipManager; - public readonly callVoice?: VoiceConnection; - public voiceStates: VoiceStateManager; - public sessions: SessionManager; - public billing: BillingManager; - // End public channels: ChannelManager; public readonly emojis: BaseGuildEmojiManager; public guilds: GuildManager; @@ -956,36 +784,30 @@ export class Client extends BaseClient { public users: UserManager; public voice: ClientVoiceManager; public ws: WebSocketManager; - public password: string | null; - public readonly sessionId: string | null; + public notes: UserNoteManager; + public relationships: RelationshipManager; + public voiceStates: VoiceStateManager; + public presences: PresenceManager; public destroy(): void; - public logout(): Promise; public fetchGuildPreview(guild: GuildResolvable): Promise; public fetchInvite(invite: InviteResolvable, options?: ClientFetchInviteOptions): Promise; - public acceptInvite(invite: InviteResolvable): Promise; public fetchGuildTemplate(template: GuildTemplateResolvable): Promise; public fetchVoiceRegions(): Promise>; public fetchSticker(id: Snowflake): Promise; public fetchPremiumStickerPacks(): Promise>; public fetchWebhook(id: Snowflake, token?: string): Promise; public fetchGuildWidget(guild: GuildResolvable): Promise; - public redeemNitro(code: string, channel?: TextChannelResolvable, paymentSourceId?: Snowflake): object; - public generateInvite(options?: InviteGenerationOptions): string; + public sleep(timeout: number): Promise; public login(token?: string): Promise; - public normalLogin(username: string, password?: string, mfaCode?: string): Promise; - public switchUser(token: string): void; - public QRLogin(options?: DiscordAuthWebsocketOptions): DiscordAuthWebsocket; - public remoteAuth(url: string): Promise; - public createToken(): Promise; - public checkUpdate(): Promise; + public QRLogin(): Promise; + public logout(): Promise; public isReady(): this is Client; /** @deprecated Use {@link Sweepers#sweepMessages} instead */ public sweepMessages(lifetime?: number): number; - private customStatusAuto(client?: this): undefined; - public authorizeURL(url: string, options?: object): Promise; - public sleep(milliseconds: number): Promise | null; - private _clearCache(cache: Collection): void; public toJSON(): unknown; + public acceptInvite(invite: InviteResolvable): Promise; + public redeemNitro(nitro: string, channel?: TextChannelResolvable, paymentSourceId?: Snowflake): Promise; + public authorizeURL(url: string, options?: OAuth2AuthorizeOptions): Promise; public on(event: K, listener: (...args: ClientEvents[K]) => Awaitable): this; public on( @@ -1012,28 +834,12 @@ export class Client extends BaseClient { public removeAllListeners(event?: Exclude): this; } -export class ClientApplication extends Application { - private constructor(client: Client, data: RawClientApplicationData); - public approximateGuildCount: number | null; - public botPublic: boolean | null; - public popularCommands: Collection | undefined; - public botRequireCodeGrant: boolean | null; - public commands: ApplicationCommandManager; - public cover: string | null; - public flags: Readonly; - public guildId: Snowflake | null; - public readonly guild: Guild | null; - public tags: string[]; - public installParams: ClientApplicationInstallParams | null; - public customInstallURL: string | null; - public owner: User | Team | null; - public readonly partial: boolean; - public rpcOrigins: string[]; - public fetch(): Promise; - public fetchRoleConnectionMetadataRecords(): Promise; - public editRoleConnectionMetadataRecords( - records: ApplicationRoleConnectionMetadataEditOptions[], - ): Promise; +export interface OAuth2AuthorizeOptions { + guild_id?: Snowflake; + permissions?: PermissionResolvable; + authorize?: boolean; + code?: string; + webhook_channel_id?: Snowflake; } export class ClientPresence extends Presence { @@ -1047,57 +853,36 @@ export class ClientUser extends User { public mfaEnabled: boolean; public readonly presence: ClientPresence; public verified: boolean; - public notes: Collection; - public friendNicknames: Collection; - public purchasedFlags: PurchasedFlags; - public premiumUsageFlags: PremiumUsageFlags; - public setThemeColors(primary?: ColorResolvable, accent?: ColorResolvable): ClientUser; public edit(data: ClientUserEditData): Promise; - public setActivity(options?: ActivitiesOptions): ClientPresence; + public setActivity(options?: ActivityOptions): ClientPresence; public setActivity(name: string, options?: Omit): ClientPresence; public setAFK(afk?: boolean, shardId?: number | number[]): ClientPresence; public setAvatar(avatar: BufferResolvable | Base64Resolvable | null): Promise; - public setBanner(banner: BufferResolvable | Base64Resolvable | null): Promise; public setPresence(data: PresenceData): ClientPresence; public setStatus(status: PresenceStatusData, shardId?: number | number[]): ClientPresence; - public setUsername(username: string, password: string): Promise; - public setHypeSquad(type: HypeSquadType): Promise; + public setUsername(username: string): Promise; + public purchasedFlags: PurchasedFlags; + public premiumUsageFlags: PremiumUsageFlags; + public phone: string | null; + public nsfwAllowed?: boolean; + public email: string | null; + public bio?: string; + public pronouns?: string; + public premiumType: number; + public setBanner(banner: BufferResolvable | Base64Resolvable | null): Promise; + public setHypeSquad(hypesquad: 0 | 1 | 2 | 3 | 'LEAVE' | 'HOUSE_BRAVERY' | 'HOUSE_BRILLIANCE' | 'HOUSE_BALANCE'): Promise; public setAccentColor(color: ColorResolvable): Promise; - public setDiscriminator(discriminator: string, password: string): Promise; public setAboutMe(bio: string | null): Promise; - public setEmail(email: string, password: string): Promise; - public setPassword(oldPassword: string, newPassword: string): Promise; - public disableAccount(password: string): Promise; - public deleteAccount(password: string): Promise; - public setDeaf(status: boolean): Promise; - public setMute(status: boolean): Promise; public createFriendInvite(): Promise; public getAllFriendInvites(): Promise>; - public revokeAllFriendInvites(): Promise>; - public setSamsungActivity(packageName: string, type?: 'START' | 'UPDATE' | 'STOP'): Promise; - public getMentions( - limit?: number, - mentionRoles?: boolean, - mentionEveryone?: boolean, - ): Promise>; - /** - * Nitro Status - * `0`: None - * `1`: Classic - * `2`: Boost - * @external https://discord.com/developers/docs/resources/user#user-object-premium-types - */ - public readonly nitroType: NitroType; - public readonly phoneNumber: string; - public readonly nsfwAllowed: boolean; - public readonly emailAddress: string; + public revokeAllFriendInvites(): Promise; + public setSamsungActivity(packageName: string, type: 'START' | 'UPDATE' | 'STOP'): Promise; public stopRinging(channel: ChannelResolvable): Promise; - public setGlobalName(globalName?: string): Promise; - public setPronouns(pronouns?: string): Promise; + public fetchBurstCredit(): Promise; + public setPronouns(pronouns?: string | null): Promise; + public setGlobalName(globalName?: string | null): Promise; } -type NitroType = 'NONE' | 'NITRO_CLASSIC' | 'NITRO_BOOST' | 'NITRO_BASIC'; - export class Options extends null { private constructor(); public static defaultMakeCacheSettings: CacheWithLimitsOptions; @@ -1121,6 +906,12 @@ export interface CollectorEventTypes { end: [collected: Collection, reason: string]; } +export type ChannelFlagsString = 'PINNED' | 'REQUIRE_TAG'; +export class ChannelFlags extends BitField { + public static FLAGS: Record; + public static resolve(bit?: BitFieldResolvable): number; +} + export abstract class Collector extends EventEmitter { protected constructor(client: Client, options?: CollectorOptions<[V, ...F]>); private _timeout: NodeJS.Timeout | null; @@ -1306,27 +1097,28 @@ export class DataResolver extends null { public static resolveGuildTemplateCode(data: GuildTemplateResolvable): string; } -export interface Captcha { - captcha_key: string[]; - captcha_service: string; - captcha_sitekey: string; - captcha_rqdata?: string; - captcha_rqtoken?: string; -} export class DiscordAPIError extends Error { private constructor(error: unknown, status: number, request: unknown); private static flattenErrors(obj: unknown, key: string): string[]; - public captcha?: Captcha; + public code: number; public method: string; public path: string; public httpStatus: number; public requestData: HTTPErrorData; public retries: number; + public captcha: Captcha | null; +} + +export interface Captcha { + captcha_key: string[]; + captcha_sitekey: string; + captcha_service: 'hcaptcha'; + captcha_rqdata?: string; + captcha_rqtoken?: string; } export class DMChannel extends TextBasedChannelMixin(Channel, [ - 'bulkDelete', 'fetchWebhooks', 'createWebhook', 'setRateLimitPerUser', @@ -1336,20 +1128,16 @@ export class DMChannel extends TextBasedChannelMixin(Channel, [ public recipient: User; public type: 'DM'; public flags: Readonly; + public messageRequest?: boolean; + public messageRequestTimestamp?: number; public fetch(force?: boolean): Promise; + public acceptMessageRequest(): Promise; + public cancelMessageRequest(): Promise; + public sync(): void; + public ring(): Promise; public readonly voiceAdapterCreator: InternalDiscordGatewayAdapterCreator; - public call(options?: CallOptions): Promise; - public ring(): Promise; - public sync(): undefined; public readonly shard: WebSocketShard; public readonly voiceUsers: Collection; - public readonly voiceConnection?: VoiceConnection; -} - -export interface CallOptions { - selfDeaf?: boolean; - selfMute?: boolean; - ring?: boolean; } export class Emoji extends Base { @@ -1373,17 +1161,18 @@ export class Guild extends AnonymousGuild { private _sortedChannels(channel: NonThreadGuildBasedChannel): Collection; public readonly afkChannel: VoiceChannel | null; - public topEmojis(): Promise>; public afkChannelId: Snowflake | null; public afkTimeout: number; public applicationId: Snowflake | null; + public maxVideoChannelUsers: number | null; + public maxStageVideoChannelUsers: number | null; public approximateMemberCount: number | null; public approximatePresenceCount: number | null; public autoModerationRules: AutoModerationRuleManager; public available: boolean; public bans: GuildBanManager; public channels: GuildChannelManager; - // public commands: GuildApplicationCommandManager; + public commands: GuildApplicationCommandManager; public defaultMessageNotifications: DefaultMessageNotificationLevel | number; /** @deprecated This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091 */ public deleted: boolean; @@ -1396,8 +1185,6 @@ export class Guild extends AnonymousGuild { public large: boolean; public maximumMembers: number | null; public maximumPresences: number | null; - public maxStageVideoChannelUsers: number | null; - public maxVideoChannelUsers: number | null; /** @deprecated Use {@link GuildMemberManager.me} instead. */ public readonly me: GuildMember | null; public memberCount: number; @@ -1405,11 +1192,9 @@ export class Guild extends AnonymousGuild { public mfaLevel: MFALevel; public ownerId: Snowflake; public preferredLocale: string; - public premiumSubscriptionCount: number | null; public premiumProgressBarEnabled: boolean; public premiumTier: PremiumTier; public presences: PresenceManager; - public readonly disableDM: boolean; public readonly publicUpdatesChannel: TextChannel | null; public publicUpdatesChannelId: Snowflake | null; public roles: RoleManager; @@ -1433,8 +1218,7 @@ export class Guild extends AnonymousGuild { public widgetEnabled: boolean | null; public readonly maximumBitrate: number; public createTemplate(name: string, description?: string): Promise; - public delete(mfaCode?: string): Promise; - public read(): Promise; + public delete(): Promise; public discoverySplashURL(options?: StaticImageURLOptions): string | null; public edit(data: GuildEditData, reason?: string): Promise; public editWelcomeScreen(data: WelcomeScreenEditData): Promise; @@ -1442,7 +1226,6 @@ export class Guild extends AnonymousGuild { public fetchAuditLogs( options?: GuildAuditLogsFetchOptions, ): Promise>; - public mute(mute: boolean, time: number | null): boolean; public fetchIntegrations(): Promise>; public fetchOwner(options?: BaseFetchOptions): Promise; public fetchPreview(): Promise; @@ -1452,8 +1235,8 @@ export class Guild extends AnonymousGuild { public fetchWelcomeScreen(): Promise; public fetchWidget(): Promise; public fetchWidgetSettings(): Promise; - public disableInvites(disabled?: boolean): Promise; public leave(): Promise; + public disableInvites(disabled?: boolean): Promise; public setAFKChannel(afkChannel: VoiceChannelResolvable | null, reason?: string): Promise; public setAFKTimeout(afkTimeout: number, reason?: string): Promise; public setBanner(banner: BufferResolvable | Base64Resolvable | null, reason?: string): Promise; @@ -1474,8 +1257,7 @@ export class Guild extends AnonymousGuild { public setIcon(icon: BufferResolvable | Base64Resolvable | null, reason?: string): Promise; public setName(name: string, reason?: string): Promise; public setOwner(owner: GuildMemberResolvable, reason?: string): Promise; - public setPosition(position: number, type: 'FOLDER' | 'HOME', folderID?: number): Promise; - public setPreferredLocale(preferredLocale: string, reason?: string): Promise; + public setPreferredLocale(preferredLocale: string | null, reason?: string): Promise; public setPublicUpdatesChannel(publicUpdatesChannel: TextChannelResolvable | null, reason?: string): Promise; /** @deprecated Use {@link RoleManager.setPositions} instead */ public setRolePositions(rolePositions: readonly RolePosition[]): Promise; @@ -1486,15 +1268,12 @@ export class Guild extends AnonymousGuild { public setSystemChannelFlags(systemChannelFlags: SystemChannelFlagsResolvable, reason?: string): Promise; public setVerificationLevel(verificationLevel: VerificationLevel | number | null, reason?: string): Promise; public setPremiumProgressBarEnabled(enabled?: boolean, reason?: string): Promise; - public setCommunity( - stats: boolean, - publicUpdatesChannel: TextChannelResolvable, - rulesChannel: TextChannelResolvable, - reason?: string, - ): Promise; public setWidgetSettings(settings: GuildWidgetSettingsData, reason?: string): Promise; - public setVanityCode(code?: string): Promise; public toJSON(): unknown; + public markAsRead(): Promise; + public setCommunity(stats: Boolean, publicUpdatesChannel?: GuildTextChannelResolvable, rulesChannel?: GuildTextChannelResolvable, reason?: string): Promise; + public topEmojis(): Promise>; + public setVanityCode(code?: string): Promise; } export class GuildAuditLogs { @@ -1517,16 +1296,16 @@ export class GuildAuditLogs { export class GuildAuditLogsEntry< TActionRaw extends GuildAuditLogsResolvable = 'ALL', TAction = TActionRaw extends keyof GuildAuditLogsIds - ? GuildAuditLogsIds[TActionRaw] - : TActionRaw extends null - ? 'ALL' - : TActionRaw, + ? GuildAuditLogsIds[TActionRaw] + : TActionRaw extends null + ? 'ALL' + : TActionRaw, TActionType extends GuildAuditLogsActionType = TAction extends keyof GuildAuditLogsTypes - ? GuildAuditLogsTypes[TAction][1] - : 'ALL', + ? GuildAuditLogsTypes[TAction][1] + : 'ALL', TTargetType extends GuildAuditLogsTarget = TAction extends keyof GuildAuditLogsTypes - ? GuildAuditLogsTypes[TAction][0] - : 'UNKNOWN', + ? GuildAuditLogsTypes[TAction][0] + : 'UNKNOWN', > { private constructor(guild: Guild, data: RawGuildAuditLogEntryData, logs?: GuildAuditLogs); public action: TAction; @@ -1545,8 +1324,6 @@ export class GuildAuditLogsEntry< : Role | GuildEmoji | { id: Snowflake } | null; public targetType: TTargetType; public toJSON(): unknown; - public addIntegration(applicationId: Snowflake): Promise; - public addBot(bot: UserResolvable | Snowflake, permissions?: PermissionResolvable): Promise; } export class GuildBan extends Base { @@ -1562,7 +1339,6 @@ export abstract class GuildChannel extends Channel { public constructor(guild: Guild, data?: RawGuildChannelData, client?: Client, immediatePatch?: boolean); private memberPermissions(member: GuildMember, checkAdmin: boolean): Readonly; private rolePermissions(role: Role, checkAdmin: boolean): Readonly; - public readonly createdAt: Date; public readonly createdTimestamp: number; public readonly calculatedPosition: number; @@ -1613,14 +1389,6 @@ export class GuildEmoji extends BaseGuildEmoji { public setName(name: string, reason?: string): Promise; } -export interface UserBadge { - name: string; - description: string; - icon: string; - link?: string; - iconURL(): string; -} - export class GuildMember extends PartialTextBasedChannel(Base) { private constructor(client: Client, data: RawGuildMemberData, guild: Guild); private _roles: Snowflake[]; @@ -1651,9 +1419,6 @@ export class GuildMember extends PartialTextBasedChannel(Base) { public readonly roles: GuildMemberRoleManager; public user: User; public readonly voice: VoiceState; - public themeColors?: [number, number]; - public readonly hexThemeColor: [string, string] | null; - public badges: UserBadge[] | null; public avatarURL(options?: ImageURLOptions): string | null; public ban(options?: BanOptions): Promise; public disableCommunicationUntil(timeout: DateResolvable | null, reason?: string): Promise; @@ -1671,14 +1436,12 @@ export class GuildMember extends PartialTextBasedChannel(Base) { public permissionsIn(channel: GuildChannelResolvable): Readonly; public setNickname(nickname: string | null, reason?: string): Promise; public setFlags(flags: GuildMemberFlagsResolvable): Promise; - public setAvatar(avatar: BufferResolvable | Base64Resolvable | null): Promise; - public setBanner(banner: BufferResolvable | Base64Resolvable | null): Promise; - public setAboutMe(bio: string | null): Promise; - public getProfile(): Promise; public toJSON(): unknown; public toString(): MemberMention; public valueOf(): string; - public setThemeColors(primary?: ColorResolvable, accent?: ColorResolvable): GuildMember; + public setAvatar(avatar: BufferResolvable | Base64Resolvable | null): Promise; + public setBanner(banner: BufferResolvable | Base64Resolvable | null): Promise; + public setAboutMe(bio: string | null): Promise; } export class GuildMemberFlags extends BitField { @@ -1732,6 +1495,7 @@ export class GuildScheduledEvent; @@ -1798,7 +1562,7 @@ export class HTTPError extends Error { } // tslint:disable-next-line:no-empty-interface - Merge RateLimitData into RateLimitError to not have to type it again -export interface RateLimitError extends RateLimitData {} +export interface RateLimitError extends RateLimitData { } export class RateLimitError extends Error { private constructor(data: RateLimitData); public name: 'RateLimitError'; @@ -1842,6 +1606,7 @@ export class IntegrationApplication extends Application { export class Intents extends BitField { public static FLAGS: Record; public static resolve(bit?: BitFieldResolvable): number; + public static ALL: number; } export type CacheType = 'cached' | 'raw' | undefined; @@ -1899,14 +1664,7 @@ export class Interaction extends Base { public isMessageContextMenu(): this is MessageContextMenuInteraction; public isMessageComponent(): this is MessageComponentInteraction; public isModalSubmit(): this is ModalSubmitInteraction; - public isAnySelectMenu(): this is SelectMenuInteraction; - /** @deprecated Use {@link Interaction#isStringSelect()} instead */ - public isSelectMenu(): this is StringSelectInteraction; - public isStringSelect(): this is StringSelectInteraction; - public isUserSelect(): this is UserSelectInteraction; - public isMentionableSelect(): this is MentionableSelectInteraction; - public isRoleSelect(): this is RoleSelectInteraction; - public isChannelSelect(): this is ChannelSelectInteraction; + public isSelectMenu(): this is SelectMenuInteraction; public isRepliable(): this is this & InteractionResponseFields; } @@ -1946,7 +1704,7 @@ export class InteractionWebhook extends PartialWebhookMixin() { export class Invite extends Base { private constructor(client: Client, data: RawInviteData); - public channel: NonThreadGuildBasedChannel | PartialGroupDMChannel; + public channel: NonThreadGuildBasedChannel | GroupDMChannel; public channelId: Snowflake; public code: string; public readonly deletable: boolean; @@ -1970,7 +1728,6 @@ export class Invite extends Base { public delete(reason?: string): Promise; public toJSON(): unknown; public toString(): string; - public acceptInvite(autoVerify?: boolean): Promise; public static INVITES_PATTERN: RegExp; public stageInstance: InviteStageInstance | null; public guildScheduledEvent: GuildScheduledEvent | null; @@ -2023,14 +1780,13 @@ export type MessageChannelCollectorOptionsParams< export type AwaitMessageCollectorOptionsParams< T extends MessageComponentTypeResolvable, Cached extends boolean = boolean, -> = { - componentType?: T; -} & Pick[T]>, keyof AwaitMessageComponentOptions>; +> = { componentType?: T } & Pick< + InteractionCollectorOptions[T]>, + keyof AwaitMessageComponentOptions +>; export interface StringMappedInteractionTypes { BUTTON: ButtonInteraction; - /** @deprecated */ - SELECT_MENU: SelectMenuInteraction; STRING_SELECT: SelectMenuInteraction; USER_SELECT: SelectMenuInteraction; ROLE_SELECT: SelectMenuInteraction; @@ -2045,8 +1801,6 @@ export type MappedInteractionTypes = EnumValue typeof MessageComponentTypes, { BUTTON: ButtonInteraction>; - /** @deprecated */ - SELECT_MENU: StringSelectInteraction>; STRING_SELECT: StringSelectInteraction>; USER_SELECT: UserSelectInteraction>; ROLE_SELECT: RoleSelectInteraction>; @@ -2066,7 +1820,7 @@ export class Message extends Base { public applicationId: Snowflake | null; public attachments: Collection; public author: User; - public readonly bulkDeletable: boolean; + public get bulkDeletable(): boolean; public readonly channel: If; public channelId: Snowflake; public readonly cleanContent: string; @@ -2082,7 +1836,7 @@ export class Message extends Base { public readonly editedAt: Date | null; public editedTimestamp: number | null; public embeds: MessageEmbed[]; - public groupActivityApplication: ClientApplication | null; + public groupActivityApplication: Application | null; public guildId: If; public readonly guild: If; public readonly hasThread: boolean; @@ -2105,14 +1859,8 @@ export class Message extends Base { public flags: Readonly; public reference: MessageReference | null; public position: number | null; - public awaitMessageComponent( - options?: AwaitMessageCollectorOptionsParams, - ): Promise[T]>; public awaitReactions(options?: AwaitReactionsOptions): Promise>; public createReactionCollector(options?: ReactionCollectorOptions): ReactionCollector; - public createMessageComponentCollector( - options?: MessageCollectorOptionsParams, - ): InteractionCollector[T]>; public delete(): Promise; public edit(content: string | MessageEditOptions | MessagePayload): Promise; public equals(message: Message, rawData: unknown): boolean; @@ -2131,22 +1879,31 @@ export class Message extends Base { public toString(): string; public unpin(reason?: string): Promise; public inGuild(): this is Message & this; - // Added - public markUnread(): Promise; - public markRead(): Promise; - public clickButton(button?: MessageButton | MessageButtonLocation | string): Promise; - public selectMenu(menuID: MessageSelectMenu | Snowflake | number, options: any[]): Promise; - public selectMenu(options: any[]): Promise; - public contextMenu(botID: Snowflake, commandName: string): Promise; + + public readonly isMessage: true; + public clickButton(button?: { X: number, Y: number } | string): Promise; + public selectMenu(menu: 0 | 1 | 2 | 3 | 4 | string, vales: Array): Promise; + public markUnread(): Promise; + public markRead(): Promise; +} + +export class CallState extends Base { + private constructor(client: Client, data: any); + public channelId: Snowflake; + public region: string; + public readonly channel?: DMChannel | GroupDMChannel; + public readonly ringing: Collection; + public setRTCRegion(): Promise; } export class MessageActionRow< T extends MessageActionRowComponent | ModalActionRowComponent = MessageActionRowComponent, U = T extends ModalActionRowComponent ? ModalActionRowComponentResolvable : MessageActionRowComponentResolvable, V = T extends ModalActionRowComponent - ? APIActionRowComponent - : APIActionRowComponent, + ? APIActionRowComponent + : APIActionRowComponent, > extends BaseMessageComponent { + // tslint:disable-next-line:ban-ts-ignore // @ts-ignore (TS:2344, Caused by TypeScript 4.8) // Fixed in DiscordJS >= 14.x / DiscordApiTypes >= 0.37.x, ignoring the type error here. public constructor(data?: MessageActionRow | MessageActionRowOptions | V); @@ -2183,11 +1940,6 @@ export class MessageAttachment { public toJSON(): unknown; } -export interface InteractionResponseBody { - id: Snowflake; - nonce: Snowflake; -} - export class AttachmentFlags extends BitField { public static FLAGS: Record; public static resolve(bit?: BitFieldResolvable): number; @@ -2211,7 +1963,6 @@ export class MessageButton extends BaseMessageComponent { public setStyle(style: MessageButtonStyleResolvable): this; public setURL(url: string): this; public toJSON(): APIButtonComponent; - public click(message: Message): Promise; private static resolveStyle(style: MessageButtonStyleResolvable): MessageButtonStyle; } @@ -2324,6 +2075,22 @@ export class MessageEmbed { public static normalizeFields(...fields: EmbedFieldData[] | EmbedFieldData[][]): Required[]; } +export interface WebEmbedOptions { + title?: string; + description?: string; + url?: string; + timestamp?: Date | number; + color?: ColorResolvable; + fields?: EmbedFieldData[]; + author?: Partial & { icon_url?: string; proxy_icon_url?: string }; + thumbnail?: Partial & { proxy_url?: string }; + image?: Partial & { proxy_url?: string }; + video?: Partial & { proxy_url?: string }; + footer?: Partial & { icon_url?: string; proxy_icon_url?: string }; + imageType?: 'thumbnail' | 'image'; + redirect?: string; +} + export class WebEmbed { public constructor(data?: WebEmbedOptions); public author: MessageEmbedAuthor | null; @@ -2335,8 +2102,6 @@ export class WebEmbed { public title: string | null; public url: string | null; public video: MessageEmbedVideo | null; - public hidden: boolean; - public shorten: boolean; public imageType: 'thumbnail' | 'image'; public redirect?: string; public setAuthor(options: EmbedAuthorData | null): this; @@ -2348,8 +2113,33 @@ export class WebEmbed { public setTitle(title: string): this; public setURL(url: string): this; public setProvider(options: MessageEmbedProvider | null): this; + public setRedirect(url: string): this; public toString(): string; - public toMessage(): Promise; + public static hiddenEmbed: string; +} + +export class BillingManager extends BaseManager { + constructor(client: Client); + public paymentSources: Collection; + public fetchPaymentSources(): Promise>; + public guildBoosts: Collection; + public fetchGuildBoosts(): Promise>; + public currentSubscription: Collection; + public fetchCurrentSubscription(): Promise>; +} + +export class GuildBoost extends Base { + constructor(client: Client, data: object); + public id: Snowflake; + public guildId?: Snowflake; + public readonly guild: Guild | null; + public subscriptionId: Snowflake; + public premiumGuildSubscriptionId?: Snowflake; + public ended?: boolean; + public canceled: boolean; + public cooldownEndsAt: Date; + public unsubscribe(): Promise; + public subscribe(guild: GuildResolvable): Promise; } export class MessageFlags extends BitField { @@ -2369,6 +2159,7 @@ export class MessageMentions { private readonly _content: string; private _members: Collection | null; private _parsedUsers: Collection | null; + public readonly channels: Collection; public readonly client: Client; public everyone: boolean; @@ -2391,7 +2182,6 @@ export class MessageMentions { export class MessagePayload { public constructor(target: MessageTarget, options: MessageOptions | WebhookMessageOptions); public data: RawMessagePayloadData | null; - public readonly usingNewAttachmentAPI: boolean; public readonly isUser: boolean; public readonly isWebhook: boolean; public readonly isMessage: boolean; @@ -2419,14 +2209,14 @@ export class MessageReaction { private constructor(client: Client, data: RawMessageReactionData, message: Message); private _emoji: GuildEmoji | ReactionEmoji; - public readonly client: Client; + public burstColors: string[]; + public readonly client: Client; public count: number; public burstCount: number; - public burstColors: string[]; + public countDetails: ReactionCountDetailsData; public isBurst: boolean; public readonly emoji: GuildEmoji | ReactionEmoji; public me: boolean; - public countDetails: ReactionCountDetailsData; public message: Message | PartialMessage; public readonly partial: false; public users: ReactionUserManager; @@ -2450,23 +2240,19 @@ export class MessageSelectMenu extends BaseMessageComponent { public options: MessageSelectOption[]; public placeholder: string | null; public type: SelectMenuComponentType; - public addChannelTypes(...channelTypes: ChannelTypes[]): this; public addOptions(...options: MessageSelectOptionData[] | MessageSelectOptionData[][]): this; public setOptions(...options: MessageSelectOptionData[] | MessageSelectOptionData[][]): this; - public setChannelTypes(...channelTypes: ChannelTypes[]): this; public setCustomId(customId: string): this; public setDisabled(disabled?: boolean): this; public setMaxValues(maxValues: number): this; public setMinValues(minValues: number): this; public setPlaceholder(placeholder: string): this; - public setType(type: SelectMenuComponentType | SelectMenuComponentTypes): this; public spliceOptions( index: number, deleteCount: number, ...options: MessageSelectOptionData[] | MessageSelectOptionData[][] ): this; public toJSON(): APISelectMenuComponent; - public select(message: Message, values?: any[]): Promise; } export class Modal { @@ -2474,45 +2260,13 @@ export class Modal { public components: MessageActionRow[]; public customId: string | null; public title: string | null; - public application: object | null; - public client: Client | null; - public nonce: Snowflake | null; - public readonly sendFromInteraction: InteractionResponse | null; - public addComponents( - ...components: ( - | MessageActionRow - | (Required & MessageActionRowOptions) - )[] - ): this; - public setComponents( - ...components: ( - | MessageActionRow - | (Required & MessageActionRowOptions) - )[] - ): this; - public setCustomId(customId: string): this; - public spliceComponents( - index: number, - deleteCount: number, - ...components: ( - | MessageActionRow - | (Required & MessageActionRowOptions) - )[] - ): this; - public setTitle(title: string): this; + public readonly isMessage: false; + public readonly guildId: Snowflake | null; + public channelId: Snowflake; + public readonly channel: TextBasedChannel; + public readonly guild: Guild | null; + public reply(): Promise; public toJSON(): RawModalSubmitInteractionData; - public reply(data: ModalReplyData): Promise; -} - -export interface ModalReplyData { - guild?: GuildResolvable; - channel?: TextChannelResolvable; - data?: TextInputComponentReplyData[]; -} - -export interface TextInputComponentReplyData { - customId: string; - value: string; } export class ModalSubmitFieldsResolver { @@ -2575,46 +2329,37 @@ export class OAuth2Guild extends BaseGuild { public permissions: Readonly; } -export class PartialGroupDMChannel extends TextBasedChannelMixin(Channel, [ - 'bulkDelete', +export class GroupDMChannel extends TextBasedChannelMixin(Channel, [ 'fetchWebhooks', 'createWebhook', 'setRateLimitPerUser', 'setNSFW', ]) { private constructor(client: Client, data: RawPartialGroupDMChannelData); - public type: 'GROUP_DM'; public name: string | null; public icon: string | null; + public flags: Readonly; + private _recipients: RawUserData[]; + public type: 'GROUP_DM'; + public ownerId: Snowflake; public readonly recipients: Collection; - public messages: MessageManager; - public invites: Collection; - public lastMessageId: Snowflake | null; - public lastPinTimestamp: number | null; - public owner: User | null; - public ownerId: Snowflake | null; - public flags: null; - public messageRequest: boolean | undefined; - public messageRequestTimestamp: Date | undefined; - public acceptMessageRequest(): Promise; - public cancelMessageRequest(): Promise; + public readonly owner: User; public iconURL(options?: StaticImageURLOptions): string | null; - public addMember(user: User): Promise; - public removeMember(user: User): Promise; - public setName(name: string): Promise; - public setIcon(icon: Base64Resolvable | null): Promise; + public leave(slient?: boolean): Promise; + public edit(data: GroupDMChannelEditData): Promise; + public setIcon(icon: BufferResolvable | Base64Resolvable | null): Promise; + public setName(name: string): Promise; + public setOwner(owner: UserResolvable): Promise; + public addUser(user: UserResolvable): Promise; + public removeUser(user: UserResolvable): Promise; public getInvite(): Promise; - public fetchInvite(force: boolean): Promise; - public removeInvite(invite: Invite): Promise; - public delete(slient?: boolean): Promise; - public setOwner(user: UserResolvable): Promise; + public fetchAllInvite(): Promise>; + public deleteInvite(invite: InviteResolvable): Promise; + public sync(): void; + public ring(recipients?: UserResolvable[]): Promise; public readonly voiceAdapterCreator: InternalDiscordGatewayAdapterCreator; - public call(options?: CallOptions): Promise; - public ring(recipients: UserResolvable[]): Promise; - public sync(): undefined; public readonly shard: WebSocketShard; public readonly voiceUsers: Collection; - public readonly voiceConnection?: VoiceConnection; } export class PermissionOverwrites extends Base { @@ -2650,8 +2395,9 @@ export class Permissions extends BitField { export class Presence extends Base { protected constructor(client: Client, data?: RawPresenceData); - public activities: Activity[]; + public activities: (Activity | CustomStatus | RichPresence | SpotifyRPC)[]; public clientStatus: ClientPresenceStatusData | null; + public lastModified: number | null; public guild: Guild | null; public readonly member: GuildMember | null; public status: PresenceStatus; @@ -2850,6 +2596,7 @@ export interface ShardEventTypes { error: [error: Error]; message: [message: any]; } + export class Shard extends EventEmitter { private constructor(manager: ShardingManager, id: number); private _evals: Map>; @@ -2953,6 +2700,11 @@ export class ShardingManager extends EventEmitter { public once(event: 'shardCreate', listener: (shard: Shard) => Awaitable): this; } +export interface FetchRecommendedShardsOptions { + guildsPerShard?: number; + multipleOf?: number; +} + export class SnowflakeUtil extends null { private constructor(); public static deconstruct(snowflake: Snowflake): DeconstructedSnowflake; @@ -3128,9 +2880,6 @@ export class Team extends Base { public readonly createdTimestamp: number; public iconURL(options?: StaticImageURLOptions): string | null; - public inviteMemeber(user: User, MFACode: number): Promise; - public removeMemeber(userID: Snowflake): boolean; - public delete(MFACode: string): Promise; public toJSON(): unknown; public toString(): string; } @@ -3152,6 +2901,58 @@ export class TextChannel extends BaseGuildTextChannel { public type: 'GUILD_TEXT'; } +export interface GuildForumTagEmoji { + id: Snowflake | null; + name: string | null; +} + +export interface GuildForumTag { + id: Snowflake; + name: string; + moderated: boolean; + emoji: GuildForumTagEmoji | null; +} + +export type GuildForumTagData = Partial & { name: string }; + +export interface DefaultReactionEmoji { + id: Snowflake | null; + name: string | null; +} + +export class ForumChannel extends TextBasedChannelMixin(GuildChannel, [ + 'send', + 'lastMessage', + 'lastPinAt', + 'sendTyping', + 'createMessageCollector', + 'awaitMessages', +]) { + public type: 'GUILD_FORUM'; + public threads: GuildForumThreadManager; + public availableTags: GuildForumTag[]; + public defaultReactionEmoji: DefaultReactionEmoji | null; + public defaultThreadRateLimitPerUser: number | null; + public rateLimitPerUser: number | null; + public defaultAutoArchiveDuration: ThreadAutoArchiveDuration | null; + public nsfw: boolean; + public topic: string | null; + public defaultSortOrder: SortOrderType | null; + public defaultForumLayout: ForumLayoutType; + public setAvailableTags(tags: GuildForumTagData[], reason?: string): Promise; + public setDefaultReactionEmoji(emojiId: DefaultReactionEmoji | null, reason?: string): Promise; + public setDefaultThreadRateLimitPerUser(rateLimit: number, reason?: string): Promise; + public createInvite(options?: CreateInviteOptions): Promise; + public fetchInvites(cache?: boolean): Promise>; + public setDefaultAutoArchiveDuration( + defaultAutoArchiveDuration: ThreadAutoArchiveDuration, + reason?: string, + ): Promise; + public setTopic(topic: string | null, reason?: string): Promise; + public setDefaultSortOrder(defaultSortOrder: SortOrderType | null, reason?: string): Promise; + public setDefaultForumLayout(defaultForumLayout: ForumLayoutType, reason?: string): Promise; +} + export class TextInputComponent extends BaseMessageComponent { public constructor(data?: TextInputComponent | TextInputComponentOptions); public customId: string | null; @@ -3162,13 +2963,6 @@ export class TextInputComponent extends BaseMessageComponent { public placeholder: string | null; public style: TextInputStyle; public value: string | null; - public setCustomId(customId: string): this; - public setLabel(label: string): this; - public setRequired(required?: boolean): this; - public setMaxLength(maxLength: number): this; - public setMinLength(minLength: number): this; - public setPlaceholder(placeholder: string): this; - public setStyle(style: TextInputStyleResolvable): this; public setValue(value: string): this; public toJSON(): RawTextInputComponentData; public static resolveStyle(style: TextInputStyleResolvable): TextInputStyle; @@ -3177,7 +2971,6 @@ export class TextInputComponent extends BaseMessageComponent { export class ThreadChannel extends TextBasedChannelMixin(Channel, ['fetchWebhooks', 'createWebhook', 'setNSFW']) { private constructor(guild: Guild, data?: RawThreadChannelData, client?: Client); public archived: boolean | null; - public readonly firstMessage: Message | null; public readonly archivedAt: Date | null; public archiveTimestamp: number | null; public readonly createdAt: Date | null; @@ -3273,15 +3066,15 @@ export class Typing extends Base { export class User extends PartialTextBasedChannel(Base) { protected constructor(client: Client, data: RawUserData); private _equals(user: APIUser): boolean; - public application: ClientApplication; + public accentColor: number | null | undefined; public avatar: string | null; public avatarDecoration: string | null; + public avatarDecorationSKUId: Snowflake | null; public banner: string | null | undefined; + public bannerColor: string | null | undefined; public bot: boolean; - public pronouns: string | null; public readonly createdAt: Date; - public readonly relationships: RelationshipTypes; public readonly createdTimestamp: number; public discriminator: string; public readonly displayName: string; @@ -3289,22 +3082,16 @@ export class User extends PartialTextBasedChannel(Base) { public readonly dmChannel: DMChannel | null; public flags: Readonly | null; public globalName: string | null; - public botInGuildsCount: number | null | undefined; public readonly hexAccentColor: HexColorString | null | undefined; public id: Snowflake; public readonly partial: false; public system: boolean; public readonly tag: string; public username: string; - public readonly note: string | null; - public readonly nickname: string | null; - public connectedAccounts: object[]; - public premiumSince: Date; - public premiumGuildSince: Date; - public bio: string | null; - public readonly mutualGuilds: Collection; - public readonly mutualFriends: Promise>; - public readonly voice: VoiceState; + public readonly note: string | undefined; + public readonly voice?: VoiceState; + public readonly relationship: RelationshipTypes; + public readonly friendNickname: string | null | undefined; public avatarURL(options?: ImageURLOptions): string | null; public avatarDecorationURL(options?: StaticImageURLOptions): string | null; public bannerURL(options?: ImageURLOptions): string | null; @@ -3314,19 +3101,12 @@ export class User extends PartialTextBasedChannel(Base) { public equals(user: User): boolean; public fetch(force?: boolean): Promise; public fetchFlags(force?: boolean): Promise; - public setFriend(): Promise; - public setBlock(): Promise; - public sendFriendRequest(): Promise; - public unFriend(): Promise; - public unBlock(): Promise; - public setNote(note?: any): Promise; - public getProfile(guildId?: Snowflake): Promise; - public setNickname(nickname: string | null): Promise; + public setNote(note: string | null | undefined): Promise; public toString(): UserMention; - /** @deprecated This method is deprecated as it is unsupported and will be removed in the next major version. */ - public ring(): Promise; - public themeColors?: [number, number]; - public readonly hexThemeColor: [string, string] | null; + public getProfile(guildId?: Snowflake): Promise; + public ring(): Promise; + public sendFriendRequest(): Promise; + public deleteRelationship(): Promise; } export class UserContextMenuInteraction extends ContextMenuInteraction { @@ -3369,6 +3149,7 @@ export class Util extends null { public static escapeNumberedList(text: string): string; public static escapeMaskedLink(text: string): string; public static cleanCodeBlockContent(text: string): string; + public static fetchRecommendedShards(token: string, options?: FetchRecommendedShardsOptions): Promise; public static flatten(obj: unknown, ...props: Record[]): unknown; public static makeError(obj: MakeErrorOptions): Error; public static makePlainError(err: Error): MakeErrorOptions; @@ -3397,7 +3178,21 @@ export class Formatters extends null { public static blockQuote: typeof blockQuote; public static bold: typeof bold; public static channelMention: typeof channelMention; - public static chatInputApplicationCommandMention: typeof chatInputApplicationCommandMention; + public static chatInputApplicationCommandMention< + N extends string, + G extends string, + S extends string, + I extends Snowflake, + >(commandName: N, subcommandGroupName: G, subcommandName: S, commandId: I): ``; + public static chatInputApplicationCommandMention( + commandName: N, + subcommandName: S, + commandId: I, + ): ``; + public static chatInputApplicationCommandMention( + commandName: N, + commandId: I, + ): ``; public static codeBlock: typeof codeBlock; public static formatEmoji: typeof formatEmoji; public static hideLinkEmbed: typeof hideLinkEmbed; @@ -3436,12 +3231,13 @@ export class VoiceRegion { export class VoiceState extends Base { private constructor(guild: Guild, data: RawVoiceStateData); - public readonly channel: VoiceBasedChannel | null; + public readonly channel: VoiceBasedChannel | DMChannel | GroupDMChannel | null; public channelId: Snowflake | null; public readonly deaf: boolean | null; public guild: Guild; public id: Snowflake; public readonly member: GuildMember | null; + public readonly user: User | null; public readonly mute: boolean | null; public selfDeaf: boolean | null; public selfMute: boolean | null; @@ -3452,14 +3248,14 @@ export class VoiceState extends Base { public selfVideo: boolean | null; public suppress: boolean; public requestToSpeakTimestamp: number | null; - public readonly user: User | null; + public setDeaf(deaf?: boolean, reason?: string): Promise; public setMute(mute?: boolean, reason?: string): Promise; public disconnect(reason?: string): Promise; public setChannel(channel: GuildVoiceChannelResolvable | null, reason?: string): Promise; - public setStatus(status: string): Promise; public setRequestToSpeak(request?: boolean): Promise; public setSuppressed(suppressed?: boolean): Promise; + public setStatus(status?: string): Promise; public getPreview(): Promise; public postPreview(base64Image: string): Promise; } @@ -3543,8 +3339,8 @@ export class WebSocketShard extends EventEmitter { private constructor(manager: WebSocketManager, id: number); private sequence: number; private closeSequence: number; - private sessionId: string | null; private resumeURL: string | null; + private sessionId: string | null; private lastPingTimestamp: number; private lastHeartbeatAcked: boolean; private ratelimit: { queue: unknown[]; total: number; remaining: number; time: 60e3; timer: NodeJS.Timeout | null }; @@ -3687,6 +3483,7 @@ export const Constants: { size: AllowedImageSize, dynamic: boolean, ): string; + AvatarDecoration(userId: Snowflake, hash: string, format: AllowedImageFormat, size: AllowedImageSize): string; Banner(id: Snowflake, hash: string, format: DynamicImageFormat, size: AllowedImageSize, dynamic: boolean): string; DefaultAvatar(index: number): string; DiscoverySplash(guildId: Snowflake, hash: string, format: AllowedImageFormat, size: AllowedImageSize): string; @@ -3727,10 +3524,8 @@ export const Constants: { GuildScheduledEventPrivacyLevels: EnumHolder; GuildScheduledEventStatuses: EnumHolder; IntegrationExpireBehaviors: IntegrationExpireBehaviors[]; - InteractionResponseTypes: EnumHolder; - InteractionTypes: EnumHolder; - InviteScopes: InviteScope[]; - MaxBulkDeletableMessageAge: 1_209_600_000; + SelectMenuComponentTypes: EnumHolder; + RelationshipTypes: EnumHolder; MembershipStates: EnumHolder; MessageButtonStyles: EnumHolder; MessageComponentTypes: EnumHolder; @@ -3787,15 +3582,6 @@ export const Constants: { WSEvents: { [K in WSEventType]: K; }; - // Add - defaultUA: string; - captchaServices: captchaServices[]; - DMScanLevel: EnumHolder; - stickerAnimationMode: EnumHolder; - NitroType: EnumHolder; - HypeSquadType: EnumHolder; - localeSetting: EnumHolder; - userGateway: string; }; export const version: string; @@ -3837,8 +3623,7 @@ export class ApplicationCommandManager< PermissionsOptionsExtras = { guild: GuildResolvable }, PermissionsGuildType = null, > extends CachedManager { - // @ts-ignore - protected constructor(client: Client, iterable?: Iterable, user: User); + protected constructor(client: Client, iterable?: Iterable); public permissions: ApplicationCommandPermissionsManager< { command?: ApplicationCommandResolvable } & PermissionsOptionsExtras, { command: ApplicationCommandResolvable } & PermissionsOptionsExtras, @@ -3883,10 +3668,7 @@ export class ApplicationCommandPermissionsManager< GuildType, CommandIdType, > extends BaseManager { - private constructor( - manager: ApplicationCommandManager | GuildApplicationCommandManager | ApplicationCommand, - user: User, - ); + private constructor(manager: ApplicationCommandManager | GuildApplicationCommandManager | ApplicationCommand); private manager: ApplicationCommandManager | GuildApplicationCommandManager | ApplicationCommand; public client: Client; @@ -3902,13 +3684,13 @@ export class ApplicationCommandPermissionsManager< public remove( options: | (FetchSingleOptions & { - users: UserResolvable | UserResolvable[]; - roles?: RoleResolvable | RoleResolvable[]; - }) + users: UserResolvable | UserResolvable[]; + roles?: RoleResolvable | RoleResolvable[]; + }) | (FetchSingleOptions & { - users?: UserResolvable | UserResolvable[]; - roles: RoleResolvable | RoleResolvable[]; - }), + users?: UserResolvable | UserResolvable[]; + roles: RoleResolvable | RoleResolvable[]; + }), ): Promise; public set( options: FetchSingleOptions & { permissions: ApplicationCommandPermissionData[] }, @@ -3934,97 +3716,47 @@ export class BaseGuildEmojiManager extends CachedManager { private constructor(client: Client, iterable: Iterable); public fetch(id: Snowflake, options?: FetchChannelOptions): Promise; - public createGroupDM(recipients: UserResolvable[]): Promise; + public createGroupDM(recipients: UserResolvable[]): Promise; +} + +export class RelationshipManager extends BaseManager { + constructor( + client: Client, + data: { + user: RawUserData; + type: RelationshipTypes; + since?: string; + nickname: string | null | undefined; + id: Snowflake; + }[], + ); + public cache: Collection; + public friendNicknames: Collection; + public sinceCache: Collection; + public readonly friendCache: Collection; + public readonly blockedCache: Collection; + public readonly incomingCache: Collection; + public readonly outgoingCache: Collection; + public toJSON(): { type: RelationshipTypes; since: string; nickname: string | null | undefined; id: Snowflake }[]; + public resolveId(user: UserResolvable): Snowflake | undefined; + public fetch(user?: UserResolvable, options?: BaseFetchOptions): Promise; + public deleteRelationship(user: UserResolvable): Promise; + public sendFriendRequest(options: FriendRequestOptions): Promise; + public addFriend(user: UserResolvable): Promise; + public setNickname(user: UserResolvable, nickname: string | null | undefined): Promise; + public addBlocked(user: UserResolvable): Promise; +} + +export class UserNoteManager extends BaseManager { + constructor(client: Client, users: { [key: Snowflake]: string }[]); + public cache: Collection; + private _reload(data: { [key: Snowflake]: string }): this; + public updateNote(id: Snowflake, note: string | null | undefined): Promise; + public fetch(user: UserResolvable, options?: BaseFetchOptions): Promise; } export type FetchGuildApplicationCommandFetchOptions = Omit; -export class GuildFolderManager extends BaseManager { - private constructor(client: Client); - public cache: Collection; -} - -export interface RawGuildFolderData { - id: number | null; - name: string | null; - guild_ids: Snowflake[]; - color: number | null; -} -export class GuildFolder extends Base { - private constructor(client: Client, data: RawGuildFolderData); - public id: number | null; - public name: string | null; - public guild_ids: Snowflake[]; - public color: number | null; - public readonly hexColor: string | null; - public readonly guilds: Collection; - public toJSON(): RawGuildFolderData; -} - -export class ClientUserSettingManager extends BaseManager { - private constructor(client: Client); - public rawSetting: RawUserSettingsData | object; - public locale: localeSetting | null; - public activityDisplay: boolean | null; - public DMfromServerMode: boolean | null; - public displayImage: boolean | null; - public linkedImageDisplay: boolean | null; - public autoplayGIF: boolean | null; - public previewLink: boolean | null; - public animatedEmojis: boolean | null; - public allowTTS: boolean | null; - public compactMode: boolean | null; - public convertEmoticons: boolean | null; - public DMScanLevel: DMScanLevel; - public theme: 'dark' | 'light' | null; - public developerMode: boolean | null; - public afkTimeout: number | null; // second - public stickerAnimationMode: stickerAnimationMode; - public showEmojiReactions: boolean | null; - public customStatus: - | { - text?: string; - expires_at?: string | null; - emoji_name?: string; - emoji_id?: Snowflake | null; - status?: PresenceStatusData; - } - | object; - public addFriendFrom: { all?: boolean; mutual_friends?: boolean; mututal_guilds?: boolean } | object; - public guildFolder: GuildFolderManager; - public disableDMfromServer: Collection; - public fetch(): Promise; - public edit(data: Partial): Promise; - public setDisplayCompactMode(value?: boolean): Promise; - public setTheme(value?: 'dark' | 'light'): Promise; - public setLocale(value: localeSetting): Promise; - // @ts-ignore - public setCustomStatus(value?: CustomStatusOption | CustomStatus): Promise; - public restrictedGuilds(status: boolean): Promise; - public addRestrictedGuild(guildId: GuildResolvable): Promise; - public removeRestrictedGuild(guildId: GuildResolvable): Promise; -} - -export class GuildSettingManager extends BaseManager { - private constructor(client: Client, guildId: Snowflake); - public rawSetting?: RawGuildSettingsData; - public suppressEveryone?: boolean; - public suppressRoles?: boolean; - public muteScheduledEvents?: boolean; - public messageNotifications?: number; - public flags?: number; - public mobilePush?: boolean; - public muted?: boolean; - public muteConfig?: MuteConfigData; - public hideMutedChannels?: boolean; - public channelOverrides?: object[]; - public notifyHighlights?: number; - public version?: number; - public guildId?: Snowflake; - public readonly guild?: Guild; - public edit(data: Partial): Promise; -} - export class GuildApplicationCommandManager extends ApplicationCommandManager { private constructor(guild: Guild, iterable?: Iterable); public guild: Guild; @@ -4131,49 +3863,35 @@ export class GuildManager extends CachedManager>; } -export interface BruteforceOptions { - limit?: number; - delay?: number; - depth?: number; -} - export class GuildMemberManager extends CachedManager { private constructor(guild: Guild, iterable?: Iterable); public guild: Guild; - public readonly me: GuildMember | null; + public get me(): GuildMember | null; public add( user: UserResolvable, options: AddGuildMemberOptions & { fetchWhenExisting: false }, ): Promise; public add(user: UserResolvable, options: AddGuildMemberOptions): Promise; + public addRole(user: UserResolvable, role: RoleResolvable, reason?: string): Promise; public ban(user: UserResolvable, options?: BanOptions): Promise; public edit(user: UserResolvable, data: GuildMemberEditData, reason?: string): Promise; public fetch( options: UserResolvable | FetchMemberOptions | (FetchMembersOptions & { user: UserResolvable }), ): Promise; public fetch(options?: FetchMembersOptions): Promise>; - public fetchMemberList( - channel: GuildTextChannelResolvable, - offset?: number, - double?: boolean, - retryMax?: number, - time?: number, - ): Promise>; - public fetchBruteforce(options?: BruteforceOptions): Promise>; - public fetchByMemberSafety(timeout?: number): Promise>; public fetchMe(options?: BaseFetchOptions): Promise; public kick(user: UserResolvable, reason?: string): Promise; public list(options?: GuildListMembersOptions): Promise>; public prune(options: GuildPruneMembersOptions & { dry?: false; count: false }): Promise; public prune(options?: GuildPruneMembersOptions): Promise; - public search(options: GuildSearchMembersOptions): Promise>; - public unban(user: UserResolvable, reason?: string): Promise; - public addRole(user: UserResolvable, role: RoleResolvable, reason?: string): Promise; public removeRole( user: UserResolvable, role: RoleResolvable, reason?: string, ): Promise; + public search(options: GuildSearchMembersOptions): Promise>; + public unban(user: UserResolvable, reason?: string): Promise; + public fetchByMemberSafety(timeout?: number): Promise>; } export class GuildBanManager extends CachedManager { @@ -4274,26 +3992,6 @@ export class MessageManager extends CachedManager; } -export class InteractionManager extends CachedManager { - private constructor(channel: TextBasedChannel, iterable?: Iterable); - public channel: TextBasedChannel; - public cache: Collection; -} - -export class InteractionResponse extends Base { - private constructor(client: Client, data: object); - public readonly channel: GuildTextBasedChannel | TextBasedChannel; - public channelId: Snowflake; - public readonly createdAt: Date; - public createdTimestamp: number; - public guildId: Snowflake | null; - public readonly guild: Snowflake | null; - public id: Snowflake; - public nonce: Snowflake; - public sendData: object; - public awaitModal(time: number): Modal; -} - export interface MessageSearchOptions { authors: UserResolvable[]; content: string; @@ -4374,6 +4072,7 @@ export class RoleManager extends CachedManager public edit(role: RoleResolvable, options: RoleData, reason?: string): Promise; public delete(role: RoleResolvable, reason?: string): Promise; public setPosition(role: RoleResolvable, position: number, options?: SetRolePositionOptions): Promise; + public setPositions(rolePositions: readonly RolePosition[]): Promise; public comparePositions(role1: RoleResolvable, role2: RoleResolvable): number; } @@ -4395,10 +4094,18 @@ export class ThreadManager extends CachedManager; } +export class GuildTextThreadManager extends ThreadManager { + public create(options: GuildTextThreadCreateOptions): Promise; +} + +export class GuildForumThreadManager extends ThreadManager { + public create(options: GuildForumThreadCreateOptions): Promise; +} + export class ThreadMemberManager extends CachedManager { private constructor(thread: ThreadChannel, iterable?: Iterable); public thread: ThreadChannel; - public readonly me: ThreadMember | null; + public get me(): ThreadMember | null; public add(member: UserResolvable | '@me', reason?: string): Promise; public fetch(options?: FetchThreadMembersWithoutGuildMemberDataOptions): Promise>; public fetch(member: ThreadMember, options?: FetchMemberOptions): Promise>; @@ -4410,8 +4117,19 @@ export class ThreadMemberManager extends CachedManager>>; public fetch(member: UserResolvable, options?: FetchThreadMemberOptions): Promise; - /** @deprecated Use `fetch(member, options)` instead. */ - public fetch(cache: boolean, options?: FetchMembersOptions): Promise>; + + /** @deprecated Use `fetch(options)` instead. */ + public fetch(cache: boolean, options?: FetchThreadMembersOptions): Promise>; + + public fetch( + x: undefined, + options: FetchThreadMembersWithGuildMemberDataOptions, + ): Promise>>; + public fetch( + x: undefined, + options?: FetchThreadMembersWithoutGuildMemberDataOptions, + ): Promise>; + public fetchMe(options?: BaseFetchOptions): Promise; public remove(id: Snowflake | '@me', reason?: string): Promise; } @@ -4421,30 +4139,11 @@ export class UserManager extends CachedManager private dmChannel(userId: Snowflake): DMChannel | null; public createDM(user: UserResolvable, options?: BaseFetchOptions): Promise; public deleteDM(user: UserResolvable): Promise; - public fetch(user: UserResolvable, options?: BaseFetchOptions & { guildId?: Snowflake }): Promise; + public fetch(user: UserResolvable, options?: BaseFetchOptions): Promise; public fetchFlags(user: UserResolvable, options?: BaseFetchOptions): Promise; public send(user: UserResolvable, options: string | MessagePayload | MessageOptions): Promise; } -export class RelationshipManager { - private constructor(client: Client, users?: object[]); - public cache: Collection; - public client: Client; - public readonly friendCache: Collection; - public readonly blockedCache: Collection; - public readonly incomingCache: Collection; - public readonly outgoingCache: Collection; - public fetch(user: UserResolvable, options?: BaseFetchOptions): Promise; - public deleteFriend(user: UserResolvable): Promise; - public deleteBlocked(user: UserResolvable): Promise; - public sendFriendRequest(username: string, discriminator?: number): Promise; - public cancelFriendRequest(user: UserResolvable): Promise; - public addFriend(user: UserResolvable): Promise; - public addBlocked(user: UserResolvable): Promise; - public setNickname(user: UserResolvable, nickname: string | null): Promise; - private __cancel(id: Snowflake): Promise; -} - export class VoiceStateManager extends CachedManager { private constructor(guild: Guild, iterable?: Iterable); public guild: Guild; @@ -4475,26 +4174,14 @@ export interface TextBasedChannelFields extends PartialTextBasedChannelFields { lastPinTimestamp: number | null; readonly lastPinAt: Date | null; messages: MessageManager; - interactions: InteractionManager; - awaitMessageComponent( - options?: AwaitMessageCollectorOptionsParams, - ): Promise; awaitMessages(options?: AwaitMessagesOptions): Promise>; - bulkDelete( - messages: Collection | readonly MessageResolvable[] | number, - filterOld?: boolean, - ): Promise>; - createMessageComponentCollector( - options?: MessageChannelCollectorOptionsParams, - ): InteractionCollector; createMessageCollector(options?: MessageCollectorOptions): MessageCollector; createWebhook(name: string, options?: ChannelWebhookCreateOptions): Promise; setRateLimitPerUser(rateLimitPerUser: number, reason?: string): Promise; setNSFW(nsfw?: boolean, reason?: string): Promise; fetchWebhooks(): Promise>; sendTyping(): Promise; - sendSlash(bot: UserResolvable, commandName: string, ...args: any): Promise; - searchInteraction(applicationId: Snowflake, type?: ApplicationCommandTypes): Promise; + sendSlash(target: UserResolvable, commandName: string, ...args: any[]): Promise; } export function PartialWebhookMixin(Base?: Constructable): Constructable; @@ -4527,9 +4214,6 @@ export interface WebhookFields extends PartialWebhookFields { //#endregion //#region Typedefs -export type PurchasedFlagsString = 'NITRO_CLASSIC' | 'NITRO' | 'GUILD_BOOST'; - -export type PremiumUsageFlagsString = 'PREMIUM_DISCRIMINATOR' | 'ANIMATED_AVATAR' | 'PROFILE_BANNER'; export type ActivityFlagsString = | 'INSTANCE' @@ -4542,7 +4226,11 @@ export type ActivityFlagsString = | 'PARTY_PRIVACY_VOICE_CHANNEL' | 'EMBEDDED'; -export type ActivitiesOptions = Omit; +export type PurchasedFlagsString = 'NITRO_CLASSIC' | 'NITRO' | 'GUILD_BOOST' | 'NITRO_BASIC'; + +export type PremiumUsageFlagsString = 'PREMIUM_DISCRIMINATOR' | 'ANIMATED_AVATAR' | 'PROFILE_BANNER'; + +export type ActivitiesOptions = Omit; export interface ActivityOptions { name: string; @@ -4580,6 +4268,7 @@ export interface ClientApplicationInstallParams { scopes: InviteScope[]; permissions: Readonly; } + export interface APIErrors { UNKNOWN_ACCOUNT: 10001; UNKNOWN_APPLICATION: 10002; @@ -4637,7 +4326,6 @@ export interface APIErrors { MAXIMUM_PINS: 30003; MAXIMUM_RECIPIENTS: 30004; MAXIMUM_ROLES: 30005; - MAXIMUM_USERNAMES: 30006; MAXIMUM_WEBHOOKS: 30007; MAXIMUM_EMOJIS: 30008; MAXIMUM_REACTIONS: 30010; @@ -4680,7 +4368,6 @@ export interface APIErrors { INVALID_AUTHENTICATION_TOKEN: 50014; NOTE_TOO_LONG: 50015; INVALID_BULK_DELETE_QUANTITY: 50016; - INVALID_MFA_LEVEL: 50017; CANNOT_PIN_MESSAGE_IN_OTHER_CHANNEL: 50019; INVALID_OR_TAKEN_INVITE_CODE: 50020; CANNOT_EXECUTE_ON_SYSTEM_MESSAGE: 50021; @@ -4696,7 +4383,6 @@ export interface APIErrors { INVALID_API_VERSION: 50041; FILE_UPLOADED_EXCEEDS_MAXIMUM_SIZE: 50045; INVALID_FILE_UPLOADED: 50046; - GIFT_CODE_CLAIMED: 50050; CANNOT_SELF_REDEEM_GIFT: 50054; INVALID_GUILD: 50055; INVALID_MESSAGE_TYPE: 50068; @@ -4718,7 +4404,6 @@ export interface APIErrors { YOU_CANNOT_SEND_VOICE_MESSAGES_IN_THIS_CHANNEL: 50173; CANNOT_CONVERT_PREMIUM_EMOJI_TO_NORMAL_EMOJI: 50145; TWO_FACTOR_REQUIRED: 60003; - INVALID_TWO_FACTOR_CODE: 60008; NO_USERS_WITH_DISCORDTAG_EXIST: 80004; REACTION_BLOCKED: 90001; RESOURCE_OVERLOADED: 130000; @@ -4753,376 +4438,6 @@ export interface ApplicationAsset { type: 'BIG' | 'SMALL'; } -export interface ClientEvents extends BaseClientEvents { - /** @deprecated See [this issue](https://github.com/discord/discord-api-docs/issues/3690) for more information. */ - applicationCommandCreate: [command: ApplicationCommand]; - /** @deprecated See [this issue](https://github.com/discord/discord-api-docs/issues/3690) for more information. */ - applicationCommandDelete: [command: ApplicationCommand]; - /** @deprecated See [this issue](https://github.com/discord/discord-api-docs/issues/3690) for more information. */ - applicationCommandUpdate: [oldCommand: ApplicationCommand | null, newCommand: ApplicationCommand]; - applicationCommandPermissionsUpdate: [data: ApplicationCommandPermissionsUpdateData]; - autoModerationActionExecution: [autoModerationActionExecution: AutoModerationActionExecution]; - autoModerationRuleCreate: [autoModerationRule: AutoModerationRule]; - autoModerationRuleDelete: [autoModerationRule: AutoModerationRule]; - autoModerationRuleUpdate: [ - oldAutoModerationRule: AutoModerationRule | null, - newAutoModerationRule: AutoModerationRule, - ]; - cacheSweep: [message: string]; - channelCreate: [channel: NonThreadGuildBasedChannel]; - channelDelete: [channel: DMChannel | NonThreadGuildBasedChannel]; - channelPinsUpdate: [channel: TextBasedChannel, date: Date]; - channelRecipientAdd: [channel: PartialGroupDMChannel, user: User]; - channelRecipientRemove: [channel: PartialGroupDMChannel, user: User]; - channelUpdate: [ - oldChannel: DMChannel | NonThreadGuildBasedChannel, - newChannel: DMChannel | NonThreadGuildBasedChannel, - ]; - warn: [message: string]; - emojiCreate: [emoji: GuildEmoji]; - emojiDelete: [emoji: GuildEmoji]; - emojiUpdate: [oldEmoji: GuildEmoji, newEmoji: GuildEmoji]; - error: [error: Error]; - callCreate: [call: Call]; - callDelete: [call: Call]; - callUpdate: [call: Call]; - guildAvailable: [guild: Guild]; - guildBanAdd: [ban: GuildBan]; - guildBanRemove: [ban: GuildBan]; - guildCreate: [guild: Guild]; - guildDelete: [guild: Guild]; - guildUnavailable: [guild: Guild]; - guildIntegrationsUpdate: [guild: Guild]; - guildMemberAdd: [member: GuildMember]; - guildMemberAvailable: [member: GuildMember | PartialGuildMember]; - guildMemberRemove: [member: GuildMember | PartialGuildMember]; - guildMembersChunk: [ - members: Collection, - guild: Guild, - data: { count: number; index: number; nonce: string | undefined; notFound: unknown[] }, - ]; - guildMemberUpdate: [oldMember: GuildMember | PartialGuildMember, newMember: GuildMember]; - guildMemberListUpdate: [ - members: Collection, - guild: Guild, - data: {}, // see: https://luna.gitlab.io/discord-unofficial-docs/lazy_guilds.html - ]; - guildUpdate: [oldGuild: Guild, newGuild: Guild]; - inviteCreate: [invite: Invite]; - inviteDelete: [invite: Invite]; - /** @deprecated Use messageCreate instead */ - message: [message: Message]; - messageAck: [channel: TextChannel, message_id: Snowflake, isRead: boolean, raw: object]; - messageCreate: [message: Message]; - messageDelete: [message: Message | PartialMessage]; - messageReactionRemoveAll: [ - message: Message | PartialMessage, - reactions: Collection, - ]; - messageReactionRemoveEmoji: [reaction: MessageReaction | PartialMessageReaction]; - messageDeleteBulk: [messages: Collection]; - messageReactionAdd: [reaction: MessageReaction | PartialMessageReaction, user: User | PartialUser]; - messageReactionRemove: [reaction: MessageReaction | PartialMessageReaction, user: User | PartialUser]; - messageUpdate: [oldMessage: Message | PartialMessage, newMessage: Message | PartialMessage]; - presenceUpdate: [oldPresence: Presence | null, newPresence: Presence]; - ready: [client: Client]; - invalidated: []; - roleCreate: [role: Role]; - roleDelete: [role: Role]; - roleUpdate: [oldRole: Role, newRole: Role]; - threadCreate: [thread: ThreadChannel, newlyCreated: boolean]; - threadDelete: [thread: ThreadChannel]; - threadListSync: [threads: Collection]; - threadMemberUpdate: [oldMember: ThreadMember, newMember: ThreadMember]; - threadMembersUpdate: [ - oldMembers: Collection, - newMembers: Collection, - ]; - threadUpdate: [oldThread: ThreadChannel, newThread: ThreadChannel]; - typingStart: [typing: Typing]; - userUpdate: [oldUser: User | PartialUser, newUser: User]; - userSettingsUpdate: [setting: RawUserSettingsData]; - userGuildSettingsUpdate: [guild: Guild]; - voiceStateUpdate: [oldState: VoiceState, newState: VoiceState]; - webhookUpdate: [channel: TextChannel | NewsChannel | VoiceChannel | ForumChannel | StageChannel]; - /** @deprecated Use interactionCreate instead */ - interaction: [interaction: Interaction]; - interactionCreate: [interaction: Interaction | { nonce: Snowflake; id: Snowflake }]; - interactionSuccess: [interaction: { nonce: Snowflake; id: Snowflake }]; - interactionFailure: [interaction: { nonce: Snowflake; id: Snowflake }]; - interactionModalCreate: [modal: Modal]; - shardDisconnect: [closeEvent: CloseEvent, shardId: number]; - shardError: [error: Error, shardId: number]; - shardReady: [shardId: number, unavailableGuilds: Set | undefined]; - shardReconnecting: [shardId: number]; - shardResume: [shardId: number, replayedEvents: number]; - stageInstanceCreate: [stageInstance: StageInstance]; - stageInstanceUpdate: [oldStageInstance: StageInstance | null, newStageInstance: StageInstance]; - stageInstanceDelete: [stageInstance: StageInstance]; - stickerCreate: [sticker: Sticker]; - stickerDelete: [sticker: Sticker]; - stickerUpdate: [oldSticker: Sticker, newSticker: Sticker]; - guildScheduledEventCreate: [guildScheduledEvent: GuildScheduledEvent]; - guildScheduledEventUpdate: [oldGuildScheduledEvent: GuildScheduledEvent, newGuildScheduledEvent: GuildScheduledEvent]; - guildScheduledEventDelete: [guildScheduledEvent: GuildScheduledEvent]; - guildScheduledEventUserAdd: [guildScheduledEvent: GuildScheduledEvent, user: User]; - guildScheduledEventUserRemove: [guildScheduledEvent: GuildScheduledEvent, user: User]; - guildAuditLogEntryCreate: [auditLogEntry: GuildAuditLogsEntry, guild: Guild]; - relationshipAdd: [id: Snowflake, type: RelationshipTypes]; - relationshipRemove: [id: Snowflake]; - relationshipUpdate: [id: Snowflake, type: RelationshipTypes, data: object]; - unhandledPacket: [packet: { op: GatewayOpcodes | number; d?: any; s?: number; t?: string }, shard: WebSocketShard]; - update: [oldVersion: string, newVersion: string]; - captchaRequired: [request: Request, captcha: Captcha]; -} - -export interface ConstantsEvents { - RATE_LIMIT: 'rateLimit'; - INVALID_REQUEST_WARNING: 'invalidRequestWarning'; - API_RESPONSE: 'apiResponse'; - API_REQUEST: 'apiRequest'; - CLIENT_READY: 'ready'; - APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE: 'applicationCommandAutocompleteResponse'; - /** @deprecated See [this issue](https://github.com/discord/discord-api-docs/issues/3690) for more information. */ - APPLICATION_COMMAND_CREATE: 'applicationCommandCreate'; - /** @deprecated See [this issue](https://github.com/discord/discord-api-docs/issues/3690) for more information. */ - APPLICATION_COMMAND_DELETE: 'applicationCommandDelete'; - /** @deprecated See [this issue](https://github.com/discord/discord-api-docs/issues/3690) for more information. */ - APPLICATION_COMMAND_UPDATE: 'applicationCommandUpdate'; - APPLICATION_COMMAND_PERMISSIONS_UPDATE: 'applicationCommandPermissionsUpdate'; - AUTO_MODERATION_ACTION_EXECUTION: 'autoModerationActionExecution'; - AUTO_MODERATION_RULE_CREATE: 'autoModerationRuleCreate'; - AUTO_MODERATION_RULE_DELETE: 'autoModerationRuleDelete'; - AUTO_MODERATION_RULE_UPDATE: 'autoModerationRuleUpdate'; - CALL_CREATE: 'callCreate'; - CALL_DELETE: 'callDelete'; - CALL_UPDATE: 'callUpdate'; - GUILD_AVAILABLE: 'guildAvailable'; - GUILD_CREATE: 'guildCreate'; - GUILD_DELETE: 'guildDelete'; - GUILD_UPDATE: 'guildUpdate'; - GUILD_UNAVAILABLE: 'guildUnavailable'; - GUILD_MEMBER_ADD: 'guildMemberAdd'; - GUILD_MEMBER_REMOVE: 'guildMemberRemove'; - GUILD_MEMBER_UPDATE: 'guildMemberUpdate'; - GUILD_MEMBER_AVAILABLE: 'guildMemberAvailable'; - GUILD_MEMBERS_CHUNK: 'guildMembersChunk'; - GUILD_MEMBER_LIST_UPDATE: 'guildMemberListUpdate'; - GUILD_INTEGRATIONS_UPDATE: 'guildIntegrationsUpdate'; - GUILD_ROLE_CREATE: 'roleCreate'; - GUILD_ROLE_DELETE: 'roleDelete'; - INVITE_CREATE: 'inviteCreate'; - INVITE_DELETE: 'inviteDelete'; - GUILD_ROLE_UPDATE: 'roleUpdate'; - GUILD_EMOJI_CREATE: 'emojiCreate'; - GUILD_EMOJI_DELETE: 'emojiDelete'; - GUILD_EMOJI_UPDATE: 'emojiUpdate'; - GUILD_BAN_ADD: 'guildBanAdd'; - GUILD_BAN_REMOVE: 'guildBanRemove'; - CHANNEL_CREATE: 'channelCreate'; - CHANNEL_DELETE: 'channelDelete'; - CHANNEL_UPDATE: 'channelUpdate'; - CHANNEL_PINS_UPDATE: 'channelPinsUpdate'; - CHANNEL_RECIPIENT_ADD: 'channelRecipientAdd'; - CHANNEL_RECIPIENT_REMOVE: 'channelRecipientRemove'; - MESSAGE_ACK: 'messageAck'; - MESSAGE_CREATE: 'messageCreate'; - MESSAGE_DELETE: 'messageDelete'; - MESSAGE_UPDATE: 'messageUpdate'; - MESSAGE_BULK_DELETE: 'messageDeleteBulk'; - MESSAGE_REACTION_ADD: 'messageReactionAdd'; - MESSAGE_REACTION_REMOVE: 'messageReactionRemove'; - MESSAGE_REACTION_REMOVE_ALL: 'messageReactionRemoveAll'; - MESSAGE_REACTION_REMOVE_EMOJI: 'messageReactionRemoveEmoji'; - THREAD_CREATE: 'threadCreate'; - THREAD_DELETE: 'threadDelete'; - THREAD_UPDATE: 'threadUpdate'; - THREAD_LIST_SYNC: 'threadListSync'; - THREAD_MEMBER_UPDATE: 'threadMemberUpdate'; - THREAD_MEMBERS_UPDATE: 'threadMembersUpdate'; - USER_UPDATE: 'userUpdate'; - USER_SETTINGS_UPDATE: 'userSettingsUpdate'; - USER_GUILD_SETTINGS_UPDATE: 'userGuildSettingsUpdate'; - PRESENCE_UPDATE: 'presenceUpdate'; - VOICE_SERVER_UPDATE: 'voiceServerUpdate'; - VOICE_STATE_UPDATE: 'voiceStateUpdate'; - TYPING_START: 'typingStart'; - WEBHOOKS_UPDATE: 'webhookUpdate'; - INTERACTION_CREATE: 'interactionCreate'; - INTERACTION_SUCCESS: 'interactionSuccess'; - INTERACTION_MODAL_CREATE: 'interactionModalCreate'; - INTERACTION_FAILURE: 'interactionFailure'; - ERROR: 'error'; - WARN: 'warn'; - DEBUG: 'debug'; - CACHE_SWEEP: 'cacheSweep'; - SHARD_DISCONNECT: 'shardDisconnect'; - SHARD_ERROR: 'shardError'; - SHARD_RECONNECTING: 'shardReconnecting'; - SHARD_READY: 'shardReady'; - SHARD_RESUME: 'shardResume'; - INVALIDATED: 'invalidated'; - RAW: 'raw'; - STAGE_INSTANCE_CREATE: 'stageInstanceCreate'; - STAGE_INSTANCE_UPDATE: 'stageInstanceUpdate'; - STAGE_INSTANCE_DELETE: 'stageInstanceDelete'; - GUILD_STICKER_CREATE: 'stickerCreate'; - GUILD_STICKER_DELETE: 'stickerDelete'; - GUILD_STICKER_UPDATE: 'stickerUpdate'; - GUILD_SCHEDULED_EVENT_CREATE: 'guildScheduledEventCreate'; - GUILD_SCHEDULED_EVENT_UPDATE: 'guildScheduledEventUpdate'; - GUILD_SCHEDULED_EVENT_DELETE: 'guildScheduledEventDelete'; - GUILD_SCHEDULED_EVENT_USER_ADD: 'guildScheduledEventUserAdd'; - GUILD_SCHEDULED_EVENT_USER_REMOVE: 'guildScheduledEventUserRemove'; - GUILD_AUDIT_LOG_ENTRY_CREATE: 'guildAuditLogEntryCreate'; - RELATIONSHIP_ADD: 'relationshipAdd'; - RELATIONSHIP_REMOVE: 'relationshipRemove'; - RELATIONSHIP_UPDATE: 'relationshipUpdate'; - UNHANDLED_PACKET: 'unhandledPacket'; - CAPTCHA_REQUIRED: 'captchaRequired'; -} - -export interface WebEmbedOptions { - shorten?: boolean; - hidden?: boolean; - title?: string; - description?: string; - url?: string; - timestamp?: Date | number; - color?: ColorResolvable; - fields?: EmbedFieldData[]; - author?: Partial & { icon_url?: string; proxy_icon_url?: string }; - thumbnail?: Partial & { proxy_url?: string }; - image?: Partial & { proxy_url?: string }; - video?: Partial & { proxy_url?: string }; - footer?: Partial & { icon_url?: string; proxy_icon_url?: string }; - imageType?: 'thumbnail' | 'image'; - redirect?: string; -} -// export interface MessageOptions -// embeds?: (WebEmbed | MessageEmbed | MessageEmbedOptions | APIEmbed)[]; - -/** - * @extends https://luna.gitlab.io/discord-unofficial-docs/user_settings.html - */ -export interface RawUserSettingsData { - afk_timeout?: number; - allow_accessibility_detection?: boolean; - animate_emoji?: boolean; - animate_stickers?: number; - contact_sync_enabled?: boolean; - convert_emoticons?: boolean; - custom_status?: { text?: string; expires_at?: string | null; emoji_name?: string; emoji_id?: Snowflake | null }; - default_guilds_restricted?: boolean; - detect_platform_accounts?: boolean; - developer_mode?: boolean; - disable_games_tab?: boolean; - enable_tts_command?: boolean; - explicit_content_filter?: DMScanLevel; - friend_discovery_flags?: number; - friend_source_flags?: { all?: boolean; mutual_friends?: boolean; mututal_guilds?: boolean }; - gif_auto_play?: boolean; - guild_folders?: { id?: Snowflake; guild_ids?: Snowflake[]; name?: string }[]; - guild_positions?: number[]; - inline_attachment_media?: boolean; - inline_embed_media?: boolean; - locale?: string; - message_display_compact?: boolean; - native_phone_integration_enabled?: boolean; - render_embeds?: boolean; - render_reactions?: boolean; - restricted_guilds?: any[]; - show_current_game?: boolean; - status?: PresenceStatusData; - stream_notifications_enabled?: boolean; - theme?: 'dark' | 'light'; - timezone_offset?: number; - view_nsfw_guilds?: boolean; -} - -export interface RawGuildSettingsData { - guild_id: Snowflake; - suppress_everyone: boolean; - suppress_roles: boolean; - mute_scheduled_events: boolean; - message_notifications: 2; - flags: 0; - mobile_push: boolean; - muted: boolean; - mute_config?: RawMuteConfigData; - hide_muted_channels: boolean; - channel_overrides: RawGuildChannelSettingsData[]; - notify_highlights: number; - version: number; -} - -export interface RawGuildChannelSettingsData { - channel_id: Snowflake; - message_notifications: number; - muted: boolean; - mute_config?: RawMuteConfigData; - collapsed: boolean; -} - -export interface RawMuteConfigData { - end_time: string; - selected_time_window: number; -} - -export interface MuteConfigData { - endTime: Date; - selectedTimeWindow: number; -} - -export interface ClientOptions { - shards?: number | number[] | 'auto'; - shardCount?: number; - closeTimeout?: number; - makeCache?: CacheFactory; - /** @deprecated Pass the value of this property as `lifetime` to `sweepers.messages` instead. */ - messageCacheLifetime?: number; - /** @deprecated Pass the value of this property as `interval` to `sweepers.messages` instead. */ - messageSweepInterval?: number; - allowedMentions?: MessageMentionOptions; - invalidRequestWarningInterval?: number; - partials?: PartialTypes[]; - restWsBridgeTimeout?: number; - restTimeOffset?: number; - restRequestTimeout?: number; - restGlobalRateLimit?: number; - restSweepInterval?: number; - retryLimit?: number; - failIfNotExists?: boolean; - userAgentSuffix?: string[]; - presence?: PresenceData; - intents?: BitFieldResolvable; - waitGuildTimeout?: number; - messageCreateEventGuildTimeout?: number; - sweepers?: SweeperOptions; - ws?: WebSocketOptions; - http?: HTTPOptions; - rejectOnRateLimit?: string[] | ((data: RateLimitData) => boolean | Promise); - // add - checkUpdate?: boolean; - syncStatus?: boolean; - autoRedeemNitro?: boolean; - patchVoice?: boolean; - password?: string; - DMSync?: boolean; - proxy?: string; - captchaService?: captchaServices; - captchaKey?: string; - captchaSolver?: (data: Captcha, userAgent: string) => Promise; - captchaRetryLimit?: number; - captchaWithProxy?: boolean; - interactionTimeout?: number; - usingNewAttachmentAPI?: boolean; -} - -export type captchaServices = '2captcha' | 'capmonster'; - -// end copy - export interface BaseApplicationCommandData { name: string; nameLocalizations?: LocalizationMap; @@ -5200,12 +4515,12 @@ export interface ApplicationCommandChannelOption extends BaseApplicationCommandO export interface ApplicationCommandAutocompleteOption extends Omit { type: - | 'STRING' - | 'NUMBER' - | 'INTEGER' - | ApplicationCommandOptionTypes.STRING - | ApplicationCommandOptionTypes.NUMBER - | ApplicationCommandOptionTypes.INTEGER; + | 'STRING' + | 'NUMBER' + | 'INTEGER' + | ApplicationCommandOptionTypes.STRING + | ApplicationCommandOptionTypes.NUMBER + | ApplicationCommandOptionTypes.INTEGER; autocomplete: true; } @@ -5417,16 +4732,7 @@ export type ApplicationCommandPermissionType = keyof typeof ApplicationCommandPe export type ApplicationCommandResolvable = ApplicationCommand | Snowflake; export type ApplicationFlagsString = - | 'EMBEDDED_RELEASED' - | 'MANAGED_EMOJI' - | 'EMBEDDED_IAP' - | 'GROUP_DM_CREATE' - | 'RPC_PRIVATE_BETA' | 'APPLICATION_AUTO_MODERATION_RULE_CREATE_BADGE' - | 'ALLOW_ASSETS' - | 'ALLOW_ACTIVITY_ACTION_SPECTATE' - | 'ALLOW_ACTIVITY_ACTION_JOIN_REQUEST' - | 'RPC_HAS_CONNECTED' | 'GATEWAY_PRESENCE' | 'GATEWAY_PRESENCE_LIMITED' | 'GATEWAY_GUILD_MEMBERS' @@ -5435,10 +4741,7 @@ export type ApplicationFlagsString = | 'EMBEDDED' | 'GATEWAY_MESSAGE_CONTENT' | 'GATEWAY_MESSAGE_CONTENT_LIMITED' - | 'EMBEDDED_FIRST_PARTY' - | 'APPLICATION_COMMAND_BADGE' - | 'ACTIVE' - | 'IFRAME_MODAL'; + | 'APPLICATION_COMMAND_BADGE'; export interface ApplicationRoleConnectionMetadataEditOptions { name: string; @@ -5489,9 +4792,9 @@ export interface AutoModerationRuleCreateOptions { reason?: string; } -export interface AutoModerationRuleEditOptions extends Partial> {} +export interface AutoModerationRuleEditOptions extends Partial> { } -export interface AutoModerationTriggerMetadataOptions extends Partial {} +export interface AutoModerationTriggerMetadataOptions extends Partial { } export interface AutoModerationActionOptions { type: AutoModerationActionType | AutoModerationActionTypes; @@ -5598,10 +4901,9 @@ export type CacheFactory = ( export type CacheWithLimitsOptions = { [K in keyof Caches]?: Caches[K][0]['prototype'] extends DataManager - ? LimitedCollectionOptions | number - : never; + ? LimitedCollectionOptions | number + : never; }; - export interface CategoryCreateChannelOptions { permissionOverwrites?: OverwriteResolvable[] | Collection; topic?: string; @@ -5691,10 +4993,162 @@ export interface BaseClientEvents { invalidRequestWarning: [invalidRequestWarningData: InvalidRequestWarningData]; } +export interface ClientEvents extends BaseClientEvents { + /** @deprecated See [this issue](https://github.com/discord/discord-api-docs/issues/3690) for more information. */ + applicationCommandCreate: [command: ApplicationCommand]; + /** @deprecated See [this issue](https://github.com/discord/discord-api-docs/issues/3690) for more information. */ + applicationCommandDelete: [command: ApplicationCommand]; + /** @deprecated See [this issue](https://github.com/discord/discord-api-docs/issues/3690) for more information. */ + applicationCommandUpdate: [oldCommand: ApplicationCommand | null, newCommand: ApplicationCommand]; + applicationCommandPermissionsUpdate: [data: ApplicationCommandPermissionsUpdateData]; + autoModerationActionExecution: [autoModerationActionExecution: AutoModerationActionExecution]; + autoModerationRuleCreate: [autoModerationRule: AutoModerationRule]; + autoModerationRuleDelete: [autoModerationRule: AutoModerationRule]; + autoModerationRuleUpdate: [ + oldAutoModerationRule: AutoModerationRule | null, + newAutoModerationRule: AutoModerationRule, + ]; + cacheSweep: [message: string]; + channelCreate: [channel: NonThreadGuildBasedChannel]; + channelDelete: [channel: DMChannel | NonThreadGuildBasedChannel]; + channelPinsUpdate: [channel: TextBasedChannel, date: Date]; + channelUpdate: [ + oldChannel: DMChannel | NonThreadGuildBasedChannel, + newChannel: DMChannel | NonThreadGuildBasedChannel, + ]; + warn: [message: string]; + emojiCreate: [emoji: GuildEmoji]; + emojiDelete: [emoji: GuildEmoji]; + emojiUpdate: [oldEmoji: GuildEmoji, newEmoji: GuildEmoji]; + error: [error: Error]; + guildAvailable: [guild: Guild]; + guildBanAdd: [ban: GuildBan]; + guildBanRemove: [ban: GuildBan]; + guildCreate: [guild: Guild]; + guildDelete: [guild: Guild]; + guildUnavailable: [guild: Guild]; + guildIntegrationsUpdate: [guild: Guild]; + guildMemberAdd: [member: GuildMember]; + guildMemberAvailable: [member: GuildMember | PartialGuildMember]; + guildMemberRemove: [member: GuildMember | PartialGuildMember]; + guildMembersChunk: [ + members: Collection, + guild: Guild, + data: { count: number; index: number; nonce: string | undefined; notFound: unknown[] }, + ]; + guildMemberUpdate: [oldMember: GuildMember | PartialGuildMember, newMember: GuildMember]; + guildUpdate: [oldGuild: Guild, newGuild: Guild]; + inviteCreate: [invite: Invite]; + inviteDelete: [invite: Invite]; + /** @deprecated Use messageCreate instead */ + message: [message: Message]; + messageCreate: [message: Message]; + messageDelete: [message: Message | PartialMessage]; + messageReactionRemoveAll: [ + message: Message | PartialMessage, + reactions: Collection, + ]; + messageReactionRemoveEmoji: [reaction: MessageReaction | PartialMessageReaction]; + messageDeleteBulk: [messages: Collection]; + messageReactionAdd: [reaction: MessageReaction | PartialMessageReaction, user: User | PartialUser]; + messageReactionRemove: [reaction: MessageReaction | PartialMessageReaction, user: User | PartialUser]; + messageUpdate: [oldMessage: Message | PartialMessage, newMessage: Message | PartialMessage]; + presenceUpdate: [oldPresence: Presence | null, newPresence: Presence]; + ready: [client: Client]; + invalidated: []; + roleCreate: [role: Role]; + roleDelete: [role: Role]; + roleUpdate: [oldRole: Role, newRole: Role]; + threadCreate: [thread: ThreadChannel, newlyCreated: boolean]; + threadDelete: [thread: ThreadChannel]; + threadListSync: [threads: Collection]; + threadMemberUpdate: [oldMember: ThreadMember, newMember: ThreadMember]; + threadMembersUpdate: [ + oldMembers: Collection, + newMembers: Collection, + ]; + threadUpdate: [oldThread: ThreadChannel, newThread: ThreadChannel]; + typingStart: [typing: Typing]; + userUpdate: [oldUser: User | PartialUser, newUser: User]; + voiceStateUpdate: [oldState: VoiceState, newState: VoiceState]; + webhookUpdate: [channel: TextChannel | NewsChannel | VoiceChannel | ForumChannel | StageChannel]; + shardDisconnect: [closeEvent: CloseEvent, shardId: number]; + shardError: [error: Error, shardId: number]; + shardReady: [shardId: number, unavailableGuilds: Set | undefined]; + shardReconnecting: [shardId: number]; + shardResume: [shardId: number, replayedEvents: number]; + stageInstanceCreate: [stageInstance: StageInstance]; + stageInstanceUpdate: [oldStageInstance: StageInstance | null, newStageInstance: StageInstance]; + stageInstanceDelete: [stageInstance: StageInstance]; + stickerCreate: [sticker: Sticker]; + stickerDelete: [sticker: Sticker]; + stickerUpdate: [oldSticker: Sticker, newSticker: Sticker]; + guildScheduledEventCreate: [guildScheduledEvent: GuildScheduledEvent]; + guildScheduledEventUpdate: [oldGuildScheduledEvent: GuildScheduledEvent, newGuildScheduledEvent: GuildScheduledEvent]; + guildScheduledEventDelete: [guildScheduledEvent: GuildScheduledEvent]; + guildScheduledEventUserAdd: [guildScheduledEvent: GuildScheduledEvent, user: User]; + guildScheduledEventUserRemove: [guildScheduledEvent: GuildScheduledEvent, user: User]; + guildAuditLogEntryCreate: [auditLogEntry: GuildAuditLogsEntry, guild: Guild]; + unhandledPacket: [packet: { t?: string; d: any }, shard: number]; + relationshipAdd: [userId: Snowflake, shouldNotify: boolean]; + relationshipRemove: [userId: Snowflake, type: RelationshipTypes, nickname: string | null]; + relationshipUpdate: [ + userId: Snowflake, + oldData: { + nickname: string | null; + since: Date; + type: RelationshipTypes; + }, + newData: { + nickname: string | null; + since: Date; + type: RelationshipTypes; + }, + ]; + channelRecipientAdd: [channel: GroupDMChannel, user: User]; + channelRecipientRemove: [channel: GroupDMChannel, user: User]; + interactionModalCreate: [modal: Modal]; + callCreate: [call: CallState]; + callUpdate: [call: CallState]; + callDelete: [call: CallState]; +} + export interface ClientFetchInviteOptions { guildScheduledEventId?: Snowflake; } +export type CaptchaSolver = (captcha: Captcha, UserAgent: string) => Promise; + +export interface ClientOptions { + messageCreateEventGuildTimeout?: number; + DMChannelVoiceStatusSync?: number; + captchaRetryLimit?: number; + captchaSolver?: CaptchaSolver; + closeTimeout?: number; + makeCache?: CacheFactory; + /** @deprecated Pass the value of this property as `lifetime` to `sweepers.messages` instead. */ + messageCacheLifetime?: number; + /** @deprecated Pass the value of this property as `interval` to `sweepers.messages` instead. */ + messageSweepInterval?: number; + allowedMentions?: MessageMentionOptions; + invalidRequestWarningInterval?: number; + partials?: PartialTypes[]; + restWsBridgeTimeout?: number; + restTimeOffset?: number; + restRequestTimeout?: number; + restGlobalRateLimit?: number; + restSweepInterval?: number; + retryLimit?: number; + failIfNotExists?: boolean; + userAgentSuffix?: string[]; + presence?: PresenceData; + waitGuildTimeout?: number; + sweepers?: SweeperOptions; + ws?: WebSocketOptions; + http?: HTTPOptions; + rejectOnRateLimit?: string[] | ((data: RateLimitData) => boolean | Promise); +} + export type ClientPresenceStatus = 'online' | 'idle' | 'dnd'; export interface ClientPresenceStatusData { @@ -5707,7 +5161,7 @@ export interface ClientUserEditData { username?: string; avatar?: BufferResolvable | Base64Resolvable | null; banner?: BufferResolvable | Base64Resolvable | null; - bio?: string | null; + bio?: string; } export interface CloseEvent { @@ -5799,12 +5253,12 @@ export interface ConstantsClientApplicationAssetTypes { export type AutocompleteFocusedOption = Pick & { focused: true; type: - | 'STRING' - | 'INTEGER' - | 'NUMBER' - | ApplicationCommandOptionTypes.STRING - | ApplicationCommandOptionTypes.INTEGER - | ApplicationCommandOptionTypes.NUMBER; + | 'STRING' + | 'INTEGER' + | 'NUMBER' + | ApplicationCommandOptionTypes.STRING + | ApplicationCommandOptionTypes.INTEGER + | ApplicationCommandOptionTypes.NUMBER; value: string; }; @@ -5841,6 +5295,103 @@ export interface ConstantsColors { NOT_QUITE_BLACK: 0x23272a; } +export interface ConstantsEvents { + RATE_LIMIT: 'rateLimit'; + INVALID_REQUEST_WARNING: 'invalidRequestWarning'; + API_RESPONSE: 'apiResponse'; + API_REQUEST: 'apiRequest'; + CLIENT_READY: 'ready'; + /** @deprecated See [this issue](https://github.com/discord/discord-api-docs/issues/3690) for more information. */ + APPLICATION_COMMAND_CREATE: 'applicationCommandCreate'; + /** @deprecated See [this issue](https://github.com/discord/discord-api-docs/issues/3690) for more information. */ + APPLICATION_COMMAND_DELETE: 'applicationCommandDelete'; + APPLICATION_COMMAND_PERMISSIONS_UPDATE: 'applicationCommandPermissionsUpdate'; + /** @deprecated See [this issue](https://github.com/discord/discord-api-docs/issues/3690) for more information. */ + APPLICATION_COMMAND_UPDATE: 'applicationCommandUpdate'; + AUTO_MODERATION_ACTION_EXECUTION: 'autoModerationActionExecution'; + AUTO_MODERATION_RULE_CREATE: 'autoModerationRuleCreate'; + AUTO_MODERATION_RULE_DELETE: 'autoModerationRuleDelete'; + AUTO_MODERATION_RULE_UPDATE: 'autoModerationRuleUpdate'; + GUILD_AVAILABLE: 'guildAvailable'; + GUILD_CREATE: 'guildCreate'; + GUILD_DELETE: 'guildDelete'; + GUILD_UPDATE: 'guildUpdate'; + GUILD_UNAVAILABLE: 'guildUnavailable'; + GUILD_MEMBER_ADD: 'guildMemberAdd'; + GUILD_MEMBER_REMOVE: 'guildMemberRemove'; + GUILD_MEMBER_UPDATE: 'guildMemberUpdate'; + GUILD_MEMBER_AVAILABLE: 'guildMemberAvailable'; + GUILD_MEMBERS_CHUNK: 'guildMembersChunk'; + GUILD_INTEGRATIONS_UPDATE: 'guildIntegrationsUpdate'; + GUILD_ROLE_CREATE: 'roleCreate'; + GUILD_ROLE_DELETE: 'roleDelete'; + INVITE_CREATE: 'inviteCreate'; + INVITE_DELETE: 'inviteDelete'; + GUILD_ROLE_UPDATE: 'roleUpdate'; + GUILD_EMOJI_CREATE: 'emojiCreate'; + GUILD_EMOJI_DELETE: 'emojiDelete'; + GUILD_EMOJI_UPDATE: 'emojiUpdate'; + GUILD_BAN_ADD: 'guildBanAdd'; + GUILD_BAN_REMOVE: 'guildBanRemove'; + CHANNEL_CREATE: 'channelCreate'; + CHANNEL_DELETE: 'channelDelete'; + CHANNEL_UPDATE: 'channelUpdate'; + CHANNEL_PINS_UPDATE: 'channelPinsUpdate'; + MESSAGE_CREATE: 'messageCreate'; + MESSAGE_DELETE: 'messageDelete'; + MESSAGE_UPDATE: 'messageUpdate'; + MESSAGE_BULK_DELETE: 'messageDeleteBulk'; + MESSAGE_REACTION_ADD: 'messageReactionAdd'; + MESSAGE_REACTION_REMOVE: 'messageReactionRemove'; + MESSAGE_REACTION_REMOVE_ALL: 'messageReactionRemoveAll'; + MESSAGE_REACTION_REMOVE_EMOJI: 'messageReactionRemoveEmoji'; + THREAD_CREATE: 'threadCreate'; + THREAD_DELETE: 'threadDelete'; + THREAD_UPDATE: 'threadUpdate'; + THREAD_LIST_SYNC: 'threadListSync'; + THREAD_MEMBER_UPDATE: 'threadMemberUpdate'; + THREAD_MEMBERS_UPDATE: 'threadMembersUpdate'; + USER_UPDATE: 'userUpdate'; + PRESENCE_UPDATE: 'presenceUpdate'; + VOICE_SERVER_UPDATE: 'voiceServerUpdate'; + VOICE_STATE_UPDATE: 'voiceStateUpdate'; + TYPING_START: 'typingStart'; + WEBHOOKS_UPDATE: 'webhookUpdate'; + ERROR: 'error'; + WARN: 'warn'; + DEBUG: 'debug'; + CACHE_SWEEP: 'cacheSweep'; + SHARD_DISCONNECT: 'shardDisconnect'; + SHARD_ERROR: 'shardError'; + SHARD_RECONNECTING: 'shardReconnecting'; + SHARD_READY: 'shardReady'; + SHARD_RESUME: 'shardResume'; + INVALIDATED: 'invalidated'; + RAW: 'raw'; + STAGE_INSTANCE_CREATE: 'stageInstanceCreate'; + STAGE_INSTANCE_UPDATE: 'stageInstanceUpdate'; + STAGE_INSTANCE_DELETE: 'stageInstanceDelete'; + GUILD_STICKER_CREATE: 'stickerCreate'; + GUILD_STICKER_DELETE: 'stickerDelete'; + GUILD_STICKER_UPDATE: 'stickerUpdate'; + GUILD_SCHEDULED_EVENT_CREATE: 'guildScheduledEventCreate'; + GUILD_SCHEDULED_EVENT_UPDATE: 'guildScheduledEventUpdate'; + GUILD_SCHEDULED_EVENT_DELETE: 'guildScheduledEventDelete'; + GUILD_SCHEDULED_EVENT_USER_ADD: 'guildScheduledEventUserAdd'; + GUILD_SCHEDULED_EVENT_USER_REMOVE: 'guildScheduledEventUserRemove'; + GUILD_AUDIT_LOG_ENTRY_CREATE: 'guildAuditLogEntryCreate'; + UNHANDLED_PACKET: 'unhandledPacket'; + RELATIONSHIP_ADD: 'relationshipAdd'; + RELATIONSHIP_UPDATE: 'relationshipUpdate'; + RELATIONSHIP_REMOVE: 'relationshipRemove'; + CHANNEL_RECIPIENT_ADD: 'channelRecipientAdd'; + CHANNEL_RECIPIENT_REMOVE: 'channelRecipientRemove'; + INTERACTION_MODAL_CREATE: 'interactionModalCreate'; + CALL_CREATE: 'callCreate'; + CALL_UPDATE: 'callUpdate'; + CALL_DELETE: 'callDelete'; +} + export interface ConstantsOpcodes { DISPATCH: 0; HEARTBEAT: 1; @@ -5854,6 +5405,29 @@ export interface ConstantsOpcodes { INVALID_SESSION: 9; HELLO: 10; HEARTBEAT_ACK: 11; + GUILD_SYNC: 12; + DM_UPDATE: 13; + GUILD_SUBSCRIPTIONS: 14; + LOBBY_CONNECT: 15; + LOBBY_DISCONNECT: 16; + LOBBY_VOICE_STATE_UPDATE: 17; + STREAM_CREATE: 18; + STREAM_DELETE: 19; + STREAM_WATCH: 20; + STREAM_PING: 21; + STREAM_SET_PAUSED: 22; + REQUEST_GUILD_APPLICATION_COMMANDS: 24; + EMBEDDED_ACTIVITY_LAUNCH: 25; + EMBEDDED_ACTIVITY_CLOSE: 26; + EMBEDDED_ACTIVITY_UPDATE: 27; + REQUEST_FORUM_UNREADS: 28; + REMOTE_COMMAND: 29; + GET_DELETED_ENTITY_IDS_NOT_MATCHING_HASH: 30; + REQUEST_SOUNDBOARD_SOUNDS: 31; + SPEED_TEST_CREATE: 32; + SPEED_TEST_DELETE: 33; + REQUEST_LAST_MESSAGES: 34; + SEARCH_RECENT_MEMBERS: 35; } export interface ConstantsShardEvents { @@ -5978,7 +5552,7 @@ export type ExplicitContentFilterLevel = keyof typeof ExplicitContentFilterLevel export interface FetchApplicationCommandOptions extends BaseFetchOptions { guildId?: Snowflake; - locale?: localeSetting; + locale?: LocaleString; withLocalizations?: boolean; } @@ -6074,6 +5648,7 @@ export interface FetchReactionUsersOptions { export interface FetchThreadMemberOptions extends BaseFetchOptions { withMember?: boolean; } + export interface FetchThreadMembersWithGuildMemberDataOptions { withMember: true; after?: Snowflake; @@ -6082,7 +5657,7 @@ export interface FetchThreadMembersWithGuildMemberDataOptions { } export interface FetchThreadMembersWithoutGuildMemberDataOptions { - withMember: false; + withMember?: false; cache?: boolean; } @@ -6236,20 +5811,20 @@ export interface GuildAuditLogsEntryExtraField { MESSAGE_UNPIN: { channel: GuildTextBasedChannel | { id: Snowflake }; messageId: Snowflake }; MEMBER_DISCONNECT: { count: number }; CHANNEL_OVERWRITE_CREATE: - | Role - | GuildMember - | { id: Snowflake; name: string; type: OverwriteTypes.role } - | { id: Snowflake; type: OverwriteTypes.member }; + | Role + | GuildMember + | { id: Snowflake; name: string; type: OverwriteTypes.role } + | { id: Snowflake; type: OverwriteTypes.member }; CHANNEL_OVERWRITE_UPDATE: - | Role - | GuildMember - | { id: Snowflake; name: string; type: OverwriteTypes.role } - | { id: Snowflake; type: OverwriteTypes.member }; + | Role + | GuildMember + | { id: Snowflake; name: string; type: OverwriteTypes.role } + | { id: Snowflake; type: OverwriteTypes.member }; CHANNEL_OVERWRITE_DELETE: - | Role - | GuildMember - | { id: Snowflake; name: string; type: OverwriteTypes.role } - | { id: Snowflake; type: OverwriteTypes.member }; + | Role + | GuildMember + | { id: Snowflake; name: string; type: OverwriteTypes.role } + | { id: Snowflake; type: OverwriteTypes.member }; STAGE_INSTANCE_CREATE: StageChannel | { id: Snowflake }; STAGE_INSTANCE_DELETE: StageChannel | { id: Snowflake }; STAGE_INSTANCE_UPDATE: StageChannel | { id: Snowflake }; @@ -6280,8 +5855,8 @@ export interface GuildAuditLogsEntryTargetField | RoleResolvable[]; reason?: string; @@ -6397,7 +5978,6 @@ export type GuildFeatures = | 'ANIMATED_ICON' | 'AUTO_MODERATION' | 'BANNER' - | 'CLYDE_ENABLED' | 'COMMERCE' | 'COMMUNITY' | 'CREATOR_MONETIZABLE_PROVISIONAL' @@ -6419,8 +5999,8 @@ export type GuildFeatures = | 'THREE_DAY_THREAD_ARCHIVE' | 'SEVEN_DAY_THREAD_ARCHIVE' | 'PRIVATE_THREADS' - | 'RAID_ALERTS_DISABLED' | 'ROLE_ICONS' + | 'RAID_ALERTS_DISABLED' | 'ROLE_SUBSCRIPTIONS_AVAILABLE_FOR_PURCHASE' | 'ROLE_SUBSCRIPTIONS_ENABLED'; @@ -6514,8 +6094,8 @@ export type GuildScheduledEventManagerFetchResult< export type GuildScheduledEventManagerFetchSubscribersResult = T extends { withMember: true } - ? Collection> - : Collection>; + ? Collection> + : Collection>; export type GuildScheduledEventPrivacyLevel = keyof typeof GuildScheduledEventPrivacyLevels; @@ -6550,6 +6130,7 @@ export interface HTTPAttachmentData { export interface HTTPErrorData { json: unknown; files: HTTPAttachmentData[]; + headers?: Record; } export interface HTTPOptions { @@ -6625,13 +6206,6 @@ export type IntentsString = | 'AUTO_MODERATION_CONFIGURATION' | 'AUTO_MODERATION_EXECUTION'; -export interface InviteGenerationOptions { - permissions?: PermissionResolvable; - guild?: GuildResolvable; - disableGuildSelect?: boolean; - scopes: InviteScope[]; -} - export type GuildInvitableChannelResolvable = | TextChannel | VoiceChannel @@ -6667,7 +6241,8 @@ export type InviteScope = | 'guilds' | 'guilds.join' | 'gdm.join' - | 'webhook.incoming'; + | 'webhook.incoming' + | 'role_connections.write'; export interface LifetimeFilterOptions { excludeFromSweep?: (value: V, key: K, collection: LimitedCollection) => boolean; @@ -6707,8 +6282,8 @@ export type ModalActionRowComponentResolvable = export interface MessageActionRowOptions< T extends - | MessageActionRowComponentResolvable - | ModalActionRowComponentResolvable = MessageActionRowComponentResolvable, + | MessageActionRowComponentResolvable + | ModalActionRowComponentResolvable = MessageActionRowComponentResolvable, > extends BaseMessageComponentOptions { components: T[]; } @@ -6766,35 +6341,16 @@ export type MessageComponentType = keyof typeof MessageComponentTypes; export type MessageComponentTypeResolvable = MessageComponentType | MessageComponentTypes; +export type GuildForumThreadMessageCreateOptions = MessageOptions & Pick; + export interface MessageEditOptions { attachments?: MessageAttachment[]; content?: string | null; - id?: Snowflake | number; - parentId?: Snowflake | number; - type?: ExcludeEnum< - typeof ChannelTypes, - | 'DM' - | 'GROUP_DM' - | 'GUILD_NEWS' - | 'GUILD_STORE' - | 'UNKNOWN' - | 'GUILD_NEWS_THREAD' - | 'GUILD_PUBLIC_THREAD' - | 'GUILD_PRIVATE_THREAD' - | 'GUILD_STAGE_VOICE' - >; - name: string; - topic?: string; - nsfw?: boolean; - bitrate?: number; - userLimit?: number; - rtcRegion?: string | null; - videoQualityMode?: VideoQualityMode; - permissionOverwrites?: PartialOverwriteData[]; - rateLimitPerUser?: number; - availableTags?: GuildForumTagData[]; - defaultReactionEmoji?: DefaultReactionEmoji; - defaultThreadRateLimitPerUser?: number; + embeds?: (MessageEmbed | MessageEmbedOptions | APIEmbed)[] | null; + files?: (FileOptions | BufferResolvable | Stream | MessageAttachment)[]; + flags?: BitFieldResolvable; + allowedMentions?: MessageMentionOptions; + components?: (MessageActionRow | (Required & MessageActionRowOptions))[]; } export interface MessageEmbedAuthor { @@ -6897,15 +6453,14 @@ export interface MessageOptions { tts?: boolean; nonce?: string | number; content?: string | null; - embeds?: (WebEmbed | MessageEmbed | MessageEmbedOptions | APIEmbed)[]; + embeds?: (MessageEmbed | MessageEmbedOptions | APIEmbed)[]; components?: (MessageActionRow | (Required & MessageActionRowOptions))[]; allowedMentions?: MessageMentionOptions; files?: (FileOptions | BufferResolvable | Stream | MessageAttachment)[]; reply?: ReplyOptions; stickers?: StickerResolvable[]; attachments?: MessageAttachment[]; - flags?: BitFieldResolvable<'SUPPRESS_EMBEDS' | 'SUPPRESS_NOTIFICATIONS', number>; - usingNewAttachmentAPI?: boolean; + flags?: BitFieldResolvable<'SUPPRESS_EMBEDS' | 'SUPPRESS_NOTIFICATIONS' | 'IS_VOICE_MESSAGE', number>; } export type MessageReactionResolvable = MessageReaction | Snowflake | string; @@ -6926,12 +6481,11 @@ export interface BaseMessageSelectMenuOptions { minValues?: number; placeholder?: string; } + export interface StringMessageSelectMenuOptions extends BaseMessageSelectMenuOptions { type?: - | 'STRING_SELECT' - | 'SELECT_MENU' - | SelectMenuComponentTypes.STRING_SELECT - | SelectMenuComponentTypes.SELECT_MENU; + | 'STRING_SELECT' + | SelectMenuComponentTypes.STRING_SELECT options?: MessageSelectOptionData[]; } @@ -6982,8 +6536,8 @@ export type MFALevel = keyof typeof MFALevels; export interface ModalOptions { components: - | MessageActionRow[] - | MessageActionRowOptions[]; + | MessageActionRow[] + | MessageActionRowOptions[]; customId: string; title: string; } @@ -7099,7 +6653,7 @@ export type PremiumTier = keyof typeof PremiumTiers; export interface PresenceData { status?: PresenceStatusData; afk?: boolean; - activities?: ActivitiesOptions[]; + activities?: (ActivitiesOptions | RichPresence | SpotifyRPC | CustomStatus)[]; shardId?: number | number[]; } @@ -7129,6 +6683,9 @@ export interface PartialChannelData { videoQualityMode?: VideoQualityMode; permissionOverwrites?: PartialOverwriteData[]; rateLimitPerUser?: number; + availableTags?: GuildForumTagData[]; + defaultReactionEmoji?: DefaultReactionEmoji; + defaultThreadRateLimitPerUser?: number; } export type Partialize< @@ -7141,19 +6698,19 @@ export type Partialize< id: Snowflake; partial: true; } & { - [K in keyof Omit]: K extends N ? null : K extends M ? T[K] | null : T[K]; -}; + [K in keyof Omit]: K extends N ? null : K extends M ? T[K] | null : T[K]; + }; export interface PartialDMChannel extends Partialize { lastMessageId: undefined; } -export interface PartialGuildMember extends Partialize {} +export interface PartialGuildMember extends Partialize { } export interface PartialMessage - extends Partialize {} + extends Partialize { } -export interface PartialMessageReaction extends Partialize {} +export interface PartialMessageReaction extends Partialize { } export interface PartialOverwriteData { id: Snowflake | number; @@ -7168,7 +6725,7 @@ export interface PartialRoleData extends RoleData { export type PartialTypes = 'USER' | 'CHANNEL' | 'GUILD_MEMBER' | 'MESSAGE' | 'REACTION' | 'GUILD_SCHEDULED_EVENT'; -export interface PartialUser extends Partialize {} +export interface PartialUser extends Partialize { } export type PresenceStatusData = ClientPresenceStatus | 'invisible'; @@ -7289,11 +6846,6 @@ export interface StartThreadOptions { rateLimitPerUser?: number; } -export interface MessageButtonLocation { - row: number; - col: number; -} - export type Status = number; export type StickerFormatType = keyof typeof StickerFormatTypes; @@ -7312,6 +6864,10 @@ export type SystemChannelFlagsString = export type SystemChannelFlagsResolvable = BitFieldResolvable; +export type ChannelFlagsResolvable = BitFieldResolvable; + +export type SelectMenuComponentType = keyof typeof SelectMenuComponentTypes; + export type SystemMessageType = Exclude< MessageType, 'DEFAULT' | 'REPLY' | 'APPLICATION_COMMAND' | 'CONTEXT_MENU_COMMAND' @@ -7363,8 +6919,8 @@ export interface SweeperDefinitions { export type SweeperOptions = { [K in keyof SweeperDefinitions]?: SweeperDefinitions[K][2] extends true - ? SweepOptions | LifetimeSweepOptions - : SweepOptions; + ? SweepOptions | LifetimeSweepOptions + : SweepOptions; }; export interface LimitedCollectionOptions { @@ -7386,13 +6942,9 @@ export type AnyChannel = | TextChannel | ThreadChannel | VoiceChannel - | ForumChannel - | PartialGroupDMChannel; + | ForumChannel; -export type TextBasedChannel = Exclude< - Extract, - ForumChannel ->; +export type TextBasedChannel = Exclude, ForumChannel>; export type TextBasedChannelTypes = TextBasedChannel['type']; @@ -7440,6 +6992,11 @@ export interface GuildTextThreadCreateOptions extends StartTh rateLimitPerUser?: number; } +export interface GuildForumThreadCreateOptions extends StartThreadOptions { + message: GuildForumThreadMessageCreateOptions | MessagePayload; + appliedTags?: Snowflake[]; +} + export interface ThreadEditData { name?: string; archived?: boolean; @@ -7460,38 +7017,17 @@ export type UserFlagsString = | 'PARTNERED_SERVER_OWNER' | 'HYPESQUAD_EVENTS' | 'BUGHUNTER_LEVEL_1' - | 'MFA_SMS' - | 'PREMIUM_PROMO_DISMISSED' | 'HOUSE_BRAVERY' | 'HOUSE_BRILLIANCE' | 'HOUSE_BALANCE' | 'EARLY_SUPPORTER' | 'TEAM_USER' - | 'INTERNAL_APPLICATION' - | 'SYSTEM' - | 'HAS_UNREAD_URGENT_MESSAGES' | 'BUGHUNTER_LEVEL_2' - | 'UNDERAGE_DELETED' | 'VERIFIED_BOT' | 'EARLY_VERIFIED_BOT_DEVELOPER' | 'DISCORD_CERTIFIED_MODERATOR' | 'BOT_HTTP_INTERACTIONS' - | 'SPAMMER' - | 'DISABLE_PREMIUM' - | 'ACTIVE_DEVELOPER' - | 'HIGH_GLOBAL_RATE_LIMIT' - | 'DELETED' - | 'DISABLED_SUSPICIOUS_ACTIVITY' - | 'SELF_DELETED' - | 'PREMIUM_DISCRIMINATOR' - | 'USED_DESKTOP_CLIENT' - | 'USED_WEB_CLIENT' - | 'USED_MOBILE_CLIENT' - | 'DISABLED' - | 'VERIFIED_EMAIL' - | 'QUARANTINED' - | 'COLLABORATOR' - | 'RESTRICTED_COLLABORATOR'; + | 'ACTIVE_DEVELOPER'; export type UserMention = `<@${Snowflake}>`; @@ -7521,6 +7057,15 @@ export interface WebhookClientDataURL { url: string; } +export type FriendRequestOptions = + | { + user: UserResolvable; + } + | { + username: string; + discriminator: number | null; + }; + export type WebhookClientOptions = Pick< ClientOptions, 'allowedMentions' | 'restTimeOffset' | 'restRequestTimeout' | 'retryLimit' | 'http' @@ -7536,7 +7081,6 @@ export type WebhookEditMessageOptions = Pick< WebhookMessageOptions, 'content' | 'embeds' | 'files' | 'allowedMentions' | 'components' | 'attachments' | 'threadId' >; - export interface InteractionEditReplyOptions extends WebhookEditMessageOptions { message?: MessageResolvable | '@original'; } @@ -7556,6 +7100,7 @@ export interface WebhookMessageOptions extends Omit; compress?: boolean; properties?: WebSocketProperties; } @@ -7597,11 +7142,10 @@ export interface WelcomeScreenEditData { export type WSEventType = | 'READY' | 'RESUMED' - | 'APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE' | 'APPLICATION_COMMAND_CREATE' | 'APPLICATION_COMMAND_DELETE' - | 'APPLICATION_COMMAND_UPDATE' | 'APPLICATION_COMMAND_PERMISSIONS_UPDATE' + | 'APPLICATION_COMMAND_UPDATE' | 'AUTO_MODERATION_ACTION_EXECUTION' | 'AUTO_MODERATION_RULE_CREATE' | 'AUTO_MODERATION_RULE_DELETE' @@ -7692,85 +7236,4 @@ export type InternalDiscordGatewayAdapterCreator = ( methods: InternalDiscordGatewayAdapterLibraryMethods, ) => InternalDiscordGatewayAdapterImplementerMethods; -// GuildForum -export type ChannelFlagsString = 'PINNED' | 'REQUIRE_TAG'; -export class ChannelFlags extends BitField { - public static FLAGS: Record; - public static resolve(bit?: BitFieldResolvable): number; -} - -export interface GuildForumTagEmoji { - id: Snowflake | null; - name: string | null; -} - -export interface GuildForumTag { - id: Snowflake; - name: string; - moderated: boolean; - emoji: GuildForumTagEmoji | null; -} - -export type GuildForumTagData = Partial & { name: string }; - -export interface DefaultReactionEmoji { - id: Snowflake | null; - name: string | null; -} - -export class ForumChannel extends TextBasedChannelMixin(GuildChannel, [ - 'send', - 'lastMessage', - 'lastPinAt', - 'bulkDelete', - 'sendTyping', - 'createMessageCollector', - 'awaitMessages', - 'createMessageComponentCollector', - 'awaitMessageComponent', -]) { - public type: 'GUILD_FORUM'; - public threads: GuildForumThreadManager; - public availableTags: GuildForumTag[]; - public defaultReactionEmoji: DefaultReactionEmoji | null; - public defaultThreadRateLimitPerUser: number | null; - public rateLimitPerUser: number | null; - public defaultAutoArchiveDuration: ThreadAutoArchiveDuration | null; - public nsfw: boolean; - public topic: string | null; - public defaultSortOrder: SortOrderType | null; - public defaultForumLayout: ForumLayoutType; - public setAvailableTags(tags: GuildForumTagData[], reason?: string): Promise; - public setDefaultReactionEmoji(emojiId: DefaultReactionEmoji | null, reason?: string): Promise; - public setDefaultThreadRateLimitPerUser(rateLimit: number, reason?: string): Promise; - public createInvite(options?: CreateInviteOptions): Promise; - public fetchInvites(cache?: boolean): Promise>; - public setDefaultAutoArchiveDuration( - defaultAutoArchiveDuration: ThreadAutoArchiveDuration, - reason?: string, - ): Promise; - public setTopic(topic: string | null, reason?: string): Promise; - public setDefaultSortOrder(defaultSortOrder: SortOrderType | null, reason?: string): Promise; - public setDefaultForumLayout(defaultForumLayout: ForumLayoutType, reason?: string): Promise; -} - -export class GuildTextThreadManager extends ThreadManager { - public create(options: GuildTextThreadCreateOptions): Promise; -} - -export class GuildForumThreadManager extends ThreadManager { - public create(options: GuildForumThreadCreateOptions): Promise; -} - -export type GuildForumThreadMessageCreateOptions = MessageOptions & Pick; - -export type ChannelFlagsResolvable = BitFieldResolvable; - -export type SelectMenuComponentType = keyof typeof SelectMenuComponentTypes; - -export interface GuildForumThreadCreateOptions extends StartThreadOptions { - message: GuildForumThreadMessageCreateOptions | MessagePayload; - appliedTags?: Snowflake[]; -} - //#endregion From e03565bdd8c494b6bada55c560483bf1d746b7a4 Mon Sep 17 00:00:00 2001 From: Elysia <71698422+aiko-chan-ai@users.noreply.github.com> Date: Sun, 14 Jan 2024 12:36:37 +0700 Subject: [PATCH 60/60] fix eslint + ts --- typings/index.d.ts | 155 +++++++++++++++++++++++---------------------- 1 file changed, 81 insertions(+), 74 deletions(-) diff --git a/typings/index.d.ts b/typings/index.d.ts index 75d394b..739b164 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -237,7 +237,6 @@ export class DiscordAuthWebsocket extends EventEmitter { public on(event: string, listener: (...args: any[]) => Awaitable): this; } - export interface ExternalAssets { url: string; external_asset_path: string; @@ -870,7 +869,9 @@ export class ClientUser extends User { public pronouns?: string; public premiumType: number; public setBanner(banner: BufferResolvable | Base64Resolvable | null): Promise; - public setHypeSquad(hypesquad: 0 | 1 | 2 | 3 | 'LEAVE' | 'HOUSE_BRAVERY' | 'HOUSE_BRILLIANCE' | 'HOUSE_BALANCE'): Promise; + public setHypeSquad( + hypesquad: 0 | 1 | 2 | 3 | 'LEAVE' | 'HOUSE_BRAVERY' | 'HOUSE_BRILLIANCE' | 'HOUSE_BALANCE', + ): Promise; public setAccentColor(color: ColorResolvable): Promise; public setAboutMe(bio: string | null): Promise; public createFriendInvite(): Promise; @@ -1271,7 +1272,12 @@ export class Guild extends AnonymousGuild { public setWidgetSettings(settings: GuildWidgetSettingsData, reason?: string): Promise; public toJSON(): unknown; public markAsRead(): Promise; - public setCommunity(stats: Boolean, publicUpdatesChannel?: GuildTextChannelResolvable, rulesChannel?: GuildTextChannelResolvable, reason?: string): Promise; + public setCommunity( + stats: boolean, + publicUpdatesChannel?: GuildTextChannelResolvable, + rulesChannel?: GuildTextChannelResolvable, + reason?: string, + ): Promise; public topEmojis(): Promise>; public setVanityCode(code?: string): Promise; } @@ -1296,16 +1302,16 @@ export class GuildAuditLogs { export class GuildAuditLogsEntry< TActionRaw extends GuildAuditLogsResolvable = 'ALL', TAction = TActionRaw extends keyof GuildAuditLogsIds - ? GuildAuditLogsIds[TActionRaw] - : TActionRaw extends null - ? 'ALL' - : TActionRaw, + ? GuildAuditLogsIds[TActionRaw] + : TActionRaw extends null + ? 'ALL' + : TActionRaw, TActionType extends GuildAuditLogsActionType = TAction extends keyof GuildAuditLogsTypes - ? GuildAuditLogsTypes[TAction][1] - : 'ALL', + ? GuildAuditLogsTypes[TAction][1] + : 'ALL', TTargetType extends GuildAuditLogsTarget = TAction extends keyof GuildAuditLogsTypes - ? GuildAuditLogsTypes[TAction][0] - : 'UNKNOWN', + ? GuildAuditLogsTypes[TAction][0] + : 'UNKNOWN', > { private constructor(guild: Guild, data: RawGuildAuditLogEntryData, logs?: GuildAuditLogs); public action: TAction; @@ -1562,7 +1568,7 @@ export class HTTPError extends Error { } // tslint:disable-next-line:no-empty-interface - Merge RateLimitData into RateLimitError to not have to type it again -export interface RateLimitError extends RateLimitData { } +export interface RateLimitError extends RateLimitData {} export class RateLimitError extends Error { private constructor(data: RateLimitData); public name: 'RateLimitError'; @@ -1881,8 +1887,11 @@ export class Message extends Base { public inGuild(): this is Message & this; public readonly isMessage: true; - public clickButton(button?: { X: number, Y: number } | string): Promise; - public selectMenu(menu: 0 | 1 | 2 | 3 | 4 | string, vales: Array): Promise; + public clickButton(button?: { X: number; Y: number } | string): Promise; + public selectMenu( + menu: 0 | 1 | 2 | 3 | 4 | string, + vales: (UserResolvable | RoleResolvable | ChannelResolvable | string)[], + ): Promise; public markUnread(): Promise; public markRead(): Promise; } @@ -1900,8 +1909,8 @@ export class MessageActionRow< T extends MessageActionRowComponent | ModalActionRowComponent = MessageActionRowComponent, U = T extends ModalActionRowComponent ? ModalActionRowComponentResolvable : MessageActionRowComponentResolvable, V = T extends ModalActionRowComponent - ? APIActionRowComponent - : APIActionRowComponent, + ? APIActionRowComponent + : APIActionRowComponent, > extends BaseMessageComponent { // tslint:disable-next-line:ban-ts-ignore // @ts-ignore (TS:2344, Caused by TypeScript 4.8) @@ -3684,13 +3693,13 @@ export class ApplicationCommandPermissionsManager< public remove( options: | (FetchSingleOptions & { - users: UserResolvable | UserResolvable[]; - roles?: RoleResolvable | RoleResolvable[]; - }) + users: UserResolvable | UserResolvable[]; + roles?: RoleResolvable | RoleResolvable[]; + }) | (FetchSingleOptions & { - users?: UserResolvable | UserResolvable[]; - roles: RoleResolvable | RoleResolvable[]; - }), + users?: UserResolvable | UserResolvable[]; + roles: RoleResolvable | RoleResolvable[]; + }), ): Promise; public set( options: FetchSingleOptions & { permissions: ApplicationCommandPermissionData[] }, @@ -4515,12 +4524,12 @@ export interface ApplicationCommandChannelOption extends BaseApplicationCommandO export interface ApplicationCommandAutocompleteOption extends Omit { type: - | 'STRING' - | 'NUMBER' - | 'INTEGER' - | ApplicationCommandOptionTypes.STRING - | ApplicationCommandOptionTypes.NUMBER - | ApplicationCommandOptionTypes.INTEGER; + | 'STRING' + | 'NUMBER' + | 'INTEGER' + | ApplicationCommandOptionTypes.STRING + | ApplicationCommandOptionTypes.NUMBER + | ApplicationCommandOptionTypes.INTEGER; autocomplete: true; } @@ -4792,9 +4801,9 @@ export interface AutoModerationRuleCreateOptions { reason?: string; } -export interface AutoModerationRuleEditOptions extends Partial> { } +export interface AutoModerationRuleEditOptions extends Partial> {} -export interface AutoModerationTriggerMetadataOptions extends Partial { } +export interface AutoModerationTriggerMetadataOptions extends Partial {} export interface AutoModerationActionOptions { type: AutoModerationActionType | AutoModerationActionTypes; @@ -4901,8 +4910,8 @@ export type CacheFactory = ( export type CacheWithLimitsOptions = { [K in keyof Caches]?: Caches[K][0]['prototype'] extends DataManager - ? LimitedCollectionOptions | number - : never; + ? LimitedCollectionOptions | number + : never; }; export interface CategoryCreateChannelOptions { permissionOverwrites?: OverwriteResolvable[] | Collection; @@ -5253,12 +5262,12 @@ export interface ConstantsClientApplicationAssetTypes { export type AutocompleteFocusedOption = Pick & { focused: true; type: - | 'STRING' - | 'INTEGER' - | 'NUMBER' - | ApplicationCommandOptionTypes.STRING - | ApplicationCommandOptionTypes.INTEGER - | ApplicationCommandOptionTypes.NUMBER; + | 'STRING' + | 'INTEGER' + | 'NUMBER' + | ApplicationCommandOptionTypes.STRING + | ApplicationCommandOptionTypes.INTEGER + | ApplicationCommandOptionTypes.NUMBER; value: string; }; @@ -5811,20 +5820,20 @@ export interface GuildAuditLogsEntryExtraField { MESSAGE_UNPIN: { channel: GuildTextBasedChannel | { id: Snowflake }; messageId: Snowflake }; MEMBER_DISCONNECT: { count: number }; CHANNEL_OVERWRITE_CREATE: - | Role - | GuildMember - | { id: Snowflake; name: string; type: OverwriteTypes.role } - | { id: Snowflake; type: OverwriteTypes.member }; + | Role + | GuildMember + | { id: Snowflake; name: string; type: OverwriteTypes.role } + | { id: Snowflake; type: OverwriteTypes.member }; CHANNEL_OVERWRITE_UPDATE: - | Role - | GuildMember - | { id: Snowflake; name: string; type: OverwriteTypes.role } - | { id: Snowflake; type: OverwriteTypes.member }; + | Role + | GuildMember + | { id: Snowflake; name: string; type: OverwriteTypes.role } + | { id: Snowflake; type: OverwriteTypes.member }; CHANNEL_OVERWRITE_DELETE: - | Role - | GuildMember - | { id: Snowflake; name: string; type: OverwriteTypes.role } - | { id: Snowflake; type: OverwriteTypes.member }; + | Role + | GuildMember + | { id: Snowflake; name: string; type: OverwriteTypes.role } + | { id: Snowflake; type: OverwriteTypes.member }; STAGE_INSTANCE_CREATE: StageChannel | { id: Snowflake }; STAGE_INSTANCE_DELETE: StageChannel | { id: Snowflake }; STAGE_INSTANCE_UPDATE: StageChannel | { id: Snowflake }; @@ -5855,8 +5864,8 @@ export interface GuildAuditLogsEntryTargetField = T extends { withMember: true } - ? Collection> - : Collection>; + ? Collection> + : Collection>; export type GuildScheduledEventPrivacyLevel = keyof typeof GuildScheduledEventPrivacyLevels; @@ -6282,8 +6291,8 @@ export type ModalActionRowComponentResolvable = export interface MessageActionRowOptions< T extends - | MessageActionRowComponentResolvable - | ModalActionRowComponentResolvable = MessageActionRowComponentResolvable, + | MessageActionRowComponentResolvable + | ModalActionRowComponentResolvable = MessageActionRowComponentResolvable, > extends BaseMessageComponentOptions { components: T[]; } @@ -6483,9 +6492,7 @@ export interface BaseMessageSelectMenuOptions { } export interface StringMessageSelectMenuOptions extends BaseMessageSelectMenuOptions { - type?: - | 'STRING_SELECT' - | SelectMenuComponentTypes.STRING_SELECT + type?: 'STRING_SELECT' | SelectMenuComponentTypes.STRING_SELECT; options?: MessageSelectOptionData[]; } @@ -6536,8 +6543,8 @@ export type MFALevel = keyof typeof MFALevels; export interface ModalOptions { components: - | MessageActionRow[] - | MessageActionRowOptions[]; + | MessageActionRow[] + | MessageActionRowOptions[]; customId: string; title: string; } @@ -6698,19 +6705,19 @@ export type Partialize< id: Snowflake; partial: true; } & { - [K in keyof Omit]: K extends N ? null : K extends M ? T[K] | null : T[K]; - }; + [K in keyof Omit]: K extends N ? null : K extends M ? T[K] | null : T[K]; +}; export interface PartialDMChannel extends Partialize { lastMessageId: undefined; } -export interface PartialGuildMember extends Partialize { } +export interface PartialGuildMember extends Partialize {} export interface PartialMessage - extends Partialize { } + extends Partialize {} -export interface PartialMessageReaction extends Partialize { } +export interface PartialMessageReaction extends Partialize {} export interface PartialOverwriteData { id: Snowflake | number; @@ -6725,7 +6732,7 @@ export interface PartialRoleData extends RoleData { export type PartialTypes = 'USER' | 'CHANNEL' | 'GUILD_MEMBER' | 'MESSAGE' | 'REACTION' | 'GUILD_SCHEDULED_EVENT'; -export interface PartialUser extends Partialize { } +export interface PartialUser extends Partialize {} export type PresenceStatusData = ClientPresenceStatus | 'invisible'; @@ -6919,8 +6926,8 @@ export interface SweeperDefinitions { export type SweeperOptions = { [K in keyof SweeperDefinitions]?: SweeperDefinitions[K][2] extends true - ? SweepOptions | LifetimeSweepOptions - : SweepOptions; + ? SweepOptions | LifetimeSweepOptions + : SweepOptions; }; export interface LimitedCollectionOptions { @@ -7059,12 +7066,12 @@ export interface WebhookClientDataURL { export type FriendRequestOptions = | { - user: UserResolvable; - } + user: UserResolvable; + } | { - username: string; - discriminator: number | null; - }; + username: string; + discriminator: number | null; + }; export type WebhookClientOptions = Pick< ClientOptions,