1
|
|
|
from app.bot import Bot |
2
|
|
|
from typing import NoReturn, Optional |
3
|
|
|
|
4
|
|
|
import discord |
5
|
|
|
import psutil |
6
|
|
|
|
7
|
|
|
from discord.ext import commands |
8
|
|
|
from discord.ext.commands import Context, CommandError |
9
|
|
|
|
10
|
|
|
SALARIED_ROLE_ID: int = 888527962935296091 |
11
|
|
|
PDG_ROLE_ID: int = 888527789794422784 |
12
|
|
|
|
13
|
|
|
|
14
|
|
|
class UtilsCog(commands.Cog): |
15
|
|
|
"""A simple commands cog template.""" |
16
|
|
|
|
17
|
|
|
def __init__(self, client: Bot): |
18
|
|
|
"""Link to bot instance.""" |
19
|
|
|
self.name = 'Utilitaire' |
20
|
|
|
self.client: Bot = client |
21
|
|
|
|
22
|
|
|
@commands.command( |
23
|
|
|
name='pan', |
24
|
|
|
description='host stats' |
25
|
|
|
) |
26
|
|
|
@commands.has_any_role(SALARIED_ROLE_ID, PDG_ROLE_ID) |
27
|
|
|
async def panel_info(self, ctx: Context): |
28
|
|
|
await ctx.message.delete() |
29
|
|
|
mb: int = 1024 ** 2 |
30
|
|
|
|
31
|
|
|
vm = psutil.virtual_memory() |
32
|
|
|
cpu_freq = psutil.cpu_freq() |
33
|
|
|
cpu_percent = psutil.cpu_percent() |
34
|
|
|
disk = psutil.disk_usage('.') |
35
|
|
|
|
36
|
|
|
stats = { |
37
|
|
|
'ram': ( |
38
|
|
|
100 * (vm.used / vm.total), |
39
|
|
|
f'{(vm.total / mb) / 1000:,.3f}', |
40
|
|
|
'Gb' |
41
|
|
|
), |
42
|
|
|
'cpu': ( |
43
|
|
|
cpu_percent, |
44
|
|
|
f"{cpu_freq.current / 1000:.1f}`/`{cpu_freq.max / 1000:.1f}", |
45
|
|
|
'Ghz' |
46
|
|
|
), |
47
|
|
|
'disk': ( |
48
|
|
|
100 * (disk.used / disk.total), |
49
|
|
|
f'{disk.total / mb:,.0f}', 'Mb' |
50
|
|
|
) |
51
|
|
|
} |
52
|
|
|
|
53
|
|
|
panel_embed = discord.Embed( |
54
|
|
|
title="Server Report", |
55
|
|
|
description="The bot is hosted on a private vps." |
56
|
|
|
) |
57
|
|
|
|
58
|
|
|
for name, (percent, info, unit) in stats.items(): |
59
|
|
|
panel_embed.add_field( |
60
|
|
|
name=name.upper(), |
61
|
|
|
value=f"> `{percent:.3f}` **%**\n- `{info}` **{unit}**" |
62
|
|
|
) |
63
|
|
|
|
64
|
|
|
await ctx.send(embed=panel_embed) |
65
|
|
|
|
66
|
|
|
@commands.command( |
67
|
|
|
name="help", |
68
|
|
|
description="La commande d'aide", |
69
|
|
|
) |
70
|
|
|
@commands.has_any_role(SALARIED_ROLE_ID, PDG_ROLE_ID) |
71
|
|
|
async def help_command(self, ctx: Context): |
72
|
|
|
await ctx.message.delete() |
73
|
|
|
|
74
|
|
|
help_embed = discord.Embed( |
75
|
|
|
description="Aide du TéquilaBot" |
76
|
|
|
) |
77
|
|
|
|
78
|
|
|
for cog in self.client.cogs.values(): |
79
|
|
|
help_embed.add_field( |
80
|
|
|
name=f'> {cog.name}', |
81
|
|
|
value='\n'.join( |
82
|
|
|
f'- `{command.name}`: {command.description}' |
83
|
|
|
for command in cog.get_commands() |
84
|
|
|
), inline=False |
85
|
|
|
) |
86
|
|
|
|
87
|
|
|
await ctx.send(embed=help_embed, delete_after=60) |
88
|
|
|
|
89
|
|
|
@commands.command( |
90
|
|
|
name="purge", |
91
|
|
|
description="Supprime X messages" |
92
|
|
|
) |
93
|
|
|
@commands.has_any_role(SALARIED_ROLE_ID, PDG_ROLE_ID) |
94
|
|
|
async def purge_command( |
95
|
|
|
self, ctx: Context, limit: Optional[int] = None |
96
|
|
|
) -> None: |
97
|
|
|
await ctx.channel.purge(limit=limit) |
98
|
|
|
await ctx.send("> Purgé!", delete_after=5) |
99
|
|
|
|
100
|
|
|
@commands.Cog.listener() |
101
|
|
|
async def on_command_error(self, ctx: Context, exc: CommandError): |
102
|
|
|
print(exc) |
103
|
|
|
|
104
|
|
|
if isinstance(exc, commands.errors.MissingAnyRole): |
105
|
|
|
await ctx.send( |
106
|
|
|
"> Seul les salariés ont le droit d' exécuter cette commande." |
107
|
|
|
) |
108
|
|
|
|
109
|
|
|
|
110
|
|
|
def setup(client: Bot) -> NoReturn: |
111
|
|
|
client.add_cog(UtilsCog(client)) |
112
|
|
|
|