From 5aae14721ed04571eb9fbd900a71a71ee73c499c Mon Sep 17 00:00:00 2001
From: Takeus <68923554+pomme2terree@users.noreply.github.com>
Date: Sat, 21 May 2022 19:31:19 +0200
Subject: [PATCH] Ptero UPDATE
Ptero Update
---
README.md | 7 +++---
app.py | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++---
2 files changed, 73 insertions(+), 7 deletions(-)
diff --git a/README.md b/README.md
index 345a636..e9c985e 100644
--- a/README.md
+++ b/README.md
@@ -2,13 +2,14 @@
### Dépendances
`pip3 install discord.py`
-`pip3 install mcstatus`
-
+`pip3 install mcstatus`
+*optionnel*
+`pip3 install py-dactyl`
### Configuration
Il faut modifier les lignes suivantes:
`token = 'xxxxxxxxxxxxxxx'`
`server_ip = 'xx.xx.xx.xx'`
-`server_port = 'xxxxx'`
+`server_port = 'xxxxx'`
### Mise en PROD
On peut utiliser par exemple **PM2**:
diff --git a/app.py b/app.py
index f87ba59..7cc34dd 100644
--- a/app.py
+++ b/app.py
@@ -1,15 +1,22 @@
import discord
-from asyncio import sleep
from discord.ext import tasks, commands
from mcstatus import JavaServer
## Config
-token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' # Token BOT
+token = 'xxxxxxxxxxxxxxxxx' # Token BOT
server_ip = 'xx.xx.xx.xx' # Addresse IP
server_port = 'xxxxx' # Port
bot_prefix = '!!' # Préfixe
-bot = discord.Client()
+## Pterodactyl Config
+ptero_enable = False
+if ptero_enable:
+ ptero_link = 'https://ptero.example.fr' # FQDN De votre Pterodactyl
+ ptero_clientapi = '' # Clé API de votre compte Pterodactyl
+ ptero_serverid = '' # Identifiant (Abrégé) du serveur
+ discord_admins_id = [] # Identifiant (Discord) des utilisateurs pouvant interagir avec les commandes...
+
+#bot = discord.Client()
bot = commands.Bot(command_prefix=bot_prefix)
@bot.event
@@ -42,12 +49,70 @@ async def info(ctx):
@bot.command()
async def cmd(ctx):
- await ctx.channel.send(f"__**Liste des Commandes**__:\n {bot_prefix}info *(Affiche les informations du Serveur)*")
+ await ctx.channel.send(f"__**Liste des Commandes Utilisateur**__:\n {bot_prefix}info *(Affiche les informations du Serveur.)*\n {bot_prefix}ping *(Permet de savoir si le BOT est en marche.)*")
+ if ptero_enable:
+ await ctx.channel.send(f"__**Liste des Commandes Administrateur**__:\n {bot_prefix}sinfo *(Affiche des informations poussées du Serveur.)*\n {bot_prefix}power *(Permet d'effectuer des actions sur le serveur)*\n {bot_prefix}console *(Permet d'executer des commandes sur le serveur)*")
@bot.command()
async def ping(ctx):
await ctx.channel.send(f'Bot UP !\nLatence: {round(bot.latency, 1)}')
+if ptero_enable:
+ from pydactyl import PterodactylClient
+ api = PterodactylClient(ptero_link, ptero_clientapi)
+ #print(api.client.servers.get_server_utilization(ptero_serverid))
+
+ @bot.command()
+ async def sinfo(ctx):
+ if ctx.author.id in discord_admins_id:
+ infoserver = api.client.servers.get_server_utilization(ptero_serverid)
+ if infoserver['current_state'] == 'offline':
+ embed=discord.Embed(color=0xff0000)
+ embed.add_field(name='STATUS', value=infoserver['current_state'], inline=True)
+ embed.add_field(name='DISK', value=str(round(float(infoserver['resources']['disk_bytes'])/1024/1024))+' MO', inline=True)
+ else:
+ if infoserver['current_state'] == 'starting':
+ embed=discord.Embed(color=0xffff00)
+ else:
+ embed=discord.Embed(color=0x00ff00)
+ embed.add_field(name='STATUS', value=infoserver['current_state'], inline=True)
+ embed.add_field(name='CPU', value=str(round(infoserver['resources']['cpu_absolute']))+' %', inline=True)
+ embed.add_field(name='RAM', value=str(round(float(infoserver['resources']['memory_bytes'])/1024/1024))+' MO', inline=True)
+ embed.add_field(name='DISK', value=str(round(float(infoserver['resources']['disk_bytes'])/1024/1024))+' MO', inline=True)
+ await ctx.send(embed=embed)
+ else:
+ await ctx.channel.send("Vous n'avez pas l'autorisation d'utiliser cette commande.")
+
+ @bot.command()
+ async def power(ctx, arg):
+ if ctx.author.id in discord_admins_id:
+ if arg == 'start':
+ api.client.servers.send_power_action(ptero_serverid,'start')
+ await ctx.channel.send("Commande envoyé !")
+ elif arg == 'stop':
+ api.client.servers.send_power_action(ptero_serverid,'stop')
+ await ctx.channel.send("Commande envoyé !")
+ elif arg == 'kill':
+ api.client.servers.send_power_action(ptero_serverid,'kill')
+ await ctx.channel.send("Commande envoyé !")
+ else:
+ await ctx.channel.send("Argument invalide. Les options sont: **start, stop, kill**")
+ else:
+ await ctx.channel.send("Vous n'avez pas l'autorisation d'utiliser cette commande.")
+
+ @bot.command()
+ async def console(ctx, arg):
+ if ctx.author.id in discord_admins_id:
+ api.client.servers.send_console_command(ptero_serverid,arg)
+ await ctx.channel.send("Commande envoyé !")
+ else:
+ await ctx.channel.send("Vous n'avez pas l'autorisation d'utiliser cette commande.")
+
+ @bot.event
+ async def on_command_error(ctx, error):
+ if isinstance(error, commands.MissingRequiredArgument):
+ await ctx.send('Cette commande nécéssite un Argument.')
+
bot.run(token)
## Takeus 2022