Skip to content

Commit f82c386

Browse files
committed
feat:Discord rebuild && Skull Fix
1 parent 52dab99 commit f82c386

File tree

8 files changed

+265
-75
lines changed

8 files changed

+265
-75
lines changed

src/main/java/org/referix/birthDayReload/BirthDayReload.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@
77
import org.bukkit.plugin.java.JavaPlugin;
88
import org.referix.birthDayReload.command.MainCommand;
99
import org.referix.birthDayReload.database.Database;
10-
import org.referix.birthDayReload.discord.DiscordSettings;
10+
import org.referix.birthDayReload.discord.DiscordHttp;
1111
import org.referix.birthDayReload.inventory.PresentInventory;
1212
import org.referix.birthDayReload.inventory.InventoryClickHandler;
1313
import org.referix.birthDayReload.inventory.InventoryManager;
1414
import org.referix.birthDayReload.papi.BirthdayPlaceholder;
1515
import org.referix.birthDayReload.utils.configmannagers.ConfigUtils;
16+
import org.referix.birthDayReload.utils.configmannagers.DiscordConfig;
1617
import org.referix.birthDayReload.utils.configmannagers.ItemManagerConfig;
1718
import org.referix.birthDayReload.utils.configmannagers.MessageManager;
1819
import org.referix.birthDayReload.utils.luckperm.LuckPerm;
@@ -25,13 +26,13 @@ public final class BirthDayReload extends JavaPlugin {
2526
private static BirthDayReload instance;
2627

2728
private MessageManager messageManager;
28-
private DiscordSettings discordSettings;
2929

3030
private ItemManagerConfig itemConfig;
3131

3232
private LuckPerm luckPermUtils;
3333

3434
private NamespacedKey textureKey;
35+
private DiscordHttp discordHttp;
3536

3637
@Override
3738
public void onEnable() {
@@ -55,9 +56,8 @@ public void onEnable() {
5556
ConfigUtils configUtils = new ConfigUtils(this);
5657
this.itemConfig = new ItemManagerConfig(this); // Инициализируем здесь
5758
this.messageManager = new MessageManager(this);
58-
this.discordSettings = new DiscordSettings(messageManager);
5959
this.itemConfig = new ItemManagerConfig(this);
60-
log("ItemManagerConfig initialized: " + (itemConfig != null));
60+
log("ItemManagerConfig initialized: " + true);
6161
} catch (Exception e) {
6262
log("ItemManagerConfig is null: " + (itemConfig == null));
6363
log("Error loading config file: " + e.getMessage());
@@ -76,9 +76,9 @@ public void onEnable() {
7676

7777
try {
7878
log("Try to start Discord Bot...");
79-
DiscordSettings discordSettings = new DiscordSettings(messageManager);
80-
if (discordSettings.getIsEnabled()) {
81-
79+
DiscordConfig discordSettings = new DiscordConfig(getConfig());
80+
if (discordSettings.isEnabled()) {
81+
this.discordHttp = new DiscordHttp(discordSettings);
8282
// discordManager.getMessageService().sendMessage("Плагин BirthDayReload успешно запущен!");
8383

8484
log("The Discord bot has been successfully started");
@@ -99,7 +99,7 @@ public void onEnable() {
9999

100100
// Создаем и регистрируем команды
101101
log("Creating MainCommand instance...");
102-
new MainCommand("birthday", null, messageManager, presentInventory);
102+
new MainCommand("birthday", null, messageManager, presentInventory, discordHttp);
103103
log("MainCommand registered successfully as 'birthday'.");
104104

105105
log("Commands registered successfully.");
@@ -122,7 +122,7 @@ public void onEnable() {
122122
try {
123123
log("Registering listeners...");
124124
getServer().getPluginManager().registerEvents(new InventoryClickHandler(), this);
125-
getServer().getPluginManager().registerEvents(new MainListener(textureKey,luckPermUtils,messageManager), this);
125+
getServer().getPluginManager().registerEvents(new MainListener(textureKey,luckPermUtils,messageManager,discordHttp), this);
126126
log("Listeners registered successfully.");
127127
} catch (Exception e) {
128128
log("Error registering listeners: " + e.getMessage());
@@ -136,6 +136,7 @@ public void onEnable() {
136136

137137
@Override
138138
public void onDisable() {
139+
discordHttp.close();
139140
}
140141

141142
public LuckPerm getLuckPermUtils() {

src/main/java/org/referix/birthDayReload/MainListener.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@
1717
import org.bukkit.inventory.meta.ItemMeta;
1818
import org.bukkit.persistence.PersistentDataContainer;
1919
import org.bukkit.persistence.PersistentDataType;
20+
import org.referix.birthDayReload.discord.DiscordHttp;
2021
import org.referix.birthDayReload.inventory.InventoryManager;
2122
import org.referix.birthDayReload.playerdata.PlayerData;
2223
import org.referix.birthDayReload.playerdata.PlayerManager;
2324
import org.referix.birthDayReload.utils.configmannagers.MessageManager;
2425
import org.referix.birthDayReload.utils.luckperm.LuckPerm;
2526

2627
import java.time.LocalDate;
27-
import java.util.Map;
2828

2929
import static org.referix.birthDayReload.utils.LoggerUtils.log;
3030

@@ -33,12 +33,14 @@ public class MainListener implements Listener {
3333
private final NamespacedKey textureKey;
3434
private final LuckPerm luckPerm;
3535
private final MessageManager messageManager;
36+
private final DiscordHttp discordHttp;
3637

3738

38-
public MainListener(NamespacedKey textureKey, LuckPerm luckPerm, MessageManager messageManager ) {
39+
public MainListener(NamespacedKey textureKey, LuckPerm luckPerm, MessageManager messageManager , DiscordHttp discordHttp) {
3940
this.textureKey = textureKey;
4041
this.luckPerm = luckPerm;
4142
this.messageManager = messageManager;
43+
this.discordHttp = discordHttp;
4244
}
4345

4446
@EventHandler
@@ -72,22 +74,22 @@ public void onPlayerJoin(PlayerJoinEvent event) {
7274
//
7375
// DiscordMessage discordMessage = messageManager.getParsedDiscordMessage("Discord.Embedded-messages.happy-birthday", placeholders);
7476
// messageService.sendEmbed(discordMessage);
75-
// Perms Luck
76-
log("Birthday prefix and wish set for: " + player.getName());
77+
if (discordHttp != null) discordHttp.sendHappyBirthdayMessage(player.getName());
7778
}
7879
data.setPrefix(BirthDayReload.getInstance().getMessageManager().BIRTHDAY_BOY_PREFIX); // Встановлюємо префікс
7980
} else {
8081
// Скидання isWished, якщо сьогодні не день народження
8182
if (data.isWished()) {
83+
discordHttp.resetPlayerMessageStatus(player.getName());
8284
data.setIsWished(false);
8385
data.setPrefix(null); // Встановлюємо префікс
8486
manager.savePlayerData(player);
85-
log("Birthday flag reset for: " + player.getName());
8687
}
8788
}
8889
}
8990
}
9091

92+
9193
@EventHandler
9294
public void onPlayerQuit(PlayerQuitEvent event) {
9395
Player player = event.getPlayer();

src/main/java/org/referix/birthDayReload/command/MainCommand.java

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import org.bukkit.Bukkit;
66
import org.bukkit.command.CommandSender;
77
import org.bukkit.entity.Player;
8+
import org.referix.birthDayReload.BirthDayReload;
9+
import org.referix.birthDayReload.discord.DiscordHttp;
810
import org.referix.birthDayReload.inventory.PresentInventory;
911
import org.referix.birthDayReload.inventory.YearInventory;
1012
import org.referix.birthDayReload.playerdata.PlayerData;
@@ -25,11 +27,13 @@ public class MainCommand extends AbstractCommand {
2527

2628
private final MessageManager messageManager;
2729
InventoryCommand inventoryCommand;
30+
DiscordHttp discordHttp;
2831

29-
public MainCommand(String command, YearInventory birthdayInventory, MessageManager messageManager, PresentInventory presentInventory) {
32+
public MainCommand(String command, YearInventory birthdayInventory, MessageManager messageManager, PresentInventory presentInventory, DiscordHttp discordHttp) {
3033
super(command);
3134
this.messageManager = messageManager;
3235
inventoryCommand = new InventoryCommand(presentInventory);
36+
this.discordHttp = discordHttp;
3337
}
3438

3539
@Override
@@ -74,6 +78,7 @@ private void handleReload(CommandSender sender) {
7478
}
7579

7680
try {
81+
BirthDayReload.getInstance().reloadConfig();
7782
messageManager.reloadMessages();
7883
PlayerManager.getInstance().updateBirthdayPrefixes();
7984
sendMessage(sender, Component.text("§aPlugin configuration and messages reloaded successfully."));
@@ -118,11 +123,8 @@ private void handleSet(CommandSender sender, String[] args) {
118123
.replaceText(builder -> builder.match("%date%")
119124
.replacement(messageManager.formatDate(birthday))));
120125

121-
Map<String, String> placeholders = Map.of(
122-
"player", player.getName(),
123-
"wishes", data.getWished().toString(),
124-
"date", data.getBirthday().toString()
125-
);
126+
if (discordHttp != null) discordHttp.sendSetBirthdayMessage(player.getName(),data.getBirthday().toString());
127+
126128

127129
} else {
128130
sendMessage(player, messageManager.BIRTHDAY_SET_FUTURE_ERROR);
@@ -167,10 +169,7 @@ private void handleDelete(CommandSender sender, String[] args) {
167169
sendMessage(sender, messageManager.BIRTHDAY_DELETE_SUCCESS
168170
.replaceText(builder -> builder.match("%player%").replacement(target.getName())));
169171

170-
Map<String, String> placeholders = Map.of(
171-
"target_player", target.getName(),
172-
"player", player.getName()
173-
);
172+
if (discordHttp != null) discordHttp.sendAdminDeleteBirthdayMessage(player.getName(),target.getName());
174173

175174
}
176175

src/main/java/org/referix/birthDayReload/discord/DiscordHttp.java

Lines changed: 119 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,106 @@
11
package org.referix.birthDayReload.discord;
22

33
import okhttp3.*;
4+
import org.referix.birthDayReload.utils.configmannagers.DiscordConfig;
45

56
import java.io.IOException;
7+
import java.text.SimpleDateFormat;
8+
import java.util.Date;
9+
import java.util.HashMap;
10+
import java.util.Map;
611

712
public class DiscordHttp {
813

914
private final String botToken;
1015
private final String channelId;
1116
private final OkHttpClient client;
17+
private boolean enabled; // Стан бота
18+
private final DiscordConfig config; // Конфігурація Discord
1219

13-
// Конструктор для ініціалізації токена та ID каналу
14-
public DiscordHttp(String botToken, String channelId) {
15-
this.botToken = botToken;
16-
this.channelId = channelId;
20+
private final Map<String, Boolean> playerMessageStatus = new HashMap<>();
21+
22+
23+
// Конструктор для ініціалізації через DiscordConfig
24+
public DiscordHttp(DiscordConfig config) {
25+
this.botToken = config.getToken();
26+
this.channelId = config.getChannelId();
1727
this.client = new OkHttpClient();
28+
this.enabled = config.isEnabled();
29+
this.config = config;
30+
}
31+
32+
public void sendSetBirthdayMessage(String player, String date) {
33+
if (!enabled) {
34+
return;
35+
}
36+
37+
// Форматування дати у більш простий формат
38+
String formattedDate = formatDate(date);
39+
40+
String title = config.getSetBirthdayTitle().replace("%player%", player);
41+
String description = String.join("\n", config.getSetBirthdayMessage())
42+
.replace("%player%", player)
43+
.replace("%date%", formattedDate)
44+
.replace("\n", "\\n"); // Заміняємо символи нового рядка
45+
46+
47+
int color = parseColor(config.getSetBirthdayColor());
48+
49+
50+
51+
sendEmbedMessage(title, description, color);
1852
}
1953

20-
public void sendEmbedMessage(String title, String description, int color) {
54+
// Відправлення повідомлення "Happy Birthday"
55+
public void sendHappyBirthdayMessage(String player) {
56+
// Перевірка, чи повідомлення вже було відправлено
57+
if (playerMessageStatus.getOrDefault(player, false)) {
58+
59+
return; // Якщо повідомлення вже відправлено, не відправляємо знову
60+
}
61+
62+
if (!enabled) {
63+
System.err.println("Discord-бот вимкнений. Повідомлення не буде відправлено.");
64+
return;
65+
}
66+
67+
// Формування заголовку та опису для повідомлення
68+
String title = config.getHappyBirthdayTitle().replace("%player%", player);
69+
String description = String.join("\n", config.getHappyBirthdayMessage())
70+
.replace("%player%", player);
71+
72+
int color = parseColor(config.getHappyBirthdayColor());
73+
74+
75+
76+
// Відправка повідомлення через Discord
77+
sendEmbedMessage(title, description, color);
78+
79+
// Оновлення статусу відправки повідомлення для цього гравця
80+
playerMessageStatus.put(player, true);
81+
}
82+
83+
public void resetPlayerMessageStatus(String playerName) {
84+
playerMessageStatus.put(playerName, false); // Скидаємо статус відправлення
85+
}
86+
87+
// Відправлення повідомлення "Admin Delete Birthday"
88+
public void sendAdminDeleteBirthdayMessage(String adminPlayer, String targetPlayer) {
89+
if (!enabled) {
90+
return;
91+
}
92+
93+
String title = config.getAdminDeleteBirthdayTitle().replace("%target_player%", targetPlayer);
94+
String description = String.join("\n", config.getAdminDeleteBirthdayMessage())
95+
.replace("%player%", adminPlayer)
96+
.replace("%target_player%", targetPlayer);
97+
98+
int color = parseColor(config.getAdminDeleteBirthdayColor());
99+
sendEmbedMessage(title, description, color);
100+
}
101+
102+
// Приватний метод для відправлення вбудованого повідомлення
103+
private void sendEmbedMessage(String title, String description, int color) {
21104
String embedJson = String.format("""
22105
{
23106
"embeds": [
@@ -29,7 +112,6 @@ public void sendEmbedMessage(String title, String description, int color) {
29112
]
30113
}
31114
""", title, description, color);
32-
33115
sendRequest(embedJson);
34116
}
35117

@@ -58,4 +140,35 @@ private void sendRequest(String json) {
58140
e.printStackTrace();
59141
}
60142
}
143+
144+
// Перетворення кольору з HEX у ціле число
145+
private int parseColor(String hexColor) {
146+
try {
147+
return Integer.parseInt(hexColor.replace("#", ""), 16);
148+
} catch (NumberFormatException e) {
149+
System.err.println("Invalid color format: " + hexColor + ". Defaulting to white.");
150+
return 0xFFFFFF;
151+
}
152+
}
153+
private String formatDate(String date) {
154+
try {
155+
// Якщо дата у вигляді "2000-01-07", спробуємо перетворити в "07.01.2000"
156+
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd");
157+
Date parsedDate = inputFormat.parse(date);
158+
SimpleDateFormat outputFormat = new SimpleDateFormat("dd.MM.yyyy");
159+
return outputFormat.format(parsedDate);
160+
} catch (Exception e) {
161+
e.printStackTrace();
162+
return date; // Повертаємо оригінальну дату, якщо не вдалося відформатувати
163+
}
164+
}
165+
166+
167+
public void close() {
168+
if (client != null) {
169+
client.dispatcher().executorService().shutdown(); // Зупинка потоків
170+
client.connectionPool().evictAll(); // Очищення пулу з'єднань
171+
}
172+
}
173+
61174
}

src/main/java/org/referix/birthDayReload/discord/DiscordSettings.java

Lines changed: 0 additions & 34 deletions
This file was deleted.

0 commit comments

Comments
 (0)