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,89 +20,109 @@ 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)
HttpResponse<String> responseString = postRequest(URI.create("https://mhsl.eu/craftattack/report"), new Gson().toJson(request)); .header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(new Gson().toJson(reportRequest)))
switch (responseString.statusCode()) { .build();
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;
}
HttpResponse<String> httpResponse = client.send(httpRequest, HttpResponse.BodyHandlers.ofString());
printResultMessage(issuer, httpResponse);
} catch (IOException | InterruptedException e) { } catch (IOException | InterruptedException e) {
issuer.sendMessage(
Component.text("Internal server error: " + e.getMessage()).color(NamedTextColor.RED)
);
throw new RuntimeException(e); throw new RuntimeException(e);
} }
} }
private HttpResponse<String> postRequest(URI uri, String body) throws IOException, InterruptedException { private void printResultMessage(Player issuer, HttpResponse<String> httpResponse) {
HttpClient client = HttpClient.newHttpClient(); switch (httpResponse.statusCode()) {
HttpRequest httpRequest = HttpRequest.newBuilder() case 201:
.uri(uri) Response response = new Gson().fromJson(httpResponse.body(), Response.class);
.header("Content-Type", "application/json") issuer.sendMessage(
.POST(HttpRequest.BodyPublishers.ofString(body)) Component.text()
.build(); .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 @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