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,25 +20,64 @@ 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);
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> responseString = postRequest(URI.create("https://mhsl.eu/craftattack/report"), new Gson().toJson(request));
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);
}
}
switch (responseString.statusCode()) {
private void printResultMessage(Player issuer, HttpResponse<String> httpResponse) {
switch (httpResponse.statusCode()) {
case 201:
Response response = new Gson().fromJson(responseString.body(), Response.class);
Response response = new Gson().fromJson(httpResponse.body(), Response.class);
issuer.sendMessage(
Component.text()
.append(Component.text("\\/".repeat(10), NamedTextColor.DARK_GRAY))
.append(Component.text("\\/".repeat(20), NamedTextColor.DARK_GRAY))
.appendNewline()
.appendNewline()
.append(Component.text("!!! Report hier fertigstellen !!!", NamedTextColor.GOLD))
@ -53,21 +93,19 @@ public class Report extends Appliance {
.appendNewline()
.append(
Component
.text("(" + response.url + ")", NamedTextColor.GRAY)
.text(response.url, NamedTextColor.GRAY)
.clickEvent(ClickEvent.clickEvent(ClickEvent.Action.OPEN_URL, response.url))
)
.appendNewline()
.appendNewline()
.append(Component.text("/\\".repeat(10), NamedTextColor.DARK_GRAY))
.append(Component.text("/\\".repeat(20), 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))
.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()
@ -85,23 +123,6 @@ public class Report extends Appliance {
);
break;
}
} catch (IOException | InterruptedException e) {
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();
return client.send(httpRequest, HttpResponse.BodyHandlers.ofString());
}
@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