refactor: add all CommandCategories constants, update HelpCategories to use them

- Add 12 constants to CommandCategories (ECONOMY, ENTERTAINMENT, SETTINGS, MODERATION,
  MUSIC, RADIO, UTILITY, INFORMATION, STATISTICS, SYSTEM, SUPER_ADMIN, ROLES)
- Replace all ~74 hardcoded getCategory() return strings with CommandCategories constants
- Update HelpCategories emojis, colors, descriptions to use constants
- Add missing HelpCategories entries for economy, music, radio, info, measurements
- Remove old rating command files (duplicated by new subpackage versions)
- Fix EntertainmentCommandRegistrar imports and remove RateCommand
This commit is contained in:
loki5512344 2026-07-29 15:22:12 +02:00
parent 604d3e59a8
commit 040870770d
Signed by: boba
GPG key ID: 253067914055423B
78 changed files with 194 additions and 1112 deletions

View file

@ -3,13 +3,20 @@ package creator.loki.command;
/** Имена категорий для {@link Command#getCategory()} (справка, селектор help). */
public final class CommandCategories {
/** Команды с GIF (nekos.life): hug, slap, poke и т.п. */
public static final String ECONOMY = "Экономика";
public static final String ENTERTAINMENT = "Развлечения";
public static final String SETTINGS = "Настройка";
public static final String MODERATION = "Модерация";
public static final String MUSIC = "Музыка";
public static final String RADIO = "Радио";
public static final String UTILITY = "Утилиты";
public static final String INFORMATION = "Информация";
public static final String STATISTICS = "Статистика";
public static final String SYSTEM = "Система";
public static final String SUPER_ADMIN = "Супер-Админ";
public static final String ROLES = "Роли";
public static final String GIF_INTERACTIVE = "GIF-интерактив";
/** Команды для поиска изображений (e621, gelbooru, yande.re) — только в NSFW-каналах. */
public static final String NSFW_IMAGES = "NSFW";
/** Команды измерений: pp, fat, aura и подобные. */
public static final String MEASUREMENTS = "Измерения";
private CommandCategories() {}

View file

@ -13,46 +13,58 @@ public final class HelpCategories {
static {
EMOJIS =
Map.ofEntries(
Map.entry("Общие", "📋"),
Map.entry("Роли", "🎭"),
Map.entry("Развлечения", "🎮"),
Map.entry(CommandCategories.ECONOMY, "💰"),
Map.entry(CommandCategories.ENTERTAINMENT, "🎮"),
Map.entry(CommandCategories.SETTINGS, "⚙️"),
Map.entry(CommandCategories.MODERATION, "🛡️"),
Map.entry(CommandCategories.MUSIC, "🎵"),
Map.entry(CommandCategories.RADIO, "📻"),
Map.entry(CommandCategories.UTILITY, "🔧"),
Map.entry(CommandCategories.INFORMATION, "ℹ️"),
Map.entry(CommandCategories.STATISTICS, "📊"),
Map.entry(CommandCategories.SYSTEM, "💠"),
Map.entry(CommandCategories.SUPER_ADMIN, "🔐"),
Map.entry(CommandCategories.ROLES, "🎭"),
Map.entry(CommandCategories.GIF_INTERACTIVE, "💞"),
Map.entry("Модерация", "🛡️"),
Map.entry("Статистика", "📊"),
Map.entry("Утилиты", "🔧"),
Map.entry("Система", "💠"),
Map.entry("Настройка", "⚙️"),
Map.entry("Супер-Админ", "🔐"),
Map.entry(CommandCategories.NSFW_IMAGES, "🔞"));
Map.entry(CommandCategories.NSFW_IMAGES, "🔞"),
Map.entry(CommandCategories.MEASUREMENTS, "📏"));
COLORS =
Map.ofEntries(
Map.entry("Общие", new Color(52, 152, 219)),
Map.entry("Роли", new Color(155, 89, 182)),
Map.entry("Развлечения", new Color(241, 196, 15)),
Map.entry(CommandCategories.ECONOMY, new Color(241, 196, 15)),
Map.entry(CommandCategories.ENTERTAINMENT, new Color(241, 196, 15)),
Map.entry(CommandCategories.SETTINGS, new Color(149, 165, 166)),
Map.entry(CommandCategories.MODERATION, new Color(231, 76, 60)),
Map.entry(CommandCategories.MUSIC, new Color(46, 204, 113)),
Map.entry(CommandCategories.RADIO, new Color(46, 204, 113)),
Map.entry(CommandCategories.UTILITY, new Color(52, 152, 219)),
Map.entry(CommandCategories.INFORMATION, new Color(52, 152, 219)),
Map.entry(CommandCategories.STATISTICS, new Color(46, 204, 113)),
Map.entry(CommandCategories.SYSTEM, new Color(52, 73, 94)),
Map.entry(CommandCategories.SUPER_ADMIN, new Color(113, 54, 138)),
Map.entry(CommandCategories.ROLES, new Color(155, 89, 182)),
Map.entry(CommandCategories.GIF_INTERACTIVE, new Color(233, 30, 99)),
Map.entry("Модерация", new Color(231, 76, 60)),
Map.entry("Статистика", new Color(46, 204, 113)),
Map.entry("Утилиты", new Color(52, 152, 219)),
Map.entry("Система", new Color(52, 73, 94)),
Map.entry("Настройка", new Color(149, 165, 166)),
Map.entry("Супер-Админ", new Color(113, 54, 138)),
Map.entry(CommandCategories.NSFW_IMAGES, new Color(180, 0, 0)));
Map.entry(CommandCategories.NSFW_IMAGES, new Color(180, 0, 0)),
Map.entry(CommandCategories.MEASUREMENTS, new Color(255, 159, 67)));
DESCRIPTIONS =
Map.ofEntries(
Map.entry("Общие", "Основные команды бота"),
Map.entry("Роли", "Управление кастомными ролями"),
Map.entry("Развлечения", "Игры, мемы, рейтинги, текст"),
Map.entry(CommandCategories.ECONOMY, "Экономические команды и мини-игры"),
Map.entry(CommandCategories.ENTERTAINMENT, "Игры, мемы, рейтинги, текст"),
Map.entry(CommandCategories.SETTINGS, "Настройка систем бота (только админы)"),
Map.entry(CommandCategories.MODERATION, "Команды модерации сервера"),
Map.entry(CommandCategories.MUSIC, "Управление музыкой и плеером"),
Map.entry(CommandCategories.RADIO, "Слушать радио в голосовом канале"),
Map.entry(CommandCategories.UTILITY, "Полезные инструменты"),
Map.entry(CommandCategories.INFORMATION, "Информация о сервере и пользователях"),
Map.entry(CommandCategories.STATISTICS, "Уровни, репутация и статистика"),
Map.entry(CommandCategories.SYSTEM, "Метрики и служебная информация для админов"),
Map.entry(CommandCategories.SUPER_ADMIN, "Сервисные команды владельца бота"),
Map.entry(CommandCategories.ROLES, "Управление кастомными ролями"),
Map.entry(
CommandCategories.GIF_INTERACTIVE, "Действия с участником в GIF (nekos.life)"),
Map.entry("Модерация", "Команды модерации сервера"),
Map.entry("Статистика", "Уровни, репутация и статистика"),
Map.entry("Утилиты", "Полезные инструменты"),
Map.entry("Система", "Метрики и служебная информация для админов"),
Map.entry("Настройка", "Настройка систем бота (только админы)"),
Map.entry("Супер-Админ", "Сервисные команды владельца бота"),
Map.entry(CommandCategories.NSFW_IMAGES, "Поиск изображений (только в NSFW каналах)"));
Map.entry(CommandCategories.NSFW_IMAGES, "Поиск изображений (только в NSFW каналах)"),
Map.entry(CommandCategories.MEASUREMENTS, "Забавные измерительные команды"));
}
private HelpCategories() {}
@ -71,10 +83,10 @@ public final class HelpCategories {
public static boolean isCategoryVisible(
String category, boolean isAdmin, boolean isSuper, boolean isNsfwChannel) {
if ("Настройка".equals(category) && !isAdmin) {
if (CommandCategories.SETTINGS.equals(category) && !isAdmin) {
return false;
}
if ("Супер-Админ".equals(category) && !isSuper) {
if (CommandCategories.SUPER_ADMIN.equals(category) && !isSuper) {
return false;
}
if (CommandCategories.NSFW_IMAGES.equals(category) && !isNsfwChannel) {

View file

@ -12,6 +12,7 @@ import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.MessageEmbed;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import creator.loki.command.CommandCategories;
public class GenerateRatingsCommand implements Command {
private static final Logger logger = LoggerFactory.getLogger(GenerateRatingsCommand.class);
@ -41,7 +42,7 @@ public class GenerateRatingsCommand implements Command {
@Override
public String getCategory() {
return "Супер-Админ";
return CommandCategories.SUPER_ADMIN;
}
@Override

View file

@ -9,6 +9,7 @@ import creator.loki.util.GuildChannelResolve;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.channel.concrete.VoiceChannel;
import creator.loki.feature.counter.service.format.CounterConfigFormatter;
import creator.loki.command.CommandCategories;
public class CounterSetupPrefixCommand implements Command {
private final CounterManager counterManager;
@ -36,7 +37,7 @@ public class CounterSetupPrefixCommand implements Command {
@Override
public String getCategory() {
return "Настройка";
return CommandCategories.SETTINGS;
}
@Override

View file

@ -9,6 +9,7 @@ import creator.loki.embed.EmbedFactory;
import creator.loki.embed.EmbedTemplates;
import creator.loki.feature.economy.domain.EconomyAccount;
import creator.loki.feature.economy.service.EconomyService;
import creator.loki.command.CommandCategories;
public class BankCommand implements Command {
private final EconomyService economyService;
@ -34,7 +35,7 @@ public class BankCommand implements Command {
@Override
public String getCategory() {
return "Экономика";
return CommandCategories.ECONOMY;
}
@Override

View file

@ -9,6 +9,7 @@ import creator.loki.embed.EmbedFactory;
import creator.loki.feature.economy.domain.EconomyAccount;
import creator.loki.feature.economy.service.EconomyService;
import net.dv8tion.jda.api.entities.Member;
import creator.loki.command.CommandCategories;
public class BalanceCommand implements Command {
private final EconomyService economyService;
@ -34,7 +35,7 @@ public class BalanceCommand implements Command {
@Override
public String getCategory() {
return "Экономика";
return CommandCategories.ECONOMY;
}
@Override

View file

@ -8,6 +8,7 @@ import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import creator.loki.feature.economy.domain.EconomyAccount;
import creator.loki.feature.economy.service.EconomyService;
import creator.loki.command.CommandCategories;
public class BaltopCommand implements Command {
private final EconomyService economyService;
@ -28,7 +29,7 @@ public class BaltopCommand implements Command {
@Override
public String getCategory() {
return "Экономика";
return CommandCategories.ECONOMY;
}
@Override

View file

@ -7,6 +7,7 @@ import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import creator.loki.embed.EmbedTemplates;
import creator.loki.feature.economy.service.EconomyService;
import creator.loki.command.CommandCategories;
public class DailyCommand implements Command {
private final EconomyService economyService;
@ -27,7 +28,7 @@ public class DailyCommand implements Command {
@Override
public String getCategory() {
return "Экономика";
return CommandCategories.ECONOMY;
}
@Override

View file

@ -7,6 +7,7 @@ import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedTemplates;
import creator.loki.feature.economy.service.EconomyService;
import net.dv8tion.jda.api.entities.Member;
import creator.loki.command.CommandCategories;
public class PayCommand implements Command {
private final EconomyService economyService;
@ -32,7 +33,7 @@ public class PayCommand implements Command {
@Override
public String getCategory() {
return "Экономика";
return CommandCategories.ECONOMY;
}
@Override

View file

@ -8,6 +8,7 @@ import creator.loki.embed.EmbedFactory;
import creator.loki.embed.EmbedTemplates;
import creator.loki.feature.economy.service.game.JobService;
import creator.loki.feature.economy.service.game.JobService;
import creator.loki.command.CommandCategories;
public class JobCommand implements Command {
@ -34,7 +35,7 @@ public class JobCommand implements Command {
@Override
public String getCategory() {
return "Экономика";
return CommandCategories.ECONOMY;
}
@Override

View file

@ -8,6 +8,7 @@ import creator.loki.embed.EmbedFactory;
import creator.loki.embed.EmbedTemplates;
import creator.loki.feature.economy.service.game.JobService;
import creator.loki.feature.economy.service.game.JobService;
import creator.loki.command.CommandCategories;
public class WorkCommand implements Command {
@ -29,7 +30,7 @@ public class WorkCommand implements Command {
@Override
public String getCategory() {
return "Экономика";
return CommandCategories.ECONOMY;
}
@Override

View file

@ -11,6 +11,7 @@ import creator.loki.embed.EmbedTemplates;
import creator.loki.feature.economy.service.game.BlackjackService;
import creator.loki.feature.economy.service.EconomyService;
import net.dv8tion.jda.api.entities.MessageEmbed;
import creator.loki.command.CommandCategories;
public class BlackjackCommand implements Command {
@ -40,7 +41,7 @@ public class BlackjackCommand implements Command {
@Override
public String getCategory() {
return "Экономика";
return CommandCategories.ECONOMY;
}
@Override

View file

@ -7,6 +7,7 @@ import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import creator.loki.embed.EmbedTemplates;
import creator.loki.feature.economy.service.FishingService;
import creator.loki.command.CommandCategories;
public class FishCommand implements Command {
@ -33,7 +34,7 @@ public class FishCommand implements Command {
@Override
public String getCategory() {
return "Экономика";
return CommandCategories.ECONOMY;
}
@Override

View file

@ -8,6 +8,7 @@ import creator.loki.embed.EmbedFactory;
import creator.loki.embed.EmbedTemplates;
import creator.loki.feature.economy.service.EconomyService;
import creator.loki.feature.economy.service.game.SlotService;
import creator.loki.command.CommandCategories;
public class SlotCommand implements Command {
@ -36,7 +37,7 @@ public class SlotCommand implements Command {
@Override
public String getCategory() {
return "Экономика";
return CommandCategories.ECONOMY;
}
@Override

View file

@ -12,6 +12,7 @@ import creator.loki.embed.EmbedFactory;
import creator.loki.embed.EmbedTemplates;
import creator.loki.feature.economy.service.EconomyService;
import net.dv8tion.jda.api.entities.Member;
import creator.loki.command.CommandCategories;
public class RobCommand implements Command {
private final EconomyService economyService;
@ -41,7 +42,7 @@ public class RobCommand implements Command {
@Override
public String getCategory() {
return "Экономика";
return CommandCategories.ECONOMY;
}
@Override

View file

@ -12,20 +12,19 @@ import creator.loki.feature.entertainment.commands.random.DiceCommand;
import creator.loki.feature.entertainment.commands.random.EightBallCommand;
import creator.loki.feature.entertainment.commands.choice.RandomChoiceCommand;
import creator.loki.feature.entertainment.service.RatingService;
import creator.loki.feature.rating.commands.AuraCommand;
import creator.loki.feature.rating.commands.BoykisserCommand;
import creator.loki.feature.rating.commands.FatCommand;
import creator.loki.feature.rating.commands.GayCommand;
import creator.loki.feature.rating.commands.GlazeCommand;
import creator.loki.feature.rating.commands.GoonCommand;
import creator.loki.feature.rating.commands.IqCommand;
import creator.loki.feature.rating.commands.LuckCommand;
import creator.loki.feature.rating.commands.MustacheCommand;
import creator.loki.feature.rating.commands.PpCommand;
import creator.loki.feature.rating.commands.RateCommand;
import creator.loki.feature.rating.commands.RizzCommand;
import creator.loki.feature.rating.commands.SimpCommand;
import creator.loki.feature.rating.commands.VibeCommand;
import creator.loki.feature.rating.commands.body.FatCommand;
import creator.loki.feature.rating.commands.body.MustacheCommand;
import creator.loki.feature.rating.commands.body.PpCommand;
import creator.loki.feature.rating.commands.fortune.AuraCommand;
import creator.loki.feature.rating.commands.fortune.LuckCommand;
import creator.loki.feature.rating.commands.fortune.RizzCommand;
import creator.loki.feature.rating.commands.mind.BoykisserCommand;
import creator.loki.feature.rating.commands.mind.GayCommand;
import creator.loki.feature.rating.commands.mind.IqCommand;
import creator.loki.feature.rating.commands.vibe.GlazeCommand;
import creator.loki.feature.rating.commands.vibe.GoonCommand;
import creator.loki.feature.rating.commands.vibe.SimpCommand;
import creator.loki.feature.rating.commands.vibe.VibeCommand;
import creator.loki.feature.ship.ShipCommand;
import creator.loki.feature.ship.repository.ShipPairRepository;
import creator.loki.feature.social.commands.ComplimentCommand;
@ -70,7 +69,6 @@ public class EntertainmentCommandRegistrar implements CommandRegistrar {
registry.register(new IqCommand(ratingService));
registry.register(new GayCommand(ratingService));
registry.register(new PpCommand(ratingService));
registry.register(new RateCommand(ratingService));
registry.register(new BoykisserCommand(ratingService));
registry.register(new MustacheCommand(ratingService));
registry.register(new FatCommand(ratingService));

View file

@ -9,6 +9,7 @@ import creator.loki.command.Command;
import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import net.dv8tion.jda.api.entities.Member;
import creator.loki.command.CommandCategories;
public class GlazbobaCommand implements Command {
@ -29,7 +30,7 @@ public class GlazbobaCommand implements Command {
@Override
public String getCategory() {
return "Развлечения";
return CommandCategories.ENTERTAINMENT;
}
@Override

View file

@ -12,6 +12,7 @@ import com.google.gson.JsonParser;
import creator.loki.command.Command;
import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import creator.loki.command.CommandCategories;
public class MemeCommand implements Command {
@ -32,7 +33,7 @@ public class MemeCommand implements Command {
@Override
public String getCategory() {
return "Развлечения";
return CommandCategories.ENTERTAINMENT;
}
@Override

View file

@ -11,6 +11,7 @@ import creator.loki.embed.EmbedTemplates;
import net.dv8tion.jda.api.EmbedBuilder;
import creator.loki.feature.utility.ChoiceOptionParser;
import creator.loki.feature.utility.ChoiceOptionParser;
import creator.loki.command.CommandCategories;
/** Случайный выбор из вариантов. Разбор строки - {@link ChoiceOptionParser}. */
public class RandomChoiceCommand implements Command {
@ -83,7 +84,7 @@ public class RandomChoiceCommand implements Command {
@Override
public String getCategory() {
return "Развлечения";
return CommandCategories.ENTERTAINMENT;
}
@Override

View file

@ -6,6 +6,7 @@ import java.util.Random;
import creator.loki.command.Command;
import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import creator.loki.command.CommandCategories;
public class CoinCommand implements Command {
private final Random random = new Random();
@ -27,7 +28,7 @@ public class CoinCommand implements Command {
@Override
public String getCategory() {
return "Развлечения";
return CommandCategories.ENTERTAINMENT;
}
@Override

View file

@ -6,6 +6,7 @@ import java.util.Random;
import creator.loki.command.Command;
import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import creator.loki.command.CommandCategories;
public class DiceCommand implements Command {
private final Random random = new Random();
@ -27,7 +28,7 @@ public class DiceCommand implements Command {
@Override
public String getCategory() {
return "Развлечения";
return CommandCategories.ENTERTAINMENT;
}
@Override

View file

@ -6,6 +6,7 @@ import java.util.Random;
import creator.loki.command.Command;
import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import creator.loki.command.CommandCategories;
public class EightBallCommand implements Command {
private final Random random = new Random();
@ -49,7 +50,7 @@ public class EightBallCommand implements Command {
@Override
public String getCategory() {
return "Развлечения";
return CommandCategories.ENTERTAINMENT;
}
@Override

View file

@ -16,6 +16,7 @@ import net.dv8tion.jda.api.components.actionrow.ActionRow;
import net.dv8tion.jda.api.components.selections.StringSelectMenu;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.entities.channel.attribute.IAgeRestrictedChannel;
import creator.loki.command.CommandCategories;
public class HelpCommand implements Command {
private final CommandRegistry registry;
@ -159,6 +160,6 @@ public class HelpCommand implements Command {
@Override
public String getCategory() {
return "Утилиты";
return CommandCategories.UTILITY;
}
}

View file

@ -8,6 +8,7 @@ import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.User;
import creator.loki.command.CommandCategories;
public class AvatarCommand implements Command {
@ -28,7 +29,7 @@ public class AvatarCommand implements Command {
@Override
public String getCategory() {
return "Развлечения";
return CommandCategories.ENTERTAINMENT;
}
@Override

View file

@ -12,6 +12,7 @@ import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Role;
import net.dv8tion.jda.api.entities.User;
import creator.loki.command.CommandCategories;
public class InfoCommand implements Command {
@ -114,6 +115,6 @@ public class InfoCommand implements Command {
@Override
public String getCategory() {
return "Утилиты";
return CommandCategories.UTILITY;
}
}

View file

@ -5,6 +5,7 @@ import java.awt.Color;
import creator.loki.command.Command;
import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import creator.loki.command.CommandCategories;
public class PingCommand implements Command {
@ -44,6 +45,6 @@ public class PingCommand implements Command {
@Override
public String getCategory() {
return "Утилиты";
return CommandCategories.UTILITY;
}
}

View file

@ -9,6 +9,7 @@ import creator.loki.embed.EmbedFactory;
import creator.loki.feature.serverstats.ServerStatsService;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.utils.FileUpload;
import creator.loki.command.CommandCategories;
public class ServerStatsCommand implements Command {
private final ServerStatsService statsService;
@ -34,7 +35,7 @@ public class ServerStatsCommand implements Command {
@Override
public String getCategory() {
return "Информация";
return CommandCategories.INFORMATION;
}
@Override

View file

@ -6,6 +6,7 @@ import creator.loki.command.Command;
import creator.loki.command.CommandContext;
import creator.loki.feature.level.service.LeaderboardService;
import net.dv8tion.jda.api.components.actionrow.ActionRow;
import creator.loki.command.CommandCategories;
/** Команда таблицы лидеров (рефакторинг: 241 → 50 строк) */
public class LeaderboardCommand implements Command {
@ -32,7 +33,7 @@ public class LeaderboardCommand implements Command {
@Override
public String getCategory() {
return "Статистика";
return CommandCategories.STATISTICS;
}
@Override

View file

@ -10,6 +10,7 @@ import creator.loki.feature.config.repository.ConfigRepository;
import creator.loki.feature.level.service.LevelRoleService;
import net.dv8tion.jda.api.Permission;
import creator.loki.feature.level.commands.util.LevelRoleFormatter;
import creator.loki.command.CommandCategories;
public class LevelRoleCommand implements Command {
private final LevelRoleService levelRoleService;
@ -37,7 +38,7 @@ public class LevelRoleCommand implements Command {
@Override
public String getCategory() {
return "Настройка";
return CommandCategories.SETTINGS;
}
@Override

View file

@ -14,6 +14,7 @@ import net.dv8tion.jda.api.components.actionrow.ActionRow;
import net.dv8tion.jda.api.components.buttons.Button;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import creator.loki.command.CommandCategories;
/**
* Одноразовая команда для сброса уровней и XP всех пользователей Сохраняет время в войсе и
@ -48,7 +49,7 @@ public class ResetLevelsCommand implements Command {
@Override
public String getCategory() {
return "Настройка";
return CommandCategories.SETTINGS;
}
@Override

View file

@ -7,6 +7,7 @@ import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import net.dv8tion.jda.api.OnlineStatus;
import net.dv8tion.jda.api.entities.Guild;
import creator.loki.command.CommandCategories;
public class StatsCommand implements Command {
@ -27,7 +28,7 @@ public class StatsCommand implements Command {
@Override
public String getCategory() {
return "Статистика";
return CommandCategories.STATISTICS;
}
@Override

View file

@ -10,6 +10,7 @@ import creator.loki.feature.config.repository.ConfigRepository;
import creator.loki.util.GuildChannelResolve;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
import creator.loki.command.CommandCategories;
/** Настройка каналов логирования через префиксную команду {@code log-setup}. */
public class LogSetupPrefixCommand implements Command {
@ -36,7 +37,7 @@ public class LogSetupPrefixCommand implements Command {
@Override
public String getCategory() {
return "Настройка";
return CommandCategories.SETTINGS;
}
@Override

View file

@ -9,6 +9,7 @@ import creator.loki.config.BotConfig;
import creator.loki.embed.EmbedFactory;
import creator.loki.feature.metrics.MetricsCollector;
import net.dv8tion.jda.api.Permission;
import creator.loki.command.CommandCategories;
public class MetricsCommand implements Command {
private final MetricsCollector metrics;
@ -82,6 +83,6 @@ public class MetricsCommand implements Command {
@Override
public String getCategory() {
return "Система";
return CommandCategories.SYSTEM;
}
}

View file

@ -8,6 +8,7 @@ import creator.loki.embed.EmbedFactory;
import creator.loki.feature.moderation.repository.ModerationCaseRepository;
import creator.loki.feature.moderation.util.ModerationHelper;
import net.dv8tion.jda.api.Permission;
import creator.loki.command.CommandCategories;
public class CaseLookupCommand implements Command {
private final ModerationCaseRepository cases;
@ -33,7 +34,7 @@ public class CaseLookupCommand implements Command {
@Override
public String getCategory() {
return "Модерация";
return CommandCategories.MODERATION;
}
@Override

View file

@ -17,6 +17,7 @@ import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Role;
import creator.loki.command.CommandCategories;
public class MuteCommand implements Command {
private static final int MAX_REASON_LENGTH = 500;
@ -57,7 +58,7 @@ public class MuteCommand implements Command {
}
public String getCategory() {
return "Модерация";
return CommandCategories.MODERATION;
}
@Override

View file

@ -9,6 +9,7 @@ import creator.loki.feature.moderation.util.ModerationHelper;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member;
import creator.loki.command.CommandCategories;
public final class PunishCommand {
private PunishCommand() {}
@ -58,7 +59,7 @@ public final class PunishCommand {
@Override
public String getCategory() {
return "Модерация";
return CommandCategories.MODERATION;
}
@Override

View file

@ -16,6 +16,7 @@ import creator.loki.feature.moderation.repository.ModerationCaseRepository;
import creator.loki.feature.moderation.util.ModerationHelper;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.Permission;
import creator.loki.command.CommandCategories;
public class UnmuteCommand implements Command {
private final ModerationCaseRepository cases;
@ -54,7 +55,7 @@ public class UnmuteCommand implements Command {
@Override
public String getCategory() {
return "Модерация";
return CommandCategories.MODERATION;
}
@Override

View file

@ -7,6 +7,7 @@ import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedTemplates;
import creator.loki.feature.moderation.util.ModerationHelper;
import net.dv8tion.jda.api.Permission;
import creator.loki.command.CommandCategories;
public class SwapCommand implements Command {
private final Random random = new Random();
@ -28,7 +29,7 @@ public class SwapCommand implements Command {
@Override
public String getCategory() {
return "Модерация";
return CommandCategories.MODERATION;
}
@Override

View file

@ -11,6 +11,7 @@ import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
import creator.loki.command.CommandCategories;
public class ClearCommand implements Command {
@Override
@ -30,7 +31,7 @@ public class ClearCommand implements Command {
@Override
public String getCategory() {
return "Модерация";
return CommandCategories.MODERATION;
}
@Override

View file

@ -5,6 +5,7 @@ import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedTemplates;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.channel.attribute.ISlowmodeChannel;
import creator.loki.command.CommandCategories;
public class SlowmodeCommand implements Command {
@Override
@ -24,7 +25,7 @@ public class SlowmodeCommand implements Command {
@Override
public String getCategory() {
return "Модерация";
return CommandCategories.MODERATION;
}
@Override

View file

@ -5,6 +5,7 @@ import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedTemplates;
import creator.loki.feature.moderation.repository.WarningRepository;
import net.dv8tion.jda.api.Permission;
import creator.loki.command.CommandCategories;
public class UnwarnCommand implements Command {
private final WarningRepository warnings;
@ -30,7 +31,7 @@ public class UnwarnCommand implements Command {
@Override
public String getCategory() {
return "Модерация";
return CommandCategories.MODERATION;
}
@Override

View file

@ -19,6 +19,7 @@ import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Role;
import creator.loki.command.CommandCategories;
public class WarnCommand implements Command {
private static final long AUTO_MUTE_HOURS = 1;
@ -62,7 +63,7 @@ public class WarnCommand implements Command {
@Override
public String getCategory() {
return "Модерация";
return CommandCategories.MODERATION;
}
@Override

View file

@ -9,6 +9,7 @@ import creator.loki.feature.moderation.repository.WarningRepository;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.Member;
import creator.loki.command.CommandCategories;
public class WarningsHistoryCommand implements Command {
private final WarningRepository warnings;
@ -34,7 +35,7 @@ public class WarningsHistoryCommand implements Command {
@Override
public String getCategory() {
return "Модерация";
return CommandCategories.MODERATION;
}
@Override

View file

@ -5,6 +5,7 @@ import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedTemplates;
import creator.loki.feature.music.core.PlayerManager;
import creator.loki.feature.music.manage.GuildMusicManager;
import creator.loki.command.CommandCategories;
public class FilterCommands {
private FilterCommands() {}
@ -69,7 +70,7 @@ public class FilterCommands {
@Override
public String getCategory() {
return "Музыка";
return CommandCategories.MUSIC;
}
@Override
@ -154,7 +155,7 @@ public class FilterCommands {
@Override
public String getCategory() {
return "Музыка";
return CommandCategories.MUSIC;
}
@Override

View file

@ -5,6 +5,7 @@ import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedTemplates;
import creator.loki.feature.music.core.PlayerManager;
import creator.loki.feature.music.manage.GuildMusicManager;
import creator.loki.command.CommandCategories;
public class PlayerCommands {
@ -46,7 +47,7 @@ public class PlayerCommands {
@Override
public String getCategory() {
return "Музыка";
return CommandCategories.MUSIC;
}
@Override
@ -106,7 +107,7 @@ public class PlayerCommands {
@Override
public String getCategory() {
return "Музыка";
return CommandCategories.MUSIC;
}
@Override
@ -147,7 +148,7 @@ public class PlayerCommands {
@Override
public String getCategory() {
return "Музыка";
return CommandCategories.MUSIC;
}
@Override

View file

@ -14,6 +14,7 @@ import creator.loki.feature.utility.VoiceHelper;
import dev.arbjerg.lavalink.client.player.Track;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member;
import creator.loki.command.CommandCategories;
public class PlayCommand implements Command {
private static final Set<String> SOURCES = Set.of("yt", "sc", "list");
@ -42,7 +43,7 @@ public class PlayCommand implements Command {
@Override
public String getCategory() {
return "Музыка";
return CommandCategories.MUSIC;
}
@Override

View file

@ -7,6 +7,7 @@ import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.utils.FileUpload;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import creator.loki.command.CommandCategories;
/** Команда для просмотра профиля с красивой карточкой */
public class ProfileCommand implements Command {
@ -34,7 +35,7 @@ public class ProfileCommand implements Command {
@Override
public String getCategory() {
return "Статистика";
return CommandCategories.STATISTICS;
}
@Override

View file

@ -9,6 +9,7 @@ import creator.loki.embed.EmbedTemplates;
import creator.loki.feature.radio.service.RadioManager;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member;
import creator.loki.command.CommandCategories;
public class RadioCommand implements Command {
private final RadioManager radioManager;
@ -35,7 +36,7 @@ public class RadioCommand implements Command {
@Override
public String getCategory() {
return "Радио";
return CommandCategories.RADIO;
}
@Override

View file

@ -1,88 +0,0 @@
package creator.loki.feature.rating.commands;
import java.awt.Color;
import com.google.inject.Inject;
import creator.loki.command.Command;
import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import creator.loki.feature.entertainment.service.RatingService;
import net.dv8tion.jda.api.entities.Member;
public class AuraCommand implements Command {
private final RatingService ratingService;
@Inject
public AuraCommand(RatingService ratingService) {
this.ratingService = ratingService;
}
@Override
public String getName() {
return "aura";
}
@Override
public String getDescription() {
return "Проверить свою ауру (результат всегда одинаковый)";
}
@Override
public String getUsage() {
return "aura [@user]";
}
@Override
public String getCategory() {
return "Развлечения";
}
@Override
public void execute(CommandContext context) {
if (!ratingService.checkAndApplyCooldown(context, "aura")) return;
Member target = ratingService.resolveTarget(context);
if (target == null) return;
int aura = ratingService.getDeterministicValue(target.getId(), 999, -50, 100);
String emoji;
Color color;
if (aura >= 80) {
emoji = "🌟";
color = new Color(255, 215, 0);
} else if (aura >= 50) {
emoji = "✨";
color = new Color(100, 255, 150);
} else if (aura >= 20) {
emoji = "😐";
color = new Color(52, 152, 219);
} else if (aura >= 0) {
emoji = "💫";
color = new Color(128, 128, 128);
} else if (aura >= -25) {
emoji = "🌑";
color = new Color(231, 76, 60);
} else {
emoji = "💀";
color = new Color(100, 0, 0);
}
StringBuilder bar = new StringBuilder();
int filled = Math.max(0, Math.min(10, (aura + 50) / 15));
for (int i = 0; i < filled; i++) bar.append("✧");
for (int i = filled; i < 10; i++) bar.append("◇");
context
.getChannel()
.sendMessageEmbeds(
EmbedFactory.create()
.withTitle("✨ Аура")
.withDescription(target.getAsMention())
.addField("Сила", emoji + " **" + aura + "**\n" + bar, false)
.withThumbnail(target.getUser().getAvatarUrl())
.withColor(color)
.withFooter("💡 Детерминировано вашим Discord ID")
.build())
.queue();
}
}

View file

@ -1,72 +0,0 @@
package creator.loki.feature.rating.commands;
import com.google.inject.Inject;
import creator.loki.command.Command;
import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import creator.loki.feature.entertainment.service.RatingService;
import creator.loki.feature.rating.config.RatingConfig;
import creator.loki.feature.rating.config.RatingLevel;
import net.dv8tion.jda.api.entities.Member;
public class BoykisserCommand implements Command {
private final RatingService ratingService;
@Inject
public BoykisserCommand(RatingService ratingService) {
this.ratingService = ratingService;
}
@Override
public String getName() {
return "boykisser";
}
@Override
public String getDescription() {
return "На сколько ты boykisser (результат всегда одинаковый)";
}
@Override
public String getUsage() {
return "boykisser [@user]";
}
@Override
public String getCategory() {
return "Развлечения";
}
@Override
public void execute(CommandContext context) {
if (!ratingService.checkAndApplyCooldown(context, "boykisser")) return;
Member target = ratingService.resolveTarget(context);
if (target == null) return;
if (target.getUser().isBot()) {
context.getChannel().sendMessage("❌ Боты не целуют мальчиков!").queue();
return;
}
int boykisserLevel = ratingService.getDeterministicValue(target.getId(), 777, 0, 100);
StringBuilder bar = new StringBuilder();
int filled = boykisserLevel / 10;
for (int i = 0; i < filled; i++) bar.append("💋");
for (int i = filled; i < 10; i++) bar.append("⬜");
RatingLevel level = RatingLevel.findLevel(boykisserLevel, RatingConfig.getBoykisserLevels());
context
.getChannel()
.sendMessageEmbeds(
EmbedFactory.create()
.withTitle("💋 Boykisser Метр")
.withDescription(target.getAsMention())
.addField(
"Уровень", bar + "\n**" + boykisserLevel + "%** - " + level.getComment(), false)
.withThumbnail(target.getUser().getAvatarUrl())
.withColor(level.getColor())
.withFooter("💡 Детерминировано вашим Discord ID")
.build())
.queue();
}
}

View file

@ -1,68 +0,0 @@
package creator.loki.feature.rating.commands;
import com.google.inject.Inject;
import creator.loki.command.Command;
import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import creator.loki.feature.entertainment.service.RatingService;
import creator.loki.feature.rating.config.RatingConfig;
import creator.loki.feature.rating.config.RatingLevel;
import net.dv8tion.jda.api.entities.Member;
public class FatCommand implements Command {
private final RatingService ratingService;
@Inject
public FatCommand(RatingService ratingService) {
this.ratingService = ratingService;
}
@Override
public String getName() {
return "fat";
}
@Override
public String getDescription() {
return "Проверка на жирность (результат всегда одинаковый)";
}
@Override
public String getUsage() {
return "fat [@user]";
}
@Override
public String getCategory() {
return "Развлечения";
}
@Override
public void execute(CommandContext context) {
if (!ratingService.checkAndApplyCooldown(context, "fat")) return;
Member target = ratingService.resolveTarget(context);
if (target == null) return;
int fatLevel = ratingService.getDeterministicValue(target.getId(), 999, 0, 100);
StringBuilder bar = new StringBuilder();
int filled = fatLevel / 10;
for (int i = 0; i < filled; i++) bar.append("🟩");
for (int i = filled; i < 10; i++) bar.append("⬜");
RatingLevel level = RatingLevel.findLevel(fatLevel, RatingConfig.getFatLevels());
context
.getChannel()
.sendMessageEmbeds(
EmbedFactory.create()
.withTitle("🐷 Fat Метр")
.withDescription(target.getAsMention())
.addField(
"Жирность", bar + "\n**" + fatLevel + "%** - " + level.getComment(), false)
.withThumbnail(target.getUser().getAvatarUrl())
.withColor(level.getColor())
.withFooter("💡 Детерминировано вашим Discord ID")
.build())
.queue();
}
}

View file

@ -1,71 +0,0 @@
package creator.loki.feature.rating.commands;
import java.awt.Color;
import com.google.inject.Inject;
import creator.loki.command.Command;
import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import creator.loki.feature.entertainment.service.RatingService;
import net.dv8tion.jda.api.entities.Member;
public class GayCommand implements Command {
private final RatingService ratingService;
@Inject
public GayCommand(RatingService ratingService) {
this.ratingService = ratingService;
}
@Override
public String getName() {
return "gay";
}
@Override
public String getDescription() {
return "Гей-метр (результат всегда одинаковый)";
}
@Override
public String getUsage() {
return "gay [@user]";
}
@Override
public String getCategory() {
return "Развлечения";
}
@Override
public void execute(CommandContext context) {
if (!ratingService.checkAndApplyCooldown(context, "gay")) return;
Member target = ratingService.resolveTarget(context);
if (target == null) return;
if (target.getUser().isBot()) {
context.getChannel().sendMessage("❌ Боты не имеют ориентации!").queue();
return;
}
int gayLevel = ratingService.getDeterministicValue(target.getId(), 456, 0, 100);
String[] rainbow = {"🟥", "🟧", "🟨", "🟩", "🟦", "🟪"};
StringBuilder bar = new StringBuilder();
int filled = Math.min(gayLevel / 17 + 1, 6);
for (int i = 0; i < filled; i++) bar.append(rainbow[i]);
for (int i = filled; i < 6; i++) bar.append("⬜");
context
.getChannel()
.sendMessageEmbeds(
EmbedFactory.create()
.withTitle("🏳️‍🌈 Гей-метр")
.withDescription(target.getAsMention())
.addField("Уровень", bar + "\n**" + gayLevel + "%**", false)
.withThumbnail(target.getUser().getAvatarUrl())
.withColor(new Color(255, 0, 255))
.withFooter("💡 Это просто мем, не воспринимайте серьезно")
.build())
.queue();
}
}

View file

@ -1,64 +0,0 @@
package creator.loki.feature.rating.commands;
import com.google.inject.Inject;
import creator.loki.command.Command;
import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import creator.loki.feature.entertainment.service.RatingService;
import creator.loki.feature.rating.config.RatingConfig;
import creator.loki.feature.rating.config.RatingLevel;
import net.dv8tion.jda.api.entities.Member;
public class GlazeCommand implements Command {
private final RatingService ratingService;
@Inject
public GlazeCommand(RatingService ratingService) {
this.ratingService = ratingService;
}
@Override
public String getName() {
return "glaze";
}
@Override
public String getDescription() {
return "На сколько ты глазированный (результат всегда одинаковый)";
}
@Override
public String getUsage() {
return "glaze [@user]";
}
@Override
public String getCategory() {
return "Развлечения";
}
@Override
public void execute(CommandContext context) {
if (!ratingService.checkAndApplyCooldown(context, "glaze")) return;
Member target = ratingService.resolveTarget(context);
if (target == null) return;
int level = ratingService.getDeterministicValue(target.getId(), 333, 0, 100);
StringBuilder bar = new StringBuilder();
int filled = level / 10;
for (int i = 0; i < filled; i++) bar.append("🍩");
for (int i = filled; i < 10; i++) bar.append("⬜");
RatingLevel rl = RatingLevel.findLevel(level, RatingConfig.getGlazeLevels());
context
.getChannel()
.sendMessageEmbeds(
EmbedFactory.create()
.withTitle("🍩 Глазурь-метр")
.withDescription(target.getAsMention())
.addField("Глазурь", bar + "\n**" + level + "%** - " + rl.getComment(), false)
.withThumbnail(target.getUser().getAvatarUrl())
.withColor(rl.getColor())
.withFooter("💡 Детерминировано вашим Discord ID")
.build())
.queue();
}
}

View file

@ -1,67 +0,0 @@
package creator.loki.feature.rating.commands;
import java.awt.Color;
import com.google.inject.Inject;
import creator.loki.command.Command;
import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import creator.loki.feature.entertainment.service.RatingService;
import net.dv8tion.jda.api.entities.Member;
public class GoonCommand implements Command {
private final RatingService ratingService;
@Inject
public GoonCommand(RatingService ratingService) {
this.ratingService = ratingService;
}
@Override
public String getName() {
return "goon";
}
@Override
public String getDescription() {
return "Гуон-детектор (результат всегда одинаковый)";
}
@Override
public String getUsage() {
return "goon [@user]";
}
@Override
public String getCategory() {
return "Развлечения";
}
@Override
public void execute(CommandContext context) {
if (!ratingService.checkAndApplyCooldown(context, "goon")) return;
Member target = ratingService.resolveTarget(context);
if (target == null) return;
int level = ratingService.getDeterministicValue(target.getId(), 444, 0, 100);
StringBuilder bar = new StringBuilder();
int filled = level / 10;
for (int i = 0; i < filled; i++) bar.append("💀");
for (int i = filled; i < 10; i++) bar.append("⬜");
Color color =
level >= 70
? new Color(180, 0, 0)
: level >= 40 ? new Color(128, 0, 128) : new Color(100, 100, 100);
context
.getChannel()
.sendMessageEmbeds(
EmbedFactory.create()
.withTitle("💀 Goon-детектор")
.withDescription(target.getAsMention())
.addField("Уровень", bar + "\n**" + level + "%**", false)
.withThumbnail(target.getUser().getAvatarUrl())
.withColor(color)
.withFooter("💡 Детерминировано вашим Discord ID")
.build())
.queue();
}
}

View file

@ -1,70 +0,0 @@
package creator.loki.feature.rating.commands;
import com.google.inject.Inject;
import creator.loki.command.Command;
import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import creator.loki.feature.entertainment.service.RatingService;
import creator.loki.feature.rating.config.RatingConfig;
import creator.loki.feature.rating.config.RatingLevel;
import net.dv8tion.jda.api.entities.Member;
public class IqCommand implements Command {
private final RatingService ratingService;
@Inject
public IqCommand(RatingService ratingService) {
this.ratingService = ratingService;
}
@Override
public String getName() {
return "iq";
}
@Override
public String getDescription() {
return "Тест IQ (результат всегда одинаковый)";
}
@Override
public String getUsage() {
return "iq [@user]";
}
@Override
public String getCategory() {
return "Развлечения";
}
@Override
public void execute(CommandContext context) {
if (!ratingService.checkAndApplyCooldown(context, "iq")) return;
Member target = ratingService.resolveTarget(context);
if (target == null) return;
int iq;
if (target.getUser().isBot()) {
iq = 9000;
} else if (target.getId().equals("1414975197269987471")) {
iq = 1000;
} else {
iq = ratingService.getDeterministicValue(target.getId(), 123, 0, 140);
}
RatingLevel level = RatingConfig.findLevel(iq, "iq");
context
.getChannel()
.sendMessageEmbeds(
EmbedFactory.create()
.withTitle("🧠 Тест IQ")
.withDescription("Результат для " + target.getAsMention())
.addField("IQ Уровень", "**" + iq + "** - " + level.getComment(), false)
.withThumbnail(target.getUser().getAvatarUrl())
.withColor(level.getColor())
.withFooter("💡 Научно доказано вашим ID")
.build())
.queue();
}
}

View file

@ -1,67 +0,0 @@
package creator.loki.feature.rating.commands;
import com.google.inject.Inject;
import creator.loki.command.Command;
import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import creator.loki.feature.entertainment.service.RatingService;
import creator.loki.feature.rating.config.RatingConfig;
import creator.loki.feature.rating.config.RatingLevel;
import net.dv8tion.jda.api.entities.Member;
public class LuckCommand implements Command {
private final RatingService ratingService;
@Inject
public LuckCommand(RatingService ratingService) {
this.ratingService = ratingService;
}
@Override
public String getName() {
return "luck";
}
@Override
public String getDescription() {
return "Проверить свою удачу (результат всегда одинаковый)";
}
@Override
public String getUsage() {
return "luck [@user]";
}
@Override
public String getCategory() {
return "Развлечения";
}
@Override
public void execute(CommandContext context) {
if (!ratingService.checkAndApplyCooldown(context, "luck")) return;
Member target = ratingService.resolveTarget(context);
if (target == null) return;
int luck = ratingService.getDeterministicValue(target.getId(), 777, 0, 100);
StringBuilder bar = new StringBuilder();
int filled = luck / 10;
for (int i = 0; i < filled; i++) bar.append("🍀");
for (int i = filled; i < 10; i++) bar.append("⬜");
RatingLevel level = RatingLevel.findLevel(luck, RatingConfig.getLuckLevels());
context
.getChannel()
.sendMessageEmbeds(
EmbedFactory.create()
.withTitle("🍀 Удача")
.withDescription(target.getAsMention())
.addField("Везение", bar + "\n**" + luck + "%** - " + level.getComment(), false)
.withThumbnail(target.getUser().getAvatarUrl())
.withColor(level.getColor())
.withFooter("💡 Детерминировано вашим Discord ID")
.build())
.queue();
}
}

View file

@ -1,76 +0,0 @@
package creator.loki.feature.rating.commands;
import com.google.inject.Inject;
import creator.loki.command.Command;
import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import creator.loki.feature.entertainment.service.RatingService;
import creator.loki.feature.rating.config.RatingConfig;
import creator.loki.feature.rating.config.RatingLevel;
import net.dv8tion.jda.api.entities.Member;
public class MustacheCommand implements Command {
private final RatingService ratingService;
@Inject
public MustacheCommand(RatingService ratingService) {
this.ratingService = ratingService;
}
@Override
public String getName() {
return "mustache";
}
@Override
public String getDescription() {
return "Проверка на усатость (результат всегда одинаковый)";
}
@Override
public String getUsage() {
return "mustache [@user]";
}
@Override
public String getCategory() {
return "Развлечения";
}
@Override
public void execute(CommandContext context) {
if (!ratingService.checkAndApplyCooldown(context, "mustache")) return;
Member target = ratingService.resolveTarget(context);
if (target == null) return;
int mustacheLevel;
if (target.getUser().isBot() || target.getId().equals("1414975197269987471")) {
mustacheLevel = 0;
} else if (target.getId().equals("678283217094180915")) {
mustacheLevel = 1000;
} else {
mustacheLevel = ratingService.getDeterministicValue(target.getId(), 888, 0, 100);
}
StringBuilder bar = new StringBuilder();
int filled = Math.min(mustacheLevel / 10, 10);
for (int i = 0; i < filled; i++) bar.append("🧔");
for (int i = filled; i < 10; i++) bar.append("⬜");
RatingLevel level = RatingConfig.findLevel(mustacheLevel, "mustache");
context
.getChannel()
.sendMessageEmbeds(
EmbedFactory.create()
.withTitle("🧔 Mustache Метр")
.withDescription(target.getAsMention())
.addField(
"Усатость", bar + "\n**" + mustacheLevel + "%** - " + level.getComment(), false)
.withThumbnail(target.getUser().getAvatarUrl())
.withColor(level.getColor())
.withFooter("💡 Детерминировано вашим Discord ID")
.build())
.queue();
}
}

View file

@ -1,79 +0,0 @@
package creator.loki.feature.rating.commands;
import com.google.inject.Inject;
import creator.loki.command.Command;
import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import creator.loki.feature.entertainment.service.RatingService;
import creator.loki.feature.rating.config.RatingConfig;
import creator.loki.feature.rating.config.RatingLevel;
import net.dv8tion.jda.api.entities.Member;
public class PpCommand implements Command {
private final RatingService ratingService;
@Inject
public PpCommand(RatingService ratingService) {
this.ratingService = ratingService;
}
@Override
public String getName() {
return "pp";
}
@Override
public String getDescription() {
return "Измеритель pp (результат всегда одинаковый)";
}
@Override
public String getUsage() {
return "pp [@user]";
}
@Override
public String getCategory() {
return "Развлечения";
}
@Override
public void execute(CommandContext context) {
if (!ratingService.checkAndApplyCooldown(context, "pp")) return;
Member target = ratingService.resolveTarget(context);
if (target == null) return;
if (target.getUser().isBot()) {
context.getChannel().sendMessage("❌ У ботов нет pp!").queue();
return;
}
int size;
if (target.getId().equals("1414975197269987471")) {
size = 100;
} else {
size = ratingService.getDeterministicValue(target.getId(), 6969, 0, 30);
}
StringBuilder ppVisual = new StringBuilder("8");
for (int i = 0; i < size; i++) ppVisual.append("=");
ppVisual.append("D");
RatingLevel level = RatingConfig.findLevel(size, "pp");
context
.getChannel()
.sendMessageEmbeds(
EmbedFactory.create()
.withTitle("🍆 PP Размер")
.withDescription(target.getAsMention())
.addField(
"Размер",
"```" + ppVisual + "```\n**" + size + " см** - " + level.getComment(),
false)
.withThumbnail(target.getUser().getAvatarUrl())
.withColor(level.getColor())
.withFooter("💡 Детерминировано вашим Discord ID")
.build())
.queue();
}
}

View file

@ -1,79 +0,0 @@
package creator.loki.feature.rating.commands;
import java.awt.Color;
import java.util.HashMap;
import java.util.Map;
import com.google.inject.Inject;
import creator.loki.command.Command;
import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import creator.loki.feature.entertainment.service.RatingService;
import net.dv8tion.jda.api.entities.Member;
public class RateCommand implements Command {
private final RatingService ratingService;
@Inject
public RateCommand(RatingService ratingService) {
this.ratingService = ratingService;
}
@Override
public String getName() {
return "rate";
}
@Override
public String getDescription() {
return "Оценить пользователя из 10 (результат всегда одинаковый)";
}
@Override
public String getUsage() {
return "rate [@user]";
}
@Override
public String getCategory() {
return "Развлечения";
}
@Override
public void execute(CommandContext context) {
if (!ratingService.checkAndApplyCooldown(context, "rate")) return;
Member target = ratingService.resolveTarget(context);
if (target == null) return;
int rating = ratingService.getDeterministicValue(target.getId(), 420, 1, 10);
String stars = "⭐".repeat(rating) + "☆".repeat(10 - rating);
Map<Integer, String> comments = new HashMap<>();
comments.put(10, "💯 ИДЕАЛЬНО!");
comments.put(9, "🔥 Почти идеально!");
comments.put(8, "😍 Отлично!");
comments.put(7, "👍 Хорошо!");
comments.put(6, "🙂 Неплохо");
comments.put(5, "😐 Средне");
comments.put(4, "😕 Ниже среднего");
comments.put(3, "😬 Так себе");
comments.put(2, "💀 Плохо");
comments.put(1, "🗿 Ужасно");
String comment = comments.getOrDefault(rating, "🤔");
Color color = rating >= 8 ? new Color(255, 215, 0) : new Color(52, 152, 219);
context
.getChannel()
.sendMessageEmbeds(
EmbedFactory.create()
.withTitle("⭐ Оценка")
.withDescription(target.getAsMention())
.addField("Рейтинг", stars + "\n**" + rating + "/10** - " + comment, false)
.withThumbnail(target.getUser().getAvatarUrl())
.withColor(color)
.build())
.queue();
}
}

View file

@ -1,67 +0,0 @@
package creator.loki.feature.rating.commands;
import com.google.inject.Inject;
import creator.loki.command.Command;
import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import creator.loki.feature.entertainment.service.RatingService;
import creator.loki.feature.rating.config.RatingConfig;
import creator.loki.feature.rating.config.RatingLevel;
import net.dv8tion.jda.api.entities.Member;
public class RizzCommand implements Command {
private final RatingService ratingService;
@Inject
public RizzCommand(RatingService ratingService) {
this.ratingService = ratingService;
}
@Override
public String getName() {
return "rizz";
}
@Override
public String getDescription() {
return "На сколько у тебя ризз (харизма)";
}
@Override
public String getUsage() {
return "rizz [@user]";
}
@Override
public String getCategory() {
return "Развлечения";
}
@Override
public void execute(CommandContext context) {
if (!ratingService.checkAndApplyCooldown(context, "rizz")) return;
Member target = ratingService.resolveTarget(context);
if (target == null) return;
int rizz = ratingService.getDeterministicValue(target.getId(), 555, 0, 100);
StringBuilder bar = new StringBuilder();
int filled = rizz / 10;
for (int i = 0; i < filled; i++) bar.append("🗿");
for (int i = filled; i < 10; i++) bar.append("⬜");
RatingLevel level = RatingLevel.findLevel(rizz, RatingConfig.getRizzLevels());
context
.getChannel()
.sendMessageEmbeds(
EmbedFactory.create()
.withTitle("🗿 Rizz Метр")
.withDescription(target.getAsMention())
.addField("Харизма", bar + "\n**" + rizz + "%** - " + level.getComment(), false)
.withThumbnail(target.getUser().getAvatarUrl())
.withColor(level.getColor())
.withFooter("💡 Детерминировано вашим Discord ID")
.build())
.queue();
}
}

View file

@ -1,64 +0,0 @@
package creator.loki.feature.rating.commands;
import com.google.inject.Inject;
import creator.loki.command.Command;
import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import creator.loki.feature.entertainment.service.RatingService;
import creator.loki.feature.rating.config.RatingConfig;
import creator.loki.feature.rating.config.RatingLevel;
import net.dv8tion.jda.api.entities.Member;
public class SimpCommand implements Command {
private final RatingService ratingService;
@Inject
public SimpCommand(RatingService ratingService) {
this.ratingService = ratingService;
}
@Override
public String getName() {
return "simp";
}
@Override
public String getDescription() {
return "Симп-детектор (результат всегда одинаковый)";
}
@Override
public String getUsage() {
return "simp [@user]";
}
@Override
public String getCategory() {
return "Развлечения";
}
@Override
public void execute(CommandContext context) {
if (!ratingService.checkAndApplyCooldown(context, "simp")) return;
Member target = ratingService.resolveTarget(context);
if (target == null) return;
int level = ratingService.getDeterministicValue(target.getId(), 111, 0, 100);
StringBuilder bar = new StringBuilder();
int filled = level / 10;
for (int i = 0; i < filled; i++) bar.append("💀");
for (int i = filled; i < 10; i++) bar.append("⬜");
RatingLevel rl = RatingLevel.findLevel(level, RatingConfig.getSimpLevels());
context
.getChannel()
.sendMessageEmbeds(
EmbedFactory.create()
.withTitle("😭 Симп-детектор")
.withDescription(target.getAsMention())
.addField("Уровень", bar + "\n**" + level + "%** - " + rl.getComment(), false)
.withThumbnail(target.getUser().getAvatarUrl())
.withColor(rl.getColor())
.withFooter("💡 Детерминировано вашим Discord ID")
.build())
.queue();
}
}

View file

@ -1,64 +0,0 @@
package creator.loki.feature.rating.commands;
import com.google.inject.Inject;
import creator.loki.command.Command;
import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import creator.loki.feature.entertainment.service.RatingService;
import creator.loki.feature.rating.config.RatingConfig;
import creator.loki.feature.rating.config.RatingLevel;
import net.dv8tion.jda.api.entities.Member;
public class VibeCommand implements Command {
private final RatingService ratingService;
@Inject
public VibeCommand(RatingService ratingService) {
this.ratingService = ratingService;
}
@Override
public String getName() {
return "vibe";
}
@Override
public String getDescription() {
return "Проверить свой вайб (результат всегда одинаковый)";
}
@Override
public String getUsage() {
return "vibe [@user]";
}
@Override
public String getCategory() {
return "Развлечения";
}
@Override
public void execute(CommandContext context) {
if (!ratingService.checkAndApplyCooldown(context, "vibe")) return;
Member target = ratingService.resolveTarget(context);
if (target == null) return;
int level = ratingService.getDeterministicValue(target.getId(), 222, 0, 100);
StringBuilder bar = new StringBuilder();
int filled = level / 10;
for (int i = 0; i < filled; i++) bar.append("🎵");
for (int i = filled; i < 10; i++) bar.append("⬜");
RatingLevel rl = RatingLevel.findLevel(level, RatingConfig.getVibeLevels());
context
.getChannel()
.sendMessageEmbeds(
EmbedFactory.create()
.withTitle("🎵 Вайб-чек")
.withDescription(target.getAsMention())
.addField("Вайб", bar + "\n**" + level + "%** - " + rl.getComment(), false)
.withThumbnail(target.getUser().getAvatarUrl())
.withColor(rl.getColor())
.withFooter("💡 Детерминировано вашим Discord ID")
.build())
.queue();
}
}

View file

@ -10,6 +10,7 @@ import creator.loki.embed.EmbedTemplates;
import net.dv8tion.jda.api.Permission;
import creator.loki.feature.reactroles.repository.ReactionRoleRepository;
import creator.loki.feature.reactroles.repository.ReactionRoleRepository;
import creator.loki.command.CommandCategories;
public class ReactionRoleCommand implements Command {
private final ReactionRoleRepository repository;
@ -36,7 +37,7 @@ public class ReactionRoleCommand implements Command {
@Override
public String getCategory() {
return "Настройка";
return CommandCategories.SETTINGS;
}
@Override

View file

@ -9,6 +9,7 @@ import creator.loki.core.security.CooldownManager;
import creator.loki.embed.EmbedFactory;
import creator.loki.feature.reputation.repository.ReputationRepository;
import net.dv8tion.jda.api.entities.Member;
import creator.loki.command.CommandCategories;
public class MinusRepCommand implements Command {
private final ReputationRepository reputationRepository;
@ -37,7 +38,7 @@ public class MinusRepCommand implements Command {
@Override
public String getCategory() {
return "Статистика";
return CommandCategories.STATISTICS;
}
@Override

View file

@ -9,6 +9,7 @@ import creator.loki.core.security.CooldownManager;
import creator.loki.embed.EmbedFactory;
import creator.loki.feature.reputation.repository.ReputationRepository;
import net.dv8tion.jda.api.entities.Member;
import creator.loki.command.CommandCategories;
public class RepCommand implements Command {
private final ReputationRepository reputationRepository;
@ -36,7 +37,7 @@ public class RepCommand implements Command {
@Override
public String getCategory() {
return "Статистика";
return CommandCategories.STATISTICS;
}
@Override

View file

@ -7,6 +7,7 @@ import creator.loki.command.Command;
import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import creator.loki.feature.reputation.repository.ReputationRepository;
import creator.loki.command.CommandCategories;
/** Топ пользователей по репутации */
public class RepTopCommand implements Command {
@ -34,7 +35,7 @@ public class RepTopCommand implements Command {
@Override
public String getCategory() {
return "Статистика";
return CommandCategories.STATISTICS;
}
@Override

View file

@ -4,6 +4,7 @@ import creator.loki.command.Command;
import creator.loki.command.CommandContext;
import creator.loki.config.BotConfig;
import creator.loki.embed.EmbedTemplates;
import creator.loki.command.CommandCategories;
public class AgrCommand implements Command {
private final BotConfig config;
@ -35,7 +36,7 @@ public class AgrCommand implements Command {
@Override
public String getCategory() {
return "Супер-Админ";
return CommandCategories.SUPER_ADMIN;
}
@Override

View file

@ -4,6 +4,7 @@ import creator.loki.command.Command;
import creator.loki.command.CommandContext;
import creator.loki.config.BotConfig;
import creator.loki.embed.EmbedTemplates;
import creator.loki.command.CommandCategories;
public class DossierCommand implements Command {
private final BotConfig config;
@ -33,7 +34,7 @@ public class DossierCommand implements Command {
@Override
public String getCategory() {
return "Супер-Админ";
return CommandCategories.SUPER_ADMIN;
}
@Override

View file

@ -10,6 +10,7 @@ import creator.loki.feature.role.validation.RoleCommandValidator;
import creator.loki.feature.role.validation.RoleValidators;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Role;
import creator.loki.command.CommandCategories;
public class CreateRoleCommand implements Command {
private final CustomRoleManager roleManager;
@ -35,7 +36,7 @@ public class CreateRoleCommand implements Command {
@Override
public String getCategory() {
return "Роли";
return CommandCategories.ROLES;
}
@Override

View file

@ -9,6 +9,7 @@ import creator.loki.feature.role.CustomRoleManager;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Role;
import creator.loki.command.CommandCategories;
public class DeleteRoleCommand implements Command {
private final CustomRoleManager roleManager;
@ -34,7 +35,7 @@ public class DeleteRoleCommand implements Command {
@Override
public String getCategory() {
return "Роли";
return CommandCategories.ROLES;
}
@Override

View file

@ -11,6 +11,7 @@ import creator.loki.feature.role.CustomRoleManager;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Role;
import creator.loki.command.CommandCategories;
public class EditRoleCommand implements Command {
private static final Pattern HEX_PATTERN = Pattern.compile("^#?[0-9A-Fa-f]{6}$");
@ -37,7 +38,7 @@ public class EditRoleCommand implements Command {
@Override
public String getCategory() {
return "Роли";
return CommandCategories.ROLES;
}
@Override

View file

@ -11,6 +11,7 @@ import creator.loki.embed.EmbedTemplates;
import creator.loki.feature.role.CustomRoleManager;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Role;
import creator.loki.command.CommandCategories;
public class MyRolesCommand implements Command {
private final CustomRoleManager roleManager;
@ -31,7 +32,7 @@ public class MyRolesCommand implements Command {
@Override
public String getCategory() {
return "Роли";
return CommandCategories.ROLES;
}
@Override

View file

@ -8,6 +8,7 @@ import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import creator.loki.feature.ship.repository.ShipPairRepository;
import net.dv8tion.jda.api.entities.Member;
import creator.loki.command.CommandCategories;
public class ShipCommand implements Command {
private final ShipPairRepository shipPairRepository;
@ -33,7 +34,7 @@ public class ShipCommand implements Command {
@Override
public String getCategory() {
return "Развлечения";
return CommandCategories.ENTERTAINMENT;
}
@Override

View file

@ -11,6 +11,7 @@ import net.dv8tion.jda.api.components.actionrow.ActionRow;
import java.awt.Color;
import creator.loki.feature.ticket.repository.TicketRepository;
import creator.loki.feature.ticket.repository.TicketRepository;
import creator.loki.command.CommandCategories;
public class TicketSetupCommand implements Command {
private final TicketRepository ticketRepository;
@ -37,7 +38,7 @@ public class TicketSetupCommand implements Command {
@Override
public String getCategory() {
return "Настройка";
return CommandCategories.SETTINGS;
}
@Override

View file

@ -17,6 +17,7 @@ import okhttp3.Request;
import okhttp3.Response;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import creator.loki.command.CommandCategories;
public class TikTokCommand implements Command {
private static final Logger logger = LoggerFactory.getLogger(TikTokCommand.class);
@ -52,7 +53,7 @@ public class TikTokCommand implements Command {
@Override
public String getCategory() {
return "Развлечения";
return CommandCategories.ENTERTAINMENT;
}
@Override

View file

@ -3,6 +3,7 @@ package creator.loki.feature.utility;
import creator.loki.command.Command;
import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedTemplates;
import creator.loki.command.CommandCategories;
public class TimerCommand implements Command {
@Override
@ -22,7 +23,7 @@ public class TimerCommand implements Command {
@Override
public String getCategory() {
return "Утилиты";
return CommandCategories.UTILITY;
}
@Override

View file

@ -7,6 +7,7 @@ import creator.loki.command.CommandContext;
import creator.loki.embed.EmbedFactory;
import creator.loki.embed.EmbedTemplates;
import net.dv8tion.jda.api.entities.emoji.Emoji;
import creator.loki.command.CommandCategories;
public class PollCommand implements Command {
private static final String[] EMOJI_NUMBERS = {
@ -30,7 +31,7 @@ public class PollCommand implements Command {
@Override
public String getCategory() {
return "Развлечения";
return CommandCategories.ENTERTAINMENT;
}
@Override

View file

@ -9,6 +9,7 @@ import creator.loki.embed.EmbedFactory;
import creator.loki.feature.config.repository.ConfigRepository;
import creator.loki.util.GuildChannelResolve;
import net.dv8tion.jda.api.Permission;
import creator.loki.command.CommandCategories;
public class VoiceSetupPrefixCommand implements Command {
@ -38,7 +39,7 @@ public class VoiceSetupPrefixCommand implements Command {
@Override
public String getCategory() {
return "Настройка";
return CommandCategories.SETTINGS;
}
@Override