1 |
import { CommandInteraction, GuildMember, Interaction, Message } from 'discord.js'; |
/** |
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'; |
import BaseCommand from '../../utils/structures/BaseCommand'; |
22 |
import DiscordClient from '../../client/Client'; |
import DiscordClient from '../../client/Client'; |
23 |
import CommandOptions from '../../types/CommandOptions'; |
import CommandOptions from '../../types/CommandOptions'; |
24 |
import InteractionOptions from '../../types/InteractionOptions'; |
import InteractionOptions from '../../types/InteractionOptions'; |
25 |
import MessageEmbed from '../../client/MessageEmbed'; |
import MessageEmbed from '../../client/MessageEmbed'; |
26 |
import { fetchEmoji } from '../../utils/Emoji'; |
import { fetchEmoji } from '../../utils/Emoji'; |
27 |
import { timeProcess } from '../../utils/util'; |
import { formatDuration, intervalToDuration } from 'date-fns'; |
28 |
|
import os from 'os'; |
29 |
|
|
30 |
export default class SystemCommand extends BaseCommand { |
export default class SystemCommand extends BaseCommand { |
31 |
constructor() { |
constructor() { |
74 |
apiLatencyIcon = '🟡'; |
apiLatencyIcon = '🟡'; |
75 |
} |
} |
76 |
|
|
77 |
const memoryFree = Math.round(process.memoryUsage().heapUsed / 1024 / 1024 * 100) / 100; |
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 = { |
const msgoptions: any = { |
82 |
embeds: [ |
embeds: [ |
89 |
.addFields([ |
.addFields([ |
90 |
{ |
{ |
91 |
name: 'Command Type', |
name: 'Command Type', |
92 |
value: `${msg instanceof Message ? 'Legacy (Message-based)' : 'Slash Command'}` |
value: `${!options.isInteraction ? 'Legacy (Message-based)' : 'Slash Command'}` |
93 |
}, |
}, |
94 |
{ |
{ |
95 |
name: 'Uptime', |
name: 'Uptime', |
96 |
value: `${timeProcess(parseInt(process.uptime().toFixed(2)))}` |
value: `${formatDuration(intervalToDuration({ |
97 |
|
start: 0, |
98 |
|
end: process.uptime() * 1000 |
99 |
|
}))}` |
100 |
}, |
}, |
101 |
{ |
{ |
102 |
name: 'Latency', |
name: 'Latency', |
107 |
value: `${apiLatencyIcon} ${apiLatency}ms` |
value: `${apiLatencyIcon} ${apiLatency}ms` |
108 |
}, |
}, |
109 |
{ |
{ |
110 |
name: 'Available Memory', |
name: 'Memory Usage', |
111 |
value: `${memoryFree}MB / 1.0GB` |
value: `${memoryUsed}MB / ${memoryTotal}MB (${memoryUsedByBot}MB used by the bot)` |
112 |
}, |
}, |
113 |
{ |
{ |
114 |
name: 'System Platform', |
name: 'System Platform', |