{"meta":{"slug":"pterodactyl-voicetwine","name":"Pterodactyl Voicetwine","category":"discord","source":"pelican","owner":"pelican-eggs","repo":"chatbots","branch":"main","path":"discord/voicetwine/egg-pterodactyl-voicetwine.json","rawUrl":"https://raw.githubusercontent.com/pelican-eggs/chatbots/main/discord/voicetwine/egg-pterodactyl-voicetwine.json","indexedAt":1792246788483},"egg":{"_comment":"DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO","meta":{"version":"PTDL_v2","update_url":null},"exported_at":"2025-05-21T10:47:46-04:00","name":"VoiceTwine","author":"twijn@twijn.net","description":"Dynamic voice channel manager for Discord","features":null,"docker_images":{"Node 22":"ghcr.io/parkervcp/yolks:nodejs_22"},"file_denylist":[],"startup":"npm run start","config":{"files":"{}","startup":"{\r\n    \"done\": \"App started successfully!\"\r\n}","logs":"{}","stop":"^C"},"scripts":{"installation":{"script":"#!/bin/bash\r\n# VoiceTwine Installation Script\r\n# Server Files: /mnt/server\r\n\r\n# Update system packages\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 \"Updating npm to latest version...\"\r\nnpm install -g npm@latest\r\n\r\n# Ensure working directory\r\nmkdir -p /mnt/server\r\ncd /mnt/server\r\n\r\n# Mark the directory as safe to avoid Git \"dubious ownership\" errors\r\ngit config --global --add safe.directory /mnt/server\r\n\r\n# Clone or pull the GitHub repository\r\nBRANCH=\"${BRANCH:-master}\"\r\n\r\nif [ \"$(ls -A /mnt/server)\" ]; then\r\n    echo \"Directory is not empty.\"\r\n\r\n    if [ -d .git ] && [ -f .git/config ]; then\r\n        echo \".git directory found, checking remote...\"\r\n        git remote -v\r\n        ORIGIN=$(git config --get remote.origin.url)\r\n\r\n        if [ \"$ORIGIN\" == \"$GIT_ADDRESS\" ]; then\r\n            echo \"Correct repo, pulling latest changes...\"\r\n            git pull origin \"$BRANCH\"\r\n        else\r\n            echo \"Different repo detected. (Current $ORIGIN, getting $GIT_ADDRESS) Exiting to prevent data loss.\"\r\n            exit 10\r\n        fi\r\n    else\r\n        echo \"No .git folder, exiting to avoid overwriting manual files.\"\r\n        exit 10\r\n    fi\r\nelse\r\n    echo \"Directory is empty, cloning repo...\"\r\n    git clone --single-branch --branch \"$BRANCH\" \"$GIT_ADDRESS\" .\r\nfi\r\n\r\n# Install Node.js dependencies\r\nif [ -f package.json ]; then\r\n    echo \"Installing npm dependencies...\"\r\n    npm install --omit=dev\r\n    echo \"Installing typescript and sequelize-cli...\"\r\n    npm install -g typescript sequelize-cli\r\nelse\r\n    echo \"package.json not found! Cannot install dependencies.\"\r\n    exit 20\r\nfi\r\n\r\n# Build the TypeScript code\r\nif [ -f tsconfig.json ]; then\r\n    echo \"Building TypeScript project...\"\r\n    npm run clean # Clean first in case we're updating!\r\n    npm run build\r\nelse\r\n    echo \"tsconfig.json not found! Assuming pre-built or JavaScript project.\"\r\nfi\r\n\r\necho \"Running database migration...\"\r\nnpx sequelize-cli db:migrate\r\n\r\necho \"Installation complete.\"\r\nexit 0","container":"node:bookworm-slim","entrypoint":"bash"}},"variables":[{"name":"Node Environment","description":"The environment setting to use for Node.js","env_variable":"NODE_ENV","default_value":"production","user_viewable":false,"user_editable":false,"rules":"required|string|in:development,production","field_type":"text"},{"name":"Log Level","description":"Logging level for VoiceTwine","env_variable":"LOG_LEVEL","default_value":"info","user_viewable":true,"user_editable":true,"rules":"required|string|in:debug,info,warn,error","field_type":"text"},{"name":"MariaDB Host","description":"MariaDB server host address","env_variable":"MARIADB_HOST","default_value":"172.18.0.1","user_viewable":true,"user_editable":true,"rules":"string","field_type":"text"},{"name":"MariaDB Port","description":"MariaDB server port","env_variable":"MARIADB_PORT","default_value":"3306","user_viewable":true,"user_editable":true,"rules":"numeric","field_type":"text"},{"name":"MariaDB User","description":"MariaDB username","env_variable":"MARIADB_USER","default_value":"voicetwine","user_viewable":true,"user_editable":true,"rules":"string","field_type":"text"},{"name":"MariaDB Password","description":"MariaDB password","env_variable":"MARIADB_PASS","default_value":"","user_viewable":true,"user_editable":true,"rules":"string","field_type":"text"},{"name":"MariaDB Database","description":"MariaDB schema name","env_variable":"MARIADB_DB","default_value":"s1_voicetwine","user_viewable":true,"user_editable":true,"rules":"string","field_type":"text"},{"name":"Discord Client ID","description":"Discord client ID, retrieved from the Developer panel","env_variable":"DISCORD_CLIENT_ID","default_value":"","user_viewable":true,"user_editable":true,"rules":"required|numeric","field_type":"text"},{"name":"Discord Client Secret","description":"Discord client secret, retrieved from the Developer panel","env_variable":"DISCORD_CLIENT_SECRET","default_value":"","user_viewable":true,"user_editable":true,"rules":"required|string","field_type":"text"},{"name":"Discord Token","description":"Discord bot token, retrieved from the Developer panel","env_variable":"DISCORD_TOKEN","default_value":"","user_viewable":true,"user_editable":true,"rules":"required|string","field_type":"text"},{"name":"GitHub Address","description":"The GitHub address for VoiceTwine. Defaults to the main repo, but can be changed to a custom one.","env_variable":"GIT_ADDRESS","default_value":"https://github.com/Twijn/VoiceTwine.git","user_viewable":true,"user_editable":false,"rules":"required|string","field_type":"text"},{"name":"GitHub Branch","description":"The branch to use from GitHub","env_variable":"BRANCH","default_value":"master","user_viewable":true,"user_editable":false,"rules":"required|string","field_type":"text"}]},"readme":"# VoiceTwine\n\n___\n\n## Authors / Contributors\n\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n    <tr>\n        <td align=\"center\">\n            <a href=\"https://github.com/twijn\">\n                <img src=\"https://avatars.githubusercontent.com/u/16090673\" width=\"50px;\" alt=\"\"/><br /><sub><b>Twijn</b></sub>\n            </a>\n            <br />\n            <a href=\"https://github.com/Twijn/VoiceTwine/commits?author=Twijn\" title=\"Codes\">💻</a>\n            <a href=\"https://github.com/Twijn/VoiceTwine/commits?author=Twijn\" title=\"Original Bot Creator\">🤖</a>\n            <a href=\"https://github.com/Twijn/VoiceTwine/commits?author=Twijn\" title=\"Original Egg Creator\">🥚</a>\n        </td>\n        <td align=\"center\">\n            <a href=\"https://github.com/dascanard\">\n                <img src=\"https://avatars.githubusercontent.com/u/17070204\" width=\"50px;\" alt=\"\"/><br /><sub><b>DasCanard</b></sub>\n            </a>\n            <br />\n            <a href=\"https://github.com/Twijn/VoiceTwine/commits?author=DasCanard\" title=\"Codes\">💻</a>\n        </td>\n    </tr>\n</table>\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n\n___\n\n## Bot Description & Features\n\nVoiceTwine is a Discord bot that offers dynamic voice channels. It's intended to be a replacement for Dynamico, EmpyManager, and other bots that require payment for full features.\n\n___\n\n## Configuration\n\n- You will need to configure server variables to start the bot, including operating MariaDB credentials.\n\n___\n\n## Server Ports\n\nThere are no ports required for VoiceTwine at this time.\n___\n\n## Updating\n\nRe-Installing the server via the panel will do the following:\n\n1. Update the bot to the latest version."}