├── .github ├── ISSUE_TEMPLATE │ ├── bug-report.yml │ ├── config.yml │ ├── egg-request.yml │ └── install-bug-report.yml └── pull_request_template.md ├── .gitignore ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── bun ├── README.md ├── egg-bun.json └── egg-pterodactyl-bun.json ├── c# ├── README.md ├── egg-generic-c.json └── egg-pterodactyl-generic-c.json ├── dart ├── README.md ├── egg-dart-generic.json └── egg-pterodactyl-dart-generic.json ├── deno ├── README.md ├── egg-deno-generic.json └── egg-pterodactyl-deno-generic.json ├── elixir ├── README.md ├── egg-elixir.json └── egg-pterodactyl-elixir.json ├── golang ├── README.md ├── egg-golang-generic.json └── egg-pterodactyl-golang-generic.json ├── java ├── README.md ├── egg-generic-java.json └── egg-pterodactyl-generic-java.json ├── lua └── luvit │ ├── README.md │ ├── egg-luvit-generic.json │ └── egg-pterodactyl-luvit-generic.json ├── nodejs ├── README.md ├── egg-node-js-generic.json └── egg-pterodactyl-node-js-generic.json ├── nodemon ├── README.md ├── egg-nodemon.json └── egg-pterodactyl-nodemon.json ├── python ├── README.md ├── egg-pterodactyl-python-generic.json └── egg-python-generic.json └── rust ├── README.md ├── egg-pterodactyl-rust-generic.json └── egg-rust-generic.json /.github/ISSUE_TEMPLATE/bug-report.yml: -------------------------------------------------------------------------------- 1 | name: 🐛 Bug Report 2 | description: Report an Egg issue 3 | title: "[Bug]: " 4 | labels: ["bug", "not confirmed"] 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: | 9 | If you see any of the following, go to [Discord](https://discord.gg/pterodactyl) and report your error in a support channel. 10 | * `A fatal error was encountered while starting this server.` 11 | * `No server egg configuration could be located; aborting startup.` 12 | 13 | Make sure there are no existing bug reports by searching the [repository issues](https://github.com/parkervcp/eggs/issues?q=is%3Aopen+is%3Aissue+label%3ABug). 14 | - type: input 15 | id: panel-version 16 | attributes: 17 | label: Panel Version 18 | description: Version number of your Panel (latest is not a version) 19 | placeholder: 1.x.x 20 | validations: 21 | required: true 22 | - type: input 23 | id: wings-version 24 | attributes: 25 | label: Wings Version 26 | description: Version number of your Wings (latest is not a version) 27 | placeholder: 1.x.x 28 | validations: 29 | required: true 30 | - type: input 31 | id: service 32 | attributes: 33 | label: Service 34 | description: Service you are experiencing issues with 35 | placeholder: minecraft/factorio/etc 36 | validations: 37 | required: true 38 | - type: dropdown 39 | id: modified 40 | attributes: 41 | label: Modified 42 | description: Did you add or change things, this includes startup configs/install scripts/variables 43 | options: 44 | - Yes, I modified the egg (will provide details below) 45 | - No, I did not modify the egg 46 | validations: 47 | required: true 48 | - type: textarea 49 | id: expected-behavior 50 | attributes: 51 | label: Expected Behavior 52 | description: What did you expect to happen 53 | placeholder: Install the server, start it, play 54 | validations: 55 | required: true 56 | - type: textarea 57 | id: actual-behavior 58 | attributes: 59 | label: Actual Behavior 60 | description: What actually happened instead 61 | placeholder: Server crashed with error X 62 | validations: 63 | required: true 64 | - type: textarea 65 | id: reproduce-steps 66 | attributes: 67 | label: Steps To Reproduce 68 | description: Step by step what to do to cause the issue 69 | placeholder: | 70 | Step 1 Set version to latest 71 | Step 2 install 72 | Step 3 Receive error X or Y 73 | validations: 74 | required: true 75 | - type: input 76 | id: install-logs 77 | attributes: 78 | label: Install logs 79 | description: | 80 | Run the command below on the SSH terminal of your Wings machine and provide the link to logs. 81 | 82 | ``` 83 | tail -n 1000 $(ls -Alrt /var/log/pterodactyl/install/*.log | tail -1 | sed 's/ */ /g' | cut -s -d' ' -f9) | nc pteropaste.com 99 84 | ``` 85 | placeholder: | 86 | https://pteropaste.com/exampleLogs 87 | validations: 88 | required: true 89 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: ❓ Discord 4 | url: https://discord.gg/pterodactyl 5 | about: Please visit our Discord for support with configuration issues. 6 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/egg-request.yml: -------------------------------------------------------------------------------- 1 | name: 🥚 Egg Request 2 | description: Suggest a server to build an egg for 3 | title: "[Egg Request]: " 4 | labels: ["egg request"] 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: | 9 | Make sure there are no existing egg requests by searching the [repository issues](https://github.com/parkervcp/eggs/labels/egg%20request). Please understand how Pterodactyl works when you are requesting an egg. (ie. docker-compose doesn't work for a pterodactyl server) 10 | - type: dropdown 11 | id: expand 12 | attributes: 13 | label: Does this expand an already existing service 14 | options: 15 | - "Yes" 16 | - "No" 17 | validations: 18 | required: true 19 | - type: input 20 | id: game-link 21 | attributes: 22 | label: Link to a game or software 23 | placeholder: minecraft.net/factorio.com/etc 24 | validations: 25 | required: true 26 | - type: input 27 | id: download-link 28 | attributes: 29 | label: Links for the download 30 | description: This needs to be an official link and not one that is hosted on some forum page or a personal Github page. Docker image is not a viable option. 31 | validations: 32 | required: true 33 | validations: 34 | required: true 35 | - type: input 36 | id: instruction-link 37 | attributes: 38 | label: Links for the install docs 39 | description: Link to installation instructions or documentation covering required dependencies and configuration for the server creation. Docker image is not installation documentation! 40 | validations: 41 | required: true 42 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/install-bug-report.yml: -------------------------------------------------------------------------------- 1 | name: 🐛 Install Bug Report 2 | description: Report an Egg install issue 3 | title: "[Install Bug]: " 4 | labels: ["install bug", "not confirmed"] 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: | 9 | If you see any of the following, go to [Discord](https://discord.gg/pterodactyl) and report your error in a support channel. 10 | * `A fatal error was encountered while starting this server.` 11 | * `No server egg configuration could be located; aborting startup.` 12 | 13 | Make sure there are no existing bug reports by searching the the issues for [install bugs](https://github.com/parkervcp/eggs/labels/install%20bug). 14 | - type: input 15 | id: panel-version 16 | attributes: 17 | label: Panel Version 18 | description: Version number of your Panel (latest is not a version) 19 | placeholder: 1.x.x 20 | validations: 21 | required: true 22 | - type: input 23 | id: wings-version 24 | attributes: 25 | label: Wings Version 26 | description: Version number of your Wings (latest is not a version) 27 | placeholder: 1.x.x 28 | validations: 29 | required: true 30 | - type: input 31 | id: service 32 | attributes: 33 | label: Service 34 | description: Service you are experiencing issues with 35 | placeholder: minecraft/factorio/etc 36 | validations: 37 | required: true 38 | - type: dropdown 39 | id: modified 40 | attributes: 41 | label: Modified 42 | description: Did you add or change things, this includes startup configs/install scripts/variables 43 | options: 44 | - Yes, I modified the egg (will provide details below) 45 | - No, I did not modify the egg 46 | validations: 47 | required: true 48 | - type: textarea 49 | id: expected-behavior 50 | attributes: 51 | label: Expected Behavior 52 | description: What did you expect to happen 53 | placeholder: Install the server, start it, play 54 | validations: 55 | required: true 56 | - type: textarea 57 | id: actual-behavior 58 | attributes: 59 | label: Actual Behavior 60 | description: What actually happened instead 61 | placeholder: Server crashed with error X 62 | validations: 63 | required: true 64 | - type: textarea 65 | id: reproduce-steps 66 | attributes: 67 | label: Steps To Reproduce 68 | description: Step by step what to do to cause the issue 69 | placeholder: | 70 | Step 1 Set version to latest 71 | Step 2 install 72 | Step 3 Receive error X or Y 73 | validations: 74 | required: true 75 | - type: input 76 | id: install-logs 77 | attributes: 78 | label: Install logs 79 | description: | 80 | Run the command below on the SSH terminal of your Wings machine and provide the link to logs. 81 | 82 | ``` 83 | tail -n 1000 $(ls -Alrt /var/log/pterodactyl/install/*.log | tail -1 | sed 's/ */ /g' | cut -s -d' ' -f9) | nc pteropaste.com 99 84 | ``` 85 | placeholder: | 86 | https://pteropaste.com/exampleLogs 87 | validations: 88 | required: true 89 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | # Description 2 | 3 | 4 | 5 | ## Checklist for all submissions 6 | 7 | 8 | 9 | * [ ] Have you followed the guidelines in our [Contributing document](https://github.com/parkervcp/eggs/blob/master/CONTRIBUTING.md)? 10 | * [ ] Have you checked to ensure there aren't other open [Pull Requests](../pulls) for the same update/change? 11 | * [ ] Have you tested and reviewed your changes with confidence that everything works? 12 | * [ ] Did you branch your changes and PR from that branch and not from your master branch? 13 | * If not, why?: 14 | 15 | 16 | 17 | * [ ] You verify that the start command applied does not use a shell script 18 | * [ ] If some script is needed then it is part of a current yolk or a PR to add one 19 | * [ ] The egg was exported from the panel 20 | 21 | 22 | 23 | ## New egg Submissions 24 | 25 | 1. [ ] Does your submission pass tests (server is connectable)? 26 | 2. [ ] Does your egg use a custom docker image? 27 | * [ ] Have you tried to use a generic image? 28 | * [ ] Did you PR the necessary changes to make it work? 29 | 3. [ ] Have you added the egg to the main README.md and any other README files in subdirectories of the egg (e.g /game_eggs) according to the alphabetical order? 30 | 4. [ ] Have you added a unique README.md for the egg you are adding according to the alphabetical order? 31 | 5. [ ] You verify that the start command applied does not use a shell script 32 | * [ ] If some script is needed then it is part of a current yolk or a PR to add one 33 | 6. [ ] The egg was exported from the panel -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.DS_Store 2 | node_modules/ 3 | .vuepress/* 4 | .vscode 5 | .idea -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # How to contribute 2 | 3 | You can contribute by either creating a new pull request or testing [existing pull requests](https://github.com/parkervcp/eggs/pulls) and commenting on whether the egg works for you or not. Testing is very important and helpful! 4 | 5 | ## General rules for eggs 6 | 7 | 1. Don't be afraid to submit PR's to the egg repo. 8 | I don't bite. I will work with you on the egg and the required things to run it. Feel free to open a draft PR if you don't quite have the egg finished yet by yourself. 9 | 10 | 2. Keep it secure. 11 | No start scripts that a user can edit. 12 | If a start script is needed it should be part of a yolk. 13 | 14 | 3. Keep it simple. 15 | We don't need 8 miles of the install script. 16 | 17 | 4. Keep it small. 18 | Only use what is absolutely needed. The [yolks install images](https://github.com/parkervcp/yolks#installation-images) already contain the most basic packages that speeds up the installation process. 19 | 20 | 5. Use the stock images. 21 | If you need something in an image, open a PR in [my yolks repo](https://github.com/parkervcp/yolks) where it can be reviewed and built. Self-hosted or third-party images won't be accepted for security reasons. 22 | 23 | 6. Export eggs from the panel 24 | We ask that you use the panel to manage and export eggs. 25 | This keeps the egg format correctly 26 | 27 | ### Sources for working on a new egg 28 | 29 | Look at existing eggs to see how they work. In most cases, you can take the existing egg as your new template. There's a brief documentation on how to [create eggs](https://pterodactyl.io/community/config/eggs/creating_a_custom_egg.html) and [Docker images](https://pterodactyl.io/community/config/eggs/creating_a_custom_image.html). 30 | 31 | Use existing Docker images for your egg. You can find them in [Parkers Yolks fork](https://github.com/parkervcp/yolks) and [Pterodactyl Yolks](https://github.com/pterodactyl/yolks). 32 | 33 | We have a collection of [existing install script snippets](https://github.com/parkervcp/eggs/tree/master/scripts) that you can use. 34 | 35 | ## Step 1 36 | 37 | ### Be aware of the pterodactyl install process 38 | 39 | The Pterodactyl install process is fairly simple once you know it. 40 | 41 | ```md 42 | 1. Spin up install container 43 | Creates a new container using an install image that's run as root. 44 | Uses a volume mount on `/mnt/server` for the server files, which is the working directory during installation. 45 | The volume will be later mounted as `/home/container` for the server container. Any files outside of `/mnt/server` will be gone after installation. 46 | Install script can pull files or set up all that is needed to run the server, such as writing files, directories or compiling apps. 47 | It is regularly used to just download the files required. Such as server files and configs. 48 | 49 | 50 | 2. Stop and destroy install container 51 | 52 | 3. Start a new container with the server files in /home/container 53 | This is where the server is actually run. No root privileges. 54 | Any dependencies installed during the install process are gone. 55 | The container that is started should have everything you need. 56 | No packages can be installed. Any required dependencies must exist in the used Docker image. 57 | ``` 58 | 59 | ## Step 2 60 | 61 | ### Testing 62 | 63 | Make sure your install process is rock solid as eggs will be tested before they are merged. 64 | 65 | Suggestions and changes will be made at will. 66 | This is to maintain a clean repo that others can pull and be fully aware of what is being done. 67 | 68 | ## Step 3 69 | 70 | ### Make a branch and do your work in there 71 | 72 | I have been getting messy PR's due to people always PRing from their master branch. Please make a separate branch and PR from there. 73 | 74 | ## Step 4 75 | 76 | Open a new pull request and fill in the template. Make sure that the readme files have been updated to include the new egg. 77 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT 2 | 3 | Copyright (c) 2018 Michael Parker and Contributors 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Generic Language 2 | 3 | ### [C#](c%23) 4 | 5 | [C#](https://learn.microsoft.com/en-us/dotnet/csharp//) 6 | A generic C# language egg running with dotnet 7 | 8 | ### [Elixir](elixir) 9 | 10 | [elixir](https://elixir-lang.org/) 11 | A generic Elixir language egg 12 | 13 | ### [Dart](dart) 14 | 15 | [dart](https://dart.dev/) 16 | A generic Dart language egg 17 | 18 | ### [Deno](deno) 19 | 20 | [deno](https://deno.land/) 21 | A generic Deno language egg 22 | 23 | ### [Golang](golang) 24 | 25 | [golang](https://go.dev/) 26 | A generic Go language egg 27 | 28 | ### [Java](java) 29 | 30 | [java](https://www.java.com/en/) 31 | A generic Java (and Kotlin) language egg 32 | 33 | ### [Lua](lua) 34 | 35 | [lua](https://www.lua.org/) 36 | A generic Lua (Luvit) language egg 37 | 38 | ### [Node JS](nodejs) 39 | 40 | [nodejs](https://nodejs.org) 41 | A generic Node.JS egg 42 | 43 | ### [Bun](bun) 44 | 45 | [bun](https://bun.sh) 46 | A generic Bun egg 47 | 48 | ### [nodemon](nodemon) 49 | 50 | [nodemon](https://nodemon.io/) 51 | A nodemon JavaScript and TypeScript language egg for running and automatically restarting the node application when file changes in the directory are detected 52 | 53 | ### [Python](python) 54 | 55 | [python](https://www.python.org/) 56 | A generic Python language egg 57 | 58 | ### [Rust](rust) 59 | 60 | [rust](https://www.rust-lang.org/) 61 | A generic Rust language egg 62 | -------------------------------------------------------------------------------- /bun/README.md: -------------------------------------------------------------------------------- 1 | # Bun - JavaScript & TypeScript Generic 2 | 3 | ## From their [site](https://bun.sh/) 4 | 5 | This egg is designed to run any generic Bun application, allowing users to pull their own Bun source code from a Git repository. 6 | 7 | There is an option to allow a user to upload their own files to run a server. 8 | 9 | The startup configs and commands may need changing to actually function properly. 10 | 11 | ## Configuration 12 | 13 | The server will be stuck as `starting` until the egg Start Configuration is modified. You have to edit the text to match something your bot will print for Pterodactyl panel to detect it as running. 14 | ![image](https://user-images.githubusercontent.com/10975908/126516861-c5cb4630-9f25-405c-8199-97bf5ec15a7f.png) 15 | 16 | You can use arrays to have multiple different values when different bots are being used 17 | 18 | ```json 19 | { 20 | "done":[ 21 | "change this text 1", 22 | "change this text 2" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /bun/egg-bun.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", 3 | "meta": { 4 | "version": "PTDL_v2", 5 | "update_url": null 6 | }, 7 | "exported_at": "2024-06-02T14:43:54+00:00", 8 | "name": "Bun", 9 | "author": "mratox@protonmail.com", 10 | "uuid": "b62c6de5-7034-4853-970f-ed5b57c5083b", 11 | "description": "Bun is an incredibly fast JavaScript runtime, transpiler bundler, and npm package manager all-in-one.", 12 | "features": null, 13 | "docker_images": { 14 | "Bun Latest": "ghcr.io\/parkervcp\/yolks:bun_latest", 15 | "Bun Canary": "ghcr.io\/parkervcp\/yolks:bun_canary" 16 | }, 17 | "file_denylist": [], 18 | "startup": "if [[ -d .git ]] && [[ {{AUTO_UPDATE}} == \"1\" ]]; then git pull; fi; if [[ ! -z ${BUN_PACKAGES} ]]; then bun install ${BUN_PACKAGES}; fi; if [[ ! -z ${RMBUN_PACKAGES} ]]; then bun remove ${RMBUN_PACKAGES}; fi; if [ -f \/home\/container\/package.json ]; then bun install; fi; bun run {{MAIN_FILE}}", 19 | "config": { 20 | "files": "{}", 21 | "startup": "{\r\n \"done\": [\r\n \"change this text 1\",\r\n \"change this text 2\"\r\n ]\r\n}", 22 | "logs": "{}", 23 | "stop": "^^C" 24 | }, 25 | "scripts": { 26 | "installation": { 27 | "script": "#!\/bin\/bash\r\n# Bun App Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napt update\r\napt install -y git curl jq file unzip make gcc g++ python python-dev libtool\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nif [ \"${USER_UPLOAD}\" == \"true\" ] || [ \"${USER_UPLOAD}\" == \"1\" ]; then\r\n echo -e \"assuming user knows what they are doing have a good day.\"\r\n exit 0\r\nfi\r\n\r\n## add git ending if it's not on the address\r\nif [[ ${GIT_ADDRESS} != *.git ]]; then\r\n GIT_ADDRESS=${GIT_ADDRESS}.git\r\nfi\r\n\r\nif [ -z \"${USERNAME}\" ] && [ -z \"${ACCESS_TOKEN}\" ]; then\r\n echo -e \"using anon api call\"\r\nelse\r\n GIT_ADDRESS=\"https:\/\/${USERNAME}:${ACCESS_TOKEN}@$(echo -e ${GIT_ADDRESS} | cut -d\/ -f3-)\"\r\nfi\r\n\r\n## pull git js bot repo\r\nif [ \"$(ls -A \/mnt\/server)\" ]; then\r\n echo -e \"\/mnt\/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \".git directory exists\"\r\n if [ -f .git\/config ]; then\r\n echo -e \"loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"files found with no git config\"\r\n echo -e \"closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"${GIT_ADDRESS}\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"\/mnt\/server is empty.\\ncloning files into repo\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"cloning default branch\"\r\n git clone ${GIT_ADDRESS} .\r\n else\r\n echo -e \"cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} ${GIT_ADDRESS} .\r\n fi\r\nfi\r\n\r\n\r\necho \"Installing bun packages\"\r\nif [[ ! -z ${BUN_PACKAGES} ]]; then\r\n bun install ${BUN_PACKAGES}\r\nfi\r\n\r\nif [ -f \/mnt\/server\/package.json ]; then\r\n bun install --production\r\nfi\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", 28 | "container": "ghcr.io\/parkervcp\/installers:debian", 29 | "entrypoint": "bash" 30 | } 31 | }, 32 | "variables": [ 33 | { 34 | "name": "Git Repository Address", 35 | "description": "The Git repository address to clone .", 36 | "env_variable": "GIT_ADDRESS", 37 | "default_value": "", 38 | "user_viewable": true, 39 | "user_editable": true, 40 | "rules": "nullable|string", 41 | "sort": null, 42 | "field_type": "text" 43 | }, 44 | { 45 | "name": "User Uploaded Files", 46 | "description": "Skip all the install stuff if you are letting a user upload files.\r\n0 = false (default)\r\n1 = true", 47 | "env_variable": "USER_UPLOAD", 48 | "default_value": "0", 49 | "user_viewable": true, 50 | "user_editable": true, 51 | "rules": "required|boolean", 52 | "sort": null, 53 | "field_type": "text" 54 | }, 55 | { 56 | "name": "Auto Update", 57 | "description": "Pull the latest files on startup when using a Git Repository.\r\n0 = false (default)\r\n1 = true", 58 | "env_variable": "AUTO_UPDATE", 59 | "default_value": "0", 60 | "user_viewable": true, 61 | "user_editable": true, 62 | "rules": "required|boolean", 63 | "sort": null, 64 | "field_type": "text" 65 | }, 66 | { 67 | "name": "Main file", 68 | "description": "The main file passed to the bun run command", 69 | "env_variable": "MAIN_FILE", 70 | "default_value": "index.js", 71 | "user_viewable": true, 72 | "user_editable": true, 73 | "rules": "required|string", 74 | "sort": null, 75 | "field_type": "text" 76 | }, 77 | { 78 | "name": "Additional Bun Packages", 79 | "description": "Install additional bun packages.\r\nUse spaces to separate", 80 | "env_variable": "BUN_PACKAGES", 81 | "default_value": "", 82 | "user_viewable": true, 83 | "user_editable": true, 84 | "rules": "nullable|string", 85 | "sort": null, 86 | "field_type": "text" 87 | }, 88 | { 89 | "name": "Uninstall Bun Packages", 90 | "description": "Uninstall bun packages.\r\nUse spaces to separate", 91 | "env_variable": "RMBUN_PACKAGES", 92 | "default_value": "", 93 | "user_viewable": true, 94 | "user_editable": true, 95 | "rules": "nullable|string", 96 | "sort": null, 97 | "field_type": "text" 98 | }, 99 | { 100 | "name": "Git Branch", 101 | "description": "The Git branch to install.", 102 | "env_variable": "BRANCH", 103 | "default_value": "", 104 | "user_viewable": true, 105 | "user_editable": true, 106 | "rules": "nullable|string", 107 | "sort": null, 108 | "field_type": "text" 109 | }, 110 | { 111 | "name": "Git Username", 112 | "description": "Git username for authentication.", 113 | "env_variable": "USERNAME", 114 | "default_value": "", 115 | "user_viewable": true, 116 | "user_editable": true, 117 | "rules": "nullable|string", 118 | "sort": null, 119 | "field_type": "text" 120 | }, 121 | { 122 | "name": "Git Access Token", 123 | "description": "Git access token for authentication.", 124 | "env_variable": "ACCESS_TOKEN", 125 | "default_value": "", 126 | "user_viewable": true, 127 | "user_editable": true, 128 | "rules": "nullable|string", 129 | "sort": null, 130 | "field_type": "text" 131 | } 132 | ] 133 | } -------------------------------------------------------------------------------- /bun/egg-pterodactyl-bun.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", 3 | "meta": { 4 | "update_url": null, 5 | "version": "PTDL_v2" 6 | }, 7 | "exported_at": "2024-06-02T14:43:54+00:00", 8 | "name": "Bun", 9 | "author": "mratox@protonmail.com", 10 | "description": "Bun is an incredibly fast JavaScript runtime, transpiler bundler, and npm package manager all-in-one.", 11 | "features": null, 12 | "docker_images": { 13 | "Bun Canary": "ghcr.io/parkervcp/yolks:bun_canary", 14 | "Bun Latest": "ghcr.io/parkervcp/yolks:bun_latest" 15 | }, 16 | "file_denylist": [], 17 | "startup": "if [[ -d .git ]] \u0026\u0026 [[ {{AUTO_UPDATE}} == \"1\" ]]; then git pull; fi; if [[ ! -z ${BUN_PACKAGES} ]]; then bun install ${BUN_PACKAGES}; fi; if [[ ! -z ${RMBUN_PACKAGES} ]]; then bun remove ${RMBUN_PACKAGES}; fi; if [ -f /home/container/package.json ]; then bun install; fi; bun run {{MAIN_FILE}}", 18 | "config": { 19 | "files": "{}", 20 | "logs": "{}", 21 | "startup": "{\r\n \"done\": [\r\n \"change this text 1\",\r\n \"change this text 2\"\r\n ]\r\n}", 22 | "stop": "^^C" 23 | }, 24 | "scripts": { 25 | "installation": { 26 | "container": "ghcr.io/parkervcp/installers:debian", 27 | "entrypoint": "bash", 28 | "script": "#!/bin/bash\r\n# Bun App Installation Script\r\n#\r\n# Server Files: /mnt/server\r\napt update\r\napt install -y git curl jq file unzip make gcc g++ python python-dev libtool\r\nmkdir -p /mnt/server\r\ncd /mnt/server\r\n\r\n\r\nmkdir -p /mnt/server\r\ncd /mnt/server\r\n\r\nif [ \"${USER_UPLOAD}\" == \"true\" ] || [ \"${USER_UPLOAD}\" == \"1\" ]; then\r\n echo -e \"assuming user knows what they are doing have a good day.\"\r\n exit 0\r\nfi\r\n\r\n## add git ending if it's not on the address\r\nif [[ ${GIT_ADDRESS} != *.git ]]; then\r\n GIT_ADDRESS=${GIT_ADDRESS}.git\r\nfi\r\n\r\nif [ -z \"${USERNAME}\" ] \u0026\u0026 [ -z \"${ACCESS_TOKEN}\" ]; then\r\n echo -e \"using anon api call\"\r\nelse\r\n GIT_ADDRESS=\"https://${USERNAME}:${ACCESS_TOKEN}@$(echo -e ${GIT_ADDRESS} | cut -d/ -f3-)\"\r\nfi\r\n\r\n## pull git js bot repo\r\nif [ \"$(ls -A /mnt/server)\" ]; then\r\n echo -e \"/mnt/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \".git directory exists\"\r\n if [ -f .git/config ]; then\r\n echo -e \"loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"files found with no git config\"\r\n echo -e \"closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"${GIT_ADDRESS}\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"/mnt/server is empty.\\ncloning files into repo\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"cloning default branch\"\r\n git clone ${GIT_ADDRESS} .\r\n else\r\n echo -e \"cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} ${GIT_ADDRESS} .\r\n fi\r\nfi\r\n\r\n\r\necho \"Installing bun packages\"\r\nif [[ ! -z ${BUN_PACKAGES} ]]; then\r\n bun install ${BUN_PACKAGES}\r\nfi\r\n\r\nif [ -f /mnt/server/package.json ]; then\r\n bun install --production\r\nfi\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"" 29 | } 30 | }, 31 | "variables": [ 32 | { 33 | "name": "Git Repository Address", 34 | "description": "The Git repository address to clone .", 35 | "env_variable": "GIT_ADDRESS", 36 | "default_value": "", 37 | "user_viewable": true, 38 | "user_editable": true, 39 | "rules": "nullable|string", 40 | "field_type": "text" 41 | }, 42 | { 43 | "name": "User Uploaded Files", 44 | "description": "Skip all the install stuff if you are letting a user upload files.\r\n0 = false (default)\r\n1 = true", 45 | "env_variable": "USER_UPLOAD", 46 | "default_value": "0", 47 | "user_viewable": true, 48 | "user_editable": true, 49 | "rules": "required|boolean", 50 | "field_type": "text" 51 | }, 52 | { 53 | "name": "Auto Update", 54 | "description": "Pull the latest files on startup when using a Git Repository.\r\n0 = false (default)\r\n1 = true", 55 | "env_variable": "AUTO_UPDATE", 56 | "default_value": "0", 57 | "user_viewable": true, 58 | "user_editable": true, 59 | "rules": "required|boolean", 60 | "field_type": "text" 61 | }, 62 | { 63 | "name": "Main file", 64 | "description": "The main file passed to the bun run command", 65 | "env_variable": "MAIN_FILE", 66 | "default_value": "index.js", 67 | "user_viewable": true, 68 | "user_editable": true, 69 | "rules": "required|string", 70 | "field_type": "text" 71 | }, 72 | { 73 | "name": "Additional Bun Packages", 74 | "description": "Install additional bun packages.\r\nUse spaces to separate", 75 | "env_variable": "BUN_PACKAGES", 76 | "default_value": "", 77 | "user_viewable": true, 78 | "user_editable": true, 79 | "rules": "nullable|string", 80 | "field_type": "text" 81 | }, 82 | { 83 | "name": "Uninstall Bun Packages", 84 | "description": "Uninstall bun packages.\r\nUse spaces to separate", 85 | "env_variable": "RMBUN_PACKAGES", 86 | "default_value": "", 87 | "user_viewable": true, 88 | "user_editable": true, 89 | "rules": "nullable|string", 90 | "field_type": "text" 91 | }, 92 | { 93 | "name": "Git Branch", 94 | "description": "The Git branch to install.", 95 | "env_variable": "BRANCH", 96 | "default_value": "", 97 | "user_viewable": true, 98 | "user_editable": true, 99 | "rules": "nullable|string", 100 | "field_type": "text" 101 | }, 102 | { 103 | "name": "Git Username", 104 | "description": "Git username for authentication.", 105 | "env_variable": "USERNAME", 106 | "default_value": "", 107 | "user_viewable": true, 108 | "user_editable": true, 109 | "rules": "nullable|string", 110 | "field_type": "text" 111 | }, 112 | { 113 | "name": "Git Access Token", 114 | "description": "Git access token for authentication.", 115 | "env_variable": "ACCESS_TOKEN", 116 | "default_value": "", 117 | "user_viewable": true, 118 | "user_editable": true, 119 | "rules": "nullable|string", 120 | "field_type": "text" 121 | } 122 | ] 123 | } -------------------------------------------------------------------------------- /c#/README.md: -------------------------------------------------------------------------------- 1 | # C# Language Generic 2 | 3 | This egg is designed to run any generic C# application, allowing users to pull their own C# source code from a Github repository. 4 | 5 | There is an option to allow a user to upload their own files to run a bot. 6 | 7 | The startup configs and commands may need changing to actually function properly. 8 | 9 | ## Configuration 10 | 11 | The server will be stuck as `starting` until the egg Start Configuration is modified. You have to edit the text to match something your bot will print for Pterodactyl panel to detect it as running. 12 | ![image](https://user-images.githubusercontent.com/10975908/126516861-c5cb4630-9f25-405c-8199-97bf5ec15a7f.png) 13 | 14 | You can use arrays to have multiple different values when different bots are being used 15 | 16 | ```json 17 | { 18 | "done":[ 19 | "change this text 1", 20 | "change this text 2" 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /c#/egg-generic-c.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", 3 | "meta": { 4 | "version": "PTDL_v2", 5 | "update_url": null 6 | }, 7 | "exported_at": "2024-06-02T14:43:56+00:00", 8 | "name": "Generic C#", 9 | "author": "josdekurk@gmail.com", 10 | "uuid": "8f85d773-3664-4194-acd1-ae55b0f54fe8", 11 | "description": "A generic C# (dotnet) egg that runs your C# project.", 12 | "features": null, 13 | "docker_images": { 14 | "Dotnet_8": "ghcr.io\/parkervcp\/yolks:dotnet_8", 15 | "Dotnet_7": "ghcr.io\/parkervcp\/yolks:dotnet_7", 16 | "Dotnet_6": "ghcr.io\/parkervcp\/yolks:dotnet_6", 17 | "Dotnet_5": "ghcr.io\/parkervcp\/yolks:dotnet_5", 18 | "Dotnet_3.1": "ghcr.io\/parkervcp\/yolks:dotnet_3.1", 19 | "Dotnet_2.1": "ghcr.io\/parkervcp\/yolks:dotnet_2.1" 20 | }, 21 | "file_denylist": [], 22 | "startup": "if [[ -d .git ]] && [[ {{AUTO_UPDATE}} == \"1\" ]]; then git pull; fi; cd {{PROJECT_DIR}}; dotnet restore; dotnet run --project {{PROJECT_FILE}}", 23 | "config": { 24 | "files": "{}", 25 | "startup": "{\r\n \"done\": [\r\n \"change this text 1\",\r\n \"change this text 2\"\r\n ]\r\n}", 26 | "logs": "{}", 27 | "stop": "^^C" 28 | }, 29 | "scripts": { 30 | "installation": { 31 | "script": "#!\/bin\/bash\r\n\r\napt update\r\napt install -y git curl jq file unzip\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nif [ \"${USER_UPLOAD}\" == \"true\" ] || [ \"${USER_UPLOAD}\" == \"1\" ]; then\r\n echo -e \"assuming user knows what they are doing have a good day.\"\r\n exit 0\r\nfi\r\n\r\n## add git ending if it's not on the address\r\nif [[ ${GIT_ADDRESS} != *.git ]]; then\r\n GIT_ADDRESS=${GIT_ADDRESS}.git\r\nfi\r\n\r\nif [ -z \"${USERNAME}\" ] && [ -z \"${ACCESS_TOKEN}\" ]; then\r\n echo -e \"using anon api call\"\r\nelse\r\n GIT_ADDRESS=\"https:\/\/${USERNAME}:${ACCESS_TOKEN}@$(echo -e ${GIT_ADDRESS} | cut -d\/ -f3-)\"\r\nfi\r\n\r\n## pull git js bot repo\r\nif [ \"$(ls -A \/mnt\/server)\" ]; then\r\n echo -e \"\/mnt\/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \".git directory exists\"\r\n if [ -f .git\/config ]; then\r\n echo -e \"loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"files found with no git config\"\r\n echo -e \"closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"${GIT_ADDRESS}\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"\/mnt\/server is empty.\\ncloning files into repo\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"cloning default branch\"\r\n git clone ${GIT_ADDRESS} .\r\n else\r\n echo -e \"cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} ${GIT_ADDRESS} .\r\n fi\r\nfi\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", 32 | "container": "ghcr.io\/parkervcp\/installers:debian", 33 | "entrypoint": "bash" 34 | } 35 | }, 36 | "variables": [ 37 | { 38 | "name": "Git Repo Address", 39 | "description": "GitHub Repo to clone\r\n\r\nI.E. https:\/\/github.com\/parkervcp\/repo_name", 40 | "env_variable": "GIT_ADDRESS", 41 | "default_value": "", 42 | "user_viewable": true, 43 | "user_editable": true, 44 | "rules": "nullable|string", 45 | "sort": null, 46 | "field_type": "text" 47 | }, 48 | { 49 | "name": "Install Branch", 50 | "description": "The branch to install.", 51 | "env_variable": "BRANCH", 52 | "default_value": "", 53 | "user_viewable": true, 54 | "user_editable": true, 55 | "rules": "nullable|string", 56 | "sort": null, 57 | "field_type": "text" 58 | }, 59 | { 60 | "name": "User Uploaded Files", 61 | "description": "Skip all the install stuff if you are letting a user upload files.\r\n\r\n0 = false (default)\r\n1 = true", 62 | "env_variable": "USER_UPLOAD", 63 | "default_value": "0", 64 | "user_viewable": true, 65 | "user_editable": true, 66 | "rules": "required|boolean", 67 | "sort": null, 68 | "field_type": "text" 69 | }, 70 | { 71 | "name": "Auto Update", 72 | "description": "Pull the latest files on startup when using a GitHub repo.", 73 | "env_variable": "AUTO_UPDATE", 74 | "default_value": "0", 75 | "user_viewable": true, 76 | "user_editable": true, 77 | "rules": "required|boolean", 78 | "sort": null, 79 | "field_type": "text" 80 | }, 81 | { 82 | "name": "Git Username", 83 | "description": "Username to auth with git.", 84 | "env_variable": "USERNAME", 85 | "default_value": "", 86 | "user_viewable": true, 87 | "user_editable": true, 88 | "rules": "nullable|string", 89 | "sort": null, 90 | "field_type": "text" 91 | }, 92 | { 93 | "name": "Git Access Token", 94 | "description": "Password to use with git.\r\n\r\nIt's best practice to use a Personal Access Token.\r\nhttps:\/\/github.com\/settings\/tokens\r\nhttps:\/\/gitlab.com\/-\/profile\/personal_access_tokens", 95 | "env_variable": "ACCESS_TOKEN", 96 | "default_value": "", 97 | "user_viewable": true, 98 | "user_editable": true, 99 | "rules": "nullable|string", 100 | "sort": null, 101 | "field_type": "text" 102 | }, 103 | { 104 | "name": "project file", 105 | "description": "The main project file if multiple are present", 106 | "env_variable": "PROJECT_FILE", 107 | "default_value": "", 108 | "user_viewable": true, 109 | "user_editable": true, 110 | "rules": "nullable|string", 111 | "sort": null, 112 | "field_type": "text" 113 | }, 114 | { 115 | "name": "Project location", 116 | "description": "The location of where the .csproj file is located. not the .sln file!", 117 | "env_variable": "PROJECT_DIR", 118 | "default_value": "\/home\/container", 119 | "user_viewable": true, 120 | "user_editable": true, 121 | "rules": "required|string|", 122 | "sort": null, 123 | "field_type": "text" 124 | } 125 | ] 126 | } -------------------------------------------------------------------------------- /c#/egg-pterodactyl-generic-c.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", 3 | "meta": { 4 | "update_url": null, 5 | "version": "PTDL_v2" 6 | }, 7 | "exported_at": "2024-06-02T14:43:56+00:00", 8 | "name": "Generic C#", 9 | "author": "josdekurk@gmail.com", 10 | "description": "A generic C# (dotnet) egg that runs your C# project.", 11 | "features": null, 12 | "docker_images": { 13 | "Dotnet_2.1": "ghcr.io/parkervcp/yolks:dotnet_2.1", 14 | "Dotnet_3.1": "ghcr.io/parkervcp/yolks:dotnet_3.1", 15 | "Dotnet_5": "ghcr.io/parkervcp/yolks:dotnet_5", 16 | "Dotnet_6": "ghcr.io/parkervcp/yolks:dotnet_6", 17 | "Dotnet_7": "ghcr.io/parkervcp/yolks:dotnet_7", 18 | "Dotnet_8": "ghcr.io/parkervcp/yolks:dotnet_8" 19 | }, 20 | "file_denylist": [], 21 | "startup": "if [[ -d .git ]] \u0026\u0026 [[ {{AUTO_UPDATE}} == \"1\" ]]; then git pull; fi; cd {{PROJECT_DIR}}; dotnet restore; dotnet run --project {{PROJECT_FILE}}", 22 | "config": { 23 | "files": "{}", 24 | "logs": "{}", 25 | "startup": "{\r\n \"done\": [\r\n \"change this text 1\",\r\n \"change this text 2\"\r\n ]\r\n}", 26 | "stop": "^^C" 27 | }, 28 | "scripts": { 29 | "installation": { 30 | "container": "ghcr.io/parkervcp/installers:debian", 31 | "entrypoint": "bash", 32 | "script": "#!/bin/bash\r\n\r\napt update\r\napt install -y git curl jq file unzip\r\n\r\nmkdir -p /mnt/server\r\ncd /mnt/server\r\n\r\nif [ \"${USER_UPLOAD}\" == \"true\" ] || [ \"${USER_UPLOAD}\" == \"1\" ]; then\r\n echo -e \"assuming user knows what they are doing have a good day.\"\r\n exit 0\r\nfi\r\n\r\n## add git ending if it's not on the address\r\nif [[ ${GIT_ADDRESS} != *.git ]]; then\r\n GIT_ADDRESS=${GIT_ADDRESS}.git\r\nfi\r\n\r\nif [ -z \"${USERNAME}\" ] \u0026\u0026 [ -z \"${ACCESS_TOKEN}\" ]; then\r\n echo -e \"using anon api call\"\r\nelse\r\n GIT_ADDRESS=\"https://${USERNAME}:${ACCESS_TOKEN}@$(echo -e ${GIT_ADDRESS} | cut -d/ -f3-)\"\r\nfi\r\n\r\n## pull git js bot repo\r\nif [ \"$(ls -A /mnt/server)\" ]; then\r\n echo -e \"/mnt/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \".git directory exists\"\r\n if [ -f .git/config ]; then\r\n echo -e \"loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"files found with no git config\"\r\n echo -e \"closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"${GIT_ADDRESS}\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"/mnt/server is empty.\\ncloning files into repo\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"cloning default branch\"\r\n git clone ${GIT_ADDRESS} .\r\n else\r\n echo -e \"cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} ${GIT_ADDRESS} .\r\n fi\r\nfi\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"" 33 | } 34 | }, 35 | "variables": [ 36 | { 37 | "name": "Git Repo Address", 38 | "description": "GitHub Repo to clone\r\n\r\nI.E. https://github.com/parkervcp/repo_name", 39 | "env_variable": "GIT_ADDRESS", 40 | "default_value": "", 41 | "user_viewable": true, 42 | "user_editable": true, 43 | "rules": "nullable|string", 44 | "field_type": "text" 45 | }, 46 | { 47 | "name": "Install Branch", 48 | "description": "The branch to install.", 49 | "env_variable": "BRANCH", 50 | "default_value": "", 51 | "user_viewable": true, 52 | "user_editable": true, 53 | "rules": "nullable|string", 54 | "field_type": "text" 55 | }, 56 | { 57 | "name": "User Uploaded Files", 58 | "description": "Skip all the install stuff if you are letting a user upload files.\r\n\r\n0 = false (default)\r\n1 = true", 59 | "env_variable": "USER_UPLOAD", 60 | "default_value": "0", 61 | "user_viewable": true, 62 | "user_editable": true, 63 | "rules": "required|boolean", 64 | "field_type": "text" 65 | }, 66 | { 67 | "name": "Auto Update", 68 | "description": "Pull the latest files on startup when using a GitHub repo.", 69 | "env_variable": "AUTO_UPDATE", 70 | "default_value": "0", 71 | "user_viewable": true, 72 | "user_editable": true, 73 | "rules": "required|boolean", 74 | "field_type": "text" 75 | }, 76 | { 77 | "name": "Git Username", 78 | "description": "Username to auth with git.", 79 | "env_variable": "USERNAME", 80 | "default_value": "", 81 | "user_viewable": true, 82 | "user_editable": true, 83 | "rules": "nullable|string", 84 | "field_type": "text" 85 | }, 86 | { 87 | "name": "Git Access Token", 88 | "description": "Password to use with git.\r\n\r\nIt's best practice to use a Personal Access Token.\r\nhttps://github.com/settings/tokens\r\nhttps://gitlab.com/-/profile/personal_access_tokens", 89 | "env_variable": "ACCESS_TOKEN", 90 | "default_value": "", 91 | "user_viewable": true, 92 | "user_editable": true, 93 | "rules": "nullable|string", 94 | "field_type": "text" 95 | }, 96 | { 97 | "name": "project file", 98 | "description": "The main project file if multiple are present", 99 | "env_variable": "PROJECT_FILE", 100 | "default_value": "", 101 | "user_viewable": true, 102 | "user_editable": true, 103 | "rules": "nullable|string", 104 | "field_type": "text" 105 | }, 106 | { 107 | "name": "Project location", 108 | "description": "The location of where the .csproj file is located. not the .sln file!", 109 | "env_variable": "PROJECT_DIR", 110 | "default_value": "/home/container", 111 | "user_viewable": true, 112 | "user_editable": true, 113 | "rules": "required|string|", 114 | "field_type": "text" 115 | } 116 | ] 117 | } -------------------------------------------------------------------------------- /dart/README.md: -------------------------------------------------------------------------------- 1 | # Dart Language Generic 2 | 3 | This egg is designed to run any generic Dart application, allowing users to pull their own Dart source code from a Github repository. 4 | 5 | There is an option to allow a user to upload their own files to run a bot. 6 | 7 | The startup configs and commands may need changing to actually function properly. 8 | 9 | ## Configuration 10 | 11 | The server will be stuck as `starting` until the egg Start Configuration is modified. You have to edit the text to match something your bot will print for Pterodactyl panel to detect it as running. 12 | ![image](https://user-images.githubusercontent.com/10975908/126516861-c5cb4630-9f25-405c-8199-97bf5ec15a7f.png) 13 | 14 | You can use arrays to have multiple different values when different bots are being used 15 | 16 | ```json 17 | { 18 | "done":[ 19 | "change this text 1", 20 | "change this text 2" 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /dart/egg-dart-generic.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", 3 | "meta": { 4 | "version": "PTDL_v2", 5 | "update_url": null 6 | }, 7 | "exported_at": "2024-06-02T14:43:54+00:00", 8 | "name": "dart generic", 9 | "author": "alden@knoban.com", 10 | "uuid": "8328a5cc-4250-4d30-a66a-faf83393605e", 11 | "description": "A generic dart CLI egg.\r\n\r\nThis will clone a dart CLI application. it defaults to master if no branch is specified.\r\n\r\nInstalls the pubspec.yaml packages on run. If you set user_upload then I assume you know what you are doing.", 12 | "features": null, 13 | "docker_images": { 14 | "Dart_stable": "ghcr.io\/parkervcp\/yolks:dart_stable", 15 | "Dart_3.3": "ghcr.io\/parkervcp\/yolks:dart_3.3", 16 | "Dart_2.19": "ghcr.io\/parkervcp\/yolks:dart_2.19", 17 | "Dart_2.18": "ghcr.io\/parkervcp\/yolks:dart_2.18", 18 | "Dart_2.17": "ghcr.io\/parkervcp\/yolks:dart_2.17" 19 | }, 20 | "file_denylist": [], 21 | "startup": "if [[ -d .git ]] && [[ {{AUTO_RESET}} == \"1\" ]]; then git reset --hard; fi; if [[ -d .git ]] && [[ {{AUTO_UPDATE}} == \"1\" ]]; then git pull; fi; dart pub get; dart run", 22 | "config": { 23 | "files": "{}", 24 | "startup": "{\r\n \"done\": \"change this part\"\r\n}", 25 | "logs": "{}", 26 | "stop": "^^C" 27 | }, 28 | "scripts": { 29 | "installation": { 30 | "script": "#!\/bin\/bash\r\n# Dart CLI Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napt update\r\napt install -y git curl file unzip\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nif [ \"${USER_UPLOAD}\" == \"true\" ] || [ \"${USER_UPLOAD}\" == \"1\" ]; then\r\n echo -e \"assuming user knows what they are doing have a good day.\"\r\n exit 0\r\nfi\r\n\r\n## add git ending if it's not on the address\r\nif [[ ${GIT_ADDRESS} != *.git ]]; then\r\n GIT_ADDRESS=${GIT_ADDRESS}.git\r\nfi\r\n\r\nif [ -z \"${USERNAME}\" ] && [ -z \"${ACCESS_TOKEN}\" ]; then\r\n echo -e \"using anon api call\"\r\nelse\r\n GIT_ADDRESS=\"https:\/\/${USERNAME}:${ACCESS_TOKEN}@$(echo -e ${GIT_ADDRESS} | cut -d\/ -f3-)\"\r\nfi\r\n\r\n## pull git dart cli repo\r\nif [ \"$(ls -A \/mnt\/server)\" ]; then\r\n echo -e \"\/mnt\/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \".git directory exists\"\r\n if [ -f .git\/config ]; then\r\n echo -e \"loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"files found with no git config\"\r\n echo -e \"closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"${GIT_ADDRESS}\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"\/mnt\/server is empty.\\ncloning files into repo\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"cloning default branch\"\r\n git clone ${GIT_ADDRESS} .\r\n else\r\n echo -e \"cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} ${GIT_ADDRESS} .\r\n fi\r\n\r\nfi\r\n\r\necho -e \"install complete\"\r\nexit 0", 31 | "container": "ghcr.io\/parkervcp\/installers:debian", 32 | "entrypoint": "bash" 33 | } 34 | }, 35 | "variables": [ 36 | { 37 | "name": "Git Repo Address", 38 | "description": "GitHub Repo to clone\r\n\r\nI.E. https:\/\/github.com\/kNoAPP\/repo_name", 39 | "env_variable": "GIT_ADDRESS", 40 | "default_value": "", 41 | "user_viewable": true, 42 | "user_editable": true, 43 | "rules": "nullable|string", 44 | "sort": null, 45 | "field_type": "text" 46 | }, 47 | { 48 | "name": "Install Branch", 49 | "description": "The branch of the bot to install.", 50 | "env_variable": "BRANCH", 51 | "default_value": "", 52 | "user_viewable": true, 53 | "user_editable": true, 54 | "rules": "nullable|string", 55 | "sort": null, 56 | "field_type": "text" 57 | }, 58 | { 59 | "name": "User Uploaded Files", 60 | "description": "Skip all the install stuff if you are letting a user upload files.\r\n\r\n0 = false (default)\r\n1 = true", 61 | "env_variable": "USER_UPLOAD", 62 | "default_value": "0", 63 | "user_viewable": true, 64 | "user_editable": true, 65 | "rules": "required|boolean", 66 | "sort": null, 67 | "field_type": "text" 68 | }, 69 | { 70 | "name": "Auto Update", 71 | "description": "Pull the latest files on startup when using a GitHub repo.", 72 | "env_variable": "AUTO_UPDATE", 73 | "default_value": "0", 74 | "user_viewable": true, 75 | "user_editable": true, 76 | "rules": "required|boolean", 77 | "sort": null, 78 | "field_type": "text" 79 | }, 80 | { 81 | "name": "Auto Reset", 82 | "description": "Hard reset the latest files on startup when using a GitHub repo.", 83 | "env_variable": "AUTO_RESET", 84 | "default_value": "0", 85 | "user_viewable": true, 86 | "user_editable": true, 87 | "rules": "required|boolean", 88 | "sort": null, 89 | "field_type": "text" 90 | }, 91 | { 92 | "name": "Git Username", 93 | "description": "Username to auth with git.", 94 | "env_variable": "USERNAME", 95 | "default_value": "", 96 | "user_viewable": true, 97 | "user_editable": true, 98 | "rules": "nullable|string", 99 | "sort": null, 100 | "field_type": "text" 101 | }, 102 | { 103 | "name": "Git Access Token", 104 | "description": "Password to use with git.\r\n\r\nIt's best practice to use a Personal Access Token.\r\nhttps:\/\/github.com\/settings\/tokens\r\nhttps:\/\/gitlab.com\/-\/profile\/personal_access_tokens", 105 | "env_variable": "ACCESS_TOKEN", 106 | "default_value": "", 107 | "user_viewable": true, 108 | "user_editable": true, 109 | "rules": "nullable|string", 110 | "sort": null, 111 | "field_type": "text" 112 | } 113 | ] 114 | } -------------------------------------------------------------------------------- /dart/egg-pterodactyl-dart-generic.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", 3 | "meta": { 4 | "update_url": null, 5 | "version": "PTDL_v2" 6 | }, 7 | "exported_at": "2024-06-02T14:43:54+00:00", 8 | "name": "dart generic", 9 | "author": "alden@knoban.com", 10 | "description": "A generic dart CLI egg.\r\n\r\nThis will clone a dart CLI application. it defaults to master if no branch is specified.\r\n\r\nInstalls the pubspec.yaml packages on run. If you set user_upload then I assume you know what you are doing.", 11 | "features": null, 12 | "docker_images": { 13 | "Dart_2.17": "ghcr.io/parkervcp/yolks:dart_2.17", 14 | "Dart_2.18": "ghcr.io/parkervcp/yolks:dart_2.18", 15 | "Dart_2.19": "ghcr.io/parkervcp/yolks:dart_2.19", 16 | "Dart_3.3": "ghcr.io/parkervcp/yolks:dart_3.3", 17 | "Dart_stable": "ghcr.io/parkervcp/yolks:dart_stable" 18 | }, 19 | "file_denylist": [], 20 | "startup": "if [[ -d .git ]] \u0026\u0026 [[ {{AUTO_RESET}} == \"1\" ]]; then git reset --hard; fi; if [[ -d .git ]] \u0026\u0026 [[ {{AUTO_UPDATE}} == \"1\" ]]; then git pull; fi; dart pub get; dart run", 21 | "config": { 22 | "files": "{}", 23 | "logs": "{}", 24 | "startup": "{\r\n \"done\": \"change this part\"\r\n}", 25 | "stop": "^^C" 26 | }, 27 | "scripts": { 28 | "installation": { 29 | "container": "ghcr.io/parkervcp/installers:debian", 30 | "entrypoint": "bash", 31 | "script": "#!/bin/bash\r\n# Dart CLI Installation Script\r\n#\r\n# Server Files: /mnt/server\r\napt update\r\napt install -y git curl file unzip\r\n\r\nmkdir -p /mnt/server\r\ncd /mnt/server\r\n\r\nif [ \"${USER_UPLOAD}\" == \"true\" ] || [ \"${USER_UPLOAD}\" == \"1\" ]; then\r\n echo -e \"assuming user knows what they are doing have a good day.\"\r\n exit 0\r\nfi\r\n\r\n## add git ending if it's not on the address\r\nif [[ ${GIT_ADDRESS} != *.git ]]; then\r\n GIT_ADDRESS=${GIT_ADDRESS}.git\r\nfi\r\n\r\nif [ -z \"${USERNAME}\" ] \u0026\u0026 [ -z \"${ACCESS_TOKEN}\" ]; then\r\n echo -e \"using anon api call\"\r\nelse\r\n GIT_ADDRESS=\"https://${USERNAME}:${ACCESS_TOKEN}@$(echo -e ${GIT_ADDRESS} | cut -d/ -f3-)\"\r\nfi\r\n\r\n## pull git dart cli repo\r\nif [ \"$(ls -A /mnt/server)\" ]; then\r\n echo -e \"/mnt/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \".git directory exists\"\r\n if [ -f .git/config ]; then\r\n echo -e \"loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"files found with no git config\"\r\n echo -e \"closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"${GIT_ADDRESS}\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"/mnt/server is empty.\\ncloning files into repo\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"cloning default branch\"\r\n git clone ${GIT_ADDRESS} .\r\n else\r\n echo -e \"cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} ${GIT_ADDRESS} .\r\n fi\r\n\r\nfi\r\n\r\necho -e \"install complete\"\r\nexit 0" 32 | } 33 | }, 34 | "variables": [ 35 | { 36 | "name": "Git Repo Address", 37 | "description": "GitHub Repo to clone\r\n\r\nI.E. https://github.com/kNoAPP/repo_name", 38 | "env_variable": "GIT_ADDRESS", 39 | "default_value": "", 40 | "user_viewable": true, 41 | "user_editable": true, 42 | "rules": "nullable|string", 43 | "field_type": "text" 44 | }, 45 | { 46 | "name": "Install Branch", 47 | "description": "The branch of the bot to install.", 48 | "env_variable": "BRANCH", 49 | "default_value": "", 50 | "user_viewable": true, 51 | "user_editable": true, 52 | "rules": "nullable|string", 53 | "field_type": "text" 54 | }, 55 | { 56 | "name": "User Uploaded Files", 57 | "description": "Skip all the install stuff if you are letting a user upload files.\r\n\r\n0 = false (default)\r\n1 = true", 58 | "env_variable": "USER_UPLOAD", 59 | "default_value": "0", 60 | "user_viewable": true, 61 | "user_editable": true, 62 | "rules": "required|boolean", 63 | "field_type": "text" 64 | }, 65 | { 66 | "name": "Auto Update", 67 | "description": "Pull the latest files on startup when using a GitHub repo.", 68 | "env_variable": "AUTO_UPDATE", 69 | "default_value": "0", 70 | "user_viewable": true, 71 | "user_editable": true, 72 | "rules": "required|boolean", 73 | "field_type": "text" 74 | }, 75 | { 76 | "name": "Auto Reset", 77 | "description": "Hard reset the latest files on startup when using a GitHub repo.", 78 | "env_variable": "AUTO_RESET", 79 | "default_value": "0", 80 | "user_viewable": true, 81 | "user_editable": true, 82 | "rules": "required|boolean", 83 | "field_type": "text" 84 | }, 85 | { 86 | "name": "Git Username", 87 | "description": "Username to auth with git.", 88 | "env_variable": "USERNAME", 89 | "default_value": "", 90 | "user_viewable": true, 91 | "user_editable": true, 92 | "rules": "nullable|string", 93 | "field_type": "text" 94 | }, 95 | { 96 | "name": "Git Access Token", 97 | "description": "Password to use with git.\r\n\r\nIt's best practice to use a Personal Access Token.\r\nhttps://github.com/settings/tokens\r\nhttps://gitlab.com/-/profile/personal_access_tokens", 98 | "env_variable": "ACCESS_TOKEN", 99 | "default_value": "", 100 | "user_viewable": true, 101 | "user_editable": true, 102 | "rules": "nullable|string", 103 | "field_type": "text" 104 | } 105 | ] 106 | } -------------------------------------------------------------------------------- /deno/README.md: -------------------------------------------------------------------------------- 1 | # Deno - JavaScript & TypeScript Generic 2 | 3 | ## From their [site](https://deno.land/) 4 | 5 | This egg is designed to run any generic Deno application, allowing users to pull their own Deno source code from a Github repository. 6 | 7 | There is an option to allow a user to upload their own files to run a server. 8 | 9 | The startup configs and commands may need changing to actually function properly. 10 | 11 | ## Configuration 12 | 13 | The server will be stuck as `starting` until the egg Start Configuration is modified. You have to edit the text to match something your bot will print for Pterodactyl panel to detect it as running. 14 | ![image](https://user-images.githubusercontent.com/10975908/126516861-c5cb4630-9f25-405c-8199-97bf5ec15a7f.png) 15 | 16 | You can use arrays to have multiple different values when different bots are being used 17 | 18 | ```json 19 | { 20 | "done":[ 21 | "change this text 1", 22 | "change this text 2" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /deno/egg-deno-generic.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", 3 | "meta": { 4 | "version": "PLCN_v1", 5 | "update_url": null 6 | }, 7 | "exported_at": "2025-04-19T16:19:28+00:00", 8 | "name": "Deno Generic", 9 | "author": "parker@parkervcp.com", 10 | "uuid": "9bf4389f-7df3-422e-b8ff-0c1e96c7da51", 11 | "description": "A generic egg to run deno code.", 12 | "tags": [], 13 | "features": [], 14 | "docker_images": { 15 | "ghcr.io\/parkervcp\/yolks:debian": "ghcr.io\/parkervcp\/yolks:debian" 16 | }, 17 | "file_denylist": [], 18 | "startup": ".\/deno run {{JS_FILE}}", 19 | "config": { 20 | "files": "{}", 21 | "startup": "{\r\n \"done\": \"change this part\"\r\n}", 22 | "logs": "{}", 23 | "stop": "^C" 24 | }, 25 | "scripts": { 26 | "installation": { 27 | "script": "#!\/bin\/bash\r\n# Deno Bot Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\napt update\r\napt install -y git curl jq file unzip\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nif [ \"${USER_UPLOAD}\" == \"true\" ] || [ \"${USER_UPLOAD}\" == \"1\" ]; then\r\n echo -e \"assuming user knows what they are doing have a good day.\"\r\n exit 0\r\nfi\r\n\r\n## add git ending if it's not on the address\r\nif [[ ${GIT_ADDRESS} != *.git ]]; then\r\n GIT_ADDRESS=${GIT_ADDRESS}.git\r\nfi\r\n\r\nif [ -z \"${USERNAME}\" ] && [ -z \"${ACCESS_TOKEN}\" ]; then\r\n echo -e \"using anon api call\"\r\nelse\r\n GIT_ADDRESS=\"https:\/\/${USERNAME}:${ACCESS_TOKEN}@$(echo -e ${GIT_ADDRESS} | cut -d\/ -f3-)\"\r\nfi\r\n\r\n## pull git js bot repo\r\nif [ \"$(ls -A \/mnt\/server)\" ]; then\r\n echo -e \"\/mnt\/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \".git directory exists\"\r\n if [ -f .git\/config ]; then\r\n echo -e \"loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"files found with no git config\"\r\n echo -e \"closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"${GIT_ADDRESS}\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"\/mnt\/server is empty.\\ncloning files into repo\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"cloning default branch\"\r\n git clone ${GIT_ADDRESS} .\r\n else\r\n echo -e \"cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} ${GIT_ADDRESS} .\r\n fi\r\n\r\nfi\r\n\r\n## filters to make sure the correct file is downloaded.\r\nGITHUB_PACKAGE=denoland\/deno\r\nEXEC=deno-\r\nOS=linux\r\nNOT=sha256sum\r\n\r\n## get release info and download links\r\n## removes the body of messages as those may break jq\r\nLATEST_JSON=\"$(curl -sSL \"https:\/\/api.github.com\/repos\/denoland\/deno\/releases\/latest\" | jq 'del(.body)')\"\r\nRELEASES=\"$(curl -sSL \"https:\/\/api.github.com\/repos\/${GITHUB_PACKAGE}\/releases\" | jq 'del(.[].body)')\"\r\n\r\nif [ -z \"${VERSION}\" ] || [ \"${VERSION}\" == \"latest\" ]; then\r\n # gets the download url filtered by arch, executable name, os name, and doesn't show sha256sum files.\r\n DOWNLOAD_URL=\"$(echo \"${LATEST_JSON}\" | jq -r --arg ARCH \"$(uname -m)\" --arg EXEC \"${EXEC}\" --arg OS ${OS} --arg NOT ${NOT} '.assets | .[].browser_download_url | select(contains($ARCH)) | select(contains($EXEC)) | select(contains($OS)) | select(contains($NOT) | not)')\"\r\nelse\r\n VERSION_CHECK=\"$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .tag_name')\"\r\n if [ \"${VERSION}\" == \"${VERSION_CHECK}\" ]; then\r\n DOWNLOAD_LINK=\"$(echo ${RELEASES} | jq -r --arg ARCH \"$(uname -m)\" --arg VERSION \"${VERSION}\" --arg EXEC \"${EXEC}\" --arg OS ${OS} --arg NOT ${NOT} '.[] | select(.tag_name==$VERSION) | .assets | .[].browser_download_url | select(contains($EXEC)) | select(contains($ARCH)) | select(contains($OS)) | select(contains($NOT) | not)')\"\r\n else\r\n echo -e \"defaulting to latest release\"\r\n DOWNLOAD_LINK=\"$(echo \"${LATEST_JSON}\" | jq -r --arg ARCH \"$(uname -m)\" --arg EXEC \"${EXEC}\" --arg OS ${OS} --arg NOT ${NOT} '.assets | .[].browser_download_url | select(contains($EXEC)) | select(contains($ARCH)) | select(contains($OS)) | select(contains($NOT) | not)')\"\r\n fi\r\nfi\r\n\r\nif [ ! -z \"${DOWNLOAD_URL}\" ]; then\r\n if curl --output \/dev\/null --silent --head --fail ${DOWNLOAD_URL}; then\r\n echo -e \"link is valid. setting download link to ${DOWNLOAD_URL}\"\r\n DOWNLOAD_LINK=${DOWNLOAD_URL}\r\n else\r\n echo -e \"link is invalid closing out\"\r\n exit 2\r\n fi\r\nfi\r\n\r\ncurl -sSL $DOWNLOAD_LINK -o ${DOWNLOAD_LINK##*\/}\r\n\r\nFILETYPE=$(file -F ',' ${DOWNLOAD_LINK##*\/} | cut -d',' -f2 | cut -d' ' -f2)\r\nif [ \"$FILETYPE\" == \"gzip\" ]; then\r\n tar xzvf ${DOWNLOAD_LINK##*\/}\r\nelif [ \"$FILETYPE\" == \"Zip\" ]; then\r\n unzip -o ${DOWNLOAD_LINK##*\/}\r\nelif [ \"$FILETYPE\" == \"XZ\" ]; then\r\n tar xvf ${DOWNLOAD_LINK##*\/}\r\nelse\r\n echo -e \"unknown filetype. Exiting\"\r\n exit 2\r\nfi\r\n\r\n## cleaning up downloaded file\r\nrm -f ${DOWNLOAD_LINK##*\/}\r\n\r\necho -e \"install complete\"\r\nexit 0", 28 | "container": "ghcr.io\/parkervcp\/installers:debian", 29 | "entrypoint": "bash" 30 | } 31 | }, 32 | "variables": [ 33 | { 34 | "sort": 2, 35 | "name": "Git Access Token", 36 | "description": "Password to use with git.\r\n\r\nIt's best practice to use a Personal Access Token.\r\nhttps:\/\/github.com\/settings\/tokens\r\nhttps:\/\/gitlab.com\/-\/profile\/personal_access_tokens", 37 | "env_variable": "ACCESS_TOKEN", 38 | "default_value": "", 39 | "user_viewable": true, 40 | "user_editable": true, 41 | "rules": [ 42 | "nullable", 43 | "string" 44 | ] 45 | }, 46 | { 47 | "sort": 5, 48 | "name": "Git Branch", 49 | "description": "What branch to pull from github.\r\n\r\nDefault is blank to pull the repo default branch", 50 | "env_variable": "BRANCH", 51 | "default_value": "", 52 | "user_viewable": true, 53 | "user_editable": true, 54 | "rules": [ 55 | "nullable", 56 | "string" 57 | ] 58 | }, 59 | { 60 | "sort": 3, 61 | "name": "Git Repo Address", 62 | "description": "GitHub Repo to clone\r\n\r\nI.E. https:\/\/github.com\/parkervcp\/repo_name", 63 | "env_variable": "GIT_ADDRESS", 64 | "default_value": "", 65 | "user_viewable": true, 66 | "user_editable": true, 67 | "rules": [ 68 | "nullable", 69 | "string" 70 | ] 71 | }, 72 | { 73 | "sort": 6, 74 | "name": "Bot js file", 75 | "description": "The JavaScript file to run", 76 | "env_variable": "JS_FILE", 77 | "default_value": "bot.js", 78 | "user_viewable": true, 79 | "user_editable": true, 80 | "rules": [ 81 | "required", 82 | "string", 83 | "max:20" 84 | ] 85 | }, 86 | { 87 | "sort": 4, 88 | "name": "User Uploaded Files", 89 | "description": "Skip all the install stuff if you are letting a user upload files.\r\n\r\n0 = false (default)\r\n1 = true", 90 | "env_variable": "USER_UPLOAD", 91 | "default_value": "0", 92 | "user_viewable": true, 93 | "user_editable": true, 94 | "rules": [ 95 | "required", 96 | "boolean" 97 | ] 98 | }, 99 | { 100 | "sort": 1, 101 | "name": "Git Username", 102 | "description": "Username to auth with git.", 103 | "env_variable": "USERNAME", 104 | "default_value": "", 105 | "user_viewable": true, 106 | "user_editable": true, 107 | "rules": [ 108 | "nullable", 109 | "string" 110 | ] 111 | } 112 | ] 113 | } -------------------------------------------------------------------------------- /deno/egg-pterodactyl-deno-generic.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", 3 | "meta": { 4 | "version": "PTDL_v2", 5 | "update_url": null 6 | }, 7 | "exported_at": "2025-04-19T16:22:05+00:00", 8 | "name": "Deno Generic", 9 | "author": "parker@parkervcp.com", 10 | "description": "A generic egg to run deno code.", 11 | "features": null, 12 | "docker_images": { 13 | "ghcr.io\/parkervcp\/yolks:debian": "ghcr.io\/parkervcp\/yolks:debian" 14 | }, 15 | "file_denylist": [], 16 | "startup": ".\/deno run {{JS_FILE}}", 17 | "config": { 18 | "files": "{}", 19 | "startup": "{\r\n \"done\": \"change this part\"\r\n}", 20 | "logs": "{}", 21 | "stop": "^C" 22 | }, 23 | "scripts": { 24 | "installation": { 25 | "script": "#!\/bin\/bash\r\n# Deno Bot Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\napt update\r\napt install -y git curl jq file unzip\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nif [ \"${USER_UPLOAD}\" == \"true\" ] || [ \"${USER_UPLOAD}\" == \"1\" ]; then\r\n echo -e \"assuming user knows what they are doing have a good day.\"\r\n exit 0\r\nfi\r\n\r\n## add git ending if it's not on the address\r\nif [[ ${GIT_ADDRESS} != *.git ]]; then\r\n GIT_ADDRESS=${GIT_ADDRESS}.git\r\nfi\r\n\r\nif [ -z \"${USERNAME}\" ] && [ -z \"${ACCESS_TOKEN}\" ]; then\r\n echo -e \"using anon api call\"\r\nelse\r\n GIT_ADDRESS=\"https:\/\/${USERNAME}:${ACCESS_TOKEN}@$(echo -e ${GIT_ADDRESS} | cut -d\/ -f3-)\"\r\nfi\r\n\r\n## pull git js bot repo\r\nif [ \"$(ls -A \/mnt\/server)\" ]; then\r\n echo -e \"\/mnt\/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \".git directory exists\"\r\n if [ -f .git\/config ]; then\r\n echo -e \"loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"files found with no git config\"\r\n echo -e \"closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"${GIT_ADDRESS}\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"\/mnt\/server is empty.\\ncloning files into repo\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"cloning default branch\"\r\n git clone ${GIT_ADDRESS} .\r\n else\r\n echo -e \"cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} ${GIT_ADDRESS} .\r\n fi\r\n\r\nfi\r\n\r\n## filters to make sure the correct file is downloaded.\r\nGITHUB_PACKAGE=denoland\/deno\r\nEXEC=deno-\r\nOS=linux\r\nNOT=sha256sum\r\n\r\n## get release info and download links\r\n## removes the body of messages as those may break jq\r\nLATEST_JSON=\"$(curl -sSL \"https:\/\/api.github.com\/repos\/denoland\/deno\/releases\/latest\" | jq 'del(.body)')\"\r\nRELEASES=\"$(curl -sSL \"https:\/\/api.github.com\/repos\/${GITHUB_PACKAGE}\/releases\" | jq 'del(.[].body)')\"\r\n\r\nif [ -z \"${VERSION}\" ] || [ \"${VERSION}\" == \"latest\" ]; then\r\n # gets the download url filtered by arch, executable name, os name, and doesn't show sha256sum files.\r\n DOWNLOAD_URL=\"$(echo \"${LATEST_JSON}\" | jq -r --arg ARCH \"$(uname -m)\" --arg EXEC \"${EXEC}\" --arg OS ${OS} --arg NOT ${NOT} '.assets | .[].browser_download_url | select(contains($ARCH)) | select(contains($EXEC)) | select(contains($OS)) | select(contains($NOT) | not)')\"\r\nelse\r\n VERSION_CHECK=\"$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .tag_name')\"\r\n if [ \"${VERSION}\" == \"${VERSION_CHECK}\" ]; then\r\n DOWNLOAD_LINK=\"$(echo ${RELEASES} | jq -r --arg ARCH \"$(uname -m)\" --arg VERSION \"${VERSION}\" --arg EXEC \"${EXEC}\" --arg OS ${OS} --arg NOT ${NOT} '.[] | select(.tag_name==$VERSION) | .assets | .[].browser_download_url | select(contains($EXEC)) | select(contains($ARCH)) | select(contains($OS)) | select(contains($NOT) | not)')\"\r\n else\r\n echo -e \"defaulting to latest release\"\r\n DOWNLOAD_LINK=\"$(echo \"${LATEST_JSON}\" | jq -r --arg ARCH \"$(uname -m)\" --arg EXEC \"${EXEC}\" --arg OS ${OS} --arg NOT ${NOT} '.assets | .[].browser_download_url | select(contains($EXEC)) | select(contains($ARCH)) | select(contains($OS)) | select(contains($NOT) | not)')\"\r\n fi\r\nfi\r\n\r\nif [ ! -z \"${DOWNLOAD_URL}\" ]; then\r\n if curl --output \/dev\/null --silent --head --fail ${DOWNLOAD_URL}; then\r\n echo -e \"link is valid. setting download link to ${DOWNLOAD_URL}\"\r\n DOWNLOAD_LINK=${DOWNLOAD_URL}\r\n else\r\n echo -e \"link is invalid closing out\"\r\n exit 2\r\n fi\r\nfi\r\n\r\ncurl -sSL $DOWNLOAD_LINK -o ${DOWNLOAD_LINK##*\/}\r\n\r\nFILETYPE=$(file -F ',' ${DOWNLOAD_LINK##*\/} | cut -d',' -f2 | cut -d' ' -f2)\r\nif [ \"$FILETYPE\" == \"gzip\" ]; then\r\n tar xzvf ${DOWNLOAD_LINK##*\/}\r\nelif [ \"$FILETYPE\" == \"Zip\" ]; then\r\n unzip -o ${DOWNLOAD_LINK##*\/}\r\nelif [ \"$FILETYPE\" == \"XZ\" ]; then\r\n tar xvf ${DOWNLOAD_LINK##*\/}\r\nelse\r\n echo -e \"unknown filetype. Exiting\"\r\n exit 2\r\nfi\r\n\r\n## cleaning up downloaded file\r\nrm -f ${DOWNLOAD_LINK##*\/}\r\n\r\necho -e \"install complete\"\r\nexit 0", 26 | "container": "ghcr.io\/parkervcp\/installers:debian", 27 | "entrypoint": "bash" 28 | } 29 | }, 30 | "variables": [ 31 | { 32 | "name": "Git Username", 33 | "description": "Username to auth with git.", 34 | "env_variable": "USERNAME", 35 | "default_value": "", 36 | "user_viewable": true, 37 | "user_editable": true, 38 | "rules": "nullable|string", 39 | "field_type": "text" 40 | }, 41 | { 42 | "name": "Git Access Token", 43 | "description": "Password to use with git.\r\n\r\nIt's best practice to use a Personal Access Token.\r\nhttps:\/\/github.com\/settings\/tokens\r\nhttps:\/\/gitlab.com\/-\/profile\/personal_access_tokens", 44 | "env_variable": "ACCESS_TOKEN", 45 | "default_value": "", 46 | "user_viewable": true, 47 | "user_editable": true, 48 | "rules": "nullable|string", 49 | "field_type": "text" 50 | }, 51 | { 52 | "name": "Git Repo Address", 53 | "description": "GitHub Repo to clone\r\n\r\nI.E. https:\/\/github.com\/parkervcp\/repo_name", 54 | "env_variable": "GIT_ADDRESS", 55 | "default_value": "", 56 | "user_viewable": true, 57 | "user_editable": true, 58 | "rules": "nullable|string", 59 | "field_type": "text" 60 | }, 61 | { 62 | "name": "User Uploaded Files", 63 | "description": "Skip all the install stuff if you are letting a user upload files.\r\n\r\n0 = false (default)\r\n1 = true", 64 | "env_variable": "USER_UPLOAD", 65 | "default_value": "0", 66 | "user_viewable": true, 67 | "user_editable": true, 68 | "rules": "required|boolean", 69 | "field_type": "text" 70 | }, 71 | { 72 | "name": "Git Branch", 73 | "description": "What branch to pull from github.\r\n\r\nDefault is blank to pull the repo default branch", 74 | "env_variable": "BRANCH", 75 | "default_value": "", 76 | "user_viewable": true, 77 | "user_editable": true, 78 | "rules": "nullable|string", 79 | "field_type": "text" 80 | }, 81 | { 82 | "name": "Bot js file", 83 | "description": "The JavaScript file to run", 84 | "env_variable": "JS_FILE", 85 | "default_value": "bot.js", 86 | "user_viewable": true, 87 | "user_editable": true, 88 | "rules": "required|string|max:20", 89 | "field_type": "text" 90 | } 91 | ] 92 | } -------------------------------------------------------------------------------- /elixir/README.md: -------------------------------------------------------------------------------- 1 | # Elixir Language Generic 2 | 3 | This egg is designed to run any generic Elixir application, allowing users to pull their own Elixir source code from a Git repository. 4 | 5 | There is an option to allow a user to upload their own files to run a server. 6 | 7 | The startup configs and commands may need changing to actually function properly. 8 | 9 | ## Configuration 10 | 11 | The server will be stuck as `starting` until the egg Start Configuration is modified. You have to edit the text to match something your bot will print for Pterodactyl panel to detect it as running. 12 | ![image](https://user-images.githubusercontent.com/10975908/126516861-c5cb4630-9f25-405c-8199-97bf5ec15a7f.png) 13 | 14 | You can use arrays to have multiple different values when different bots are being used 15 | 16 | ```json 17 | { 18 | "done":[ 19 | "change this text 1", 20 | "change this text 2" 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /elixir/egg-elixir.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", 3 | "meta": { 4 | "version": "PTDL_v2", 5 | "update_url": null 6 | }, 7 | "exported_at": "2024-06-02T14:43:55+00:00", 8 | "name": "Elixir", 9 | "author": "mravox@proton.me", 10 | "uuid": "80ba60b4-cc10-4e73-95ec-dd572e00cf6c", 11 | "description": "Elixir is a functional, concurrent, high-level general-purpose programming language that runs on the BEAM virtual machine, which is also used to implement the Erlang programming language.", 12 | "features": null, 13 | "docker_images": { 14 | "Elixir Latest": "ghcr.io\/parkervcp\/yolks:elixir_latest", 15 | "Elixir 1.15": "ghcr.io\/parkervcp\/yolks:elixir_1.15", 16 | "Elixir 1.14": "ghcr.io\/parkervcp\/yolks:elixir_1.14", 17 | "Elixir 1.13": "ghcr.io\/parkervcp\/yolks:elixir_1.13", 18 | "Elixir 1.12": "ghcr.io\/parkervcp\/yolks:elixir_1.12" 19 | }, 20 | "file_denylist": [], 21 | "startup": "if [[ -d .git ]] && [[ {{AUTO_UPDATE}} == \"1\" ]]; then git pull; fi; mix deps.get; mix run --no-halt", 22 | "config": { 23 | "files": "{}", 24 | "startup": "{\r\n \"done\": [\r\n \"change this text 1\",\r\n \"change this text 2\"\r\n ]\r\n}", 25 | "logs": "{}", 26 | "stop": "^C" 27 | }, 28 | "scripts": { 29 | "installation": { 30 | "script": "#!\/bin\/bash\r\n# Elixir App Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\n\r\nif [ \"${USER_UPLOAD}\" == \"true\" ] || [ \"${USER_UPLOAD}\" == \"1\" ]; then\r\n echo -e \"assuming user knows what they are doing have a good day.\"\r\n exit 0\r\nfi\r\n\r\n## add git ending if it's not on the address\r\nif [[ ${GIT_ADDRESS} != *.git ]]; then\r\n GIT_ADDRESS=${GIT_ADDRESS}.git\r\nfi\r\n\r\nif [ -z \"${GIT_USERNAME}\" ] && [ -z \"${GIT_ACCESS_TOKEN}\" ]; then\r\n echo -e \"using anon api call\"\r\nelse\r\n GIT_ADDRESS=\"https:\/\/${GIT_USERNAME}:${GIT_ACCESS_TOKEN}@$(echo -e ${GIT_ADDRESS} | cut -d\/ -f3-)\"\r\nfi\r\n\r\n## pull git elixir repository\r\nif [ \"$(ls -A \/mnt\/server)\" ]; then\r\n echo -e \"\/mnt\/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \".git directory exists\"\r\n if [ -f .git\/config ]; then\r\n echo -e \"loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"files found with no git config\"\r\n echo -e \"closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"${GIT_ADDRESS}\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"\/mnt\/server is empty.\\ncloning files into repo\"\r\n if [ -z ${GIT_BRANCH} ]; then\r\n echo -e \"cloning default branch\"\r\n git clone ${GIT_ADDRESS} .\r\n else\r\n echo -e \"cloning ${GIT_BRANCH}'\"\r\n git clone --single-branch --branch ${GIT_BRANCH} ${GIT_ADDRESS} .\r\n fi\r\nfi\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", 31 | "container": "ghcr.io\/parkervcp\/installers:debian", 32 | "entrypoint": "bash" 33 | } 34 | }, 35 | "variables": [ 36 | { 37 | "name": "Git Repository Address", 38 | "description": "The Git repository address to clone .", 39 | "env_variable": "GIT_ADDRESS", 40 | "default_value": "", 41 | "user_viewable": true, 42 | "user_editable": true, 43 | "rules": "nullable|string", 44 | "sort": null, 45 | "field_type": "text" 46 | }, 47 | { 48 | "name": "Git Branch", 49 | "description": "The Git branch to install.", 50 | "env_variable": "GIT_BRANCH", 51 | "default_value": "", 52 | "user_viewable": true, 53 | "user_editable": true, 54 | "rules": "nullable|string", 55 | "sort": null, 56 | "field_type": "text" 57 | }, 58 | { 59 | "name": "User Uploaded Files", 60 | "description": "Skip all the install stuff if you are letting a user upload files.\r\n0 = false (default)\r\n1 = true", 61 | "env_variable": "USER_UPLOAD", 62 | "default_value": "0", 63 | "user_viewable": true, 64 | "user_editable": true, 65 | "rules": "required|boolean", 66 | "sort": null, 67 | "field_type": "text" 68 | }, 69 | { 70 | "name": "Auto Update", 71 | "description": "Pull the latest files on startup when using a Git Repository.\r\n0 = false (default)\r\n1 = true", 72 | "env_variable": "AUTO_UPDATE", 73 | "default_value": "0", 74 | "user_viewable": true, 75 | "user_editable": true, 76 | "rules": "required|boolean", 77 | "sort": null, 78 | "field_type": "text" 79 | }, 80 | { 81 | "name": "Git Username", 82 | "description": "Git username for authentication.", 83 | "env_variable": "GIT_USERNAME", 84 | "default_value": "", 85 | "user_viewable": true, 86 | "user_editable": true, 87 | "rules": "nullable|string", 88 | "sort": null, 89 | "field_type": "text" 90 | }, 91 | { 92 | "name": "Git Access Token", 93 | "description": "Git access token for authentication.", 94 | "env_variable": "GIT_ACCESS_TOKEN", 95 | "default_value": "", 96 | "user_viewable": true, 97 | "user_editable": true, 98 | "rules": "nullable|string", 99 | "sort": null, 100 | "field_type": "text" 101 | } 102 | ] 103 | } -------------------------------------------------------------------------------- /elixir/egg-pterodactyl-elixir.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", 3 | "meta": { 4 | "update_url": null, 5 | "version": "PTDL_v2" 6 | }, 7 | "exported_at": "2024-06-02T14:43:55+00:00", 8 | "name": "Elixir", 9 | "author": "mravox@proton.me", 10 | "description": "Elixir is a functional, concurrent, high-level general-purpose programming language that runs on the BEAM virtual machine, which is also used to implement the Erlang programming language.", 11 | "features": null, 12 | "docker_images": { 13 | "Elixir 1.12": "ghcr.io/parkervcp/yolks:elixir_1.12", 14 | "Elixir 1.13": "ghcr.io/parkervcp/yolks:elixir_1.13", 15 | "Elixir 1.14": "ghcr.io/parkervcp/yolks:elixir_1.14", 16 | "Elixir 1.15": "ghcr.io/parkervcp/yolks:elixir_1.15", 17 | "Elixir Latest": "ghcr.io/parkervcp/yolks:elixir_latest" 18 | }, 19 | "file_denylist": [], 20 | "startup": "if [[ -d .git ]] \u0026\u0026 [[ {{AUTO_UPDATE}} == \"1\" ]]; then git pull; fi; mix deps.get; mix run --no-halt", 21 | "config": { 22 | "files": "{}", 23 | "logs": "{}", 24 | "startup": "{\r\n \"done\": [\r\n \"change this text 1\",\r\n \"change this text 2\"\r\n ]\r\n}", 25 | "stop": "^C" 26 | }, 27 | "scripts": { 28 | "installation": { 29 | "container": "ghcr.io/parkervcp/installers:debian", 30 | "entrypoint": "bash", 31 | "script": "#!/bin/bash\r\n# Elixir App Installation Script\r\n#\r\n# Server Files: /mnt/server\r\nmkdir -p /mnt/server\r\ncd /mnt/server\r\n\r\n\r\nif [ \"${USER_UPLOAD}\" == \"true\" ] || [ \"${USER_UPLOAD}\" == \"1\" ]; then\r\n echo -e \"assuming user knows what they are doing have a good day.\"\r\n exit 0\r\nfi\r\n\r\n## add git ending if it's not on the address\r\nif [[ ${GIT_ADDRESS} != *.git ]]; then\r\n GIT_ADDRESS=${GIT_ADDRESS}.git\r\nfi\r\n\r\nif [ -z \"${GIT_USERNAME}\" ] \u0026\u0026 [ -z \"${GIT_ACCESS_TOKEN}\" ]; then\r\n echo -e \"using anon api call\"\r\nelse\r\n GIT_ADDRESS=\"https://${GIT_USERNAME}:${GIT_ACCESS_TOKEN}@$(echo -e ${GIT_ADDRESS} | cut -d/ -f3-)\"\r\nfi\r\n\r\n## pull git elixir repository\r\nif [ \"$(ls -A /mnt/server)\" ]; then\r\n echo -e \"/mnt/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \".git directory exists\"\r\n if [ -f .git/config ]; then\r\n echo -e \"loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"files found with no git config\"\r\n echo -e \"closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"${GIT_ADDRESS}\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"/mnt/server is empty.\\ncloning files into repo\"\r\n if [ -z ${GIT_BRANCH} ]; then\r\n echo -e \"cloning default branch\"\r\n git clone ${GIT_ADDRESS} .\r\n else\r\n echo -e \"cloning ${GIT_BRANCH}'\"\r\n git clone --single-branch --branch ${GIT_BRANCH} ${GIT_ADDRESS} .\r\n fi\r\nfi\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"" 32 | } 33 | }, 34 | "variables": [ 35 | { 36 | "name": "Git Repository Address", 37 | "description": "The Git repository address to clone .", 38 | "env_variable": "GIT_ADDRESS", 39 | "default_value": "", 40 | "user_viewable": true, 41 | "user_editable": true, 42 | "rules": "nullable|string", 43 | "field_type": "text" 44 | }, 45 | { 46 | "name": "Git Branch", 47 | "description": "The Git branch to install.", 48 | "env_variable": "GIT_BRANCH", 49 | "default_value": "", 50 | "user_viewable": true, 51 | "user_editable": true, 52 | "rules": "nullable|string", 53 | "field_type": "text" 54 | }, 55 | { 56 | "name": "User Uploaded Files", 57 | "description": "Skip all the install stuff if you are letting a user upload files.\r\n0 = false (default)\r\n1 = true", 58 | "env_variable": "USER_UPLOAD", 59 | "default_value": "0", 60 | "user_viewable": true, 61 | "user_editable": true, 62 | "rules": "required|boolean", 63 | "field_type": "text" 64 | }, 65 | { 66 | "name": "Auto Update", 67 | "description": "Pull the latest files on startup when using a Git Repository.\r\n0 = false (default)\r\n1 = true", 68 | "env_variable": "AUTO_UPDATE", 69 | "default_value": "0", 70 | "user_viewable": true, 71 | "user_editable": true, 72 | "rules": "required|boolean", 73 | "field_type": "text" 74 | }, 75 | { 76 | "name": "Git Username", 77 | "description": "Git username for authentication.", 78 | "env_variable": "GIT_USERNAME", 79 | "default_value": "", 80 | "user_viewable": true, 81 | "user_editable": true, 82 | "rules": "nullable|string", 83 | "field_type": "text" 84 | }, 85 | { 86 | "name": "Git Access Token", 87 | "description": "Git access token for authentication.", 88 | "env_variable": "GIT_ACCESS_TOKEN", 89 | "default_value": "", 90 | "user_viewable": true, 91 | "user_editable": true, 92 | "rules": "nullable|string", 93 | "field_type": "text" 94 | } 95 | ] 96 | } -------------------------------------------------------------------------------- /golang/README.md: -------------------------------------------------------------------------------- 1 | # Go Language Generic 2 | 3 | This egg is designed to run any generic Go application, allowing users to pull their own Go source code from a Github repository. 4 | 5 | The startup configs and commands may need changing to actually function properly. 6 | 7 | Users cannot upload their own code as this is built to build the resulting bot. 8 | 9 | `GO_PACKAGE` is the variable for the Go repo i.e. `github.com/aurieh/ddg-ng` 10 | `EXECUTABLE` is the variable for the executable that is built i.e. `ddg-ng` 11 | 12 | ## Configuration 13 | 14 | The server will be stuck as `starting` until the egg Start Configuration is modified. You have to edit the text to match something your bot will print for Pterodactyl panel to detect it as running. 15 | ![image](https://user-images.githubusercontent.com/10975908/126516861-c5cb4630-9f25-405c-8199-97bf5ec15a7f.png) 16 | 17 | You can use arrays to have multiple different values when different bots are being used 18 | 19 | ```json 20 | { 21 | "done":[ 22 | "change this text 1", 23 | "change this text 2" 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /golang/egg-golang-generic.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", 3 | "meta": { 4 | "version": "PTDL_v2", 5 | "update_url": null 6 | }, 7 | "exported_at": "2024-06-02T14:43:56+00:00", 8 | "name": "golang generic", 9 | "author": "parker@parkervcp.com", 10 | "uuid": "b1c18867-5be4-4124-9ce2-8924339de747", 11 | "description": "A generic golang egg that compiles the application and saves an executable\r\n\r\nMeant to be customized before it is used.", 12 | "features": null, 13 | "docker_images": { 14 | "ghcr.io\/parkervcp\/yolks:debian": "ghcr.io\/parkervcp\/yolks:debian" 15 | }, 16 | "file_denylist": [], 17 | "startup": ".\/${EXECUTABLE}", 18 | "config": { 19 | "files": "{}", 20 | "startup": "{\r\n \"done\": \"change this part\"\r\n}", 21 | "logs": "{}", 22 | "stop": "^C" 23 | }, 24 | "scripts": { 25 | "installation": { 26 | "script": "#!\/bin\/bash\r\n# golang generic package\r\n\r\n\r\nif [ ! -d \/mnt\/server\/ ]; then\r\n mkdir -p \/mnt\/server\/\r\nfi\r\n\r\ngo get ${GO_PACKAGE}\r\n\r\ncd src\/${GO_PACKAGE}\r\n\r\ngo get\r\n\r\ngo build\r\n\r\ncp -f ${EXECUTABLE} \/mnt\/server\/", 27 | "container": "golang:1.15-buster", 28 | "entrypoint": "bash" 29 | } 30 | }, 31 | "variables": [ 32 | { 33 | "name": "Go Package", 34 | "description": "Go package to get and build", 35 | "env_variable": "GO_PACKAGE", 36 | "default_value": "", 37 | "user_viewable": true, 38 | "user_editable": true, 39 | "rules": "required|string", 40 | "sort": null, 41 | "field_type": "text" 42 | }, 43 | { 44 | "name": "Executable", 45 | "description": "This is the executable from the build.", 46 | "env_variable": "EXECUTABLE", 47 | "default_value": "", 48 | "user_viewable": true, 49 | "user_editable": false, 50 | "rules": "required|string", 51 | "sort": null, 52 | "field_type": "text" 53 | } 54 | ] 55 | } -------------------------------------------------------------------------------- /golang/egg-pterodactyl-golang-generic.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", 3 | "meta": { 4 | "update_url": null, 5 | "version": "PTDL_v2" 6 | }, 7 | "exported_at": "2024-06-02T14:43:56+00:00", 8 | "name": "golang generic", 9 | "author": "parker@parkervcp.com", 10 | "description": "A generic golang egg that compiles the application and saves an executable\r\n\r\nMeant to be customized before it is used.", 11 | "features": null, 12 | "docker_images": { 13 | "ghcr.io/parkervcp/yolks:debian": "ghcr.io/parkervcp/yolks:debian" 14 | }, 15 | "file_denylist": [], 16 | "startup": "./${EXECUTABLE}", 17 | "config": { 18 | "files": "{}", 19 | "logs": "{}", 20 | "startup": "{\r\n \"done\": \"change this part\"\r\n}", 21 | "stop": "^C" 22 | }, 23 | "scripts": { 24 | "installation": { 25 | "container": "golang:1.15-buster", 26 | "entrypoint": "bash", 27 | "script": "#!/bin/bash\r\n# golang generic package\r\n\r\n\r\nif [ ! -d /mnt/server/ ]; then\r\n mkdir -p /mnt/server/\r\nfi\r\n\r\ngo get ${GO_PACKAGE}\r\n\r\ncd src/${GO_PACKAGE}\r\n\r\ngo get\r\n\r\ngo build\r\n\r\ncp -f ${EXECUTABLE} /mnt/server/" 28 | } 29 | }, 30 | "variables": [ 31 | { 32 | "name": "Go Package", 33 | "description": "Go package to get and build", 34 | "env_variable": "GO_PACKAGE", 35 | "default_value": "", 36 | "user_viewable": true, 37 | "user_editable": true, 38 | "rules": "required|string", 39 | "field_type": "text" 40 | }, 41 | { 42 | "name": "Executable", 43 | "description": "This is the executable from the build.", 44 | "env_variable": "EXECUTABLE", 45 | "default_value": "", 46 | "user_viewable": true, 47 | "user_editable": false, 48 | "rules": "required|string", 49 | "field_type": "text" 50 | } 51 | ] 52 | } -------------------------------------------------------------------------------- /java/README.md: -------------------------------------------------------------------------------- 1 | # Java Language Generic 2 | 3 | This egg is designed to run any generic Java application, allowing users to pull their own Java source code from a Github repository. This egg is also compatible with Kotlin. 4 | 5 | There is an option to allow a user to upload their own files to run a bot. 6 | 7 | The startup configs and commands may need changing to actually function properly. 8 | 9 | ## Configuration 10 | 11 | The server will be stuck as `starting` until the egg Start Configuration is modified. You have to edit the text to match something your bot will print for Pterodactyl panel to detect it as running. 12 | ![image](https://user-images.githubusercontent.com/10975908/126516861-c5cb4630-9f25-405c-8199-97bf5ec15a7f.png) 13 | 14 | You can use arrays to have multiple different values when different bots are being used 15 | 16 | ```json 17 | { 18 | "done":[ 19 | "change this text 1", 20 | "change this text 2" 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /java/egg-generic-java.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", 3 | "meta": { 4 | "version": "PTDL_v2", 5 | "update_url": null 6 | }, 7 | "exported_at": "2024-06-02T14:43:51+00:00", 8 | "name": "Generic Java", 9 | "author": "sneaky@sneakyhub.com", 10 | "uuid": "a3ff6992-6e87-42b8-b8ca-cde33f38a435", 11 | "description": "Creates a container that runs java.", 12 | "features": null, 13 | "docker_images": { 14 | "ghcr.io\/parkervcp\/yolks:java_8": "ghcr.io\/parkervcp\/yolks:java_8", 15 | "ghcr.io\/parkervcp\/yolks:java_11": "ghcr.io\/parkervcp\/yolks:java_11", 16 | "ghcr.io\/parkervcp\/yolks:java_16": "ghcr.io\/parkervcp\/yolks:java_16", 17 | "ghcr.io\/parkervcp\/yolks:java_17": "ghcr.io\/parkervcp\/yolks:java_17", 18 | "ghcr.io\/parkervcp\/yolks:java_19": "ghcr.io\/parkervcp\/yolks:java_19", 19 | "ghcr.io\/parkervcp\/yolks:java_21": "ghcr.io\/parkervcp\/yolks:java_21" 20 | }, 21 | "file_denylist": [], 22 | "startup": "java -Dterminal.jline=false -Dterminal.ansi=true -jar {{JARFILE}}", 23 | "config": { 24 | "files": "{}", 25 | "startup": "{\r\n \"done\": \"change this text\"\r\n}", 26 | "logs": "{}", 27 | "stop": "^C" 28 | }, 29 | "scripts": { 30 | "installation": { 31 | "script": "#!\/bin\/bash\r\n# Java Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\nPROJECT=java\r\n\r\napt update\r\napt install -y curl jq\r\n\r\ncd \/mnt\/server", 32 | "container": "ghcr.io\/parkervcp\/yolks:debian", 33 | "entrypoint": "bash" 34 | } 35 | }, 36 | "variables": [ 37 | { 38 | "name": "JAR FILE", 39 | "description": "", 40 | "env_variable": "JARFILE", 41 | "default_value": "sneakyhub.jar", 42 | "user_viewable": true, 43 | "user_editable": true, 44 | "rules": "required|string|max:50", 45 | "sort": null, 46 | "field_type": "text" 47 | } 48 | ] 49 | } -------------------------------------------------------------------------------- /java/egg-pterodactyl-generic-java.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", 3 | "meta": { 4 | "update_url": null, 5 | "version": "PTDL_v2" 6 | }, 7 | "exported_at": "2024-06-02T14:43:51+00:00", 8 | "name": "Generic Java", 9 | "author": "sneaky@sneakyhub.com", 10 | "description": "Creates a container that runs java.", 11 | "features": null, 12 | "docker_images": { 13 | "ghcr.io/parkervcp/yolks:java_11": "ghcr.io/parkervcp/yolks:java_11", 14 | "ghcr.io/parkervcp/yolks:java_16": "ghcr.io/parkervcp/yolks:java_16", 15 | "ghcr.io/parkervcp/yolks:java_17": "ghcr.io/parkervcp/yolks:java_17", 16 | "ghcr.io/parkervcp/yolks:java_19": "ghcr.io/parkervcp/yolks:java_19", 17 | "ghcr.io/parkervcp/yolks:java_21": "ghcr.io/parkervcp/yolks:java_21", 18 | "ghcr.io/parkervcp/yolks:java_8": "ghcr.io/parkervcp/yolks:java_8" 19 | }, 20 | "file_denylist": [], 21 | "startup": "java -Dterminal.jline=false -Dterminal.ansi=true -jar {{JARFILE}}", 22 | "config": { 23 | "files": "{}", 24 | "logs": "{}", 25 | "startup": "{\r\n \"done\": \"change this text\"\r\n}", 26 | "stop": "^C" 27 | }, 28 | "scripts": { 29 | "installation": { 30 | "container": "ghcr.io/parkervcp/yolks:debian", 31 | "entrypoint": "bash", 32 | "script": "#!/bin/bash\r\n# Java Installation Script\r\n#\r\n# Server Files: /mnt/server\r\nPROJECT=java\r\n\r\napt update\r\napt install -y curl jq\r\n\r\ncd /mnt/server" 33 | } 34 | }, 35 | "variables": [ 36 | { 37 | "name": "JAR FILE", 38 | "description": "", 39 | "env_variable": "JARFILE", 40 | "default_value": "sneakyhub.jar", 41 | "user_viewable": true, 42 | "user_editable": true, 43 | "rules": "required|string|max:50", 44 | "field_type": "text" 45 | } 46 | ] 47 | } -------------------------------------------------------------------------------- /lua/luvit/README.md: -------------------------------------------------------------------------------- 1 | # Lua (Luvit) Language Generic 2 | 3 | This egg was designed to allow a user to pull their own Lua source code from a repo and run it with Luvit. 4 | 5 | There is an option to allow a user to upload their own files to run an app. 6 | 7 | The startup configs and commands may need changing to actually function properly. 8 | 9 | ## Configuration 10 | 11 | The server will be stuck as `starting` until the egg Start Configuration is modified. You have to edit the text to match something your bot will print for Pterodactyl panel to detect it as running. 12 | ![image](https://user-images.githubusercontent.com/10975908/126516861-c5cb4630-9f25-405c-8199-97bf5ec15a7f.png) 13 | 14 | You can use arrays to have multiple different values when different bots are being used 15 | 16 | ```json 17 | { 18 | "done":[ 19 | "change this text 1", 20 | "change this text 2" 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /lua/luvit/egg-luvit-generic.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", 3 | "meta": { 4 | "version": "PTDL_v2", 5 | "update_url": null 6 | }, 7 | "exported_at": "2024-06-02T14:43:50+00:00", 8 | "name": "luvit generic", 9 | "author": "parker@parkervcp.com", 10 | "uuid": "f36e1177-60a6-421b-b078-9edba7422c76", 11 | "description": "A generic luvit egg This will clone a git repo. It defaults to master if no branch is specified.\r\n\r\nSupports the discordia lua framework.", 12 | "features": null, 13 | "docker_images": { 14 | "ghcr.io\/parkervcp\/yolks:debian": "ghcr.io\/parkervcp\/yolks:debian" 15 | }, 16 | "file_denylist": [], 17 | "startup": ".\/luvit {{LUA_FILE}}", 18 | "config": { 19 | "files": "{}", 20 | "startup": "{\r\n \"done\": \"change me\"\r\n}", 21 | "logs": "{}", 22 | "stop": "^c" 23 | }, 24 | "scripts": { 25 | "installation": { 26 | "script": "#!\/bin\/bash\r\n## luvit generic install script\r\n\r\napt update\r\napt install -y git curl jq file unzip\r\n\r\n## get git files\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nif [ \"${USER_UPLOAD}\" == \"true\" ] || [ \"${USER_UPLOAD}\" == \"1\" ]; then\r\n echo -e \"assuming user knows what they are doing have a good day.\"\r\n exit 0\r\nfi\r\n\r\n## add git ending if it's not on the address\r\nif [[ ${GIT_ADDRESS} != *.git ]]; then\r\n GIT_ADDRESS=${GIT_ADDRESS}.git\r\nfi\r\n\r\nif [ -z \"${USERNAME}\" ] && [ -z \"${ACCESS_TOKEN}\" ]; then\r\n echo -e \"using anon api call\"\r\nelse\r\n GIT_ADDRESS=\"https:\/\/${USERNAME}:${ACCESS_TOKEN}@$(echo -e ${GIT_ADDRESS} | cut -d\/ -f3-)\"\r\nfi\r\n\r\n## pull git repo\r\nif [ \"$(ls -A \/mnt\/server)\" ]; then\r\n echo -e \"\/mnt\/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \".git directory exists\"\r\n if [ -f .git\/config ]; then\r\n echo -e \"loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"files found with no git config\"\r\n echo -e \"closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"${GIT_ADDRESS}\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"\/mnt\/server is empty.\\ncloning files into repo\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"cloning default branch\"\r\n git clone ${GIT_ADDRESS} .\r\n else\r\n echo -e \"cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} ${GIT_ADDRESS} .\r\n fi\r\nfi\r\n\r\n## install luvit for install time\r\ncurl -L https:\/\/github.com\/luvit\/lit\/raw\/master\/get-lit.sh | sh\r\n\r\n## Install luvit packages\r\n.\/lit install ${LIT_PACKAGES}\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", 27 | "container": "ghcr.io\/parkervcp\/installers:debian", 28 | "entrypoint": "bash" 29 | } 30 | }, 31 | "variables": [ 32 | { 33 | "name": "Git Username", 34 | "description": "Username to auth with git.", 35 | "env_variable": "USERNAME", 36 | "default_value": "", 37 | "user_viewable": true, 38 | "user_editable": true, 39 | "rules": "nullable|string", 40 | "sort": null, 41 | "field_type": "text" 42 | }, 43 | { 44 | "name": "Git Access Token", 45 | "description": "Password to use with git.\r\n\r\nIt's best practice to use a Personal Access Token.\r\nhttps:\/\/github.com\/settings\/tokens\r\nhttps:\/\/gitlab.com\/-\/profile\/personal_access_tokens", 46 | "env_variable": "ACCESS_TOKEN", 47 | "default_value": "", 48 | "user_viewable": true, 49 | "user_editable": true, 50 | "rules": "nullable|string", 51 | "sort": null, 52 | "field_type": "text" 53 | }, 54 | { 55 | "name": "Git Repo Address", 56 | "description": "GitHub Repo to clone\r\n\r\nI.E. https:\/\/github.com\/parkervcp\/repo_name", 57 | "env_variable": "GIT_ADDRESS", 58 | "default_value": "", 59 | "user_viewable": true, 60 | "user_editable": true, 61 | "rules": "nullable|string", 62 | "sort": null, 63 | "field_type": "text" 64 | }, 65 | { 66 | "name": "User Uploaded Files", 67 | "description": "Skip all the install stuff if you are letting a user upload files.\r\n\r\n0 = false (default)\r\n1 = true", 68 | "env_variable": "USER_UPLOAD", 69 | "default_value": "0", 70 | "user_viewable": true, 71 | "user_editable": false, 72 | "rules": "required|boolean", 73 | "sort": null, 74 | "field_type": "text" 75 | }, 76 | { 77 | "name": "Git Branch", 78 | "description": "What branch to pull from github.\r\n\r\nDefault is blank to pull the repo default branch", 79 | "env_variable": "BRANCH", 80 | "default_value": "", 81 | "user_viewable": true, 82 | "user_editable": true, 83 | "rules": "nullable|string", 84 | "sort": null, 85 | "field_type": "text" 86 | }, 87 | { 88 | "name": "lua file", 89 | "description": "The Lua file to run", 90 | "env_variable": "LUA_FILE", 91 | "default_value": "app.lua", 92 | "user_viewable": true, 93 | "user_editable": true, 94 | "rules": "required|string", 95 | "sort": null, 96 | "field_type": "text" 97 | }, 98 | { 99 | "name": "Lit Packages", 100 | "description": "Lit Packages to install\r\n\r\nexample\r\nSinisterRectus\/discordia lduboeuf\/cjson", 101 | "env_variable": "LIT_PACKAGES", 102 | "default_value": "", 103 | "user_viewable": true, 104 | "user_editable": true, 105 | "rules": "nullable|string", 106 | "sort": null, 107 | "field_type": "text" 108 | } 109 | ] 110 | } -------------------------------------------------------------------------------- /lua/luvit/egg-pterodactyl-luvit-generic.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", 3 | "meta": { 4 | "update_url": null, 5 | "version": "PTDL_v2" 6 | }, 7 | "exported_at": "2024-06-02T14:43:50+00:00", 8 | "name": "luvit generic", 9 | "author": "parker@parkervcp.com", 10 | "description": "A generic luvit egg This will clone a git repo. It defaults to master if no branch is specified.\r\n\r\nSupports the discordia lua framework.", 11 | "features": null, 12 | "docker_images": { 13 | "ghcr.io/parkervcp/yolks:debian": "ghcr.io/parkervcp/yolks:debian" 14 | }, 15 | "file_denylist": [], 16 | "startup": "./luvit {{LUA_FILE}}", 17 | "config": { 18 | "files": "{}", 19 | "logs": "{}", 20 | "startup": "{\r\n \"done\": \"change me\"\r\n}", 21 | "stop": "^c" 22 | }, 23 | "scripts": { 24 | "installation": { 25 | "container": "ghcr.io/parkervcp/installers:debian", 26 | "entrypoint": "bash", 27 | "script": "#!/bin/bash\r\n## luvit generic install script\r\n\r\napt update\r\napt install -y git curl jq file unzip\r\n\r\n## get git files\r\nmkdir -p /mnt/server\r\ncd /mnt/server\r\n\r\nif [ \"${USER_UPLOAD}\" == \"true\" ] || [ \"${USER_UPLOAD}\" == \"1\" ]; then\r\n echo -e \"assuming user knows what they are doing have a good day.\"\r\n exit 0\r\nfi\r\n\r\n## add git ending if it's not on the address\r\nif [[ ${GIT_ADDRESS} != *.git ]]; then\r\n GIT_ADDRESS=${GIT_ADDRESS}.git\r\nfi\r\n\r\nif [ -z \"${USERNAME}\" ] \u0026\u0026 [ -z \"${ACCESS_TOKEN}\" ]; then\r\n echo -e \"using anon api call\"\r\nelse\r\n GIT_ADDRESS=\"https://${USERNAME}:${ACCESS_TOKEN}@$(echo -e ${GIT_ADDRESS} | cut -d/ -f3-)\"\r\nfi\r\n\r\n## pull git repo\r\nif [ \"$(ls -A /mnt/server)\" ]; then\r\n echo -e \"/mnt/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \".git directory exists\"\r\n if [ -f .git/config ]; then\r\n echo -e \"loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"files found with no git config\"\r\n echo -e \"closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"${GIT_ADDRESS}\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"/mnt/server is empty.\\ncloning files into repo\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"cloning default branch\"\r\n git clone ${GIT_ADDRESS} .\r\n else\r\n echo -e \"cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} ${GIT_ADDRESS} .\r\n fi\r\nfi\r\n\r\n## install luvit for install time\r\ncurl -L https://github.com/luvit/lit/raw/master/get-lit.sh | sh\r\n\r\n## Install luvit packages\r\n./lit install ${LIT_PACKAGES}\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"" 28 | } 29 | }, 30 | "variables": [ 31 | { 32 | "name": "Git Username", 33 | "description": "Username to auth with git.", 34 | "env_variable": "USERNAME", 35 | "default_value": "", 36 | "user_viewable": true, 37 | "user_editable": true, 38 | "rules": "nullable|string", 39 | "field_type": "text" 40 | }, 41 | { 42 | "name": "Git Access Token", 43 | "description": "Password to use with git.\r\n\r\nIt's best practice to use a Personal Access Token.\r\nhttps://github.com/settings/tokens\r\nhttps://gitlab.com/-/profile/personal_access_tokens", 44 | "env_variable": "ACCESS_TOKEN", 45 | "default_value": "", 46 | "user_viewable": true, 47 | "user_editable": true, 48 | "rules": "nullable|string", 49 | "field_type": "text" 50 | }, 51 | { 52 | "name": "Git Repo Address", 53 | "description": "GitHub Repo to clone\r\n\r\nI.E. https://github.com/parkervcp/repo_name", 54 | "env_variable": "GIT_ADDRESS", 55 | "default_value": "", 56 | "user_viewable": true, 57 | "user_editable": true, 58 | "rules": "nullable|string", 59 | "field_type": "text" 60 | }, 61 | { 62 | "name": "User Uploaded Files", 63 | "description": "Skip all the install stuff if you are letting a user upload files.\r\n\r\n0 = false (default)\r\n1 = true", 64 | "env_variable": "USER_UPLOAD", 65 | "default_value": "0", 66 | "user_viewable": true, 67 | "user_editable": false, 68 | "rules": "required|boolean", 69 | "field_type": "text" 70 | }, 71 | { 72 | "name": "Git Branch", 73 | "description": "What branch to pull from github.\r\n\r\nDefault is blank to pull the repo default branch", 74 | "env_variable": "BRANCH", 75 | "default_value": "", 76 | "user_viewable": true, 77 | "user_editable": true, 78 | "rules": "nullable|string", 79 | "field_type": "text" 80 | }, 81 | { 82 | "name": "lua file", 83 | "description": "The Lua file to run", 84 | "env_variable": "LUA_FILE", 85 | "default_value": "app.lua", 86 | "user_viewable": true, 87 | "user_editable": true, 88 | "rules": "required|string", 89 | "field_type": "text" 90 | }, 91 | { 92 | "name": "Lit Packages", 93 | "description": "Lit Packages to install\r\n\r\nexample\r\nSinisterRectus/discordia lduboeuf/cjson", 94 | "env_variable": "LIT_PACKAGES", 95 | "default_value": "", 96 | "user_viewable": true, 97 | "user_editable": true, 98 | "rules": "nullable|string", 99 | "field_type": "text" 100 | } 101 | ] 102 | } -------------------------------------------------------------------------------- /nodejs/README.md: -------------------------------------------------------------------------------- 1 | # JavaScript Language Generic 2 | 3 | This egg is designed to run any generic JavaScript application, allowing users to pull their own JavaScript source code from a Github repository. 4 | 5 | There is an option to allow a user to upload their own files to run a bot. 6 | 7 | The startup configs and commands may need changing to actually function properly. 8 | 9 | ## Configuration 10 | 11 | The server will be stuck as `starting` until the egg Start Configuration is modified. You have to edit the text to match something your bot will print for Pterodactyl panel to detect it as running. 12 | ![image](https://user-images.githubusercontent.com/10975908/126516861-c5cb4630-9f25-405c-8199-97bf5ec15a7f.png) 13 | 14 | You can use arrays to have multiple different values when different bots are being used 15 | 16 | ```json 17 | { 18 | "done":[ 19 | "change this text 1", 20 | "change this text 2" 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /nodejs/egg-node-js-generic.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", 3 | "meta": { 4 | "version": "PTDL_v2", 5 | "update_url": null 6 | }, 7 | "exported_at": "2024-06-02T14:43:51+00:00", 8 | "name": "node.js generic", 9 | "author": "parker@parkervcp.com", 10 | "uuid": "fe73af9d-0d33-42f4-9572-fad52eb802f0", 11 | "description": "a generic node.js egg\r\n\r\nThis will clone a git repo. it defaults to master if no branch is specified.\r\n\r\nInstalls the node_modules on install. If you set user_upload then I assume you know what you are doing.", 12 | "features": null, 13 | "docker_images": { 14 | "Nodejs 23": "ghcr.io\/parkervcp\/yolks:nodejs_23", 15 | "Nodejs 22": "ghcr.io\/parkervcp\/yolks:nodejs_22", 16 | "Nodejs 21": "ghcr.io\/parkervcp\/yolks:nodejs_21", 17 | "Nodejs 20": "ghcr.io\/parkervcp\/yolks:nodejs_20", 18 | "Nodejs 19": "ghcr.io\/parkervcp\/yolks:nodejs_19", 19 | "Nodejs 18": "ghcr.io\/parkervcp\/yolks:nodejs_18", 20 | "Nodejs 17": "ghcr.io\/parkervcp\/yolks:nodejs_17", 21 | "Nodejs 16": "ghcr.io\/parkervcp\/yolks:nodejs_16", 22 | "Nodejs 14": "ghcr.io\/parkervcp\/yolks:nodejs_14", 23 | "Nodejs 12": "ghcr.io\/parkervcp\/yolks:nodejs_12" 24 | }, 25 | "file_denylist": [], 26 | "startup": "if [[ -d .git ]] && [[ {{AUTO_UPDATE}} == \"1\" ]]; then git pull; fi; if [[ ! -z ${NODE_PACKAGES} ]]; then \/usr\/local\/bin\/npm install ${NODE_PACKAGES}; fi; if [[ ! -z ${UNNODE_PACKAGES} ]]; then \/usr\/local\/bin\/npm uninstall ${UNNODE_PACKAGES}; fi; if [ -f \/home\/container\/package.json ]; then \/usr\/local\/bin\/npm install; fi; if [[ \"${MAIN_FILE}\" == \"*.js\" ]]; then \/usr\/local\/bin\/node \"\/home\/container\/${MAIN_FILE}\" ${NODE_ARGS}; else \/usr\/local\/bin\/ts-node --esm \"\/home\/container\/${MAIN_FILE}\" ${NODE_ARGS}; fi", 27 | "config": { 28 | "files": "{}", 29 | "startup": "{\r\n \"done\": [\r\n \"change this text 1\",\r\n \"change this text 2\"\r\n ]\r\n}", 30 | "logs": "{}", 31 | "stop": "^C" 32 | }, 33 | "scripts": { 34 | "installation": { 35 | "script": "#!\/bin\/bash\r\n# NodeJS App Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napt update\r\napt install -y git curl jq file unzip make gcc g++ python3 python3-dev python3-pip libtool\r\n\r\necho -e \"updating npm. please wait...\"\r\nnpm install npm@latest --location=global\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nif [ \"${USER_UPLOAD}\" == \"true\" ] || [ \"${USER_UPLOAD}\" == \"1\" ]; then\r\n echo -e \"assuming user knows what they are doing have a good day.\"\r\n exit 0\r\nfi\r\n\r\n## add git ending if it's not on the address\r\nif [[ ${GIT_ADDRESS} != *.git ]]; then\r\n GIT_ADDRESS=${GIT_ADDRESS}.git\r\nfi\r\n\r\nif [ -z \"${USERNAME}\" ] && [ -z \"${ACCESS_TOKEN}\" ]; then\r\n echo -e \"using anon api call\"\r\nelse\r\n GIT_ADDRESS=\"https:\/\/${USERNAME}:${ACCESS_TOKEN}@$(echo -e ${GIT_ADDRESS} | cut -d\/ -f3-)\"\r\nfi\r\n\r\n## pull git js repo\r\nif [ \"$(ls -A \/mnt\/server)\" ]; then\r\n echo -e \"\/mnt\/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \".git directory exists\"\r\n if [ -f .git\/config ]; then\r\n echo -e \"loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"files found with no git config\"\r\n echo -e \"closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"${GIT_ADDRESS}\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"\/mnt\/server is empty.\\ncloning files into repo\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"cloning default branch\"\r\n git clone ${GIT_ADDRESS} .\r\n else\r\n echo -e \"cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} ${GIT_ADDRESS} .\r\n fi\r\n\r\nfi\r\n\r\necho \"Installing nodejs packages\"\r\nif [[ ! -z ${NODE_PACKAGES} ]]; then\r\n \/usr\/local\/bin\/npm install ${NODE_PACKAGES}\r\nfi\r\n\r\nif [ -f \/mnt\/server\/package.json ]; then\r\n \/usr\/local\/bin\/npm install --production\r\nfi\r\n\r\necho -e \"install complete\"\r\nexit 0", 36 | "container": "node:18-bookworm-slim", 37 | "entrypoint": "bash" 38 | } 39 | }, 40 | "variables": [ 41 | { 42 | "name": "Git Repo Address", 43 | "description": "GitHub Repo to clone\r\n\r\nI.E. https:\/\/github.com\/parkervcp\/repo_name", 44 | "env_variable": "GIT_ADDRESS", 45 | "default_value": "", 46 | "user_viewable": true, 47 | "user_editable": true, 48 | "rules": "nullable|string", 49 | "sort": null, 50 | "field_type": "text" 51 | }, 52 | { 53 | "name": "Install Branch", 54 | "description": "The branch to install.", 55 | "env_variable": "BRANCH", 56 | "default_value": "", 57 | "user_viewable": true, 58 | "user_editable": true, 59 | "rules": "nullable|string", 60 | "sort": null, 61 | "field_type": "text" 62 | }, 63 | { 64 | "name": "User Uploaded Files", 65 | "description": "Skip all the install stuff if you are letting a user upload files.\r\n\r\n0 = false (default)\r\n1 = true", 66 | "env_variable": "USER_UPLOAD", 67 | "default_value": "0", 68 | "user_viewable": true, 69 | "user_editable": true, 70 | "rules": "required|boolean", 71 | "sort": null, 72 | "field_type": "text" 73 | }, 74 | { 75 | "name": "Auto Update", 76 | "description": "Pull the latest files on startup when using a GitHub repo.", 77 | "env_variable": "AUTO_UPDATE", 78 | "default_value": "0", 79 | "user_viewable": true, 80 | "user_editable": true, 81 | "rules": "required|boolean", 82 | "sort": null, 83 | "field_type": "text" 84 | }, 85 | { 86 | "name": "Additional Node packages", 87 | "description": "Install additional node packages.\r\n\r\nUse spaces to separate.", 88 | "env_variable": "NODE_PACKAGES", 89 | "default_value": "", 90 | "user_viewable": true, 91 | "user_editable": true, 92 | "rules": "nullable|string", 93 | "sort": null, 94 | "field_type": "text" 95 | }, 96 | { 97 | "name": "Git Username", 98 | "description": "Username to auth with git.", 99 | "env_variable": "USERNAME", 100 | "default_value": "", 101 | "user_viewable": true, 102 | "user_editable": true, 103 | "rules": "nullable|string", 104 | "sort": null, 105 | "field_type": "text" 106 | }, 107 | { 108 | "name": "Git Access Token", 109 | "description": "Password to use with git.\r\n\r\nIt's best practice to use a Personal Access Token.\r\nhttps:\/\/github.com\/settings\/tokens\r\nhttps:\/\/gitlab.com\/-\/profile\/personal_access_tokens", 110 | "env_variable": "ACCESS_TOKEN", 111 | "default_value": "", 112 | "user_viewable": true, 113 | "user_editable": true, 114 | "rules": "nullable|string", 115 | "sort": null, 116 | "field_type": "text" 117 | }, 118 | { 119 | "name": "Uninstall Node packages", 120 | "description": "Uninstall node packages.\r\n\r\nUse spaces to separate.", 121 | "env_variable": "UNNODE_PACKAGES", 122 | "default_value": "", 123 | "user_viewable": true, 124 | "user_editable": true, 125 | "rules": "nullable|string", 126 | "sort": null, 127 | "field_type": "text" 128 | }, 129 | { 130 | "name": "Main file", 131 | "description": "The file that starts the app.\r\nCan be .js and .ts", 132 | "env_variable": "MAIN_FILE", 133 | "default_value": "index.js", 134 | "user_viewable": true, 135 | "user_editable": true, 136 | "rules": "required|string|max:16", 137 | "sort": null, 138 | "field_type": "text" 139 | }, 140 | { 141 | "name": "Additional Arguments.", 142 | "description": "Any extra arguments for nodejs or ts-node", 143 | "env_variable": "NODE_ARGS", 144 | "default_value": "", 145 | "user_viewable": true, 146 | "user_editable": true, 147 | "rules": "nullable|string|max:64", 148 | "sort": null, 149 | "field_type": "text" 150 | } 151 | ] 152 | } 153 | -------------------------------------------------------------------------------- /nodejs/egg-pterodactyl-node-js-generic.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", 3 | "meta": { 4 | "update_url": null, 5 | "version": "PTDL_v2" 6 | }, 7 | "exported_at": "2024-06-02T14:43:51+00:00", 8 | "name": "node.js generic", 9 | "author": "parker@parkervcp.com", 10 | "description": "a generic node.js egg\r\n\r\nThis will clone a git repo. it defaults to master if no branch is specified.\r\n\r\nInstalls the node_modules on install. If you set user_upload then I assume you know what you are doing.", 11 | "features": null, 12 | "docker_images": { 13 | "Nodejs 12": "ghcr.io/parkervcp/yolks:nodejs_12", 14 | "Nodejs 14": "ghcr.io/parkervcp/yolks:nodejs_14", 15 | "Nodejs 16": "ghcr.io/parkervcp/yolks:nodejs_16", 16 | "Nodejs 17": "ghcr.io/parkervcp/yolks:nodejs_17", 17 | "Nodejs 18": "ghcr.io/parkervcp/yolks:nodejs_18", 18 | "Nodejs 19": "ghcr.io/parkervcp/yolks:nodejs_19", 19 | "Nodejs 20": "ghcr.io/parkervcp/yolks:nodejs_20", 20 | "Nodejs 21": "ghcr.io/parkervcp/yolks:nodejs_21", 21 | "Nodejs 22": "ghcr.io/parkervcp/yolks:nodejs_22", 22 | "Nodejs 23": "ghcr.io/parkervcp/yolks:nodejs_23" 23 | }, 24 | "file_denylist": [], 25 | "startup": "if [[ -d .git ]] \u0026\u0026 [[ {{AUTO_UPDATE}} == \"1\" ]]; then git pull; fi; if [[ ! -z ${NODE_PACKAGES} ]]; then /usr/local/bin/npm install ${NODE_PACKAGES}; fi; if [[ ! -z ${UNNODE_PACKAGES} ]]; then /usr/local/bin/npm uninstall ${UNNODE_PACKAGES}; fi; if [ -f /home/container/package.json ]; then /usr/local/bin/npm install; fi; if [[ \"${MAIN_FILE}\" == \"*.js\" ]]; then /usr/local/bin/node \"/home/container/${MAIN_FILE}\" ${NODE_ARGS}; else /usr/local/bin/ts-node --esm \"/home/container/${MAIN_FILE}\" ${NODE_ARGS}; fi", 26 | "config": { 27 | "files": "{}", 28 | "logs": "{}", 29 | "startup": "{\r\n \"done\": [\r\n \"change this text 1\",\r\n \"change this text 2\"\r\n ]\r\n}", 30 | "stop": "^C" 31 | }, 32 | "scripts": { 33 | "installation": { 34 | "container": "node:18-bookworm-slim", 35 | "entrypoint": "bash", 36 | "script": "#!/bin/bash\r\n# NodeJS App Installation Script\r\n#\r\n# Server Files: /mnt/server\r\napt update\r\napt install -y git curl jq file unzip make gcc g++ python3 python3-dev python3-pip libtool\r\n\r\necho -e \"updating npm. please wait...\"\r\nnpm install npm@latest --location=global\r\n\r\nmkdir -p /mnt/server\r\ncd /mnt/server\r\n\r\nif [ \"${USER_UPLOAD}\" == \"true\" ] || [ \"${USER_UPLOAD}\" == \"1\" ]; then\r\n echo -e \"assuming user knows what they are doing have a good day.\"\r\n exit 0\r\nfi\r\n\r\n## add git ending if it's not on the address\r\nif [[ ${GIT_ADDRESS} != *.git ]]; then\r\n GIT_ADDRESS=${GIT_ADDRESS}.git\r\nfi\r\n\r\nif [ -z \"${USERNAME}\" ] \u0026\u0026 [ -z \"${ACCESS_TOKEN}\" ]; then\r\n echo -e \"using anon api call\"\r\nelse\r\n GIT_ADDRESS=\"https://${USERNAME}:${ACCESS_TOKEN}@$(echo -e ${GIT_ADDRESS} | cut -d/ -f3-)\"\r\nfi\r\n\r\n## pull git js repo\r\nif [ \"$(ls -A /mnt/server)\" ]; then\r\n echo -e \"/mnt/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \".git directory exists\"\r\n if [ -f .git/config ]; then\r\n echo -e \"loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"files found with no git config\"\r\n echo -e \"closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"${GIT_ADDRESS}\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"/mnt/server is empty.\\ncloning files into repo\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"cloning default branch\"\r\n git clone ${GIT_ADDRESS} .\r\n else\r\n echo -e \"cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} ${GIT_ADDRESS} .\r\n fi\r\n\r\nfi\r\n\r\necho \"Installing nodejs packages\"\r\nif [[ ! -z ${NODE_PACKAGES} ]]; then\r\n /usr/local/bin/npm install ${NODE_PACKAGES}\r\nfi\r\n\r\nif [ -f /mnt/server/package.json ]; then\r\n /usr/local/bin/npm install --production\r\nfi\r\n\r\necho -e \"install complete\"\r\nexit 0" 37 | } 38 | }, 39 | "variables": [ 40 | { 41 | "name": "Git Repo Address", 42 | "description": "GitHub Repo to clone\r\n\r\nI.E. https://github.com/parkervcp/repo_name", 43 | "env_variable": "GIT_ADDRESS", 44 | "default_value": "", 45 | "user_viewable": true, 46 | "user_editable": true, 47 | "rules": "nullable|string", 48 | "field_type": "text" 49 | }, 50 | { 51 | "name": "Install Branch", 52 | "description": "The branch to install.", 53 | "env_variable": "BRANCH", 54 | "default_value": "", 55 | "user_viewable": true, 56 | "user_editable": true, 57 | "rules": "nullable|string", 58 | "field_type": "text" 59 | }, 60 | { 61 | "name": "User Uploaded Files", 62 | "description": "Skip all the install stuff if you are letting a user upload files.\r\n\r\n0 = false (default)\r\n1 = true", 63 | "env_variable": "USER_UPLOAD", 64 | "default_value": "0", 65 | "user_viewable": true, 66 | "user_editable": true, 67 | "rules": "required|boolean", 68 | "field_type": "text" 69 | }, 70 | { 71 | "name": "Auto Update", 72 | "description": "Pull the latest files on startup when using a GitHub repo.", 73 | "env_variable": "AUTO_UPDATE", 74 | "default_value": "0", 75 | "user_viewable": true, 76 | "user_editable": true, 77 | "rules": "required|boolean", 78 | "field_type": "text" 79 | }, 80 | { 81 | "name": "Additional Node packages", 82 | "description": "Install additional node packages.\r\n\r\nUse spaces to separate.", 83 | "env_variable": "NODE_PACKAGES", 84 | "default_value": "", 85 | "user_viewable": true, 86 | "user_editable": true, 87 | "rules": "nullable|string", 88 | "field_type": "text" 89 | }, 90 | { 91 | "name": "Git Username", 92 | "description": "Username to auth with git.", 93 | "env_variable": "USERNAME", 94 | "default_value": "", 95 | "user_viewable": true, 96 | "user_editable": true, 97 | "rules": "nullable|string", 98 | "field_type": "text" 99 | }, 100 | { 101 | "name": "Git Access Token", 102 | "description": "Password to use with git.\r\n\r\nIt's best practice to use a Personal Access Token.\r\nhttps://github.com/settings/tokens\r\nhttps://gitlab.com/-/profile/personal_access_tokens", 103 | "env_variable": "ACCESS_TOKEN", 104 | "default_value": "", 105 | "user_viewable": true, 106 | "user_editable": true, 107 | "rules": "nullable|string", 108 | "field_type": "text" 109 | }, 110 | { 111 | "name": "Uninstall Node packages", 112 | "description": "Uninstall node packages.\r\n\r\nUse spaces to separate.", 113 | "env_variable": "UNNODE_PACKAGES", 114 | "default_value": "", 115 | "user_viewable": true, 116 | "user_editable": true, 117 | "rules": "nullable|string", 118 | "field_type": "text" 119 | }, 120 | { 121 | "name": "Main file", 122 | "description": "The file that starts the app.\r\nCan be .js and .ts", 123 | "env_variable": "MAIN_FILE", 124 | "default_value": "index.js", 125 | "user_viewable": true, 126 | "user_editable": true, 127 | "rules": "required|string|max:16", 128 | "field_type": "text" 129 | }, 130 | { 131 | "name": "Additional Arguments.", 132 | "description": "Any extra arguments for nodejs or ts-node", 133 | "env_variable": "NODE_ARGS", 134 | "default_value": "", 135 | "user_viewable": true, 136 | "user_editable": true, 137 | "rules": "nullable|string|max:64", 138 | "field_type": "text" 139 | } 140 | ] 141 | } 142 | -------------------------------------------------------------------------------- /nodemon/README.md: -------------------------------------------------------------------------------- 1 | # Nodemon (JavaScript & TypeScript) 2 | 3 | Tired of manually restarting your bot? Nodemon will do it by itself. 4 | 5 | Nodemon is a tool that helps develop node.js based applications by automatically restarting the node application when file changes in the directory are detected. Nodemon does not require any additional changes to your code or method of development. 6 | 7 | This egg is designed to run any generic Javascript application, allowing users to pull their own JavaScript or TypeScript source code from a Github repository. 8 | 9 | There is an option to allow a user to upload their own files to run a bot. 10 | 11 | The startup configs and commands may need changing to actually function properly. 12 | 13 | ## Configuration 14 | 15 | The server will be stuck as `starting` until the egg Start Configuration is modified. You have to edit the text to match something your bot will print for Pterodactyl panel to detect it as running. 16 | ![image](https://user-images.githubusercontent.com/10975908/126516861-c5cb4630-9f25-405c-8199-97bf5ec15a7f.png) 17 | 18 | You can use arrays to have multiple different values when different bots are being used 19 | 20 | ```json 21 | { 22 | "done":[ 23 | "change this text 1", 24 | "change this text 2" 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /nodemon/egg-nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", 3 | "meta": { 4 | "version": "PTDL_v2", 5 | "update_url": null 6 | }, 7 | "exported_at": "2024-06-02T14:43:52+00:00", 8 | "name": "nodemon", 9 | "author": "nick@blackforthosting.com", 10 | "uuid": "c145da9a-f00a-440c-a7b3-d840ff4081ef", 11 | "description": "Nodemon javascript egg that automatically restarts the node application when file changes in the directory are detected\r\n\r\nThis will clone a git repo for a bot. it defaults to master if no branch is specified.\r\n\r\nInstalls the node_modules on install. If you set user_upload, then I assume you know what you are doing.", 12 | "features": null, 13 | "docker_images": { 14 | "ghcr.io\/parkervcp\/yolks:nodejs_23": "ghcr.io\/parkervcp\/yolks:nodejs_23", 15 | "ghcr.io\/parkervcp\/yolks:nodejs_22": "ghcr.io\/parkervcp\/yolks:nodejs_22", 16 | "ghcr.io\/parkervcp\/yolks:nodejs_21": "ghcr.io\/parkervcp\/yolks:nodejs_21", 17 | "ghcr.io\/parkervcp\/yolks:nodejs_20": "ghcr.io\/parkervcp\/yolks:nodejs_20", 18 | "ghcr.io\/parkervcp\/yolks:nodejs_19": "ghcr.io\/parkervcp\/yolks:nodejs_19", 19 | "ghcr.io\/parkervcp\/yolks:nodejs_18": "ghcr.io\/parkervcp\/yolks:nodejs_18", 20 | "ghcr.io\/parkervcp\/yolks:nodejs_17": "ghcr.io\/parkervcp\/yolks:nodejs_17", 21 | "ghcr.io\/parkervcp\/yolks:nodejs_16": "ghcr.io\/parkervcp\/yolks:nodejs_16", 22 | "ghcr.io\/parkervcp\/yolks:nodejs_15": "ghcr.io\/parkervcp\/yolks:nodejs_15", 23 | "ghcr.io\/parkervcp\/yolks:nodejs_14": "ghcr.io\/parkervcp\/yolks:nodejs_14", 24 | "ghcr.io\/parkervcp\/yolks:nodejs_12": "ghcr.io\/parkervcp\/yolks:nodejs_12" 25 | }, 26 | "file_denylist": [], 27 | "startup": "npm install nodemon; if [[ -d .git ]] && [[ {{AUTO_UPDATE}} == \"1\" ]]; then git pull; fi; if [[ ! -z ${NODE_PACKAGES} ]]; then \/usr\/local\/bin\/npm install ${NODE_PACKAGES}; fi; if [[ ! -z ${UNNODE_PACKAGES} ]]; then \/usr\/local\/bin\/npm uninstall ${UNNODE_PACKAGES}; fi; if [ -f \/home\/container\/package.json ]; then \/usr\/local\/bin\/npm install --production; fi; \/home\/container\/node_modules\/nodemon\/bin\/nodemon.js \/home\/container\/{{BOT_JS_FILE}}", 28 | "config": { 29 | "files": "{}", 30 | "startup": "{\r\n \"done\": \"change this text\"\r\n}", 31 | "logs": "{}", 32 | "stop": "^C" 33 | }, 34 | "scripts": { 35 | "installation": { 36 | "script": "#!\/bin\/bash\r\n# NodeJS Bot Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napt update\r\napt install -y git curl jq file unzip make gcc g++ python python-dev libtool\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nif [ \"${USER_UPLOAD}\" == \"true\" ] || [ \"${USER_UPLOAD}\" == \"1\" ]; then\r\n echo -e \"assuming user knows what they are doing have a good day.\"\r\n exit 0\r\nfi\r\n\r\n## add git ending if it's not on the address\r\nif [[ ${GIT_ADDRESS} != *.git ]]; then\r\n GIT_ADDRESS=${GIT_ADDRESS}.git\r\nfi\r\n\r\nif [ -z \"${USERNAME}\" ] && [ -z \"${ACCESS_TOKEN}\" ]; then\r\n echo -e \"using anon api call\"\r\nelse\r\n GIT_ADDRESS=\"https:\/\/${USERNAME}:${ACCESS_TOKEN}@$(echo -e ${GIT_ADDRESS} | cut -d\/ -f3-)\"\r\nfi\r\n\r\n## pull git js bot repo\r\nif [ \"$(ls -A \/mnt\/server)\" ]; then\r\n echo -e \"\/mnt\/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \".git directory exists\"\r\n if [ -f .git\/config ]; then\r\n echo -e \"loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"files found with no git config\"\r\n echo -e \"closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"${GIT_ADDRESS}\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"\/mnt\/server is empty.\\ncloning files into repo\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"cloning default branch\"\r\n git clone ${GIT_ADDRESS} .\r\n else\r\n echo -e \"cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} ${GIT_ADDRESS} .\r\n fi\r\n\r\nfi\r\n\r\necho \"Installing nodejs packages\"\r\nif [[ ! -z ${NODE_PACKAGES} ]]; then\r\n \/usr\/local\/bin\/npm install ${NODE_PACKAGES}\r\nfi\r\n\r\nif [ -f \/mnt\/server\/package.json ]; then\r\n \/usr\/local\/bin\/npm install --production\r\nfi\r\n\r\necho -e \"install complete\"\r\nexit 0", 37 | "container": "node:lts-bookworm", 38 | "entrypoint": "bash" 39 | } 40 | }, 41 | "variables": [ 42 | { 43 | "name": "Git Repo Address", 44 | "description": "GitHub Repo to clone\r\n\r\nI.E. https:\/\/github.com\/nickdevnl\/repo_name", 45 | "env_variable": "GIT_ADDRESS", 46 | "default_value": "", 47 | "user_viewable": true, 48 | "user_editable": true, 49 | "rules": "nullable|string", 50 | "sort": null, 51 | "field_type": "text" 52 | }, 53 | { 54 | "name": "Install Branch", 55 | "description": "The branch of the bot to install.", 56 | "env_variable": "BRANCH", 57 | "default_value": "", 58 | "user_viewable": true, 59 | "user_editable": true, 60 | "rules": "nullable|string", 61 | "sort": null, 62 | "field_type": "text" 63 | }, 64 | { 65 | "name": "User Uploaded Files", 66 | "description": "Skip all the install stuff if you are letting a user upload files.\r\n\r\n0 = false (default)\r\n1 = true", 67 | "env_variable": "USER_UPLOAD", 68 | "default_value": "0", 69 | "user_viewable": true, 70 | "user_editable": true, 71 | "rules": "required|boolean", 72 | "sort": null, 73 | "field_type": "text" 74 | }, 75 | { 76 | "name": "Auto Update", 77 | "description": "Pull the latest files on startup when using a GitHub repo. You must have .git folder, reinstall if you are missing it.", 78 | "env_variable": "AUTO_UPDATE", 79 | "default_value": "0", 80 | "user_viewable": true, 81 | "user_editable": true, 82 | "rules": "required|boolean", 83 | "sort": null, 84 | "field_type": "text" 85 | }, 86 | { 87 | "name": "Bot js file", 88 | "description": "The file that starts the bot.", 89 | "env_variable": "BOT_JS_FILE", 90 | "default_value": "index.js", 91 | "user_viewable": true, 92 | "user_editable": true, 93 | "rules": "required|string", 94 | "sort": null, 95 | "field_type": "text" 96 | }, 97 | { 98 | "name": "Additional Node packages", 99 | "description": "Install additional node packages.\r\n\r\nUse spaces to separate.", 100 | "env_variable": "NODE_PACKAGES", 101 | "default_value": "", 102 | "user_viewable": true, 103 | "user_editable": true, 104 | "rules": "nullable|string", 105 | "sort": null, 106 | "field_type": "text" 107 | }, 108 | { 109 | "name": "Uninstall Node packages", 110 | "description": "Uninstall node packages.\r\n\r\nUse spaces to separate.", 111 | "env_variable": "UNNODE_PACKAGES", 112 | "default_value": "", 113 | "user_viewable": true, 114 | "user_editable": true, 115 | "rules": "nullable|string", 116 | "sort": null, 117 | "field_type": "text" 118 | }, 119 | { 120 | "name": "Git Username", 121 | "description": "Username to auth with git.", 122 | "env_variable": "USERNAME", 123 | "default_value": "", 124 | "user_viewable": true, 125 | "user_editable": true, 126 | "rules": "nullable|string", 127 | "sort": null, 128 | "field_type": "text" 129 | }, 130 | { 131 | "name": "Git Access Token", 132 | "description": "Password to use with git.\r\n\r\nIt's best practice to use a Personal Access Token.\r\nhttps:\/\/github.com\/settings\/tokens\r\nhttps:\/\/gitlab.com\/-\/profile\/personal_access_tokens", 133 | "env_variable": "ACCESS_TOKEN", 134 | "default_value": "", 135 | "user_viewable": true, 136 | "user_editable": true, 137 | "rules": "nullable|string", 138 | "sort": null, 139 | "field_type": "text" 140 | } 141 | ] 142 | } 143 | -------------------------------------------------------------------------------- /nodemon/egg-pterodactyl-nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", 3 | "meta": { 4 | "update_url": null, 5 | "version": "PTDL_v2" 6 | }, 7 | "exported_at": "2024-06-02T14:43:52+00:00", 8 | "name": "nodemon", 9 | "author": "nick@blackforthosting.com", 10 | "description": "Nodemon javascript egg that automatically restarts the node application when file changes in the directory are detected\r\n\r\nThis will clone a git repo for a bot. it defaults to master if no branch is specified.\r\n\r\nInstalls the node_modules on install. If you set user_upload, then I assume you know what you are doing.", 11 | "features": null, 12 | "docker_images": { 13 | "ghcr.io/parkervcp/yolks:nodejs_12": "ghcr.io/parkervcp/yolks:nodejs_12", 14 | "ghcr.io/parkervcp/yolks:nodejs_14": "ghcr.io/parkervcp/yolks:nodejs_14", 15 | "ghcr.io/parkervcp/yolks:nodejs_15": "ghcr.io/parkervcp/yolks:nodejs_15", 16 | "ghcr.io/parkervcp/yolks:nodejs_16": "ghcr.io/parkervcp/yolks:nodejs_16", 17 | "ghcr.io/parkervcp/yolks:nodejs_17": "ghcr.io/parkervcp/yolks:nodejs_17", 18 | "ghcr.io/parkervcp/yolks:nodejs_18": "ghcr.io/parkervcp/yolks:nodejs_18", 19 | "ghcr.io/parkervcp/yolks:nodejs_19": "ghcr.io/parkervcp/yolks:nodejs_19", 20 | "ghcr.io/parkervcp/yolks:nodejs_20": "ghcr.io/parkervcp/yolks:nodejs_20", 21 | "ghcr.io/parkervcp/yolks:nodejs_21": "ghcr.io/parkervcp/yolks:nodejs_21", 22 | "ghcr.io/parkervcp/yolks:nodejs_22": "ghcr.io/parkervcp/yolks:nodejs_22", 23 | "ghcr.io/parkervcp/yolks:nodejs_23": "ghcr.io/parkervcp/yolks:nodejs_23" 24 | }, 25 | "file_denylist": [], 26 | "startup": "npm install nodemon; if [[ -d .git ]] \u0026\u0026 [[ {{AUTO_UPDATE}} == \"1\" ]]; then git pull; fi; if [[ ! -z ${NODE_PACKAGES} ]]; then /usr/local/bin/npm install ${NODE_PACKAGES}; fi; if [[ ! -z ${UNNODE_PACKAGES} ]]; then /usr/local/bin/npm uninstall ${UNNODE_PACKAGES}; fi; if [ -f /home/container/package.json ]; then /usr/local/bin/npm install --production; fi; /home/container/node_modules/nodemon/bin/nodemon.js /home/container/{{BOT_JS_FILE}}", 27 | "config": { 28 | "files": "{}", 29 | "logs": "{}", 30 | "startup": "{\r\n \"done\": \"change this text\"\r\n}", 31 | "stop": "^C" 32 | }, 33 | "scripts": { 34 | "installation": { 35 | "container": "node:lts-bookworm", 36 | "entrypoint": "bash", 37 | "script": "#!/bin/bash\r\n# NodeJS Bot Installation Script\r\n#\r\n# Server Files: /mnt/server\r\napt update\r\napt install -y git curl jq file unzip make gcc g++ python python-dev libtool\r\n\r\nmkdir -p /mnt/server\r\ncd /mnt/server\r\n\r\nif [ \"${USER_UPLOAD}\" == \"true\" ] || [ \"${USER_UPLOAD}\" == \"1\" ]; then\r\n echo -e \"assuming user knows what they are doing have a good day.\"\r\n exit 0\r\nfi\r\n\r\n## add git ending if it's not on the address\r\nif [[ ${GIT_ADDRESS} != *.git ]]; then\r\n GIT_ADDRESS=${GIT_ADDRESS}.git\r\nfi\r\n\r\nif [ -z \"${USERNAME}\" ] \u0026\u0026 [ -z \"${ACCESS_TOKEN}\" ]; then\r\n echo -e \"using anon api call\"\r\nelse\r\n GIT_ADDRESS=\"https://${USERNAME}:${ACCESS_TOKEN}@$(echo -e ${GIT_ADDRESS} | cut -d/ -f3-)\"\r\nfi\r\n\r\n## pull git js bot repo\r\nif [ \"$(ls -A /mnt/server)\" ]; then\r\n echo -e \"/mnt/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \".git directory exists\"\r\n if [ -f .git/config ]; then\r\n echo -e \"loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"files found with no git config\"\r\n echo -e \"closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"${GIT_ADDRESS}\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"/mnt/server is empty.\\ncloning files into repo\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"cloning default branch\"\r\n git clone ${GIT_ADDRESS} .\r\n else\r\n echo -e \"cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} ${GIT_ADDRESS} .\r\n fi\r\n\r\nfi\r\n\r\necho \"Installing nodejs packages\"\r\nif [[ ! -z ${NODE_PACKAGES} ]]; then\r\n /usr/local/bin/npm install ${NODE_PACKAGES}\r\nfi\r\n\r\nif [ -f /mnt/server/package.json ]; then\r\n /usr/local/bin/npm install --production\r\nfi\r\n\r\necho -e \"install complete\"\r\nexit 0" 38 | } 39 | }, 40 | "variables": [ 41 | { 42 | "name": "Git Repo Address", 43 | "description": "GitHub Repo to clone\r\n\r\nI.E. https://github.com/nickdevnl/repo_name", 44 | "env_variable": "GIT_ADDRESS", 45 | "default_value": "", 46 | "user_viewable": true, 47 | "user_editable": true, 48 | "rules": "nullable|string", 49 | "field_type": "text" 50 | }, 51 | { 52 | "name": "Install Branch", 53 | "description": "The branch of the bot to install.", 54 | "env_variable": "BRANCH", 55 | "default_value": "", 56 | "user_viewable": true, 57 | "user_editable": true, 58 | "rules": "nullable|string", 59 | "field_type": "text" 60 | }, 61 | { 62 | "name": "User Uploaded Files", 63 | "description": "Skip all the install stuff if you are letting a user upload files.\r\n\r\n0 = false (default)\r\n1 = true", 64 | "env_variable": "USER_UPLOAD", 65 | "default_value": "0", 66 | "user_viewable": true, 67 | "user_editable": true, 68 | "rules": "required|boolean", 69 | "field_type": "text" 70 | }, 71 | { 72 | "name": "Auto Update", 73 | "description": "Pull the latest files on startup when using a GitHub repo. You must have .git folder, reinstall if you are missing it.", 74 | "env_variable": "AUTO_UPDATE", 75 | "default_value": "0", 76 | "user_viewable": true, 77 | "user_editable": true, 78 | "rules": "required|boolean", 79 | "field_type": "text" 80 | }, 81 | { 82 | "name": "Bot js file", 83 | "description": "The file that starts the bot.", 84 | "env_variable": "BOT_JS_FILE", 85 | "default_value": "index.js", 86 | "user_viewable": true, 87 | "user_editable": true, 88 | "rules": "required|string", 89 | "field_type": "text" 90 | }, 91 | { 92 | "name": "Additional Node packages", 93 | "description": "Install additional node packages.\r\n\r\nUse spaces to separate.", 94 | "env_variable": "NODE_PACKAGES", 95 | "default_value": "", 96 | "user_viewable": true, 97 | "user_editable": true, 98 | "rules": "nullable|string", 99 | "field_type": "text" 100 | }, 101 | { 102 | "name": "Uninstall Node packages", 103 | "description": "Uninstall node packages.\r\n\r\nUse spaces to separate.", 104 | "env_variable": "UNNODE_PACKAGES", 105 | "default_value": "", 106 | "user_viewable": true, 107 | "user_editable": true, 108 | "rules": "nullable|string", 109 | "field_type": "text" 110 | }, 111 | { 112 | "name": "Git Username", 113 | "description": "Username to auth with git.", 114 | "env_variable": "USERNAME", 115 | "default_value": "", 116 | "user_viewable": true, 117 | "user_editable": true, 118 | "rules": "nullable|string", 119 | "field_type": "text" 120 | }, 121 | { 122 | "name": "Git Access Token", 123 | "description": "Password to use with git.\r\n\r\nIt's best practice to use a Personal Access Token.\r\nhttps://github.com/settings/tokens\r\nhttps://gitlab.com/-/profile/personal_access_tokens", 124 | "env_variable": "ACCESS_TOKEN", 125 | "default_value": "", 126 | "user_viewable": true, 127 | "user_editable": true, 128 | "rules": "nullable|string", 129 | "field_type": "text" 130 | } 131 | ] 132 | } 133 | -------------------------------------------------------------------------------- /python/README.md: -------------------------------------------------------------------------------- 1 | # Python Language Generic 2 | 3 | This egg is designed to run any generic Python application, allowing users to pull their own Python source code from a Github repository. 4 | 5 | There is an option to allow a user to upload their own files to run a bot. 6 | 7 | The startup configs and commands may need changing to actually function properly. 8 | 9 | ## Configuration 10 | 11 | The server will be stuck as `starting` until the egg Start Configuration is modified. You have to edit the text to match something your bot will print for Pterodactyl panel to detect it as running. 12 | ![image](https://user-images.githubusercontent.com/10975908/126516861-c5cb4630-9f25-405c-8199-97bf5ec15a7f.png) 13 | 14 | You can use arrays to have multiple different values when different bots are being used 15 | 16 | ```json 17 | { 18 | "done":[ 19 | "change this text 1", 20 | "change this text 2" 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /python/egg-pterodactyl-python-generic.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", 3 | "meta": { 4 | "version": "PTDL_v2", 5 | "update_url": null 6 | }, 7 | "exported_at": "2024-12-28T09:14:31+00:00", 8 | "name": "python generic", 9 | "author": "parker@parkervcp.com", 10 | "description": "A Generic Python Egg for Pterodactyl\r\n\r\nTested with: https:\/\/github.com\/Ispira\/pixel-bot", 11 | "features": [], 12 | "docker_images": { 13 | "Python 3.13": "ghcr.io\/parkervcp\/yolks:python_3.13", 14 | "Python 3.12": "ghcr.io\/parkervcp\/yolks:python_3.12", 15 | "Python 3.11": "ghcr.io\/parkervcp\/yolks:python_3.11", 16 | "Python 3.10": "ghcr.io\/parkervcp\/yolks:python_3.10", 17 | "Python 3.9": "ghcr.io\/parkervcp\/yolks:python_3.9", 18 | "Python 3.8": "ghcr.io\/parkervcp\/yolks:python_3.8", 19 | "Python 3.7": "ghcr.io\/parkervcp\/yolks:python_3.7", 20 | "Python 2.7": "ghcr.io\/parkervcp\/yolks:python_2.7" 21 | }, 22 | "file_denylist": [], 23 | "startup": "if [[ -d .git ]] && [[ \"{{AUTO_UPDATE}}\" == \"1\" ]]; then git pull; fi; if [[ ! -z \"{{PY_PACKAGES}}\" ]]; then pip install -U --prefix .local {{PY_PACKAGES}}; fi; if [[ -f \/home\/container\/${REQUIREMENTS_FILE} ]]; then pip install -U --prefix .local -r ${REQUIREMENTS_FILE}; fi; \/usr\/local\/bin\/python \/home\/container\/{{PY_FILE}}", 24 | "config": { 25 | "files": "{}", 26 | "startup": "{\r\n \"done\": \"change this part\"\r\n}", 27 | "logs": "{}", 28 | "stop": "^C" 29 | }, 30 | "scripts": { 31 | "installation": { 32 | "script": "#!\/bin\/bash\r\n# Python App Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napt update\r\napt install -y git curl jq file unzip make gcc g++ libtool\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nif [ \"${USER_UPLOAD}\" == \"true\" ] || [ \"${USER_UPLOAD}\" == \"1\" ]; then\r\n echo -e \"assuming user knows what they are doing have a good day.\"\r\n exit 0\r\nfi\r\n\r\n## add git ending if it's not on the address\r\nif [[ ${GIT_ADDRESS} != *.git ]]; then\r\n GIT_ADDRESS=${GIT_ADDRESS}.git\r\nfi\r\n\r\nif [ -z \"${USERNAME}\" ] && [ -z \"${ACCESS_TOKEN}\" ]; then\r\n echo -e \"using anon api call\"\r\nelse\r\n GIT_ADDRESS=\"https:\/\/${USERNAME}:${ACCESS_TOKEN}@$(echo -e ${GIT_ADDRESS} | cut -d\/ -f3-)\"\r\nfi\r\n\r\n## pull git python repo\r\nif [ \"$(ls -A \/mnt\/server)\" ]; then\r\n echo -e \"\/mnt\/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \".git directory exists\"\r\n if [ -f .git\/config ]; then\r\n echo -e \"loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"files found with no git config\"\r\n echo -e \"closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"${GIT_ADDRESS}\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"\/mnt\/server is empty.\\ncloning files into repo\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"cloning default branch\"\r\n git clone ${GIT_ADDRESS} .\r\n else\r\n echo -e \"cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} ${GIT_ADDRESS} .\r\n fi\r\n\r\nfi\r\n\r\nexport HOME=\/mnt\/server\r\n\r\necho \"Installing python requirements into folder\"\r\nif [[ ! -z ${PY_PACKAGES} ]]; then\r\n pip install -U --prefix .local ${PY_PACKAGES}\r\nfi\r\n\r\nif [ -f \/mnt\/server\/requirements.txt ]; then\r\n pip install -U --prefix .local -r ${REQUIREMENTS_FILE}\r\nfi\r\n\r\necho -e \"install complete\"\r\nexit 0", 33 | "container": "python:3.12-slim-bookworm", 34 | "entrypoint": "bash" 35 | } 36 | }, 37 | "variables": [ 38 | { 39 | "name": "Git Repo Address", 40 | "description": "Git repo to clone\r\n\r\nI.E. https:\/\/github.com\/parkervcp\/repo_name", 41 | "env_variable": "GIT_ADDRESS", 42 | "default_value": "", 43 | "user_viewable": true, 44 | "user_editable": true, 45 | "rules": "nullable|string", 46 | "field_type": "text" 47 | }, 48 | { 49 | "name": "Git Branch", 50 | "description": "What branch to pull from github.\r\n\r\nDefault is blank to pull the repo default branch", 51 | "env_variable": "BRANCH", 52 | "default_value": "", 53 | "user_viewable": true, 54 | "user_editable": true, 55 | "rules": "nullable|string", 56 | "field_type": "text" 57 | }, 58 | { 59 | "name": "User Uploaded Files", 60 | "description": "Skip all the install stuff if you are letting a user upload files.\r\n\r\n0 = false (default)\r\n1 = true", 61 | "env_variable": "USER_UPLOAD", 62 | "default_value": "0", 63 | "user_viewable": true, 64 | "user_editable": true, 65 | "rules": "required|boolean", 66 | "field_type": "text" 67 | }, 68 | { 69 | "name": "Auto Update", 70 | "description": "Pull the latest files on startup when using a GitHub repo.", 71 | "env_variable": "AUTO_UPDATE", 72 | "default_value": "0", 73 | "user_viewable": true, 74 | "user_editable": true, 75 | "rules": "required|boolean", 76 | "field_type": "text" 77 | }, 78 | { 79 | "name": "App py file", 80 | "description": "The file that starts the App.", 81 | "env_variable": "PY_FILE", 82 | "default_value": "app.py", 83 | "user_viewable": true, 84 | "user_editable": true, 85 | "rules": "required|string", 86 | "field_type": "text" 87 | }, 88 | { 89 | "name": "Additional Python packages", 90 | "description": "Install additional python packages.\r\n\r\nUse spaces to separate", 91 | "env_variable": "PY_PACKAGES", 92 | "default_value": "", 93 | "user_viewable": true, 94 | "user_editable": true, 95 | "rules": "nullable|string", 96 | "field_type": "text" 97 | }, 98 | { 99 | "name": "Git Username", 100 | "description": "Username to auth with git.", 101 | "env_variable": "USERNAME", 102 | "default_value": "", 103 | "user_viewable": true, 104 | "user_editable": true, 105 | "rules": "nullable|string", 106 | "field_type": "text" 107 | }, 108 | { 109 | "name": "Git Access Token", 110 | "description": "Password to use with git.\r\n\r\nIt's best practice to use a Personal Access Token.\r\nhttps:\/\/github.com\/settings\/tokens\r\nhttps:\/\/gitlab.com\/-\/profile\/personal_access_tokens", 111 | "env_variable": "ACCESS_TOKEN", 112 | "default_value": "", 113 | "user_viewable": true, 114 | "user_editable": true, 115 | "rules": "nullable|string", 116 | "field_type": "text" 117 | }, 118 | { 119 | "name": "Requirements file", 120 | "description": "if there are other requirements files to choose from.", 121 | "env_variable": "REQUIREMENTS_FILE", 122 | "default_value": "requirements.txt", 123 | "user_viewable": true, 124 | "user_editable": true, 125 | "rules": "required|string", 126 | "field_type": "text" 127 | } 128 | ] 129 | } -------------------------------------------------------------------------------- /python/egg-python-generic.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", 3 | "meta": { 4 | "version": "PLCN_v1", 5 | "update_url": null 6 | }, 7 | "exported_at": "2024-12-28T09:14:31+00:00", 8 | "name": "python generic", 9 | "author": "parker@parkervcp.com", 10 | "uuid": "cbd15054-262b-4183-82e9-462c3894175b", 11 | "description": "A Generic Python Egg for Pterodactyl\r\n\r\nTested with: https:\/\/github.com\/Ispira\/pixel-bot", 12 | "features": [], 13 | "docker_images": { 14 | "Python 3.13": "ghcr.io\/parkervcp\/yolks:python_3.13", 15 | "Python 3.12": "ghcr.io\/parkervcp\/yolks:python_3.12", 16 | "Python 3.11": "ghcr.io\/parkervcp\/yolks:python_3.11", 17 | "Python 3.10": "ghcr.io\/parkervcp\/yolks:python_3.10", 18 | "Python 3.9": "ghcr.io\/parkervcp\/yolks:python_3.9", 19 | "Python 3.8": "ghcr.io\/parkervcp\/yolks:python_3.8", 20 | "Python 3.7": "ghcr.io\/parkervcp\/yolks:python_3.7", 21 | "Python 2.7": "ghcr.io\/parkervcp\/yolks:python_2.7" 22 | }, 23 | "file_denylist": [], 24 | "startup": "if [[ -d .git ]] && [[ \"{{AUTO_UPDATE}}\" == \"1\" ]]; then git pull; fi; if [[ ! -z \"{{PY_PACKAGES}}\" ]]; then pip install -U --prefix .local {{PY_PACKAGES}}; fi; if [[ -f \/home\/container\/${REQUIREMENTS_FILE} ]]; then pip install -U --prefix .local -r ${REQUIREMENTS_FILE}; fi; \/usr\/local\/bin\/python \/home\/container\/{{PY_FILE}}", 25 | "config": { 26 | "files": "{}", 27 | "startup": "{\r\n \"done\": \"change this part\"\r\n}", 28 | "logs": "{}", 29 | "stop": "^C" 30 | }, 31 | "scripts": { 32 | "installation": { 33 | "script": "#!\/bin\/bash\r\n# Python App Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napt update\r\napt install -y git curl jq file unzip make gcc g++ libtool\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nif [ \"${USER_UPLOAD}\" == \"true\" ] || [ \"${USER_UPLOAD}\" == \"1\" ]; then\r\n echo -e \"assuming user knows what they are doing have a good day.\"\r\n exit 0\r\nfi\r\n\r\n## add git ending if it's not on the address\r\nif [[ ${GIT_ADDRESS} != *.git ]]; then\r\n GIT_ADDRESS=${GIT_ADDRESS}.git\r\nfi\r\n\r\nif [ -z \"${USERNAME}\" ] && [ -z \"${ACCESS_TOKEN}\" ]; then\r\n echo -e \"using anon api call\"\r\nelse\r\n GIT_ADDRESS=\"https:\/\/${USERNAME}:${ACCESS_TOKEN}@$(echo -e ${GIT_ADDRESS} | cut -d\/ -f3-)\"\r\nfi\r\n\r\n## pull git python repo\r\nif [ \"$(ls -A \/mnt\/server)\" ]; then\r\n echo -e \"\/mnt\/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \".git directory exists\"\r\n if [ -f .git\/config ]; then\r\n echo -e \"loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"files found with no git config\"\r\n echo -e \"closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"${GIT_ADDRESS}\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"\/mnt\/server is empty.\\ncloning files into repo\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"cloning default branch\"\r\n git clone ${GIT_ADDRESS} .\r\n else\r\n echo -e \"cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} ${GIT_ADDRESS} .\r\n fi\r\n\r\nfi\r\n\r\nexport HOME=\/mnt\/server\r\n\r\necho \"Installing python requirements into folder\"\r\nif [[ ! -z ${PY_PACKAGES} ]]; then\r\n pip install -U --prefix .local ${PY_PACKAGES}\r\nfi\r\n\r\nif [ -f \/mnt\/server\/requirements.txt ]; then\r\n pip install -U --prefix .local -r ${REQUIREMENTS_FILE}\r\nfi\r\n\r\necho -e \"install complete\"\r\nexit 0", 34 | "container": "python:3.12-slim-bookworm", 35 | "entrypoint": "bash" 36 | } 37 | }, 38 | "variables": [ 39 | { 40 | "name": "Git Repo Address", 41 | "description": "Git repo to clone\r\n\r\nI.E. https:\/\/github.com\/parkervcp\/repo_name", 42 | "env_variable": "GIT_ADDRESS", 43 | "default_value": "", 44 | "user_viewable": true, 45 | "user_editable": true, 46 | "rules": [ 47 | "nullable", 48 | "string" 49 | ], 50 | "sort": 1 51 | }, 52 | { 53 | "name": "Git Branch", 54 | "description": "What branch to pull from github.\r\n\r\nDefault is blank to pull the repo default branch", 55 | "env_variable": "BRANCH", 56 | "default_value": "", 57 | "user_viewable": true, 58 | "user_editable": true, 59 | "rules": [ 60 | "nullable", 61 | "string" 62 | ], 63 | "sort": 2 64 | }, 65 | { 66 | "name": "User Uploaded Files", 67 | "description": "Skip all the install stuff if you are letting a user upload files.\r\n\r\n0 = false (default)\r\n1 = true", 68 | "env_variable": "USER_UPLOAD", 69 | "default_value": "0", 70 | "user_viewable": true, 71 | "user_editable": true, 72 | "rules": [ 73 | "required", 74 | "boolean" 75 | ], 76 | "sort": 3 77 | }, 78 | { 79 | "name": "Auto Update", 80 | "description": "Pull the latest files on startup when using a GitHub repo.", 81 | "env_variable": "AUTO_UPDATE", 82 | "default_value": "0", 83 | "user_viewable": true, 84 | "user_editable": true, 85 | "rules": [ 86 | "required", 87 | "boolean" 88 | ], 89 | "sort": 4 90 | }, 91 | { 92 | "name": "App py file", 93 | "description": "The file that starts the App.", 94 | "env_variable": "PY_FILE", 95 | "default_value": "app.py", 96 | "user_viewable": true, 97 | "user_editable": true, 98 | "rules": [ 99 | "required", 100 | "string" 101 | ], 102 | "sort": 5 103 | }, 104 | { 105 | "name": "Additional Python packages", 106 | "description": "Install additional python packages.\r\n\r\nUse spaces to separate", 107 | "env_variable": "PY_PACKAGES", 108 | "default_value": "", 109 | "user_viewable": true, 110 | "user_editable": true, 111 | "rules": [ 112 | "nullable", 113 | "string" 114 | ], 115 | "sort": 6 116 | }, 117 | { 118 | "name": "Git Username", 119 | "description": "Username to auth with git.", 120 | "env_variable": "USERNAME", 121 | "default_value": "", 122 | "user_viewable": true, 123 | "user_editable": true, 124 | "rules": [ 125 | "nullable", 126 | "string" 127 | ], 128 | "sort": 7 129 | }, 130 | { 131 | "name": "Git Access Token", 132 | "description": "Password to use with git.\r\n\r\nIt's best practice to use a Personal Access Token.\r\nhttps:\/\/github.com\/settings\/tokens\r\nhttps:\/\/gitlab.com\/-\/profile\/personal_access_tokens", 133 | "env_variable": "ACCESS_TOKEN", 134 | "default_value": "", 135 | "user_viewable": true, 136 | "user_editable": true, 137 | "rules": [ 138 | "nullable", 139 | "string" 140 | ], 141 | "sort": 8 142 | }, 143 | { 144 | "name": "Requirements file", 145 | "description": "if there are other requirements files to choose from.", 146 | "env_variable": "REQUIREMENTS_FILE", 147 | "default_value": "requirements.txt", 148 | "user_viewable": true, 149 | "user_editable": true, 150 | "rules": [ 151 | "required", 152 | "string" 153 | ], 154 | "sort": 9 155 | } 156 | ] 157 | } -------------------------------------------------------------------------------- /rust/README.md: -------------------------------------------------------------------------------- 1 | # Rust Language Generic 2 | 3 | This egg is designed to run any generic Rust application with Cargo, allowing users to pull their own Rust source code from a GitHub repository. 4 | 5 | ## Configuration 6 | 7 | The server will be stuck as `starting` until the egg Start Configuration is modified. You have to edit the text to match something your bot will print for Pterodactyl panel to detect it as running. 8 | ![image](https://user-images.githubusercontent.com/10975908/126516861-c5cb4630-9f25-405c-8199-97bf5ec15a7f.png) 9 | 10 | You can use arrays to have multiple different values when different bots are being used 11 | 12 | ```json 13 | { 14 | "done":[ 15 | "change this text 1", 16 | "change this text 2" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /rust/egg-pterodactyl-rust-generic.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", 3 | "meta": { 4 | "update_url": null, 5 | "version": "PTDL_v2" 6 | }, 7 | "exported_at": "2024-06-02T14:43:53+00:00", 8 | "name": "rust generic", 9 | "author": "ethan@ethancoward.dev", 10 | "description": "Creates a container that runs rust with cargo.", 11 | "features": null, 12 | "docker_images": { 13 | "ghcr.io/parkervcp/yolks:rust_1.31": "ghcr.io/parkervcp/yolks:rust_1.31", 14 | "ghcr.io/parkervcp/yolks:rust_1.56": "ghcr.io/parkervcp/yolks:rust_1.56", 15 | "ghcr.io/parkervcp/yolks:rust_1.60": "ghcr.io/parkervcp/yolks:rust_1.60", 16 | "ghcr.io/parkervcp/yolks:rust_latest": "ghcr.io/parkervcp/yolks:rust_latest" 17 | }, 18 | "file_denylist": [], 19 | "startup": "if [[ -d .git ]] \u0026\u0026 [[ {{AUTO_UPDATE}} == \"1\" ]]; then git pull; fi; cargo run --release", 20 | "config": { 21 | "files": "{}", 22 | "logs": "{}", 23 | "startup": "{\r\n \"done\": [\r\n \"change this part\"\r\n ]\r\n}", 24 | "stop": "^C" 25 | }, 26 | "scripts": { 27 | "installation": { 28 | "container": "ghcr.io/parkervcp/installers:debian", 29 | "entrypoint": "bash", 30 | "script": "#!/bin/bash\r\n# Rust Bot Installation Script\r\n#\r\n# Server Files: /mnt/server\r\napt update\r\napt install -y git\r\n\r\nmkdir -p /mnt/server\r\ncd /mnt/server\r\n\r\n## add git ending if it's not on the address\r\nif [[ ${GIT_ADDRESS} != *.git ]]; then\r\n GIT_ADDRESS=${GIT_ADDRESS}.git\r\nfi\r\n\r\nif [ -z \"${USERNAME}\" ] \u0026\u0026 [ -z \"${ACCESS_TOKEN}\" ]; then\r\n echo -e \"using anon api call\"\r\nelse\r\n GIT_ADDRESS=\"https://${USERNAME}:${ACCESS_TOKEN}@$(echo -e ${GIT_ADDRESS} | cut -d/ -f3-)\"\r\nfi\r\n\r\n## pull git js bot repo\r\nif [ \"$(ls -A /mnt/server)\" ]; then\r\n echo -e \"/mnt/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \".git directory exists\"\r\n if [ -f .git/config ]; then\r\n echo -e \"loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"files found with no git config\"\r\n echo -e \"closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"${GIT_ADDRESS}\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"/mnt/server is empty.\\ncloning files into repo\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"cloning default branch\"\r\n git clone ${GIT_ADDRESS} .\r\n else\r\n echo -e \"cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} ${GIT_ADDRESS} .\r\n fi\r\n\r\nfi\r\n\r\nexport HOME=/mnt/server\r\n\r\necho -e \"install complete\"\r\nexit 0" 31 | } 32 | }, 33 | "variables": [ 34 | { 35 | "name": "Git Repo Address", 36 | "description": "Git repo to clone\r\n\r\nI.E. https://github.com/parkervcp/repo_name", 37 | "env_variable": "GIT_ADDRESS", 38 | "default_value": "", 39 | "user_viewable": true, 40 | "user_editable": true, 41 | "rules": "nullable|string", 42 | "field_type": "text" 43 | }, 44 | { 45 | "name": "Git Branch", 46 | "description": "What branch to pull from github.\r\n\r\nDefault is blank to pull the repo default branch", 47 | "env_variable": "BRANCH", 48 | "default_value": "", 49 | "user_viewable": true, 50 | "user_editable": true, 51 | "rules": "nullable|string", 52 | "field_type": "text" 53 | }, 54 | { 55 | "name": "Auto Update", 56 | "description": "Pull the latest files on startup when using a GitHub repo.", 57 | "env_variable": "AUTO_UPDATE", 58 | "default_value": "0", 59 | "user_viewable": true, 60 | "user_editable": true, 61 | "rules": "required|boolean", 62 | "field_type": "text" 63 | }, 64 | { 65 | "name": "Git Username", 66 | "description": "Username to auth with git.", 67 | "env_variable": "USERNAME", 68 | "default_value": "", 69 | "user_viewable": true, 70 | "user_editable": true, 71 | "rules": "nullable|string", 72 | "field_type": "text" 73 | }, 74 | { 75 | "name": "Git Access Token", 76 | "description": "Password to use with git.\r\n\r\nIt's best practice to use a Personal Access Token.\r\nhttps://github.com/settings/tokens\r\nhttps://gitlab.com/-/profile/personal_access_tokens", 77 | "env_variable": "ACCESS_TOKEN", 78 | "default_value": "", 79 | "user_viewable": true, 80 | "user_editable": true, 81 | "rules": "nullable|string", 82 | "field_type": "text" 83 | } 84 | ] 85 | } -------------------------------------------------------------------------------- /rust/egg-rust-generic.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", 3 | "meta": { 4 | "version": "PTDL_v2", 5 | "update_url": null 6 | }, 7 | "exported_at": "2024-06-02T14:43:53+00:00", 8 | "name": "rust generic", 9 | "author": "ethan@ethancoward.dev", 10 | "uuid": "46a0d309-4e45-4475-ab2a-7e4a965fe410", 11 | "description": "Creates a container that runs rust with cargo.", 12 | "features": null, 13 | "docker_images": { 14 | "ghcr.io\/parkervcp\/yolks:rust_latest": "ghcr.io\/parkervcp\/yolks:rust_latest", 15 | "ghcr.io\/parkervcp\/yolks:rust_1.60": "ghcr.io\/parkervcp\/yolks:rust_1.60", 16 | "ghcr.io\/parkervcp\/yolks:rust_1.56": "ghcr.io\/parkervcp\/yolks:rust_1.56", 17 | "ghcr.io\/parkervcp\/yolks:rust_1.31": "ghcr.io\/parkervcp\/yolks:rust_1.31" 18 | }, 19 | "file_denylist": [], 20 | "startup": "if [[ -d .git ]] && [[ {{AUTO_UPDATE}} == \"1\" ]]; then git pull; fi; cargo run --release", 21 | "config": { 22 | "files": "{}", 23 | "startup": "{\r\n \"done\": [\r\n \"change this part\"\r\n ]\r\n}", 24 | "logs": "{}", 25 | "stop": "^C" 26 | }, 27 | "scripts": { 28 | "installation": { 29 | "script": "#!\/bin\/bash\r\n# Rust Bot Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napt update\r\napt install -y git\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\n## add git ending if it's not on the address\r\nif [[ ${GIT_ADDRESS} != *.git ]]; then\r\n GIT_ADDRESS=${GIT_ADDRESS}.git\r\nfi\r\n\r\nif [ -z \"${USERNAME}\" ] && [ -z \"${ACCESS_TOKEN}\" ]; then\r\n echo -e \"using anon api call\"\r\nelse\r\n GIT_ADDRESS=\"https:\/\/${USERNAME}:${ACCESS_TOKEN}@$(echo -e ${GIT_ADDRESS} | cut -d\/ -f3-)\"\r\nfi\r\n\r\n## pull git js bot repo\r\nif [ \"$(ls -A \/mnt\/server)\" ]; then\r\n echo -e \"\/mnt\/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \".git directory exists\"\r\n if [ -f .git\/config ]; then\r\n echo -e \"loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"files found with no git config\"\r\n echo -e \"closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"${GIT_ADDRESS}\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"\/mnt\/server is empty.\\ncloning files into repo\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"cloning default branch\"\r\n git clone ${GIT_ADDRESS} .\r\n else\r\n echo -e \"cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} ${GIT_ADDRESS} .\r\n fi\r\n\r\nfi\r\n\r\nexport HOME=\/mnt\/server\r\n\r\necho -e \"install complete\"\r\nexit 0", 30 | "container": "ghcr.io\/parkervcp\/installers:debian", 31 | "entrypoint": "bash" 32 | } 33 | }, 34 | "variables": [ 35 | { 36 | "name": "Git Repo Address", 37 | "description": "Git repo to clone\r\n\r\nI.E. https:\/\/github.com\/parkervcp\/repo_name", 38 | "env_variable": "GIT_ADDRESS", 39 | "default_value": "", 40 | "user_viewable": true, 41 | "user_editable": true, 42 | "rules": "nullable|string", 43 | "sort": null, 44 | "field_type": "text" 45 | }, 46 | { 47 | "name": "Git Branch", 48 | "description": "What branch to pull from github.\r\n\r\nDefault is blank to pull the repo default branch", 49 | "env_variable": "BRANCH", 50 | "default_value": "", 51 | "user_viewable": true, 52 | "user_editable": true, 53 | "rules": "nullable|string", 54 | "sort": null, 55 | "field_type": "text" 56 | }, 57 | { 58 | "name": "Auto Update", 59 | "description": "Pull the latest files on startup when using a GitHub repo.", 60 | "env_variable": "AUTO_UPDATE", 61 | "default_value": "0", 62 | "user_viewable": true, 63 | "user_editable": true, 64 | "rules": "required|boolean", 65 | "sort": null, 66 | "field_type": "text" 67 | }, 68 | { 69 | "name": "Git Username", 70 | "description": "Username to auth with git.", 71 | "env_variable": "USERNAME", 72 | "default_value": "", 73 | "user_viewable": true, 74 | "user_editable": true, 75 | "rules": "nullable|string", 76 | "sort": null, 77 | "field_type": "text" 78 | }, 79 | { 80 | "name": "Git Access Token", 81 | "description": "Password to use with git.\r\n\r\nIt's best practice to use a Personal Access Token.\r\nhttps:\/\/github.com\/settings\/tokens\r\nhttps:\/\/gitlab.com\/-\/profile\/personal_access_tokens", 82 | "env_variable": "ACCESS_TOKEN", 83 | "default_value": "", 84 | "user_viewable": true, 85 | "user_editable": true, 86 | "rules": "nullable|string", 87 | "sort": null, 88 | "field_type": "text" 89 | } 90 | ] 91 | } --------------------------------------------------------------------------------