Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
* [Redbot](/discord/redbot) Python
* [Ree6](/discord/ree6) Java
* [SinusBot](/discord/sinusbot)
* [VoiceTwine](/discord/voicetwine) Node JS

[Other](/other)

Expand Down
5 changes: 5 additions & 0 deletions discord/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,3 +67,8 @@ All-in-one, open source and 100% free Discord Bot!

[SinusBot](https://www.sinusbot.com/)
Please Check their site for an in depth on the bot.

### [VoiceTwine](voicetwine)

[Twijn/VoiceTwine](https://github.com/Twijn/VoiceTwine)
Dynamic voice channel manager for Discord
55 changes: 55 additions & 0 deletions discord/voicetwine/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# VoiceTwine

___

## Authors / Contributors

<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tr>
<td align="center">
<a href="https://github.com/twijn">
<img src="https://avatars.githubusercontent.com/u/16090673" width="50px;" alt=""/><br /><sub><b>Twijn</b></sub>
</a>
<br />
<a href="https://github.com/Twijn/VoiceTwine/commits?author=Twijn" title="Codes">💻</a>
<a href="https://github.com/Twijn/VoiceTwine/commits?author=Twijn" title="Original Bot Creator">🤖</a>
<a href="https://github.com/Twijn/VoiceTwine/commits?author=Twijn" title="Original Egg Creator">🥚</a>
</td>
<td align="center">
<a href="https://github.com/dascanard">
<img src="https://avatars.githubusercontent.com/u/17070204" width="50px;" alt=""/><br /><sub><b>DasCanard</b></sub>
</a>
<br />
<a href="https://github.com/Twijn/VoiceTwine/commits?author=DasCanard" title="Codes">💻</a>
</td>
</tr>
</table>
<!-- markdownlint-enable -->
<!-- prettier-ignore-end -->

___

## Bot Description & Features

VoiceTwine 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.

___

## Configuration

- You will need to configure server variables to start the bot, including operating MariaDB credentials.

___

## Server Ports

There are no ports required for VoiceTwine at this time.
___

## Updating

Re-Installing the server via the panel will do the following:

1. Update the bot to the latest version.
152 changes: 152 additions & 0 deletions discord/voicetwine/egg-pterodactyl-voicetwine.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
{
"_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"
}
]
}
Loading