8.1 KiB
Discord Container Manager Bot
A powerful Discord bot built with discord.js that allows users to manage and interact with containerized services directly from Discord. The bot integrates with a MySQL database for user management and communicates with an external API to perform various container operations such as starting, stopping, restarting containers, fetching stats, and executing commands.
Table of Contents
Features
- Slash Commands: Interact with containers using intuitive slash commands.
- Database Integration: Securely manage user data with MySQL.
- API Communication: Fetch and manage tokens automatically, ensuring secure API interactions.
- Dynamic Command Registration: Automatically registers and updates commands with Discord.
- Embed Messages: Provides rich and informative responses using Discord embeds.
- Command Execution: Execute shell commands within containers directly from Discord.
Prerequisites
Before you begin, ensure you have met the following requirements:
- Node.js: Version 16.6.0 or higher. Download Node.js
- MySQL Database: A running MySQL server to store user data.
- Discord Bot: A Discord application with a bot token. Create a Discord Bot
Installation
-
Clone the Repository
git clone https://github.com/yourusername/discord-container-manager.git cd discord-container-manager
-
Install Dependencies
Ensure you have Node.js installed. Then, install the required npm packages:
npm install
The project relies on the following main dependencies:
discord.js
: Interact with the Discord API.mysql2
: Connect to the MySQL database.jsonfile
: Read and write JSON files.unirest
: Make HTTP requests.fs
: File system operations (built-in Node.js module).
Configuration
Config Files
The bot requires two main configuration files: config.json
and tokens.json
.
-
config.json
This file holds essential configuration details such as Discord tokens, API endpoints, and database credentials.
{ "token": "YOUR_DISCORD_BOT_TOKEN", "clientId": "YOUR_DISCORD_CLIENT_ID", "SQLHOST": "localhost", "SQLUSER": "your_mysql_user", "SQLDATABASE": "your_database", "SQLPASSWORD": "your_mysql_password", "endpoint": "https://api.yourservice.com", "password": "YOUR_API_PASSWORD", "apiBaseURL": "https://api.yourservice.com" }
- token: Your Discord bot token.
- clientId: Your Discord application's client ID.
- SQLHOST: Hostname for your MySQL server.
- SQLUSER: MySQL username.
- SQLDATABASE: Name of the MySQL database.
- SQLPASSWORD: MySQL user password.
- endpoint: API endpoint for token fetching.
- password: Password used for API authentication.
- apiBaseURL: Base URL for the API interactions.
-
tokens.json
This file is used to store and manage user-specific API tokens. It's automatically generated and managed by the bot. Ensure this file is kept secure and is excluded from version control.
{}
Note: It's recommended to add
tokens.json
andconfig.json
to your.gitignore
to prevent sensitive information from being pushed to version control.
Database Setup
The bot connects to a MySQL database to manage user data. Ensure your database has a users
table with the following structure:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
uid VARCHAR(255) NOT NULL,
discord_id VARCHAR(255) UNIQUE NOT NULL
);
- id: Primary key.
- uid: Unique identifier for the user in the external system.
- discord_id: Discord user ID.
Note: Adjust the table schema as needed based on your requirements.
Usage
After completing the installation and configuration steps, you can start the bot using:
node index.js
Upon successful startup, the bot will register its slash commands with Discord and begin listening for interactions.
Available Commands
The bot offers a variety of slash commands to manage containers and interact with the underlying API.
/hello
Description: Say hello via API.
Usage:
/hello
Response:
An embed message with a greeting from the API.
/name
Description: Get the API username.
Usage:
/name
Response:
An embed message displaying the API username.
/start
Description: Start the container.
Usage:
/start
Response:
An embed message confirming the container has started.
/stop
Description: Stop the container.
Usage:
/stop
Response:
An embed message confirming the container has stopped.
/restart
Description: Restart the container.
Usage:
/restart
Response:
An embed message confirming the container has restarted.
/info
Description: Get container information.
Usage:
/info
Response:
An embed message detailing various information about the container, including name, IP address, memory usage, CPU usage, status, and more.
/stats
Description: Get container stats.
Usage:
/stats
Response:
An embed message displaying memory and CPU usage statistics of the container.
/time
Description: Get container expire time.
Usage:
/time
Response:
An embed message showing the expiration date of the container.
/root-password
Description: Change the root password.
Usage:
/root-password
Response:
An ephemeral embed message revealing the new root password.
/new-api-key
Description: Generate a new API key.
Usage:
/new-api-key
Response:
An ephemeral embed message providing a new API key.
/key-expire-time
Description: Check the API key expiration time.
Usage:
/key-expire-time
Response:
An ephemeral embed message showing the expiration date of the API key.
/x
Description: Execute a command in the container.
Usage:
/x command: <your_command>
Options:
- command (String, Required): The command to execute inside the container.
Response:
A message containing the standard output and error from the executed command, formatted in markdown code blocks.
Examples:
-
Change directory:
/x command: cd /var/www
-
List files:
/x command: ls -la
/notify
Description: Send a notification to Discord.
Usage:
/notify message: <your_message>
Options:
- message (String, Required): The message to send as a notification.
Response:
An ephemeral embed message confirming the notification has been sent.
Contributing
Contributions are welcome! Follow these steps to contribute:
-
Fork the Repository
Click the Fork button on the repository page.
-
Create a New Branch
git checkout -b feature/YourFeature
-
Make Your Changes
Implement your feature or fix the bug.
-
Commit Your Changes
git commit -m "Add your message here"
-
Push to the Branch
git push origin feature/YourFeature
-
Create a Pull Request
Navigate to the original repository and create a pull request from your forked branch.
Acknowledgments
- discord.js - Powerful library for interacting with the Discord API.
- Unirest - Lightweight HTTP client.
- mysql2 - MySQL client for Node.js.
- jsonfile - Easily read/write JSON files.