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 { dependencies {
compileOnly "io.papermc.paper:paper-api:1.19.4-R0.1-SNAPSHOT" 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 def targetJavaVersion = 17
@ -39,11 +39,9 @@ tasks.withType(JavaCompile).configureEach {
} }
} }
processResources { tasks.register('copyJarToServer', Exec) {
def props = [version: version] dependsOn jar
inputs.properties props mustRunAfter jar
filteringCharset 'UTF-8'
filesMatching('paper-plugin.yml') { commandLine 'scp', 'build/libs/spawn-1.0.jar', 'root@10.20.6.1:/root/server/plugins'
expand props
}
} }

View File

@ -12,6 +12,7 @@ import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.IOException; import java.io.IOException;
import java.net.URI; import java.net.URI;
@ -19,25 +20,64 @@ import java.net.http.HttpClient;
import java.net.http.HttpRequest; import java.net.http.HttpRequest;
import java.net.http.HttpResponse; import java.net.http.HttpResponse;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID; import java.util.UUID;
public class Report extends Appliance { public class Report extends Appliance {
private record Request(UUID reporter, UUID reported, String reason) {} private final URI apiEndpoint;
private record Response(String url) {} 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 { try {
OfflinePlayer target = Bukkit.getOfflinePlayer(targetUsername); HttpClient client = HttpClient.newHttpClient();
Request request = new Request(issuer.getUniqueId(), target.getUniqueId(), reason); 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: case 201:
Response response = new Gson().fromJson(responseString.body(), Response.class); Response response = new Gson().fromJson(httpResponse.body(), Response.class);
issuer.sendMessage( issuer.sendMessage(
Component.text() Component.text()
.append(Component.text("\\/".repeat(10), NamedTextColor.DARK_GRAY)) .append(Component.text("\\/".repeat(20), NamedTextColor.DARK_GRAY))
.appendNewline() .appendNewline()
.appendNewline() .appendNewline()
.append(Component.text("!!! Report hier fertigstellen !!!", NamedTextColor.GOLD)) .append(Component.text("!!! Report hier fertigstellen !!!", NamedTextColor.GOLD))
@ -53,21 +93,19 @@ public class Report extends Appliance {
.appendNewline() .appendNewline()
.append( .append(
Component Component
.text("(" + response.url + ")", NamedTextColor.GRAY) .text(response.url, NamedTextColor.GRAY)
.clickEvent(ClickEvent.clickEvent(ClickEvent.Action.OPEN_URL, response.url)) .clickEvent(ClickEvent.clickEvent(ClickEvent.Action.OPEN_URL, response.url))
) )
.appendNewline() .appendNewline()
.appendNewline() .appendNewline()
.append(Component.text("/\\".repeat(10), NamedTextColor.DARK_GRAY)) .append(Component.text("/\\".repeat(20), NamedTextColor.DARK_GRAY))
); );
break; break;
case 400: case 400:
issuer.sendMessage( issuer.sendMessage(
Component.text() Component.text()
.append(Component.text("Der Nutzer ", NamedTextColor.RED)) .append(Component.text("Der angegebene Nutzer ist in unserem System nicht bekannt.", NamedTextColor.RED))
.append(Component.text(targetUsername, NamedTextColor.DARK_RED))
.append(Component.text(" ist in unserem System nicht bekannt.", NamedTextColor.RED))
.appendNewline() .appendNewline()
.append(Component.text("Bist du sicher, dass du den Namen richtig geschrieben hast?", NamedTextColor.RED)) .append(Component.text("Bist du sicher, dass du den Namen richtig geschrieben hast?", NamedTextColor.RED))
.appendNewline() .appendNewline()
@ -85,23 +123,6 @@ public class Report extends Appliance {
); );
break; 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 @Override

View File

@ -1,6 +1,5 @@
package eu.mhsl.craftattack.spawn.appliances.report.command; 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.appliance.ApplianceCommand;
import eu.mhsl.craftattack.spawn.appliances.report.Report; import eu.mhsl.craftattack.spawn.appliances.report.Report;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
@ -26,16 +25,6 @@ public class ReportCommand extends ApplianceCommand.PlayerChecked<Report> {
@Override @Override
protected void execute(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { 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( sender.sendMessage(
Component.newline() Component.newline()
.append(Component.text("Reportanfrage wird erstellt...", NamedTextColor.GREEN)) .append(Component.text("Reportanfrage wird erstellt...", NamedTextColor.GREEN))
@ -44,13 +33,17 @@ public class ReportCommand extends ApplianceCommand.PlayerChecked<Report> {
.appendNewline() .appendNewline()
); );
Bukkit.getScheduler().runTask(Main.instance(), () -> { if(args.length == 0) {
getAppliance().issueReport( getAppliance().reportToUnknown(getPlayer());
getPlayer(), }
args[0],
Arrays.stream(args).skip(1).collect(Collectors.joining(" ")) 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 @Override

View File

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