diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..47619cb --- /dev/null +++ b/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,43 @@ +# Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to make participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +- The use of sexualized language or imagery and unwelcome sexual attention or advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned with this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [contact.lynnux@gmail.com](mailto:contact.lynnux@gmail.com). All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org), version 2.0. diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..d9a08e7 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,11 @@ +github: Dark-LYNN +patreon: Dark_Lynn +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry +custom: # Replace with custom url \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..bf39fb3 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,46 @@ +--- +name: Bug report +about: Create a report to help us improve +title: "[Bug]" +labels: bug +assignees: Dark-LYNN + +--- + +## Bug Report + +**Describe the Bug:** +A clear and concise description of what the bug is. + +**To Reproduce:** +Steps to reproduce the behavior: + +1. '...' *(optional)* +2. Command used '....' *\** +3. what you get '...' *\** + +**Expected Behavior:** +A clear and concise description of what you expected to happen. + +**Screenshots:** +If applicable, add screenshots to help explain your problem. + +**Environment:** + +- Bot Version: `[e.g., v1.0.0]` *(if enabled)* +- Your serverID/Name `[e.g., 1153968713276604436]` +- Your userID/Name: `[e.g., LynnuxDev]` + +**Additional Context:** +Add any other context about the problem here. + +**Possible Solution:** +If you have a suggestion on how to fix the bug or what might be causing it, please let us know. + +--- + +**Note:** + +- Before submitting, please make sure that the bot is not currently down. +- Search for existing issues to avoid duplication. +- If the bug is related to a specific command or feature, please mention it. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..1da1b93 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,15 @@ +blank_issues_enabled: false +contact_links: + - name: GitHub Community Support + url: https://github.com/LynnuxDev/Akira/discussions + about: Please ask and answer questions here. + - name: Report a vulnerability + url: https://github.com/LynnuxDev/Akira/security/advisories/new + about: Please report security vulnerabilities here. +templates: + - name: "Bug report" + description: "Create a bug report template" + filename: "bug_report.md" + - name: "Feature request" + description: "Submit a feature request" + filename: "feature_request.md" diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..4cd0cf1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: enhancement +assignees: Dark-LYNN + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/SECURITY.md b/.github/SECURITY.md new file mode 100644 index 0000000..de65bd3 --- /dev/null +++ b/.github/SECURITY.md @@ -0,0 +1,40 @@ +# Security Policy + +## Reporting a Vulnerability + +At LynnuxDev, we take security seriously. If you discover a security vulnerability in Akira, we appreciate your help in disclosing it to us in a responsible manner. + +To report a security vulnerability, please email us at [contact.lynnux@gmail.com](mailto:contact.lynnux@gmail.com) with the details. We request that you do not publicly disclose the issue until we have had a chance to address it. + +## Security Response Process + +We strive to respond to security vulnerability reports promptly. Here's what you can expect: + +- Once a report is received, we will acknowledge its receipt within 2 business days. +- Our team will review the report and assess the impact and severity. +- If necessary, we will work with you to understand the steps to reproduce and validate the vulnerability. +- Once validated, we will work on developing a fix for the issue. +- A security release will be issued within 5 to 10 business days to address the vulnerability, and we will coordinate with you on an appropriate disclosure timeline. + +## Guidelines for Reporting Security Issues + +When reporting a security issue, please provide the following information: + +- Your Discord server/username (or other contact information, if applicable). +- A clear and concise description of the vulnerability. +- Steps to reproduce the vulnerability. +- Any additional information that might help us understand and address the issue. + +We appreciate your contribution to the security of Akira. Thank you for helping us keep our community safe. + +## Responsible Disclosure + +We encourage responsible disclosure of security vulnerabilities. We kindly request that you: + +- Refrain from disclosing the issue publicly until we have had a chance to address it. +- Do not exploit the vulnerability for any reason. +- Provide us with a reasonable amount of time to address and fix the vulnerability before any public disclosure. + +Thank you for your understanding and cooperation. + +--- diff --git a/.github/custom-properties.json b/.github/custom-properties.json new file mode 100644 index 0000000..31adada --- /dev/null +++ b/.github/custom-properties.json @@ -0,0 +1,11 @@ +{ + "botName": "Akira", + "primaryLanguage": "TypeScript", + "minimumNodeVersion": "22.3.0", + "communityStatus": "active", + "license": "MIT", + "features": { + "autoModeration": "beta", + "roleplay": "beta" + } +} diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..c394ead --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,31 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + - package-ecosystem: "npm" + directory: "/" + schedule: + interval: "weekly" + allow: + - dependency-name: "@tryforge/forge.api" + - dependency-name: "@tryforge/forgescript" + - dependency-name: "@tryforge/forge.db" + - dependency-name: "discord.js" + - dependency-name: "typescript" + - dependency-name: "sqlite3" + - dependency-name: "node.js" + commit-message: + prefix: "npm" + prefix-development: "npm dev" + labels: + - "npm" + - "dependencies" + pull-request-branch-name: + separator: "-" \ No newline at end of file diff --git a/.github/workflows/read-properties.yml b/.github/workflows/read-properties.yml new file mode 100644 index 0000000..419c887 --- /dev/null +++ b/.github/workflows/read-properties.yml @@ -0,0 +1,12 @@ +name: Read Custom Properties +on: push +jobs: + read-properties: + runs-on: ubuntu-latest + steps: + - name: Checkout Code + uses: actions/checkout@v3 + + - name: Read Custom Properties + run: | + cat .github/custom-properties.json diff --git a/.gitignore b/.gitignore index 2bb07d1..c81a49b 100755 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,5 @@ TODO.MD forge.db src/handler/token.ts src/handler/encryptionKey.ts +pnpm-lock.yaml +files/anime/not-found.json \ No newline at end of file diff --git a/Errors.md b/INFO/Errors.md old mode 100755 new mode 100644 similarity index 98% rename from Errors.md rename to INFO/Errors.md index 818e3e0..b8c1a5e --- a/Errors.md +++ b/INFO/Errors.md @@ -57,6 +57,7 @@ table of content | 720 | User doesn't have perms | The user who ran the command doesn't have the right server specific perms. | | 721 | User cannot be Author | The user given cannot be the author. | | 722 | Target user blocked | The user given has blocked someone/anyone from using this command on them. | +| 723 | User input required | There must be a user given in the query | | 801 | Perms reply | when the user uses perms reply with wrong input. | | 802 | Perms list | Wrong argument for a.perms list. The argument needs to be a user / role / channel. | | 803 | Perms default | No argument for default. | diff --git a/src/slash/job/economy.md b/INFO/economy.md old mode 100755 new mode 100644 similarity index 100% rename from src/slash/job/economy.md rename to INFO/economy.md diff --git a/tags.md b/INFO/tags.md old mode 100755 new mode 100644 similarity index 100% rename from tags.md rename to INFO/tags.md diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f1141a8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 LynnuxDev + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/NM-Edited.md b/NM-Edited.md deleted file mode 100755 index 3a5debe..0000000 --- a/NM-Edited.md +++ /dev/null @@ -1,24 +0,0 @@ -# Edited Node_Modules - -This file explains what changes have been made to the `node_modules` folder. - -- [Edited Node\_Modules](#edited-node_modules) - - [ForgeScript](#forgescript) - - [FunctionManager](#functionmanager) - - [encrypt.js / decrypt.js](#encryptjs--decryptjs) - -## [ForgeScript] - -### FunctionManager - -This removes the Function Spam from Function overrides. - -- location: `node_modules/@tryforge/forgescript/dist/managers/` [.](./node_modules/@tryforge/forgescript/dist/managers/ForgeFunctionManager.js) - -### encrypt.js / decrypt.js - -Changed FIXED_IV to a custom IV so it doesn't use the default IV of [ForgeScript] - -- location: `node_modules/@tryforge/forgescript/dist/native/crypto/` [.](./node_modules/@tryforge/forgescript/dist/native/crypto/encrypt.js) - -[ForgeScript]: https://github.com/tryforge/forgescript diff --git a/files/anime/2dfee968ccecc8aaa5c9d6106405f560d883e60c6f87edd10214437c49c41683.json b/files/anime/2dfee968ccecc8aaa5c9d6106405f560d883e60c6f87edd10214437c49c41683.json deleted file mode 100755 index a2b0e0b..0000000 --- a/files/anime/2dfee968ccecc8aaa5c9d6106405f560d883e60c6f87edd10214437c49c41683.json +++ /dev/null @@ -1,761 +0,0 @@ -{ - "pagination": { - "last_visible_page": 2, - "has_next_page": true, - "current_page": 1, - "items": { - "count": 5, - "total": 6, - "per_page": 5 - } - }, - "data": [ - { - "mal_id": 59978, - "url": "https://myanimelist.net/anime/59978/Sousou_no_Frieren_2nd_Season", - "images": { - "jpg": { - "image_url": "https://cdn.myanimelist.net/images/anime/1750/145801.jpg", - "small_image_url": "https://cdn.myanimelist.net/images/anime/1750/145801t.jpg", - "large_image_url": "https://cdn.myanimelist.net/images/anime/1750/145801l.jpg" - }, - "webp": { - "image_url": "https://cdn.myanimelist.net/images/anime/1750/145801.webp", - "small_image_url": "https://cdn.myanimelist.net/images/anime/1750/145801t.webp", - "large_image_url": "https://cdn.myanimelist.net/images/anime/1750/145801l.webp" - } - }, - "trailer": { - "youtube_id": "DknvOzqQCTo", - "url": "https://www.youtube.com/watch?v=DknvOzqQCTo", - "embed_url": "https://www.youtube.com/embed/DknvOzqQCTo?enablejsapi=1&wmode=opaque&autoplay=1", - "images": { - "image_url": "https://img.youtube.com/vi/DknvOzqQCTo/default.jpg", - "small_image_url": "https://img.youtube.com/vi/DknvOzqQCTo/sddefault.jpg", - "medium_image_url": "https://img.youtube.com/vi/DknvOzqQCTo/mqdefault.jpg", - "large_image_url": "https://img.youtube.com/vi/DknvOzqQCTo/hqdefault.jpg", - "maximum_image_url": "https://img.youtube.com/vi/DknvOzqQCTo/maxresdefault.jpg" - } - }, - "approved": true, - "titles": [ - { - "type": "Default", - "title": "Sousou no Frieren 2nd Season" - }, - { - "type": "Synonym", - "title": "Frieren at the Funeral Season 2" - }, - { - "type": "Japanese", - "title": "葬送のフリーレン 第2期" - }, - { - "type": "English", - "title": "Frieren: Beyond Journey's End Season 2" - } - ], - "title": "Sousou no Frieren 2nd Season", - "title_english": "Frieren: Beyond Journey's End Season 2", - "title_japanese": "葬送のフリーレン 第2期", - "title_synonyms": [ - "Frieren at the Funeral Season 2" - ], - "type": "TV", - "source": "Manga", - "episodes": null, - "status": "Not yet aired", - "airing": false, - "aired": { - "from": null, - "to": null, - "prop": { - "from": { - "day": null, - "month": null, - "year": null - }, - "to": { - "day": null, - "month": null, - "year": null - } - }, - "string": "Not available" - }, - "duration": "Unknown", - "rating": "PG-13 - Teens 13 or older", - "score": null, - "scored_by": null, - "rank": null, - "popularity": 2378, - "members": 85917, - "favorites": 359, - "synopsis": "Second season of Sousou no Frieren.", - "background": "", - "season": null, - "year": null, - "broadcast": { - "day": null, - "time": null, - "timezone": null, - "string": "Unknown" - }, - "producers": [ - { - "mal_id": 1143, - "type": "anime", - "name": "TOHO animation", - "url": "https://myanimelist.net/anime/producer/1143/TOHO_animation" - } - ], - "licensors": [], - "studios": [ - { - "mal_id": 11, - "type": "anime", - "name": "Madhouse", - "url": "https://myanimelist.net/anime/producer/11/Madhouse" - } - ], - "genres": [ - { - "mal_id": 2, - "type": "anime", - "name": "Adventure", - "url": "https://myanimelist.net/anime/genre/2/Adventure" - }, - { - "mal_id": 8, - "type": "anime", - "name": "Drama", - "url": "https://myanimelist.net/anime/genre/8/Drama" - }, - { - "mal_id": 10, - "type": "anime", - "name": "Fantasy", - "url": "https://myanimelist.net/anime/genre/10/Fantasy" - } - ], - "explicit_genres": [], - "themes": [], - "demographics": [ - { - "mal_id": 27, - "type": "anime", - "name": "Shounen", - "url": "https://myanimelist.net/anime/genre/27/Shounen" - } - ] - }, - { - "mal_id": 59978, - "url": "https://myanimelist.net/anime/59978/Sousou_no_Frieren_2nd_Season", - "images": { - "jpg": { - "image_url": "https://cdn.myanimelist.net/images/anime/1750/145801.jpg", - "small_image_url": "https://cdn.myanimelist.net/images/anime/1750/145801t.jpg", - "large_image_url": "https://cdn.myanimelist.net/images/anime/1750/145801l.jpg" - }, - "webp": { - "image_url": "https://cdn.myanimelist.net/images/anime/1750/145801.webp", - "small_image_url": "https://cdn.myanimelist.net/images/anime/1750/145801t.webp", - "large_image_url": "https://cdn.myanimelist.net/images/anime/1750/145801l.webp" - } - }, - "trailer": { - "youtube_id": "DknvOzqQCTo", - "url": "https://www.youtube.com/watch?v=DknvOzqQCTo", - "embed_url": "https://www.youtube.com/embed/DknvOzqQCTo?enablejsapi=1&wmode=opaque&autoplay=1", - "images": { - "image_url": "https://img.youtube.com/vi/DknvOzqQCTo/default.jpg", - "small_image_url": "https://img.youtube.com/vi/DknvOzqQCTo/sddefault.jpg", - "medium_image_url": "https://img.youtube.com/vi/DknvOzqQCTo/mqdefault.jpg", - "large_image_url": "https://img.youtube.com/vi/DknvOzqQCTo/hqdefault.jpg", - "maximum_image_url": "https://img.youtube.com/vi/DknvOzqQCTo/maxresdefault.jpg" - } - }, - "approved": true, - "titles": [ - { - "type": "Default", - "title": "Sousou no Frieren 2nd Season" - }, - { - "type": "Synonym", - "title": "Frieren at the Funeral Season 2" - }, - { - "type": "Japanese", - "title": "葬送のフリーレン 第2期" - }, - { - "type": "English", - "title": "Frieren: Beyond Journey's End Season 2" - } - ], - "title": "Sousou no Frieren 2nd Season", - "title_english": "Frieren: Beyond Journey's End Season 2", - "title_japanese": "葬送のフリーレン 第2期", - "title_synonyms": [ - "Frieren at the Funeral Season 2" - ], - "type": "TV", - "source": "Manga", - "episodes": null, - "status": "Not yet aired", - "airing": false, - "aired": { - "from": null, - "to": null, - "prop": { - "from": { - "day": null, - "month": null, - "year": null - }, - "to": { - "day": null, - "month": null, - "year": null - } - }, - "string": "Not available" - }, - "duration": "Unknown", - "rating": "PG-13 - Teens 13 or older", - "score": null, - "scored_by": null, - "rank": null, - "popularity": 2378, - "members": 85917, - "favorites": 359, - "synopsis": "Second season of Sousou no Frieren.", - "background": "", - "season": null, - "year": null, - "broadcast": { - "day": null, - "time": null, - "timezone": null, - "string": "Unknown" - }, - "producers": [ - { - "mal_id": 1143, - "type": "anime", - "name": "TOHO animation", - "url": "https://myanimelist.net/anime/producer/1143/TOHO_animation" - } - ], - "licensors": [], - "studios": [ - { - "mal_id": 11, - "type": "anime", - "name": "Madhouse", - "url": "https://myanimelist.net/anime/producer/11/Madhouse" - } - ], - "genres": [ - { - "mal_id": 2, - "type": "anime", - "name": "Adventure", - "url": "https://myanimelist.net/anime/genre/2/Adventure" - }, - { - "mal_id": 8, - "type": "anime", - "name": "Drama", - "url": "https://myanimelist.net/anime/genre/8/Drama" - }, - { - "mal_id": 10, - "type": "anime", - "name": "Fantasy", - "url": "https://myanimelist.net/anime/genre/10/Fantasy" - } - ], - "explicit_genres": [], - "themes": [], - "demographics": [ - { - "mal_id": 27, - "type": "anime", - "name": "Shounen", - "url": "https://myanimelist.net/anime/genre/27/Shounen" - } - ] - }, - { - "mal_id": 52991, - "url": "https://myanimelist.net/anime/52991/Sousou_no_Frieren", - "images": { - "jpg": { - "image_url": "https://cdn.myanimelist.net/images/anime/1015/138006.jpg", - "small_image_url": "https://cdn.myanimelist.net/images/anime/1015/138006t.jpg", - "large_image_url": "https://cdn.myanimelist.net/images/anime/1015/138006l.jpg" - }, - "webp": { - "image_url": "https://cdn.myanimelist.net/images/anime/1015/138006.webp", - "small_image_url": "https://cdn.myanimelist.net/images/anime/1015/138006t.webp", - "large_image_url": "https://cdn.myanimelist.net/images/anime/1015/138006l.webp" - } - }, - "trailer": { - "youtube_id": "ZEkwCGJ3o7M", - "url": "https://www.youtube.com/watch?v=ZEkwCGJ3o7M", - "embed_url": "https://www.youtube.com/embed/ZEkwCGJ3o7M?enablejsapi=1&wmode=opaque&autoplay=1", - "images": { - "image_url": "https://img.youtube.com/vi/ZEkwCGJ3o7M/default.jpg", - "small_image_url": "https://img.youtube.com/vi/ZEkwCGJ3o7M/sddefault.jpg", - "medium_image_url": "https://img.youtube.com/vi/ZEkwCGJ3o7M/mqdefault.jpg", - "large_image_url": "https://img.youtube.com/vi/ZEkwCGJ3o7M/hqdefault.jpg", - "maximum_image_url": "https://img.youtube.com/vi/ZEkwCGJ3o7M/maxresdefault.jpg" - } - }, - "approved": true, - "titles": [ - { - "type": "Default", - "title": "Sousou no Frieren" - }, - { - "type": "Synonym", - "title": "Frieren at the Funeral" - }, - { - "type": "Japanese", - "title": "葬送のフリーレン" - }, - { - "type": "English", - "title": "Frieren: Beyond Journey's End" - } - ], - "title": "Sousou no Frieren", - "title_english": "Frieren: Beyond Journey's End", - "title_japanese": "葬送のフリーレン", - "title_synonyms": [ - "Frieren at the Funeral" - ], - "type": "TV", - "source": "Manga", - "episodes": 28, - "status": "Finished Airing", - "airing": false, - "aired": { - "from": "2023-09-29T00:00:00+00:00", - "to": "2024-03-22T00:00:00+00:00", - "prop": { - "from": { - "day": 29, - "month": 9, - "year": 2023 - }, - "to": { - "day": 22, - "month": 3, - "year": 2024 - } - }, - "string": "Sep 29, 2023 to Mar 22, 2024" - }, - "duration": "24 min per ep", - "rating": "PG-13 - Teens 13 or older", - "score": 9.32, - "scored_by": 534533, - "rank": 1, - "popularity": 189, - "members": 936706, - "favorites": 55775, - "synopsis": "During their decade-long quest to defeat the Demon King, the members of the hero's party—Himmel himself, the priest Heiter, the dwarf warrior Eisen, and the elven mage Frieren—forge bonds through adventures and battles, creating unforgettable precious memories for most of them.\n\nHowever, the time that Frieren spends with her comrades is equivalent to merely a fraction of her life, which has lasted over a thousand years. When the party disbands after their victory, Frieren casually returns to her \"usual\" routine of collecting spells across the continent. Due to her different sense of time, she seemingly holds no strong feelings toward the experiences she went through.\n\nAs the years pass, Frieren gradually realizes how her days in the hero's party truly impacted her. Witnessing the deaths of two of her former companions, Frieren begins to regret having taken their presence for granted; she vows to better understand humans and create real personal connections. Although the story of that once memorable journey has long ended, a new tale is about to begin.\n\n[Written by MAL Rewrite]", - "background": "Sousou no Frieren was released on Blu-ray and DVD in seven volumes from January 24, 2024, to July 17, 2024.", - "season": "fall", - "year": 2023, - "broadcast": { - "day": "Fridays", - "time": "23:00", - "timezone": "Asia/Tokyo", - "string": "Fridays at 23:00 (JST)" - }, - "producers": [ - { - "mal_id": 17, - "type": "anime", - "name": "Aniplex", - "url": "https://myanimelist.net/anime/producer/17/Aniplex" - }, - { - "mal_id": 53, - "type": "anime", - "name": "Dentsu", - "url": "https://myanimelist.net/anime/producer/53/Dentsu" - }, - { - "mal_id": 62, - "type": "anime", - "name": "Shogakukan-Shueisha Productions", - "url": "https://myanimelist.net/anime/producer/62/Shogakukan-Shueisha_Productions" - }, - { - "mal_id": 1003, - "type": "anime", - "name": "Nippon Television Network", - "url": "https://myanimelist.net/anime/producer/1003/Nippon_Television_Network" - }, - { - "mal_id": 1143, - "type": "anime", - "name": "TOHO animation", - "url": "https://myanimelist.net/anime/producer/1143/TOHO_animation" - }, - { - "mal_id": 1430, - "type": "anime", - "name": "Shogakukan", - "url": "https://myanimelist.net/anime/producer/1430/Shogakukan" - } - ], - "licensors": [ - { - "mal_id": 1468, - "type": "anime", - "name": "Crunchyroll", - "url": "https://myanimelist.net/anime/producer/1468/Crunchyroll" - } - ], - "studios": [ - { - "mal_id": 11, - "type": "anime", - "name": "Madhouse", - "url": "https://myanimelist.net/anime/producer/11/Madhouse" - } - ], - "genres": [ - { - "mal_id": 2, - "type": "anime", - "name": "Adventure", - "url": "https://myanimelist.net/anime/genre/2/Adventure" - }, - { - "mal_id": 8, - "type": "anime", - "name": "Drama", - "url": "https://myanimelist.net/anime/genre/8/Drama" - }, - { - "mal_id": 10, - "type": "anime", - "name": "Fantasy", - "url": "https://myanimelist.net/anime/genre/10/Fantasy" - } - ], - "explicit_genres": [], - "themes": [], - "demographics": [ - { - "mal_id": 27, - "type": "anime", - "name": "Shounen", - "url": "https://myanimelist.net/anime/genre/27/Shounen" - } - ] - }, - { - "mal_id": 56885, - "url": "https://myanimelist.net/anime/56885/Sousou_no_Frieren__●●_no_Mahou", - "images": { - "jpg": { - "image_url": "https://cdn.myanimelist.net/images/anime/1197/139034.jpg", - "small_image_url": "https://cdn.myanimelist.net/images/anime/1197/139034t.jpg", - "large_image_url": "https://cdn.myanimelist.net/images/anime/1197/139034l.jpg" - }, - "webp": { - "image_url": "https://cdn.myanimelist.net/images/anime/1197/139034.webp", - "small_image_url": "https://cdn.myanimelist.net/images/anime/1197/139034t.webp", - "large_image_url": "https://cdn.myanimelist.net/images/anime/1197/139034l.webp" - } - }, - "trailer": { - "youtube_id": null, - "url": null, - "embed_url": null, - "images": { - "image_url": null, - "small_image_url": null, - "medium_image_url": null, - "large_image_url": null, - "maximum_image_url": null - } - }, - "approved": true, - "titles": [ - { - "type": "Default", - "title": "Sousou no Frieren: ●● no Mahou" - }, - { - "type": "Synonym", - "title": "Sousou no Frieren: Marumaru no Mahou" - }, - { - "type": "Japanese", - "title": "葬送のフリーレン ~●●の魔法~" - }, - { - "type": "English", - "title": "Frieren: Beyond Journey's End Mini Anime" - } - ], - "title": "Sousou no Frieren: ●● no Mahou", - "title_english": "Frieren: Beyond Journey's End Mini Anime", - "title_japanese": "葬送のフリーレン ~●●の魔法~", - "title_synonyms": [ - "Sousou no Frieren: Marumaru no Mahou" - ], - "type": "ONA", - "source": "Manga", - "episodes": 12, - "status": "Finished Airing", - "airing": false, - "aired": { - "from": "2023-10-11T00:00:00+00:00", - "to": "2024-03-24T00:00:00+00:00", - "prop": { - "from": { - "day": 11, - "month": 10, - "year": 2023 - }, - "to": { - "day": 24, - "month": 3, - "year": 2024 - } - }, - "string": "Oct 11, 2023 to Mar 24, 2024" - }, - "duration": "1 min per ep", - "rating": "PG-13 - Teens 13 or older", - "score": 7.38, - "scored_by": 7359, - "rank": 2413, - "popularity": 5366, - "members": 17039, - "favorites": 51, - "synopsis": "Frieren loves collecting peculiar spells, and her ever-growing arsenal of magic contains the perfect spells for many occasions. Whether it be by stealthily removing alcohol from Heiter's drinks or by remedying her own sleep issues, Frieren is sure to brighten her companions' days with her magic.\n\n[Written by MAL Rewrite]", - "background": "This entry includes the Mizkan Ajipon collaboration episode.", - "season": null, - "year": null, - "broadcast": { - "day": null, - "time": null, - "timezone": null, - "string": null - }, - "producers": [ - { - "mal_id": 1294, - "type": "anime", - "name": "Sound Team Don Juan", - "url": "https://myanimelist.net/anime/producer/1294/Sound_Team_Don_Juan" - } - ], - "licensors": [], - "studios": [ - { - "mal_id": 2705, - "type": "anime", - "name": "TOHO animation STUDIO", - "url": "https://myanimelist.net/anime/producer/2705/TOHO_animation_STUDIO" - } - ], - "genres": [ - { - "mal_id": 4, - "type": "anime", - "name": "Comedy", - "url": "https://myanimelist.net/anime/genre/4/Comedy" - }, - { - "mal_id": 10, - "type": "anime", - "name": "Fantasy", - "url": "https://myanimelist.net/anime/genre/10/Fantasy" - } - ], - "explicit_genres": [], - "themes": [], - "demographics": [] - }, - { - "mal_id": 795, - "url": "https://myanimelist.net/anime/795/Oniisama_e", - "images": { - "jpg": { - "image_url": "https://cdn.myanimelist.net/images/anime/12/18531.jpg", - "small_image_url": "https://cdn.myanimelist.net/images/anime/12/18531t.jpg", - "large_image_url": "https://cdn.myanimelist.net/images/anime/12/18531l.jpg" - }, - "webp": { - "image_url": "https://cdn.myanimelist.net/images/anime/12/18531.webp", - "small_image_url": "https://cdn.myanimelist.net/images/anime/12/18531t.webp", - "large_image_url": "https://cdn.myanimelist.net/images/anime/12/18531l.webp" - } - }, - "trailer": { - "youtube_id": "HVIBFWUwWvw", - "url": "https://www.youtube.com/watch?v=HVIBFWUwWvw", - "embed_url": "https://www.youtube.com/embed/HVIBFWUwWvw?enablejsapi=1&wmode=opaque&autoplay=1", - "images": { - "image_url": "https://img.youtube.com/vi/HVIBFWUwWvw/default.jpg", - "small_image_url": "https://img.youtube.com/vi/HVIBFWUwWvw/sddefault.jpg", - "medium_image_url": "https://img.youtube.com/vi/HVIBFWUwWvw/mqdefault.jpg", - "large_image_url": "https://img.youtube.com/vi/HVIBFWUwWvw/hqdefault.jpg", - "maximum_image_url": "https://img.youtube.com/vi/HVIBFWUwWvw/maxresdefault.jpg" - } - }, - "approved": true, - "titles": [ - { - "type": "Default", - "title": "Oniisama e..." - }, - { - "type": "Synonym", - "title": "Onii-sama e" - }, - { - "type": "Synonym", - "title": "To My Brother..." - }, - { - "type": "Japanese", - "title": "おにいさまへ…" - }, - { - "type": "English", - "title": "Dear Brother" - }, - { - "type": "French", - "title": "Tres Cher frère" - } - ], - "title": "Oniisama e...", - "title_english": "Dear Brother", - "title_japanese": "おにいさまへ…", - "title_synonyms": [ - "Onii-sama e", - "To My Brother..." - ], - "type": "TV", - "source": "Manga", - "episodes": 39, - "status": "Finished Airing", - "airing": false, - "aired": { - "from": "1991-07-14T00:00:00+00:00", - "to": "1992-05-31T00:00:00+00:00", - "prop": { - "from": { - "day": 14, - "month": 7, - "year": 1991 - }, - "to": { - "day": 31, - "month": 5, - "year": 1992 - } - }, - "string": "Jul 14, 1991 to May 31, 1992" - }, - "duration": "25 min per ep", - "rating": "PG-13 - Teens 13 or older", - "score": 7.84, - "scored_by": 11194, - "rank": 930, - "popularity": 3250, - "members": 50114, - "favorites": 1142, - "synopsis": "When 16-year-old Nanako Misonoo enters the prestigious all-girls Seiran Academy, she believes a bright future awaits her. Instead, the unlucky girl finds herself dragged into a web of deceit, misery, and jealousy. On top of that, she is chosen as the newest inductee of the Sorority, an elite group whose members are the envy of the entire school. Having none of the grace, wealth, or talent of the other members, Nanako quickly draws the ire of her jealous classmates—especially the fierce Aya Misaki.\n\nTo cope with her increasingly difficult school life, Nanako recalls her days through letters to her former teacher, Takehiko Henmi, whom she affectionately calls \"onii-sama\" (big brother). She also finds comfort with her four closest friends: her childhood friend Tomoko Arikura, the sociable but erratic Mariko Shinobu, the troubled musician Rei Asaka, and the athletic tomboy Kaoru Orihara.\n\nAn impassioned drama about the hardships of bullying, Oniisama e... chronicles a young girl's harsh life at her new school, as she endures cruel rumours, heartless classmates, and countless social trials.\n\n[Written by MAL Rewrite]", - "background": "", - "season": "summer", - "year": 1991, - "broadcast": { - "day": "Sundays", - "time": "18:00", - "timezone": "Asia/Tokyo", - "string": "Sundays at 18:00 (JST)" - }, - "producers": [ - { - "mal_id": 111, - "type": "anime", - "name": "NHK", - "url": "https://myanimelist.net/anime/producer/111/NHK" - } - ], - "licensors": [ - { - "mal_id": 467, - "type": "anime", - "name": "Discotek Media", - "url": "https://myanimelist.net/anime/producer/467/Discotek_Media" - } - ], - "studios": [ - { - "mal_id": 200, - "type": "anime", - "name": "Tezuka Productions", - "url": "https://myanimelist.net/anime/producer/200/Tezuka_Productions" - } - ], - "genres": [ - { - "mal_id": 8, - "type": "anime", - "name": "Drama", - "url": "https://myanimelist.net/anime/genre/8/Drama" - }, - { - "mal_id": 26, - "type": "anime", - "name": "Girls Love", - "url": "https://myanimelist.net/anime/genre/26/Girls_Love" - } - ], - "explicit_genres": [], - "themes": [ - { - "mal_id": 40, - "type": "anime", - "name": "Psychological", - "url": "https://myanimelist.net/anime/genre/40/Psychological" - }, - { - "mal_id": 23, - "type": "anime", - "name": "School", - "url": "https://myanimelist.net/anime/genre/23/School" - } - ], - "demographics": [ - { - "mal_id": 25, - "type": "anime", - "name": "Shoujo", - "url": "https://myanimelist.net/anime/genre/25/Shoujo" - } - ] - } - ] -} \ No newline at end of file diff --git a/files/anime/51041e5f-31cf-44e1-9af1-66ee3d139c65.json b/files/anime/51041e5f-31cf-44e1-9af1-66ee3d139c65.json deleted file mode 100755 index a2b0e0b..0000000 --- a/files/anime/51041e5f-31cf-44e1-9af1-66ee3d139c65.json +++ /dev/null @@ -1,761 +0,0 @@ -{ - "pagination": { - "last_visible_page": 2, - "has_next_page": true, - "current_page": 1, - "items": { - "count": 5, - "total": 6, - "per_page": 5 - } - }, - "data": [ - { - "mal_id": 59978, - "url": "https://myanimelist.net/anime/59978/Sousou_no_Frieren_2nd_Season", - "images": { - "jpg": { - "image_url": "https://cdn.myanimelist.net/images/anime/1750/145801.jpg", - "small_image_url": "https://cdn.myanimelist.net/images/anime/1750/145801t.jpg", - "large_image_url": "https://cdn.myanimelist.net/images/anime/1750/145801l.jpg" - }, - "webp": { - "image_url": "https://cdn.myanimelist.net/images/anime/1750/145801.webp", - "small_image_url": "https://cdn.myanimelist.net/images/anime/1750/145801t.webp", - "large_image_url": "https://cdn.myanimelist.net/images/anime/1750/145801l.webp" - } - }, - "trailer": { - "youtube_id": "DknvOzqQCTo", - "url": "https://www.youtube.com/watch?v=DknvOzqQCTo", - "embed_url": "https://www.youtube.com/embed/DknvOzqQCTo?enablejsapi=1&wmode=opaque&autoplay=1", - "images": { - "image_url": "https://img.youtube.com/vi/DknvOzqQCTo/default.jpg", - "small_image_url": "https://img.youtube.com/vi/DknvOzqQCTo/sddefault.jpg", - "medium_image_url": "https://img.youtube.com/vi/DknvOzqQCTo/mqdefault.jpg", - "large_image_url": "https://img.youtube.com/vi/DknvOzqQCTo/hqdefault.jpg", - "maximum_image_url": "https://img.youtube.com/vi/DknvOzqQCTo/maxresdefault.jpg" - } - }, - "approved": true, - "titles": [ - { - "type": "Default", - "title": "Sousou no Frieren 2nd Season" - }, - { - "type": "Synonym", - "title": "Frieren at the Funeral Season 2" - }, - { - "type": "Japanese", - "title": "葬送のフリーレン 第2期" - }, - { - "type": "English", - "title": "Frieren: Beyond Journey's End Season 2" - } - ], - "title": "Sousou no Frieren 2nd Season", - "title_english": "Frieren: Beyond Journey's End Season 2", - "title_japanese": "葬送のフリーレン 第2期", - "title_synonyms": [ - "Frieren at the Funeral Season 2" - ], - "type": "TV", - "source": "Manga", - "episodes": null, - "status": "Not yet aired", - "airing": false, - "aired": { - "from": null, - "to": null, - "prop": { - "from": { - "day": null, - "month": null, - "year": null - }, - "to": { - "day": null, - "month": null, - "year": null - } - }, - "string": "Not available" - }, - "duration": "Unknown", - "rating": "PG-13 - Teens 13 or older", - "score": null, - "scored_by": null, - "rank": null, - "popularity": 2378, - "members": 85917, - "favorites": 359, - "synopsis": "Second season of Sousou no Frieren.", - "background": "", - "season": null, - "year": null, - "broadcast": { - "day": null, - "time": null, - "timezone": null, - "string": "Unknown" - }, - "producers": [ - { - "mal_id": 1143, - "type": "anime", - "name": "TOHO animation", - "url": "https://myanimelist.net/anime/producer/1143/TOHO_animation" - } - ], - "licensors": [], - "studios": [ - { - "mal_id": 11, - "type": "anime", - "name": "Madhouse", - "url": "https://myanimelist.net/anime/producer/11/Madhouse" - } - ], - "genres": [ - { - "mal_id": 2, - "type": "anime", - "name": "Adventure", - "url": "https://myanimelist.net/anime/genre/2/Adventure" - }, - { - "mal_id": 8, - "type": "anime", - "name": "Drama", - "url": "https://myanimelist.net/anime/genre/8/Drama" - }, - { - "mal_id": 10, - "type": "anime", - "name": "Fantasy", - "url": "https://myanimelist.net/anime/genre/10/Fantasy" - } - ], - "explicit_genres": [], - "themes": [], - "demographics": [ - { - "mal_id": 27, - "type": "anime", - "name": "Shounen", - "url": "https://myanimelist.net/anime/genre/27/Shounen" - } - ] - }, - { - "mal_id": 59978, - "url": "https://myanimelist.net/anime/59978/Sousou_no_Frieren_2nd_Season", - "images": { - "jpg": { - "image_url": "https://cdn.myanimelist.net/images/anime/1750/145801.jpg", - "small_image_url": "https://cdn.myanimelist.net/images/anime/1750/145801t.jpg", - "large_image_url": "https://cdn.myanimelist.net/images/anime/1750/145801l.jpg" - }, - "webp": { - "image_url": "https://cdn.myanimelist.net/images/anime/1750/145801.webp", - "small_image_url": "https://cdn.myanimelist.net/images/anime/1750/145801t.webp", - "large_image_url": "https://cdn.myanimelist.net/images/anime/1750/145801l.webp" - } - }, - "trailer": { - "youtube_id": "DknvOzqQCTo", - "url": "https://www.youtube.com/watch?v=DknvOzqQCTo", - "embed_url": "https://www.youtube.com/embed/DknvOzqQCTo?enablejsapi=1&wmode=opaque&autoplay=1", - "images": { - "image_url": "https://img.youtube.com/vi/DknvOzqQCTo/default.jpg", - "small_image_url": "https://img.youtube.com/vi/DknvOzqQCTo/sddefault.jpg", - "medium_image_url": "https://img.youtube.com/vi/DknvOzqQCTo/mqdefault.jpg", - "large_image_url": "https://img.youtube.com/vi/DknvOzqQCTo/hqdefault.jpg", - "maximum_image_url": "https://img.youtube.com/vi/DknvOzqQCTo/maxresdefault.jpg" - } - }, - "approved": true, - "titles": [ - { - "type": "Default", - "title": "Sousou no Frieren 2nd Season" - }, - { - "type": "Synonym", - "title": "Frieren at the Funeral Season 2" - }, - { - "type": "Japanese", - "title": "葬送のフリーレン 第2期" - }, - { - "type": "English", - "title": "Frieren: Beyond Journey's End Season 2" - } - ], - "title": "Sousou no Frieren 2nd Season", - "title_english": "Frieren: Beyond Journey's End Season 2", - "title_japanese": "葬送のフリーレン 第2期", - "title_synonyms": [ - "Frieren at the Funeral Season 2" - ], - "type": "TV", - "source": "Manga", - "episodes": null, - "status": "Not yet aired", - "airing": false, - "aired": { - "from": null, - "to": null, - "prop": { - "from": { - "day": null, - "month": null, - "year": null - }, - "to": { - "day": null, - "month": null, - "year": null - } - }, - "string": "Not available" - }, - "duration": "Unknown", - "rating": "PG-13 - Teens 13 or older", - "score": null, - "scored_by": null, - "rank": null, - "popularity": 2378, - "members": 85917, - "favorites": 359, - "synopsis": "Second season of Sousou no Frieren.", - "background": "", - "season": null, - "year": null, - "broadcast": { - "day": null, - "time": null, - "timezone": null, - "string": "Unknown" - }, - "producers": [ - { - "mal_id": 1143, - "type": "anime", - "name": "TOHO animation", - "url": "https://myanimelist.net/anime/producer/1143/TOHO_animation" - } - ], - "licensors": [], - "studios": [ - { - "mal_id": 11, - "type": "anime", - "name": "Madhouse", - "url": "https://myanimelist.net/anime/producer/11/Madhouse" - } - ], - "genres": [ - { - "mal_id": 2, - "type": "anime", - "name": "Adventure", - "url": "https://myanimelist.net/anime/genre/2/Adventure" - }, - { - "mal_id": 8, - "type": "anime", - "name": "Drama", - "url": "https://myanimelist.net/anime/genre/8/Drama" - }, - { - "mal_id": 10, - "type": "anime", - "name": "Fantasy", - "url": "https://myanimelist.net/anime/genre/10/Fantasy" - } - ], - "explicit_genres": [], - "themes": [], - "demographics": [ - { - "mal_id": 27, - "type": "anime", - "name": "Shounen", - "url": "https://myanimelist.net/anime/genre/27/Shounen" - } - ] - }, - { - "mal_id": 52991, - "url": "https://myanimelist.net/anime/52991/Sousou_no_Frieren", - "images": { - "jpg": { - "image_url": "https://cdn.myanimelist.net/images/anime/1015/138006.jpg", - "small_image_url": "https://cdn.myanimelist.net/images/anime/1015/138006t.jpg", - "large_image_url": "https://cdn.myanimelist.net/images/anime/1015/138006l.jpg" - }, - "webp": { - "image_url": "https://cdn.myanimelist.net/images/anime/1015/138006.webp", - "small_image_url": "https://cdn.myanimelist.net/images/anime/1015/138006t.webp", - "large_image_url": "https://cdn.myanimelist.net/images/anime/1015/138006l.webp" - } - }, - "trailer": { - "youtube_id": "ZEkwCGJ3o7M", - "url": "https://www.youtube.com/watch?v=ZEkwCGJ3o7M", - "embed_url": "https://www.youtube.com/embed/ZEkwCGJ3o7M?enablejsapi=1&wmode=opaque&autoplay=1", - "images": { - "image_url": "https://img.youtube.com/vi/ZEkwCGJ3o7M/default.jpg", - "small_image_url": "https://img.youtube.com/vi/ZEkwCGJ3o7M/sddefault.jpg", - "medium_image_url": "https://img.youtube.com/vi/ZEkwCGJ3o7M/mqdefault.jpg", - "large_image_url": "https://img.youtube.com/vi/ZEkwCGJ3o7M/hqdefault.jpg", - "maximum_image_url": "https://img.youtube.com/vi/ZEkwCGJ3o7M/maxresdefault.jpg" - } - }, - "approved": true, - "titles": [ - { - "type": "Default", - "title": "Sousou no Frieren" - }, - { - "type": "Synonym", - "title": "Frieren at the Funeral" - }, - { - "type": "Japanese", - "title": "葬送のフリーレン" - }, - { - "type": "English", - "title": "Frieren: Beyond Journey's End" - } - ], - "title": "Sousou no Frieren", - "title_english": "Frieren: Beyond Journey's End", - "title_japanese": "葬送のフリーレン", - "title_synonyms": [ - "Frieren at the Funeral" - ], - "type": "TV", - "source": "Manga", - "episodes": 28, - "status": "Finished Airing", - "airing": false, - "aired": { - "from": "2023-09-29T00:00:00+00:00", - "to": "2024-03-22T00:00:00+00:00", - "prop": { - "from": { - "day": 29, - "month": 9, - "year": 2023 - }, - "to": { - "day": 22, - "month": 3, - "year": 2024 - } - }, - "string": "Sep 29, 2023 to Mar 22, 2024" - }, - "duration": "24 min per ep", - "rating": "PG-13 - Teens 13 or older", - "score": 9.32, - "scored_by": 534533, - "rank": 1, - "popularity": 189, - "members": 936706, - "favorites": 55775, - "synopsis": "During their decade-long quest to defeat the Demon King, the members of the hero's party—Himmel himself, the priest Heiter, the dwarf warrior Eisen, and the elven mage Frieren—forge bonds through adventures and battles, creating unforgettable precious memories for most of them.\n\nHowever, the time that Frieren spends with her comrades is equivalent to merely a fraction of her life, which has lasted over a thousand years. When the party disbands after their victory, Frieren casually returns to her \"usual\" routine of collecting spells across the continent. Due to her different sense of time, she seemingly holds no strong feelings toward the experiences she went through.\n\nAs the years pass, Frieren gradually realizes how her days in the hero's party truly impacted her. Witnessing the deaths of two of her former companions, Frieren begins to regret having taken their presence for granted; she vows to better understand humans and create real personal connections. Although the story of that once memorable journey has long ended, a new tale is about to begin.\n\n[Written by MAL Rewrite]", - "background": "Sousou no Frieren was released on Blu-ray and DVD in seven volumes from January 24, 2024, to July 17, 2024.", - "season": "fall", - "year": 2023, - "broadcast": { - "day": "Fridays", - "time": "23:00", - "timezone": "Asia/Tokyo", - "string": "Fridays at 23:00 (JST)" - }, - "producers": [ - { - "mal_id": 17, - "type": "anime", - "name": "Aniplex", - "url": "https://myanimelist.net/anime/producer/17/Aniplex" - }, - { - "mal_id": 53, - "type": "anime", - "name": "Dentsu", - "url": "https://myanimelist.net/anime/producer/53/Dentsu" - }, - { - "mal_id": 62, - "type": "anime", - "name": "Shogakukan-Shueisha Productions", - "url": "https://myanimelist.net/anime/producer/62/Shogakukan-Shueisha_Productions" - }, - { - "mal_id": 1003, - "type": "anime", - "name": "Nippon Television Network", - "url": "https://myanimelist.net/anime/producer/1003/Nippon_Television_Network" - }, - { - "mal_id": 1143, - "type": "anime", - "name": "TOHO animation", - "url": "https://myanimelist.net/anime/producer/1143/TOHO_animation" - }, - { - "mal_id": 1430, - "type": "anime", - "name": "Shogakukan", - "url": "https://myanimelist.net/anime/producer/1430/Shogakukan" - } - ], - "licensors": [ - { - "mal_id": 1468, - "type": "anime", - "name": "Crunchyroll", - "url": "https://myanimelist.net/anime/producer/1468/Crunchyroll" - } - ], - "studios": [ - { - "mal_id": 11, - "type": "anime", - "name": "Madhouse", - "url": "https://myanimelist.net/anime/producer/11/Madhouse" - } - ], - "genres": [ - { - "mal_id": 2, - "type": "anime", - "name": "Adventure", - "url": "https://myanimelist.net/anime/genre/2/Adventure" - }, - { - "mal_id": 8, - "type": "anime", - "name": "Drama", - "url": "https://myanimelist.net/anime/genre/8/Drama" - }, - { - "mal_id": 10, - "type": "anime", - "name": "Fantasy", - "url": "https://myanimelist.net/anime/genre/10/Fantasy" - } - ], - "explicit_genres": [], - "themes": [], - "demographics": [ - { - "mal_id": 27, - "type": "anime", - "name": "Shounen", - "url": "https://myanimelist.net/anime/genre/27/Shounen" - } - ] - }, - { - "mal_id": 56885, - "url": "https://myanimelist.net/anime/56885/Sousou_no_Frieren__●●_no_Mahou", - "images": { - "jpg": { - "image_url": "https://cdn.myanimelist.net/images/anime/1197/139034.jpg", - "small_image_url": "https://cdn.myanimelist.net/images/anime/1197/139034t.jpg", - "large_image_url": "https://cdn.myanimelist.net/images/anime/1197/139034l.jpg" - }, - "webp": { - "image_url": "https://cdn.myanimelist.net/images/anime/1197/139034.webp", - "small_image_url": "https://cdn.myanimelist.net/images/anime/1197/139034t.webp", - "large_image_url": "https://cdn.myanimelist.net/images/anime/1197/139034l.webp" - } - }, - "trailer": { - "youtube_id": null, - "url": null, - "embed_url": null, - "images": { - "image_url": null, - "small_image_url": null, - "medium_image_url": null, - "large_image_url": null, - "maximum_image_url": null - } - }, - "approved": true, - "titles": [ - { - "type": "Default", - "title": "Sousou no Frieren: ●● no Mahou" - }, - { - "type": "Synonym", - "title": "Sousou no Frieren: Marumaru no Mahou" - }, - { - "type": "Japanese", - "title": "葬送のフリーレン ~●●の魔法~" - }, - { - "type": "English", - "title": "Frieren: Beyond Journey's End Mini Anime" - } - ], - "title": "Sousou no Frieren: ●● no Mahou", - "title_english": "Frieren: Beyond Journey's End Mini Anime", - "title_japanese": "葬送のフリーレン ~●●の魔法~", - "title_synonyms": [ - "Sousou no Frieren: Marumaru no Mahou" - ], - "type": "ONA", - "source": "Manga", - "episodes": 12, - "status": "Finished Airing", - "airing": false, - "aired": { - "from": "2023-10-11T00:00:00+00:00", - "to": "2024-03-24T00:00:00+00:00", - "prop": { - "from": { - "day": 11, - "month": 10, - "year": 2023 - }, - "to": { - "day": 24, - "month": 3, - "year": 2024 - } - }, - "string": "Oct 11, 2023 to Mar 24, 2024" - }, - "duration": "1 min per ep", - "rating": "PG-13 - Teens 13 or older", - "score": 7.38, - "scored_by": 7359, - "rank": 2413, - "popularity": 5366, - "members": 17039, - "favorites": 51, - "synopsis": "Frieren loves collecting peculiar spells, and her ever-growing arsenal of magic contains the perfect spells for many occasions. Whether it be by stealthily removing alcohol from Heiter's drinks or by remedying her own sleep issues, Frieren is sure to brighten her companions' days with her magic.\n\n[Written by MAL Rewrite]", - "background": "This entry includes the Mizkan Ajipon collaboration episode.", - "season": null, - "year": null, - "broadcast": { - "day": null, - "time": null, - "timezone": null, - "string": null - }, - "producers": [ - { - "mal_id": 1294, - "type": "anime", - "name": "Sound Team Don Juan", - "url": "https://myanimelist.net/anime/producer/1294/Sound_Team_Don_Juan" - } - ], - "licensors": [], - "studios": [ - { - "mal_id": 2705, - "type": "anime", - "name": "TOHO animation STUDIO", - "url": "https://myanimelist.net/anime/producer/2705/TOHO_animation_STUDIO" - } - ], - "genres": [ - { - "mal_id": 4, - "type": "anime", - "name": "Comedy", - "url": "https://myanimelist.net/anime/genre/4/Comedy" - }, - { - "mal_id": 10, - "type": "anime", - "name": "Fantasy", - "url": "https://myanimelist.net/anime/genre/10/Fantasy" - } - ], - "explicit_genres": [], - "themes": [], - "demographics": [] - }, - { - "mal_id": 795, - "url": "https://myanimelist.net/anime/795/Oniisama_e", - "images": { - "jpg": { - "image_url": "https://cdn.myanimelist.net/images/anime/12/18531.jpg", - "small_image_url": "https://cdn.myanimelist.net/images/anime/12/18531t.jpg", - "large_image_url": "https://cdn.myanimelist.net/images/anime/12/18531l.jpg" - }, - "webp": { - "image_url": "https://cdn.myanimelist.net/images/anime/12/18531.webp", - "small_image_url": "https://cdn.myanimelist.net/images/anime/12/18531t.webp", - "large_image_url": "https://cdn.myanimelist.net/images/anime/12/18531l.webp" - } - }, - "trailer": { - "youtube_id": "HVIBFWUwWvw", - "url": "https://www.youtube.com/watch?v=HVIBFWUwWvw", - "embed_url": "https://www.youtube.com/embed/HVIBFWUwWvw?enablejsapi=1&wmode=opaque&autoplay=1", - "images": { - "image_url": "https://img.youtube.com/vi/HVIBFWUwWvw/default.jpg", - "small_image_url": "https://img.youtube.com/vi/HVIBFWUwWvw/sddefault.jpg", - "medium_image_url": "https://img.youtube.com/vi/HVIBFWUwWvw/mqdefault.jpg", - "large_image_url": "https://img.youtube.com/vi/HVIBFWUwWvw/hqdefault.jpg", - "maximum_image_url": "https://img.youtube.com/vi/HVIBFWUwWvw/maxresdefault.jpg" - } - }, - "approved": true, - "titles": [ - { - "type": "Default", - "title": "Oniisama e..." - }, - { - "type": "Synonym", - "title": "Onii-sama e" - }, - { - "type": "Synonym", - "title": "To My Brother..." - }, - { - "type": "Japanese", - "title": "おにいさまへ…" - }, - { - "type": "English", - "title": "Dear Brother" - }, - { - "type": "French", - "title": "Tres Cher frère" - } - ], - "title": "Oniisama e...", - "title_english": "Dear Brother", - "title_japanese": "おにいさまへ…", - "title_synonyms": [ - "Onii-sama e", - "To My Brother..." - ], - "type": "TV", - "source": "Manga", - "episodes": 39, - "status": "Finished Airing", - "airing": false, - "aired": { - "from": "1991-07-14T00:00:00+00:00", - "to": "1992-05-31T00:00:00+00:00", - "prop": { - "from": { - "day": 14, - "month": 7, - "year": 1991 - }, - "to": { - "day": 31, - "month": 5, - "year": 1992 - } - }, - "string": "Jul 14, 1991 to May 31, 1992" - }, - "duration": "25 min per ep", - "rating": "PG-13 - Teens 13 or older", - "score": 7.84, - "scored_by": 11194, - "rank": 930, - "popularity": 3250, - "members": 50114, - "favorites": 1142, - "synopsis": "When 16-year-old Nanako Misonoo enters the prestigious all-girls Seiran Academy, she believes a bright future awaits her. Instead, the unlucky girl finds herself dragged into a web of deceit, misery, and jealousy. On top of that, she is chosen as the newest inductee of the Sorority, an elite group whose members are the envy of the entire school. Having none of the grace, wealth, or talent of the other members, Nanako quickly draws the ire of her jealous classmates—especially the fierce Aya Misaki.\n\nTo cope with her increasingly difficult school life, Nanako recalls her days through letters to her former teacher, Takehiko Henmi, whom she affectionately calls \"onii-sama\" (big brother). She also finds comfort with her four closest friends: her childhood friend Tomoko Arikura, the sociable but erratic Mariko Shinobu, the troubled musician Rei Asaka, and the athletic tomboy Kaoru Orihara.\n\nAn impassioned drama about the hardships of bullying, Oniisama e... chronicles a young girl's harsh life at her new school, as she endures cruel rumours, heartless classmates, and countless social trials.\n\n[Written by MAL Rewrite]", - "background": "", - "season": "summer", - "year": 1991, - "broadcast": { - "day": "Sundays", - "time": "18:00", - "timezone": "Asia/Tokyo", - "string": "Sundays at 18:00 (JST)" - }, - "producers": [ - { - "mal_id": 111, - "type": "anime", - "name": "NHK", - "url": "https://myanimelist.net/anime/producer/111/NHK" - } - ], - "licensors": [ - { - "mal_id": 467, - "type": "anime", - "name": "Discotek Media", - "url": "https://myanimelist.net/anime/producer/467/Discotek_Media" - } - ], - "studios": [ - { - "mal_id": 200, - "type": "anime", - "name": "Tezuka Productions", - "url": "https://myanimelist.net/anime/producer/200/Tezuka_Productions" - } - ], - "genres": [ - { - "mal_id": 8, - "type": "anime", - "name": "Drama", - "url": "https://myanimelist.net/anime/genre/8/Drama" - }, - { - "mal_id": 26, - "type": "anime", - "name": "Girls Love", - "url": "https://myanimelist.net/anime/genre/26/Girls_Love" - } - ], - "explicit_genres": [], - "themes": [ - { - "mal_id": 40, - "type": "anime", - "name": "Psychological", - "url": "https://myanimelist.net/anime/genre/40/Psychological" - }, - { - "mal_id": 23, - "type": "anime", - "name": "School", - "url": "https://myanimelist.net/anime/genre/23/School" - } - ], - "demographics": [ - { - "mal_id": 25, - "type": "anime", - "name": "Shoujo", - "url": "https://myanimelist.net/anime/genre/25/Shoujo" - } - ] - } - ] -} \ No newline at end of file diff --git a/files/anime/e4eedaeb-8c72-457e-afc3-0d32fa5d774a.json b/files/anime/e4eedaeb-8c72-457e-afc3-0d32fa5d774a.json deleted file mode 100755 index 2fc52b9..0000000 --- a/files/anime/e4eedaeb-8c72-457e-afc3-0d32fa5d774a.json +++ /dev/null @@ -1,612 +0,0 @@ -{ - "pagination": { - "last_visible_page": 1, - "has_next_page": false, - "current_page": 1, - "items": { - "count": 4, - "total": 4, - "per_page": 5 - } - }, - "data": [ - { - "mal_id": 52991, - "url": "https://myanimelist.net/anime/52991/Sousou_no_Frieren", - "images": { - "jpg": { - "image_url": "https://cdn.myanimelist.net/images/anime/1015/138006.jpg", - "small_image_url": "https://cdn.myanimelist.net/images/anime/1015/138006t.jpg", - "large_image_url": "https://cdn.myanimelist.net/images/anime/1015/138006l.jpg" - }, - "webp": { - "image_url": "https://cdn.myanimelist.net/images/anime/1015/138006.webp", - "small_image_url": "https://cdn.myanimelist.net/images/anime/1015/138006t.webp", - "large_image_url": "https://cdn.myanimelist.net/images/anime/1015/138006l.webp" - } - }, - "trailer": { - "youtube_id": "ZEkwCGJ3o7M", - "url": "https://www.youtube.com/watch?v=ZEkwCGJ3o7M", - "embed_url": "https://www.youtube.com/embed/ZEkwCGJ3o7M?enablejsapi=1&wmode=opaque&autoplay=1", - "images": { - "image_url": "https://img.youtube.com/vi/ZEkwCGJ3o7M/default.jpg", - "small_image_url": "https://img.youtube.com/vi/ZEkwCGJ3o7M/sddefault.jpg", - "medium_image_url": "https://img.youtube.com/vi/ZEkwCGJ3o7M/mqdefault.jpg", - "large_image_url": "https://img.youtube.com/vi/ZEkwCGJ3o7M/hqdefault.jpg", - "maximum_image_url": "https://img.youtube.com/vi/ZEkwCGJ3o7M/maxresdefault.jpg" - } - }, - "approved": true, - "titles": [ - { - "type": "Default", - "title": "Sousou no Frieren" - }, - { - "type": "Synonym", - "title": "Frieren at the Funeral" - }, - { - "type": "Japanese", - "title": "葬送のフリーレン" - }, - { - "type": "English", - "title": "Frieren: Beyond Journey's End" - } - ], - "title": "Sousou no Frieren", - "title_english": "Frieren: Beyond Journey's End", - "title_japanese": "葬送のフリーレン", - "title_synonyms": [ - "Frieren at the Funeral" - ], - "type": "TV", - "source": "Manga", - "episodes": 28, - "status": "Finished Airing", - "airing": false, - "aired": { - "from": "2023-09-29T00:00:00+00:00", - "to": "2024-03-22T00:00:00+00:00", - "prop": { - "from": { - "day": 29, - "month": 9, - "year": 2023 - }, - "to": { - "day": 22, - "month": 3, - "year": 2024 - } - }, - "string": "Sep 29, 2023 to Mar 22, 2024" - }, - "duration": "24 min per ep", - "rating": "PG-13 - Teens 13 or older", - "score": 9.33, - "scored_by": 486836, - "rank": 1, - "popularity": 212, - "members": 853947, - "favorites": 50516, - "synopsis": "During their decade-long quest to defeat the Demon King, the members of the hero's party—Himmel himself, the priest Heiter, the dwarf warrior Eisen, and the elven mage Frieren—forge bonds through adventures and battles, creating unforgettable precious memories for most of them.\n\nHowever, the time that Frieren spends with her comrades is equivalent to merely a fraction of her life, which has lasted over a thousand years. When the party disbands after their victory, Frieren casually returns to her \"usual\" routine of collecting spells across the continent. Due to her different sense of time, she seemingly holds no strong feelings toward the experiences she went through.\n\nAs the years pass, Frieren gradually realizes how her days in the hero's party truly impacted her. Witnessing the deaths of two of her former companions, Frieren begins to regret having taken their presence for granted; she vows to better understand humans and create real personal connections. Although the story of that once memorable journey has long ended, a new tale is about to begin.\n\n[Written by MAL Rewrite]", - "background": "Sousou no Frieren was released on Blu-ray and DVD in seven volumes from January 24, 2024, to July 17, 2024.", - "season": "fall", - "year": 2023, - "broadcast": { - "day": "Fridays", - "time": "23:00", - "timezone": "Asia/Tokyo", - "string": "Fridays at 23:00 (JST)" - }, - "producers": [ - { - "mal_id": 17, - "type": "anime", - "name": "Aniplex", - "url": "https://myanimelist.net/anime/producer/17/Aniplex" - }, - { - "mal_id": 53, - "type": "anime", - "name": "Dentsu", - "url": "https://myanimelist.net/anime/producer/53/Dentsu" - }, - { - "mal_id": 62, - "type": "anime", - "name": "Shogakukan-Shueisha Productions", - "url": "https://myanimelist.net/anime/producer/62/Shogakukan-Shueisha_Productions" - }, - { - "mal_id": 1003, - "type": "anime", - "name": "Nippon Television Network", - "url": "https://myanimelist.net/anime/producer/1003/Nippon_Television_Network" - }, - { - "mal_id": 1143, - "type": "anime", - "name": "TOHO animation", - "url": "https://myanimelist.net/anime/producer/1143/TOHO_animation" - }, - { - "mal_id": 1430, - "type": "anime", - "name": "Shogakukan", - "url": "https://myanimelist.net/anime/producer/1430/Shogakukan" - } - ], - "licensors": [], - "studios": [ - { - "mal_id": 11, - "type": "anime", - "name": "Madhouse", - "url": "https://myanimelist.net/anime/producer/11/Madhouse" - } - ], - "genres": [ - { - "mal_id": 2, - "type": "anime", - "name": "Adventure", - "url": "https://myanimelist.net/anime/genre/2/Adventure" - }, - { - "mal_id": 8, - "type": "anime", - "name": "Drama", - "url": "https://myanimelist.net/anime/genre/8/Drama" - }, - { - "mal_id": 10, - "type": "anime", - "name": "Fantasy", - "url": "https://myanimelist.net/anime/genre/10/Fantasy" - } - ], - "explicit_genres": [], - "themes": [], - "demographics": [ - { - "mal_id": 27, - "type": "anime", - "name": "Shounen", - "url": "https://myanimelist.net/anime/genre/27/Shounen" - } - ] - }, - { - "mal_id": 56885, - "url": "https://myanimelist.net/anime/56885/Sousou_no_Frieren__●●_no_Mahou", - "images": { - "jpg": { - "image_url": "https://cdn.myanimelist.net/images/anime/1197/139034.jpg", - "small_image_url": "https://cdn.myanimelist.net/images/anime/1197/139034t.jpg", - "large_image_url": "https://cdn.myanimelist.net/images/anime/1197/139034l.jpg" - }, - "webp": { - "image_url": "https://cdn.myanimelist.net/images/anime/1197/139034.webp", - "small_image_url": "https://cdn.myanimelist.net/images/anime/1197/139034t.webp", - "large_image_url": "https://cdn.myanimelist.net/images/anime/1197/139034l.webp" - } - }, - "trailer": { - "youtube_id": null, - "url": null, - "embed_url": null, - "images": { - "image_url": null, - "small_image_url": null, - "medium_image_url": null, - "large_image_url": null, - "maximum_image_url": null - } - }, - "approved": true, - "titles": [ - { - "type": "Default", - "title": "Sousou no Frieren: ●● no Mahou" - }, - { - "type": "Synonym", - "title": "Sousou no Frieren: Marumaru no Mahou" - }, - { - "type": "Japanese", - "title": "葬送のフリーレン ~●●の魔法~" - }, - { - "type": "English", - "title": "Frieren: Beyond Journey's End Mini Anime" - } - ], - "title": "Sousou no Frieren: ●● no Mahou", - "title_english": "Frieren: Beyond Journey's End Mini Anime", - "title_japanese": "葬送のフリーレン ~●●の魔法~", - "title_synonyms": [ - "Sousou no Frieren: Marumaru no Mahou" - ], - "type": "ONA", - "source": "Manga", - "episodes": 12, - "status": "Finished Airing", - "airing": false, - "aired": { - "from": "2023-10-11T00:00:00+00:00", - "to": "2024-03-24T00:00:00+00:00", - "prop": { - "from": { - "day": 11, - "month": 10, - "year": 2023 - }, - "to": { - "day": 24, - "month": 3, - "year": 2024 - } - }, - "string": "Oct 11, 2023 to Mar 24, 2024" - }, - "duration": "1 min per ep", - "rating": "PG-13 - Teens 13 or older", - "score": 7.37, - "scored_by": 6748, - "rank": 2377, - "popularity": 5443, - "members": 15731, - "favorites": 51, - "synopsis": "Frieren loves collecting peculiar spells, and her ever-growing arsenal of magic contains the perfect spells for many occasions. Whether it be by stealthily removing alcohol from Heiter's drinks or by remedying her own sleep issues, Frieren is sure to brighten her companions' days with her magic.\n\n[Written by MAL Rewrite]", - "background": "This entry includes the Mizkan Ajipon collaboration episode.", - "season": null, - "year": null, - "broadcast": { - "day": null, - "time": null, - "timezone": null, - "string": null - }, - "producers": [ - { - "mal_id": 1294, - "type": "anime", - "name": "Sound Team Don Juan", - "url": "https://myanimelist.net/anime/producer/1294/Sound_Team_Don_Juan" - } - ], - "licensors": [], - "studios": [ - { - "mal_id": 2705, - "type": "anime", - "name": "TOHO animation STUDIO", - "url": "https://myanimelist.net/anime/producer/2705/TOHO_animation_STUDIO" - } - ], - "genres": [ - { - "mal_id": 4, - "type": "anime", - "name": "Comedy", - "url": "https://myanimelist.net/anime/genre/4/Comedy" - }, - { - "mal_id": 10, - "type": "anime", - "name": "Fantasy", - "url": "https://myanimelist.net/anime/genre/10/Fantasy" - } - ], - "explicit_genres": [], - "themes": [], - "demographics": [] - }, - { - "mal_id": 795, - "url": "https://myanimelist.net/anime/795/Oniisama_e", - "images": { - "jpg": { - "image_url": "https://cdn.myanimelist.net/images/anime/12/18531.jpg", - "small_image_url": "https://cdn.myanimelist.net/images/anime/12/18531t.jpg", - "large_image_url": "https://cdn.myanimelist.net/images/anime/12/18531l.jpg" - }, - "webp": { - "image_url": "https://cdn.myanimelist.net/images/anime/12/18531.webp", - "small_image_url": "https://cdn.myanimelist.net/images/anime/12/18531t.webp", - "large_image_url": "https://cdn.myanimelist.net/images/anime/12/18531l.webp" - } - }, - "trailer": { - "youtube_id": "HVIBFWUwWvw", - "url": "https://www.youtube.com/watch?v=HVIBFWUwWvw", - "embed_url": "https://www.youtube.com/embed/HVIBFWUwWvw?enablejsapi=1&wmode=opaque&autoplay=1", - "images": { - "image_url": "https://img.youtube.com/vi/HVIBFWUwWvw/default.jpg", - "small_image_url": "https://img.youtube.com/vi/HVIBFWUwWvw/sddefault.jpg", - "medium_image_url": "https://img.youtube.com/vi/HVIBFWUwWvw/mqdefault.jpg", - "large_image_url": "https://img.youtube.com/vi/HVIBFWUwWvw/hqdefault.jpg", - "maximum_image_url": "https://img.youtube.com/vi/HVIBFWUwWvw/maxresdefault.jpg" - } - }, - "approved": true, - "titles": [ - { - "type": "Default", - "title": "Oniisama e..." - }, - { - "type": "Synonym", - "title": "Onii-sama e" - }, - { - "type": "Synonym", - "title": "To My Brother..." - }, - { - "type": "Japanese", - "title": "おにいさまへ…" - }, - { - "type": "English", - "title": "Dear Brother" - }, - { - "type": "French", - "title": "Tres Cher frère" - } - ], - "title": "Oniisama e...", - "title_english": "Dear Brother", - "title_japanese": "おにいさまへ…", - "title_synonyms": [ - "Onii-sama e", - "To My Brother..." - ], - "type": "TV", - "source": "Manga", - "episodes": 39, - "status": "Finished Airing", - "airing": false, - "aired": { - "from": "1991-07-14T00:00:00+00:00", - "to": "1992-05-31T00:00:00+00:00", - "prop": { - "from": { - "day": 14, - "month": 7, - "year": 1991 - }, - "to": { - "day": 31, - "month": 5, - "year": 1992 - } - }, - "string": "Jul 14, 1991 to May 31, 1992" - }, - "duration": "25 min per ep", - "rating": "PG-13 - Teens 13 or older", - "score": 7.84, - "scored_by": 11077, - "rank": 907, - "popularity": 3217, - "members": 49413, - "favorites": 1127, - "synopsis": "When 16-year-old Nanako Misonoo enters the prestigious all-girls Seiran Academy, she believes a bright future awaits her. Instead, the unlucky girl finds herself dragged into a web of deceit, misery, and jealousy. On top of that, she is chosen as the newest inductee of the Sorority, an elite group whose members are the envy of the entire school. Having none of the grace, wealth, or talent of the other members, Nanako quickly draws the ire of her jealous classmates—especially the fierce Aya Misaki.\n\nTo cope with her increasingly difficult school life, Nanako recalls her days through letters to her former teacher, Takehiko Henmi, whom she affectionately calls \"onii-sama\" (big brother). She also finds comfort with her four closest friends: her childhood friend Tomoko Arikura, the sociable but erratic Mariko Shinobu, the troubled musician Rei Asaka, and the athletic tomboy Kaoru Orihara.\n\nAn impassioned drama about the hardships of bullying, Oniisama e... chronicles a young girl's harsh life at her new school, as she endures cruel rumours, heartless classmates, and countless social trials.\n\n[Written by MAL Rewrite]", - "background": "", - "season": "summer", - "year": 1991, - "broadcast": { - "day": null, - "time": null, - "timezone": null, - "string": "Sundays at Unknown" - }, - "producers": [ - { - "mal_id": 111, - "type": "anime", - "name": "NHK", - "url": "https://myanimelist.net/anime/producer/111/NHK" - } - ], - "licensors": [ - { - "mal_id": 467, - "type": "anime", - "name": "Discotek Media", - "url": "https://myanimelist.net/anime/producer/467/Discotek_Media" - } - ], - "studios": [ - { - "mal_id": 200, - "type": "anime", - "name": "Tezuka Productions", - "url": "https://myanimelist.net/anime/producer/200/Tezuka_Productions" - } - ], - "genres": [ - { - "mal_id": 8, - "type": "anime", - "name": "Drama", - "url": "https://myanimelist.net/anime/genre/8/Drama" - }, - { - "mal_id": 26, - "type": "anime", - "name": "Girls Love", - "url": "https://myanimelist.net/anime/genre/26/Girls_Love" - } - ], - "explicit_genres": [], - "themes": [ - { - "mal_id": 40, - "type": "anime", - "name": "Psychological", - "url": "https://myanimelist.net/anime/genre/40/Psychological" - }, - { - "mal_id": 23, - "type": "anime", - "name": "School", - "url": "https://myanimelist.net/anime/genre/23/School" - } - ], - "demographics": [ - { - "mal_id": 25, - "type": "anime", - "name": "Shoujo", - "url": "https://myanimelist.net/anime/genre/25/Shoujo" - } - ] - }, - { - "mal_id": 10116, - "url": "https://myanimelist.net/anime/10116/Crayon_Shin-chan_Movie_19__Arashi_wo_Yobu_Ougon_no_Spy_Daisakusen", - "images": { - "jpg": { - "image_url": "https://cdn.myanimelist.net/images/anime/1849/137876.jpg", - "small_image_url": "https://cdn.myanimelist.net/images/anime/1849/137876t.jpg", - "large_image_url": "https://cdn.myanimelist.net/images/anime/1849/137876l.jpg" - }, - "webp": { - "image_url": "https://cdn.myanimelist.net/images/anime/1849/137876.webp", - "small_image_url": "https://cdn.myanimelist.net/images/anime/1849/137876t.webp", - "large_image_url": "https://cdn.myanimelist.net/images/anime/1849/137876l.webp" - } - }, - "trailer": { - "youtube_id": "yMjB8oDXpiA", - "url": "https://www.youtube.com/watch?v=yMjB8oDXpiA", - "embed_url": "https://www.youtube.com/embed/yMjB8oDXpiA?enablejsapi=1&wmode=opaque&autoplay=1", - "images": { - "image_url": "https://img.youtube.com/vi/yMjB8oDXpiA/default.jpg", - "small_image_url": "https://img.youtube.com/vi/yMjB8oDXpiA/sddefault.jpg", - "medium_image_url": "https://img.youtube.com/vi/yMjB8oDXpiA/mqdefault.jpg", - "large_image_url": "https://img.youtube.com/vi/yMjB8oDXpiA/hqdefault.jpg", - "maximum_image_url": "https://img.youtube.com/vi/yMjB8oDXpiA/maxresdefault.jpg" - } - }, - "approved": true, - "titles": [ - { - "type": "Default", - "title": "Crayon Shin-chan Movie 19: Arashi wo Yobu Ougon no Spy Daisakusen" - }, - { - "type": "Synonym", - "title": "Eiga Crayon Shin-chan: Arashi wo Yobu Ougon no Spy Daisakusen" - }, - { - "type": "Japanese", - "title": "映画 クレヨンしんちゃん 嵐を呼ぶ黄金のスパイ大作戦" - }, - { - "type": "English", - "title": "Crayon Shin-chan: Fierceness That Invites Storm! Operation Golden Spy" - }, - { - "type": "Spanish", - "title": "Shin Chan Película 19: Operación Espía de Oro" - } - ], - "title": "Crayon Shin-chan Movie 19: Arashi wo Yobu Ougon no Spy Daisakusen", - "title_english": "Crayon Shin-chan: Fierceness That Invites Storm! Operation Golden Spy", - "title_japanese": "映画 クレヨンしんちゃん 嵐を呼ぶ黄金のスパイ大作戦", - "title_synonyms": [ - "Eiga Crayon Shin-chan: Arashi wo Yobu Ougon no Spy Daisakusen" - ], - "type": "Movie", - "source": "Manga", - "episodes": 1, - "status": "Finished Airing", - "airing": false, - "aired": { - "from": "2011-04-16T00:00:00+00:00", - "to": null, - "prop": { - "from": { - "day": 16, - "month": 4, - "year": 2011 - }, - "to": { - "day": null, - "month": null, - "year": null - } - }, - "string": "Apr 16, 2011" - }, - "duration": "1 hr 48 min", - "rating": "G - All Ages", - "score": 6.97, - "scored_by": 3370, - "rank": 4371, - "popularity": 8254, - "members": 5675, - "favorites": 2, - "synopsis": "Comical action spy film including an indecent material (flatus) and a story of a girl who had obeyed her parents, but becomes self-aware. A mystery spy girl Lemon Sunomono suddenly appears in front of Shinnosuke, and she calls herself an emissary of Action Kamen. She had trained as a spy by her parents in the Sukashipestan Republic, and works for the Queens. Under her guidance, Shinnosuke decides to be a spy to fight for justice, and receives spy training. Under the instruction of Action Kamen, Lemon and Shinnosuke perform a mission to creep into the laboratory in the Hedelna Kingdom and recapture a capsule from an evil professor, but Lemon finds the real purpose of the Queens, and they fight to foil the plot of the Queens. \n\n(Source: Manabu Tsuribe)", - "background": "", - "season": null, - "year": null, - "broadcast": { - "day": null, - "time": null, - "timezone": null, - "string": null - }, - "producers": [ - { - "mal_id": 1377, - "type": "anime", - "name": "Futabasha", - "url": "https://myanimelist.net/anime/producer/1377/Futabasha" - }, - { - "mal_id": 2135, - "type": "anime", - "name": "Imagine", - "url": "https://myanimelist.net/anime/producer/2135/Imagine" - } - ], - "licensors": [], - "studios": [ - { - "mal_id": 247, - "type": "anime", - "name": "Shin-Ei Animation", - "url": "https://myanimelist.net/anime/producer/247/Shin-Ei_Animation" - } - ], - "genres": [ - { - "mal_id": 4, - "type": "anime", - "name": "Comedy", - "url": "https://myanimelist.net/anime/genre/4/Comedy" - } - ], - "explicit_genres": [], - "themes": [], - "demographics": [ - { - "mal_id": 42, - "type": "anime", - "name": "Seinen", - "url": "https://myanimelist.net/anime/genre/42/Seinen" - } - ] - } - ] -} \ No newline at end of file diff --git a/files/errors.json b/files/errors.json index 356d5d4..680a6a4 100755 --- a/files/errors.json +++ b/files/errors.json @@ -146,6 +146,12 @@ "description": "The user provided has blocked You or anyone from using this command on them.", "from": "Client" }, + "723": { + "title": ["User required.", "We need a friend."], + "meaning": "User input required.", + "description": "You need to provide a user for this command.", + "from": "Client" + }, "801": { "title": ["Argument Anomaly!","Argument in Distress!","Oops,Wrong Argument!","Argument Malfunction!","Lost Argument Syndrome!","Argument’s Lost in Translation!"], "meaning": "Wrong arguments (specific).", diff --git a/files/result.txt b/files/result.txt deleted file mode 100755 index e69de29..0000000 diff --git a/files/test.json b/files/test.json deleted file mode 100755 index 13ab867..0000000 --- a/files/test.json +++ /dev/null @@ -1,501 +0,0 @@ -{ - "messageCommands": { - "list": [ - { - "name": "eval", - "aliases": [ - "djs" - ], - "type": "messageCreate", - "description": "Evals an JavaScript code.", - "usage": "eval ", - "module": "Developers-Only", - "version": "1.1", - "sourcecode": "https://github.com/LynnuxDev/Akira/blob/main/SRC/commands/dev/djseval.js", - "documentation": "https://documentation.lynnux.xyz/commands/utility/dev/Not-Available", - "example": "eval ctx.message.author", - "code": "\n $onlyForUsers[;705306248538488947;392609934744748032]\n $if[$authorID==705306248538488947;Ping: `$pingMS` | Uptime: ;]\n $let[text;$replace[$djsEval[const channel = ctx.message.channel \nconst message = ctx.message \nconst author = ctx.message.author \nconst client = ctx.message.client \nconst guild = ctx.message.guild \n$message]; ;;1]]\n $if[$charCount[$get[text]]>1950;$attachment[$get[text];result.json;true];```json\n$get[text]\n```]\n", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/dev/djseval.js", - "unloadable": true - }, - { - "name": "ev", - "aliases": [ - "fs", - "ForgeScript" - ], - "description": "Evals an ForgeScript code", - "type": "messageCreate", - "usage": "ev ", - "module": "Developers-Only", - "version": "1.0", - "sourcecode": "https://github.com/LynnuxDev/Akira/blob/main/SRC/commands/dev/eval.js", - "documentation": "https://documentation.lynnux.xyz/commands/utility/dev/Not-Available", - "example": "ev you are $authorID", - "code": "\n $onlyForUsers[;705306248538488947;392609934744748032]\n $if[$authorID==705306248538488947;Ping: `$pingMS` | Uptime: ;]\n $eval[$message;true]\n ", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/dev/eval.js", - "unloadable": true - }, - { - "name": "importvars", - "aliases": [ - "importvariables", - "variablesimport" - ], - "description": "import global vars.", - "type": "messageCreate", - "usage": "importvars", - "module": "Developers-Only", - "version": "1.0", - "sourcecode": "https://github.com/LynnuxDev/Akira/blob/main/SRC/commands/dev/globalVars.js", - "documentation": "https://documentation.lynnux.xyz/commands/dev/Not-Available", - "example": "importvars", - "code": "\n $c[==================================[ Main \\]=============================]\n $setGlobalVar[prefix;a.]\n $setGlobalVar[color;#ff47ff]\n $setGlobalVar[colorError;#d50056]\n\n $c[=================================[ Errors \\]============================]\n ", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/dev/globalVars.js", - "unloadable": true - }, - { - "name": "update", - "aliases": [ - "reload", - "updatecommands" - ], - "type": "messageCreate", - "description": "Update all module commands", - "usage": "update", - "module": "Developers-Only", - "version": "1.2", - "sourcecode": "https://github.com/LynnuxDev/Akira/blob/main/SRC/commands/dev/update.js", - "documentation": "https://documentation.lynnux.xyz/commands/utility/dev/Not-Available", - "example": "update", - "code": "\n $onlyForUsers[;705306248538488947;392609934744748032]\n\n $let[count;$commandCount]\n $updateCommands $updateApplicationCommands\n $let[add;$sub[$commandCount;$get[count]]]\n\n $color[ff47ff]\n $description[Successfully update all commands.]\n\n $addActionRow\n $addButton[1;Added: $get[add];Success;✔️;true]\n $addButton[2;Total: $commandCount;Secondary;📃;true]\n", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/dev/reload.js", - "unloadable": true - }, - { - "name": "test", - "aliases": [ - "testme", - "killmeplease" - ], - "type": "messageCreate", - "description": "test", - "usage": "test", - "module": "Developers-Only", - "version": "1.0", - "sourcecode": "https://github.com/LynnuxDev/Akira/blob/main/SRC/commands/dev/test.js", - "documentation": "https://documentation.lynnux.xyz/commands/utility/dev/Not-Available", - "example": "test", - "code": "\n ", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/dev/test.js", - "unloadable": true - }, - { - "name": "commandinfo", - "subName": "ping", - "aliases": [ - "command-info", - "command", - "cmd" - ], - "type": "messageCreate", - "module": "Help", - "sourcecode": "https://github.com/LynnuxDev/Akira/blob/main/SRC/commands/help/commandinfo.js", - "documentation": "https://documentation.lynnux.xyz/commands/utility/commandinfo", - "version": "1.0", - "usage": "commandinfo {command}", - "description": "See information about a command.", - "example": "commandinfo about", - "code": "\n $onlyIf[$getUserVar[AgreedToTos;$authorID]==true;$ephemeral $color[$getUserVar[color;$authorID]] $title[Before we continue:] $footer[You have to agree with these terms before using akira.] $description[Before you proceed, please make sure to read and agree to our [Terms of Service\\](https://akira.lynnux.xyz/terms) and [Privacy Policy\\](https://akira.lynnux.xyz/policy).\n\nBy using the button below, you confirm that you have read and agree to abide by our terms and policies.\n\nIf you have any questions or concerns, feel free to contact our support team.] $addActionRow $addButton[AcceptTerms-$authorID;I have read and agree to abide by these terms and policies.;Success;;false]]\n $onlyIf[$message==]\n $onlyIf[$channelID==$getGuildVar[BotChannel;$guildID;$channelID];$getGlobalVar[BotChannelError]]\n $if[$authorID==705306248538488947;Ping: `$pingMS` | Uptime: ;]\n\n $color[$getUserVar[color;$authorID]]\n $title[Commandinfo:]\n $description[This command is used to see information about a command.\n\n\nExample of what this will return:\n```\nAliases: [List of alternative commands.\\]\nDescription: Command Description.\nUsage: A example of how to use the command.\nVersion: Version of the command.\n\nExample:\nHere you will see a examples.\n```]\n ", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/help/commandInfo.js", - "unloadable": true - }, - { - "name": "commandinfo", - "subName": "ping", - "aliases": [ - "command-info", - "command", - "cmd" - ], - "type": "messageCreate", - "module": "Help", - "sourcecode": "https://github.com/LynnuxDev/Akira/blob/main/SRC/commands/help/commandinfo.js", - "documentation": "https://documentation.lynnux.xyz/commands/utility/commandinfo", - "version": "1.0", - "usage": "commandinfo {command}", - "description": "See information about a command.", - "example": "commandinfo about", - "code": "\n $onlyIf[$getUserVar[AgreedToTos;$authorID]==true;]\n $onlyIf[$channelID==$getGuildVar[BotChannel;$guildID;$channelID];]\n\n $onlyIf[$message[0]!=;]\n $if[$commandInfo[messageCreate;$message[0];name]==;$sendMessage[$channelID;$color[DF2A4A]$description[❌ I could not find the command command `$message[0]`.]$title[$randomText[Something went wrong.;Oopsie-daisy;Gremlins at work!;404: Fun Not Found;An invisible ninja broke something.;Error 418: I'm a teapot ☕;The hamster fell off the wheel.;A wild error appeared!;Houston, we have a problem.]]] $stop]\n $title[Commandinfo: \"$message[0]\"]\n $color[$getUserVar[color;$authorID]]\n $description[**Command:** `$commandInfo[messageCreate;$message[0];name]`\n**Aliases:** ```$commandInfo[$replace[messageCreate;\\[;;1];$message[0];aliases]```\n**Description:** `$commandInfo[messageCreate;$message[0];description]`\n**Usage:** `$getGlobalVar[prefix]$commandInfo[messageCreate;$message[0];usage]`\n**Version:** `$commandInfo[messageCreate;$message[0];version]`\n**Example:**\n```\n$getUserVar[prefix;$authorID]$replace[$commandInfo[messageCreate;$message[0];example];{prefix};$getUserVar[prefix;$authorID]]\n```\n**Module:** `$commandInfo[messageCreate;$message[0];module]`]\n $addActionRow\n $addButton[$commandInfo[messageCreate;$message[0];sourcecode];Source-Code;Link;🌐]\n $addButton[$commandInfo[messageCreate;$message[0];documentation];Documentation;Link;📖]\n $addActionRow\n $addButton[close-$authorID;Close;Danger]\n\n", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/help/commandInfo.js", - "unloadable": true - }, - { - "name": "help", - "aliases": [ - "sos", - "help-me", - "what", - "howto", - "how-to" - ], - "module": "Help", - "version": "1.0", - "sourcecode": "https://github.com/LynnuxDev/Akira/blob/main/SRC/commands/help/help.js", - "documentation": "https://documentation.lynnux.xyz/commands/utility/help", - "type": "messageCreate", - "description": "Get help using Akira.", - "usage": "help {module/command}", - "example": "Help", - "code": "\n $if[$authorID==705306248538488947;Ping: `$pingMS` | Uptime: ;]\n $if[$guildID==;$c[not a guild];$replace[$replace[$checkContains[$message;-c;-chat];true;$c[is for chat];1];false;**Got it!** I sent you a DM with information on how to use me. Please check your DM <@$authorID>;1]] \n\n $if[$toLowercase[$message[0]]!=roleplay;\n $color[$getUserVar[color;$authorID]]\n\t\t$author[Akira's Features;$userAvatar[$botID;2048;webp]]\n\t\t$description[**To check out a section or command use** `akira help [module / command\\]`\n**If you want this command to show up in chat instead of dms add -c at the end of the command.**\n{Ex. `Akira help -c` or `Akira help moderation -c`}\n\nFor arguments in commands:\n`<>` means it's required.\n`{}` means it's optional.\n`[\\]` means it's either required or not based on the usage.\n**Do not actually include the <> , () & [\\] symbols in the command.**]\n $addField[:robot: Automation;Automatically do things, like welcomemessages and autoroles\n**0 Commands** `(soon)`;true]\n $addField[:hammer: Automod;Automatically punish users for swearing or posting server invites\n**0 Commands** `(soon)`;true]\n $addField[:dollar: Economy;Get an economy rolling in your server work, shop, and way more\n**0 Commands** `(soon)`;true]\n $addField[:up: Leveling;Reward members for talking with xp and even give roles at milestones\n**0 Commands** `(soon)`;true]\n $addField[:shield: Moderation;Keep your server safe with advanced moderation commands\n**0 Commands** `(soon)`;true]\n $addField[:black_joker: Fun;Play fun little games\n**0 Commands** `(soon)`;true]\n $addField[:star: Premium;Gives you all the premium commands\n**0 Commands** `(soon)`;true]\n $addField[:frame_photo: Profile;See and manage your akira profile\n**0 Commands** `(soon)`;true]\n $addField[:point_up_2: Reaction-Roles;Let people pick their roles from a nice and easy menu\n**0 Commands** `(soon)`;true]\n $addField[:hugging: Roleplay;Give people hugs, kisses, cuddles and way more\n**8 Commands**;true]\n $addField[:mag_right: Search;Find anything and everything on the internet\n**0 Commands** `(soon)`;true]\n $addField[:wrench: Settings;Configure some of my settings for your server\n**0 Commands** `(soon)`;true]\n $addField[:flashlight: Utility;Useful left over commands that don't fit elsewhere\n**0 Commands** `(soon)`;true]\n $addField[Extra links and information:;[[Invite akira\\](https://discord.com/api/oauth2/authorize?client_id=738057910923296839&permissions=8&scope=bot%20applications.commands)\\] | [[Support Server\\](https://discord.com/invite/TUqZTutDUz)\\] | [[Vote\\](https://akira.lynnux.xyz/vote)\\] | [[Website\\](https://akira.lynnux.xyz)\\] | [Premium\\]]\n\n $addActionRow\n $addStringSelectMenu[helpMenu-$authorID;Which command category do you want to see?;false;1;1]\n $addOption[Automation;Automatically do things, like welcomemessages etc.;Automation;🤖;false]\n $addOption[Automod;Automatically punish users.;Automod;🔨;false]\n $addOption[Economy;Get an economy rolling in your server.;Economy;💵;false]\n $addOption[Leveling;Reward members for being active.;Leveling;🆙;false]\n $addOption[Moderation;Help your mods keep the server a save place.;Moderation;🛡️;false]\n $addOption[Fun;Play fun little games.;Fun;🃏;false]\n $addOption[Premium;Shows all the premium commands.;Premium;⭐;false]\n $addOption[Profile;See and manage your akira profile.;Profile;📝;false]\n $addOption[Reaction-Roles;Let people pick their roles.;Reaction-Roles;☝️;false]\n $addOption[Roleplay;Give people hugs, kisses and more.;Roleplay;🤗;false]\n $addOption[Search;Find anything and everything on the internet.;Search;🔎;false]\n $addOption[Settings;Configure some of my settings for your server/profile.;Settings;🔧;false]\n $addOption[Utility;Useful left over commands.;Utility;🔦;false]\n\n $addActionRow\n $addButton[close-$authorID;Close;Danger]\n ;\n $author[Akira's RolePlay commands;$userAvatar[$botID;1024]]\n $color[$getUserVar[color;$authorID]]\n $description[Express yourself with over `50` different gif commands that each track how often you've received and given them so you can see how many hugs you've given and gotten. Check `akira counters` to see your statistics.\n\n(Commands executed on yourself do not count towards the counters)]\n $addField[Wholesome:;`akira [command\\] {users} (reason)`\n```Blush, Boop, Cheer, Cuddle, Dance, Feed, Glomp, Handhold, Happy, Highfive, Hug, Kiss, Laugh, Love, Nom, Nuzzle, Pat, Peck, Tease, Thumbsup, Tickle, Wag, Wave, Wink```]\n $addField[Neutral:;`akira [command\\] {users} (reason)`\n```Bonk, Bored, Chase, Dab, Facepalm, Lick, Lurk, Nervous, No, Panic, Poke, Pout, Run, Shrug, Sip, Sleep, Smug, Stare, Think, Yes```]\n $addField[Negative:;`akira [command\\] {users} (reason)`\n```Bite, Cringe, Cry, Die, Hate, Kill, Sad, Shoot, Slap, Stab, Triggered```]\n $addField[Akira counters (user):;See how many times each roleplay action has happened to you and how often you've done them to others.]\n $addField[Akira blockcommand [roleplay command\\]:;Block a roleplay command so people can't use it on you, in case you want to reject everyone from slapping you.]\n $addField[Akira unblockcommand [roleplay command\\]:;Unblock a roleplay command so people can use it on you again, in case you once again accept slaps and bonks.]\n $addField[Akira block [@users\\]:;Block users so they can't spam you with roleplay commands and harass you. Useful if they keep trying to kiss you.]\n $addField[Akira unblock [@users\\]:;Unblock a user so they can use roleplay commands on you again. In case you forgive your stalkers.]\n $addField[Extra links and information:;[[Invite akira\\](https://discord.com/api/oauth2/authorize?client_id=738057910923296839&permissions=8&scope=bot%20applications.commands)\\] | [[Support Server\\](https://discord.com/invite/TUqZTutDUz)\\] | [[Vote\\](https://akira.lynnux.xyz/vote)\\] | [[Website\\](https://akira.lynnux.xyz)\\] | [Premium\\]]\n ]\n $if[$checkContains[$message;-c;-chat]!=true;$sendDM[$authorID];]\n\n", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/help/help.js", - "unloadable": true - }, - { - "name": "anime", - "aliases": [ - "animelookup", - "whattheanime" - ], - "type": "messageCreate", - "description": "test", - "usage": "anime {option}", - "module": "Search", - "version": "1.0", - "sourcecode": "https://github.com/LynnuxDev/Akira/blob/main/SRC/commands/search/anime.js", - "documentation": "https://documentation.lynnux.xyz/commands/Search/anime/", - "example": "anime frieren", - "code": "\n $disableConsoleErrors\n $onlyIf[$authorID==705306248538488947;]\n $onlyIf[$getUserVar[AgreedToTos;$authorID]==true;$getGlobalVar[AgreedToTosEmbedReply]]\n $switch[$toLowercase[$message[0]];\n $case[favorite;\n $if[$getUserVar[anime~favorite;$authorID]!=;\n $color[$if[$guildID==;$getUserVar[color;$userID;#ff47ff];$getGuildVar[color;$guildID;#ff47ff]]]\n $title[$userGlobalName[$authorID]'s favorite anime:]\n $description[- $replace[$replace[$getUserVar[anime~favorite;$authorID];,;;1];,;\n\n- ;-1]]\n ;\n YOU DONT HAVE ANY FAVORITED ANIME\n ]\n ]\n $case[character;\n $if[$message[1]!=;\n $let[input;$replace[$replace[$message;$message[0] ;;1]; ;%20;-1]]\n $let[request;$httpRequest[https://api.jikan.moe/v4/characters?page=1&limit=5&q=$get[input];get]]\n $switch[$get[request];\n $case[200;\n $writeFile[./files/anime/$getUserVar[uuid;$authorID;not-found].json;$httpResult]\n $jsonLoad[result;$readFile[./files/anime/$getUserVar[uuid;$authorID;not-found].json]]\n $let[description;$cropText[$env[result;data;0;about];0;250]]\n $color[$if[$guildID==;$getUserVar[color;$userID;#ff47ff];$getGuildVar[color;$guildID;#ff47ff]]]\n $title[$env[result;data;0;name] ~ ($env[result;data;0;name_kanji]);$env[result;data;0;url]]\n $thumbnail[$env[result;data;0;images;webp;image_url]]\n $description[$get[description]$if[$endsWith[$get[description]; ]!=false;...; ...]]\n $addActionRow\n $addButton[NoUseCom;;Secondary;<:Spacer:1275843251349356675>;true]\n $addButton[animeCharacter~previous~$authorID~0;;Primary;◀️;true]\n $addButton[NoReply~$authorID;1/$env[result;pagination;items;count];Secondary;;true]\n $addButton[animeCharacter~next~$authorID~0;;Primary;▶️;$if[$env[result;pagination;items;count]>=2;false;true]]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n $let[malID;$env[result;data;0;mal_id]]\n $let[vaRequest;$httpRequest[https://api.jikan.moe/v4/characters/$get[malID]/voices;get]]\n $if[$httpResult[data;0;language]!=;\n $addField[Voice Actors:;- **$httpResult[data;0;language]:** [$httpResult[data;0;person;name]\\]($httpResult[data;0;person;url])$if[$httpResult[data;1;language]!=;\n- **$httpResult[data;1;language]:** [$httpResult[data;1;person;name]\\]($httpResult[data;1;person;url])]$if[$httpResult[data;2;language]!=;\n- **$httpResult[data;2;language]:** [$httpResult[data;2;person;name]\\]($httpResult[data;2;person;url])]$if[$httpResult[data;3;language]!=;\n- **$httpResult[data;3;language]:** [$httpResult[data;3;person;name]\\]($httpResult[data;3;person;url])]$if[$httpResult[data;4;language]!=;\n- **$httpResult[data;4;language]:** [$httpResult[data;4;person;name]\\]($httpResult[data;4;person;url])]$if[$httpResult[data;5;language]!=;\n- **$httpResult[data;5;language]:** [$httpResult[data;5;person;name]\\]($httpResult[data;5;person;url])]$if[$httpResult[data;6;language]!=;\n- **$httpResult[data;6;language]:** [$httpResult[data;6;person;name]\\]($httpResult[data;6;person;url])];true]\n ]\n $let[animeRequest;$httpRequest[https://api.jikan.moe/v4/characters/$get[malID]/anime;get]]\n $if[$get[animeRequest]==200;$author[From the anime: \"$httpResult[data;0;anime;title]\"]]\n ]\n $case[default;woops]\n ]\n ;\n WHAT CHARACTER ARE YOU LOOKIGN FOR?\n ]\n ]\n $case[default;\n $let[query;$replace[$replace[$message; --all;;-1]; --tv;;-1]]\n $let[type;$if[$checkContains[$message;--all]==true;&type=all;$if[$checkContains[$message;--tv]==true;&type=tv;]]]\n $let[request;$httpRequest[https://api.jikan.moe/v4/anime?page=1&limit=5&q=$replace[$get[query]; ;%20;-1]&sfw=true$get[type];get]]\n $reply[$channelID;$messageID;false]\n $c[-# $userName[$clientID] is thinking ]\n $writeFile[./files/anime/$getUserVar[uuid;$authorID;not-found].json;$httpResult]\n $jsonLoad[result;$readFile[./files/anime/$getUserVar[uuid;$authorID;not-found].json]]\n $jsonLoad[genres;$env[result;data;0;genres]]\n $arrayMap[genres;genre;\n $jsonLoad[uwu;$env[genre]]\n $return[$env[uwu;name]]\n ;final]\n\n $let[amount;$env[result;pagination;items;count]]\n $let[TitleOrigional;$env[result;data;0;title]]\n $let[TitleDefault;$env[result;data;0;title_english]]\n $let[TitleJapanese;$env[result;data;0;title_japanese]]\n $let[TrailerUrl;$env[result;data;0;trailer;url]]\n $let[description;$env[result;data;0;synopsis]]\n $let[page;0]\n $let[malID;$env[result;data;0;mal_id]]\n $c[-------------------------------------------=[ EMBED \\]=-------------------------------------------]\n $switch[$get[request];\n $case[200;\n $if[$get[amount]==0;\n $color[$getGlobalVar[colorError]]\n $title[Something went wrong]\n $description[i couldnt find the anime your looking for `$get[query]`]\n ;\n\n $if[$get[TrailerUrl]==null;\n $title[$if[$get[TitleDefault]!=null;$get[TitleDefault];$get[TitleOrigional]] - ($get[TitleJapanese])]\n ;\n $title[$if[$get[TitleDefault]!=null;$get[TitleDefault];$get[TitleOrigional]] - ($get[TitleJapanese]);$get[TrailerUrl]]\n ]\n\n $description[$djsEval[\n function trimString(str, maxLength) {\n if (str.length > maxLength) {\n return str.slice(0, maxLength - 3) + '...';\n }\n return str;\n }\n\n const longString = `$get[description]`;\n\n const trimmedString = trimString(longString, 450);\n trimmedString;\n ]]\n $thumbnail[$httpResult[data;0;images;webp;image_url]]\n $color[$if[$guildID==;$getUserVar[color;$userID;#ff47ff];$getGuildVar[color;$guildID;#ff47ff]]]\n $switch[$env[result;data;0;type];\n $case[TV Special;\n $addField[TV Special: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;0;duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;0;aired;string];to ?;Until $if[$env[result;data;0;status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Episode:1275135592140640403> **Episodes:** $env[result;data;0;episodes]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;0;rating]]\n ]\n $case[TV;\n $addField[TV Series: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;0;duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;0;aired;string];to ?;Until $if[$env[result;data;0;status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Episode:1275135592140640403> **Episodes:** $env[result;data;0;episodes]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;0;rating]]\n ]\n $case[Music;\n $addField[Music: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;0;duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;0;aired;string];to ?;Until $if[$env[result;data;0;status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Music:1275405140232372336>**Tracks:** $env[result;data;0;episodes]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;0;rating]]\n ]\n $case[Movie;\n $addField[Movie: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;0;duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;0;aired;string];to ?;Until $if[$env[result;data;0;status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Movie:1275435316441907321>**Genres:** $arrayJoin[final;, ]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;0;rating]]\n ]\n $case[OVA;\n $addField[Origional Video Animation: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;0;duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;0;aired;string];to ?;Until $if[$env[result;data;0;status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Episode:1275135592140640403> **Episodes:** $env[result;data;0;episodes]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;0;rating]]\n ]\n $case[ONA;\n $addField[Web Anime: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;0;duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;0;aired;string];to ?;Until $if[$env[result;data;0;status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Movie:1275435316441907321> **Genres:** $arrayJoin[final;, ]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;0;rating]]\n ]\n ]\n ]\n\n $c[-------------------------------------------=[ BUTTONS \\]=-------------------------------------------]\n $switch[$get[amount];\n $case[0;\n $c[\n $addActionRow\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n ]\n ]\n $case[1;\n $addActionRow\n $addButton[anime~$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;unfavorite;favorite]~$authorID~0~$env[result;data;0;mal_id];;$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;Success;Secondary];⭐;false]\n $addButton[anime~previous~$authorID~0;;Primary;◀️;true]\n $addButton[NoReply~$authorID;1/1;Secondary;;true]\n $addButton[anime~next~$authorID~1;;Primary;▶️;true]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n ]\n $case[2;\n $addActionRow\n $addButton[anime~$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;unfavorite;favorite]~$authorID~0~$env[result;data;0;mal_id];;$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;Success;Secondary];⭐;false]\n $addButton[anime~previous~$authorID~0;;Primary;◀️;true]\n $addButton[NoReply~$authorID;1/2;Secondary;;true]\n $addButton[anime~next~$authorID~1;;Primary;▶️;false]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n ]\n $case[3;\n $addActionRow\n $addButton[anime~$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;unfavorite;favorite]~$authorID~0~$env[result;data;0;mal_id];;$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;Success;Secondary];⭐;false]\n $addButton[anime~previous~$authorID~0;;Primary;◀️;true]\n $addButton[NoReply~$authorID;1/3;Secondary;;true]\n $addButton[anime~next~$authorID~1;;Primary;▶️;false]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n ]\n $case[4;\n $addActionRow\n $addButton[anime~$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;unfavorite;favorite]~$authorID~0~$env[result;data;0;mal_id];;$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;Success;Secondary];⭐;false]\n $addButton[anime~previous~$authorID~0;;Primary;◀️;true]\n $addButton[NoReply~$authorID;1/4;Secondary;;true]\n $addButton[anime~next~$authorID~1;;Primary;▶️;false]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n ]\n $case[5;\n $addActionRow\n $addButton[anime~$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;unfavorite;favorite]~$authorID~0~$env[result;data;0;mal_id];;$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;Success;Secondary];⭐;false]\n $addButton[anime~previous~$authorID~0;;Primary;◀️;true]\n $addButton[NoReply~$authorID;1/5;Secondary;;true]\n $addButton[anime~next~$authorID~1;;Primary;▶️;false]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n ]\n $case[default;\n $reply[\n $ephemeral\n $color[$getGlobalVar[colorError]]\n $title[This is not supposed to happen!]\n $description[Something went wrong in my code, try again in a bit!]\n $footer[a log of this error has been send to my developers.]\n ]\n $sendMessage[$getGlobalVar[botErrorChannel];\n $color[$getGlobalVar[colorError]]\n $title[Error in \"Normal Command\"]\n \n<@&1269723532162760816>\n $description[Error in `!anime`]\n $addField[Issue:;**author**: <@$get[author]> ~ ||$get[author]||\n**Command**: `!anime $message`;true]\n $try[\n $if[$guildID!=;\n $attachment[$memberPerms[$guildID;$clientID;,\n];result.actionscript;true]\n $addField[GuildInfo:;**Guild**: $guildName[$guildID] ~ ||$guildID||\n**Permissions**: `in file attached`;true]\n ]\n ]\n ]\n ]\n ]\n ]\n $case[304;\n $reply[\n $ephemeral\n $color[$getGlobalVar[colorError]]\n $title[This is not supposed to happen!]\n $description[There seems to be an issue with the API i interact with, please try again later!]\n $footer[A log of this error has been send to my developers.]\n ]\n $sendMessage[$getGlobalVar[botErrorChannel];\n $color[$getGlobalVar[colorError]]\n $title[Error in \"Normal Command\"]\n \n<@&1269723532162760816>\n $description[Error in `!anime` ~ StatusCode 304 (Not modified)]\n $addField[Issue:;**author**: <@$get[author]> ~ ||$get[author]||\n**Command**: `!anime $message`;true]\n $try[\n $if[$guildID!=;\n $attachment[$memberPerms[$guildID;$clientID;,\n];result.actionscript;true]\n $addField[GuildInfo:;**Guild**: $guildName[$guildID] ~ ||$guildID||\n**Permissions**: `in file attached`;true]\n ]\n ]\n ]\n ]\n $case[400;\n $reply[\n $ephemeral\n $color[$getGlobalVar[colorError]]\n $title[This is not supposed to happen!]\n $description[There seems to be an issue with the API i interact with, please try again later!]\n $footer[a log of this error has been send to my developers.]\n ]\n $sendMessage[$getGlobalVar[botErrorChannel];\n $color[$getGlobalVar[colorError]]\n $title[Error in \"Normal Command\"]\n \n<@&1269723532162760816>\n $description[Error in `!anime` ~ StatusCode 400 (Bad Request)]\n $addField[Issue:;**author**: <@$get[author]> ~ ||$get[author]||\n**Command**: `!anime $message`;true]\n $try[\n $if[$guildID!=;\n $attachment[$memberPerms[$guildID;$clientID;,\n];result.actionscript;true]\n $addField[GuildInfo:;**Guild**: $guildName[$guildID] ~ ||$guildID||\n**Permissions**: `in file attached`;true]\n ]\n ]\n ]\n ]\n $case[404;\n $reply[\n $ephemeral\n $color[$getGlobalVar[colorError]]\n $title[Woops Whats this anime?]\n $description[I couldnt fien the anime `$get[query]` sorry.]\n ]\n ]\n $case[405;\n $reply[\n $ephemeral\n $color[$getGlobalVar[colorError]]\n $title[This is not supposed to happen!]\n $description[There seems to be an issue with the API i interact with, please try again later!]\n $footer[a log of this error has been send to my developers.]\n ]\n $sendMessage[$getGlobalVar[botErrorChannel];\n $color[$getGlobalVar[colorError]]\n $title[Error in \"Normal Command\"]\n \n<@&1269723532162760816>\n $description[Error in `!anime` ~ StatusCode 405 (Method Not Allowed)]\n $addField[Issue:;**author**: <@$get[author]> ~ ||$get[author]||\n**Command**: `!anime $message`;true]\n $try[\n $if[$guildID!=;\n $attachment[$memberPerms[$guildID;$clientID;,\n];result.actionscript;true]\n $addField[GuildInfo:;**Guild**: $guildName[$guildID] ~ ||$guildID||\n**Permissions**: `in file attached`;true]\n ]\n ]\n ]\n ]\n $case[429;\n $reply[\n $ephemeral\n $color[$getGlobalVar[colorError]]\n $title[This is not supposed to happen!]\n $description[There seems to be an issue with the API i interact with, please try again later!]\n $footer[a log of this error has been send to my developers.]\n ]\n $sendMessage[$getGlobalVar[botErrorChannel];\n $color[$getGlobalVar[colorError]]\n $title[Error in \"Normal Command\"]\n \n<@&1269723532162760816>\n $description[Error in `!anime` ~ StatusCode 429 (RateLimited ~ To many requests)]\n $addField[Issue:;**author**: <@$get[author]> ~ ||$get[author]||\n**Command**: `!anime $message`;true]\n $try[\n $if[$guildID!=;\n $attachment[$memberPerms[$guildID;$clientID;,\n];result.actionscript;true]\n $addField[GuildInfo:;**Guild**: $guildName[$guildID] ~ ||$guildID||\n**Permissions**: `in file attached`;true]\n ]\n ]\n ]\n ]\n $case[500;\n $reply[\n $ephemeral\n $color[$getGlobalVar[colorError]]\n $title[This is not supposed to happen!]\n $description[There seems to be an issue with the API i interact with, please try again later!]\n $footer[a log of this error has been send to my developers.]\n ]\n $sendMessage[$getGlobalVar[botErrorChannel];\n $color[$getGlobalVar[colorError]]\n $title[Error in \"Normal Command\"]\n \n<@&1269723532162760816>\n $description[Error in `!anime` ~ StatusCode 500 (Internal Error)]\n $addField[Issue:;**author**: <@$get[author]> ~ ||$get[author]||\n**Command**: `!anime $message`;true]\n $try[\n $if[$guildID!=;\n $attachment[$memberPerms[$guildID;$clientID;,\n];result.actionscript;true]\n $addField[GuildInfo:;**Guild**: $guildName[$guildID] ~ ||$guildID||\n**Permissions**: `in file attached`;true]\n ]\n ]\n ]\n ]\n $case[503;\n $reply[\n $ephemeral\n $color[$getGlobalVar[colorError]]\n $title[This is not supposed to happen!]\n $description[There seems to be an issue with the API i interact with, please try again later!]\n $footer[a log of this error has been send to my developers.]\n ]\n $sendMessage[$getGlobalVar[botErrorChannel];\n $color[$getGlobalVar[colorError]]\n $title[Error in \"Normal Command\"]\n \n<@&1269723532162760816>\n $description[Error in `!anime` ~ StatusCode 503 (Service Unavailable)]\n $addField[Issue:;**author**: <@$get[author]> ~ ||$get[author]||\n**Command**: `!anime $message`;true]\n $try[\n $if[$guildID!=;\n $attachment[$memberPerms[$guildID;$clientID;,\n];result.actionscript;true]\n $addField[GuildInfo:;**Guild**: $guildName[$guildID] ~ ||$guildID||\n**Permissions**: `in file attached`;true]\n ]\n ]\n ]\n ]\n ]\n ]\n ]\n ", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/search/anime.js", - "unloadable": true - }, - { - "name": "about", - "aliases": [ - "info", - "information" - ], - "description": "get info about akira", - "type": "messageCreate", - "module": "Utility", - "version": "1.0", - "sourcecode": "https://github.com/LynnuxDev/Akira/blob/main/SRC/commands/utility/about.js", - "documentation": "https://documentation.lynnux.xyz/commands/information/about", - "usage": "update", - "example": "about", - "code": "\n $c[----------------------------------ONLY-IF---------------------------------]\n $onlyIf[$getUserVar[AgreedToTos;$authorID]==true;$ephemeral $color[$getGlobalVar[color]] $title[Before we continue:] $footer[You have to agree with these terms before using akira.] $description[Before you proceed, please make sure to read and agree to our [Terms of Service\\](https://akira.lynnux.xyz/terms) and [Privacy Policy\\](https://akira.lynnux.xyz/policy).\n\nBy using the button below, you confirm that you have read and agree to abide by our terms and policies.\n\nIf you have any questions or concerns, feel free to contact our support team.] $addActionRow $addButton[AcceptTerms-$authorID;I have read and agree to abide by these terms and policies.;Success;;false]]\n $onlyIf[$channelID==$getGuildVar[BotChannel;$guildID;$channelID];$getGlobalVar[BotChannelError]]\n\n $c[-----------------------------------MAIN-----------------------------------]\n $reply[$channelID;$messageID]\n $if[$guildID!=;$let[DefaultMessage;$messageID];$let[DefaultMessage;NaN]]\n $thumbnail[$userAvatar[$botID;2048;webp]]\n $color[$getGlobalVar[color]]\n $title[❯ Akira information:]\n $addField[❯ Build;'Beta';true]\n $addField[❯ Akira version;v1.0.0;true]\n $addField[​;​;true]\n $description[Akira is a multipurpose easy to use discord bot.]\n $addField[❯ Website;[[Click Me\\](https://akira.lynnux.xyz/)\\];true]\n $addField[❯ Server;[[Click Me\\](discord://-/invite/TUqZTutDUz/login)\\];true]\n $addField[❯ Invite;[[Click Me\\](https://discord.com/oauth2/authorize?client_id=$clientID&permissions=414800276567&integration_type=0&scope=bot)\\];true]\n $addActionRow\n $addButton[close-$authorID-$get[DefaultMessage]-false;Close;Danger;✖️]\n $addButton[https://github.com/LynnuxDev/Akira;Source-Code;Link;📖]\n ", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/utility/about.js", - "unloadable": true - }, - { - "name": "avatar", - "aliases": [ - "useravatar" - ], - "type": "messageCreate", - "description": "Get the avatar of a user.", - "module": "Utility", - "sourcecode": "https://github.com/LynnuxDev/Akira/blob/main/SRC/commands/utility/avatar.js", - "documentation": "https://documentation.lynnux.xyz/commands/information/avatar", - "usage": "avatar {user}", - "example": "avatar @dark-lynn", - "version": "1.0", - "code": "\n $textSplit[userAvatar~$findUser[$message[0];true]~$authorID;~]\n $c[\n $splitText[0] == Custom ID Name\n $splitText[1] == userID\n $splitText[2] == authorID\n ]\n $onlyForUsers[;705306248538488947;392609934744748032]\n $if[$authorID==705306248538488947;Ping: `$pingMS` | Uptime: ;]\n\n $disableConsoleErrors\n\n $onlyIf[$splitText[0]==userAvatar;]\n\n $let[userAvatar;$userAvatar[$splitText[1]]]\n $if[$guildID==;\n $let[memberAvatar;$get[userAvatar]]\n ;\n $try[\n $let[memberAvatar;$memberAvatar[$guildID;$splitText[1]]]\n ;\n $let[memberAvatar;$get[userAvatar]]\n ]\n ]\n\n $author[UserInfo: \"$username[$splitText[1]]\";$get[userAvatar]]\n $color[$getUserVar[color;$splitText[1]]]\n $if[$get[memberAvatar]!=$get[userAvatar];$thumbnail[$get[memberAvatar]]]\n $image[$get[userAvatar]]\n\n $addActionRow\n $addButton[userInfo~$splitText[1]~$splitText[2];UserAvatar;Secondary;;false]\n $addButton[memberAvatar~$splitText[1]~$splitText[2];MemberAvatar;Primary;;$if[$get[userAvatar]==$get[memberAvatar];true;false]]\n ", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/utility/avatar.js", - "unloadable": true - }, - { - "name": "report", - "aliases": [ - "ifoundabug", - "ibrokesomething" - ], - "type": "messageCreate", - "description": "Report issues related to akira.", - "module": "Utility", - "sourcecode": "https://github.com/LynnuxDev/Akira/blob/main/SRC/commands/utility/report.js", - "documentation": "https://documentation.lynnux.xyz/commands/information/report", - "usage": "report", - "example": "report", - "version": "1.0", - "code": "\n $if[$authorID==705306248538488947;Ping: `$pingMS` | Uptime: ;]\n ", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/utility/report.js", - "unloadable": true - }, - { - "name": "settings", - "aliases": [ - "setting", - "seting" - ], - "description": "get info about akira", - "type": "messageCreate", - "module": "Information", - "version": "1.0", - "sourcecode": "https://github.com/LynnuxDev/Akira/blob/main/SRC/commands/utility/about.js", - "documentation": "https://documentation.lynnux.xyz/commands/information/about", - "usage": "update", - "example": "about", - "code": "\n $c[----------------------------------ONLY-IF---------------------------------]\n This command will be added in v 1.3.0\n ", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/utility/settings.js", - "unloadable": true - }, - { - "name": "user", - "aliases": [ - "userinfo", - "whois" - ], - "type": "messageCreate", - "description": "Get info on a user.", - "module": "Utility", - "sourcecode": "https://github.com/LynnuxDev/Akira/blob/main/SRC/commands/utility/userInfo.js", - "documentation": "https://documentation.lynnux.xyz/commands/information/userinfo", - "usage": "userinfo {user}", - "example": "userinfo @dark-lynn", - "version": "1.2", - "code": "\n $if[$authorID==705306248538488947;Ping: `$pingMS` | Uptime: ;]\n\n $disableConsoleErrors\n\n $let[author;$authorID]\n $let[user;$findUser[$message[0];true]]\n $let[userAvatar;$userAvatar[$get[user]]]\n $if[$guildID==;\n $let[memberAvatar;$get[userAvatar]]\n ;\n $try[\n $let[memberAvatar;$memberAvatar[$guildID;$get[user]]]\n ;\n $let[memberAvatar;$get[userAvatar]]\n ]\n ]\n\n $reply[$channelID;$messageID]\n $author[UserInfo: \"$username[$get[user]]\";$get[userAvatar]]\n $color[$getUserVar[color;$get[user]]]\n $thumbnail[$get[memberAvatar]]\n $addField[**User Info:**;<:Discord:1271543869233823774> **Username:** <@$get[user]> ~ `@$username[$get[user]]$if[$discriminator[$get[user]]!=0;#$discriminator[$get[user]]]`\n<:ID:1271543923600265278> **UserID:** `$get[user]`\n<:Date:1271543843157971014> **Created:** ~ \n<:Plus:1271544047579693148> **Badges:** $replace[$replace[$replace[$replace[$replace[$replace[$replace[$replace[$replace[$replace[$replace[$replace[$userBadges[$get[user];, ];ActiveDeveloper;$callFunction[emoji;active-developer];1];HypeSquadOnlineHouse1;$callFunction[emoji;hypesquad-bravery];1];HypeSquadOnlineHouse3;$callFunction[emoji;hypesquad-balance];1];VerifiedBot;$callFunction[emoji;verified-bot];1];HypeSquadOnlineHouse2;$callFunction[emoji;hypesquad-brilliance];1];Staff;$callFunction[emoji;discord-staff];1];Hypesquad;$callFunction[emoji;hypesquad-event];1];VerifiedDeveloper;$callFunction[emoji;verified-developer];1];PremiumEarlySupporter;$callFunction[emoji;discord-early-support];1];CertifiedModerator;$callFunction[emoji;discord-moderator];1];BugHunterLevel2;$callFunction[emoji;discord-bughunter-two];1];BugHunterLevel1;$callFunction[emoji;discord-bughunter-one];1]]\n\n $if[$try[$memberExists[$guildID;$get[user]];false]==true;\n $addField[**Member Info:**;<:Discord:1271543869233823774> **Nickname:** $try[$nickname[$guildID;$get[user]]]\n<:Boosters:1271543754376876052> **Booster:** $try[$if[$hasRoles[$guildID;$get[user];$guildBoostRoleID[$guildID]]==true;Is boosting.;Is not boosting.]]\n<:Clock:1271543787637833759> **Joined:** $try[ ~ ]]\n ]\n $addActionRow\n $addButton[userAvatar~$get[user]~$get[author];UserAvatar;Primary;;false]\n $addButton[memberAvatar~$Get[user]~$get[author];MemberAvatar;Primary;;$if[$get[userAvatar]==$get[memberAvatar];true;false]]\n ", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/utility/userInfo.js", - "unloadable": true - } - ], - "paths": "dist/commands", - "amount": "14" - }, - "interactons": { - "list": [ - { - "type": "interactionCreate", - "code": "\n $textSplit[$customID;~]\n $c[\n $splitText[0] == Custom ID Name\n $splitText[1] == userID\n $splitText[2] == authorID\n ]\n\n $c[$logger[Info;$splitText[2] == $authorID]]\n $disableConsoleErrors\n\n $onlyIf[$splitText[0]==userAvatar;]\n $onlyIf[$splitText[2]==$authorID;]\n\n $let[userAvatar;$userAvatar[$splitText[1]]]\n $if[$guildID==;\n $let[memberAvatar;$get[userAvatar]]\n ;\n $try[\n $let[memberAvatar;$memberAvatar[$guildID;$splitText[1]]]\n ;\n $let[memberAvatar;$get[userAvatar]]\n ]\n ]\n\n $interactionUpdate[\n $author[UserInfo: \"$username[$splitText[1]]\";$get[userAvatar]]\n $color[$getUserVar[color;$splitText[1]]]\n $if[$get[memberAvatar]!=$get[userAvatar];$thumbnail[$get[memberAvatar]]]\n $image[$get[userAvatar]]\n\n $addActionRow\n $addButton[userInfo~$splitText[1]~$splitText[2];UserAvatar;Secondary;;false]\n $addButton[memberAvatar~$splitText[1]~$splitText[2];MemberAvatar;Primary;;$if[$get[userAvatar]==$get[memberAvatar];true;false]]\n ]\n ", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/Global-Interactions/avatar.js", - "unloadable": true - }, - { - "type": "interactionCreate", - "code": "\n $textSplit[$customID;~]\n $c[\n $splitText[0] == Custom ID Name\n $splitText[1] == userID\n $splitText[2] == authorID\n ]\n\n $c[$logger[Info;$splitText[2] == $authorID]]\n $disableConsoleErrors\n\n $onlyIf[$splitText[0]==memberAvatar;]\n $onlyIf[$splitText[2]==$authorID;]\n\n $let[userAvatar;$userAvatar[$splitText[1]]]\n $if[$guildID==;\n $let[memberAvatar;$get[userAvatar]]\n ;\n $try[\n $let[memberAvatar;$memberAvatar[$guildID;$splitText[1]]]\n ;\n $let[memberAvatar;$get[userAvatar]]\n ]\n ]\n\n $interactionUpdate[\n $author[UserInfo: \"$username[$splitText[1]]\";$get[userAvatar]]\n $color[$getUserVar[color;$splitText[1]]]\n $thumbnail[$get[userAvatar]]\n $image[$get[memberAvatar]]\n\n $addActionRow\n $addButton[userAvatar~$splitText[1]~$splitText[2];UserAvatar;Primary;;false]\n $addButton[userInfo~$splitText[1]~$splitText[2];MemberAvatar;Secondary;;$if[$get[userAvatar]==$get[memberAvatar];true;false]]\n ]\n ", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/Global-Interactions/avatar.js", - "unloadable": true - }, - { - "type": "interactionCreate", - "code": "\n $textSplit[$customID;~]\n $c[\n $splitText[0] == Custom ID Name\n $splitText[1] == authorID\n $splitText[2] == origin if given\n ]\n\n $disableConsoleErrors\n $onlyIf[$splitText[0]==close;]\n $onlyIf[$splitText[1]==$authorID;]\n\n $switch[$splitText[2];\n $case[anime;\n $if[$fileExists[./files/$getUserVar[uuid;$authorID;not-found].json]==true;\n $deleteFile[./files/$getUserVar[uuid;$authorID;not-found].json]\n ]\n ]\n ]\n\n $deleteCommand\n\n ", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/Global-Interactions/close.js", - "unloadable": true - }, - { - "module": "Global-Interaction", - "version": "1.4", - "type": "interactionCreate", - "description": "Closes the embed/message.", - "code": "\n $c[--------------------------------TEXT-SPLIT--------------------------------]\n $textSplit[$customID;-]\n\n $c[----------------------------------ONLY-IF---------------------------------]\n $onlyIf[$toLowerCase[$splitText[0]]==acceptterms;]\n $onlyIf[$toLowerCase[$splitText[1]]==$authorID;]\n\n $c[-----------------------------------MAIN-----------------------------------]\n $setUserVar[AgreedToTos;true;$authorID]\n\n $try[\n $interactionUpdate[\n $color[$getGlobalVar[color]]\n $title[I'm looking forward to interacting with you.]\n $description[Thanks for confirming that you've read and accepted our terms and policies. You're all set!]\n ]\n ;\n $editMessage[$channelID;$messageID;\n $color[$getGlobalVar[color]]\n $title[I'm looking forward to interacting with you.]\n $description[Thanks for confirming that you've read and accepted our terms and policies. You're all set!]\n ]\n ]\n $setUserVar[uuid;$randomUUID;$authorID]\n $wait[7s]\n $try[$interactionDelete;$deleteMessage[$channelID;$messageID]]\n ", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/Global-Interactions/settings/agreedToTos.js", - "unloadable": true - }, - { - "type": "interactionCreate", - "code": "\n $c[$logger[Info;Ran $customID!]]\n ", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/Global-Interactions/triggers/onInteractionCreate.js", - "unloadable": true - }, - { - "module": "Help-Interaction", - "version": "1.0", - "type": "interactionCreate", - "description": "Default help menu.", - "code": "\n $onlyIf[$checkContains[$customID;$authorID]]\n $onlyIf[$checkContains[$toLowerCase[$customID];back]]\n $interactionUpdate[\n $if[$authorID==705306248538488947;Ping: `$pingMS` | Uptime: ;]\n\t\t\t$color[$getUserVar[color;$authorID]]\n\t\t\t$author[Akira's Features;$userAvatar[$botID]]\n\t\t\t$description[**To check out a section or command use** `akira help [section / command\\]` \n**If you want this command to show up in chat instead of dms add -c at the end of the command.** \n{Ex. `Akira help -c` or `Akira help moderation -c`} \n \nFor arguments in commands#COLON# \n`<>` means it's required. \n`{}` means it's optional. \n`[\\]` means it's either required or not based on the usage. \n**Do not actually include the <>, {} & [\\] symbols in the command.**]\n $addField[:robot: Automation;Automatically do things, like welcomemessages and autoroles\n**0 Commands** `(soon)`;true]\n $addField[:hammer: Automod;Automatically punish users for swearing or posting server invites\n**0 Commands** `(soon)`;true]\n $addField[:dollar: Economy;Get an economy rolling in your server work, shop, and way more\n**0 Commands** `(soon)`;true]\n $addField[:up: Leveling;Reward members for talking with xp and even give roles at milestones\n**0 Commands** `(soon)`;true]\n $addField[:shield: Moderation;Keep your server safe with advanced moderation commands\n**0 Commands** `(soon)`;true]\n $addField[:black_joker: Fun;Play fun little games\n**0 Commands** `(soon)`;true]\n $addField[:star: Premium;Gives you all the premium commands\n**0 Commands** `(soon)`;true]\n $addField[:frame_photo: Profile;See and manage your akira profile\n**0 Commands** `(soon)`;true]\n $addField[:point_up_2: Reaction-Roles;Let people pick their roles from a nice and easy menu\n**0 Commands** `(soon)`;true]\n $addField[:hugging: Roleplay;Give people hugs, kisses, cuddles and way more\n**8 Commands**;true]\n $addField[:mag_right: Search;Find anything and everything on the internet\n**0 Commands** `(soon)`;true]\n $addField[:wrench: Settings;Configure some of my settings for your server\n**0 Commands** `(soon)`;true]\n $addField[:flashlight: Utility;Useful left over commands that don't fit elsewhere\n**0 Commands** `(soon)`;true]\n $addField[Extra links and information:;[[Invite akira\\](https://discord.com/api/oauth2/authorize?client_id=738057910923296839&permissions=8&scope=bot%20applications.commands)\\] | [[Support Server\\](https://discord.com/invite/TUqZTutDUz)\\] | [[Vote\\](https://akira.lynnux.xyz/vote)\\] | [[Website\\](https://akira.lynnux.xyz)\\] | [Premium\\]]\n $addActionRow\n $addStringSelectMenu[helpMenu-$authorID;Which command category do you want to see?;false;1;1]\n $addOption[Automation;Automatically do things, like welcomemessages etc.;Automation;🤖;false]\n $addOption[Automod;Automatically punish users.;Automod;🔨;false]\n $addOption[Economy;Get an economy rolling in your server.;Economy;💵;false]\n $addOption[Leveling;Reward members for being active.;Leveling;🆙;false]\n $addOption[Moderation;Help your mods keep the server a save place.;Moderation;🛡️;false]\n $addOption[Fun;Play fun little games.;Fun;🃏;false]\n $addOption[Premium;Shows all the premium commands.;Premium;⭐;false]\n $addOption[Profile;See and manage your akira profile.;Profile;📝;false]\n $addOption[Reaction-Roles;Let people pick their roles.;Reaction-Roles;☝️;false]\n $addOption[Roleplay;Give people hugs, kisses and more.;Roleplay;🤗;false]\n $addOption[Search;Find anything and everything on the internet.;Search;🔎;false]\n $addOption[Settings;Configure some of my settings for your server/profile.;Settings;🔧;false]\n $addOption[Utility;Useful left over commands.;Utility;🔦;false]\n\n $addActionRow\n $addButton[close-$authorID;Close;Danger]\n ]\n", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/help/help.js", - "unloadable": true - }, - { - "module": "Help-Interaction", - "version": "1.0", - "type": "interactionCreate", - "description": "Automation help menu.", - "code": "\n $onlyIf[$toLowerCase[$selectMenuValues]==automation]\n $onlyIf[$checkContains[$customID;$authorID]]\n $interactionUpdate[\n $if[$authorID==705306248538488947;Ping: `$pingMS` | Uptime: ;]\n $color[$getUserVar[color;$authorID]]\n\t\t\t$author[Akira's Features;$userAvatar[$botID]]\n\t\t\t$description[**To check out a section or command use** `akira help [section / command\\]` \n**If you want this command to show up in chat instead of dms add -c at the end of the command.** \n{Ex. `Akira help -c` or `Akira help moderation -c`} \n \nFor arguments in commands#COLON# \n`<>` means it's required. \n`{}` means it's optional. \n`[\\]` means it's either required or not based on the usage. \n**Do not actually include the <>, {} & [\\] symbols in the command.**]\n $footer[Use \"akira command \" for more info]\n $addField[Extra links and information:;[[Invite akira\\](https://discord.com/api/oauth2/authorize?client_id=738057910923296839&permissions=8&scope=bot%20applications.commands)\\] | [[Support Server\\](https://discord.com/invite/TUqZTutDUz)\\] | [[Vote\\](https://akira.lynnux.xyz/vote)\\] | [[Website\\](https://akira.lynnux.xyz)\\] | [Premium\\]]\n\n $addActionRow\n $addButton[close-$authorID;Close;Danger]\n $addButton[Back-$authorID;Back;Secondary]\n ]\n", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/help/help.js", - "unloadable": true - }, - { - "module": "Help-Interaction", - "version": "1.0", - "type": "interactionCreate", - "description": "Automod help menu.", - "code": "\n $onlyIf[$toLowerCase[$selectMenuValues]==automod]\n $onlyIf[$checkContains[$customID;$authorID]]\n $interactionUpdate[\n $if[$authorID==705306248538488947;Ping: `$pingMS` | Uptime: ;]\n $color[$getUserVar[color;$authorID]]\n\t\t\t$author[Akira's Features;$userAvatar[$botID]]\n\t\t\t$description[**To check out a section or command use** `akira help [section / command\\]` \n**If you want this command to show up in chat instead of dms add -c at the end of the command.** \n{Ex. `Akira help -c` or `Akira help moderation -c`} \n \nFor arguments in commands#COLON# \n`<>` means it's required. \n`{}` means it's optional. \n`[\\]` means it's either required or not based on the usage. \n**Do not actually include the <>, {} & [\\] symbols in the command.**]\n $footer[Use \"akira command \" for more info]\n $addField[Extra links and information:;[[Invite akira\\](https://discord.com/api/oauth2/authorize?client_id=738057910923296839&permissions=8&scope=bot%20applications.commands)\\] | [[Support Server\\](https://discord.com/invite/TUqZTutDUz)\\] | [[Vote\\](https://akira.lynnux.xyz/vote)\\] | [[Website\\](https://akira.lynnux.xyz)\\] | [Premium\\]]\n\n $addActionRow\n $addButton[close-$authorID;Close;Danger]\n $addButton[Back-$authorID;Back;Secondary]\n ]", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/help/help.js", - "unloadable": true - }, - { - "module": "Help-Interaction", - "version": "1.0", - "type": "interactionCreate", - "description": "Economy help menu.", - "code": "\n $onlyIf[$toLowerCase[$selectMenuValues]==economy]\n $onlyIf[$checkContains[$customID;$authorID]]\n $interactionUpdate[\n $if[$authorID==705306248538488947;Ping: `$pingMS` | Uptime: ;]\n\t\t\t$color[$getUserVar[color;$authorID]]\n\t\t\t$author[Akira's Features;$userAvatar[$botID]]\n\t\t\t$description[**To check out a section or command use** `akira help [section / command\\]` \n**If you want this command to show up in chat instead of dms add -c at the end of the command.** \n{Ex. `Akira help -c` or `Akira help moderation -c`} \n \nFor arguments in commands#COLON# \n`<>` means it's required. \n`{}` means it's optional. \n`[\\]` means it's either required or not based on the usage. \n**Do not actually include the <>, {} & [\\] symbols in the command.**]\n $footer[Use \"akira command \" for more info]\n $addField[Extra links and information:;[[Invite akira\\](https://discord.com/api/oauth2/authorize?client_id=738057910923296839&permissions=8&scope=bot%20applications.commands)\\] | [[Support Server\\](https://discord.com/invite/TUqZTutDUz)\\] | [[Vote\\](https://akira.lynnux.xyz/vote)\\] | [[Website\\](https://akira.lynnux.xyz)\\] | [Premium\\]]\n $addActionRow\n $addButton[close-$authorID;Close;Danger]\n $addButton[Back-$authorID;Back;Secondary]\n ]\n", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/help/help.js", - "unloadable": true - }, - { - "module": "Help-Interaction", - "version": "1.0", - "type": "interactionCreate", - "description": "Leveling help menu.", - "code": "\n $onlyIf[$toLowerCase[$selectMenuValues]==leveling]\n $onlyIf[$checkContains[$customID;$authorID]]\n $interactionUpdate[\n $if[$authorID==705306248538488947;Ping: `$pingMS` | Uptime: ;]\n\t\t\t$color[$getUserVar[color;$authorID]]\n\t\t\t$author[Akira's Features;$userAvatar[$botID]]\n\t\t\t$description[**To check out a section or command use** `akira help [section / command\\]` \n**If you want this command to show up in chat instead of dms add -c at the end of the command.** \n{Ex. `Akira help -c` or `Akira help moderation -c`} \n \nFor arguments in commands#COLON# \n`<>` means it's required. \n`{}` means it's optional. \n`[\\]` means it's either required or not based on the usage. \n**Do not actually include the <>, {} & [\\] symbols in the command.**]\n $footer[Use \"akira command \" for more info]\n $addField[Extra links and information:;[[Invite akira\\](https://discord.com/api/oauth2/authorize?client_id=738057910923296839&permissions=8&scope=bot%20applications.commands)\\] | [[Support Server\\](https://discord.com/invite/TUqZTutDUz)\\] | [[Vote\\](https://akira.lynnux.xyz/vote)\\] | [[Website\\](https://akira.lynnux.xyz)\\] | [Premium\\]]\n $addActionRow\n $addButton[close-$authorID;Close;Danger]\n $addButton[Back-$authorID;Back;Secondary]\n ]\n", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/help/help.js", - "unloadable": true - }, - { - "module": "Help-Interaction", - "version": "1.0", - "type": "interactionCreate", - "description": "Moderation help menu.", - "code": "\n $onlyIf[$toLowerCase[$selectMenuValues]==moderation]\n $onlyIf[$checkContains[$customID;$authorID]]\n $interactionUpdate[\n $if[$authorID==705306248538488947;Ping: `$pingMS` | Uptime: ;]\n $color[$getUserVar[color;$authorID]]\n $author[Akira's Features;$userAvatar[$botID]]\n $description[**To check out a section or command use** `akira help [section / command\\]` \n**If you want this command to show up in chat instead of dms add -c at the end of the command.** \n{Ex. `Akira help -c` or `Akira help moderation -c`} \n \nFor arguments in commands#COLON# \n`<>` means it's required. \n`{}` means it's optional. \n`[\\]` means it's either required or not based on the usage. \n**Do not actually include the <>, {} & [\\] symbols in the command.**]\n $footer[Use \"akira command \" for more info]\n $addField[Extra links and information:;[[Invite akira\\](https://discord.com/api/oauth2/authorize?client_id=738057910923296839&permissions=8&scope=bot%20applications.commands)\\] | [[Support Server\\](https://discord.com/invite/TUqZTutDUz)\\] | [[Vote\\](https://akira.lynnux.xyz/vote)\\] | [[Website\\](https://akira.lynnux.xyz)\\] | [Premium\\]]\n $addActionRow\n $addButton[close-$authorID;Close;Danger]\n $addButton[Back-$authorID;Back;Secondary]\n ]\n", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/help/help.js", - "unloadable": true - }, - { - "module": "Help-Interaction", - "version": "1.0", - "type": "interactionCreate", - "description": "Fun help menu.", - "code": "\n $onlyIf[$toLowerCase[$selectMenuValues]==fun]\n $onlyIf[$checkContains[$customID;$authorID]]\n $interactionUpdate[\n $if[$authorID==705306248538488947;Ping: `$pingMS` | Uptime: ;]\n $color[$getUserVar[color;$authorID]]\n $author[Akira's Features;$userAvatar[$botID]]\n $description[**To check out a section or command use** `akira help [section / command\\]` \n**If you want this command to show up in chat instead of dms add -c at the end of the command.** \n{Ex. `Akira help -c` or `Akira help moderation -c`} \n \nFor arguments in commands#COLON# \n`<>` means it's required. \n`{}` means it's optional. \n`[\\]` means it's either required or not based on the usage. \n**Do not actually include the <>, {} & [\\] symbols in the command.**]\n $footer[Use \"akira command \" for more info]\n $addField[Extra links and information:;[[Invite akira\\](https://discord.com/api/oauth2/authorize?client_id=738057910923296839&permissions=8&scope=bot%20applications.commands)\\] | [[Support Server\\](https://discord.com/invite/TUqZTutDUz)\\] | [[Vote\\](https://akira.lynnux.xyz/vote)\\] | [[Website\\](https://akira.lynnux.xyz)\\] | [Premium\\]]\n $addActionRow\n $addButton[close-$authorID;Close;Danger]\n $addButton[Back-$authorID;Back;Secondary]\n ]\n", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/help/help.js", - "unloadable": true - }, - { - "module": "Help-Interaction", - "version": "1.0", - "type": "interactionCreate", - "description": "Fun help menu.", - "code": "\n $onlyIf[$toLowerCase[$selectMenuValues]==premium]\n $onlyIf[$checkContains[$customID;$authorID]]\n $interactionUpdate[\n $if[$authorID==705306248538488947;Ping: `$pingMS` | Uptime: ;]\n $color[$getUserVar[color;$authorID]]\n $author[Akira's Features;$userAvatar[$botID]]\n $description[**To check out a section or command use** `akira help [section / command\\]` \n**If you want this command to show up in chat instead of dms add -c at the end of the command.** \n{Ex. `Akira help -c` or `Akira help moderation -c`} \n \nFor arguments in commands#COLON# \n`<>` means it's required. \n`{}` means it's optional. \n`[\\]` means it's either required or not based on the usage. \n**Do not actually include the <>, {} & [\\] symbols in the command.**]\n $footer[Use \"akira command \" for more info]\n $addField[Extra links and information:;[[Invite akira\\](https://discord.com/api/oauth2/authorize?client_id=738057910923296839&permissions=8&scope=bot%20applications.commands)\\] | [[Support Server\\](https://discord.com/invite/TUqZTutDUz)\\] | [[Vote\\](https://akira.lynnux.xyz/vote)\\] | [[Website\\](https://akira.lynnux.xyz)\\] | [Premium\\]]\n $addActionRow\n $addButton[close-$authorID;Close;Danger]\n $addButton[Back-$authorID;Back;Secondary]\n ]\n", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/help/help.js", - "unloadable": true - }, - { - "module": "Help-Interaction", - "version": "1.0", - "type": "interactionCreate", - "description": "Profile help menu.", - "code": "\n $onlyIf[$toLowerCase[$selectMenuValues]==profile]\n $onlyIf[$checkContains[$customID;$authorID]]\n $interactionUpdate[\n $if[$authorID==705306248538488947;Ping: `$pingMS` | Uptime: ;]\n $color[$getUserVar[color;$authorID]]\n $author[Akira's Features;$userAvatar[$botID]]\n $description[**To check out a section or command use** `akira help [section / command\\]` \n**If you want this command to show up in chat instead of dms add -c at the end of the command.** \n{Ex. `Akira help -c` or `Akira help moderation -c`} \n \nFor arguments in commands#COLON# \n`<>` means it's required. \n`{}` means it's optional. \n`[\\]` means it's either required or not based on the usage. \n**Do not actually include the <>, {} & [\\] symbols in the command.**]\n $footer[Use \"akira command \" for more info]\n $addField[Extra links and information:;[[Invite akira\\](https://discord.com/api/oauth2/authorize?client_id=738057910923296839&permissions=8&scope=bot%20applications.commands)\\] | [[Support Server\\](https://discord.com/invite/TUqZTutDUz)\\] | [[Vote\\](https://akira.lynnux.xyz/vote)\\] | [[Website\\](https://akira.lynnux.xyz)\\] | [Premium\\]]\n $addActionRow\n $addButton[close-$authorID;Close;Danger]\n $addButton[Back-$authorID;Back;Secondary]\n ]\n", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/help/help.js", - "unloadable": true - }, - { - "module": "Help-Interaction", - "version": "1.0", - "type": "interactionCreate", - "description": "Reaction-Roles help menu.", - "code": "\n $onlyIf[$toLowerCase[$selectMenuValues]==reaction-roles]\n $onlyIf[$checkContains[$customID;$authorID]]\n $interactionUpdate[\n $if[$authorID==705306248538488947;Ping: `$pingMS` | Uptime: ;]\n $color[$getUserVar[color;$authorID]]\n $author[Akira's Features;$userAvatar[$botID]]\n $description[**To check out a section or command use** `akira help [section / command\\]` \n**If you want this command to show up in chat instead of dms add -c at the end of the command.** \n{Ex. `Akira help -c` or `Akira help moderation -c`} \n \nFor arguments in commands#COLON# \n`<>` means it's required. \n`{}` means it's optional. \n`[\\]` means it's either required or not based on the usage. \n**Do not actually include the <>, {} & [\\] symbols in the command.**]\n $footer[Use \"akira command \" for more info]\n $addField[Extra links and information:;[[Invite akira\\](https://discord.com/api/oauth2/authorize?client_id=738057910923296839&permissions=8&scope=bot%20applications.commands)\\] | [[Support Server\\](https://discord.com/invite/TUqZTutDUz)\\] | [[Vote\\](https://akira.lynnux.xyz/vote)\\] | [[Website\\](https://akira.lynnux.xyz)\\] | [Premium\\]]\n $addActionRow\n $addButton[close-$authorID;Close;Danger]\n $addButton[Back-$authorID;Back;Secondary]\n ]\n", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/help/help.js", - "unloadable": true - }, - { - "module": "Help-Interaction", - "version": "1.0", - "type": "interactionCreate", - "description": "Roleplay help menu.", - "code": "\n $onlyIf[$toLowerCase[$selectMenuValues]==roleplay]\n $onlyIf[$checkContains[$customID;$authorID]]\n $interactionUpdate[\n $if[$authorID==705306248538488947;Ping: `$pingMS` | Uptime: ;]\n $color[$getUserVar[color;$authorID]]\n $author[Akira's Features;$userAvatar[$botID]]\n $description[**To check out a section or command use** `akira help [section / command\\]` \n**If you want this command to show up in chat instead of dms add -c at the end of the command.** \n{Ex. `Akira help -c` or `Akira help moderation -c`} \n \nFor arguments in commands#COLON# \n`<>` means it's required. \n`{}` means it's optional. \n`[\\]` means it's either required or not based on the usage. \n**Do not actually include the <>, {} & [\\] symbols in the command.**]\n $footer[Use \"akira command \" for more info]\n $addField[** **;Express yourself with over `50` different gif commands that each track how often you've received and given them so you can see how many hugs you've given and gotten. Check `akira counters` to see your statistics.\n\n(Commands executed on yourself do not count towards the counters);false]\n $addField[Wholesome:;`akira [command\\] {users} (reason)`\n```Blush, Boop, Cheer, Cuddle, Dance, Feed, Glomp, Handhold, Happy, Highfive, Hug, Kiss, Laugh, Love, Nom, Nuzzle, Pat, Peck, Tease, Thumbsup, Tickle, Wag, Wave, Wink```]\n $addField[Neutral:;`akira [command\\] {users} (reason)`\n```Bonk, Bored, Chase, Dab, Facepalm, Lick, Lurk, Nervous, No, Panic, Poke, Pout, Run, Shrug, Sip, Sleep, Smug, Stare, Think, Yes```]\n $addField[Negative:;`akira [command\\] {users} (reason)`\n```Bite, Cringe, Cry, Die, Hate, Kill, Sad, Shoot, Slap, Stab, Triggered```]\n $addField[Akira counters (user):;See how many times each roleplay action has happened to you and how often you've done them to others.]\n $addField[Akira blockcommand [roleplay command\\]:;Block a roleplay command so people can't use it on you, in case you want to reject everyone from slapping you.]\n $addField[Akira unblockcommand [roleplay command\\]:;Unblock a roleplay command so people can use it on you again, in case you once again accept slaps and bonks.]\n $addField[Akira block [@users\\]:;Block users so they can't spam you with roleplay commands and harass you. Useful if they keep trying to kiss you.]\n $addField[Akira unblock [@users\\]:;Unblock a user so they can use roleplay commands on you again. In case you forgive your stalkers.]\n $addField[Extra links and information:;[[Invite akira\\](https://discord.com/api/oauth2/authorize?client_id=738057910923296839&permissions=8&scope=bot%20applications.commands)\\] | [[Support Server\\](https://discord.com/invite/TUqZTutDUz)\\] | [[Vote\\](https://akira.lynnux.xyz/vote)\\] | [[Website\\](https://akira.lynnux.xyz)\\] | [Premium\\]]\n $addActionRow\n $addButton[close-$authorID;Close;Danger]\n $addButton[Back-$authorID;Back;Secondary]\n ]\n", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/help/help.js", - "unloadable": true - }, - { - "module": "Help-Interaction", - "version": "1.0", - "type": "interactionCreate", - "description": "search help menu.", - "code": "\n $onlyIf[$toLowerCase[$selectMenuValues]==search]\n $onlyIf[$checkContains[$customID;$authorID]]\n $interactionUpdate[\n $if[$authorID==705306248538488947;Ping: `$pingMS` | Uptime: ;]\n $color[$getUserVar[color;$authorID]]\n $author[Akira's Features;$userAvatar[$botID]]\n $description[**To check out a section or command use** `akira help [section / command\\]` \n**If you want this command to show up in chat instead of dms add -c at the end of the command.** \n{Ex. `Akira help -c` or `Akira help moderation -c`} \n \nFor arguments in commands#COLON# \n`<>` means it's required. \n`{}` means it's optional. \n`[\\]` means it's either required or not based on the usage. \n**Do not actually include the <>, {} & [\\] symbols in the command.**]\n $footer[Use \"akira command \" for more info]\n $addField[Extra links and information:;[[Invite akira\\](https://discord.com/api/oauth2/authorize?client_id=738057910923296839&permissions=8&scope=bot%20applications.commands)\\] | [[Support Server\\](https://discord.com/invite/TUqZTutDUz)\\] | [[Vote\\](https://akira.lynnux.xyz/vote)\\] | [[Website\\](https://akira.lynnux.xyz)\\] | [Premium\\]]\n $addActionRow\n $addButton[close-$authorID;Close;Danger]\n $addButton[Back-$authorID;Back;Secondary]\n ]\n", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/help/help.js", - "unloadable": true - }, - { - "module": "Help-Interaction", - "version": "1.0", - "type": "interactionCreate", - "description": "Settings help menu.", - "code": "\n $onlyIf[$toLowerCase[$selectMenuValues]==settings]\n $onlyIf[$checkContains[$customID;$authorID]]\n $interactionUpdate[\n $if[$authorID==705306248538488947;Ping: `$pingMS` | Uptime: ;]\n $color[$getUserVar[color;$authorID]]\n $author[Akira's Features;$userAvatar[$botID]]\n $description[**To check out a section or command use** `akira help [section / command\\]` \n**If you want this command to show up in chat instead of dms add -c at the end of the command.** \n{Ex. `Akira help -c` or `Akira help moderation -c`} \n \nFor arguments in commands#COLON# \n`<>` means it's required. \n`{}` means it's optional. \n`[\\]` means it's either required or not based on the usage. \n**Do not actually include the <>, {} & [\\] symbols in the command.**]\n $footer[Use \"akira command \" for more info]\n $addField[Extra links and information:;[[Invite akira\\](https://discord.com/api/oauth2/authorize?client_id=738057910923296839&permissions=8&scope=bot%20applications.commands)\\] | [[Support Server\\](https://discord.com/invite/TUqZTutDUz)\\] | [[Vote\\](https://akira.lynnux.xyz/vote)\\] | [[Website\\](https://akira.lynnux.xyz)\\] | [Premium\\]]\n $addActionRow\n $addButton[close-$authorID;Close;Danger]\n $addButton[Back-$authorID;Back;Secondary]\n ]\n", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/help/help.js", - "unloadable": true - }, - { - "module": "Help-Interaction", - "version": "1.0", - "type": "interactionCreate", - "description": "Settings help menu.", - "code": "\n $onlyIf[$toLowerCase[$selectMenuValues]==utility]\n $onlyIf[$checkContains[$customID;$authorID]]\n $interactionUpdate[\n $if[$authorID==705306248538488947;Ping: `$pingMS` | Uptime: ;]\n $color[$getUserVar[color;$authorID]]\n $author[Akira's Features;$userAvatar[$botID]]\n $description[**To check out a section or command use** `akira help [section / command\\]` \n**If you want this command to show up in chat instead of dms add -c at the end of the command.** \n{Ex. `Akira help -c` or `Akira help moderation -c`} \n \nFor arguments in commands#COLON# \n`<>` means it's required. \n`{}` means it's optional. \n`[\\]` means it's either required or not based on the usage. \n**Do not actually include the <>, {} & [\\] symbols in the command.**]\n $footer[Use \"akira command \" for more info]\n $addField[Extra links and information:;[[Invite akira\\](https://discord.com/api/oauth2/authorize?client_id=738057910923296839&permissions=8&scope=bot%20applications.commands)\\] | [[Support Server\\](https://discord.com/invite/TUqZTutDUz)\\] | [[Vote\\](https://akira.lynnux.xyz/vote)\\] | [[Website\\](https://akira.lynnux.xyz)\\] | [Premium\\]]\n $addActionRow\n $addButton[close-$authorID;Close;Danger]\n $addButton[Back-$authorID;Back;Secondary]\n ]\n", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/help/help.js", - "unloadable": true - }, - { - "type": "interactionCreate", - "code": "\n $disableConsoleErrors\n $textSplit[$customID;~]\n $c[\n $splitText[0] == Custom ID Name\n $splitText[1] == function\n $splitText[2] == authorID\n $splitText[3] == number of page\n $splitText[4] == MalID if given\n ]\n\n\n $disableConsoleErrors\n $onlyIf[$splitText[0]==anime;]\n $onlyIf[$splitText[2]==$authorID;]\n\n $jsonLoad[result;$readFile[./files/anime/$getUserVar[uuid;$authorID;not-found].json]]\n $let[page;$splitText[3]]\n $let[amount;$env[result;pagination;items;count]]\n $let[TitleOrigional;$env[result;data;$get[page];title]]\n $let[TitleDefault;$env[result;data;$get[page];title_english]]\n $let[TitleJapanese;$env[result;data;$get[page];title_japanese]]\n $let[TrailerUrl;$env[result;data;$get[page];trailer;url]]\n $let[description;$env[result;data;$get[page];synopsis]]\n $let[malID;$env[result;data;$get[page];mal_id]]\n $let[image;$env[result;data;$get[page];images;webp;image_url]]\n $switch[$splitText[1];\n $case[next;\n $interactionUpdate[\n $color[$if[$guildID==;$getUserVar[color;$userID;#ff47ff];$getGuildVar[color;$guildID;#ff47ff]]]\n $if[$get[TrailerUrl]==null;\n $title[$if[$get[TitleDefault]!=null;$get[TitleDefault];$get[TitleOrigional]] - ($get[TitleJapanese])]\n ;\n $title[$if[$get[TitleDefault]!=null;$get[TitleDefault];$get[TitleOrigional]] - ($get[TitleJapanese]);$get[TrailerUrl]]\n ]\n $thumbnail[$httpResult[data;$get[page];images;webp;image_url]]\n $switch[$env[result;data;$get[page];type];\n $case[TV Special;\n $addField[TV Special: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;$get[page];duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;$get[page];aired;string];to ?;Until $if[$env[result;data;$get[page];status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Episode:1275135592140640403> **Episodes:** $env[result;data;$get[page];episodes]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;$get[page];rating]]\n ]\n $case[TV;\n $addField[TV Series: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;$get[page];duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;$get[page];aired;string];to ?;Until $if[$env[result;data;$get[page];status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Episode:1275135592140640403> **Episodes:** $env[result;data;$get[page];episodes]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;$get[page];rating]]\n ]\n $case[Music;\n $addField[Music: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;$get[page];duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;$get[page];aired;string];to ?;Until $if[$env[result;data;$get[page];status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Music:1275405140232372336>**Tracks:** $env[result;data;$get[page];episodes]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;$get[page];rating]]\n ]\n $case[Movie;\n $addField[Movie: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;$get[page];duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;$get[page];aired;string];to ?;Until $if[$env[result;data;$get[page];status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Movie:1275435316441907321>**Genres:** $arrayJoin[final;, ]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;$get[page];rating]]\n ]\n $case[OVA;\n $addField[Origional Video Animation: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;$get[page];duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;$get[page];aired;string];to ?;Until $if[$env[result;data;$get[page];status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Episode:1275135592140640403> **Episodes:** $env[result;data;$get[page];episodes]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;$get[page];rating]]\n ]\n $case[ONA;\n $addField[Web Anime: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;$get[page];duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;$get[page];aired;string];to ?;Until $if[$env[result;data;$get[page];status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Movie:1275435316441907321> **Genres:** $arrayJoin[final;, ]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;$get[page];rating]]\n ]\n ]\n $description[$replace[$djsEval[\nfunction trimString(str, maxLength) {\n if (str.length > maxLength) {\n return str.slice(0, maxLength - 3) + '...';\n }\n return str;\n}\n\nconst longString = `$get[description]`;\n\nconst trimmedString = trimString(longString, 450);\ntrimmedString;\n];\n[Written by MAL Rewrite\\];;-1]]\n $c[-------------------------------------------=[ BUTTONS \\]=-------------------------------------------]\n $switch[$get[page];\n $case[0;\n $addActionRow\n $addButton[anime~$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;unfavorite;favorite]~$authorID~$get[page]~$env[result;data;$get[page];mal_id];;$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;Success;Secondary];⭐;false]\n $addButton[anime~previous~$authorID~0;;Primary;◀️;true]\n $addButton[NoReply~$authorID;$math[$get[page]+1]/$get[amount];Secondary;;true]\n $addButton[anime~next~$authorID~$math[$get[page]+1];;Primary;▶️;$if[$get[amount]==1;true;false]]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n ]\n $case[1;\n $addActionRow\n $addButton[anime~$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;unfavorite;favorite]~$authorID~$get[page]~$env[result;data;$get[page];mal_id];;$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;Success;Secondary];⭐;false]\n $addButton[anime~previous~$authorID~$math[$get[page]-1];;Primary;◀️;false]\n $addButton[NoReply~$authorID;$math[$get[page]+1]/$get[amount];Secondary;;true]\n $addButton[anime~next~$authorID~$math[$get[page]+1];;Primary;▶️;$if[$get[amount]==2;true;false]]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n ]\n $case[2;\n $addActionRow\n $addButton[anime~$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;unfavorite;favorite]~$authorID~$get[page]~$env[result;data;$get[page];mal_id];;$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;Success;Secondary];⭐;false]\n $addButton[anime~previous~$authorID~$math[$get[page]-1];;Primary;◀️;false]\n $addButton[NoReply~$authorID;$math[$get[page]+1]/$get[amount];Secondary;;true]\n $addButton[anime~next~$authorID~$math[$get[page]+1];;Primary;▶️;$if[$get[amount]==3;true;false]]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n ]\n $case[3;\n $addActionRow\n $addButton[anime~$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;unfavorite;favorite]~$authorID~$get[page]~$env[result;data;$get[page];mal_id];;$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;Success;Secondary];⭐;false]\n $addButton[anime~previous~$authorID~$math[$get[page]-1];;Primary;◀️;false]\n $addButton[NoReply~$authorID;$math[$get[page]+1]/$get[amount];Secondary;;true]\n $addButton[anime~next~$authorID~$math[$get[page]+1];;Primary;▶️;$if[$get[amount]==4;true;false]]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n ]\n $case[4;\n $addActionRow\n $addButton[anime~$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;unfavorite;favorite]~$authorID~$get[page]~$env[result;data;$get[page];mal_id];;$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;Success;Secondary];⭐;false]\n $addButton[anime~previous~$authorID~$math[$get[page]-1];;Primary;◀️;false]\n $addButton[NoReply~$authorID;$math[$get[page]+1]/$get[amount];Secondary;;true]\n $addButton[anime~next~$authorID~1;;Primary;▶️;true]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n ]\n $case[default;\n $sendMessage[$getGlobalVar[botErrorChannel];\n $color[$getGlobalVar[colorError]]\n $title[Error in \"Normal Command\"]\n \n<@&1269723532162760816>\n $description[Error in `!anime`]\n $addField[Issue:;**author**: <@$get[author]> ~ ||$get[author]||\n**Command**: `!anime $message`;true]\n $try[\n $if[$guildID!=;\n $attachment[$memberPerms[$guildID;$clientID;,\n];result.actionscript;true]\n $addField[GuildInfo:;**Guild**: $guildName[$guildID] ~ ||$guildID||\n**Permissions**: `in file attached`;true]\n ]\n ]\n $ephemeral\n $color[$getGlobalVar[colorError]]\n $title[This is not supposed to happen!]\n $description[Something went wrong in my code, try again in a bit!]\n $footer[a log of this error has been send to my developers.]\n ]\n ]\n ]\n ]\n ]\n\n $case[previous;\n $interactionUpdate[\n $color[$if[$guildID==;$getUserVar[color;$userID;#ff47ff];$getGuildVar[color;$guildID;#ff47ff]]]\n $if[$get[TrailerUrl]==null;\n $title[$if[$get[TitleDefault]!=null;$get[TitleDefault];$get[TitleOrigional]] - ($get[TitleJapanese])]\n ;\n $title[$if[$get[TitleDefault]!=null;$get[TitleDefault];$get[TitleOrigional]] - ($get[TitleJapanese]);$get[TrailerUrl]]\n ]\n $thumbnail[$httpResult[data;$get[page];images;webp;image_url]]\n $switch[$env[result;data;$get[page];type];\n $case[TV Special;\n $addField[TV Special: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;$get[page];duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;$get[page];aired;string];to ?;Until $if[$env[result;data;$get[page];status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Episode:1275135592140640403> **Episodes:** $env[result;data;$get[page];episodes]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;$get[page];rating]]\n ]\n $case[TV;\n $addField[TV Series: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;$get[page];duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;$get[page];aired;string];to ?;Until $if[$env[result;data;$get[page];status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Episode:1275135592140640403> **Episodes:** $env[result;data;$get[page];episodes]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;$get[page];rating]]\n ]\n $case[Music;\n $addField[Music: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;$get[page];duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;$get[page];aired;string];to ?;Until $if[$env[result;data;$get[page];status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Music:1275405140232372336>**Tracks:** $env[result;data;$get[page];episodes]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;$get[page];rating]]\n ]\n $case[Movie;\n $addField[Movie: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;$get[page];duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;$get[page];aired;string];to ?;Until $if[$env[result;data;$get[page];status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Movie:1275435316441907321>**Genres:** $arrayJoin[final;, ]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;$get[page];rating]]\n ]\n $case[OVA;\n $addField[Origional Video Animation: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;$get[page];duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;$get[page];aired;string];to ?;Until $if[$env[result;data;$get[page];status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Episode:1275135592140640403> **Episodes:** $env[result;data;$get[page];episodes]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;$get[page];rating]]\n ]\n $case[ONA;\n $addField[Web Anime: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;$get[page];duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;$get[page];aired;string];to ?;Until $if[$env[result;data;$get[page];status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Movie:1275435316441907321> **Genres:** $arrayJoin[final;, ]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;$get[page];rating]]\n ]\n ]\n $description[$replace[$djsEval[\nfunction trimString(str, maxLength) {\n if (str.length > maxLength) {\n return str.slice(0, maxLength - 3) + '...';\n }\n return str;\n}\n\nconst longString = `$get[description]`;\n\nconst trimmedString = trimString(longString, 450);\ntrimmedString;\n];\n[Written by MAL Rewrite\\];;-1]]\n $c[-------------------------------------------=[ BUTTONS \\]=-------------------------------------------]\n $switch[$get[page];\n $case[0;\n $addActionRow\n $addButton[anime~$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;unfavorite;favorite]~$authorID~$get[page]~$env[result;data;$get[page];mal_id];;$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;Success;Secondary];⭐;false]\n $addButton[anime~previous~$authorID~0;;Primary;◀️;true]\n $addButton[NoReply~$authorID;$math[$get[page]+1]/$get[amount];Secondary;;true]\n $addButton[anime~next~$authorID~$math[$get[page]+1];;Primary;▶️;$if[$get[amount]==1;true;false]]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n ]\n $case[1;\n $addActionRow\n $addButton[anime~$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;unfavorite;favorite]~$authorID~$get[page]~$env[result;data;$get[page];mal_id];;$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;Success;Secondary];⭐;false]\n $addButton[anime~previous~$authorID~$math[$get[page]-1];;Primary;◀️;false]\n $addButton[NoReply~$authorID;$math[$get[page]+1]/$get[amount];Secondary;;true]\n $addButton[anime~next~$authorID~$math[$get[page]+1];;Primary;▶️;$if[$get[amount]==2;true;false]]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n ]\n $case[2;\n $addActionRow\n $addButton[anime~$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;unfavorite;favorite]~$authorID~$get[page]~$env[result;data;$get[page];mal_id];;$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;Success;Secondary];⭐;false]\n $addButton[anime~previous~$authorID~$math[$get[page]-1];;Primary;◀️;false]\n $addButton[NoReply~$authorID;$math[$get[page]+1]/$get[amount];Secondary;;true]\n $addButton[anime~next~$authorID~$math[$get[page]+1];;Primary;▶️;$if[$get[amount]==3;true;false]]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n ]\n $case[3;\n $addActionRow\n $addButton[anime~$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;unfavorite;favorite]~$authorID~$get[page]~$env[result;data;$get[page];mal_id];;$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;Success;Secondary];⭐;false]\n $addButton[anime~previous~$authorID~$math[$get[page]-1];;Primary;◀️;false]\n $addButton[NoReply~$authorID;$math[$get[page]+1]/$get[amount];Secondary;;true]\n $addButton[anime~next~$authorID~$math[$get[page]+1];;Primary;▶️;$if[$get[amount]==4;true;false]]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n ]\n $case[4;\n $addActionRow\n $addButton[anime~$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;unfavorite;favorite]~$authorID~$get[page]~$env[result;data;$get[page];mal_id];;$if[$checkContains[$getUserVar[anime~favorite;$authorID];$get[malID]]==true;Success;Secondary];⭐;false]\n $addButton[anime~previous~$authorID~$math[$get[page]-1];;Primary;◀️;false]\n $addButton[NoReply~$authorID;$math[$get[page]+1]/$get[amount];Secondary;;true]\n $addButton[anime~next~$authorID~1;;Primary;▶️;true]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n ]\n $case[default;\n $sendMessage[$getGlobalVar[botErrorChannel];\n $color[$getGlobalVar[colorError]]\n $title[Error in \"Normal Command\"]\n \n<@&1269723532162760816>\n $description[Error in `!anime`]\n $addField[Issue:;**author**: <@$get[author]> ~ ||$get[author]||\n**Command**: `!anime $message`;true]\n $try[\n $if[$guildID!=;\n $attachment[$memberPerms[$guildID;$clientID;,\n];result.actionscript;true]\n $addField[GuildInfo:;**Guild**: $guildName[$guildID] ~ ||$guildID||\n**Permissions**: `in file attached`;true]\n ]\n ]\n $ephemeral\n $color[$getGlobalVar[colorError]]\n $title[This is not supposed to happen!]\n $description[Something went wrong in my code, try again in a bit!]\n $footer[a log of this error has been send to my developers.]\n ]\n ]\n ]\n ]\n ]\n\n $case[favorite;\n $arrayLoad[anime~favorite;,;$getuserVar[anime~favorite;$authorID]]\n $arrayPush[anime~favorite;$splitText[4]]\n $setUserVar[anime~favorite;$arrayJoin[anime~favorite;,];$authorID]\n $httpAddHeader[Content-Type;application/json]\n $httpSetBody[{\n \"id\": \"$env[result;data;$get[page];mal_id]\",\n \"title\": \"$get[TitleJapanese]\",\n \"title_english\": \"$get[TitleDefault]\",\n \"url\": \"$get[TrailerUrl]\",\n \"favorited\": 1\n}]\n $!httpRequest[https://api.lynnux.xyz/anime;post]\n $jsonLoad[result;$readFile[./files/anime/$getUserVar[uuid;$authorID;not-found].json]]\n $interactionUpdate[\n $color[$if[$guildID==;$getUserVar[color;$userID;#ff47ff];$getGuildVar[color;$guildID;#ff47ff]]]\n $if[$get[TrailerUrl]==null;\n $title[$if[$get[TitleDefault]!=null;$get[TitleDefault];$get[TitleOrigional]] - ($get[TitleJapanese])]\n ;\n $title[$if[$get[TitleDefault]!=null;$get[TitleDefault];$get[TitleOrigional]] - ($get[TitleJapanese]);$get[TrailerUrl]]\n ]\n $thumbnail[$env[result;data;$get[page];images;webp;image_url]]\n $switch[$env[result;data;$get[page];type];\n $case[TV Special;\n $addField[TV Special: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;$get[page];duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;$get[page];aired;string];to ?;Until $if[$env[result;data;$get[page];status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Episode:1275135592140640403> **Episodes:** $env[result;data;$get[page];episodes]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;$get[page];rating]]\n ]\n $case[TV;\n $addField[TV Series: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;$get[page];duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;$get[page];aired;string];to ?;Until $if[$env[result;data;$get[page];status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Episode:1275135592140640403> **Episodes:** $env[result;data;$get[page];episodes]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;$get[page];rating]]\n ]\n $case[Music;\n $addField[Music: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;$get[page];duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;$get[page];aired;string];to ?;Until $if[$env[result;data;$get[page];status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Music:1275405140232372336>**Tracks:** $env[result;data;$get[page];episodes]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;$get[page];rating]]\n ]\n $case[Movie;\n $addField[Movie: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;$get[page];duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;$get[page];aired;string];to ?;Until $if[$env[result;data;$get[page];status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Movie:1275435316441907321>**Genres:** $arrayJoin[final;, ]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;$get[page];rating]]\n ]\n $case[OVA;\n $addField[Origional Video Animation: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;$get[page];duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;$get[page];aired;string];to ?;Until $if[$env[result;data;$get[page];status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Episode:1275135592140640403> **Episodes:** $env[result;data;$get[page];episodes]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;$get[page];rating]]\n ]\n $case[ONA;\n $addField[Web Anime: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;$get[page];duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;$get[page];aired;string];to ?;Until $if[$env[result;data;$get[page];status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Movie:1275435316441907321> **Genres:** $arrayJoin[final;, ]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;$get[page];rating]]\n ]\n ]\n $description[$replace[$djsEval[\nfunction trimString(str, maxLength) {\n if (str.length > maxLength) {\n return str.slice(0, maxLength - 3) + '...';\n }\n return str;\n}\n\nconst longString = `$get[description]`;\n\nconst trimmedString = trimString(longString, 450);\ntrimmedString;\n];\n[Written by MAL Rewrite\\];;-1]]\n $c[-------------------------------------------=[ BUTTONS \\]=-------------------------------------------]\n $switch[$get[page];\n $case[0;\n $addActionRow\n $addButton[anime~unfavorite~$authorID~$get[page]~$env[result;data;$get[page];mal_id];;Success;⭐;false]\n $addButton[anime~previous~$authorID~0;;Primary;◀️;true]\n $addButton[NoReply~$authorID;$math[$get[page]+1]/$get[amount];Secondary;;true]\n $addButton[anime~next~$authorID~$math[$get[page]+1];;Primary;▶️;$if[$get[amount]==1;true;false]]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n ]\n $case[1;\n $addActionRow\n $addButton[anime~unfavorite~$authorID~$get[page]~$env[result;data;$get[page];mal_id];;Success;⭐;false]\n $addButton[anime~previous~$authorID~$math[$get[page]-1];;Primary;◀️;false]\n $addButton[NoReply~$authorID;$math[$get[page]+1]/$get[amount];Secondary;;true]\n $addButton[anime~next~$authorID~$math[$get[page]+1];;Primary;▶️;$if[$get[amount]==2;true;false]]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n ]\n $case[2;\n $addActionRow\n $addButton[anime~unfavorite~$authorID~$get[page]~$env[result;data;$get[page];mal_id];;Success;⭐;false]\n $addButton[anime~previous~$authorID~$math[$get[page]-1];;Primary;◀️;false]\n $addButton[NoReply~$authorID;$math[$get[page]+1]/$get[amount];Secondary;;true]\n $addButton[anime~next~$authorID~$math[$get[page]+1];;Primary;▶️;$if[$get[amount]==3;true;false]]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n ]\n $case[3;\n $addActionRow\n $addButton[anime~unfavorite~$authorID~$get[page]~$env[result;data;$get[page];mal_id];;Success;⭐;false]\n $addButton[anime~previous~$authorID~$math[$get[page]-1];;Primary;◀️;false]\n $addButton[NoReply~$authorID;$math[$get[page]+1]/$get[amount];Secondary;;true]\n $addButton[anime~next~$authorID~$math[$get[page]+1];;Primary;▶️;$if[$get[amount]==4;true;false]]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n ]\n $case[4;\n $addActionRow\n $addButton[anime~unfavorite~$authorID~$get[page]~$env[result;data;$get[page];mal_id];;Success;⭐;false]\n $addButton[anime~previous~$authorID~$math[$get[page]-1];;Primary;◀️;false]\n $addButton[NoReply~$authorID;$math[$get[page]+1]/$get[amount];Secondary;;true]\n $addButton[anime~next~$authorID~1;;Primary;▶️;true]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n ]\n $case[default;\n $sendMessage[$getGlobalVar[botErrorChannel];\n $color[$getGlobalVar[colorError]]\n $title[Error in \"Normal Command\"]\n \n<@&1269723532162760816>\n $description[Error in `!anime`]\n $addField[Issue:;**author**: <@$get[author]> ~ ||$get[author]||\n**Command**: `!anime $message`;true]\n $try[\n $if[$guildID!=;\n $attachment[$memberPerms[$guildID;$clientID;,\n];result.actionscript;true]\n $addField[GuildInfo:;**Guild**: $guildName[$guildID] ~ ||$guildID||\n**Permissions**: `in file attached`;true]\n ]\n ]\n $ephemeral\n $color[$getGlobalVar[colorError]]\n $title[This is not supposed to happen!]\n $description[Something went wrong in my code, try again in a bit!]\n $footer[a log of this error has been send to my developers.]\n ]\n ]\n ]\n ]\n ]\n $case[unfavorite;\n $setUserVar[anime~favorite;$replace[$getUserVar[anime~favorite;$authorID];,$get[malID];;1];$authorID]\n $!httpRequest[https://api.lynnux.xyz/anime?id=$env[result;data;$get[page];mal_id];delete]\n $jsonLoad[result;$readFile[./files/anime/$getUserVar[uuid;$authorID;not-found].json]]\n $interactionUpdate[\n $color[$if[$guildID==;$getUserVar[color;$userID;#ff47ff];$getGuildVar[color;$guildID;#ff47ff]]]\n $if[$get[TrailerUrl]==null;\n $title[$if[$get[TitleDefault]!=null;$get[TitleDefault];$get[TitleOrigional]] - ($get[TitleJapanese])]\n ;\n $title[$if[$get[TitleDefault]!=null;$get[TitleDefault];$get[TitleOrigional]] - ($get[TitleJapanese]);$get[TrailerUrl]]\n ]\n $thumbnail[$env[result;data;$get[page];images;webp;image_url]]\n $switch[$env[result;data;$get[page];type];\n $case[TV Special;\n $addField[TV Special: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;$get[page];duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;$get[page];aired;string];to ?;Until $if[$env[result;data;$get[page];status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Episode:1275135592140640403> **Episodes:** $env[result;data;$get[page];episodes]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;$get[page];rating]]\n ]\n $case[TV;\n $addField[TV Series: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;$get[page];duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;$get[page];aired;string];to ?;Until $if[$env[result;data;$get[page];status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Episode:1275135592140640403> **Episodes:** $env[result;data;$get[page];episodes]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;$get[page];rating]]\n ]\n $case[Music;\n $addField[Music: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;$get[page];duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;$get[page];aired;string];to ?;Until $if[$env[result;data;$get[page];status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Music:1275405140232372336>**Tracks:** $env[result;data;$get[page];episodes]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;$get[page];rating]]\n ]\n $case[Movie;\n $addField[Movie: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;$get[page];duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;$get[page];aired;string];to ?;Until $if[$env[result;data;$get[page];status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Movie:1275435316441907321>**Genres:** $arrayJoin[final;, ]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;$get[page];rating]]\n ]\n $case[OVA;\n $addField[Origional Video Animation: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;$get[page];duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;$get[page];aired;string];to ?;Until $if[$env[result;data;$get[page];status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Episode:1275135592140640403> **Episodes:** $env[result;data;$get[page];episodes]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;$get[page];rating]]\n ]\n $case[ONA;\n $addField[Web Anime: Info;<:Clock:1271543787637833759> **Duration:** $env[result;data;$get[page];duration]\n<:Date:1271543843157971014> **Aired:** $replace[$replace[$env[result;data;$get[page];aired;string];to ?;Until $if[$env[result;data;$get[page];status]==Currently Airing;Present;Unknown];1];tp;untill;-1]\n<:Movie:1275435316441907321> **Genres:** $arrayJoin[final;, ]\n<:Plus:1271544047579693148> **Age Rating:** $env[result;data;$get[page];rating]]\n ]\n ]\n $description[$replace[$djsEval[\nfunction trimString(str, maxLength) {\n if (str.length > maxLength) {\n return str.slice(0, maxLength - 3) + '...';\n }\n return str;\n}\n\nconst longString = `$get[description]`;\n\nconst trimmedString = trimString(longString, 450);\ntrimmedString;\n];\n[Written by MAL Rewrite\\];;-1]]\n $switch[$get[page];\n $case[0;\n $addActionRow\n $addButton[anime~favorite~$authorID~$get[page]~$env[result;data;$get[page];mal_id];;Secondary;⭐;false]\n $addButton[anime~previous~$authorID~0;;Primary;◀️;true]\n $addButton[NoReply~$authorID;$math[$get[page]+1]/$get[amount];Secondary;;true]\n $addButton[anime~next~$authorID~$math[$get[page]+1];;Primary;▶️;$if[$get[amount]==1;true;false]]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n ]\n $case[1;\n $addActionRow\n $addButton[anime~favorite~$authorID~$get[page]~$env[result;data;$get[page];mal_id];;Secondary;⭐;false]\n $addButton[anime~previous~$authorID~$math[$get[page]-1];;Primary;◀️;false]\n $addButton[NoReply~$authorID;$math[$get[page]+1]/$get[amount];Secondary;;true]\n $addButton[anime~next~$authorID~$math[$get[page]+1];;Primary;▶️;$if[$get[amount]==2;true;false]]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n ]\n $case[2;\n $addActionRow\n $addButton[anime~favorite~$authorID~$get[page]~$env[result;data;$get[page];mal_id];;Secondary;⭐;false]\n $addButton[anime~previous~$authorID~$math[$get[page]-1];;Primary;◀️;false]\n $addButton[NoReply~$authorID;$math[$get[page]+1]/$get[amount];Secondary;;true]\n $addButton[anime~next~$authorID~$math[$get[page]+1];;Primary;▶️;$if[$get[amount]==3;true;false]]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n ]\n $case[3;\n $addActionRow\n $addButton[anime~favorite~$authorID~$get[page]~$env[result;data;$get[page];mal_id];;Secondary;⭐;false]\n $addButton[anime~previous~$authorID~$math[$get[page]-1];;Primary;◀️;false]\n $addButton[NoReply~$authorID;$math[$get[page]+1]/$get[amount];Secondary;;true]\n $addButton[anime~next~$authorID~$math[$get[page]+1];;Primary;▶️;$if[$get[amount]==4;true;false]]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n ]\n $case[4;\n $addActionRow\n $addButton[anime~favorite~$authorID~$get[page]~$env[result;data;$get[page];mal_id];;Success;⭐;false]\n $addButton[anime~previous~$authorID~$math[$get[page]-1];;Primary;◀️;false]\n $addButton[NoReply~$authorID;$math[$get[page]+1]/$get[amount];Secondary;;true]\n $addButton[anime~next~$authorID~1;;Primary;▶️;true]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n ]\n $case[default;\n $sendMessage[$getGlobalVar[botErrorChannel];\n $color[$getGlobalVar[colorError]]\n $title[Error in \"Normal Command\"]\n \n<@&1269723532162760816>\n $description[Error in `!anime`]\n $addField[Issue:;**author**: <@$get[author]> ~ ||$get[author]||\n**Command**: `!anime $message`;true]\n $try[\n $if[$guildID!=;\n $attachment[$memberPerms[$guildID;$clientID;,\n];result.actionscript;true]\n $addField[GuildInfo:;**Guild**: $guildName[$guildID] ~ ||$guildID||\n**Permissions**: `in file attached`;true]\n ]\n ]\n $ephemeral\n $color[$getGlobalVar[colorError]]\n $title[This is not supposed to happen!]\n $description[Something went wrong in my code, try again in a bit!]\n $footer[a log of this error has been send to my developers.]\n ]\n ]\n ]\n ]\n ]\n ]\n ", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/search/anime.js", - "unloadable": true - }, - { - "type": "interactionCreate", - "code": "\n $disableConsoleErrors\n $textSplit[$customID;~]\n $c[\n $splitText[0] == Custom ID Name\n $splitText[1] == function\n $splitText[2] == authorID\n $splitText[3] == number of page\n $splitText[4] == MalID if given\n ]\n\n\n $disableConsoleErrors\n $onlyIf[$splitText[0]==animeCharacter;]\n $onlyIf[$splitText[2]==$authorID;]\n\n $if[$splitText[1]==next;$let[page;$math[$splitText[3]+1]];$if[$splitText[1]==previous;$let[page;$math[$splitText[3]-1]];$let[page;0]]]\n $jsonLoad[result;$readFile[./files/anime/$getUserVar[uuid;$authorID;not-found].json]]\n $let[description;$cropText[$env[result;data;$get[page];about];0;250]]\n\n $interactionUpdate[\n $title[$env[result;data;$get[page];name] $replace[~ ($env[result;data;$get[page];name_kanji]);~ (null);;1];$env[result;data;$get[page];url]]\n $thumbnail[$env[result;data;$get[page];images;webp;image_url]]\n $if[$env[result;data;$get[page];about]!=null;$description[$get[description]$if[$endsWith[$get[description]; ]!=false;...; ...]];$description[No info available on this character.]]\n $color[$if[$guildID==;$getUserVar[color;$userID;#ff47ff];$getGuildVar[color;$guildID;#ff47ff]]]\n\n $addActionRow\n $addButton[NoUseCom;;Secondary;<:Spacer:1275843251349356675>;true]\n $addButton[animeCharacter~previous~$authorID~$get[page];;Primary;◀️;$if[$get[page]==0;true;false]]\n $addButton[NoReply~$authorID;$math[$get[page]+1]/$env[result;pagination;items;count];Secondary;;true]\n $addButton[animeCharacter~next~$authorID~$get[page];;Primary;▶️;$if[$get[page]<=$math[$env[result;pagination;items;count]-2];false;true]]\n $addButton[close~$authorID~anime;;Danger;✖️;false]\n $let[malID;$env[result;data;$get[page];mal_id]]\n $let[vaRequest;$httpRequest[https://api.jikan.moe/v4/characters/$get[malID]/voices;get]]\n $if[$httpResult[data;0;language]!=;\n $addField[Voice Actors:;- **$httpResult[data;0;language]:** [$httpResult[data;0;person;name]\\]($httpResult[data;0;person;url])$if[$httpResult[data;1;language]!=;\n- **$httpResult[data;1;language]:** [$httpResult[data;1;person;name]\\]($httpResult[data;1;person;url])]$if[$httpResult[data;2;language]!=;\n- **$httpResult[data;2;language]:** [$httpResult[data;2;person;name]\\]($httpResult[data;2;person;url])]$if[$httpResult[data;3;language]!=;\n- **$httpResult[data;3;language]:** [$httpResult[data;3;person;name]\\]($httpResult[data;3;person;url])]$if[$httpResult[data;4;language]!=;\n- **$httpResult[data;4;language]:** [$httpResult[data;4;person;name]\\]($httpResult[data;4;person;url])]$if[$httpResult[data;5;language]!=;\n- **$httpResult[data;5;language]:** [$httpResult[data;5;person;name]\\]($httpResult[data;5;person;url])]$if[$httpResult[data;6;language]!=;\n- **$httpResult[data;6;language]:** [$httpResult[data;6;person;name]\\]($httpResult[data;6;person;url])];true]\n ]\n $let[animeRequest;$httpRequest[https://api.jikan.moe/v4/characters/$get[malID]/anime;get]]\n $if[$get[animeRequest]==200;$author[From the anime: \"$httpResult[data;0;anime;title]\"]]\n\n ]\n\n\n ", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/search/anime.js", - "unloadable": true - }, - { - "type": "interactionCreate", - "code": "\n $textSplit[$customID;~]\n $c[\n $splitText[0] == Custom ID Name\n $splitText[1] == userID\n $splitText[2] == authorID\n ]\n\n $disableConsoleErrors\n\n $c[$logger[Info;$splitText[2] == $authorID]]\n $disableConsoleErrors\n\n $onlyIf[$splitText[0]==userInfo;]\n $onlyIf[$splitText[2]==$authorID;]\n\n $let[userAvatar;$userAvatar[$splitText[1]]]\n $if[$guildID==;\n $let[memberAvatar;$get[userAvatar]]\n ;\n $try[\n $let[memberAvatar;$memberAvatar[$guildID;$splitText[1]]]\n ;\n $let[memberAvatar;$get[userAvatar]]\n ]\n ]\n\n $interactionUpdate[\n $author[UserInfo: \"$username[$splitText[1]]\";$get[userAvatar]]\n $color[$getUserVar[color;$splitText[1]]]\n $thumbnail[$get[memberAvatar]]\n $addField[**User Info:**;<:Discord:1271543869233823774> **Username:** <@$splitText[1]> ~ `@$username[$splitText[1]]$if[$discriminator[$splitText[1]]!=0;#$discriminator[$splitText[1]]]`\n<:ID:1271543923600265278> **UserID:** `$splitText[1]`\n<:Date:1271543843157971014> **Created:** ~ \n<:Plus:1271544047579693148> **Badges:** $replace[$replace[$replace[$replace[$replace[$replace[$replace[$replace[$replace[$replace[$replace[$replace[$userBadges[$splitText[1];, ];ActiveDeveloper;$callFunction[emoji;active-developer];1];HypeSquadOnlineHouse1;$callFunction[emoji;hypesquad-bravery];1];HypeSquadOnlineHouse3;$callFunction[emoji;hypesquad-balance];1];VerifiedBot;$callFunction[emoji;verified-bot];1];HypeSquadOnlineHouse2;$callFunction[emoji;hypesquad-brilliance];1];Staff;$callFunction[emoji;discord-staff];1];Hypesquad;$callFunction[emoji;hypesquad-event];1];VerifiedDeveloper;$callFunction[emoji;verified-developer];1];PremiumEarlySupporter;$callFunction[emoji;discord-early-support];1];CertifiedModerator;$callFunction[emoji;discord-moderator];1];BugHunterLevel2;$callFunction[emoji;discord-bughunter-two];1];BugHunterLevel1;$callFunction[emoji;discord-bughunter-one];1]]\n\n $if[$try[$memberExists[$guildID;$splitText[1]];false]==true;\n $addField[**Member Info:**;<:Discord:1271543869233823774> **Nickname:** $try[$nickname[$guildID;$splitText[1]]]\n<:Boosters:1271543754376876052> **Booster:** $try[$if[$hasRoles[$guildID;$splitText[1];$guildBoostRoleID[$guildID]]==true;Is boosting.;Is not boosting.]]\n<:Clock:1271543787637833759> **Joined:** $try[ ~ ]]\n ]\n $addActionRow\n $addButton[userAvatar~$splitText[1]~$splitText[2];UserAvatar;Primary;;false]\n $addButton[memberAvatar~$splitText[1]~$splitText[2];MemberAvatar;Primary;;$if[$get[userAvatar]==$get[memberAvatar];true;false]]\n ]\n ", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/utility/userInfo.js", - "unloadable": true - } - ], - "paths": "dist/slash", - "amount": "22" - }, - "other": { - "list": [ - { - "name": "onEveryFirstOfMonth", - "type": "ready", - "description": "This command runs every first of the month.", - "module": "ClientSpecific", - "sourcecode": "https://github.com/LynnuxDev/Akira/blob/main/SRC/commands/Global-Interactions/loop/onEveryFirstOfMonth.js", - "documentation": "https://documentation.lynnux.xyz/commands/utility/dev/Not-Available", - "usage": "n/a", - "example": "n/a", - "version": "1.0", - "code": "\n $c[\n $loop[-1;\n $if[$week$day==00;]\n $wait[1d]\n ]\n ]\n ", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/Global-Interactions/loop/onEveryFirstOfMonth.js", - "unloadable": true - }, - { - "name": "onEveryFirstOfMonth", - "type": "ready", - "description": "This command runs every first of the month.", - "module": "ClientSpecific", - "sourcecode": "https://github.com/LynnuxDev/Akira/blob/main/SRC/commands/Global-Interactions/loop/onEveryFirstOfMonth.js", - "documentation": "https://documentation.lynnux.xyz/commands/utility/dev/Not-Available", - "usage": "n/a", - "example": "n/a", - "version": "1.0", - "code": "\n $c[\n $loop[-1;\n $if[$hour==03;]\n $wait[1h]\n ]\n ]\n ", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/Global-Interactions/loop/onEveryHour.js", - "unloadable": true - }, - { - "name": "onReady", - "type": "ready", - "description": "This command runs every time the bot becomes online.", - "module": "ClientSpecific", - "sourcecode": "https://github.com/LynnuxDev/Akira/blob/main/SRC/commands/Global-Interactions/triggers/onReady.js", - "documentation": "https://documentation.lynnux.xyz/commands/utility/dev/Not-Available", - "usage": "n/a", - "example": "n/a", - "version": "1.0", - "code": "\n $logger[Info;$username[$clientID] | Running with \"$commandCount\" commands]\n ", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/Global-Interactions/triggers/onReady.js", - "unloadable": true - }, - { - "type": "error", - "code": "\n $disableConsoleErrors\n $logger[Error;$error[]]\n ", - "path": "/home/lynnux/GitHub/Akira-Beta/dist/commands/Global-Interactions/triggers/onError.js", - "unloadable": true - } - ], - "amount": "4" - } -} \ No newline at end of file diff --git a/package.json b/package.json index 0c7ec6c..f214fe6 100755 --- a/package.json +++ b/package.json @@ -5,8 +5,8 @@ "main": "index.js", "scripts": { "build": "tsc", - "start": "NODE_ENV=production npm run build && node dist/index.js", - "dev": "NODE_ENV=development ts-node src/index.ts" + "start": "NODE_ENV=production npm run build && node -r tsconfig-paths/register dist/index.js", + "dev": "NODE_ENV=development ts-node -r tsconfig-paths/register src/index.ts" }, "author": "Lynnux", "license": "MIT", @@ -16,8 +16,10 @@ "@tryforge/forge.topgg": "github:tryforge/ForgeTopGG#dev", "@tryforge/forgescript": "github:tryforge/ForgeScript#dev", "@types/i18next": "^12.1.0", + "@types/js-yaml": "^4.0.9", "@types/node": "^22.5.0", "@types/ws": "^8.5.12", + "discord.js": "^14.16.3", "fs": "^0.0.1-security", "i18next": "^23.15.1", "i18next-fs-backend": "^2.3.2", @@ -26,6 +28,7 @@ "path": "^0.12.7", "sqlite3": "^5.1.7", "ts-node": "^10.9.2", + "tsconfig-paths": "^4.2.0", "typescript": "^5.5.4" }, "devDependencies": { diff --git a/src/commands/roleplay/negative/bite.ts b/src/commands/roleplay/negative/bite.ts index 4d8afb7..f9170f3 100755 --- a/src/commands/roleplay/negative/bite.ts +++ b/src/commands/roleplay/negative/bite.ts @@ -17,31 +17,37 @@ const commands: Command[] = [ $let[author;$getUserVar[uuid;$customEncrypt[encrypt;$authorID]]] $let[lang;$if[$getUserVar[language;$get[author]]!=;$getUserVar[language;$get[author]];$if[$guildID!=;$guildPreferredLocale;en-us]]] $let[userID;$findUser[$message[0];true]] - $let[user;$getUserVar[uuid;$get[userID];null]] + $let[user;$getUserVar[uuid;$customEncrypt[encrypt;$get[userID]]]] - $get[lang] $c[----------------------------------ONLY-IF---------------------------------] $onlyIf[$getUserVar[AgreedToTos;$get[author];false]==true;$callEmbed[agreeToTerms]] $onlyIf[$channelID==$getGuildVar[BotChannel;$guildID;$channelID];$getGlobalVar[BotChannelError]] - $onlyIf[$findUser[$message[1;true]!=$authorID];wrong usage of bite, bite a user.] + $onlyIf[$get[user]!=$get[author];$customError[723;bite]] - $onlyIf[$checkContains[$getUserVar[rp-commandblocked;$get[user]];*;bite]==false;$customError[722;bite]] - $onlyIf[$checkContains[$getUserVar[rp-blocked;$get[user]];$get[author]]!=true;$customError[722;bite]] + $onlyIf[$checkContains[$getVar[rp-commandblocked;$get[user]];*;bite]==false;$customError[722;bite]] + $onlyIf[$checkContains[$getVar[rp-blocked;$get[user]];$get[author]]!=true;$customError[722;bite]] $c[-----------------------------------MAIN-----------------------------------] $let[message;$replace[$replace[$message;$message[0] ;];$message[0];]] - $let[msg;$i18n[$get[lang];message.roleplay.negative.bite.description]] - $if[$getUserVar[bite-give;$get[author]]==;$setUserVar[bite-give;$get[author];0]] - $if[$getUserVar[bite-give;$get[author]]==;$if[$get[user]==null;$let[userAgree;false];$let[userAgree;true]$setUserVar[bite-give;$get[author];0]]] + $setVar[bite-give;$get[author];$sum[$getVar[bite-give;$get[author];0];1]] - $setVar[bite-give;$get[author];$sum[$getVar[bite-give;$get[author]];1]] - $if[$get[user]!=null;$setVar[bite-got;$get[user];$sum[$getVar[bite-got;$get[user]];1]]] + $if[$get[user]!=null; + $setVar[bite-gotten;$get[user];$sum[$getVar[bite-gotten;$get[user];0];1]] + ] $color[$getVar[color;default]] $image[$callFunction[roleplay;bite]] - $description[$replace[$replace[$get[msg];{{author}};**$nickname**;1];{{user}};**$username[$get[userID]]**;1]$if[$get[message]!=;\n"$get[message]"]] - $footer[$replace[$replace[$i18n[$get[lang];message.roleplay.negative.bite.$if[$getUserVar[bite-got;$get[author]]==1;footer.oneSingle;footer.one]];{{author}};$nickname;1];{{amount}};$getVar[bite-give;$get[author]];1] | $replace[$replace[$i18n[$get[lang];message.roleplay.negative.bite.$if[$getUserVar[bite-got;$get[user]]>=2;footer.two;footer.twoSingle]];{{amount}};$if[$get[userAgree]==true;$getVar[bite-got;$get[user]];0];1];{{user}};$nickname[$guildID;$get[userID]];1]] + $if[$get[userID]!=$authorID; + $let[msg;$i18n[$get[lang];message.roleplay.negative.bite.description]] + $description[$replace[$replace[$get[msg];{{author}};**$if[$guildID!=;$nickname;$username]**;1];{{user}};**$username[$get[userID]]**;1]$if[$get[message]!=;\n"$get[message]"]] + $footer[$replace[$replace[$i18n[$get[lang];message.roleplay.negative.bite.$if[$getVar[bite-gotten;$get[author]]==1;footer.oneSingle;footer.one]];{{author}};$if[$guildID!=;$nickname;$username];1];{{amount}};$getVar[bite-give;$get[author]];1] | $replace[$replace[$i18n[$get[lang];message.roleplay.negative.bite.footer.$if[$getVar[bite-gotten;$get[user];0]==1;two;twoSingle]];{{amount}};$getVar[bite-gotten;$get[user];0];-1];{{user}};$try[$nickname[$guildID;$get[userID]];$username[$get[userID]]];-1]] + ; + $let[msg;$i18n[$get[lang];message.roleplay.negative.bite.descriptionSingle]] + $description[$replace[$replace[$get[msg];{{author}};**$if[$guildID!=;$nickname;$username]**;1];{{user}};**$username[$get[userID]]**;1]$if[$get[message]!=;\n"$get[message]"]] + $footer[$replace[$replace[$i18n[$get[lang];message.roleplay.negative.bite.$if[$getVar[bite-gotten;$get[author]]==1;footer.oneSingle;footer.one]];{{author}};$if[$guildID!=;$nickname;$username];1];{{amount}};$getVar[bite-give;$get[author]];1]] + + ] ` } ] diff --git a/src/commands/roleplay/negative/cry.ts b/src/commands/roleplay/negative/cry.ts new file mode 100644 index 0000000..351353c --- /dev/null +++ b/src/commands/roleplay/negative/cry.ts @@ -0,0 +1,54 @@ +import { Command } from "@/types" + +const commands: Command[] = [ + { + name: "cry", + aliases: ["rp-cry"], + description: "Show how sad you are.", + type: "messageCreate", + module: "Roleplay", + version: "1.0.0", + sourcecode: "src/commands/Roleplay/negative/cry.ts", + documentation: "roleplay", + usage: "cry {user} {message}", + example: "cry @dark-lynn why did you do that.", + code: ` + $c[------------------------------------LET-----------------------------------] + $let[author;$getUserVar[uuid;$customEncrypt[encrypt;$authorID]]] + $let[lang;$if[$getUserVar[language;$get[author]]!=;$getUserVar[language;$get[author]];$if[$guildID!=;$guildPreferredLocale;en-us]]] + $let[userID;$findUser[$message[0];true]] + $let[user;$getUserVar[uuid;$customEncrypt[encrypt;$get[userID]]]] + + $c[----------------------------------ONLY-IF---------------------------------] + $onlyIf[$getUserVar[AgreedToTos;$get[author];false]==true;$callEmbed[agreeToTerms]] + $onlyIf[$channelID==$getGuildVar[BotChannel;$guildID;$channelID];$getGlobalVar[BotChannelError]] + + $onlyIf[$checkContains[$getVar[rp-commandblocked;$get[user]];*;cry]==false;$customError[722;cry]] + $onlyIf[$checkContains[$getVar[rp-blocked;$get[user]];$get[author]]!=true;$customError[722;cry]] + + $c[-----------------------------------MAIN-----------------------------------] + $let[message;$replace[$replace[$message;$message[0] ;];$message[0];]] + + $setVar[cry-give;$get[author];$sum[$getVar[cry-give;$get[author];0];1]] + + $if[$get[user]!=null; + $setVar[cry-gotten;$get[user];$sum[$getVar[cry-gotten;$get[user];0];1]] + ] + + $color[$getVar[color;default]] + $image[$callFunction[roleplay;cry]] + $if[$get[userID]!=$authorID; + $let[msg;$i18n[$get[lang];message.roleplay.negative.cry.description]] + $description[$replace[$replace[$get[msg];{{author}};**$if[$guildID!=;$nickname;$username]**;1];{{user}};**$username[$get[userID]]**;1]$if[$get[message]!=;\n"$get[message]"]] + $footer[$replace[$replace[$i18n[$get[lang];message.roleplay.negative.cry.$if[$getVar[cry-gotten;$get[author]]==1;footer.oneSingle;footer.one]];{{author}};$if[$guildID!=;$nickname;$username];1];{{amount}};$getVar[cry-give;$get[author]];1] | $replace[$replace[$i18n[$get[lang];message.roleplay.negative.cry.footer.$if[$getVar[cry-gotten;$get[user];0]==1;two;twoSingle]];{{amount}};$getVar[cry-gotten;$get[user];0];-1];{{user}};$try[$nickname[$guildID;$get[userID]];$username[$get[userID]]];-1]] + ; + $let[msg;$i18n[$get[lang];message.roleplay.negative.cry.descriptionSingle]] + $description[$replace[$replace[$get[msg];{{author}};**$if[$guildID!=;$nickname;$username]**;1];{{user}};**$username[$get[userID]]**;1]$if[$get[message]!=;\n"$get[message]"]] + $footer[$replace[$replace[$i18n[$get[lang];message.roleplay.negative.cry.$if[$getVar[cry-gotten;$get[author]]==1;footer.oneSingle;footer.one]];{{author}};$if[$guildID!=;$nickname;$username];1];{{amount}};$getVar[cry-give;$get[author]];1]] + + ] + ` + } +] + +export default commands; \ No newline at end of file diff --git a/src/commands/roleplay/negative/die.ts b/src/commands/roleplay/negative/die.ts new file mode 100644 index 0000000..2b58659 --- /dev/null +++ b/src/commands/roleplay/negative/die.ts @@ -0,0 +1,54 @@ +import { Command } from "@/types" + +const commands: Command[] = [ + { + name: "die", + aliases: ["rp-die"], + description: "Show how sad you are.", + type: "messageCreate", + module: "Roleplay", + version: "1.0.0", + sourcecode: "src/commands/Roleplay/negative/die.ts", + documentation: "roleplay", + usage: "die {user} {message}", + example: "die @dark-lynn Die Die Die.", + code: ` + $c[------------------------------------LET-----------------------------------] + $let[author;$getUserVar[uuid;$customEncrypt[encrypt;$authorID]]] + $let[lang;$if[$getUserVar[language;$get[author]]!=;$getUserVar[language;$get[author]];$if[$guildID!=;$guildPreferredLocale;en-us]]] + $let[userID;$findUser[$message[0];true]] + $let[user;$getUserVar[uuid;$customEncrypt[encrypt;$get[userID]]]] + + $c[----------------------------------ONLY-IF---------------------------------] + $onlyIf[$getUserVar[AgreedToTos;$get[author];false]==true;$callEmbed[agreeToTerms]] + $onlyIf[$channelID==$getGuildVar[BotChannel;$guildID;$channelID];$getGlobalVar[BotChannelError]] + + $onlyIf[$checkContains[$getVar[rp-commandblocked;$get[user]];*;die]==false;$customError[722;die]] + $onlyIf[$checkContains[$getVar[rp-blocked;$get[user]];$get[author]]!=true;$customError[722;die]] + + $c[-----------------------------------MAIN-----------------------------------] + $let[message;$replace[$replace[$message;$message[0] ;];$message[0];]] + + $setVar[die-give;$get[author];$sum[$getVar[die-give;$get[author];0];1]] + + $if[$get[user]!=null; + $setVar[die-gotten;$get[user];$sum[$getVar[die-gotten;$get[user];0];1]] + ] + + $color[$getVar[color;default]] + $image[$callFunction[roleplay;die]] + $if[$get[userID]!=$authorID; + $let[msg;$i18n[$get[lang];message.roleplay.negative.die.description]] + $description[$replace[$replace[$get[msg];{{author}};**$if[$guildID!=;$nickname;$username]**;1];{{user}};**$username[$get[userID]]**;1]$if[$get[message]!=;\n"$get[message]"]] + $footer[$replace[$replace[$i18n[$get[lang];message.roleplay.negative.die.$if[$getVar[die-gotten;$get[author]]==1;footer.oneSingle;footer.one]];{{author}};$if[$guildID!=;$nickname;$username];1];{{amount}};$getVar[die-give;$get[author]];1] | $replace[$replace[$i18n[$get[lang];message.roleplay.negative.die.footer.$if[$getVar[die-gotten;$get[user];0]==1;two;twoSingle]];{{amount}};$getVar[die-gotten;$get[user];0];-1];{{user}};$try[$nickname[$guildID;$get[userID]];$username[$get[userID]]];-1]] + ; + $let[msg;$i18n[$get[lang];message.roleplay.negative.die.descriptionSingle]] + $description[$replace[$replace[$get[msg];{{author}};**$if[$guildID!=;$nickname;$username]**;1];{{user}};**$username[$get[userID]]**;1]$if[$get[message]!=;\n"$get[message]"]] + $footer[$replace[$replace[$i18n[$get[lang];message.roleplay.negative.die.$if[$getVar[die-gotten;$get[author]]==1;footer.oneSingle;footer.one]];{{author}};$if[$guildID!=;$nickname;$username];1];{{amount}};$getVar[die-give;$get[author]];1]] + + ] + ` + } +] + +export default commands; \ No newline at end of file diff --git a/src/commands/roleplay/negative/hate.ts b/src/commands/roleplay/negative/hate.ts new file mode 100644 index 0000000..1f7cc8e --- /dev/null +++ b/src/commands/roleplay/negative/hate.ts @@ -0,0 +1,55 @@ +import { Command } from "@/types" + +const commands: Command[] = [ + { + name: "hate", + aliases: ["rp-hate"], + description: "Show how sad you are.", + type: "messageCreate", + module: "Roleplay", + version: "1.0.0", + sourcecode: "src/commands/Roleplay/negative/hate.ts", + documentation: "roleplay", + usage: "hate {message}", + example: "hate @dark-lynn I hate you for doing this.", + code: ` + $c[------------------------------------LET-----------------------------------] + $let[author;$getUserVar[uuid;$customEncrypt[encrypt;$authorID]]] + $let[lang;$if[$getUserVar[language;$get[author]]!=;$getUserVar[language;$get[author]];$if[$guildID!=;$guildPreferredLocale;en-us]]] + $let[userID;$findUser[$message[0];true]] + $let[user;$getUserVar[uuid;$customEncrypt[encrypt;$get[userID]]]] + + $c[----------------------------------ONLY-IF---------------------------------] + $onlyIf[$getUserVar[AgreedToTos;$get[author];false]==true;$callEmbed[agreeToTerms]] + $onlyIf[$channelID==$getGuildVar[BotChannel;$guildID;$channelID];$getGlobalVar[BotChannelError]] + $onlyIf[$get[user]!=$get[author];$customError[723;bite]] + + $onlyIf[$checkContains[$getVar[rp-commandblocked;$get[user]];*;hate]==false;$customError[722;hate]] + $onlyIf[$checkContains[$getVar[rp-blocked;$get[user]];$get[author]]!=true;$customError[722;hate]] + + $c[-----------------------------------MAIN-----------------------------------] + $let[message;$replace[$replace[$message;$message[0] ;];$message[0];]] + + $setVar[hate-give;$get[author];$sum[$getVar[hate-give;$get[author];0];1]] + + $if[$get[user]!=null; + $setVar[hate-gotten;$get[user];$sum[$getVar[hate-gotten;$get[user];0];1]] + ] + + $color[$getVar[color;default]] + $image[$callFunction[roleplay;hate]] + $if[$get[userID]!=$authorID; + $let[msg;$i18n[$get[lang];message.roleplay.negative.hate.description]] + $description[$replace[$replace[$get[msg];{{author}};**$if[$guildID!=;$nickname;$username]**;1];{{user}};**$username[$get[userID]]**;1]$if[$get[message]!=;\n"$get[message]"]] + $footer[$replace[$replace[$i18n[$get[lang];message.roleplay.negative.hate.$if[$getVar[hate-gotten;$get[author]]==1;footer.oneSingle;footer.one]];{{author}};$if[$guildID!=;$nickname;$username];1];{{amount}};$getVar[hate-give;$get[author]];1] | $replace[$replace[$i18n[$get[lang];message.roleplay.negative.hate.footer.$if[$getVar[hate-gotten;$get[user];0]==1;two;twoSingle]];{{amount}};$getVar[hate-gotten;$get[user];0];-1];{{user}};$try[$nickname[$guildID;$get[userID]];$username[$get[userID]]];-1]] + ; + $let[msg;$i18n[$get[lang];message.roleplay.negative.hate.descriptionSingle]] + $description[$replace[$replace[$get[msg];{{author}};**$if[$guildID!=;$nickname;$username]**;1];{{user}};**$username[$get[userID]]**;1]$if[$get[message]!=;\n"$get[message]"]] + $footer[$replace[$replace[$i18n[$get[lang];message.roleplay.negative.hate.$if[$getVar[hate-gotten;$get[author]]==1;footer.oneSingle;footer.one]];{{author}};$if[$guildID!=;$nickname;$username];1];{{amount}};$getVar[hate-give;$get[author]];1]] + + ] + ` + } +] + +export default commands; \ No newline at end of file diff --git a/src/commands/roleplay/negative/kill.ts b/src/commands/roleplay/negative/kill.ts new file mode 100644 index 0000000..dec8e9b --- /dev/null +++ b/src/commands/roleplay/negative/kill.ts @@ -0,0 +1,55 @@ +import { Command } from "@/types" + +const commands: Command[] = [ + { + name: "kill", + aliases: ["rp-kill"], + description: "Show how sad you are.", + type: "messageCreate", + module: "Roleplay", + version: "1.0.0", + sourcecode: "src/commands/Roleplay/negative/kill.ts", + documentation: "roleplay", + usage: "kill {message}", + example: "kill @dark-lynn Come here so i can kill you.", + code: ` + $c[------------------------------------LET-----------------------------------] + $let[author;$getUserVar[uuid;$customEncrypt[encrypt;$authorID]]] + $let[lang;$if[$getUserVar[language;$get[author]]!=;$getUserVar[language;$get[author]];$if[$guildID!=;$guildPreferredLocale;en-us]]] + $let[userID;$findUser[$message[0];true]] + $let[user;$getUserVar[uuid;$customEncrypt[encrypt;$get[userID]]]] + + $c[----------------------------------ONLY-IF---------------------------------] + $onlyIf[$getUserVar[AgreedToTos;$get[author];false]==true;$callEmbed[agreeToTerms]] + $onlyIf[$channelID==$getGuildVar[BotChannel;$guildID;$channelID];$getGlobalVar[BotChannelError]] + $onlyIf[$get[user]!=$get[author];$customError[723;bite]] + + $onlyIf[$checkContains[$getVar[rp-commandblocked;$get[user]];*;kill]==false;$customError[722;kill]] + $onlyIf[$checkContains[$getVar[rp-blocked;$get[user]];$get[author]]!=true;$customError[722;kill]] + + $c[-----------------------------------MAIN-----------------------------------] + $let[message;$replace[$replace[$message;$message[0] ;];$message[0];]] + + $setVar[kill-give;$get[author];$sum[$getVar[kill-give;$get[author];0];1]] + + $if[$get[user]!=null; + $setVar[kill-gotten;$get[user];$sum[$getVar[kill-gotten;$get[user];0];1]] + ] + + $color[$getVar[color;default]] + $image[$callFunction[roleplay;kill]] + $if[$get[userID]!=$authorID; + $let[msg;$i18n[$get[lang];message.roleplay.negative.kill.description]] + $description[$replace[$replace[$get[msg];{{author}};**$if[$guildID!=;$nickname;$username]**;1];{{user}};**$username[$get[userID]]**;1]$if[$get[message]!=;\n"$get[message]"]] + $footer[$replace[$replace[$i18n[$get[lang];message.roleplay.negative.kill.$if[$getVar[kill-gotten;$get[author]]==1;footer.oneSingle;footer.one]];{{author}};$if[$guildID!=;$nickname;$username];1];{{amount}};$getVar[kill-give;$get[author]];1] | $replace[$replace[$i18n[$get[lang];message.roleplay.negative.kill.footer.$if[$getVar[kill-gotten;$get[user];0]==1;two;twoSingle]];{{amount}};$getVar[kill-gotten;$get[user];0];-1];{{user}};$try[$nickname[$guildID;$get[userID]];$username[$get[userID]]];-1]] + ; + $let[msg;$i18n[$get[lang];message.roleplay.negative.kill.descriptionSingle]] + $description[$replace[$replace[$get[msg];{{author}};**$if[$guildID!=;$nickname;$username]**;1];{{user}};**$username[$get[userID]]**;1]$if[$get[message]!=;\n"$get[message]"]] + $footer[$replace[$replace[$i18n[$get[lang];message.roleplay.negative.kill.$if[$getVar[kill-gotten;$get[author]]==1;footer.oneSingle;footer.one]];{{author}};$if[$guildID!=;$nickname;$username];1];{{amount}};$getVar[kill-give;$get[author]];1]] + + ] + ` + } +] + +export default commands; \ No newline at end of file diff --git a/src/commands/roleplay/negative/sad.ts b/src/commands/roleplay/negative/sad.ts new file mode 100644 index 0000000..795298a --- /dev/null +++ b/src/commands/roleplay/negative/sad.ts @@ -0,0 +1,54 @@ +import { Command } from "@/types" + +const commands: Command[] = [ + { + name: "sad", + aliases: ["rp-sad"], + description: "Show how sad you are.", + type: "messageCreate", + module: "Roleplay", + version: "1.0.0", + sourcecode: "src/commands/Roleplay/negative/sad.ts", + documentation: "roleplay", + usage: "sad {user} {message}", + example: "sad @dark-lynn don't talk to me right now.", + code: ` + $c[------------------------------------LET-----------------------------------] + $let[author;$getUserVar[uuid;$customEncrypt[encrypt;$authorID]]] + $let[lang;$if[$getUserVar[language;$get[author]]!=;$getUserVar[language;$get[author]];$if[$guildID!=;$guildPreferredLocale;en-us]]] + $let[userID;$findUser[$message[0];true]] + $let[user;$getUserVar[uuid;$customEncrypt[encrypt;$get[userID]]]] + + $c[----------------------------------ONLY-IF---------------------------------] + $onlyIf[$getUserVar[AgreedToTos;$get[author];false]==true;$callEmbed[agreeToTerms]] + $onlyIf[$channelID==$getGuildVar[BotChannel;$guildID;$channelID];$getGlobalVar[BotChannelError]] + + $onlyIf[$checkContains[$getVar[rp-commandblocked;$get[user]];*;sad]==false;$customError[722;sad]] + $onlyIf[$checkContains[$getVar[rp-blocked;$get[user]];$get[author]]!=true;$customError[722;sad]] + + $c[-----------------------------------MAIN-----------------------------------] + $let[message;$replace[$replace[$message;$message[0] ;];$message[0];]] + + $setVar[sad-give;$get[author];$sum[$getVar[sad-give;$get[author];0];1]] + + $if[$get[user]!=null; + $setVar[sad-gotten;$get[user];$sum[$getVar[sad-gotten;$get[user];0];1]] + ] + + $color[$getVar[color;default]] + $image[$callFunction[roleplay;sad]] + $if[$get[userID]!=$authorID; + $let[msg;$i18n[$get[lang];message.roleplay.negative.sad.description]] + $description[$replace[$replace[$get[msg];{{author}};**$if[$guildID!=;$nickname;$username]**;1];{{user}};**$username[$get[userID]]**;1]$if[$get[message]!=;\n"$get[message]"]] + $footer[$replace[$replace[$i18n[$get[lang];message.roleplay.negative.sad.$if[$getVar[sad-gotten;$get[author]]==1;footer.oneSingle;footer.one]];{{author}};$if[$guildID!=;$nickname;$username];1];{{amount}};$getVar[sad-give;$get[author]];1] | $replace[$replace[$i18n[$get[lang];message.roleplay.negative.sad.footer.$if[$getVar[sad-gotten;$get[user];0]==1;two;twoSingle]];{{amount}};$getVar[sad-gotten;$get[user];0];-1];{{user}};$try[$nickname[$guildID;$get[userID]];$username[$get[userID]]];-1]] + ; + $let[msg;$i18n[$get[lang];message.roleplay.negative.sad.descriptionSingle]] + $description[$replace[$replace[$get[msg];{{author}};**$if[$guildID!=;$nickname;$username]**;1];{{user}};**$username[$get[userID]]**;1]$if[$get[message]!=;\n"$get[message]"]] + $footer[$replace[$replace[$i18n[$get[lang];message.roleplay.negative.sad.$if[$getVar[sad-gotten;$get[author]]==1;footer.oneSingle;footer.one]];{{author}};$if[$guildID!=;$nickname;$username];1];{{amount}};$getVar[sad-give;$get[author]];1]] + + ] + ` + } +] + +export default commands; \ No newline at end of file diff --git a/src/commands/roleplay/negative/shoot.ts b/src/commands/roleplay/negative/shoot.ts new file mode 100644 index 0000000..d4a1b90 --- /dev/null +++ b/src/commands/roleplay/negative/shoot.ts @@ -0,0 +1,55 @@ +import { Command } from "@/types" + +const commands: Command[] = [ + { + name: "shoot", + aliases: ["rp-shoot"], + description: "Show how sad you are.", + type: "messageCreate", + module: "Roleplay", + version: "1.0.0", + sourcecode: "src/commands/Roleplay/negative/shoot.ts", + documentation: "roleplay", + usage: "shoot {message}", + example: "shoot @dark-lynn HeadShot.", + code: ` + $c[------------------------------------LET-----------------------------------] + $let[author;$getUserVar[uuid;$customEncrypt[encrypt;$authorID]]] + $let[lang;$if[$getUserVar[language;$get[author]]!=;$getUserVar[language;$get[author]];$if[$guildID!=;$guildPreferredLocale;en-us]]] + $let[userID;$findUser[$message[0];true]] + $let[user;$getUserVar[uuid;$customEncrypt[encrypt;$get[userID]]]] + + $c[----------------------------------ONLY-IF---------------------------------] + $onlyIf[$getUserVar[AgreedToTos;$get[author];false]==true;$callEmbed[agreeToTerms]] + $onlyIf[$channelID==$getGuildVar[BotChannel;$guildID;$channelID];$getGlobalVar[BotChannelError]] + $onlyIf[$get[user]!=$get[author];$customError[723;bite]] + + $onlyIf[$checkContains[$getVar[rp-commandblocked;$get[user]];*;shoot]==false;$customError[722;shoot]] + $onlyIf[$checkContains[$getVar[rp-blocked;$get[user]];$get[author]]!=true;$customError[722;shoot]] + + $c[-----------------------------------MAIN-----------------------------------] + $let[message;$replace[$replace[$message;$message[0] ;];$message[0];]] + + $setVar[shoot-give;$get[author];$sum[$getVar[shoot-give;$get[author];0];1]] + + $if[$get[user]!=null; + $setVar[shoot-gotten;$get[user];$sum[$getVar[shoot-gotten;$get[user];0];1]] + ] + + $color[$getVar[color;default]] + $image[$callFunction[roleplay;shoot]] + $if[$get[userID]!=$authorID; + $let[msg;$i18n[$get[lang];message.roleplay.negative.shoot.description]] + $description[$replace[$replace[$get[msg];{{author}};**$if[$guildID!=;$nickname;$username]**;1];{{user}};**$username[$get[userID]]**;1]$if[$get[message]!=;\n"$get[message]"]] + $footer[$replace[$replace[$i18n[$get[lang];message.roleplay.negative.shoot.$if[$getVar[shoot-gotten;$get[author]]==1;footer.oneSingle;footer.one]];{{author}};$if[$guildID!=;$nickname;$username];1];{{amount}};$getVar[shoot-give;$get[author]];1] | $replace[$replace[$i18n[$get[lang];message.roleplay.negative.shoot.footer.$if[$getVar[shoot-gotten;$get[user];0]==1;two;twoSingle]];{{amount}};$getVar[shoot-gotten;$get[user];0];-1];{{user}};$try[$nickname[$guildID;$get[userID]];$username[$get[userID]]];-1]] + ; + $let[msg;$i18n[$get[lang];message.roleplay.negative.shoot.descriptionSingle]] + $description[$replace[$replace[$get[msg];{{author}};**$if[$guildID!=;$nickname;$username]**;1];{{user}};**$username[$get[userID]]**;1]$if[$get[message]!=;\n"$get[message]"]] + $footer[$replace[$replace[$i18n[$get[lang];message.roleplay.negative.shoot.$if[$getVar[shoot-gotten;$get[author]]==1;footer.oneSingle;footer.one]];{{author}};$if[$guildID!=;$nickname;$username];1];{{amount}};$getVar[shoot-give;$get[author]];1]] + + ] + ` + } +] + +export default commands; \ No newline at end of file diff --git a/src/commands/roleplay/negative/slap.ts b/src/commands/roleplay/negative/slap.ts new file mode 100644 index 0000000..c0781c3 --- /dev/null +++ b/src/commands/roleplay/negative/slap.ts @@ -0,0 +1,55 @@ +import { Command } from "@/types" + +const commands: Command[] = [ + { + name: "slap", + aliases: ["rp-slap"], + description: "Show how sad you are.", + type: "messageCreate", + module: "Roleplay", + version: "1.0.0", + sourcecode: "src/commands/Roleplay/negative/slap.ts", + documentation: "roleplay", + usage: "slap {message}", + example: "slap @dark-lynn there you go.", + code: ` + $c[------------------------------------LET-----------------------------------] + $let[author;$getUserVar[uuid;$customEncrypt[encrypt;$authorID]]] + $let[lang;$if[$getUserVar[language;$get[author]]!=;$getUserVar[language;$get[author]];$if[$guildID!=;$guildPreferredLocale;en-us]]] + $let[userID;$findUser[$message[0];true]] + $let[user;$getUserVar[uuid;$customEncrypt[encrypt;$get[userID]]]] + + $c[----------------------------------ONLY-IF---------------------------------] + $onlyIf[$getUserVar[AgreedToTos;$get[author];false]==true;$callEmbed[agreeToTerms]] + $onlyIf[$channelID==$getGuildVar[BotChannel;$guildID;$channelID];$getGlobalVar[BotChannelError]] + $onlyIf[$get[user]!=$get[author];$customError[723;bite]] + + $onlyIf[$checkContains[$getVar[rp-commandblocked;$get[user]];*;slap]==false;$customError[722;slap]] + $onlyIf[$checkContains[$getVar[rp-blocked;$get[user]];$get[author]]!=true;$customError[722;slap]] + + $c[-----------------------------------MAIN-----------------------------------] + $let[message;$replace[$replace[$message;$message[0] ;];$message[0];]] + + $setVar[slap-give;$get[author];$sum[$getVar[slap-give;$get[author];0];1]] + + $if[$get[user]!=null; + $setVar[slap-gotten;$get[user];$sum[$getVar[slap-gotten;$get[user];0];1]] + ] + + $color[$getVar[color;default]] + $image[$callFunction[roleplay;slap]] + $if[$get[userID]!=$authorID; + $let[msg;$i18n[$get[lang];message.roleplay.negative.slap.description]] + $description[$replace[$replace[$get[msg];{{author}};**$if[$guildID!=;$nickname;$username]**;1];{{user}};**$username[$get[userID]]**;1]$if[$get[message]!=;\n"$get[message]"]] + $footer[$replace[$replace[$i18n[$get[lang];message.roleplay.negative.slap.$if[$getVar[slap-gotten;$get[author]]==1;footer.oneSingle;footer.one]];{{author}};$if[$guildID!=;$nickname;$username];1];{{amount}};$getVar[slap-give;$get[author]];1] | $replace[$replace[$i18n[$get[lang];message.roleplay.negative.slap.footer.$if[$getVar[slap-gotten;$get[user];0]==1;two;twoSingle]];{{amount}};$getVar[slap-gotten;$get[user];0];-1];{{user}};$try[$nickname[$guildID;$get[userID]];$username[$get[userID]]];-1]] + ; + $let[msg;$i18n[$get[lang];message.roleplay.negative.slap.descriptionSingle]] + $description[$replace[$replace[$get[msg];{{author}};**$if[$guildID!=;$nickname;$username]**;1];{{user}};**$username[$get[userID]]**;1]$if[$get[message]!=;\n"$get[message]"]] + $footer[$replace[$replace[$i18n[$get[lang];message.roleplay.negative.slap.$if[$getVar[slap-gotten;$get[author]]==1;footer.oneSingle;footer.one]];{{author}};$if[$guildID!=;$nickname;$username];1];{{amount}};$getVar[slap-give;$get[author]];1]] + + ] + ` + } +] + +export default commands; \ No newline at end of file diff --git a/src/commands/roleplay/negative/stab.ts b/src/commands/roleplay/negative/stab.ts new file mode 100644 index 0000000..3200cd7 --- /dev/null +++ b/src/commands/roleplay/negative/stab.ts @@ -0,0 +1,55 @@ +import { Command } from "@/types" + +const commands: Command[] = [ + { + name: "stab", + aliases: ["rp-stab"], + description: "Show how sad you are.", + type: "messageCreate", + module: "Roleplay", + version: "1.0.0", + sourcecode: "src/commands/Roleplay/negative/stab.ts", + documentation: "roleplay", + usage: "stab {message}", + example: "stab @dark-lynn Is that blood.", + code: ` + $c[------------------------------------LET-----------------------------------] + $let[author;$getUserVar[uuid;$customEncrypt[encrypt;$authorID]]] + $let[lang;$if[$getUserVar[language;$get[author]]!=;$getUserVar[language;$get[author]];$if[$guildID!=;$guildPreferredLocale;en-us]]] + $let[userID;$findUser[$message[0];true]] + $let[user;$getUserVar[uuid;$customEncrypt[encrypt;$get[userID]]]] + + $c[----------------------------------ONLY-IF---------------------------------] + $onlyIf[$getUserVar[AgreedToTos;$get[author];false]==true;$callEmbed[agreeToTerms]] + $onlyIf[$channelID==$getGuildVar[BotChannel;$guildID;$channelID];$getGlobalVar[BotChannelError]] + $onlyIf[$get[user]!=$get[author];$customError[723;bite]] + + $onlyIf[$checkContains[$getVar[rp-commandblocked;$get[user]];*;stab]==false;$customError[722;stab]] + $onlyIf[$checkContains[$getVar[rp-blocked;$get[user]];$get[author]]!=true;$customError[722;stab]] + + $c[-----------------------------------MAIN-----------------------------------] + $let[message;$replace[$replace[$message;$message[0] ;];$message[0];]] + + $setVar[stab-give;$get[author];$sum[$getVar[stab-give;$get[author];0];1]] + + $if[$get[user]!=null; + $setVar[stab-gotten;$get[user];$sum[$getVar[stab-gotten;$get[user];0];1]] + ] + + $color[$getVar[color;default]] + $image[$callFunction[roleplay;stab]] + $if[$get[userID]!=$authorID; + $let[msg;$i18n[$get[lang];message.roleplay.negative.stab.description]] + $description[$replace[$replace[$get[msg];{{author}};**$if[$guildID!=;$nickname;$username]**;1];{{user}};**$username[$get[userID]]**;1]$if[$get[message]!=;\n"$get[message]"]] + $footer[$replace[$replace[$i18n[$get[lang];message.roleplay.negative.stab.$if[$getVar[stab-gotten;$get[author]]==1;footer.oneSingle;footer.one]];{{author}};$if[$guildID!=;$nickname;$username];1];{{amount}};$getVar[stab-give;$get[author]];1] | $replace[$replace[$i18n[$get[lang];message.roleplay.negative.stab.footer.$if[$getVar[stab-gotten;$get[user];0]==1;two;twoSingle]];{{amount}};$getVar[stab-gotten;$get[user];0];-1];{{user}};$try[$nickname[$guildID;$get[userID]];$username[$get[userID]]];-1]] + ; + $let[msg;$i18n[$get[lang];message.roleplay.negative.stab.descriptionSingle]] + $description[$replace[$replace[$get[msg];{{author}};**$if[$guildID!=;$nickname;$username]**;1];{{user}};**$username[$get[userID]]**;1]$if[$get[message]!=;\n"$get[message]"]] + $footer[$replace[$replace[$i18n[$get[lang];message.roleplay.negative.stab.$if[$getVar[stab-gotten;$get[author]]==1;footer.oneSingle;footer.one]];{{author}};$if[$guildID!=;$nickname;$username];1];{{amount}};$getVar[stab-give;$get[author]];1]] + + ] + ` + } +] + +export default commands; \ No newline at end of file diff --git a/src/commands/roleplay/negative/triggered.ts b/src/commands/roleplay/negative/triggered.ts new file mode 100644 index 0000000..4b816be --- /dev/null +++ b/src/commands/roleplay/negative/triggered.ts @@ -0,0 +1,54 @@ +import { Command } from "@/types" + +const commands: Command[] = [ + { + name: "triggered", + aliases: ["rp-triggered"], + description: "Show how sad you are.", + type: "messageCreate", + module: "Roleplay", + version: "1.0.0", + sourcecode: "src/commands/Roleplay/negative/triggered.ts", + documentation: "roleplay", + usage: "triggered {user} {message}", + example: "triggered @dark-lynn Noo NOO NOoo.", + code: ` + $c[------------------------------------LET-----------------------------------] + $let[author;$getUserVar[uuid;$customEncrypt[encrypt;$authorID]]] + $let[lang;$if[$getUserVar[language;$get[author]]!=;$getUserVar[language;$get[author]];$if[$guildID!=;$guildPreferredLocale;en-us]]] + $let[userID;$findUser[$message[0];true]] + $let[user;$getUserVar[uuid;$customEncrypt[encrypt;$get[userID]]]] + + $c[----------------------------------ONLY-IF---------------------------------] + $onlyIf[$getUserVar[AgreedToTos;$get[author];false]==true;$callEmbed[agreeToTerms]] + $onlyIf[$channelID==$getGuildVar[BotChannel;$guildID;$channelID];$getGlobalVar[BotChannelError]] + + $onlyIf[$checkContains[$getVar[rp-commandblocked;$get[user]];*;triggered]==false;$customError[722;triggered]] + $onlyIf[$checkContains[$getVar[rp-blocked;$get[user]];$get[author]]!=true;$customError[722;triggered]] + + $c[-----------------------------------MAIN-----------------------------------] + $let[message;$replace[$replace[$message;$message[0] ;];$message[0];]] + + $setVar[triggered-give;$get[author];$sum[$getVar[triggered-give;$get[author];0];1]] + + $if[$get[user]!=null; + $setVar[triggered-gotten;$get[user];$sum[$getVar[triggered-gotten;$get[user];0];1]] + ] + + $color[$getVar[color;default]] + $image[$callFunction[roleplay;triggered]] + $if[$get[userID]!=$authorID; + $let[msg;$i18n[$get[lang];message.roleplay.negative.triggered.description]] + $description[$replace[$replace[$get[msg];{{author}};**$if[$guildID!=;$nickname;$username]**;1];{{user}};**$username[$get[userID]]**;1]$if[$get[message]!=;\n"$get[message]"]] + $footer[$replace[$replace[$i18n[$get[lang];message.roleplay.negative.triggered.$if[$getVar[triggered-gotten;$get[author]]==1;footer.oneSingle;footer.one]];{{author}};$if[$guildID!=;$nickname;$username];1];{{amount}};$getVar[triggered-give;$get[author]];1] | $replace[$replace[$i18n[$get[lang];message.roleplay.negative.triggered.footer.$if[$getVar[triggered-gotten;$get[user];0]==1;two;twoSingle]];{{amount}};$getVar[triggered-gotten;$get[user];0];-1];{{user}};$try[$nickname[$guildID;$get[userID]];$username[$get[userID]]];-1]] + ; + $let[msg;$i18n[$get[lang];message.roleplay.negative.triggered.descriptionSingle]] + $description[$replace[$replace[$get[msg];{{author}};**$if[$guildID!=;$nickname;$username]**;1];{{user}};**$username[$get[userID]]**;1]$if[$get[message]!=;\n"$get[message]"]] + $footer[$replace[$replace[$i18n[$get[lang];message.roleplay.negative.triggered.$if[$getVar[triggered-gotten;$get[author]]==1;footer.oneSingle;footer.one]];{{author}};$if[$guildID!=;$nickname;$username];1];{{amount}};$getVar[triggered-give;$get[author]];1]] + + ] + ` + } +] + +export default commands; \ No newline at end of file diff --git a/src/commands/roleplay/neutral/sip.ts b/src/commands/roleplay/neutral/sip.ts new file mode 100644 index 0000000..4c54bc0 --- /dev/null +++ b/src/commands/roleplay/neutral/sip.ts @@ -0,0 +1,54 @@ +import { Command } from "@/types" + +const commands: Command[] = [ + { + name: "sip", + aliases: ["rp-sip", "drink", "rp-drink"], + description: "sip", + type: "messageCreate", + module: "Roleplay", + version: "1.0.0", + sourcecode: "src/commands/Roleplay/neutral/sip.ts", + documentation: "roleplay", + usage: "sip {user} {message}", + example: "sip @dark-lynn Yikes.", + code: ` + $c[------------------------------------LET-----------------------------------] + $let[author;$getUserVar[uuid;$customEncrypt[encrypt;$authorID]]] + $let[lang;$if[$getUserVar[language;$get[author]]!=;$getUserVar[language;$get[author]];$if[$guildID!=;$guildPreferredLocale;en-us]]] + $let[userID;$findUser[$message[0];true]] + $let[user;$getUserVar[uuid;$customEncrypt[encrypt;$get[userID]]]] + + $c[----------------------------------ONLY-IF---------------------------------] + $onlyIf[$getUserVar[AgreedToTos;$get[author];false]==true;$callEmbed[agreeToTerms]] + $onlyIf[$channelID==$getGuildVar[BotChannel;$guildID;$channelID];$getGlobalVar[BotChannelError]] + + $onlyIf[$checkContains[$getVar[rp-commandblocked;$get[user]];*;sip]==false;$customError[722;sip]] + $onlyIf[$checkContains[$getVar[rp-blocked;$get[user]];$get[author]]!=true;$customError[722;sip]] + + $c[-----------------------------------MAIN-----------------------------------] + $let[message;$replace[$replace[$message;$message[0] ;];$message[0];]] + + $setVar[sip-give;$get[author];$sum[$getVar[sip-give;$get[author];0];1]] + + $if[$get[user]!=null; + $setVar[sip-gotten;$get[user];$sum[$getVar[sip-gotten;$get[user];0];1]] + ] + + $color[$getVar[color;default]] + $image[$callFunction[roleplay;sip]] + $if[$get[userID]!=$authorID; + $let[msg;$i18n[$get[lang];message.roleplay.neutral.sip.description]] + $description[$replace[$replace[$get[msg];{{author}};**$nickname**;1];{{user}};**$username[$get[userID]]**;1]$if[$get[message]!=;\n"$get[message]"]] + $footer[$replace[$replace[$i18n[$get[lang];message.roleplay.neutral.sip.$if[$getVar[sip-gotten;$get[author]]==1;footer.oneSingle;footer.one]];{{author}};$nickname;1];{{amount}};$getVar[sip-give;$get[author]];1] | $replace[$replace[$i18n[$get[lang];message.roleplay.neutral.sip.footer.$if[$getVar[sip-gotten;$get[user];0]==1;two;twoSingle]];{{amount}};$getVar[sip-gotten;$get[user];0];-1];{{user}};$try[$nickname[$guildID;$get[userID]];$username];-1]] + ; + $let[msg;$i18n[$get[lang];message.roleplay.neutral.sip.descriptionSingle]] + $description[$replace[$replace[$get[msg];{{author}};**$nickname**;1];{{user}};**$username[$get[userID]]**;1]$if[$get[message]!=;\n"$get[message]"]] + $footer[$replace[$replace[$i18n[$get[lang];message.roleplay.neutral.sip.$if[$getVar[sip-gotten;$get[author]]==1;footer.oneSingle;footer.one]];{{author}};$nickname;1];{{amount}};$getVar[sip-give;$get[author]];1]] + + ] + ` + } +] + +export default commands; \ No newline at end of file diff --git a/src/functions/i18nRequest.ts b/src/functions/i18nRequest.ts index 3b7605d..1cdbc03 100755 --- a/src/functions/i18nRequest.ts +++ b/src/functions/i18nRequest.ts @@ -20,7 +20,7 @@ const functions: CustomFunction[] = [ ] $case[default; $c[Any language.] - $return[$djsEval[const path = require('path');const { loadYaml } = require(path.join(__dirname, '../../../../../../dist/i18n.js'));const successMessage = loadYaml("$get[lang]", '$env[string]');successMessage]] + $return[$djsEval[const path = require('path');const { loadYaml } = require('@dist/i18n.js');const successMessage = loadYaml("$get[lang]", '$env[string]');successMessage]] ] ] $return[$checkContains[$toLowerCase[$env[command]];blacklist;black-list;botchannel;bot-channel;default;default-channels;disable;disable-command;enable-command;enable;freechannel;free-channel;free;ignore;ignore-channel;listen;listen-channel;permission;permissions;perm;perms;white-list;whitelist;anime;animelookup;whattheanime;about;info;information;avatar;useravatar;cleardata;removedata;cmd;commandinfo;command-info;command;sos;help;help-me;what;howto;how-to;report;ifoundabug;ibrokesomething;settings;setting;setting;userinfo;user;whois]] diff --git a/src/handler/intents.ts b/src/handler/intents.ts index a9e6db9..ea52efc 100755 --- a/src/handler/intents.ts +++ b/src/handler/intents.ts @@ -1,25 +1,25 @@ import { GatewayIntentBits } from 'discord.js'; const intents: GatewayIntentBits[] = [ -//"AutoModerationConfiguration", // Intent for Automod Config -//"AutoModerationExecution", // Intent for Automod Execution +//GatewayIntentBits.AutoModerationConfiguration, // Intent for Automod Config +//GatewayIntentBits.AutoModerationExecution, // Intent for Automod Execution GatewayIntentBits.DirectMessages, // Intent for DM -//"DirectMessageReactions", // Intent for DM Reacts -//"DirectMessageTyping", // Intent for Typing in DM -//"GuildEmojisAndStickers", // Intent for Guild Emojis and Stickers +//GatewayIntentBits.DirectMessageReactions, // Intent for DM Reacts +//GatewayIntentBits.DirectMessageTyping, // Intent for Typing in DM +//GatewayIntentBits.GuildEmojisAndStickers, // Intent for Guild Emojis and Stickers GatewayIntentBits.Guilds, // Intent for Guilds GatewayIntentBits.GuildMembers, // Intent for Guild Members -//"GuildModeration", // Intent for GuildModeration -//"GuildEmojisAndStickers", // Intent for Guild Emojis and Stickers +//GatewayIntentBits.GuildModeration, // Intent for GuildModeration +//GatewayIntentBits.GuildEmojisAndStickers, // Intent for Guild Emojis and Stickers GatewayIntentBits.GuildIntegrations, // Intent for Guild Integrations (bots, etc.) -//"GuildWebhooks", // Intent for Guild Webhook -//"GuildInvites", // Intent for Guild Invites -//"GuildVoiceStates", // Intent for Guild Voice States +//GatewayIntentBits.GuildWebhooks, // Intent for Guild Webhook +//GatewayIntentBits.GuildInvites, // Intent for Guild Invites +//GatewayIntentBits.GuildVoiceStates, // Intent for Guild Voice States GatewayIntentBits.GuildMessages, // Intent for Guild Messages -//"GuildMessageReactions", // Intent for Guild Reactions -//"GuildMessageTyping", // Intent for Guild typing -//"GuildScheduledEvents", // Intent for Guild scheduled events +//GatewayIntentBits.GuildMessageReactions, // Intent for Guild Reactions +//GatewayIntentBits.GuildMessageTyping, // Intent for Guild typing +//GatewayIntentBits.GuildScheduledEvents, // Intent for Guild scheduled events GatewayIntentBits.MessageContent, // Intent for Message Content ]; diff --git a/src/i18n.ts b/src/i18n.ts index 62c0711..3a1af13 100755 --- a/src/i18n.ts +++ b/src/i18n.ts @@ -1,33 +1,54 @@ -// @ts-ignore -// @ts-nocheck +import fs from 'fs'; +import path from 'path'; +import yaml from 'js-yaml'; -const fs = require('fs'); -const path = require('path'); -const yaml = require('js-yaml'); +import { Translations } from './types'; -function loadYaml(lang, key) { +const BASE_PATH = '/media/lynnux/[E] Other/Codes/@Github/@LynnuxDev/AkiraLocalization'; + +/** + * Loads a YAML translation file and retrieves the value for a given key. + * @param lang - The language code (e.g., 'en', 'es'). + * @param key - The translation key in dot notation (e.g., 'greetings.hello'). + * @returns The translation value or an error message if the key or file is not found. + */ +export function loadYaml(lang: string, key: string): string { try { - const filePath = lang === 'en' - ? path.join(__dirname, '../../AkiraLocalization/bot/commands.yml') - : path.join(__dirname, `../../AkiraLocalization/bot/${lang}/commands.yml`); + const filePath = path.join( + BASE_PATH, + lang === 'en' + ? 'bot/commands.yml' + : `bot/${lang}/commands.yml` + ); + + if (!fs.existsSync(filePath)) { + return `Error: Translation file for language "${lang}" not found.`; + } const fileContents = fs.readFileSync(filePath, 'utf8'); - const translations = yaml.load(fileContents); + const translations: Translations = yaml.load(fileContents) as Translations; + + if (!translations) { + return `Error: Translation file for language "${lang}" is empty or invalid.`; + } const keys = key.split('.'); + let result: any = translations; - let result = translations; - for (let i = 0; i < keys.length; i++) { - result = result[keys[i]]; - if (result === undefined) { + for (const segment of keys) { + if (typeof result !== 'object' || result === null) { return `Error: Translation key "${key}" not found.`; } + result = result[segment]; } - return result; + return typeof result === 'string' + ? result + : `Error: Translation key "${key}" does not resolve to a string.`; } catch (err) { - return `Error: Unable to load translations for language "${lang}".`; + if (err instanceof Error) { + return `Error: Unable to load translations for language "${lang}". Details: ${err.message}`; + } + return `Error: An unknown error occurred while loading translations for language "${lang}".`; } } - -module.exports = { loadYaml }; diff --git a/src/index.ts b/src/index.ts index c184be8..4aae1f8 100755 --- a/src/index.ts +++ b/src/index.ts @@ -1,18 +1,28 @@ -import { ForgeDB } from "@tryforge/forge.db"; // https://github.com/tryforge/ForgeDB/tree/dev -import { ForgeClient } from "@tryforge/forgescript"; // https://github.com/tryforge/ForgeScript/tree/dev -import { ForgeTopGG } from "@tryforge/forge.topgg"; // https://github.com/tryforge/ForgeTopGG/tree/dev -import { ForgeAPI } from "@tryforge/forge.api"; // https://github.com/tryforge/ForgeAPI/tree/dev +import { ForgeDB } from "@tryforge/forge.db"; +import { ForgeClient } from "@tryforge/forgescript"; +import { ForgeTopGG } from "@tryforge/forge.topgg"; +import { ForgeAPI } from "@tryforge/forge.api"; import { join } from "path"; -import token from "./handler/token"; -import events from "./handler/events"; -import intents from "./handler/intents"; +import token from "./handler/token"; // Secure bot token +import events from "./handler/events"; // Event handlers +import intents from "./handler/intents"; // Discord API intents + +/////////////////////////////// +// [ Environment Config ] // +/////////////////////////////// const isDevelopment: boolean = process.env.NODE_ENV === 'development'; + +// Paths for dynamic module loading const commandsPath: string = isDevelopment ? "src/commands" : "dist/commands"; const slashCommandsPath: string = isDevelopment ? "src/slash" : "dist/slash"; const apiPath: string = isDevelopment ? "src/Api" : "dist/Api"; +/////////////////////////////// +// [ API Setup ] // +/////////////////////////////// + const api = new ForgeAPI({ port: 1069, logLevel: 1, @@ -22,52 +32,55 @@ const api = new ForgeAPI({ code: "ImAAuthCode", ip: "127.0.0.1" } -}) +}); + +/////////////////////////////// +// [ Database Setup ] // +/////////////////////////////// const database = new ForgeDB({ type: "mysql", host: "IP", port: 1069, - username: "akiradb", + username: "AkiraDB", password: "PASSWORD", - database: "akira" -}) + database: "Akira" +}); + +/////////////////////////////// +// [ Top.gg Setup ] // +/////////////////////////////// const top = new ForgeTopGG({ token: "TOP.GG TOKEN", auth: "TOP.GG AUTH", - events: [ - "error", - "posted", - "voted" - ], + events: ["error", "posted", "voted"], post: { - interval: 3_600_000 + interval: 3_600_000 // Post bot stats every hour } -}) +}); + +/////////////////////////////// +// [ Client Setup ] // +/////////////////////////////// const client = new ForgeClient({ - "events": events, - "intents": intents, - "useInviteSystem": false, - "prefixes": [ - "$if[$checkContains[$authorID;1004291040150298715;521676495316582400;705306248538488947]==true;!]", -/* "$toLowerCase[$getUserVar[prefix;$authorID]]", - "$toUpperCase[$getUserVar[prefix;$authorID]]", - "$if[$djsEval[!!ctx.message?.guild]==true;$toUpperCase[$getGuildVar[prefix]];$getGlobalVar[prefix]]", - "$if[$djsEval[!!ctx.message?.guild]==true;$toLowerCase[$getGuildVar[prefix]];$getGlobalVar[prefix]]", - "$if[$startsWith[$tolowercase[$messageContent];akira]==true;$messageContent;$log[$messageContent]no]", */ - "<@!$clientID>", - "<@$clientID>" + events, + intents, + useInviteSystem: false, + prefixes: [ + "$if[$checkContains[$authorID;1004291040150298715;521676495316582400;705306248538488947]==true;!]", // Dev prefix + "<@!$clientID>", // Mention prefix + "<@$clientID>" // Alternative mention prefix ], - "extensions": [ + extensions: [ new ForgeDB(), api ] -}) - +}); -client.functions.load(join(__dirname, "functions")) +// Load functions and commands +client.functions.load(join(__dirname, "functions")); client.commands.load(commandsPath); client.applicationCommands.load(slashCommandsPath); @@ -75,8 +88,11 @@ client.applicationCommands.load(slashCommandsPath); // [ Variables ] // /////////////////////////////// +// Global variables for the database + ForgeDB.variables({ prefix: "!", + uuid: "null", color: "#ff47ff", colorError: "#d50056", AgreedToTos: false, @@ -86,30 +102,33 @@ ForgeDB.variables({ language: "en-us", BotChannel: "$channelID", BotChannelStatus: "default", + voteReminder: false, + // [ Permission ] permsReply: "reply", + // [ Fun ] GolHasSeenRules: false, GolCorrectEasy: 0, GolCorrectNormal: 0, GolCorrectHard: 0, + // [ Economy ] currentFulltimeJob: "none", - // [ Errors ] + + // [ Embeds ] + AgreedToTosEmbedReply: "$interactionReply $color[#ff47ff] $title[Before we continue:] $footer[You have to agree with these terms before using akira.] $description[Before you proceed, please make sure to read and agree to our [Terms of Service\\](https://akira.lynnux.xyz/terms) and [Privacy Policy\\](https://akira.lynnux.xyz/policy).\n\nBy using the button below, you confirm that you have read and agree to abide by our terms and policies.\n\nIf you have any questions or concerns, feel free to contact our support team.] $addActionRow $addButton[AcceptTerms-$authorID;I have read and agree to abide by these terms and policies.;Success;;false]", AgreedToTosError: "$ephemeral $color[#ff47ff] $title[Before we continue:] $footer[You have to agree with these terms before using akira.] $description[Before you proceed, please make sure to read and agree to our [Terms of Service\\](https://akira.lynnux.xyz/terms) and [Privacy Policy\\](https://akira.lynnux.xyz/policy).\n\nBy using the button below, you confirm that you have read and agree to abide by our terms and policies.\n\nIf you have any questions or concerns, feel free to contact our support team.] $addActionRow $addButton[AcceptTerms-$authorID;I have read and agree to abide by these terms and policies.;Success;;false]", BotChannelError: "$try[$!addMessageReactions[$channelID;$messageID;<:Wrong:1176924307834814564>];$ephemeral $interactionReply[<:Wrong:1176924307834814564> This channel is ignored, please use this command in the bot specific channel (<#$getVar[BotChannel;$guildID]>)]]", BotChannelAlreadyFreedError: "$color[#d50056] $title[Something went wrong:] $description[<:Wrong:1176924307834814564> There doesn't seem to be a bot Channel.]", NotEnoughUsersFoundOrMentionedError: "$title[Something went wrong:] $description[<:Wrong:1176924307834814564> You need to mention someone to kick.]$color[#d50056]", BotChannelAlreadySetError: "$color[#d50056] $title[Something went wrong:] $description[<:Wrong:1176924307834814564> The channel <#$channelID> is already set as the bot channel already.]", - // NEW - voteReminder: false, - AgreedToTosEmbedReply: "$interactionReply $color[#ff47ff] $title[Before we continue:] $footer[You have to agree with these terms before using akira.] $description[Before you proceed, please make sure to read and agree to our [Terms of Service\\](https://akira.lynnux.xyz/terms) and [Privacy Policy\\](https://akira.lynnux.xyz/policy).\n\nBy using the button below, you confirm that you have read and agree to abide by our terms and policies.\n\nIf you have any questions or concerns, feel free to contact our support team.] $addActionRow $addButton[AcceptTerms-$authorID;I have read and agree to abide by these terms and policies.;Success;;false]", userIsBannedSlashError: "$ephemeral $color[#d50056 $title[You're banned!] $description[<:Error:1269706678039744574> One of my developers has banned you from using any of my commands,\nif you think this is a error, or want to apply for an unban please contact us by using `soon`.]]", // [ ADDED }) /////////////////////////////// // [ Client Login ] // /////////////////////////////// -// api.router.load(apiPath) +// api.router.load(apiPath) // will be used later client.login(`${token}`); diff --git a/src/types.ts b/src/types.ts index 844143c..8b49946 100755 --- a/src/types.ts +++ b/src/types.ts @@ -30,4 +30,8 @@ export interface customFunction { name: string; params?: string[]; code: string; +} + +export interface Translations { + [key: string]: any; } \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index bb13c77..5bf6172 100755 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,7 +15,8 @@ "forceConsistentCasingInFileNames": true, "baseUrl": ".", "paths": { - "@/*": ["src/*"] + "@/*": ["src/*"], + "@dist/*": ["dist/*"] } }, "include": ["src/**/*.ts"],