Skip to content
This repository was archived by the owner on Dec 7, 2021. It is now read-only.

Commit 4bf1fbc

Browse files
committed
Merge branch 'dev' into main
2 parents 506dbe2 + 4d73586 commit 4bf1fbc

8 files changed

Lines changed: 54 additions & 37 deletions

File tree

api/controllers/public/methods/collectStatistics.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ const cache = {};
2525
async function collectBotStatistics() {
2626
let cachingRequired = false;
2727
const arr = [];
28-
const script = '[this.ws.ping, this.ws.destroyed, this.guilds.cache.size, this.users.cache.size]';
28+
const script = '[this.ws.ping, this.ws.destroyed, this.guilds.cache.size, this.guilds.cache.reduce((acc, guild) => acc + guild.memberCount, 0)]';
2929

3030
if (cache.expires > Date.now()) return { shards: cache.stats.shards, ...cache.stats.stats };
3131
cachingRequired = true;

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "flame",
3-
"version": "5.2.0",
3+
"version": "5.2.1",
44
"main": "src/shard.js",
55
"scripts": {
66
"lint": "eslint ./src --fix"

src/commands/general/ServerCommand.js

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/* eslint-disable no-plusplus */
12
const { MessageEmbed } = require('discord.js');
23
const FlameCommand = require('../../structures/FlameCommand');
34
const { regions, verifyLevels } = require('../../utils/Constants');
@@ -13,25 +14,36 @@ class ServerCommand extends FlameCommand {
1314
}
1415

1516
async run(message, args) {
17+
// Because Collection#filter() is very slow, we'll use this shitty way to get required numbers.
18+
let [onlineMembers, dndMembers, idleMembers, offlineMembers] = Array(4).fill(0);
19+
for (const member of Array.from(message.guild.members.cache.values())) {
20+
switch (member.user.presence.status) {
21+
case 'online':
22+
onlineMembers++;
23+
break;
24+
case 'dnd':
25+
dndMembers++;
26+
break;
27+
case 'idle':
28+
idleMembers++;
29+
break;
30+
case 'offline':
31+
offlineMembers++;
32+
break;
33+
default:
34+
}
35+
}
1636
const embed = new MessageEmbed()
1737
.setAuthor(`Информация о ${message.guild.name} (${message.guild.id})`, message.guild.iconURL())
1838
.setColor('ffa500')
1939
.addField(`Участников [${message.guild.memberCount}]:`, `<:online2:814075431758069790> В сети: **${
20-
message.guild.members.cache.filter(
21-
(m) => m.user.presence.status === 'online',
22-
).size
40+
onlineMembers
2341
}**\n<:dnd2:814075464078983229> Не беспокоить: **${
24-
message.guild.members.cache.filter(
25-
(m) => m.user.presence.status === 'dnd',
26-
).size
42+
dndMembers
2743
}**\n<:idle:814075524829282374> Не на месте: **${
28-
message.guild.members.cache.filter(
29-
(m) => m.user.presence.status === 'idle',
30-
).size
44+
idleMembers
3145
}**\n<:offline2:814075554856304660> Не в сети: **${
32-
message.guild.members.cache.filter(
33-
(m) => m.user.presence.status === 'offline',
34-
).size
46+
offlineMembers
3547
}**`,
3648
true)
3749
.addField(`Каналы [${message.guild.channels.cache.size}]:`, `<:textchannel:814927097453608972> Текстовых: **${message.guild.channels.cache.filter((x) => x.type === 'text').size}**\n<:voicechannel:814927126498246658> Голосовых: **${message.guild.channels.cache.filter((x) => x.type === 'voice').size}**`, true)

src/commands/general/StatsCommand.js

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
const Discord = require('discord.js');
2+
const fetch = require('node-fetch');
23
const FlameCommand = require('../../structures/FlameCommand');
34
const { formatNumber } = require('../../utils/Functions');
45
const { dependencies } = require('../../../package.json');
@@ -8,30 +9,26 @@ class StatsCommand extends FlameCommand {
89
super('stats', {
910
description: 'Показывает статистику бота.',
1011
category: 'general',
11-
cooldown: 3,
12+
cooldown: 5,
1213
usage: 'stats',
1314
aliases: [],
1415
});
1516
}
1617

1718
async run(message, args) {
18-
Promise.all(
19-
[
20-
await message.client.shard.fetchClientValues('guilds.cache.size'),
21-
await message.client.shard.broadcastEval('this.guilds.cache.reduce((acc, guild) => acc + guild.memberCount, 0)'),
22-
await message.client.shard.fetchClientValues('channels.cache.size'),
23-
],
24-
).then((res) => {
25-
return message.channel.send(
26-
new Discord.MessageEmbed()
19+
message.channel.startTyping();
20+
fetch('https://api.flamebot.ru/public/stats')
21+
.then((res) => res.json())
22+
.then((res) => {
23+
const embed = new Discord.MessageEmbed()
2724
.setAuthor(message.client.user.tag, message.client.user.avatarURL({ size: 2048 }))
25+
.setDescription(`Данный сервер расположен на шарде **${message.guild.shardID}**. Источник статистики: [api.flamebot.ru](https://api.flamebot.ru/public/stats). Информация обновляется каждые 5 минут.`)
2826
.setThumbnail(message.client.user.avatarURL({ size: 2048 }))
29-
.setDescription(`На текущий момент, бот запущен с **${message.client?.shard?.count ?? 0}** шардами(-ом). Данный сервер расположен на **${message.guild.shardID}** шарде.`)
3027
.addField(
3128
'Статистика бота',
32-
`**Серверов:** ${formatNumber(res[0].reduce((a, b) => a + b, 0))}\n`
33-
+ `**Пользователей:** ${formatNumber(res[1].reduce((a, b) => a + b, 0))}\n`
34-
+ `**Каналов:** ${formatNumber(res[2].reduce((a, b) => a + b, 0))}`,
29+
`**Серверов:** ${formatNumber(res.totalGuilds) ?? '-'}\n`
30+
+ `**Пользователей:** ${formatNumber(res.totalUsers) ?? '-'}\n`
31+
+ `**Осколков:** ${res.totalShards ?? '-'}`,
3532
true,
3633
)
3734
.addField(
@@ -42,10 +39,18 @@ class StatsCommand extends FlameCommand {
4239
true,
4340
)
4441
.setColor('ffa500')
45-
.setFooter('Последний перезапуск')
46-
.setTimestamp(new Date(message.client.readyAt).getTime()),
47-
);
48-
});
42+
.setFooter('Последний перезапуск бота')
43+
.setTimestamp(new Date(message.client.readyAt).getTime());
44+
45+
let pings = '';
46+
for (const shard of res?.shards) {
47+
pings += `• ${shard.disconnected ? '🔴' : '🟢'} Осколок #${shard.id} -> ${shard.ping ?? '-'}ms\n`;
48+
}
49+
50+
embed.addField('Состояния осколков (WebSocket)', `\`\`\`diff\n${pings}\`\`\``);
51+
message.channel.send(embed);
52+
});
53+
await message.channel.stopTyping();
4954
}
5055
}
5156

src/commands/moderation/BanCommand.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class BanCommand extends FlameCommand {
2727
await new ActionConfirmationUtil(message.client, message.author).init(`Вы уверены, что хотите забанить пользователя **${user.user.tag}**? У вас есть **30** секунд на решение.`, message.channel).then(async (response) => {
2828
if (response) {
2929
try {
30-
await message.guild.members.ban(user.id, { reason: args.slice(1).join(' ').length ? args.slice(1).join(' ').slice(0, 499) : null });
30+
await message.guild.members.ban(user.id, { days: 1, reason: args.slice(1).join(' ').length ? args.slice(1).join(' ').slice(0, 499) : null });
3131
message.channel.send(`${message.client.constants.emojis.DONE} Пользователь **${user.user.tag}** (${user.id}) был успешно забанен.`);
3232
} catch {
3333
message.fail('Мне не удалось забанить данного пользователя.');

src/commands/settings/WelcomerCommand.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,8 @@ class WelcomerCommand extends FlameCommand {
8484
.setAuthor('Система приветствий новых участников', Constants.static.MODULE_GRAY)
8585
.setColor(data.welcome.enabled ? '#a5ff2a' : '#ff3333')
8686
.setDescription(`На данном сервере **${data.welcome.enabled ? 'включен' : 'отключён'}** модуль приветствий новых участников.`)
87-
.addField('Сообщение приветствия', data.welcome.text ? `\`\`\`${data.welcome.text.slice(0, 999)}\`\`\`` : 'Сообщение приветствия не установлено.')
88-
.addField('Роль для новых пользователей', data.welcomeRole ? `<@%${data.welcomeRole}> (${data.welcomeRole})` : 'Роль для новых поьзователей не установлена.')
87+
.addField('Сообщение приветствия', data.welcome.text ? `\`\`\`${data.welcome.text.slice(0, 999)}\`\`\`` : 'Сообщение приветствия не установлено.', true)
88+
.addField('Роль для новых пользователей', data.welcomeRole ? `<@&${data.welcomeRole}> (${data.welcomeRole})` : 'Роль для новых пользователей не установлена.', true)
8989
.addField('Настройка модуля', 'Подробную справку по настройке данного модуля вы можете получить на [этой странице](https://docs.flamebot.ru/abilities/welcomer).')
9090
.setFooter(message.guild.name, message.guild.iconURL())
9191
.setTimestamp(),

src/listeners/members/GuildMemberAddListener.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class GuildMemberAddListener extends FlameListener {
1111
if (data) {
1212
if (data.welcome?.enabled && data.welcome?.channel && data.welcome?.text) {
1313
member.guild.channels.cache.get(data.welcome.channel)
14-
.send(buildWelcomeMessage(member, data.welcome.text))
14+
?.send(buildWelcomeMessage(member, data.welcome.text))
1515
.catch(() => null);
1616
}
1717
if (data.welcome?.role) member.roles.add(data.welcomeRole);

src/services/CommandExecutorService.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class CommandsExecutorService {
4141
: null;
4242
}
4343
if (!this.message.guild.me.permissionsIn(this.message.channel).has('EMBED_LINKS')) return this.message.fail(`Упс, кажется, что у меня нет прав на встраивание ссылок в данном канале. Выдайте мне пожалуйста данную возможность, иначе я не смогу корректно работать и выполнять команды.`);
44-
if (command.premium && !guild.premium) return premiumRequired(this.message);
44+
if (command.premium && !guild.premium) return Errors.premiumRequired(this.message);
4545

4646
if (command.clientPermissions.length > 0 && command.clientPermissions.some((permission) => !this.message.guild.me.permissions.has(permission)))
4747
return this.message.fail(`Похоже, что для выполнения данной команды боту нужны дополнительные права. Выдайте ему их, прежде чем заново использовать команду.\nДля стабильной работы всего функционала рекомендуется выдать право администратора сервера.`);

0 commit comments

Comments
 (0)