/[sudobot]/branches/3.x/src/commands/settings/SystemCommand.ts
ViewVC logotype

Contents of /branches/3.x/src/commands/settings/SystemCommand.ts

Parent Directory Parent Directory | Revision Log Revision Log


Revision 577 - (show annotations)
Mon Jul 29 18:52:37 2024 UTC (8 months ago) by rakinar2
File MIME type: application/typescript
File size: 4764 byte(s)
chore: add old version archive branches (2.x to 9.x-dev)
1 /**
2 * This file is part of SudoBot.
3 *
4 * Copyright (C) 2021-2022 OSN Inc.
5 *
6 * SudoBot is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU Affero General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * SudoBot is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Affero General Public License for more details.
15 *
16 * You should have received a copy of the GNU Affero General Public License
17 * along with SudoBot. If not, see <https://www.gnu.org/licenses/>.
18 */
19
20 import { CommandInteraction, Message } from 'discord.js';
21 import BaseCommand from '../../utils/structures/BaseCommand';
22 import DiscordClient from '../../client/Client';
23 import CommandOptions from '../../types/CommandOptions';
24 import InteractionOptions from '../../types/InteractionOptions';
25 import MessageEmbed from '../../client/MessageEmbed';
26 import { fetchEmoji } from '../../utils/Emoji';
27 import { formatDuration, intervalToDuration } from 'date-fns';
28 import os from 'os';
29
30 export default class SystemCommand extends BaseCommand {
31 constructor() {
32 super('system', 'settings', []);
33 this.supportsInteractions = true;
34 }
35
36 async run(client: DiscordClient, message: Message | CommandInteraction, options: CommandOptions | InteractionOptions) {
37 let msg: Message;
38
39 if (message instanceof Message) {
40 msg = await message.reply({
41 embeds: [
42 new MessageEmbed()
43 .setColor('GOLD')
44 .setDescription('Loading data...')
45 ]
46 });
47 }
48 else {
49 await message.reply({
50 embeds: [
51 new MessageEmbed()
52 .setColor('GOLD')
53 .setDescription('Loading data...')
54 ]
55 });
56 msg = <Message> await message.fetchReply();
57 }
58
59 const latency = msg.createdTimestamp - message.createdTimestamp;
60 const apiLatency = Math.round(client.ws.ping);
61 let latencyIcon = '🟢', apiLatencyIcon = '🟢';
62
63 if (latency >= 500) {
64 latencyIcon = '🔴';
65 }
66 else if (latency >= 350) {
67 latencyIcon = '🟡';
68 }
69
70 if (apiLatency >= 400) {
71 apiLatencyIcon = '🔴';
72 }
73 else if (apiLatency >= 300) {
74 apiLatencyIcon = '🟡';
75 }
76
77 const memoryTotal = Math.round(os.totalmem() / 1024 / 1024);
78 const memoryUsed = Math.round((os.totalmem() - os.freemem()) / 1024 / 1024);
79 const memoryUsedByBot = Math.round(process.memoryUsage().heapUsed / 1024 / 1024);
80
81 const msgoptions: any = {
82 embeds: [
83 new MessageEmbed()
84 .setAuthor({
85 iconURL: client.user!.displayAvatarURL(),
86 name: 'System status'
87 })
88 .setDescription((latencyIcon !== '🔴' ? (await fetchEmoji('check'))?.toString() + ' All systems operational' : ':x: Some systems are down/slow'))
89 .addFields([
90 {
91 name: 'Command Type',
92 value: `${!options.isInteraction ? 'Legacy (Message-based)' : 'Slash Command'}`
93 },
94 {
95 name: 'Uptime',
96 value: `${formatDuration(intervalToDuration({
97 start: 0,
98 end: process.uptime() * 1000
99 }))}`
100 },
101 {
102 name: 'Latency',
103 value: `${latencyIcon} ${latency}ms`
104 },
105 {
106 name: 'API Latency',
107 value: `${apiLatencyIcon} ${apiLatency}ms`
108 },
109 {
110 name: 'Memory Usage',
111 value: `${memoryUsed}MB / ${memoryTotal}MB (${memoryUsedByBot}MB used by the bot)`
112 },
113 {
114 name: 'System Platform',
115 value: `${process.platform}`
116 },
117 {
118 name: 'NodeJS Version',
119 value: `${process.version}`
120 }
121 ])
122 ]
123 };
124
125 if (msg instanceof CommandInteraction)
126 msgoptions.content = '';
127
128 await this.deferReply(msg, msgoptions, true);
129 }
130 }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26