This commit is contained in:
Raven Scott 2024-09-18 20:33:59 -04:00
parent adebf8b317
commit 462e2a232d

View File

@ -473,6 +473,84 @@ Managing containers involves more than just creating and extending them—it als
The `/destroy` command in Discord-Linux initiates the process of removing a users container. When a user runs this command, the bot doesnt immediately proceed with the destruction. Instead, it first retrieves the users container ID and then asks for confirmation before performing the actual deletion. This prevents accidental container destruction and provides users with a safety net to protect their data. The `/destroy` command in Discord-Linux initiates the process of removing a users container. When a user runs this command, the bot doesnt immediately proceed with the destruction. Instead, it first retrieves the users container ID and then asks for confirmation before performing the actual deletion. This prevents accidental container destruction and provides users with a safety net to protect their data.
### Container Destruction
Once the user confirms that they want to proceed, the bot performs the actual destruction of the container. This is done by stopping and removing the container using Dockers command-line interface.
```javascript
cmd('docker stop ' + sshSurfID + " && docker rm " + sshSurfID).then(out => {
console.log('Container destroyed:', out);
});
```
The bot uses the container ID (retrieved earlier) to stop and remove the Docker container associated with the user. The combination of `docker stop` and `docker rm` ensures that both the container and its data are completely removed from the system, freeing up resources.
### Cleaning Up Network Configuration
After the container is destroyed, the system also removes any network configurations associated with the container. This ensures that no leftover data, such as network routes or IP addresses, lingers after the container is removed.
```javascript
try {
fs.unlinkSync(netConfig);
console.log("Network Config Removed!");
} catch (err) {
console.log("No Config to remove");
}
```
In this snippet, the bot checks if a network configuration file exists for the container. If it does, the file is deleted, ensuring that the network resources used by the container are properly cleaned up.
### Notifying the User
Once the container has been successfully destroyed, the bot sends an embedded message to the user to inform them of the completion of the process. The message is displayed in Discord using an `EmbedBuilder`, which provides a visually appealing way to show important information.
```javascript
const embed = new EmbedBuilder()
.setTitle("🤯 The container was destroyed!")
.setDescription(`You may generate a new one if you would like using /generate at any time!`)
.setTimestamp()
.setFooter({ text: `Requested by ${interaction.user.username}`, iconURL: `${interaction.user.displayAvatarURL()}` });
await interaction.editReply({ embeds: [embed] });
```
The message confirms to the user that the container has been successfully destroyed and reminds them that they can generate a new container if needed. This feedback is critical in ensuring the user knows the action has been completed.
### Additional Cleanup and Notifications
Beyond the basic destruction process, Discord-Linux goes a step further by notifying external systems and performing additional cleanup. For instance, the bot makes an HTTP request to notify another service that the users container has been deleted, ensuring that all traces of the container are removed from the wider network.
```javascript
const request = unirest.delete(`http://non-public-endpoint/${userID}`)
.headers({ 'password': PASSWORD });
request.end(function (response) {
if (response.error) {
console.error('Error:', response.error);
} else {
console.log('Response:', response.body);
}
});
```
This HTTP request ensures that all external systems are updated to reflect the removal of the container, helping maintain consistency across the network.
### Handling Errors
While the bot handles most scenarios smoothly, theres always a chance that something could go wrong. To prevent unexpected behavior, the code includes error handling to manage cases where the container may not exist or cannot be destroyed. If the container doesnt exist, for example, the bot notifies the user that theres no container to destroy.
```javascript
cmd('docker stop ' + sshSurfID + " && docker rm " + sshSurfID).catch(err => {
if (err.toString().includes("such")) {
console.log("A container does not exist to destroy");
interaction.editReply("A container does not currently exist to destroy.");
}
});
```
This ensures that users arent confused if they attempt to destroy a container that no longer exists or was already removed. The bot provides clear feedback in these situations, keeping users informed at every step.
### User Confirmation Process ### User Confirmation Process
To avoid accidental deletions, the bot uses a confirmation dialog to prompt the user before proceeding. This prompt comes in the form of a **Discord select menu**, offering users the choice to either proceed with destruction or cancel the action. To avoid accidental deletions, the bot uses a confirmation dialog to prompt the user before proceeding. This prompt comes in the form of a **Discord select menu**, offering users the choice to either proceed with destruction or cancel the action.
@ -657,83 +735,6 @@ The platforms ability to run commands non-interactively via Discord is incred
By leveraging Docker, REST logging, and thoughtful command handling, the platform delivers a flexible and secure way for users to run commands, all within a familiar interface like Discord. By leveraging Docker, REST logging, and thoughtful command handling, the platform delivers a flexible and secure way for users to run commands, all within a familiar interface like Discord.
### Container Destruction
Once the user confirms that they want to proceed, the bot performs the actual destruction of the container. This is done by stopping and removing the container using Dockers command-line interface.
```javascript
cmd('docker stop ' + sshSurfID + " && docker rm " + sshSurfID).then(out => {
console.log('Container destroyed:', out);
});
```
The bot uses the container ID (retrieved earlier) to stop and remove the Docker container associated with the user. The combination of `docker stop` and `docker rm` ensures that both the container and its data are completely removed from the system, freeing up resources.
### Cleaning Up Network Configuration
After the container is destroyed, the system also removes any network configurations associated with the container. This ensures that no leftover data, such as network routes or IP addresses, lingers after the container is removed.
```javascript
try {
fs.unlinkSync(netConfig);
console.log("Network Config Removed!");
} catch (err) {
console.log("No Config to remove");
}
```
In this snippet, the bot checks if a network configuration file exists for the container. If it does, the file is deleted, ensuring that the network resources used by the container are properly cleaned up.
### Notifying the User
Once the container has been successfully destroyed, the bot sends an embedded message to the user to inform them of the completion of the process. The message is displayed in Discord using an `EmbedBuilder`, which provides a visually appealing way to show important information.
```javascript
const embed = new EmbedBuilder()
.setTitle("🤯 The container was destroyed!")
.setDescription(`You may generate a new one if you would like using /generate at any time!`)
.setTimestamp()
.setFooter({ text: `Requested by ${interaction.user.username}`, iconURL: `${interaction.user.displayAvatarURL()}` });
await interaction.editReply({ embeds: [embed] });
```
The message confirms to the user that the container has been successfully destroyed and reminds them that they can generate a new container if needed. This feedback is critical in ensuring the user knows the action has been completed.
### Additional Cleanup and Notifications
Beyond the basic destruction process, Discord-Linux goes a step further by notifying external systems and performing additional cleanup. For instance, the bot makes an HTTP request to notify another service that the users container has been deleted, ensuring that all traces of the container are removed from the wider network.
```javascript
const request = unirest.delete(`http://non-public-endpoint/${userID}`)
.headers({ 'password': PASSWORD });
request.end(function (response) {
if (response.error) {
console.error('Error:', response.error);
} else {
console.log('Response:', response.body);
}
});
```
This HTTP request ensures that all external systems are updated to reflect the removal of the container, helping maintain consistency across the network.
### Handling Errors
While the bot handles most scenarios smoothly, theres always a chance that something could go wrong. To prevent unexpected behavior, the code includes error handling to manage cases where the container may not exist or cannot be destroyed. If the container doesnt exist, for example, the bot notifies the user that theres no container to destroy.
```javascript
cmd('docker stop ' + sshSurfID + " && docker rm " + sshSurfID).catch(err => {
if (err.toString().includes("such")) {
console.log("A container does not exist to destroy");
interaction.editReply("A container does not currently exist to destroy.");
}
});
```
This ensures that users arent confused if they attempt to destroy a container that no longer exists or was already removed. The bot provides clear feedback in these situations, keeping users informed at every step.
# Editing Files with Discord-Linux # Editing Files with Discord-Linux
Discord-Linuxs **edit-file** command offers users the ability to edit files within their Docker containers through Discord, making it a highly effective and user-friendly solution for container management. This functionality is facilitated through a series of integrated steps, leveraging Docker, MySQL, and Discord.js to provide seamless file editing without needing direct access to the container shell. Here's an in-depth look at how this system works, with code examples to illustrate each step. Discord-Linuxs **edit-file** command offers users the ability to edit files within their Docker containers through Discord, making it a highly effective and user-friendly solution for container management. This functionality is facilitated through a series of integrated steps, leveraging Docker, MySQL, and Discord.js to provide seamless file editing without needing direct access to the container shell. Here's an in-depth look at how this system works, with code examples to illustrate each step.