New Report syntax

This commit is contained in:
Elias Müller 2023-11-05 18:15:07 +01:00
parent 309c1ac3f2
commit ad074616a9
4 changed files with 112 additions and 97 deletions

View File

@ -20,7 +20,7 @@ repositories {
dependencies {
compileOnly "io.papermc.paper:paper-api:1.19.4-R0.1-SNAPSHOT"
implementation 'com.theokanning.openai-gpt3-java:service:0.14.0'
implementation 'com.squareup.okhttp3:okhttp:4.11.0'
}
def targetJavaVersion = 17
@ -39,11 +39,9 @@ tasks.withType(JavaCompile).configureEach {
}
}
processResources {
def props = [version: version]
inputs.properties props
filteringCharset 'UTF-8'
filesMatching('paper-plugin.yml') {
expand props
}
tasks.register('copyJarToServer', Exec) {
dependsOn jar
mustRunAfter jar
commandLine 'scp', 'build/libs/spawn-1.0.jar', 'root@10.20.6.1:/root/server/plugins'
}

View File

@ -12,6 +12,7 @@ import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.IOException;
import java.net.URI;
@ -19,89 +20,109 @@ import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
public class Report extends Appliance {
private record Request(UUID reporter, UUID reported, String reason) {}
private record Response(String url) {}
private final URI apiEndpoint;
public Report() {
super("report");
this.apiEndpoint = URI.create(Objects.requireNonNull(localConfig().getString("api")));
}
public void issueReport(Player issuer, String targetUsername, String reason) {
private record Request(@NotNull UUID reporter, @Nullable UUID reported, String reason) {}
private record Response(@NotNull String url) {}
public void reportToUnknown(@NotNull Player issuer) {
Request request = new Request(issuer.getUniqueId(), null, "");
issueReport(issuer, request);
}
public void reportToKnown(@NotNull Player issuer, @NotNull String targetUsername, @Nullable String reason) {
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(targetUsername);
if(issuer.getUniqueId().equals(offlinePlayer.getUniqueId())) {
issuer.sendMessage(
Component.text("Du kannst dich nicht selbst reporten.").color(NamedTextColor.RED)
);
return;
}
Request request = new Request(issuer.getUniqueId(), offlinePlayer.getUniqueId(), Optional.ofNullable(reason).orElse(""));
issueReport(issuer, request);
}
private void issueReport(Player issuer, Request reportRequest) {
try {
OfflinePlayer target = Bukkit.getOfflinePlayer(targetUsername);
Request request = new Request(issuer.getUniqueId(), target.getUniqueId(), reason);
HttpResponse<String> responseString = postRequest(URI.create("https://mhsl.eu/craftattack/report"), new Gson().toJson(request));
switch (responseString.statusCode()) {
case 201:
Response response = new Gson().fromJson(responseString.body(), Response.class);
issuer.sendMessage(
Component.text()
.append(Component.text("\\/".repeat(10), NamedTextColor.DARK_GRAY))
.appendNewline()
.appendNewline()
.append(Component.text("!!! Report hier fertigstellen !!!", NamedTextColor.GOLD))
.appendNewline()
.appendNewline()
.append(
Component
.text(" > Hier klicken < ", NamedTextColor.GREEN)
.hoverEvent(HoverEvent.showText(Component.text(response.url).color(NamedTextColor.GREEN)))
.clickEvent(ClickEvent.clickEvent(ClickEvent.Action.OPEN_URL, response.url))
)
.appendNewline()
.appendNewline()
.append(
Component
.text("(" + response.url + ")", NamedTextColor.GRAY)
.clickEvent(ClickEvent.clickEvent(ClickEvent.Action.OPEN_URL, response.url))
)
.appendNewline()
.appendNewline()
.append(Component.text("/\\".repeat(10), NamedTextColor.DARK_GRAY))
);
break;
case 400:
issuer.sendMessage(
Component.text()
.append(Component.text("Der Nutzer ", NamedTextColor.RED))
.append(Component.text(targetUsername, NamedTextColor.DARK_RED))
.append(Component.text(" ist in unserem System nicht bekannt.", NamedTextColor.RED))
.appendNewline()
.append(Component.text("Bist du sicher, dass du den Namen richtig geschrieben hast?", NamedTextColor.RED))
.appendNewline()
.append(Component.text("Du kannst dich alternativ jederzeit bei einem Admin melden.", NamedTextColor.GRAY))
);
break;
case 401:
default:
issuer.sendMessage(
Component.text()
.append(Component.text("Interner Serverfehler beim anlegen des Reports.", NamedTextColor.RED))
.appendNewline()
.append(Component.text("Bitte melde dich bei einem Admin!", NamedTextColor.RED))
);
break;
}
HttpClient client = HttpClient.newHttpClient();
HttpRequest httpRequest = HttpRequest.newBuilder()
.uri(this.apiEndpoint)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(new Gson().toJson(reportRequest)))
.build();
HttpResponse<String> httpResponse = client.send(httpRequest, HttpResponse.BodyHandlers.ofString());
printResultMessage(issuer, httpResponse);
} catch (IOException | InterruptedException e) {
issuer.sendMessage(
Component.text("Internal server error: " + e.getMessage()).color(NamedTextColor.RED)
);
throw new RuntimeException(e);
}
}
private HttpResponse<String> postRequest(URI uri, String body) throws IOException, InterruptedException {
HttpClient client = HttpClient.newHttpClient();
HttpRequest httpRequest = HttpRequest.newBuilder()
.uri(uri)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
private void printResultMessage(Player issuer, HttpResponse<String> httpResponse) {
switch (httpResponse.statusCode()) {
case 201:
Response response = new Gson().fromJson(httpResponse.body(), Response.class);
issuer.sendMessage(
Component.text()
.append(Component.text("\\/".repeat(20), NamedTextColor.DARK_GRAY))
.appendNewline()
.appendNewline()
.append(Component.text("!!! Report hier fertigstellen !!!", NamedTextColor.GOLD))
.appendNewline()
.appendNewline()
.append(
Component
.text(" > Hier klicken < ", NamedTextColor.GREEN)
.hoverEvent(HoverEvent.showText(Component.text(response.url).color(NamedTextColor.GREEN)))
.clickEvent(ClickEvent.clickEvent(ClickEvent.Action.OPEN_URL, response.url))
)
.appendNewline()
.appendNewline()
.append(
Component
.text(response.url, NamedTextColor.GRAY)
.clickEvent(ClickEvent.clickEvent(ClickEvent.Action.OPEN_URL, response.url))
)
.appendNewline()
.appendNewline()
.append(Component.text("/\\".repeat(20), NamedTextColor.DARK_GRAY))
);
break;
return client.send(httpRequest, HttpResponse.BodyHandlers.ofString());
case 400:
issuer.sendMessage(
Component.text()
.append(Component.text("Der angegebene Nutzer ist in unserem System nicht bekannt.", NamedTextColor.RED))
.appendNewline()
.append(Component.text("Bist du sicher, dass du den Namen richtig geschrieben hast?", NamedTextColor.RED))
.appendNewline()
.append(Component.text("Du kannst dich alternativ jederzeit bei einem Admin melden.", NamedTextColor.GRAY))
);
break;
case 401:
default:
issuer.sendMessage(
Component.text()
.append(Component.text("Interner Serverfehler beim anlegen des Reports.", NamedTextColor.RED))
.appendNewline()
.append(Component.text("Bitte melde dich bei einem Admin!", NamedTextColor.RED))
);
break;
}
}
@Override

View File

@ -1,6 +1,5 @@
package eu.mhsl.craftattack.spawn.appliances.report.command;
import eu.mhsl.craftattack.spawn.Main;
import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand;
import eu.mhsl.craftattack.spawn.appliances.report.Report;
import net.kyori.adventure.text.Component;
@ -26,16 +25,6 @@ public class ReportCommand extends ApplianceCommand.PlayerChecked<Report> {
@Override
protected void execute(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
if(args.length == 0) {
sender.sendMessage(
Component
.text("Bitte gib einen Spieler an, den du reporten möchtest!", NamedTextColor.RED)
.appendNewline()
.append(Component.text("/report <spieler> [grund]", NamedTextColor.RED))
);
return;
}
sender.sendMessage(
Component.newline()
.append(Component.text("Reportanfrage wird erstellt...", NamedTextColor.GREEN))
@ -44,13 +33,17 @@ public class ReportCommand extends ApplianceCommand.PlayerChecked<Report> {
.appendNewline()
);
Bukkit.getScheduler().runTask(Main.instance(), () -> {
getAppliance().issueReport(
getPlayer(),
args[0],
Arrays.stream(args).skip(1).collect(Collectors.joining(" "))
);
});
if(args.length == 0) {
getAppliance().reportToUnknown(getPlayer());
}
if(args.length == 1) {
getAppliance().reportToKnown(getPlayer(), args[0], null);
}
if(args.length > 1) {
getAppliance().reportToKnown(getPlayer(), args[0], Arrays.stream(args).skip(1).collect(Collectors.joining(" ")));
}
}
@Override

View File

@ -20,3 +20,6 @@ countdown:
countdown: 60
worldborder-before: 37
worldborder-after: 0
report:
api: https://mhsl.eu/craftattack/report