summaryrefslogtreecommitdiff
path: root/node_modules/@discordjs/formatters
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@discordjs/formatters')
-rw-r--r--node_modules/@discordjs/formatters/CHANGELOG.md55
-rw-r--r--node_modules/@discordjs/formatters/LICENSE191
-rw-r--r--node_modules/@discordjs/formatters/README.md81
-rw-r--r--node_modules/@discordjs/formatters/dist/index.d.mts511
-rw-r--r--node_modules/@discordjs/formatters/dist/index.d.ts511
-rw-r--r--node_modules/@discordjs/formatters/dist/index.js393
-rw-r--r--node_modules/@discordjs/formatters/dist/index.js.map1
-rw-r--r--node_modules/@discordjs/formatters/dist/index.mjs335
-rw-r--r--node_modules/@discordjs/formatters/dist/index.mjs.map1
-rw-r--r--node_modules/@discordjs/formatters/package.json72
10 files changed, 2151 insertions, 0 deletions
diff --git a/node_modules/@discordjs/formatters/CHANGELOG.md b/node_modules/@discordjs/formatters/CHANGELOG.md
new file mode 100644
index 0000000..93381bb
--- /dev/null
+++ b/node_modules/@discordjs/formatters/CHANGELOG.md
@@ -0,0 +1,55 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+# [@discordjs/formatters@0.3.2](https://github.com/discordjs/discord.js/compare/@discordjs/formatters@0.3.1...@discordjs/formatters@0.3.2) - (2023-08-17)
+
+## Documentation
+
+- Update Node.js requirement to 16.11.0 (#9764) ([188877c](https://github.com/discordjs/discord.js/commit/188877c50af70f0d5cffb246620fa277435c6ce6))
+
+# [@discordjs/formatters@0.3.1](https://github.com/discordjs/discord.js/compare/@discordjs/formatters@0.3.0...@discordjs/formatters@0.3.1) - (2023-05-01)
+
+## Documentation
+
+- Generate static imports for types with api-extractor ([98a76db](https://github.com/discordjs/discord.js/commit/98a76db482879f79d6bb2fb2e5fc65ac2c34e2d9))
+- **formatters:** Enhance the documentation (#9364) ([23e0ac5](https://github.com/discordjs/discord.js/commit/23e0ac56f456c39d925e2644ec3ca209d4410a99))
+
+# [@discordjs/formatters@0.3.1](https://github.com/discordjs/discord.js/compare/@discordjs/formatters@0.3.0...@discordjs/formatters@0.3.1) - (2023-05-01)
+
+## Documentation
+
+- Generate static imports for types with api-extractor ([98a76db](https://github.com/discordjs/discord.js/commit/98a76db482879f79d6bb2fb2e5fc65ac2c34e2d9))
+- **formatters:** Enhance the documentation (#9364) ([23e0ac5](https://github.com/discordjs/discord.js/commit/23e0ac56f456c39d925e2644ec3ca209d4410a99))
+
+# [@discordjs/formatters@0.3.0](https://github.com/discordjs/discord.js/compare/@discordjs/formatters@0.2.0...@discordjs/formatters@0.3.0) - (2023-04-01)
+
+## Bug Fixes
+
+- **scripts:** Accessing tsComment ([d8d5f31](https://github.com/discordjs/discord.js/commit/d8d5f31d3927fd1de62f1fa3a1a6e454243ad87b))
+
+## Features
+
+- **website:** Render syntax and mdx on the server (#9086) ([ee5169e](https://github.com/discordjs/discord.js/commit/ee5169e0aadd7bbfcd752aae614ec0f69602b68b))
+
+# [@discordjs/formatters@0.2.0](https://github.com/discordjs/discord.js/compare/@discordjs/formatters@0.1.0...@discordjs/formatters@0.2.0) - (2023-03-12)
+
+## Features
+
+- **website:** Add support for source file links (#9048) ([f6506e9](https://github.com/discordjs/discord.js/commit/f6506e99c496683ee0ab67db0726b105b929af38))
+
+## Refactor
+
+- Compare with `undefined` directly (#9191) ([869153c](https://github.com/discordjs/discord.js/commit/869153c3fdf155783e7c0ecebd3627b087c3a026))
+- Moved the escapeX functions from discord.js to @discord.js/formatters (#8957) ([13ce78a](https://github.com/discordjs/discord.js/commit/13ce78af6e3aedc793f53a099a6a615df44311f7))
+
+## Styling
+
+- Run prettier (#9041) ([2798ba1](https://github.com/discordjs/discord.js/commit/2798ba1eb3d734f0cf2eeccd2e16cfba6804873b))
+
+# [@discordjs/formatters@0.1.0](https://github.com/discordjs/discord.js/tree/@discordjs/formatters@0.1.0) - (2022-12-16)
+
+## Features
+
+- Add `@discordjs/formatters` (#8889) ([3fca638](https://github.com/discordjs/discord.js/commit/3fca638a8470dcea2f79ddb9f18526dbc0017c88))
+
diff --git a/node_modules/@discordjs/formatters/LICENSE b/node_modules/@discordjs/formatters/LICENSE
new file mode 100644
index 0000000..e2baac1
--- /dev/null
+++ b/node_modules/@discordjs/formatters/LICENSE
@@ -0,0 +1,191 @@
+ 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 2021 Noel Buechler
+ Copyright 2021 Vlad Frangu
+
+ 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/node_modules/@discordjs/formatters/README.md b/node_modules/@discordjs/formatters/README.md
new file mode 100644
index 0000000..b846625
--- /dev/null
+++ b/node_modules/@discordjs/formatters/README.md
@@ -0,0 +1,81 @@
+<div align="center">
+ <br />
+ <p>
+ <a href="https://discord.js.org"><img src="https://discord.js.org/static/logo.svg" width="546" alt="discord.js" /></a>
+ </p>
+ <br />
+ <p>
+ <a href="https://discord.gg/djs"><img src="https://img.shields.io/discord/222078108977594368?color=5865F2&logo=discord&logoColor=white" alt="Discord server" /></a>
+ <a href="https://www.npmjs.com/package/@discordjs/formatters"><img src="https://img.shields.io/npm/v/@discordjs/formatters.svg?maxAge=3600" alt="npm version" /></a>
+ <a href="https://www.npmjs.com/package/@discordjs/formatters"><img src="https://img.shields.io/npm/dt/@discordjs/formatters.svg?maxAge=3600" alt="npm downloads" /></a>
+ <a href="https://github.com/discordjs/discord.js/actions"><img src="https://github.com/discordjs/discord.js/actions/workflows/test.yml/badge.svg" alt="Build status" /></a>
+ <a href="https://codecov.io/gh/discordjs/discord.js" ><img src="https://codecov.io/gh/discordjs/discord.js/branch/main/graph/badge.svg?precision=2&flag=formatters" alt="Code coverage" /></a>
+ </p>
+ <p>
+ <a href="https://vercel.com/?utm_source=discordjs&utm_campaign=oss"><img src="https://raw.githubusercontent.com/discordjs/discord.js/main/.github/powered-by-vercel.svg" alt="Vercel" /></a>
+ <a href="https://www.cloudflare.com"><img src="https://raw.githubusercontent.com/discordjs/discord.js/main/.github/powered-by-workers.png" alt="Cloudflare Workers" height="44" /></a>
+ </p>
+</div>
+
+## About
+
+`@discordjs/formatters` is a collection of functions for formatting strings to be used on Discord.
+
+## Installation
+
+**Node.js 16.11.0 or newer is required.**
+
+```sh
+npm install @discordjs/formatters
+yarn add @discordjs/formatters
+pnpm add @discordjs/formatters
+```
+
+## Example usage
+
+````ts
+import { codeBlock } from '@discordjs/formatters';
+
+const formattedCode = codeBlock('hello world!');
+console.log(formattedCode);
+
+// Prints:
+// ```
+// hello world!
+// ```
+````
+
+## Links
+
+- [Website][website] ([source][website-source])
+- [Documentation][documentation]
+- [Guide][guide] ([source][guide-source])
+ Also see the v13 to v14 [Update Guide][guide-update], which includes updated and removed items from the library.
+- [discord.js Discord server][discord]
+- [Discord API Discord server][discord-api]
+- [GitHub][source]
+- [npm][npm]
+- [Related libraries][related-libs]
+
+## Contributing
+
+Before creating an issue, please ensure that it hasn't already been reported/suggested, and double-check the
+[documentation][documentation].
+See [the contribution guide][contributing] if you'd like to submit a PR.
+
+## Help
+
+If you don't understand something in the documentation, you are experiencing problems, or you just need a gentle nudge in the right direction, please don't hesitate to join our official [discord.js Server][discord].
+
+[website]: https://discord.js.org
+[website-source]: https://github.com/discordjs/discord.js/tree/main/apps/website
+[documentation]: https://discord.js.org/docs/packages/formatters/stable
+[guide]: https://discordjs.guide/
+[guide-source]: https://github.com/discordjs/guide
+[guide-update]: https://discordjs.guide/additional-info/changes-in-v14.html
+[discord]: https://discord.gg/djs
+[discord-api]: https://discord.gg/discord-api
+[source]: https://github.com/discordjs/discord.js/tree/main/packages/formatters
+[npm]: https://www.npmjs.com/package/@discordjs/formatters
+[related-libs]: https://discord.com/developers/docs/topics/community-resources#libraries
+[contributing]: https://github.com/discordjs/discord.js/blob/main/.github/CONTRIBUTING.md
diff --git a/node_modules/@discordjs/formatters/dist/index.d.mts b/node_modules/@discordjs/formatters/dist/index.d.mts
new file mode 100644
index 0000000..383d71a
--- /dev/null
+++ b/node_modules/@discordjs/formatters/dist/index.d.mts
@@ -0,0 +1,511 @@
+import { URL } from 'node:url';
+import { Snowflake } from 'discord-api-types/globals';
+
+/**
+ * The options that affect what will be escaped.
+ */
+interface EscapeMarkdownOptions {
+ /**
+ * Whether to escape bold text.
+ *
+ * @defaultValue `true`
+ */
+ bold?: boolean;
+ /**
+ * Whether to escape bulleted lists.
+ *
+ * @defaultValue `false`
+ */
+ bulletedList?: boolean;
+ /**
+ * Whether to escape code blocks.
+ *
+ * @defaultValue `true`
+ */
+ codeBlock?: boolean;
+ /**
+ * Whether to escape text inside code blocks.
+ *
+ * @defaultValue `true`
+ */
+ codeBlockContent?: boolean;
+ /**
+ * Whether to escape `\`.
+ *
+ * @defaultValue `true`
+ */
+ escape?: boolean;
+ /**
+ * Whether to escape headings.
+ *
+ * @defaultValue `false`
+ */
+ heading?: boolean;
+ /**
+ * Whether to escape inline code.
+ *
+ * @defaultValue `true`
+ */
+ inlineCode?: boolean;
+ /**
+ * Whether to escape text inside inline code.
+ *
+ * @defaultValue `true`
+ */
+ inlineCodeContent?: boolean;
+ /**
+ * Whether to escape italics.
+ *
+ * @defaultValue `true`
+ */
+ italic?: boolean;
+ /**
+ * Whether to escape masked links.
+ *
+ * @defaultValue `false`
+ */
+ maskedLink?: boolean;
+ /**
+ * Whether to escape numbered lists.
+ *
+ * @defaultValue `false`
+ */
+ numberedList?: boolean;
+ /**
+ * Whether to escape spoilers.
+ *
+ * @defaultValue `true`
+ */
+ spoiler?: boolean;
+ /**
+ * Whether to escape strikethroughs.
+ *
+ * @defaultValue `true`
+ */
+ strikethrough?: boolean;
+ /**
+ * Whether to escape underlines.
+ *
+ * @defaultValue `true`
+ */
+ underline?: boolean;
+}
+/**
+ * Escapes any Discord-flavored markdown in a string.
+ *
+ * @param text - Content to escape
+ * @param options - Options for escaping the markdown
+ */
+declare function escapeMarkdown(text: string, options?: EscapeMarkdownOptions): string;
+/**
+ * Escapes code block markdown in a string.
+ *
+ * @param text - Content to escape
+ */
+declare function escapeCodeBlock(text: string): string;
+/**
+ * Escapes inline code markdown in a string.
+ *
+ * @param text - Content to escape
+ */
+declare function escapeInlineCode(text: string): string;
+/**
+ * Escapes italic markdown in a string.
+ *
+ * @param text - Content to escape
+ */
+declare function escapeItalic(text: string): string;
+/**
+ * Escapes bold markdown in a string.
+ *
+ * @param text - Content to escape
+ */
+declare function escapeBold(text: string): string;
+/**
+ * Escapes underline markdown in a string.
+ *
+ * @param text - Content to escape
+ */
+declare function escapeUnderline(text: string): string;
+/**
+ * Escapes strikethrough markdown in a string.
+ *
+ * @param text - Content to escape
+ */
+declare function escapeStrikethrough(text: string): string;
+/**
+ * Escapes spoiler markdown in a string.
+ *
+ * @param text - Content to escape
+ */
+declare function escapeSpoiler(text: string): string;
+/**
+ * Escapes escape characters in a string.
+ *
+ * @param text - Content to escape
+ */
+declare function escapeEscape(text: string): string;
+/**
+ * Escapes heading characters in a string.
+ *
+ * @param text - Content to escape
+ */
+declare function escapeHeading(text: string): string;
+/**
+ * Escapes bulleted list characters in a string.
+ *
+ * @param text - Content to escape
+ */
+declare function escapeBulletedList(text: string): string;
+/**
+ * Escapes numbered list characters in a string.
+ *
+ * @param text - Content to escape
+ */
+declare function escapeNumberedList(text: string): string;
+/**
+ * Escapes masked link characters in a string.
+ *
+ * @param text - Content to escape
+ */
+declare function escapeMaskedLink(text: string): string;
+
+/**
+ * Wraps the content inside a code block with no language.
+ *
+ * @typeParam C - This is inferred by the supplied content
+ * @param content - The content to wrap
+ */
+declare function codeBlock<C extends string>(content: C): `\`\`\`\n${C}\n\`\`\``;
+/**
+ * Wraps the content inside a code block with the specified language.
+ *
+ * @typeParam L - This is inferred by the supplied language
+ * @typeParam C - This is inferred by the supplied content
+ * @param language - The language for the code block
+ * @param content - The content to wrap
+ */
+declare function codeBlock<L extends string, C extends string>(language: L, content: C): `\`\`\`${L}\n${C}\n\`\`\``;
+/**
+ * Wraps the content inside \`backticks\` which formats it as inline code.
+ *
+ * @typeParam C - This is inferred by the supplied content
+ * @param content - The content to wrap
+ */
+declare function inlineCode<C extends string>(content: C): `\`${C}\``;
+/**
+ * Formats the content into italic text.
+ *
+ * @typeParam C - This is inferred by the supplied content
+ * @param content - The content to wrap
+ */
+declare function italic<C extends string>(content: C): `_${C}_`;
+/**
+ * Formats the content into bold text.
+ *
+ * @typeParam C - This is inferred by the supplied content
+ * @param content - The content to wrap
+ */
+declare function bold<C extends string>(content: C): `**${C}**`;
+/**
+ * Formats the content into underscored text.
+ *
+ * @typeParam C - This is inferred by the supplied content
+ * @param content - The content to wrap
+ */
+declare function underscore<C extends string>(content: C): `__${C}__`;
+/**
+ * Formats the content into strike-through text.
+ *
+ * @typeParam C - This is inferred by the supplied content
+ * @param content - The content to wrap
+ */
+declare function strikethrough<C extends string>(content: C): `~~${C}~~`;
+/**
+ * Formats the content into a quote.
+ *
+ * @remarks This needs to be at the start of the line for Discord to format it.
+ * @typeParam C - This is inferred by the supplied content
+ * @param content - The content to wrap
+ */
+declare function quote<C extends string>(content: C): `> ${C}`;
+/**
+ * Formats the content into a block quote.
+ *
+ * @remarks This needs to be at the start of the line for Discord to format it.
+ * @typeParam C - This is inferred by the supplied content
+ * @param content - The content to wrap
+ */
+declare function blockQuote<C extends string>(content: C): `>>> ${C}`;
+/**
+ * Wraps the URL into `<>` which stops it from embedding.
+ *
+ * @typeParam C - This is inferred by the supplied content
+ * @param url - The URL to wrap
+ */
+declare function hideLinkEmbed<C extends string>(url: C): `<${C}>`;
+/**
+ * Wraps the URL into `<>` which stops it from embedding.
+ *
+ * @param url - The URL to wrap
+ */
+declare function hideLinkEmbed(url: URL): `<${string}>`;
+/**
+ * Formats the content and the URL into a masked URL.
+ *
+ * @typeParam C - This is inferred by the supplied content
+ * @param content - The content to display
+ * @param url - The URL the content links to
+ */
+declare function hyperlink<C extends string>(content: C, url: URL): `[${C}](${string})`;
+/**
+ * Formats the content and the URL into a masked URL.
+ *
+ * @typeParam C - This is inferred by the supplied content
+ * @typeParam U - This is inferred by the supplied URL
+ * @param content - The content to display
+ * @param url - The URL the content links to
+ */
+declare function hyperlink<C extends string, U extends string>(content: C, url: U): `[${C}](${U})`;
+/**
+ * Formats the content and the URL into a masked URL with a custom tooltip.
+ *
+ * @typeParam C - This is inferred by the supplied content
+ * @typeParam T - This is inferred by the supplied title
+ * @param content - The content to display
+ * @param url - The URL the content links to
+ * @param title - The title shown when hovering on the masked link
+ */
+declare function hyperlink<C extends string, T extends string>(content: C, url: URL, title: T): `[${C}](${string} "${T}")`;
+/**
+ * Formats the content and the URL into a masked URL with a custom tooltip.
+ *
+ * @typeParam C - This is inferred by the supplied content
+ * @typeParam U - This is inferred by the supplied URL
+ * @typeParam T - This is inferred by the supplied title
+ * @param content - The content to display
+ * @param url - The URL the content links to
+ * @param title - The title shown when hovering on the masked link
+ */
+declare function hyperlink<C extends string, U extends string, T extends string>(content: C, url: U, title: T): `[${C}](${U} "${T}")`;
+/**
+ * Formats the content into a spoiler.
+ *
+ * @typeParam C - This is inferred by the supplied content
+ * @param content - The content to wrap
+ */
+declare function spoiler<C extends string>(content: C): `||${C}||`;
+/**
+ * Formats a user id into a user mention.
+ *
+ * @typeParam C - This is inferred by the supplied user id
+ * @param userId - The user id to format
+ */
+declare function userMention<C extends Snowflake>(userId: C): `<@${C}>`;
+/**
+ * Formats a channel id into a channel mention.
+ *
+ * @typeParam C - This is inferred by the supplied channel id
+ * @param channelId - The channel id to format
+ */
+declare function channelMention<C extends Snowflake>(channelId: C): `<#${C}>`;
+/**
+ * Formats a role id into a role mention.
+ *
+ * @typeParam C - This is inferred by the supplied role id
+ * @param roleId - The role id to format
+ */
+declare function roleMention<C extends Snowflake>(roleId: C): `<@&${C}>`;
+/**
+ * Formats an application command name, subcommand group name, subcommand name, and id into an application command mention.
+ *
+ * @typeParam N - This is inferred by the supplied command name
+ * @typeParam G - This is inferred by the supplied subcommand group name
+ * @typeParam S - This is inferred by the supplied subcommand name
+ * @typeParam I - This is inferred by the supplied command id
+ * @param commandName - The application command name to format
+ * @param subcommandGroupName - The subcommand group name to format
+ * @param subcommandName - The subcommand name to format
+ * @param commandId - The application command id to format
+ */
+declare function chatInputApplicationCommandMention<N extends string, G extends string, S extends string, I extends Snowflake>(commandName: N, subcommandGroupName: G, subcommandName: S, commandId: I): `</${N} ${G} ${S}:${I}>`;
+/**
+ * Formats an application command name, subcommand name, and id into an application command mention.
+ *
+ * @typeParam N - This is inferred by the supplied command name
+ * @typeParam S - This is inferred by the supplied subcommand name
+ * @typeParam I - This is inferred by the supplied command id
+ * @param commandName - The application command name to format
+ * @param subcommandName - The subcommand name to format
+ * @param commandId - The application command id to format
+ */
+declare function chatInputApplicationCommandMention<N extends string, S extends string, I extends Snowflake>(commandName: N, subcommandName: S, commandId: I): `</${N} ${S}:${I}>`;
+/**
+ * Formats an application command name and id into an application command mention.
+ *
+ * @typeParam N - This is inferred by the supplied command name
+ * @typeParam I - This is inferred by the supplied command id
+ * @param commandName - The application command name to format
+ * @param commandId - The application command id to format
+ */
+declare function chatInputApplicationCommandMention<N extends string, I extends Snowflake>(commandName: N, commandId: I): `</${N}:${I}>`;
+/**
+ * Formats a non-animated emoji id into a fully qualified emoji identifier.
+ *
+ * @typeParam C - This is inferred by the supplied emoji id
+ * @param emojiId - The emoji id to format
+ */
+declare function formatEmoji<C extends Snowflake>(emojiId: C, animated?: false): `<:_:${C}>`;
+/**
+ * Formats an animated emoji id into a fully qualified emoji identifier.
+ *
+ * @typeParam C - This is inferred by the supplied emoji id
+ * @param emojiId - The emoji id to format
+ * @param animated - Whether the emoji is animated
+ */
+declare function formatEmoji<C extends Snowflake>(emojiId: C, animated?: true): `<a:_:${C}>`;
+/**
+ * Formats an emoji id into a fully qualified emoji identifier.
+ *
+ * @typeParam C - This is inferred by the supplied emoji id
+ * @param emojiId - The emoji id to format
+ * @param animated - Whether the emoji is animated
+ */
+declare function formatEmoji<C extends Snowflake>(emojiId: C, animated?: boolean): `<:_:${C}>` | `<a:_:${C}>`;
+/**
+ * Formats a channel link for a direct message channel.
+ *
+ * @typeParam C - This is inferred by the supplied channel id
+ * @param channelId - The channel's id
+ */
+declare function channelLink<C extends Snowflake>(channelId: C): `https://discord.com/channels/@me/${C}`;
+/**
+ * Formats a channel link for a guild channel.
+ *
+ * @typeParam C - This is inferred by the supplied channel id
+ * @typeParam G - This is inferred by the supplied guild id
+ * @param channelId - The channel's id
+ * @param guildId - The guild's id
+ */
+declare function channelLink<C extends Snowflake, G extends Snowflake>(channelId: C, guildId: G): `https://discord.com/channels/${G}/${C}`;
+/**
+ * Formats a message link for a direct message channel.
+ *
+ * @typeParam C - This is inferred by the supplied channel id
+ * @typeParam M - This is inferred by the supplied message id
+ * @param channelId - The channel's id
+ * @param messageId - The message's id
+ */
+declare function messageLink<C extends Snowflake, M extends Snowflake>(channelId: C, messageId: M): `https://discord.com/channels/@me/${C}/${M}`;
+/**
+ * Formats a message link for a guild channel.
+ *
+ * @typeParam C - This is inferred by the supplied channel id
+ * @typeParam M - This is inferred by the supplied message id
+ * @typeParam G - This is inferred by the supplied guild id
+ * @param channelId - The channel's id
+ * @param messageId - The message's id
+ * @param guildId - The guild's id
+ */
+declare function messageLink<C extends Snowflake, M extends Snowflake, G extends Snowflake>(channelId: C, messageId: M, guildId: G): `https://discord.com/channels/${G}/${C}/${M}`;
+/**
+ * Formats a date into a short date-time string.
+ *
+ * @param date - The date to format. Defaults to the current time
+ */
+declare function time(date?: Date): `<t:${bigint}>`;
+/**
+ * Formats a date given a format style.
+ *
+ * @typeParam S - This is inferred by the supplied {@link TimestampStylesString}
+ * @param date - The date to format
+ * @param style - The style to use
+ */
+declare function time<S extends TimestampStylesString>(date: Date, style: S): `<t:${bigint}:${S}>`;
+/**
+ * Formats the given timestamp into a short date-time string.
+ *
+ * @typeParam C - This is inferred by the supplied timestamp
+ * @param seconds - A Unix timestamp in seconds
+ */
+declare function time<C extends number>(seconds: C): `<t:${C}>`;
+/**
+ * Formats the given timestamp into a short date-time string.
+ *
+ * @typeParam C - This is inferred by the supplied timestamp
+ * @typeParam S - This is inferred by the supplied {@link TimestampStylesString}
+ * @param seconds - A Unix timestamp in seconds
+ * @param style - The style to use
+ */
+declare function time<C extends number, S extends TimestampStylesString>(seconds: C, style: S): `<t:${C}:${S}>`;
+/**
+ * The {@link https://discord.com/developers/docs/reference#message-formatting-timestamp-styles | message formatting timestamp styles}
+ * supported by Discord.
+ */
+declare const TimestampStyles: {
+ /**
+ * Short time format, consisting of hours and minutes.
+ *
+ * @example `16:20`
+ */
+ readonly ShortTime: "t";
+ /**
+ * Long time format, consisting of hours, minutes, and seconds.
+ *
+ * @example `16:20:30`
+ */
+ readonly LongTime: "T";
+ /**
+ * Short date format, consisting of day, month, and year.
+ *
+ * @example `20/04/2021`
+ */
+ readonly ShortDate: "d";
+ /**
+ * Long date format, consisting of day, month, and year.
+ *
+ * @example `20 April 2021`
+ */
+ readonly LongDate: "D";
+ /**
+ * Short date-time format, consisting of short date and short time formats.
+ *
+ * @example `20 April 2021 16:20`
+ */
+ readonly ShortDateTime: "f";
+ /**
+ * Long date-time format, consisting of long date and short time formats.
+ *
+ * @example `Tuesday, 20 April 2021 16:20`
+ */
+ readonly LongDateTime: "F";
+ /**
+ * Relative time format, consisting of a relative duration format.
+ *
+ * @example `2 months ago`
+ */
+ readonly RelativeTime: "R";
+};
+/**
+ * The possible {@link TimestampStyles} values.
+ */
+type TimestampStylesString = (typeof TimestampStyles)[keyof typeof TimestampStyles];
+/**
+ * All the available faces from Discord's native slash commands.
+ */
+declare enum Faces {
+ /**
+ * `¯\_(ツ)_/¯`
+ */
+ Shrug = "\u00AF_(\u30C4)_/\u00AF",
+ /**
+ * `(╯°□°)╯︵ ┻━┻`
+ */
+ Tableflip = "(\u256F\u00B0\u25A1\u00B0)\u256F\uFE35 \u253B\u2501\u253B",
+ /**
+ * `┬─┬ノ( º _ ºノ)`
+ */
+ Unflip = "\u252C\u2500\u252C\u30CE( \u00BA _ \u00BA\u30CE)"
+}
+
+export { EscapeMarkdownOptions, Faces, TimestampStyles, TimestampStylesString, blockQuote, bold, channelLink, channelMention, chatInputApplicationCommandMention, codeBlock, escapeBold, escapeBulletedList, escapeCodeBlock, escapeEscape, escapeHeading, escapeInlineCode, escapeItalic, escapeMarkdown, escapeMaskedLink, escapeNumberedList, escapeSpoiler, escapeStrikethrough, escapeUnderline, formatEmoji, hideLinkEmbed, hyperlink, inlineCode, italic, messageLink, quote, roleMention, spoiler, strikethrough, time, underscore, userMention };
diff --git a/node_modules/@discordjs/formatters/dist/index.d.ts b/node_modules/@discordjs/formatters/dist/index.d.ts
new file mode 100644
index 0000000..383d71a
--- /dev/null
+++ b/node_modules/@discordjs/formatters/dist/index.d.ts
@@ -0,0 +1,511 @@
+import { URL } from 'node:url';
+import { Snowflake } from 'discord-api-types/globals';
+
+/**
+ * The options that affect what will be escaped.
+ */
+interface EscapeMarkdownOptions {
+ /**
+ * Whether to escape bold text.
+ *
+ * @defaultValue `true`
+ */
+ bold?: boolean;
+ /**
+ * Whether to escape bulleted lists.
+ *
+ * @defaultValue `false`
+ */
+ bulletedList?: boolean;
+ /**
+ * Whether to escape code blocks.
+ *
+ * @defaultValue `true`
+ */
+ codeBlock?: boolean;
+ /**
+ * Whether to escape text inside code blocks.
+ *
+ * @defaultValue `true`
+ */
+ codeBlockContent?: boolean;
+ /**
+ * Whether to escape `\`.
+ *
+ * @defaultValue `true`
+ */
+ escape?: boolean;
+ /**
+ * Whether to escape headings.
+ *
+ * @defaultValue `false`
+ */
+ heading?: boolean;
+ /**
+ * Whether to escape inline code.
+ *
+ * @defaultValue `true`
+ */
+ inlineCode?: boolean;
+ /**
+ * Whether to escape text inside inline code.
+ *
+ * @defaultValue `true`
+ */
+ inlineCodeContent?: boolean;
+ /**
+ * Whether to escape italics.
+ *
+ * @defaultValue `true`
+ */
+ italic?: boolean;
+ /**
+ * Whether to escape masked links.
+ *
+ * @defaultValue `false`
+ */
+ maskedLink?: boolean;
+ /**
+ * Whether to escape numbered lists.
+ *
+ * @defaultValue `false`
+ */
+ numberedList?: boolean;
+ /**
+ * Whether to escape spoilers.
+ *
+ * @defaultValue `true`
+ */
+ spoiler?: boolean;
+ /**
+ * Whether to escape strikethroughs.
+ *
+ * @defaultValue `true`
+ */
+ strikethrough?: boolean;
+ /**
+ * Whether to escape underlines.
+ *
+ * @defaultValue `true`
+ */
+ underline?: boolean;
+}
+/**
+ * Escapes any Discord-flavored markdown in a string.
+ *
+ * @param text - Content to escape
+ * @param options - Options for escaping the markdown
+ */
+declare function escapeMarkdown(text: string, options?: EscapeMarkdownOptions): string;
+/**
+ * Escapes code block markdown in a string.
+ *
+ * @param text - Content to escape
+ */
+declare function escapeCodeBlock(text: string): string;
+/**
+ * Escapes inline code markdown in a string.
+ *
+ * @param text - Content to escape
+ */
+declare function escapeInlineCode(text: string): string;
+/**
+ * Escapes italic markdown in a string.
+ *
+ * @param text - Content to escape
+ */
+declare function escapeItalic(text: string): string;
+/**
+ * Escapes bold markdown in a string.
+ *
+ * @param text - Content to escape
+ */
+declare function escapeBold(text: string): string;
+/**
+ * Escapes underline markdown in a string.
+ *
+ * @param text - Content to escape
+ */
+declare function escapeUnderline(text: string): string;
+/**
+ * Escapes strikethrough markdown in a string.
+ *
+ * @param text - Content to escape
+ */
+declare function escapeStrikethrough(text: string): string;
+/**
+ * Escapes spoiler markdown in a string.
+ *
+ * @param text - Content to escape
+ */
+declare function escapeSpoiler(text: string): string;
+/**
+ * Escapes escape characters in a string.
+ *
+ * @param text - Content to escape
+ */
+declare function escapeEscape(text: string): string;
+/**
+ * Escapes heading characters in a string.
+ *
+ * @param text - Content to escape
+ */
+declare function escapeHeading(text: string): string;
+/**
+ * Escapes bulleted list characters in a string.
+ *
+ * @param text - Content to escape
+ */
+declare function escapeBulletedList(text: string): string;
+/**
+ * Escapes numbered list characters in a string.
+ *
+ * @param text - Content to escape
+ */
+declare function escapeNumberedList(text: string): string;
+/**
+ * Escapes masked link characters in a string.
+ *
+ * @param text - Content to escape
+ */
+declare function escapeMaskedLink(text: string): string;
+
+/**
+ * Wraps the content inside a code block with no language.
+ *
+ * @typeParam C - This is inferred by the supplied content
+ * @param content - The content to wrap
+ */
+declare function codeBlock<C extends string>(content: C): `\`\`\`\n${C}\n\`\`\``;
+/**
+ * Wraps the content inside a code block with the specified language.
+ *
+ * @typeParam L - This is inferred by the supplied language
+ * @typeParam C - This is inferred by the supplied content
+ * @param language - The language for the code block
+ * @param content - The content to wrap
+ */
+declare function codeBlock<L extends string, C extends string>(language: L, content: C): `\`\`\`${L}\n${C}\n\`\`\``;
+/**
+ * Wraps the content inside \`backticks\` which formats it as inline code.
+ *
+ * @typeParam C - This is inferred by the supplied content
+ * @param content - The content to wrap
+ */
+declare function inlineCode<C extends string>(content: C): `\`${C}\``;
+/**
+ * Formats the content into italic text.
+ *
+ * @typeParam C - This is inferred by the supplied content
+ * @param content - The content to wrap
+ */
+declare function italic<C extends string>(content: C): `_${C}_`;
+/**
+ * Formats the content into bold text.
+ *
+ * @typeParam C - This is inferred by the supplied content
+ * @param content - The content to wrap
+ */
+declare function bold<C extends string>(content: C): `**${C}**`;
+/**
+ * Formats the content into underscored text.
+ *
+ * @typeParam C - This is inferred by the supplied content
+ * @param content - The content to wrap
+ */
+declare function underscore<C extends string>(content: C): `__${C}__`;
+/**
+ * Formats the content into strike-through text.
+ *
+ * @typeParam C - This is inferred by the supplied content
+ * @param content - The content to wrap
+ */
+declare function strikethrough<C extends string>(content: C): `~~${C}~~`;
+/**
+ * Formats the content into a quote.
+ *
+ * @remarks This needs to be at the start of the line for Discord to format it.
+ * @typeParam C - This is inferred by the supplied content
+ * @param content - The content to wrap
+ */
+declare function quote<C extends string>(content: C): `> ${C}`;
+/**
+ * Formats the content into a block quote.
+ *
+ * @remarks This needs to be at the start of the line for Discord to format it.
+ * @typeParam C - This is inferred by the supplied content
+ * @param content - The content to wrap
+ */
+declare function blockQuote<C extends string>(content: C): `>>> ${C}`;
+/**
+ * Wraps the URL into `<>` which stops it from embedding.
+ *
+ * @typeParam C - This is inferred by the supplied content
+ * @param url - The URL to wrap
+ */
+declare function hideLinkEmbed<C extends string>(url: C): `<${C}>`;
+/**
+ * Wraps the URL into `<>` which stops it from embedding.
+ *
+ * @param url - The URL to wrap
+ */
+declare function hideLinkEmbed(url: URL): `<${string}>`;
+/**
+ * Formats the content and the URL into a masked URL.
+ *
+ * @typeParam C - This is inferred by the supplied content
+ * @param content - The content to display
+ * @param url - The URL the content links to
+ */
+declare function hyperlink<C extends string>(content: C, url: URL): `[${C}](${string})`;
+/**
+ * Formats the content and the URL into a masked URL.
+ *
+ * @typeParam C - This is inferred by the supplied content
+ * @typeParam U - This is inferred by the supplied URL
+ * @param content - The content to display
+ * @param url - The URL the content links to
+ */
+declare function hyperlink<C extends string, U extends string>(content: C, url: U): `[${C}](${U})`;
+/**
+ * Formats the content and the URL into a masked URL with a custom tooltip.
+ *
+ * @typeParam C - This is inferred by the supplied content
+ * @typeParam T - This is inferred by the supplied title
+ * @param content - The content to display
+ * @param url - The URL the content links to
+ * @param title - The title shown when hovering on the masked link
+ */
+declare function hyperlink<C extends string, T extends string>(content: C, url: URL, title: T): `[${C}](${string} "${T}")`;
+/**
+ * Formats the content and the URL into a masked URL with a custom tooltip.
+ *
+ * @typeParam C - This is inferred by the supplied content
+ * @typeParam U - This is inferred by the supplied URL
+ * @typeParam T - This is inferred by the supplied title
+ * @param content - The content to display
+ * @param url - The URL the content links to
+ * @param title - The title shown when hovering on the masked link
+ */
+declare function hyperlink<C extends string, U extends string, T extends string>(content: C, url: U, title: T): `[${C}](${U} "${T}")`;
+/**
+ * Formats the content into a spoiler.
+ *
+ * @typeParam C - This is inferred by the supplied content
+ * @param content - The content to wrap
+ */
+declare function spoiler<C extends string>(content: C): `||${C}||`;
+/**
+ * Formats a user id into a user mention.
+ *
+ * @typeParam C - This is inferred by the supplied user id
+ * @param userId - The user id to format
+ */
+declare function userMention<C extends Snowflake>(userId: C): `<@${C}>`;
+/**
+ * Formats a channel id into a channel mention.
+ *
+ * @typeParam C - This is inferred by the supplied channel id
+ * @param channelId - The channel id to format
+ */
+declare function channelMention<C extends Snowflake>(channelId: C): `<#${C}>`;
+/**
+ * Formats a role id into a role mention.
+ *
+ * @typeParam C - This is inferred by the supplied role id
+ * @param roleId - The role id to format
+ */
+declare function roleMention<C extends Snowflake>(roleId: C): `<@&${C}>`;
+/**
+ * Formats an application command name, subcommand group name, subcommand name, and id into an application command mention.
+ *
+ * @typeParam N - This is inferred by the supplied command name
+ * @typeParam G - This is inferred by the supplied subcommand group name
+ * @typeParam S - This is inferred by the supplied subcommand name
+ * @typeParam I - This is inferred by the supplied command id
+ * @param commandName - The application command name to format
+ * @param subcommandGroupName - The subcommand group name to format
+ * @param subcommandName - The subcommand name to format
+ * @param commandId - The application command id to format
+ */
+declare function chatInputApplicationCommandMention<N extends string, G extends string, S extends string, I extends Snowflake>(commandName: N, subcommandGroupName: G, subcommandName: S, commandId: I): `</${N} ${G} ${S}:${I}>`;
+/**
+ * Formats an application command name, subcommand name, and id into an application command mention.
+ *
+ * @typeParam N - This is inferred by the supplied command name
+ * @typeParam S - This is inferred by the supplied subcommand name
+ * @typeParam I - This is inferred by the supplied command id
+ * @param commandName - The application command name to format
+ * @param subcommandName - The subcommand name to format
+ * @param commandId - The application command id to format
+ */
+declare function chatInputApplicationCommandMention<N extends string, S extends string, I extends Snowflake>(commandName: N, subcommandName: S, commandId: I): `</${N} ${S}:${I}>`;
+/**
+ * Formats an application command name and id into an application command mention.
+ *
+ * @typeParam N - This is inferred by the supplied command name
+ * @typeParam I - This is inferred by the supplied command id
+ * @param commandName - The application command name to format
+ * @param commandId - The application command id to format
+ */
+declare function chatInputApplicationCommandMention<N extends string, I extends Snowflake>(commandName: N, commandId: I): `</${N}:${I}>`;
+/**
+ * Formats a non-animated emoji id into a fully qualified emoji identifier.
+ *
+ * @typeParam C - This is inferred by the supplied emoji id
+ * @param emojiId - The emoji id to format
+ */
+declare function formatEmoji<C extends Snowflake>(emojiId: C, animated?: false): `<:_:${C}>`;
+/**
+ * Formats an animated emoji id into a fully qualified emoji identifier.
+ *
+ * @typeParam C - This is inferred by the supplied emoji id
+ * @param emojiId - The emoji id to format
+ * @param animated - Whether the emoji is animated
+ */
+declare function formatEmoji<C extends Snowflake>(emojiId: C, animated?: true): `<a:_:${C}>`;
+/**
+ * Formats an emoji id into a fully qualified emoji identifier.
+ *
+ * @typeParam C - This is inferred by the supplied emoji id
+ * @param emojiId - The emoji id to format
+ * @param animated - Whether the emoji is animated
+ */
+declare function formatEmoji<C extends Snowflake>(emojiId: C, animated?: boolean): `<:_:${C}>` | `<a:_:${C}>`;
+/**
+ * Formats a channel link for a direct message channel.
+ *
+ * @typeParam C - This is inferred by the supplied channel id
+ * @param channelId - The channel's id
+ */
+declare function channelLink<C extends Snowflake>(channelId: C): `https://discord.com/channels/@me/${C}`;
+/**
+ * Formats a channel link for a guild channel.
+ *
+ * @typeParam C - This is inferred by the supplied channel id
+ * @typeParam G - This is inferred by the supplied guild id
+ * @param channelId - The channel's id
+ * @param guildId - The guild's id
+ */
+declare function channelLink<C extends Snowflake, G extends Snowflake>(channelId: C, guildId: G): `https://discord.com/channels/${G}/${C}`;
+/**
+ * Formats a message link for a direct message channel.
+ *
+ * @typeParam C - This is inferred by the supplied channel id
+ * @typeParam M - This is inferred by the supplied message id
+ * @param channelId - The channel's id
+ * @param messageId - The message's id
+ */
+declare function messageLink<C extends Snowflake, M extends Snowflake>(channelId: C, messageId: M): `https://discord.com/channels/@me/${C}/${M}`;
+/**
+ * Formats a message link for a guild channel.
+ *
+ * @typeParam C - This is inferred by the supplied channel id
+ * @typeParam M - This is inferred by the supplied message id
+ * @typeParam G - This is inferred by the supplied guild id
+ * @param channelId - The channel's id
+ * @param messageId - The message's id
+ * @param guildId - The guild's id
+ */
+declare function messageLink<C extends Snowflake, M extends Snowflake, G extends Snowflake>(channelId: C, messageId: M, guildId: G): `https://discord.com/channels/${G}/${C}/${M}`;
+/**
+ * Formats a date into a short date-time string.
+ *
+ * @param date - The date to format. Defaults to the current time
+ */
+declare function time(date?: Date): `<t:${bigint}>`;
+/**
+ * Formats a date given a format style.
+ *
+ * @typeParam S - This is inferred by the supplied {@link TimestampStylesString}
+ * @param date - The date to format
+ * @param style - The style to use
+ */
+declare function time<S extends TimestampStylesString>(date: Date, style: S): `<t:${bigint}:${S}>`;
+/**
+ * Formats the given timestamp into a short date-time string.
+ *
+ * @typeParam C - This is inferred by the supplied timestamp
+ * @param seconds - A Unix timestamp in seconds
+ */
+declare function time<C extends number>(seconds: C): `<t:${C}>`;
+/**
+ * Formats the given timestamp into a short date-time string.
+ *
+ * @typeParam C - This is inferred by the supplied timestamp
+ * @typeParam S - This is inferred by the supplied {@link TimestampStylesString}
+ * @param seconds - A Unix timestamp in seconds
+ * @param style - The style to use
+ */
+declare function time<C extends number, S extends TimestampStylesString>(seconds: C, style: S): `<t:${C}:${S}>`;
+/**
+ * The {@link https://discord.com/developers/docs/reference#message-formatting-timestamp-styles | message formatting timestamp styles}
+ * supported by Discord.
+ */
+declare const TimestampStyles: {
+ /**
+ * Short time format, consisting of hours and minutes.
+ *
+ * @example `16:20`
+ */
+ readonly ShortTime: "t";
+ /**
+ * Long time format, consisting of hours, minutes, and seconds.
+ *
+ * @example `16:20:30`
+ */
+ readonly LongTime: "T";
+ /**
+ * Short date format, consisting of day, month, and year.
+ *
+ * @example `20/04/2021`
+ */
+ readonly ShortDate: "d";
+ /**
+ * Long date format, consisting of day, month, and year.
+ *
+ * @example `20 April 2021`
+ */
+ readonly LongDate: "D";
+ /**
+ * Short date-time format, consisting of short date and short time formats.
+ *
+ * @example `20 April 2021 16:20`
+ */
+ readonly ShortDateTime: "f";
+ /**
+ * Long date-time format, consisting of long date and short time formats.
+ *
+ * @example `Tuesday, 20 April 2021 16:20`
+ */
+ readonly LongDateTime: "F";
+ /**
+ * Relative time format, consisting of a relative duration format.
+ *
+ * @example `2 months ago`
+ */
+ readonly RelativeTime: "R";
+};
+/**
+ * The possible {@link TimestampStyles} values.
+ */
+type TimestampStylesString = (typeof TimestampStyles)[keyof typeof TimestampStyles];
+/**
+ * All the available faces from Discord's native slash commands.
+ */
+declare enum Faces {
+ /**
+ * `¯\_(ツ)_/¯`
+ */
+ Shrug = "\u00AF_(\u30C4)_/\u00AF",
+ /**
+ * `(╯°□°)╯︵ ┻━┻`
+ */
+ Tableflip = "(\u256F\u00B0\u25A1\u00B0)\u256F\uFE35 \u253B\u2501\u253B",
+ /**
+ * `┬─┬ノ( º _ ºノ)`
+ */
+ Unflip = "\u252C\u2500\u252C\u30CE( \u00BA _ \u00BA\u30CE)"
+}
+
+export { EscapeMarkdownOptions, Faces, TimestampStyles, TimestampStylesString, blockQuote, bold, channelLink, channelMention, chatInputApplicationCommandMention, codeBlock, escapeBold, escapeBulletedList, escapeCodeBlock, escapeEscape, escapeHeading, escapeInlineCode, escapeItalic, escapeMarkdown, escapeMaskedLink, escapeNumberedList, escapeSpoiler, escapeStrikethrough, escapeUnderline, formatEmoji, hideLinkEmbed, hyperlink, inlineCode, italic, messageLink, quote, roleMention, spoiler, strikethrough, time, underscore, userMention };
diff --git a/node_modules/@discordjs/formatters/dist/index.js b/node_modules/@discordjs/formatters/dist/index.js
new file mode 100644
index 0000000..6fd2653
--- /dev/null
+++ b/node_modules/@discordjs/formatters/dist/index.js
@@ -0,0 +1,393 @@
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
+var __export = (target, all) => {
+ for (var name in all)
+ __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames(from))
+ if (!__hasOwnProp.call(to, key) && key !== except)
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+ }
+ return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// src/index.ts
+var src_exports = {};
+__export(src_exports, {
+ Faces: () => Faces,
+ TimestampStyles: () => TimestampStyles,
+ blockQuote: () => blockQuote,
+ bold: () => bold,
+ channelLink: () => channelLink,
+ channelMention: () => channelMention,
+ chatInputApplicationCommandMention: () => chatInputApplicationCommandMention,
+ codeBlock: () => codeBlock,
+ escapeBold: () => escapeBold,
+ escapeBulletedList: () => escapeBulletedList,
+ escapeCodeBlock: () => escapeCodeBlock,
+ escapeEscape: () => escapeEscape,
+ escapeHeading: () => escapeHeading,
+ escapeInlineCode: () => escapeInlineCode,
+ escapeItalic: () => escapeItalic,
+ escapeMarkdown: () => escapeMarkdown,
+ escapeMaskedLink: () => escapeMaskedLink,
+ escapeNumberedList: () => escapeNumberedList,
+ escapeSpoiler: () => escapeSpoiler,
+ escapeStrikethrough: () => escapeStrikethrough,
+ escapeUnderline: () => escapeUnderline,
+ formatEmoji: () => formatEmoji,
+ hideLinkEmbed: () => hideLinkEmbed,
+ hyperlink: () => hyperlink,
+ inlineCode: () => inlineCode,
+ italic: () => italic,
+ messageLink: () => messageLink,
+ quote: () => quote,
+ roleMention: () => roleMention,
+ spoiler: () => spoiler,
+ strikethrough: () => strikethrough,
+ time: () => time,
+ underscore: () => underscore,
+ userMention: () => userMention
+});
+module.exports = __toCommonJS(src_exports);
+
+// src/escapers.ts
+function escapeMarkdown(text, options = {}) {
+ const {
+ codeBlock: codeBlock2 = true,
+ inlineCode: inlineCode2 = true,
+ bold: bold2 = true,
+ italic: italic2 = true,
+ underline = true,
+ strikethrough: strikethrough2 = true,
+ spoiler: spoiler2 = true,
+ codeBlockContent = true,
+ inlineCodeContent = true,
+ escape = true,
+ heading = false,
+ bulletedList = false,
+ numberedList = false,
+ maskedLink = false
+ } = options;
+ if (!codeBlockContent) {
+ return text.split("```").map((subString, index, array) => {
+ if (index % 2 && index !== array.length - 1)
+ return subString;
+ return escapeMarkdown(subString, {
+ inlineCode: inlineCode2,
+ bold: bold2,
+ italic: italic2,
+ underline,
+ strikethrough: strikethrough2,
+ spoiler: spoiler2,
+ inlineCodeContent,
+ escape,
+ heading,
+ bulletedList,
+ numberedList,
+ maskedLink
+ });
+ }).join(codeBlock2 ? "\\`\\`\\`" : "```");
+ }
+ if (!inlineCodeContent) {
+ return text.split(/(?<=^|[^`])`(?=[^`]|$)/g).map((subString, index, array) => {
+ if (index % 2 && index !== array.length - 1)
+ return subString;
+ return escapeMarkdown(subString, {
+ codeBlock: codeBlock2,
+ bold: bold2,
+ italic: italic2,
+ underline,
+ strikethrough: strikethrough2,
+ spoiler: spoiler2,
+ escape,
+ heading,
+ bulletedList,
+ numberedList,
+ maskedLink
+ });
+ }).join(inlineCode2 ? "\\`" : "`");
+ }
+ let res = text;
+ if (escape)
+ res = escapeEscape(res);
+ if (inlineCode2)
+ res = escapeInlineCode(res);
+ if (codeBlock2)
+ res = escapeCodeBlock(res);
+ if (italic2)
+ res = escapeItalic(res);
+ if (bold2)
+ res = escapeBold(res);
+ if (underline)
+ res = escapeUnderline(res);
+ if (strikethrough2)
+ res = escapeStrikethrough(res);
+ if (spoiler2)
+ res = escapeSpoiler(res);
+ if (heading)
+ res = escapeHeading(res);
+ if (bulletedList)
+ res = escapeBulletedList(res);
+ if (numberedList)
+ res = escapeNumberedList(res);
+ if (maskedLink)
+ res = escapeMaskedLink(res);
+ return res;
+}
+__name(escapeMarkdown, "escapeMarkdown");
+function escapeCodeBlock(text) {
+ return text.replaceAll("```", "\\`\\`\\`");
+}
+__name(escapeCodeBlock, "escapeCodeBlock");
+function escapeInlineCode(text) {
+ return text.replaceAll(/(?<=^|[^`])``?(?=[^`]|$)/g, (match) => match.length === 2 ? "\\`\\`" : "\\`");
+}
+__name(escapeInlineCode, "escapeInlineCode");
+function escapeItalic(text) {
+ let idx = 0;
+ const newText = text.replaceAll(/(?<=^|[^*])\*([^*]|\*\*|$)/g, (_, match) => {
+ if (match === "**")
+ return ++idx % 2 ? `\\*${match}` : `${match}\\*`;
+ return `\\*${match}`;
+ });
+ idx = 0;
+ return newText.replaceAll(/(?<=^|[^_])(?<!<a?:.+)_(?!:\d+>)([^_]|__|$)/g, (_, match) => {
+ if (match === "__")
+ return ++idx % 2 ? `\\_${match}` : `${match}\\_`;
+ return `\\_${match}`;
+ });
+}
+__name(escapeItalic, "escapeItalic");
+function escapeBold(text) {
+ let idx = 0;
+ return text.replaceAll(/\*\*(\*)?/g, (_, match) => {
+ if (match)
+ return ++idx % 2 ? `${match}\\*\\*` : `\\*\\*${match}`;
+ return "\\*\\*";
+ });
+}
+__name(escapeBold, "escapeBold");
+function escapeUnderline(text) {
+ let idx = 0;
+ return text.replaceAll(/(?<!<a?:.+)__(_)?(?!:\d+>)/g, (_, match) => {
+ if (match)
+ return ++idx % 2 ? `${match}\\_\\_` : `\\_\\_${match}`;
+ return "\\_\\_";
+ });
+}
+__name(escapeUnderline, "escapeUnderline");
+function escapeStrikethrough(text) {
+ return text.replaceAll("~~", "\\~\\~");
+}
+__name(escapeStrikethrough, "escapeStrikethrough");
+function escapeSpoiler(text) {
+ return text.replaceAll("||", "\\|\\|");
+}
+__name(escapeSpoiler, "escapeSpoiler");
+function escapeEscape(text) {
+ return text.replaceAll("\\", "\\\\");
+}
+__name(escapeEscape, "escapeEscape");
+function escapeHeading(text) {
+ return text.replaceAll(/^( {0,2})([*-] )?( *)(#{1,3} )/gm, "$1$2$3\\$4");
+}
+__name(escapeHeading, "escapeHeading");
+function escapeBulletedList(text) {
+ return text.replaceAll(/^( *)([*-])( +)/gm, "$1\\$2$3");
+}
+__name(escapeBulletedList, "escapeBulletedList");
+function escapeNumberedList(text) {
+ return text.replaceAll(/^( *\d+)\./gm, "$1\\.");
+}
+__name(escapeNumberedList, "escapeNumberedList");
+function escapeMaskedLink(text) {
+ return text.replaceAll(/\[.+]\(.+\)/gm, "\\$&");
+}
+__name(escapeMaskedLink, "escapeMaskedLink");
+
+// src/formatters.ts
+function codeBlock(language, content) {
+ return content === void 0 ? `\`\`\`
+${language}
+\`\`\`` : `\`\`\`${language}
+${content}
+\`\`\``;
+}
+__name(codeBlock, "codeBlock");
+function inlineCode(content) {
+ return `\`${content}\``;
+}
+__name(inlineCode, "inlineCode");
+function italic(content) {
+ return `_${content}_`;
+}
+__name(italic, "italic");
+function bold(content) {
+ return `**${content}**`;
+}
+__name(bold, "bold");
+function underscore(content) {
+ return `__${content}__`;
+}
+__name(underscore, "underscore");
+function strikethrough(content) {
+ return `~~${content}~~`;
+}
+__name(strikethrough, "strikethrough");
+function quote(content) {
+ return `> ${content}`;
+}
+__name(quote, "quote");
+function blockQuote(content) {
+ return `>>> ${content}`;
+}
+__name(blockQuote, "blockQuote");
+function hideLinkEmbed(url) {
+ return `<${url}>`;
+}
+__name(hideLinkEmbed, "hideLinkEmbed");
+function hyperlink(content, url, title) {
+ return title ? `[${content}](${url} "${title}")` : `[${content}](${url})`;
+}
+__name(hyperlink, "hyperlink");
+function spoiler(content) {
+ return `||${content}||`;
+}
+__name(spoiler, "spoiler");
+function userMention(userId) {
+ return `<@${userId}>`;
+}
+__name(userMention, "userMention");
+function channelMention(channelId) {
+ return `<#${channelId}>`;
+}
+__name(channelMention, "channelMention");
+function roleMention(roleId) {
+ return `<@&${roleId}>`;
+}
+__name(roleMention, "roleMention");
+function chatInputApplicationCommandMention(commandName, subcommandGroupName, subcommandName, commandId) {
+ if (commandId !== void 0) {
+ return `</${commandName} ${subcommandGroupName} ${subcommandName}:${commandId}>`;
+ }
+ if (subcommandName !== void 0) {
+ return `</${commandName} ${subcommandGroupName}:${subcommandName}>`;
+ }
+ return `</${commandName}:${subcommandGroupName}>`;
+}
+__name(chatInputApplicationCommandMention, "chatInputApplicationCommandMention");
+function formatEmoji(emojiId, animated = false) {
+ return `<${animated ? "a" : ""}:_:${emojiId}>`;
+}
+__name(formatEmoji, "formatEmoji");
+function channelLink(channelId, guildId) {
+ return `https://discord.com/channels/${guildId ?? "@me"}/${channelId}`;
+}
+__name(channelLink, "channelLink");
+function messageLink(channelId, messageId, guildId) {
+ return `${guildId === void 0 ? channelLink(channelId) : channelLink(channelId, guildId)}/${messageId}`;
+}
+__name(messageLink, "messageLink");
+function time(timeOrSeconds, style) {
+ if (typeof timeOrSeconds !== "number") {
+ timeOrSeconds = Math.floor((timeOrSeconds?.getTime() ?? Date.now()) / 1e3);
+ }
+ return typeof style === "string" ? `<t:${timeOrSeconds}:${style}>` : `<t:${timeOrSeconds}>`;
+}
+__name(time, "time");
+var TimestampStyles = {
+ /**
+ * Short time format, consisting of hours and minutes.
+ *
+ * @example `16:20`
+ */
+ ShortTime: "t",
+ /**
+ * Long time format, consisting of hours, minutes, and seconds.
+ *
+ * @example `16:20:30`
+ */
+ LongTime: "T",
+ /**
+ * Short date format, consisting of day, month, and year.
+ *
+ * @example `20/04/2021`
+ */
+ ShortDate: "d",
+ /**
+ * Long date format, consisting of day, month, and year.
+ *
+ * @example `20 April 2021`
+ */
+ LongDate: "D",
+ /**
+ * Short date-time format, consisting of short date and short time formats.
+ *
+ * @example `20 April 2021 16:20`
+ */
+ ShortDateTime: "f",
+ /**
+ * Long date-time format, consisting of long date and short time formats.
+ *
+ * @example `Tuesday, 20 April 2021 16:20`
+ */
+ LongDateTime: "F",
+ /**
+ * Relative time format, consisting of a relative duration format.
+ *
+ * @example `2 months ago`
+ */
+ RelativeTime: "R"
+};
+var Faces = /* @__PURE__ */ ((Faces2) => {
+ Faces2["Shrug"] = "\xAF_(\u30C4)_/\xAF";
+ Faces2["Tableflip"] = "(\u256F\xB0\u25A1\xB0)\u256F\uFE35 \u253B\u2501\u253B";
+ Faces2["Unflip"] = "\u252C\u2500\u252C\u30CE( \xBA _ \xBA\u30CE)";
+ return Faces2;
+})(Faces || {});
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+ Faces,
+ TimestampStyles,
+ blockQuote,
+ bold,
+ channelLink,
+ channelMention,
+ chatInputApplicationCommandMention,
+ codeBlock,
+ escapeBold,
+ escapeBulletedList,
+ escapeCodeBlock,
+ escapeEscape,
+ escapeHeading,
+ escapeInlineCode,
+ escapeItalic,
+ escapeMarkdown,
+ escapeMaskedLink,
+ escapeNumberedList,
+ escapeSpoiler,
+ escapeStrikethrough,
+ escapeUnderline,
+ formatEmoji,
+ hideLinkEmbed,
+ hyperlink,
+ inlineCode,
+ italic,
+ messageLink,
+ quote,
+ roleMention,
+ spoiler,
+ strikethrough,
+ time,
+ underscore,
+ userMention
+});
+//# sourceMappingURL=index.js.map \ No newline at end of file
diff --git a/node_modules/@discordjs/formatters/dist/index.js.map b/node_modules/@discordjs/formatters/dist/index.js.map
new file mode 100644
index 0000000..6b7c19a
--- /dev/null
+++ b/node_modules/@discordjs/formatters/dist/index.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["../src/index.ts","../src/escapers.ts","../src/formatters.ts"],"sourcesContent":["export * from './escapers.js';\nexport * from './formatters.js';\n","/* eslint-disable prefer-named-capture-group */\n\n/**\n * The options that affect what will be escaped.\n */\nexport interface EscapeMarkdownOptions {\n\t/**\n\t * Whether to escape bold text.\n\t *\n\t * @defaultValue `true`\n\t */\n\tbold?: boolean;\n\n\t/**\n\t * Whether to escape bulleted lists.\n\t *\n\t * @defaultValue `false`\n\t */\n\tbulletedList?: boolean;\n\n\t/**\n\t * Whether to escape code blocks.\n\t *\n\t * @defaultValue `true`\n\t */\n\tcodeBlock?: boolean;\n\n\t/**\n\t * Whether to escape text inside code blocks.\n\t *\n\t * @defaultValue `true`\n\t */\n\tcodeBlockContent?: boolean;\n\n\t/**\n\t * Whether to escape `\\`.\n\t *\n\t * @defaultValue `true`\n\t */\n\tescape?: boolean;\n\n\t/**\n\t * Whether to escape headings.\n\t *\n\t * @defaultValue `false`\n\t */\n\theading?: boolean;\n\n\t/**\n\t * Whether to escape inline code.\n\t *\n\t * @defaultValue `true`\n\t */\n\tinlineCode?: boolean;\n\n\t/**\n\t * Whether to escape text inside inline code.\n\t *\n\t * @defaultValue `true`\n\t */\n\tinlineCodeContent?: boolean;\n\t/**\n\t * Whether to escape italics.\n\t *\n\t * @defaultValue `true`\n\t */\n\titalic?: boolean;\n\n\t/**\n\t * Whether to escape masked links.\n\t *\n\t * @defaultValue `false`\n\t */\n\tmaskedLink?: boolean;\n\n\t/**\n\t * Whether to escape numbered lists.\n\t *\n\t * @defaultValue `false`\n\t */\n\tnumberedList?: boolean;\n\n\t/**\n\t * Whether to escape spoilers.\n\t *\n\t * @defaultValue `true`\n\t */\n\tspoiler?: boolean;\n\n\t/**\n\t * Whether to escape strikethroughs.\n\t *\n\t * @defaultValue `true`\n\t */\n\tstrikethrough?: boolean;\n\n\t/**\n\t * Whether to escape underlines.\n\t *\n\t * @defaultValue `true`\n\t */\n\tunderline?: boolean;\n}\n\n/**\n * Escapes any Discord-flavored markdown in a string.\n *\n * @param text - Content to escape\n * @param options - Options for escaping the markdown\n */\nexport function escapeMarkdown(text: string, options: EscapeMarkdownOptions = {}): string {\n\tconst {\n\t\tcodeBlock = true,\n\t\tinlineCode = true,\n\t\tbold = true,\n\t\titalic = true,\n\t\tunderline = true,\n\t\tstrikethrough = true,\n\t\tspoiler = true,\n\t\tcodeBlockContent = true,\n\t\tinlineCodeContent = true,\n\t\tescape = true,\n\t\theading = false,\n\t\tbulletedList = false,\n\t\tnumberedList = false,\n\t\tmaskedLink = false,\n\t} = options;\n\n\tif (!codeBlockContent) {\n\t\treturn text\n\t\t\t.split('```')\n\t\t\t.map((subString, index, array) => {\n\t\t\t\tif (index % 2 && index !== array.length - 1) return subString;\n\t\t\t\treturn escapeMarkdown(subString, {\n\t\t\t\t\tinlineCode,\n\t\t\t\t\tbold,\n\t\t\t\t\titalic,\n\t\t\t\t\tunderline,\n\t\t\t\t\tstrikethrough,\n\t\t\t\t\tspoiler,\n\t\t\t\t\tinlineCodeContent,\n\t\t\t\t\tescape,\n\t\t\t\t\theading,\n\t\t\t\t\tbulletedList,\n\t\t\t\t\tnumberedList,\n\t\t\t\t\tmaskedLink,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.join(codeBlock ? '\\\\`\\\\`\\\\`' : '```');\n\t}\n\n\tif (!inlineCodeContent) {\n\t\treturn text\n\t\t\t.split(/(?<=^|[^`])`(?=[^`]|$)/g)\n\t\t\t.map((subString, index, array) => {\n\t\t\t\tif (index % 2 && index !== array.length - 1) return subString;\n\t\t\t\treturn escapeMarkdown(subString, {\n\t\t\t\t\tcodeBlock,\n\t\t\t\t\tbold,\n\t\t\t\t\titalic,\n\t\t\t\t\tunderline,\n\t\t\t\t\tstrikethrough,\n\t\t\t\t\tspoiler,\n\t\t\t\t\tescape,\n\t\t\t\t\theading,\n\t\t\t\t\tbulletedList,\n\t\t\t\t\tnumberedList,\n\t\t\t\t\tmaskedLink,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.join(inlineCode ? '\\\\`' : '`');\n\t}\n\n\tlet res = text;\n\tif (escape) res = escapeEscape(res);\n\tif (inlineCode) res = escapeInlineCode(res);\n\tif (codeBlock) res = escapeCodeBlock(res);\n\tif (italic) res = escapeItalic(res);\n\tif (bold) res = escapeBold(res);\n\tif (underline) res = escapeUnderline(res);\n\tif (strikethrough) res = escapeStrikethrough(res);\n\tif (spoiler) res = escapeSpoiler(res);\n\tif (heading) res = escapeHeading(res);\n\tif (bulletedList) res = escapeBulletedList(res);\n\tif (numberedList) res = escapeNumberedList(res);\n\tif (maskedLink) res = escapeMaskedLink(res);\n\treturn res;\n}\n\n/**\n * Escapes code block markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeCodeBlock(text: string): string {\n\treturn text.replaceAll('```', '\\\\`\\\\`\\\\`');\n}\n\n/**\n * Escapes inline code markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeInlineCode(text: string): string {\n\treturn text.replaceAll(/(?<=^|[^`])``?(?=[^`]|$)/g, (match) => (match.length === 2 ? '\\\\`\\\\`' : '\\\\`'));\n}\n\n/**\n * Escapes italic markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeItalic(text: string): string {\n\tlet idx = 0;\n\tconst newText = text.replaceAll(/(?<=^|[^*])\\*([^*]|\\*\\*|$)/g, (_, match) => {\n\t\tif (match === '**') return ++idx % 2 ? `\\\\*${match}` : `${match}\\\\*`;\n\t\treturn `\\\\*${match}`;\n\t});\n\tidx = 0;\n\treturn newText.replaceAll(/(?<=^|[^_])(?<!<a?:.+)_(?!:\\d+>)([^_]|__|$)/g, (_, match) => {\n\t\tif (match === '__') return ++idx % 2 ? `\\\\_${match}` : `${match}\\\\_`;\n\t\treturn `\\\\_${match}`;\n\t});\n}\n\n/**\n * Escapes bold markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeBold(text: string): string {\n\tlet idx = 0;\n\treturn text.replaceAll(/\\*\\*(\\*)?/g, (_, match) => {\n\t\tif (match) return ++idx % 2 ? `${match}\\\\*\\\\*` : `\\\\*\\\\*${match}`;\n\t\treturn '\\\\*\\\\*';\n\t});\n}\n\n/**\n * Escapes underline markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeUnderline(text: string): string {\n\tlet idx = 0;\n\treturn text.replaceAll(/(?<!<a?:.+)__(_)?(?!:\\d+>)/g, (_, match) => {\n\t\tif (match) return ++idx % 2 ? `${match}\\\\_\\\\_` : `\\\\_\\\\_${match}`;\n\t\treturn '\\\\_\\\\_';\n\t});\n}\n\n/**\n * Escapes strikethrough markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeStrikethrough(text: string): string {\n\treturn text.replaceAll('~~', '\\\\~\\\\~');\n}\n\n/**\n * Escapes spoiler markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeSpoiler(text: string): string {\n\treturn text.replaceAll('||', '\\\\|\\\\|');\n}\n\n/**\n * Escapes escape characters in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeEscape(text: string): string {\n\treturn text.replaceAll('\\\\', '\\\\\\\\');\n}\n\n/**\n * Escapes heading characters in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeHeading(text: string): string {\n\treturn text.replaceAll(/^( {0,2})([*-] )?( *)(#{1,3} )/gm, '$1$2$3\\\\$4');\n}\n\n/**\n * Escapes bulleted list characters in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeBulletedList(text: string): string {\n\treturn text.replaceAll(/^( *)([*-])( +)/gm, '$1\\\\$2$3');\n}\n\n/**\n * Escapes numbered list characters in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeNumberedList(text: string): string {\n\treturn text.replaceAll(/^( *\\d+)\\./gm, '$1\\\\.');\n}\n\n/**\n * Escapes masked link characters in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeMaskedLink(text: string): string {\n\treturn text.replaceAll(/\\[.+]\\(.+\\)/gm, '\\\\$&');\n}\n","import type { URL } from 'node:url';\nimport type { Snowflake } from 'discord-api-types/globals';\n\n/**\n * Wraps the content inside a code block with no language.\n *\n * @typeParam C - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function codeBlock<C extends string>(content: C): `\\`\\`\\`\\n${C}\\n\\`\\`\\``;\n\n/**\n * Wraps the content inside a code block with the specified language.\n *\n * @typeParam L - This is inferred by the supplied language\n * @typeParam C - This is inferred by the supplied content\n * @param language - The language for the code block\n * @param content - The content to wrap\n */\nexport function codeBlock<L extends string, C extends string>(language: L, content: C): `\\`\\`\\`${L}\\n${C}\\n\\`\\`\\``;\n\nexport function codeBlock(language: string, content?: string): string {\n\treturn content === undefined ? `\\`\\`\\`\\n${language}\\n\\`\\`\\`` : `\\`\\`\\`${language}\\n${content}\\n\\`\\`\\``;\n}\n\n/**\n * Wraps the content inside \\`backticks\\` which formats it as inline code.\n *\n * @typeParam C - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function inlineCode<C extends string>(content: C): `\\`${C}\\`` {\n\treturn `\\`${content}\\``;\n}\n\n/**\n * Formats the content into italic text.\n *\n * @typeParam C - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function italic<C extends string>(content: C): `_${C}_` {\n\treturn `_${content}_`;\n}\n\n/**\n * Formats the content into bold text.\n *\n * @typeParam C - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function bold<C extends string>(content: C): `**${C}**` {\n\treturn `**${content}**`;\n}\n\n/**\n * Formats the content into underscored text.\n *\n * @typeParam C - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function underscore<C extends string>(content: C): `__${C}__` {\n\treturn `__${content}__`;\n}\n\n/**\n * Formats the content into strike-through text.\n *\n * @typeParam C - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function strikethrough<C extends string>(content: C): `~~${C}~~` {\n\treturn `~~${content}~~`;\n}\n\n/**\n * Formats the content into a quote.\n *\n * @remarks This needs to be at the start of the line for Discord to format it.\n * @typeParam C - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function quote<C extends string>(content: C): `> ${C}` {\n\treturn `> ${content}`;\n}\n\n/**\n * Formats the content into a block quote.\n *\n * @remarks This needs to be at the start of the line for Discord to format it.\n * @typeParam C - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function blockQuote<C extends string>(content: C): `>>> ${C}` {\n\treturn `>>> ${content}`;\n}\n\n/**\n * Wraps the URL into `<>` which stops it from embedding.\n *\n * @typeParam C - This is inferred by the supplied content\n * @param url - The URL to wrap\n */\nexport function hideLinkEmbed<C extends string>(url: C): `<${C}>`;\n\n/**\n * Wraps the URL into `<>` which stops it from embedding.\n *\n * @param url - The URL to wrap\n */\nexport function hideLinkEmbed(url: URL): `<${string}>`;\n\nexport function hideLinkEmbed(url: URL | string) {\n\treturn `<${url}>`;\n}\n\n/**\n * Formats the content and the URL into a masked URL.\n *\n * @typeParam C - This is inferred by the supplied content\n * @param content - The content to display\n * @param url - The URL the content links to\n */\nexport function hyperlink<C extends string>(content: C, url: URL): `[${C}](${string})`;\n\n/**\n * Formats the content and the URL into a masked URL.\n *\n * @typeParam C - This is inferred by the supplied content\n * @typeParam U - This is inferred by the supplied URL\n * @param content - The content to display\n * @param url - The URL the content links to\n */\nexport function hyperlink<C extends string, U extends string>(content: C, url: U): `[${C}](${U})`;\n\n/**\n * Formats the content and the URL into a masked URL with a custom tooltip.\n *\n * @typeParam C - This is inferred by the supplied content\n * @typeParam T - This is inferred by the supplied title\n * @param content - The content to display\n * @param url - The URL the content links to\n * @param title - The title shown when hovering on the masked link\n */\nexport function hyperlink<C extends string, T extends string>(\n\tcontent: C,\n\turl: URL,\n\ttitle: T,\n): `[${C}](${string} \"${T}\")`;\n\n/**\n * Formats the content and the URL into a masked URL with a custom tooltip.\n *\n * @typeParam C - This is inferred by the supplied content\n * @typeParam U - This is inferred by the supplied URL\n * @typeParam T - This is inferred by the supplied title\n * @param content - The content to display\n * @param url - The URL the content links to\n * @param title - The title shown when hovering on the masked link\n */\nexport function hyperlink<C extends string, U extends string, T extends string>(\n\tcontent: C,\n\turl: U,\n\ttitle: T,\n): `[${C}](${U} \"${T}\")`;\n\nexport function hyperlink(content: string, url: URL | string, title?: string) {\n\treturn title ? `[${content}](${url} \"${title}\")` : `[${content}](${url})`;\n}\n\n/**\n * Formats the content into a spoiler.\n *\n * @typeParam C - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function spoiler<C extends string>(content: C): `||${C}||` {\n\treturn `||${content}||`;\n}\n\n/**\n * Formats a user id into a user mention.\n *\n * @typeParam C - This is inferred by the supplied user id\n * @param userId - The user id to format\n */\nexport function userMention<C extends Snowflake>(userId: C): `<@${C}>` {\n\treturn `<@${userId}>`;\n}\n\n/**\n * Formats a channel id into a channel mention.\n *\n * @typeParam C - This is inferred by the supplied channel id\n * @param channelId - The channel id to format\n */\nexport function channelMention<C extends Snowflake>(channelId: C): `<#${C}>` {\n\treturn `<#${channelId}>`;\n}\n\n/**\n * Formats a role id into a role mention.\n *\n * @typeParam C - This is inferred by the supplied role id\n * @param roleId - The role id to format\n */\nexport function roleMention<C extends Snowflake>(roleId: C): `<@&${C}>` {\n\treturn `<@&${roleId}>`;\n}\n\n/**\n * Formats an application command name, subcommand group name, subcommand name, and id into an application command mention.\n *\n * @typeParam N - This is inferred by the supplied command name\n * @typeParam G - This is inferred by the supplied subcommand group name\n * @typeParam S - This is inferred by the supplied subcommand name\n * @typeParam I - This is inferred by the supplied command id\n * @param commandName - The application command name to format\n * @param subcommandGroupName - The subcommand group name to format\n * @param subcommandName - The subcommand name to format\n * @param commandId - The application command id to format\n */\nexport function chatInputApplicationCommandMention<\n\tN extends string,\n\tG extends string,\n\tS extends string,\n\tI extends Snowflake,\n>(commandName: N, subcommandGroupName: G, subcommandName: S, commandId: I): `</${N} ${G} ${S}:${I}>`;\n\n/**\n * Formats an application command name, subcommand name, and id into an application command mention.\n *\n * @typeParam N - This is inferred by the supplied command name\n * @typeParam S - This is inferred by the supplied subcommand name\n * @typeParam I - This is inferred by the supplied command id\n * @param commandName - The application command name to format\n * @param subcommandName - The subcommand name to format\n * @param commandId - The application command id to format\n */\nexport function chatInputApplicationCommandMention<N extends string, S extends string, I extends Snowflake>(\n\tcommandName: N,\n\tsubcommandName: S,\n\tcommandId: I,\n): `</${N} ${S}:${I}>`;\n\n/**\n * Formats an application command name and id into an application command mention.\n *\n * @typeParam N - This is inferred by the supplied command name\n * @typeParam I - This is inferred by the supplied command id\n * @param commandName - The application command name to format\n * @param commandId - The application command id to format\n */\nexport function chatInputApplicationCommandMention<N extends string, I extends Snowflake>(\n\tcommandName: N,\n\tcommandId: I,\n): `</${N}:${I}>`;\n\nexport function chatInputApplicationCommandMention<\n\tN extends string,\n\tG extends Snowflake | string,\n\tS extends Snowflake | string,\n\tI extends Snowflake,\n>(\n\tcommandName: N,\n\tsubcommandGroupName: G,\n\tsubcommandName?: S,\n\tcommandId?: I,\n): `</${N} ${G} ${S}:${I}>` | `</${N} ${G}:${S}>` | `</${N}:${G}>` {\n\tif (commandId !== undefined) {\n\t\treturn `</${commandName} ${subcommandGroupName} ${subcommandName!}:${commandId}>`;\n\t}\n\n\tif (subcommandName !== undefined) {\n\t\treturn `</${commandName} ${subcommandGroupName}:${subcommandName}>`;\n\t}\n\n\treturn `</${commandName}:${subcommandGroupName}>`;\n}\n\n/**\n * Formats a non-animated emoji id into a fully qualified emoji identifier.\n *\n * @typeParam C - This is inferred by the supplied emoji id\n * @param emojiId - The emoji id to format\n */\nexport function formatEmoji<C extends Snowflake>(emojiId: C, animated?: false): `<:_:${C}>`;\n\n/**\n * Formats an animated emoji id into a fully qualified emoji identifier.\n *\n * @typeParam C - This is inferred by the supplied emoji id\n * @param emojiId - The emoji id to format\n * @param animated - Whether the emoji is animated\n */\nexport function formatEmoji<C extends Snowflake>(emojiId: C, animated?: true): `<a:_:${C}>`;\n\n/**\n * Formats an emoji id into a fully qualified emoji identifier.\n *\n * @typeParam C - This is inferred by the supplied emoji id\n * @param emojiId - The emoji id to format\n * @param animated - Whether the emoji is animated\n */\nexport function formatEmoji<C extends Snowflake>(emojiId: C, animated?: boolean): `<:_:${C}>` | `<a:_:${C}>`;\n\nexport function formatEmoji<C extends Snowflake>(emojiId: C, animated = false): `<:_:${C}>` | `<a:_:${C}>` {\n\treturn `<${animated ? 'a' : ''}:_:${emojiId}>`;\n}\n\n/**\n * Formats a channel link for a direct message channel.\n *\n * @typeParam C - This is inferred by the supplied channel id\n * @param channelId - The channel's id\n */\nexport function channelLink<C extends Snowflake>(channelId: C): `https://discord.com/channels/@me/${C}`;\n\n/**\n * Formats a channel link for a guild channel.\n *\n * @typeParam C - This is inferred by the supplied channel id\n * @typeParam G - This is inferred by the supplied guild id\n * @param channelId - The channel's id\n * @param guildId - The guild's id\n */\nexport function channelLink<C extends Snowflake, G extends Snowflake>(\n\tchannelId: C,\n\tguildId: G,\n): `https://discord.com/channels/${G}/${C}`;\n\nexport function channelLink<C extends Snowflake, G extends Snowflake>(\n\tchannelId: C,\n\tguildId?: G,\n): `https://discord.com/channels/@me/${C}` | `https://discord.com/channels/${G}/${C}` {\n\treturn `https://discord.com/channels/${guildId ?? '@me'}/${channelId}`;\n}\n\n/**\n * Formats a message link for a direct message channel.\n *\n * @typeParam C - This is inferred by the supplied channel id\n * @typeParam M - This is inferred by the supplied message id\n * @param channelId - The channel's id\n * @param messageId - The message's id\n */\nexport function messageLink<C extends Snowflake, M extends Snowflake>(\n\tchannelId: C,\n\tmessageId: M,\n): `https://discord.com/channels/@me/${C}/${M}`;\n\n/**\n * Formats a message link for a guild channel.\n *\n * @typeParam C - This is inferred by the supplied channel id\n * @typeParam M - This is inferred by the supplied message id\n * @typeParam G - This is inferred by the supplied guild id\n * @param channelId - The channel's id\n * @param messageId - The message's id\n * @param guildId - The guild's id\n */\nexport function messageLink<C extends Snowflake, M extends Snowflake, G extends Snowflake>(\n\tchannelId: C,\n\tmessageId: M,\n\tguildId: G,\n): `https://discord.com/channels/${G}/${C}/${M}`;\n\nexport function messageLink<C extends Snowflake, M extends Snowflake, G extends Snowflake>(\n\tchannelId: C,\n\tmessageId: M,\n\tguildId?: G,\n): `https://discord.com/channels/@me/${C}/${M}` | `https://discord.com/channels/${G}/${C}/${M}` {\n\treturn `${guildId === undefined ? channelLink(channelId) : channelLink(channelId, guildId)}/${messageId}`;\n}\n\n/**\n * Formats a date into a short date-time string.\n *\n * @param date - The date to format. Defaults to the current time\n */\nexport function time(date?: Date): `<t:${bigint}>`;\n\n/**\n * Formats a date given a format style.\n *\n * @typeParam S - This is inferred by the supplied {@link TimestampStylesString}\n * @param date - The date to format\n * @param style - The style to use\n */\nexport function time<S extends TimestampStylesString>(date: Date, style: S): `<t:${bigint}:${S}>`;\n\n/**\n * Formats the given timestamp into a short date-time string.\n *\n * @typeParam C - This is inferred by the supplied timestamp\n * @param seconds - A Unix timestamp in seconds\n */\nexport function time<C extends number>(seconds: C): `<t:${C}>`;\n\n/**\n * Formats the given timestamp into a short date-time string.\n *\n * @typeParam C - This is inferred by the supplied timestamp\n * @typeParam S - This is inferred by the supplied {@link TimestampStylesString}\n * @param seconds - A Unix timestamp in seconds\n * @param style - The style to use\n */\nexport function time<C extends number, S extends TimestampStylesString>(seconds: C, style: S): `<t:${C}:${S}>`;\n\nexport function time(timeOrSeconds?: Date | number, style?: TimestampStylesString): string {\n\tif (typeof timeOrSeconds !== 'number') {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\ttimeOrSeconds = Math.floor((timeOrSeconds?.getTime() ?? Date.now()) / 1_000);\n\t}\n\n\treturn typeof style === 'string' ? `<t:${timeOrSeconds}:${style}>` : `<t:${timeOrSeconds}>`;\n}\n\n/**\n * The {@link https://discord.com/developers/docs/reference#message-formatting-timestamp-styles | message formatting timestamp styles}\n * supported by Discord.\n */\nexport const TimestampStyles = {\n\t/**\n\t * Short time format, consisting of hours and minutes.\n\t *\n\t * @example `16:20`\n\t */\n\tShortTime: 't',\n\n\t/**\n\t * Long time format, consisting of hours, minutes, and seconds.\n\t *\n\t * @example `16:20:30`\n\t */\n\tLongTime: 'T',\n\n\t/**\n\t * Short date format, consisting of day, month, and year.\n\t *\n\t * @example `20/04/2021`\n\t */\n\tShortDate: 'd',\n\n\t/**\n\t * Long date format, consisting of day, month, and year.\n\t *\n\t * @example `20 April 2021`\n\t */\n\tLongDate: 'D',\n\n\t/**\n\t * Short date-time format, consisting of short date and short time formats.\n\t *\n\t * @example `20 April 2021 16:20`\n\t */\n\tShortDateTime: 'f',\n\n\t/**\n\t * Long date-time format, consisting of long date and short time formats.\n\t *\n\t * @example `Tuesday, 20 April 2021 16:20`\n\t */\n\tLongDateTime: 'F',\n\n\t/**\n\t * Relative time format, consisting of a relative duration format.\n\t *\n\t * @example `2 months ago`\n\t */\n\tRelativeTime: 'R',\n} as const satisfies Record<string, string>;\n\n/**\n * The possible {@link TimestampStyles} values.\n */\nexport type TimestampStylesString = (typeof TimestampStyles)[keyof typeof TimestampStyles];\n\n// prettier-ignore\n/**\n * All the available faces from Discord's native slash commands.\n */\nexport enum Faces {\n\t/**\n\t * `¯\\_(ツ)_/¯`\n\t */\n\t// eslint-disable-next-line no-useless-escape\n\tShrug = '¯\\_(ツ)_/¯',\n\n\t/**\n\t * `(╯°□°)╯︵ ┻━┻`\n\t */\n\tTableflip = '(╯°□°)╯︵ ┻━┻',\n\n\t/**\n\t * `┬─┬ノ( º _ ºノ)`\n\t */\n\tUnflip = '┬─┬ノ( º _ ºノ)',\n}\n"],"mappings":"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","names":["codeBlock","inlineCode","bold","italic","strikethrough","spoiler","Faces"]} \ No newline at end of file
diff --git a/node_modules/@discordjs/formatters/dist/index.mjs b/node_modules/@discordjs/formatters/dist/index.mjs
new file mode 100644
index 0000000..82a6f65
--- /dev/null
+++ b/node_modules/@discordjs/formatters/dist/index.mjs
@@ -0,0 +1,335 @@
+var __defProp = Object.defineProperty;
+var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
+
+// src/escapers.ts
+function escapeMarkdown(text, options = {}) {
+ const {
+ codeBlock: codeBlock2 = true,
+ inlineCode: inlineCode2 = true,
+ bold: bold2 = true,
+ italic: italic2 = true,
+ underline = true,
+ strikethrough: strikethrough2 = true,
+ spoiler: spoiler2 = true,
+ codeBlockContent = true,
+ inlineCodeContent = true,
+ escape = true,
+ heading = false,
+ bulletedList = false,
+ numberedList = false,
+ maskedLink = false
+ } = options;
+ if (!codeBlockContent) {
+ return text.split("```").map((subString, index, array) => {
+ if (index % 2 && index !== array.length - 1)
+ return subString;
+ return escapeMarkdown(subString, {
+ inlineCode: inlineCode2,
+ bold: bold2,
+ italic: italic2,
+ underline,
+ strikethrough: strikethrough2,
+ spoiler: spoiler2,
+ inlineCodeContent,
+ escape,
+ heading,
+ bulletedList,
+ numberedList,
+ maskedLink
+ });
+ }).join(codeBlock2 ? "\\`\\`\\`" : "```");
+ }
+ if (!inlineCodeContent) {
+ return text.split(/(?<=^|[^`])`(?=[^`]|$)/g).map((subString, index, array) => {
+ if (index % 2 && index !== array.length - 1)
+ return subString;
+ return escapeMarkdown(subString, {
+ codeBlock: codeBlock2,
+ bold: bold2,
+ italic: italic2,
+ underline,
+ strikethrough: strikethrough2,
+ spoiler: spoiler2,
+ escape,
+ heading,
+ bulletedList,
+ numberedList,
+ maskedLink
+ });
+ }).join(inlineCode2 ? "\\`" : "`");
+ }
+ let res = text;
+ if (escape)
+ res = escapeEscape(res);
+ if (inlineCode2)
+ res = escapeInlineCode(res);
+ if (codeBlock2)
+ res = escapeCodeBlock(res);
+ if (italic2)
+ res = escapeItalic(res);
+ if (bold2)
+ res = escapeBold(res);
+ if (underline)
+ res = escapeUnderline(res);
+ if (strikethrough2)
+ res = escapeStrikethrough(res);
+ if (spoiler2)
+ res = escapeSpoiler(res);
+ if (heading)
+ res = escapeHeading(res);
+ if (bulletedList)
+ res = escapeBulletedList(res);
+ if (numberedList)
+ res = escapeNumberedList(res);
+ if (maskedLink)
+ res = escapeMaskedLink(res);
+ return res;
+}
+__name(escapeMarkdown, "escapeMarkdown");
+function escapeCodeBlock(text) {
+ return text.replaceAll("```", "\\`\\`\\`");
+}
+__name(escapeCodeBlock, "escapeCodeBlock");
+function escapeInlineCode(text) {
+ return text.replaceAll(/(?<=^|[^`])``?(?=[^`]|$)/g, (match) => match.length === 2 ? "\\`\\`" : "\\`");
+}
+__name(escapeInlineCode, "escapeInlineCode");
+function escapeItalic(text) {
+ let idx = 0;
+ const newText = text.replaceAll(/(?<=^|[^*])\*([^*]|\*\*|$)/g, (_, match) => {
+ if (match === "**")
+ return ++idx % 2 ? `\\*${match}` : `${match}\\*`;
+ return `\\*${match}`;
+ });
+ idx = 0;
+ return newText.replaceAll(/(?<=^|[^_])(?<!<a?:.+)_(?!:\d+>)([^_]|__|$)/g, (_, match) => {
+ if (match === "__")
+ return ++idx % 2 ? `\\_${match}` : `${match}\\_`;
+ return `\\_${match}`;
+ });
+}
+__name(escapeItalic, "escapeItalic");
+function escapeBold(text) {
+ let idx = 0;
+ return text.replaceAll(/\*\*(\*)?/g, (_, match) => {
+ if (match)
+ return ++idx % 2 ? `${match}\\*\\*` : `\\*\\*${match}`;
+ return "\\*\\*";
+ });
+}
+__name(escapeBold, "escapeBold");
+function escapeUnderline(text) {
+ let idx = 0;
+ return text.replaceAll(/(?<!<a?:.+)__(_)?(?!:\d+>)/g, (_, match) => {
+ if (match)
+ return ++idx % 2 ? `${match}\\_\\_` : `\\_\\_${match}`;
+ return "\\_\\_";
+ });
+}
+__name(escapeUnderline, "escapeUnderline");
+function escapeStrikethrough(text) {
+ return text.replaceAll("~~", "\\~\\~");
+}
+__name(escapeStrikethrough, "escapeStrikethrough");
+function escapeSpoiler(text) {
+ return text.replaceAll("||", "\\|\\|");
+}
+__name(escapeSpoiler, "escapeSpoiler");
+function escapeEscape(text) {
+ return text.replaceAll("\\", "\\\\");
+}
+__name(escapeEscape, "escapeEscape");
+function escapeHeading(text) {
+ return text.replaceAll(/^( {0,2})([*-] )?( *)(#{1,3} )/gm, "$1$2$3\\$4");
+}
+__name(escapeHeading, "escapeHeading");
+function escapeBulletedList(text) {
+ return text.replaceAll(/^( *)([*-])( +)/gm, "$1\\$2$3");
+}
+__name(escapeBulletedList, "escapeBulletedList");
+function escapeNumberedList(text) {
+ return text.replaceAll(/^( *\d+)\./gm, "$1\\.");
+}
+__name(escapeNumberedList, "escapeNumberedList");
+function escapeMaskedLink(text) {
+ return text.replaceAll(/\[.+]\(.+\)/gm, "\\$&");
+}
+__name(escapeMaskedLink, "escapeMaskedLink");
+
+// src/formatters.ts
+function codeBlock(language, content) {
+ return content === void 0 ? `\`\`\`
+${language}
+\`\`\`` : `\`\`\`${language}
+${content}
+\`\`\``;
+}
+__name(codeBlock, "codeBlock");
+function inlineCode(content) {
+ return `\`${content}\``;
+}
+__name(inlineCode, "inlineCode");
+function italic(content) {
+ return `_${content}_`;
+}
+__name(italic, "italic");
+function bold(content) {
+ return `**${content}**`;
+}
+__name(bold, "bold");
+function underscore(content) {
+ return `__${content}__`;
+}
+__name(underscore, "underscore");
+function strikethrough(content) {
+ return `~~${content}~~`;
+}
+__name(strikethrough, "strikethrough");
+function quote(content) {
+ return `> ${content}`;
+}
+__name(quote, "quote");
+function blockQuote(content) {
+ return `>>> ${content}`;
+}
+__name(blockQuote, "blockQuote");
+function hideLinkEmbed(url) {
+ return `<${url}>`;
+}
+__name(hideLinkEmbed, "hideLinkEmbed");
+function hyperlink(content, url, title) {
+ return title ? `[${content}](${url} "${title}")` : `[${content}](${url})`;
+}
+__name(hyperlink, "hyperlink");
+function spoiler(content) {
+ return `||${content}||`;
+}
+__name(spoiler, "spoiler");
+function userMention(userId) {
+ return `<@${userId}>`;
+}
+__name(userMention, "userMention");
+function channelMention(channelId) {
+ return `<#${channelId}>`;
+}
+__name(channelMention, "channelMention");
+function roleMention(roleId) {
+ return `<@&${roleId}>`;
+}
+__name(roleMention, "roleMention");
+function chatInputApplicationCommandMention(commandName, subcommandGroupName, subcommandName, commandId) {
+ if (commandId !== void 0) {
+ return `</${commandName} ${subcommandGroupName} ${subcommandName}:${commandId}>`;
+ }
+ if (subcommandName !== void 0) {
+ return `</${commandName} ${subcommandGroupName}:${subcommandName}>`;
+ }
+ return `</${commandName}:${subcommandGroupName}>`;
+}
+__name(chatInputApplicationCommandMention, "chatInputApplicationCommandMention");
+function formatEmoji(emojiId, animated = false) {
+ return `<${animated ? "a" : ""}:_:${emojiId}>`;
+}
+__name(formatEmoji, "formatEmoji");
+function channelLink(channelId, guildId) {
+ return `https://discord.com/channels/${guildId ?? "@me"}/${channelId}`;
+}
+__name(channelLink, "channelLink");
+function messageLink(channelId, messageId, guildId) {
+ return `${guildId === void 0 ? channelLink(channelId) : channelLink(channelId, guildId)}/${messageId}`;
+}
+__name(messageLink, "messageLink");
+function time(timeOrSeconds, style) {
+ if (typeof timeOrSeconds !== "number") {
+ timeOrSeconds = Math.floor((timeOrSeconds?.getTime() ?? Date.now()) / 1e3);
+ }
+ return typeof style === "string" ? `<t:${timeOrSeconds}:${style}>` : `<t:${timeOrSeconds}>`;
+}
+__name(time, "time");
+var TimestampStyles = {
+ /**
+ * Short time format, consisting of hours and minutes.
+ *
+ * @example `16:20`
+ */
+ ShortTime: "t",
+ /**
+ * Long time format, consisting of hours, minutes, and seconds.
+ *
+ * @example `16:20:30`
+ */
+ LongTime: "T",
+ /**
+ * Short date format, consisting of day, month, and year.
+ *
+ * @example `20/04/2021`
+ */
+ ShortDate: "d",
+ /**
+ * Long date format, consisting of day, month, and year.
+ *
+ * @example `20 April 2021`
+ */
+ LongDate: "D",
+ /**
+ * Short date-time format, consisting of short date and short time formats.
+ *
+ * @example `20 April 2021 16:20`
+ */
+ ShortDateTime: "f",
+ /**
+ * Long date-time format, consisting of long date and short time formats.
+ *
+ * @example `Tuesday, 20 April 2021 16:20`
+ */
+ LongDateTime: "F",
+ /**
+ * Relative time format, consisting of a relative duration format.
+ *
+ * @example `2 months ago`
+ */
+ RelativeTime: "R"
+};
+var Faces = /* @__PURE__ */ ((Faces2) => {
+ Faces2["Shrug"] = "\xAF_(\u30C4)_/\xAF";
+ Faces2["Tableflip"] = "(\u256F\xB0\u25A1\xB0)\u256F\uFE35 \u253B\u2501\u253B";
+ Faces2["Unflip"] = "\u252C\u2500\u252C\u30CE( \xBA _ \xBA\u30CE)";
+ return Faces2;
+})(Faces || {});
+export {
+ Faces,
+ TimestampStyles,
+ blockQuote,
+ bold,
+ channelLink,
+ channelMention,
+ chatInputApplicationCommandMention,
+ codeBlock,
+ escapeBold,
+ escapeBulletedList,
+ escapeCodeBlock,
+ escapeEscape,
+ escapeHeading,
+ escapeInlineCode,
+ escapeItalic,
+ escapeMarkdown,
+ escapeMaskedLink,
+ escapeNumberedList,
+ escapeSpoiler,
+ escapeStrikethrough,
+ escapeUnderline,
+ formatEmoji,
+ hideLinkEmbed,
+ hyperlink,
+ inlineCode,
+ italic,
+ messageLink,
+ quote,
+ roleMention,
+ spoiler,
+ strikethrough,
+ time,
+ underscore,
+ userMention
+};
+//# sourceMappingURL=index.mjs.map \ No newline at end of file
diff --git a/node_modules/@discordjs/formatters/dist/index.mjs.map b/node_modules/@discordjs/formatters/dist/index.mjs.map
new file mode 100644
index 0000000..ca8202d
--- /dev/null
+++ b/node_modules/@discordjs/formatters/dist/index.mjs.map
@@ -0,0 +1 @@
+{"version":3,"sources":["../src/escapers.ts","../src/formatters.ts"],"sourcesContent":["/* eslint-disable prefer-named-capture-group */\n\n/**\n * The options that affect what will be escaped.\n */\nexport interface EscapeMarkdownOptions {\n\t/**\n\t * Whether to escape bold text.\n\t *\n\t * @defaultValue `true`\n\t */\n\tbold?: boolean;\n\n\t/**\n\t * Whether to escape bulleted lists.\n\t *\n\t * @defaultValue `false`\n\t */\n\tbulletedList?: boolean;\n\n\t/**\n\t * Whether to escape code blocks.\n\t *\n\t * @defaultValue `true`\n\t */\n\tcodeBlock?: boolean;\n\n\t/**\n\t * Whether to escape text inside code blocks.\n\t *\n\t * @defaultValue `true`\n\t */\n\tcodeBlockContent?: boolean;\n\n\t/**\n\t * Whether to escape `\\`.\n\t *\n\t * @defaultValue `true`\n\t */\n\tescape?: boolean;\n\n\t/**\n\t * Whether to escape headings.\n\t *\n\t * @defaultValue `false`\n\t */\n\theading?: boolean;\n\n\t/**\n\t * Whether to escape inline code.\n\t *\n\t * @defaultValue `true`\n\t */\n\tinlineCode?: boolean;\n\n\t/**\n\t * Whether to escape text inside inline code.\n\t *\n\t * @defaultValue `true`\n\t */\n\tinlineCodeContent?: boolean;\n\t/**\n\t * Whether to escape italics.\n\t *\n\t * @defaultValue `true`\n\t */\n\titalic?: boolean;\n\n\t/**\n\t * Whether to escape masked links.\n\t *\n\t * @defaultValue `false`\n\t */\n\tmaskedLink?: boolean;\n\n\t/**\n\t * Whether to escape numbered lists.\n\t *\n\t * @defaultValue `false`\n\t */\n\tnumberedList?: boolean;\n\n\t/**\n\t * Whether to escape spoilers.\n\t *\n\t * @defaultValue `true`\n\t */\n\tspoiler?: boolean;\n\n\t/**\n\t * Whether to escape strikethroughs.\n\t *\n\t * @defaultValue `true`\n\t */\n\tstrikethrough?: boolean;\n\n\t/**\n\t * Whether to escape underlines.\n\t *\n\t * @defaultValue `true`\n\t */\n\tunderline?: boolean;\n}\n\n/**\n * Escapes any Discord-flavored markdown in a string.\n *\n * @param text - Content to escape\n * @param options - Options for escaping the markdown\n */\nexport function escapeMarkdown(text: string, options: EscapeMarkdownOptions = {}): string {\n\tconst {\n\t\tcodeBlock = true,\n\t\tinlineCode = true,\n\t\tbold = true,\n\t\titalic = true,\n\t\tunderline = true,\n\t\tstrikethrough = true,\n\t\tspoiler = true,\n\t\tcodeBlockContent = true,\n\t\tinlineCodeContent = true,\n\t\tescape = true,\n\t\theading = false,\n\t\tbulletedList = false,\n\t\tnumberedList = false,\n\t\tmaskedLink = false,\n\t} = options;\n\n\tif (!codeBlockContent) {\n\t\treturn text\n\t\t\t.split('```')\n\t\t\t.map((subString, index, array) => {\n\t\t\t\tif (index % 2 && index !== array.length - 1) return subString;\n\t\t\t\treturn escapeMarkdown(subString, {\n\t\t\t\t\tinlineCode,\n\t\t\t\t\tbold,\n\t\t\t\t\titalic,\n\t\t\t\t\tunderline,\n\t\t\t\t\tstrikethrough,\n\t\t\t\t\tspoiler,\n\t\t\t\t\tinlineCodeContent,\n\t\t\t\t\tescape,\n\t\t\t\t\theading,\n\t\t\t\t\tbulletedList,\n\t\t\t\t\tnumberedList,\n\t\t\t\t\tmaskedLink,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.join(codeBlock ? '\\\\`\\\\`\\\\`' : '```');\n\t}\n\n\tif (!inlineCodeContent) {\n\t\treturn text\n\t\t\t.split(/(?<=^|[^`])`(?=[^`]|$)/g)\n\t\t\t.map((subString, index, array) => {\n\t\t\t\tif (index % 2 && index !== array.length - 1) return subString;\n\t\t\t\treturn escapeMarkdown(subString, {\n\t\t\t\t\tcodeBlock,\n\t\t\t\t\tbold,\n\t\t\t\t\titalic,\n\t\t\t\t\tunderline,\n\t\t\t\t\tstrikethrough,\n\t\t\t\t\tspoiler,\n\t\t\t\t\tescape,\n\t\t\t\t\theading,\n\t\t\t\t\tbulletedList,\n\t\t\t\t\tnumberedList,\n\t\t\t\t\tmaskedLink,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.join(inlineCode ? '\\\\`' : '`');\n\t}\n\n\tlet res = text;\n\tif (escape) res = escapeEscape(res);\n\tif (inlineCode) res = escapeInlineCode(res);\n\tif (codeBlock) res = escapeCodeBlock(res);\n\tif (italic) res = escapeItalic(res);\n\tif (bold) res = escapeBold(res);\n\tif (underline) res = escapeUnderline(res);\n\tif (strikethrough) res = escapeStrikethrough(res);\n\tif (spoiler) res = escapeSpoiler(res);\n\tif (heading) res = escapeHeading(res);\n\tif (bulletedList) res = escapeBulletedList(res);\n\tif (numberedList) res = escapeNumberedList(res);\n\tif (maskedLink) res = escapeMaskedLink(res);\n\treturn res;\n}\n\n/**\n * Escapes code block markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeCodeBlock(text: string): string {\n\treturn text.replaceAll('```', '\\\\`\\\\`\\\\`');\n}\n\n/**\n * Escapes inline code markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeInlineCode(text: string): string {\n\treturn text.replaceAll(/(?<=^|[^`])``?(?=[^`]|$)/g, (match) => (match.length === 2 ? '\\\\`\\\\`' : '\\\\`'));\n}\n\n/**\n * Escapes italic markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeItalic(text: string): string {\n\tlet idx = 0;\n\tconst newText = text.replaceAll(/(?<=^|[^*])\\*([^*]|\\*\\*|$)/g, (_, match) => {\n\t\tif (match === '**') return ++idx % 2 ? `\\\\*${match}` : `${match}\\\\*`;\n\t\treturn `\\\\*${match}`;\n\t});\n\tidx = 0;\n\treturn newText.replaceAll(/(?<=^|[^_])(?<!<a?:.+)_(?!:\\d+>)([^_]|__|$)/g, (_, match) => {\n\t\tif (match === '__') return ++idx % 2 ? `\\\\_${match}` : `${match}\\\\_`;\n\t\treturn `\\\\_${match}`;\n\t});\n}\n\n/**\n * Escapes bold markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeBold(text: string): string {\n\tlet idx = 0;\n\treturn text.replaceAll(/\\*\\*(\\*)?/g, (_, match) => {\n\t\tif (match) return ++idx % 2 ? `${match}\\\\*\\\\*` : `\\\\*\\\\*${match}`;\n\t\treturn '\\\\*\\\\*';\n\t});\n}\n\n/**\n * Escapes underline markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeUnderline(text: string): string {\n\tlet idx = 0;\n\treturn text.replaceAll(/(?<!<a?:.+)__(_)?(?!:\\d+>)/g, (_, match) => {\n\t\tif (match) return ++idx % 2 ? `${match}\\\\_\\\\_` : `\\\\_\\\\_${match}`;\n\t\treturn '\\\\_\\\\_';\n\t});\n}\n\n/**\n * Escapes strikethrough markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeStrikethrough(text: string): string {\n\treturn text.replaceAll('~~', '\\\\~\\\\~');\n}\n\n/**\n * Escapes spoiler markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeSpoiler(text: string): string {\n\treturn text.replaceAll('||', '\\\\|\\\\|');\n}\n\n/**\n * Escapes escape characters in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeEscape(text: string): string {\n\treturn text.replaceAll('\\\\', '\\\\\\\\');\n}\n\n/**\n * Escapes heading characters in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeHeading(text: string): string {\n\treturn text.replaceAll(/^( {0,2})([*-] )?( *)(#{1,3} )/gm, '$1$2$3\\\\$4');\n}\n\n/**\n * Escapes bulleted list characters in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeBulletedList(text: string): string {\n\treturn text.replaceAll(/^( *)([*-])( +)/gm, '$1\\\\$2$3');\n}\n\n/**\n * Escapes numbered list characters in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeNumberedList(text: string): string {\n\treturn text.replaceAll(/^( *\\d+)\\./gm, '$1\\\\.');\n}\n\n/**\n * Escapes masked link characters in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeMaskedLink(text: string): string {\n\treturn text.replaceAll(/\\[.+]\\(.+\\)/gm, '\\\\$&');\n}\n","import type { URL } from 'node:url';\nimport type { Snowflake } from 'discord-api-types/globals';\n\n/**\n * Wraps the content inside a code block with no language.\n *\n * @typeParam C - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function codeBlock<C extends string>(content: C): `\\`\\`\\`\\n${C}\\n\\`\\`\\``;\n\n/**\n * Wraps the content inside a code block with the specified language.\n *\n * @typeParam L - This is inferred by the supplied language\n * @typeParam C - This is inferred by the supplied content\n * @param language - The language for the code block\n * @param content - The content to wrap\n */\nexport function codeBlock<L extends string, C extends string>(language: L, content: C): `\\`\\`\\`${L}\\n${C}\\n\\`\\`\\``;\n\nexport function codeBlock(language: string, content?: string): string {\n\treturn content === undefined ? `\\`\\`\\`\\n${language}\\n\\`\\`\\`` : `\\`\\`\\`${language}\\n${content}\\n\\`\\`\\``;\n}\n\n/**\n * Wraps the content inside \\`backticks\\` which formats it as inline code.\n *\n * @typeParam C - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function inlineCode<C extends string>(content: C): `\\`${C}\\`` {\n\treturn `\\`${content}\\``;\n}\n\n/**\n * Formats the content into italic text.\n *\n * @typeParam C - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function italic<C extends string>(content: C): `_${C}_` {\n\treturn `_${content}_`;\n}\n\n/**\n * Formats the content into bold text.\n *\n * @typeParam C - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function bold<C extends string>(content: C): `**${C}**` {\n\treturn `**${content}**`;\n}\n\n/**\n * Formats the content into underscored text.\n *\n * @typeParam C - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function underscore<C extends string>(content: C): `__${C}__` {\n\treturn `__${content}__`;\n}\n\n/**\n * Formats the content into strike-through text.\n *\n * @typeParam C - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function strikethrough<C extends string>(content: C): `~~${C}~~` {\n\treturn `~~${content}~~`;\n}\n\n/**\n * Formats the content into a quote.\n *\n * @remarks This needs to be at the start of the line for Discord to format it.\n * @typeParam C - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function quote<C extends string>(content: C): `> ${C}` {\n\treturn `> ${content}`;\n}\n\n/**\n * Formats the content into a block quote.\n *\n * @remarks This needs to be at the start of the line for Discord to format it.\n * @typeParam C - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function blockQuote<C extends string>(content: C): `>>> ${C}` {\n\treturn `>>> ${content}`;\n}\n\n/**\n * Wraps the URL into `<>` which stops it from embedding.\n *\n * @typeParam C - This is inferred by the supplied content\n * @param url - The URL to wrap\n */\nexport function hideLinkEmbed<C extends string>(url: C): `<${C}>`;\n\n/**\n * Wraps the URL into `<>` which stops it from embedding.\n *\n * @param url - The URL to wrap\n */\nexport function hideLinkEmbed(url: URL): `<${string}>`;\n\nexport function hideLinkEmbed(url: URL | string) {\n\treturn `<${url}>`;\n}\n\n/**\n * Formats the content and the URL into a masked URL.\n *\n * @typeParam C - This is inferred by the supplied content\n * @param content - The content to display\n * @param url - The URL the content links to\n */\nexport function hyperlink<C extends string>(content: C, url: URL): `[${C}](${string})`;\n\n/**\n * Formats the content and the URL into a masked URL.\n *\n * @typeParam C - This is inferred by the supplied content\n * @typeParam U - This is inferred by the supplied URL\n * @param content - The content to display\n * @param url - The URL the content links to\n */\nexport function hyperlink<C extends string, U extends string>(content: C, url: U): `[${C}](${U})`;\n\n/**\n * Formats the content and the URL into a masked URL with a custom tooltip.\n *\n * @typeParam C - This is inferred by the supplied content\n * @typeParam T - This is inferred by the supplied title\n * @param content - The content to display\n * @param url - The URL the content links to\n * @param title - The title shown when hovering on the masked link\n */\nexport function hyperlink<C extends string, T extends string>(\n\tcontent: C,\n\turl: URL,\n\ttitle: T,\n): `[${C}](${string} \"${T}\")`;\n\n/**\n * Formats the content and the URL into a masked URL with a custom tooltip.\n *\n * @typeParam C - This is inferred by the supplied content\n * @typeParam U - This is inferred by the supplied URL\n * @typeParam T - This is inferred by the supplied title\n * @param content - The content to display\n * @param url - The URL the content links to\n * @param title - The title shown when hovering on the masked link\n */\nexport function hyperlink<C extends string, U extends string, T extends string>(\n\tcontent: C,\n\turl: U,\n\ttitle: T,\n): `[${C}](${U} \"${T}\")`;\n\nexport function hyperlink(content: string, url: URL | string, title?: string) {\n\treturn title ? `[${content}](${url} \"${title}\")` : `[${content}](${url})`;\n}\n\n/**\n * Formats the content into a spoiler.\n *\n * @typeParam C - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function spoiler<C extends string>(content: C): `||${C}||` {\n\treturn `||${content}||`;\n}\n\n/**\n * Formats a user id into a user mention.\n *\n * @typeParam C - This is inferred by the supplied user id\n * @param userId - The user id to format\n */\nexport function userMention<C extends Snowflake>(userId: C): `<@${C}>` {\n\treturn `<@${userId}>`;\n}\n\n/**\n * Formats a channel id into a channel mention.\n *\n * @typeParam C - This is inferred by the supplied channel id\n * @param channelId - The channel id to format\n */\nexport function channelMention<C extends Snowflake>(channelId: C): `<#${C}>` {\n\treturn `<#${channelId}>`;\n}\n\n/**\n * Formats a role id into a role mention.\n *\n * @typeParam C - This is inferred by the supplied role id\n * @param roleId - The role id to format\n */\nexport function roleMention<C extends Snowflake>(roleId: C): `<@&${C}>` {\n\treturn `<@&${roleId}>`;\n}\n\n/**\n * Formats an application command name, subcommand group name, subcommand name, and id into an application command mention.\n *\n * @typeParam N - This is inferred by the supplied command name\n * @typeParam G - This is inferred by the supplied subcommand group name\n * @typeParam S - This is inferred by the supplied subcommand name\n * @typeParam I - This is inferred by the supplied command id\n * @param commandName - The application command name to format\n * @param subcommandGroupName - The subcommand group name to format\n * @param subcommandName - The subcommand name to format\n * @param commandId - The application command id to format\n */\nexport function chatInputApplicationCommandMention<\n\tN extends string,\n\tG extends string,\n\tS extends string,\n\tI extends Snowflake,\n>(commandName: N, subcommandGroupName: G, subcommandName: S, commandId: I): `</${N} ${G} ${S}:${I}>`;\n\n/**\n * Formats an application command name, subcommand name, and id into an application command mention.\n *\n * @typeParam N - This is inferred by the supplied command name\n * @typeParam S - This is inferred by the supplied subcommand name\n * @typeParam I - This is inferred by the supplied command id\n * @param commandName - The application command name to format\n * @param subcommandName - The subcommand name to format\n * @param commandId - The application command id to format\n */\nexport function chatInputApplicationCommandMention<N extends string, S extends string, I extends Snowflake>(\n\tcommandName: N,\n\tsubcommandName: S,\n\tcommandId: I,\n): `</${N} ${S}:${I}>`;\n\n/**\n * Formats an application command name and id into an application command mention.\n *\n * @typeParam N - This is inferred by the supplied command name\n * @typeParam I - This is inferred by the supplied command id\n * @param commandName - The application command name to format\n * @param commandId - The application command id to format\n */\nexport function chatInputApplicationCommandMention<N extends string, I extends Snowflake>(\n\tcommandName: N,\n\tcommandId: I,\n): `</${N}:${I}>`;\n\nexport function chatInputApplicationCommandMention<\n\tN extends string,\n\tG extends Snowflake | string,\n\tS extends Snowflake | string,\n\tI extends Snowflake,\n>(\n\tcommandName: N,\n\tsubcommandGroupName: G,\n\tsubcommandName?: S,\n\tcommandId?: I,\n): `</${N} ${G} ${S}:${I}>` | `</${N} ${G}:${S}>` | `</${N}:${G}>` {\n\tif (commandId !== undefined) {\n\t\treturn `</${commandName} ${subcommandGroupName} ${subcommandName!}:${commandId}>`;\n\t}\n\n\tif (subcommandName !== undefined) {\n\t\treturn `</${commandName} ${subcommandGroupName}:${subcommandName}>`;\n\t}\n\n\treturn `</${commandName}:${subcommandGroupName}>`;\n}\n\n/**\n * Formats a non-animated emoji id into a fully qualified emoji identifier.\n *\n * @typeParam C - This is inferred by the supplied emoji id\n * @param emojiId - The emoji id to format\n */\nexport function formatEmoji<C extends Snowflake>(emojiId: C, animated?: false): `<:_:${C}>`;\n\n/**\n * Formats an animated emoji id into a fully qualified emoji identifier.\n *\n * @typeParam C - This is inferred by the supplied emoji id\n * @param emojiId - The emoji id to format\n * @param animated - Whether the emoji is animated\n */\nexport function formatEmoji<C extends Snowflake>(emojiId: C, animated?: true): `<a:_:${C}>`;\n\n/**\n * Formats an emoji id into a fully qualified emoji identifier.\n *\n * @typeParam C - This is inferred by the supplied emoji id\n * @param emojiId - The emoji id to format\n * @param animated - Whether the emoji is animated\n */\nexport function formatEmoji<C extends Snowflake>(emojiId: C, animated?: boolean): `<:_:${C}>` | `<a:_:${C}>`;\n\nexport function formatEmoji<C extends Snowflake>(emojiId: C, animated = false): `<:_:${C}>` | `<a:_:${C}>` {\n\treturn `<${animated ? 'a' : ''}:_:${emojiId}>`;\n}\n\n/**\n * Formats a channel link for a direct message channel.\n *\n * @typeParam C - This is inferred by the supplied channel id\n * @param channelId - The channel's id\n */\nexport function channelLink<C extends Snowflake>(channelId: C): `https://discord.com/channels/@me/${C}`;\n\n/**\n * Formats a channel link for a guild channel.\n *\n * @typeParam C - This is inferred by the supplied channel id\n * @typeParam G - This is inferred by the supplied guild id\n * @param channelId - The channel's id\n * @param guildId - The guild's id\n */\nexport function channelLink<C extends Snowflake, G extends Snowflake>(\n\tchannelId: C,\n\tguildId: G,\n): `https://discord.com/channels/${G}/${C}`;\n\nexport function channelLink<C extends Snowflake, G extends Snowflake>(\n\tchannelId: C,\n\tguildId?: G,\n): `https://discord.com/channels/@me/${C}` | `https://discord.com/channels/${G}/${C}` {\n\treturn `https://discord.com/channels/${guildId ?? '@me'}/${channelId}`;\n}\n\n/**\n * Formats a message link for a direct message channel.\n *\n * @typeParam C - This is inferred by the supplied channel id\n * @typeParam M - This is inferred by the supplied message id\n * @param channelId - The channel's id\n * @param messageId - The message's id\n */\nexport function messageLink<C extends Snowflake, M extends Snowflake>(\n\tchannelId: C,\n\tmessageId: M,\n): `https://discord.com/channels/@me/${C}/${M}`;\n\n/**\n * Formats a message link for a guild channel.\n *\n * @typeParam C - This is inferred by the supplied channel id\n * @typeParam M - This is inferred by the supplied message id\n * @typeParam G - This is inferred by the supplied guild id\n * @param channelId - The channel's id\n * @param messageId - The message's id\n * @param guildId - The guild's id\n */\nexport function messageLink<C extends Snowflake, M extends Snowflake, G extends Snowflake>(\n\tchannelId: C,\n\tmessageId: M,\n\tguildId: G,\n): `https://discord.com/channels/${G}/${C}/${M}`;\n\nexport function messageLink<C extends Snowflake, M extends Snowflake, G extends Snowflake>(\n\tchannelId: C,\n\tmessageId: M,\n\tguildId?: G,\n): `https://discord.com/channels/@me/${C}/${M}` | `https://discord.com/channels/${G}/${C}/${M}` {\n\treturn `${guildId === undefined ? channelLink(channelId) : channelLink(channelId, guildId)}/${messageId}`;\n}\n\n/**\n * Formats a date into a short date-time string.\n *\n * @param date - The date to format. Defaults to the current time\n */\nexport function time(date?: Date): `<t:${bigint}>`;\n\n/**\n * Formats a date given a format style.\n *\n * @typeParam S - This is inferred by the supplied {@link TimestampStylesString}\n * @param date - The date to format\n * @param style - The style to use\n */\nexport function time<S extends TimestampStylesString>(date: Date, style: S): `<t:${bigint}:${S}>`;\n\n/**\n * Formats the given timestamp into a short date-time string.\n *\n * @typeParam C - This is inferred by the supplied timestamp\n * @param seconds - A Unix timestamp in seconds\n */\nexport function time<C extends number>(seconds: C): `<t:${C}>`;\n\n/**\n * Formats the given timestamp into a short date-time string.\n *\n * @typeParam C - This is inferred by the supplied timestamp\n * @typeParam S - This is inferred by the supplied {@link TimestampStylesString}\n * @param seconds - A Unix timestamp in seconds\n * @param style - The style to use\n */\nexport function time<C extends number, S extends TimestampStylesString>(seconds: C, style: S): `<t:${C}:${S}>`;\n\nexport function time(timeOrSeconds?: Date | number, style?: TimestampStylesString): string {\n\tif (typeof timeOrSeconds !== 'number') {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\ttimeOrSeconds = Math.floor((timeOrSeconds?.getTime() ?? Date.now()) / 1_000);\n\t}\n\n\treturn typeof style === 'string' ? `<t:${timeOrSeconds}:${style}>` : `<t:${timeOrSeconds}>`;\n}\n\n/**\n * The {@link https://discord.com/developers/docs/reference#message-formatting-timestamp-styles | message formatting timestamp styles}\n * supported by Discord.\n */\nexport const TimestampStyles = {\n\t/**\n\t * Short time format, consisting of hours and minutes.\n\t *\n\t * @example `16:20`\n\t */\n\tShortTime: 't',\n\n\t/**\n\t * Long time format, consisting of hours, minutes, and seconds.\n\t *\n\t * @example `16:20:30`\n\t */\n\tLongTime: 'T',\n\n\t/**\n\t * Short date format, consisting of day, month, and year.\n\t *\n\t * @example `20/04/2021`\n\t */\n\tShortDate: 'd',\n\n\t/**\n\t * Long date format, consisting of day, month, and year.\n\t *\n\t * @example `20 April 2021`\n\t */\n\tLongDate: 'D',\n\n\t/**\n\t * Short date-time format, consisting of short date and short time formats.\n\t *\n\t * @example `20 April 2021 16:20`\n\t */\n\tShortDateTime: 'f',\n\n\t/**\n\t * Long date-time format, consisting of long date and short time formats.\n\t *\n\t * @example `Tuesday, 20 April 2021 16:20`\n\t */\n\tLongDateTime: 'F',\n\n\t/**\n\t * Relative time format, consisting of a relative duration format.\n\t *\n\t * @example `2 months ago`\n\t */\n\tRelativeTime: 'R',\n} as const satisfies Record<string, string>;\n\n/**\n * The possible {@link TimestampStyles} values.\n */\nexport type TimestampStylesString = (typeof TimestampStyles)[keyof typeof TimestampStyles];\n\n// prettier-ignore\n/**\n * All the available faces from Discord's native slash commands.\n */\nexport enum Faces {\n\t/**\n\t * `¯\\_(ツ)_/¯`\n\t */\n\t// eslint-disable-next-line no-useless-escape\n\tShrug = '¯\\_(ツ)_/¯',\n\n\t/**\n\t * `(╯°□°)╯︵ ┻━┻`\n\t */\n\tTableflip = '(╯°□°)╯︵ ┻━┻',\n\n\t/**\n\t * `┬─┬ノ( º _ ºノ)`\n\t */\n\tUnflip = '┬─┬ノ( º _ ºノ)',\n}\n"],"mappings":"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","names":["codeBlock","inlineCode","bold","italic","strikethrough","spoiler","Faces"]} \ No newline at end of file
diff --git a/node_modules/@discordjs/formatters/package.json b/node_modules/@discordjs/formatters/package.json
new file mode 100644
index 0000000..3f63f9e
--- /dev/null
+++ b/node_modules/@discordjs/formatters/package.json
@@ -0,0 +1,72 @@
+{
+ "name": "@discordjs/formatters",
+ "version": "0.3.2",
+ "description": "A set of functions to format strings for Discord.",
+ "scripts": {
+ "test": "vitest run",
+ "build": "tsup",
+ "build:docs": "tsc -p tsconfig.docs.json",
+ "lint": "prettier --check . && cross-env TIMING=1 eslint src __tests__ --ext .mjs,.js,.ts --format=pretty",
+ "format": "prettier --write . && cross-env TIMING=1 eslint src __tests__ --ext .mjs,.js,.ts --fix --format=pretty",
+ "docs": "yarn build:docs && api-extractor run --local && api-extractor run --local --config ./api-extractor-docs.json",
+ "prepack": "yarn build && yarn lint",
+ "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/formatters/*'",
+ "release": "cliff-jumper"
+ },
+ "main": "./dist/index.js",
+ "module": "./dist/index.mjs",
+ "typings": "./dist/index.d.ts",
+ "exports": {
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.mjs",
+ "require": "./dist/index.js"
+ },
+ "directories": {
+ "lib": "src",
+ "test": "__tests__"
+ },
+ "files": [
+ "dist"
+ ],
+ "contributors": [
+ "Crawl <icrawltogo@gmail.com>",
+ "SpaceEEC <spaceeec@yahoo.com>",
+ "Vlad Frangu <kingdgrizzle@gmail.com>",
+ "Aura Román <kyradiscord@gmail.com>"
+ ],
+ "license": "Apache-2.0",
+ "keywords": [],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/discordjs/discord.js.git",
+ "directory": "packages/formatters"
+ },
+ "bugs": {
+ "url": "https://github.com/discordjs/discord.js/issues"
+ },
+ "homepage": "https://discord.js.org",
+ "dependencies": {
+ "discord-api-types": "0.37.50"
+ },
+ "devDependencies": {
+ "@favware/cliff-jumper": "^2.1.1",
+ "@microsoft/api-extractor": "^7.36.4",
+ "@types/node": "16.18.40",
+ "@vitest/coverage-v8": "^0.34.2",
+ "cross-env": "^7.0.3",
+ "eslint": "^8.47.0",
+ "eslint-config-neon": "^0.1.47",
+ "eslint-formatter-pretty": "^5.0.0",
+ "prettier": "^2.8.8",
+ "tsup": "^7.2.0",
+ "turbo": "^1.10.12",
+ "typescript": "^5.1.6",
+ "vitest": "^0.34.2"
+ },
+ "engines": {
+ "node": ">=16.11.0"
+ },
+ "publishConfig": {
+ "access": "public"
+ }
+} \ No newline at end of file