-
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathDiscordWebHook.java
More file actions
75 lines (63 loc) · 3.18 KB
/
Copy pathDiscordWebHook.java
File metadata and controls
75 lines (63 loc) · 3.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package simplexity.simplepms.hooks;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import simplexity.simplepms.SimplePMs;
import simplexity.simplepms.config.ConfigHandler;
import simplexity.simplepms.config.LocaleMessage;
import simplexity.simplepms.logic.MessageUtils;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.logging.Level;
public class DiscordWebHook {
public static HttpClient client;
public static void sendWebHook(CommandSender sender, CommandSender recipient, String message) {
if (client == null) {
SimplePMs.getInstance().getLogger().log(Level.WARNING, LocaleMessage.LOG_ERROR_WEBHOOK_CLIENT_NOT_CREATED.getMessage());
createClient();
}
String content = MessageUtils.getInstance().format(
ConfigHandler.getInstance().getWebhookBody(),
Map.of(
"sender", sender.getName(),
"sender_display_name", (sender instanceof Player player) ? PlainTextComponentSerializer.plainText().serialize(player.displayName()) : sender.getName(),
"sender_uuid", (sender instanceof Player player) ? player.getUniqueId().toString() : "",
"recipient", recipient.getName(),
"recipient_display_name", (recipient instanceof Player player) ? PlainTextComponentSerializer.plainText().serialize(player.displayName()) : recipient.getName(),
"recipient_uuid", (recipient instanceof Player player) ? player.getUniqueId().toString() : "",
"message", message,
"timestamp", Long.toString(System.currentTimeMillis()/1000)
)
);
try {
HttpRequest request = HttpRequest.newBuilder()
.uri(ConfigHandler.getInstance().getWebhookUri())
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(content))
.build();
CompletableFuture<HttpResponse<String>> asyncResponse = client.sendAsync(request, HttpResponse.BodyHandlers.ofString());
asyncResponse.thenAccept(response -> {
if (response.statusCode() < 200 || response.statusCode() >= 300) {
//noinspection StringTemplateMigration: String Template is considered preview and may be removed in a future release.
SimplePMs.getInstance().getLogger().log(Level.WARNING, "Webhook has failed to send, HTTP Status " + response.statusCode() + " with JSON Body:\n" + response.body());
}
});
}
catch (Exception e) {
e.printStackTrace();
}
}
public static void createClient() {
removeClient();
client = HttpClient.newHttpClient();
}
public static void removeClient() {
if (client == null) return;
client.close();
client = null;
}
}