SteamWar/BungeeCore
Archiviert
13
2

Omni Replay #236

Zusammengeführt
Lixfel hat 9 Commits von replaying nach master 2021-12-28 19:45:04 +01:00 zusammengeführt
49 geänderte Dateien mit 824 neuen und 771 gelöschten Zeilen
Nur Änderungen aus Commit ef471c9ff9 werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@ -24,11 +24,11 @@ import de.steamwar.bungeecore.bot.config.SteamwarDiscordBotConfig;
import de.steamwar.bungeecore.commands.*;
import de.steamwar.bungeecore.comms.SpigotReceiver;
import de.steamwar.bungeecore.listeners.*;
import de.steamwar.bungeecore.listeners.mods.ModLoaderBlocker;
import de.steamwar.bungeecore.listeners.mods.Forge;
import de.steamwar.bungeecore.listeners.mods.LabyMod;
import de.steamwar.bungeecore.listeners.mods.ModLoaderBlocker;
import de.steamwar.bungeecore.listeners.mods.WorldDownloader;
import de.steamwar.bungeecore.sql.SQL;
import de.steamwar.bungeecore.sql.Statement;
import de.steamwar.bungeecore.sql.SteamwarUser;
import de.steamwar.bungeecore.sql.Team;
import net.dv8tion.jda.api.JDA;
@ -131,6 +131,7 @@ public class BungeeCore extends Plugin {
new ReplayCommand();
if(!EVENT_MODE){
new BauCommand();
new WebregisterCommand();
new FightCommand();
new ChallengeCommand();
@ -146,19 +147,20 @@ public class BungeeCore extends Plugin {
new EventStarter();
new SessionManager();
new SpigotReceiver();
new SteamwarDiscordBot();
new TablistManager();
getProxy().getScheduler().schedule(this, () -> {
SteamwarUser.clearCache();
Team.clearCache();
}, 1, 1, TimeUnit.HOURS);
new SteamwarDiscordBot();
}
@Override
public void onDisable(){
ErrorLogger.stop();
SQL.close();
Statement.close();
try {
SteamwarDiscordBot.instance().getJda().shutdownNow();
SteamwarDiscordBot.instance().getJda().awaitStatus(JDA.Status.SHUTDOWN);
@ -259,7 +261,7 @@ public class BungeeCore extends Plugin {
Persistent.setChatPrefix(CHAT_PREFIX);
Persistent.setLobbyServer(LOBBY_SERVER);
SQL.connect(
Statement.connect(
config.getString("db.url"),
config.getString("db.username"),
config.getString("db.password")

Datei anzeigen

@ -48,11 +48,7 @@ public class AuthManager {
TOKENS.put(code, member.getIdLong());
BungeeCore.log("Created Discord Auth-Token: " + code + " for: " + member.getUser().getAsTag());
ScheduledTask[] task = new ScheduledTask[1];
task[0] = BungeeCore.get().getProxy().getScheduler().schedule(BungeeCore.get(), () -> {
TOKENS.remove(code);
task[0].cancel();
}, 10, 10, TimeUnit.MINUTES);
BungeeCore.get().getProxy().getScheduler().schedule(BungeeCore.get(), () -> TOKENS.remove(code), 10, TimeUnit.MINUTES);
return code;
}
@ -66,10 +62,10 @@ public class AuthManager {
builder.setActionRows(ActionRow.of(Button.success("tada", Emoji.fromUnicode("U+1F389")), Button.danger("invalid", "Ich war das nicht")));
try {
member.getUser().openPrivateChannel().complete().sendMessage(builder.build()).complete();
member.getUser().openPrivateChannel().queue(privateChannel -> privateChannel.sendMessage(builder.build()).queue());
if (member.getNickname() == null) {
try {
member.getGuild().modifyNickname(member, user.getUserName()).complete();
member.getGuild().modifyNickname(member, user.getUserName()).queue();
} catch (Exception e) {
// Ignored
}

Datei anzeigen

@ -78,43 +78,46 @@ public class SteamwarDiscordBot {
} catch (LoginException e) {
throw new SecurityException("Could not Login: " + SteamwarDiscordBotConfig.TOKEN, e);
}
try {
jda.awaitReady();
} catch (InterruptedException e) {
e.printStackTrace();
}
activity();
EventManager.update();
SchematicsManager.update();
ProxyServer.getInstance().getScheduler().schedule(BungeeCore.get(), () -> {
ProxyServer.getInstance().getScheduler().runAsync(BungeeCore.get(), () -> {
try {
jda.awaitReady();
} catch (InterruptedException e) {
e.printStackTrace();
}
activity();
EventManager.update();
SchematicsManager.update();
}, 30, 30, TimeUnit.SECONDS);
DiscordRolesMessage.sendMessage();
DiscordRulesMessage.sendMessage();
DiscordTicketMessage.sendMessage();
ProxyServer.getInstance().getScheduler().schedule(BungeeCore.get(), () -> {
activity();
EventManager.update();
SchematicsManager.update();
}, 30, 30, TimeUnit.SECONDS);
DiscordRolesMessage.sendMessage();
DiscordRulesMessage.sendMessage();
DiscordTicketMessage.sendMessage();
new RolesInteractionButtonListener();
new DiscordTicketListener();
new DiscordAuthListener();
announcementListener = new AnnouncementListener();
ingameChatListener = new IngameChatListener();
serverTeamChatListener = new ServerTeamChatListener();
new SlashCommandListener();
new RolesInteractionButtonListener();
new DiscordTicketListener();
new DiscordAuthListener();
new DiscordEventListener();
announcementListener = new AnnouncementListener();
ingameChatListener = new IngameChatListener();
serverTeamChatListener = new ServerTeamChatListener();
new SlashCommandListener();
jda.retrieveCommands().complete().forEach(command -> jda.deleteCommandById(command.getId()).complete());
jda.retrieveCommands().complete().forEach(command -> jda.deleteCommandById(command.getId()).queue());
Guild guild = jda.getGuildById(SteamwarDiscordBotConfig.GUILD);
guild.retrieveCommands().complete().forEach(command -> guild.deleteCommandById(command.getId()).complete());
CommandListUpdateAction commands = jda.getGuildById(SteamwarDiscordBotConfig.GUILD).updateCommands();
addCommand(commands, new MuteCommand());
addCommand(commands, new BanCommand());
addCommand(commands, new WhoisCommand());
addCommand(commands, new TeamCommand());
addCommand(commands, new ListCommand());
addCommand(commands, new UnbanCommand());
commands.complete();
Guild guild = jda.getGuildById(SteamwarDiscordBotConfig.GUILD);
guild.retrieveCommands().complete().forEach(command -> guild.deleteCommandById(command.getId()).complete());
CommandListUpdateAction commands = jda.getGuildById(SteamwarDiscordBotConfig.GUILD).updateCommands();
addCommand(commands, new MuteCommand());
addCommand(commands, new BanCommand());
addCommand(commands, new WhoisCommand());
addCommand(commands, new TeamCommand());
addCommand(commands, new ListCommand());
addCommand(commands, new UnbanCommand());
commands.complete();
});
}
private void addCommand(CommandListUpdateAction commands, BasicDiscordCommand basicDiscordCommand) {

Datei anzeigen

@ -45,13 +45,13 @@ public class BanCommand extends BasicDiscordCommand {
SteamwarUser sender = SteamwarUser.get(event.getMember().getIdLong());
SteamwarUser target = SteamwarUser.getOrCreateOfflinePlayer(event.getOption("user").getAsString());
if (target == null) {
event.reply("Angegebener User invalide").setEphemeral(true).complete();
event.reply("Angegebener User invalide").setEphemeral(true).queue();
return;
}
Timestamp time = de.steamwar.bungeecore.commands.BanCommand.parseTime(null, event.getOption("time").getAsString());
if (time == null) {
event.reply("Angegebene Zeit invalide").setEphemeral(true).complete();
event.reply("Angegebene Zeit invalide").setEphemeral(true).queue();
return;
}
@ -60,6 +60,6 @@ public class BanCommand extends BasicDiscordCommand {
target.ban(time, msg, sender.getId(), isPerma);
Message.team("BAN_TEAM_BANNED", new Message("PREFIX"), target.getUserName(), sender.getUserName(), new Message((isPerma ? "BAN_PERMA" : "BAN_UNTIL"), time), msg);
event.reply("Erfolgreich " + target.getUserName() + (isPerma ? " permanent" : " bis " + time) + " gebannt").setEphemeral(true).complete();
event.reply("Erfolgreich " + target.getUserName() + (isPerma ? " permanent" : " bis " + time) + " gebannt").setEphemeral(true).queue();
}
}

Datei anzeigen

@ -46,7 +46,7 @@ public abstract class BasicDiscordCommand extends CommandData {
Member member = event.getMember();
SteamwarUser steamwarUser = SteamwarUser.get(member.getIdLong());
if (steamwarUser == null || (!steamwarUser.getUserGroup().isTeamGroup() && steamwarUser.getUserGroup() != UserGroup.Builder)) {
event.reply("Du hast für " + event.getName() + " keine Rechte oder es existiert keine Verknüpfung für dich.").setEphemeral(true).complete();
event.reply("Du hast für " + event.getName() + " keine Rechte oder es existiert keine Verknüpfung für dich.").setEphemeral(true).queue();
return false;
}
return true;

Datei anzeigen

@ -38,6 +38,6 @@ public class ListCommand extends BasicDiscordCommand {
de.steamwar.bungeecore.commands.ListCommand.getPlayerMap().forEach((s, proxiedPlayers) -> {
embedBuilder.addField(s, proxiedPlayers.stream().map(player -> "`" + player.getName() + "`").collect(Collectors.joining(", ")), true);
});
event.replyEmbeds(embedBuilder.build()).setEphemeral(true).complete();
event.replyEmbeds(embedBuilder.build()).setEphemeral(true).queue();
}
}

Datei anzeigen

@ -61,6 +61,6 @@ public class MuteCommand extends BasicDiscordCommand {
target.mute(time, msg, sender.getId(), isPerma);
Message.team("MUTE_TEAM_MUTED", new Message("PREFIX"), target.getUserName(), sender.getUserName(), new Message((isPerma ? "BAN_PERMA" : "BAN_UNTIL"), time), msg);
event.reply("Erfolgreich " + target.getUserName() + (isPerma ? " permanent" : " bis " + time) + " gemutet").setEphemeral(true).complete();
event.reply("Erfolgreich " + target.getUserName() + (isPerma ? " permanent" : " bis " + time) + " gemutet").setEphemeral(true).queue();
}
}

Datei anzeigen

@ -58,11 +58,11 @@ public class TeamCommand extends BasicDiscordCommand {
Team team;
if (optionMapping == null) {
if (steamwarUser == null) {
event.reply("Dein Discord ist nicht verknüpft").setEphemeral(true).complete();
event.reply("Dein Discord ist nicht verknüpft").setEphemeral(true).queue();
return;
}
if (steamwarUser.getTeam() == 0) {
event.reply("Du bist in keinem Team").setEphemeral(true).complete();
event.reply("Du bist in keinem Team").setEphemeral(true).queue();
return;
}
team = Team.get(steamwarUser.getTeam());
@ -70,7 +70,7 @@ public class TeamCommand extends BasicDiscordCommand {
team = Team.get(optionMapping.getAsString());
}
if (team == null) {
event.reply("Unbekanntes Team").setEphemeral(true).complete();
event.reply("Unbekanntes Team").setEphemeral(true).queue();
return;
}
EmbedBuilder embedBuilder = new EmbedBuilder();
@ -81,10 +81,10 @@ public class TeamCommand extends BasicDiscordCommand {
embedBuilder.addField("Leader", members.stream().filter(SteamwarUser::isLeader).map(user -> "`" + (isOnline(user) ? emoji.getAsMention() : "") + user.getUserName() + "`").collect(Collectors.joining(" ")), false);
embedBuilder.addField("Member", members.stream().filter(user -> !user.isLeader()).map(user -> "`" + (isOnline(user) ? emoji.getAsMention() : "") + user.getUserName() + "`").collect(Collectors.joining(" ")), false);
embedBuilder.addField("Events", "`" + TeamTeilnahme.getEvents(team.getTeamId()).stream().map(Event::getEventName).collect(Collectors.joining("` `")) + "`", false);
event.replyEmbeds(embedBuilder.build()).setEphemeral(true).complete();
event.replyEmbeds(embedBuilder.build()).setEphemeral(true).queue();
return;
default:
event.reply("Unbekannter Befehl").setEphemeral(true).complete();
event.reply("Unbekannter Befehl").setEphemeral(true).queue();
return;
}
}

Datei anzeigen

@ -19,7 +19,6 @@
package de.steamwar.bungeecore.bot.commands;
import de.steamwar.bungeecore.Message;
import de.steamwar.bungeecore.sql.SteamwarUser;
import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
import net.dv8tion.jda.api.interactions.commands.OptionType;
@ -44,16 +43,16 @@ public class UnbanCommand extends BasicDiscordCommand {
SteamwarUser sender = SteamwarUser.get(event.getMember().getIdLong());
SteamwarUser target = SteamwarUser.getOrCreateOfflinePlayer(event.getOption("user").getAsString());
if (target == null) {
event.reply("Angegebener User invalide").setEphemeral(true).complete();
event.reply("Angegebener User invalide").setEphemeral(true).queue();
return;
}
if (!target.isBanned()) {
event.reply("Angegebener User ist nicht gebannt").setEphemeral(true).complete();
event.reply("Angegebener User ist nicht gebannt").setEphemeral(true).queue();
return;
}
target.ban(Timestamp.from(new Date().toInstant()), "Unban", sender.getId(), false);
event.reply("Erfolgreich " + target.getUserName() + " entbannt").setEphemeral(true).complete();
event.reply("Erfolgreich " + target.getUserName() + " entbannt").setEphemeral(true).queue();
}
}

Datei anzeigen

@ -89,6 +89,6 @@ public class WhoisCommand extends BasicDiscordCommand {
embedBuilder.addField(punishment.getType().name() + " von " + SteamwarUser.get(punishment.getPunisher()).getUserName(), "Von: " + punishment.getBantime(punishment.getStartTime(), false) + "\nBis: " + punishment.getBantime(punishment.getEndTime(), punishment.isPerma()) + "\nGrund: " + punishment.getReason(), true);
}
event.replyEmbeds(embedBuilder.build()).setEphemeral(true).complete();
event.replyEmbeds(embedBuilder.build()).setEphemeral(true).queue();
}
}

Datei anzeigen

@ -28,13 +28,17 @@ import de.steamwar.bungeecore.sql.TeamTeilnahme;
import lombok.experimental.UtilityClass;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.MessageBuilder;
import net.dv8tion.jda.api.entities.Emoji;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.TextChannel;
import net.dv8tion.jda.api.interactions.components.ActionRow;
import net.dv8tion.jda.api.interactions.components.selections.SelectionMenu;
import java.awt.*;
import java.sql.Timestamp;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.stream.Collectors;
@UtilityClass
@ -66,7 +70,12 @@ public class EventManager {
embedBuilder.setAuthor("SteamWar", "https://www.steamwar.de");
Timestamp now = Timestamp.from(Instant.now());
Event.getComing().forEach(event -> {
SelectionMenu.Builder menuBuilder = SelectionMenu.create("eventName");
menuBuilder.setPlaceholder("Wähle ein Event aus!")
.setMinValues(1)
.setMaxValues(1);
List<Event> events = Event.getComing();
events.forEach(event -> {
StringBuilder st = new StringBuilder();
if (event.getDeadline().after(now)) {
st.append("Deadline: <t:").append(event.getDeadline().getTime() / 1000).append(":R>\n");
@ -77,10 +86,16 @@ public class EventManager {
st.append("\nAngemeldete Teams: ").append(teilname);
}
embedBuilder.addField(event.getEventName(), st.toString(), false);
if(event.getDeadline().after(Timestamp.from(Instant.now()))) {
menuBuilder.addOption(event.getEventName(), event.getEventID() + "", "An " + event.getEventName() + " teilnehmen", Emoji.fromUnicode("U+1F4DD"));
}
});
MessageBuilder messageBuilder = new MessageBuilder();
messageBuilder.setEmbeds(embedBuilder.build());
if(!events.isEmpty()) {
messageBuilder.setActionRows(ActionRow.of(menuBuilder.build()));
}
if (message == null) {
message = textChannel.sendMessage(messageBuilder.build()).complete();
} else {
@ -119,7 +134,7 @@ public class EventManager {
MessageBuilder messageBuilder = new MessageBuilder();
messageBuilder.setEmbeds(embedBuilder.build());
if (message == null) {
message = textChannel.sendMessage(messageBuilder.build()).complete();
textChannel.sendMessage(messageBuilder.build()).queue(message1 -> message = message1);
} else {
message.editMessage(messageBuilder.build()).complete();
}

Datei anzeigen

@ -65,7 +65,7 @@ public class SchematicsManager {
MessageBuilder messageBuilder = new MessageBuilder();
messageBuilder.setEmbeds(embedBuilder.build());
if (message == null) {
message = textChannel.sendMessage(messageBuilder.build()).complete();
textChannel.sendMessage(messageBuilder.build()).queue(message1 -> message = message1);
} else {
message.editMessage(messageBuilder.build()).queue();
}

Datei anzeigen

@ -45,6 +45,6 @@ public class AnnouncementListener extends BasicDiscordListener {
assert textChannel != null;
MessageBuilder messageBuilder = new MessageBuilder();
messageBuilder.append(message.replace("&", ""));
textChannel.sendMessage(messageBuilder.build()).complete();
textChannel.sendMessage(messageBuilder.build()).queue();
}
}

Datei anzeigen

@ -35,23 +35,23 @@ public class DiscordAuthListener extends BasicDiscordListener {
if(event.getChannel().getId().equals(SteamwarDiscordBotConfig.RULES_CHANNEL) && event.getComponentId().equals("auth")) {
String authMessage = AuthManager.createDiscordAuthToken(event.getMember());
if(authMessage != null) {
event.reply("Gebe innerhalb der nächsten 10 Minuten ``/verify " + authMessage + "`` auf dem Minecraft Server ein").setEphemeral(true).complete();
event.reply("Gebe innerhalb der nächsten 10 Minuten ``/verify " + authMessage + "`` auf dem Minecraft Server ein").setEphemeral(true).queue();
} else {
event.reply("Du hast bereits einen Code am laufen").setEphemeral(true).complete();
event.reply("Du hast bereits einen Code am laufen").setEphemeral(true).queue();
}
}
if(event.getComponentId().equals("tada") && event.getChannelType() == ChannelType.PRIVATE) {
event.reply(":tada:").setEphemeral(false).complete();
event.reply(":tada:").setEphemeral(false).queue();
}
if(event.getComponentId().equals("invalid") && event.getChannelType() == ChannelType.PRIVATE) {
SteamwarUser user = SteamwarUser.get(event.getUser().getIdLong());
if(user == null) {
event.reply(":question: Da ist keine verknüpfung?").setEphemeral(false).complete();
event.reply(":question: Da ist keine verknüpfung?").setEphemeral(false).queue();
} else {
user.setDiscordId(null);
event.reply(":x: Die Verknüpfung wurde beendet").setEphemeral(false).complete();
event.reply(":x: Die Verknüpfung wurde beendet").setEphemeral(false).queue();
}
}
}

Datei anzeigen

@ -0,0 +1,93 @@
/*
This file is a part of the SteamWar software.
Copyright (C) 2020 SteamWar.de-Serverteam
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.bungeecore.bot.listeners;
import de.steamwar.bungeecore.bot.config.SteamwarDiscordBotConfig;
import de.steamwar.bungeecore.bot.events.EventManager;
import de.steamwar.bungeecore.sql.Event;
import de.steamwar.bungeecore.sql.SteamwarUser;
import de.steamwar.bungeecore.sql.Team;
import de.steamwar.bungeecore.sql.TeamTeilnahme;
import net.dv8tion.jda.api.events.interaction.SelectionMenuEvent;
import net.dv8tion.jda.api.interactions.components.Component;
import org.jetbrains.annotations.NotNull;
import java.time.Instant;
public class DiscordEventListener extends BasicDiscordListener {
@Override
public void onSelectionMenu(@NotNull SelectionMenuEvent event) {
if(event.getChannel().getId().equals(SteamwarDiscordBotConfig.EVENTS_CHANNEL) && event.getComponentType() == Component.Type.SELECTION_MENU) {
if(event.getSelectedOptions().isEmpty()) {
event.deferReply(true).queue();
return;
}
if(event.getSelectedOptions().get(0).getValue().matches("([0-9]+)")) {
SteamwarUser user = SteamwarUser.get(event.getUser().getIdLong());
if(user == null) {
event.reply("Du hast dein Minecraft nicht verknüpft").setEphemeral(true).queue();
return;
}
if(user.getTeam() == 0) {
event.reply("Du bist in keinem Team").setEphemeral(true).queue();
return;
}
if(!user.isLeader()) {
event.reply("Du bist kein Leader in deinem Team").setEphemeral(true).queue();
return;
}
if(Event.get() != null) {
event.reply("Du kannst dich nicht während einem Event an einem Event anmelden").setEphemeral(true).queue();
return;
}
Event swEvent = Event.get(Integer.decode(event.getSelectedOptions().get(0).getValue()));
if(swEvent == null){
event.reply("Das Event gibt es nicht").setEphemeral(true).queue();
return;
}
if(Instant.now().isAfter(swEvent.getDeadline().toInstant())){
event.reply("Du kannst dich nicht mehr an diesen Event anmelden").setEphemeral(true).queue();
return;
}
Team team = Team.get(user.getTeam());
if(TeamTeilnahme.nimmtTeil(team.getTeamId(), swEvent.getEventID())){
TeamTeilnahme.notTeilnehmen(team.getTeamId(), swEvent.getEventID());
event.reply("Dein Team **" + team.getTeamName() + "** nimmt nun nicht mehr an **" + swEvent.getEventName() + "** teil!").setEphemeral(true).queue();
}else{
TeamTeilnahme.teilnehmen(team.getTeamId(), swEvent.getEventID());
event.reply("Dein Team **" + team.getTeamName() + "** nimmt nun an **" + swEvent.getEventName() + "** teil!").setEphemeral(true).queue();
}
EventManager.update();
} else {
event.reply("Lefuq?").setEphemeral(true).queue();
}
}
}
}

Datei anzeigen

@ -75,29 +75,40 @@ public class DiscordTicketListener extends BasicDiscordListener {
} else if(event.getComponentId().startsWith("close-")) {
TextChannel logChannel = event.getGuild().getTextChannelById(SteamwarDiscordBotConfig.TICKET_LOG);
MessageBuilder builder = new MessageBuilder();
StringBuilder stringBuilder = new StringBuilder();
LinkedList<StringBuilder> stringBuilders = new LinkedList<>();
stringBuilders.add(new StringBuilder());
new LinkedList<>(event.getTextChannel().getIterableHistory().complete()).descendingIterator().forEachRemaining(message -> {
if(message.getAuthor().isSystem() || message.getAuthor().isBot()) return;
stringBuilder.append("<t:").append(message.getTimeCreated().toInstant().getEpochSecond()).append("> ")
StringBuilder currentBuilder = new StringBuilder();
currentBuilder.append("<t:").append(message.getTimeCreated().toInstant().getEpochSecond()).append("> ")
.append("**")
.append(message.getAuthor().getName())
.append("**: ")
.append(message.getContentRaw());
if(!message.getAttachments().isEmpty()) {
stringBuilder.append("\n")
currentBuilder.append("\n")
.append("Files: ").append("\n");
message.getAttachments().forEach(attachment -> stringBuilder.append(attachment.getUrl()).append("\n"));
message.getAttachments().forEach(attachment -> currentBuilder.append(attachment.getUrl()).append("\n"));
}
stringBuilder.append("\n");
currentBuilder.append("\n");
if(currentBuilder.length() >= 4096) {
stringBuilders.getLast().append(currentBuilder.substring(0, 4090));
stringBuilders.add(new StringBuilder(currentBuilder.substring(4090, currentBuilder.length() - 1)));
} else if (currentBuilder.length() + stringBuilders.getLast().length() >= 4096) {
stringBuilders.add(new StringBuilder(currentBuilder.toString()));
} else {
stringBuilders.getLast().append(currentBuilder);
}
});
stringBuilder.append("\n");
stringBuilder.append("<t:").append(Instant.now().getEpochSecond()).append("> ")
.append("**").append(event.getUser().getName()).append("**: ")
.append("Ticket geschlossen");
String footer = "<t:" + Instant.now().getEpochSecond() + "> **" + event.getUser().getName() + "**: Ticket geschlossen";
if(stringBuilders.getLast().length() + footer.length() > 4090) {
stringBuilders.add(new StringBuilder(footer));
} else {
stringBuilders.getLast().append(footer);
}
EmbedBuilder embedBuilder = new EmbedBuilder();
embedBuilder.setColor(Color.GREEN);
@ -107,14 +118,16 @@ public class DiscordTicketListener extends BasicDiscordListener {
embedBuilder.setAuthor(user.getName(), swuser==null?"https://steamwar.de/":("https://steamwar.de/users/" + swuser.getUserName().toLowerCase() + "/"), user.getAvatarUrl());
embedBuilder.setTimestamp(Instant.now());
embedBuilder.setTitle(event.getTextChannel().getName());
embedBuilder.setDescription(stringBuilder);
stringBuilders.forEach(stringBuilder -> {
embedBuilder.setDescription(stringBuilder.toString());
MessageBuilder builder = new MessageBuilder();
builder.setEmbeds(embedBuilder.build());
builder.setEmbeds(embedBuilder.build());
logChannel.sendMessage(builder.build()).complete();
logChannel.sendMessage(builder.build()).queue();
});
Message.team("DISCORD_TICKET_CLOSED", event.getTextChannel().getName());
event.getTextChannel().delete().reason("Closed").complete();
event.getTextChannel().delete().reason("Closed").queue();
}
}
}
@ -126,16 +139,15 @@ public class DiscordTicketListener extends BasicDiscordListener {
BungeeCore.get().getProxy().getPlayers().forEach(player -> {
if(event.getAuthor().isBot() || event.getAuthor().isSystem()) return;
SteamwarUser user = SteamwarUser.get(player);
boolean sendMessage;
if(user.getDiscordId() == null) {
if(user.getUserGroup().isTeamGroup()) {
Message.sendPrefixless("DISCORD_TICKET_MESSAGE", player, "Zur nachricht", new ClickEvent(ClickEvent.Action.OPEN_URL, event.getMessage().getJumpUrl()), event.getChannel().getName(), event.getAuthor().getName(), event.getMessage().getContentRaw());
}
sendMessage = user.getUserGroup().isCheckSchematics();
} else {
if(event.getAuthor().getId().equals(user.getDiscordId())) return;
Member member = event.getGuild().retrieveMemberById(user.getDiscordId()).complete();
if(member.hasPermission(event.getChannel().getManager().getChannel(), Permission.MESSAGE_WRITE)) {
Message.sendPrefixless("DISCORD_TICKET_MESSAGE", player, "Zur nachricht", new ClickEvent(ClickEvent.Action.OPEN_URL, event.getMessage().getJumpUrl()), event.getChannel().getName(), event.getAuthor().getName(), event.getMessage().getContentRaw());
}
sendMessage = user.getDiscordId().equals(event.getChannel().getTopic()) || user.getUserGroup().isCheckSchematics();
}
if(sendMessage) {
Message.sendPrefixless("DISCORD_TICKET_MESSAGE", player, "Zur nachricht", new ClickEvent(ClickEvent.Action.OPEN_URL, event.getMessage().getJumpUrl()), event.getChannel().getName(), event.getAuthor().getName(), event.getMessage().getContentRaw());
}
});
}

Datei anzeigen

@ -43,15 +43,15 @@ public class IngameChatListener extends BasicDiscordListener {
Member member = event.getMember();
SteamwarUser steamwarUser = SteamwarUser.get(member.getIdLong());
if (steamwarUser == null || event.getMessage().getContentRaw().length() > 250) {
event.getMessage().delete().complete();
event.getMessage().delete().queue();
} else {
String s = event.getMessage().getContentDisplay();
if (steamwarUser.getUserGroup() == UserGroup.Member && (s.contains("http") || s.contains("www"))) {
event.getMessage().delete().complete();
event.getMessage().delete().queue();
return;
}
if (steamwarUser.isMuted() || steamwarUser.isBanned()) {
event.getMessage().delete().complete();
event.getMessage().delete().queue();
return;
}
ChatListener.discordChat(steamwarUser, event.getMessage().getContentDisplay().replaceAll("§[a-f0-9]", "").replace('\n', ' '));

Datei anzeigen

@ -32,10 +32,10 @@ public class RolesInteractionButtonListener extends BasicDiscordListener {
if(event.getType() == InteractionType.COMPONENT && event.getChannelType() == ChannelType.TEXT && event.getTextChannel().getId().equals(SteamwarDiscordBotConfig.ROLES_CHANNEL) && SteamwarDiscordBotConfig.ROLES.stream().anyMatch(discordRole -> discordRole.getRoleId().equals(event.getComponentId()))) {
if (event.getMember().getRoles().stream().anyMatch(role -> role.getId().equals(event.getComponentId()))) {
event.getGuild().removeRoleFromMember(event.getMember(), event.getGuild().getRoleById(event.getComponentId())).complete();
event.reply(SteamwarDiscordBotConfig.ROLES_REMOVED.replace("%role%", event.getGuild().getRoleById(event.getComponentId()).getAsMention())).setEphemeral(true).complete();
event.reply(SteamwarDiscordBotConfig.ROLES_REMOVED.replace("%role%", event.getGuild().getRoleById(event.getComponentId()).getAsMention())).setEphemeral(true).queue();
} else {
event.getGuild().addRoleToMember(event.getMember(), event.getGuild().getRoleById(event.getComponentId())).complete();
event.reply(SteamwarDiscordBotConfig.ROLES_ADDED.replace("%role%", event.getGuild().getRoleById(event.getComponentId()).getAsMention())).setEphemeral(true).complete();
event.reply(SteamwarDiscordBotConfig.ROLES_ADDED.replace("%role%", event.getGuild().getRoleById(event.getComponentId()).getAsMention())).setEphemeral(true).queue();
}
}
}

Datei anzeigen

@ -22,7 +22,6 @@ package de.steamwar.bungeecore.bot.listeners;
import de.steamwar.bungeecore.bot.SteamwarDiscordBot;
import de.steamwar.bungeecore.bot.config.SteamwarDiscordBotConfig;
import de.steamwar.bungeecore.commands.ServerTeamchatCommand;
import de.steamwar.bungeecore.listeners.ChatListener;
import de.steamwar.bungeecore.sql.SteamwarUser;
import net.dv8tion.jda.api.MessageBuilder;
import net.dv8tion.jda.api.entities.Member;

Datei anzeigen

@ -22,13 +22,11 @@ package de.steamwar.bungeecore.bot.util;
import de.steamwar.bungeecore.bot.SteamwarDiscordBot;
import de.steamwar.bungeecore.bot.config.SteamwarDiscordBotConfig;
import de.steamwar.bungeecore.sql.SteamwarUser;
import de.steamwar.bungeecore.sql.UserGroup;
import lombok.experimental.UtilityClass;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Role;
import net.dv8tion.jda.api.exceptions.ErrorResponseException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@ -41,27 +39,31 @@ public class DiscordRanks {
return;
}
Guild guild = SteamwarDiscordBot.instance().getJda().getGuildById(SteamwarDiscordBotConfig.GUILD);
Member member = guild.retrieveMemberById(steamwarUser.getDiscordId()).complete();
if (member == null) {
return;
}
List<Role> roleList = member.getRoles();
Set<String> strings = new HashSet<>(SteamwarDiscordBotConfig.RANKS.values());
String needed = SteamwarDiscordBotConfig.RANKS.get(steamwarUser.getUserGroup());
for (Role role : roleList) {
if (!strings.contains(role.getId())) {
continue;
guild.retrieveMemberById(steamwarUser.getDiscordId()).queue(member -> {
List<Role> roleList = member.getRoles();
Set<String> strings = new HashSet<>(SteamwarDiscordBotConfig.RANKS.values());
String needed = SteamwarDiscordBotConfig.RANKS.get(steamwarUser.getUserGroup());
for (Role role : roleList) {
if (!strings.contains(role.getId())) {
continue;
}
if (role.getId().equals(needed)) {
needed = "";
continue;
}
guild.removeRoleFromMember(member, role).complete();
}
if (role.getId().equals(needed)) {
needed = "";
continue;
}
guild.removeRoleFromMember(member, role).complete();
}
if (needed != null && !needed.isEmpty()) {
guild.addRoleToMember(member, guild.getRoleById(needed)).complete();
}
if (needed != null && !needed.isEmpty()) {
guild.addRoleToMember(member, guild.getRoleById(needed)).complete();
}
}, throwable -> {
if(throwable instanceof ErrorResponseException) {
ErrorResponseException e = (ErrorResponseException) throwable;
if(e.getErrorCode() == 10007) {
steamwarUser.setDiscordId(null);
}
}
});
}
}

Datei anzeigen

@ -38,10 +38,6 @@ public class DiscordRolesMessage {
public void sendMessage() {
TextChannel channel = SteamwarDiscordBot.instance().getJda().getGuildById(SteamwarDiscordBotConfig.GUILD).getTextChannelById(SteamwarDiscordBotConfig.ROLES_CHANNEL);
assert channel != null;
Message message = null;
if(channel.hasLatestMessage()) {
message = channel.getIterableHistory().complete().stream().filter(m -> m.getAuthor().isBot()).findFirst().orElse(null);
}
MessageBuilder builder = new MessageBuilder();
builder.setContent(SteamwarDiscordBotConfig.ROLES_BASE_MESSAGE);
@ -49,10 +45,17 @@ public class DiscordRolesMessage {
SteamwarDiscordBotConfig.ROLES.forEach(discordRole -> buttons.add(discordRole.toButton()));
builder.setActionRows(ActionRow.of(buttons));
if (message != null) {
message.editMessage(builder.build()).complete();
if(channel.hasLatestMessage()) {
channel.getIterableHistory().queue(messages -> {
Message message = messages.stream().filter(m -> m.getAuthor().isBot()).findFirst().orElse(null);
if (message != null) {
message.editMessage(builder.build()).queue();
} else {
channel.sendMessage(builder.build()).queue();
}
});
} else {
channel.sendMessage(builder.build()).complete();
channel.sendMessage(builder.build()).queue();
}
}
}

Datei anzeigen

@ -60,9 +60,9 @@ public class DiscordRulesMessage {
messageBuilder.setEmbeds(builder.build());
messageBuilder.setActionRows(ActionRow.of(buttons), ActionRow.of(authButton));
if (message != null) {
message.editMessage(messageBuilder.build()).complete();
message.editMessage(messageBuilder.build()).queue();
} else {
channel.sendMessage(messageBuilder.build()).complete();
channel.sendMessage(messageBuilder.build()).queue();
}
}
}

Datei anzeigen

@ -56,9 +56,9 @@ public class DiscordTicketMessage {
messageBuilder.setEmbeds(builder.build());
messageBuilder.setActionRows(ActionRow.of(buttons));
if (message != null) {
message.editMessage(messageBuilder.build()).complete();
message.editMessage(messageBuilder.build()).queue();
} else {
channel.sendMessage(messageBuilder.build()).complete();
channel.sendMessage(messageBuilder.build()).queue();
}
}
}

Datei anzeigen

@ -20,38 +20,38 @@
package de.steamwar.bungeecore.commands;
import de.steamwar.bungeecore.*;
import de.steamwar.bungeecore.comms.packets.BaumemberUpdatePacket;
import de.steamwar.bungeecore.inventory.SWInventory;
import de.steamwar.bungeecore.inventory.SWItem;
import de.steamwar.bungeecore.sql.BauweltMember;
import de.steamwar.bungeecore.sql.SteamwarUser;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.event.ChatEvent;
public class BauCommand {
public class BauCommand extends BasicCommand {
private BauCommand(){}
public BauCommand(){
super("bau", null, "b", "gs");
}
public static void onBau(ChatEvent e, String[] command){
if(BungeeCore.EVENT_MODE)
@Override
public void execute(CommandSender sender, String[] args) {
if(!(sender instanceof ProxiedPlayer))
return;
ProxiedPlayer p = (ProxiedPlayer) e.getSender();
Subserver server = Subserver.getSubserver(p);
Bauserver bau = (server != null && server.getType() == Servertype.BAUSERVER) ? (Bauserver)server : null;
boolean ownBau = bau != null && bau.getOwner().equals(p.getUniqueId());
e.setCancelled(true);
BungeeCore.log(p, e.getMessage());
ProxiedPlayer p = (ProxiedPlayer) sender;
if(command.length == 1){
if(bau15(p, command, 1))
if(args.length == 0){
if(bau15(p, args, 0))
SubserverSystem.sendToBau15(p, p.getUniqueId());
else
SubserverSystem.sendToBauServer(p, p.getUniqueId());
return;
}
switch(command[1].toLowerCase()){
switch(args[0].toLowerCase()){
case "ws":
case "warship":
case "12":
@ -72,52 +72,44 @@ public class BauCommand {
SubserverSystem.sendToBau15paper(p, p.getUniqueId());
break;
case "addmember":
addmember(p, command);
addmember(p, args);
break;
case "tp":
case "teleport":
teleport(p, command);
teleport(p, args);
break;
case "info":
if (bau != null) {
e.setCancelled(false);
}
p.chat("/bauinfo");
break;
case "togglewe":
if(ownBau && command.length > 2)
e.setCancelled(false);
else
togglewe(p, command);
togglewe(p, args);
break;
case "toggleworld":
if(ownBau && command.length > 2)
e.setCancelled(false);
else
toggleworld(p, command);
toggleworld(p, args);
break;
case "delmember":
delmember(p, command);
delmember(p, args);
break;
case "resetall":
case "delete":
delete(p, command);
delete(p, args);
break;
case "testarena":
case "test":
testarena(p, command);
testarena(p, args);
break;
default:
HelpCommand.sendBauHelp(p);
}
}
private static void addmember(ProxiedPlayer p, String[] command){
if (command.length == 2) {
private static void addmember(ProxiedPlayer p, String[] args){
if (args.length == 1) {
Message.send("BAU_ADDMEMBER_USAGE", p);
return;
}
SteamwarUser target = SteamwarUser.get(command[2]);
SteamwarUser target = SteamwarUser.get(args[1]);
if (target == null) {
Message.send("UNKNOWN_PLAYER", p);
return;
@ -137,13 +129,13 @@ public class BauCommand {
Message.send("BAU_ADDMEMBER_ADDED_TARGET", z, p.getName());
}
private static void teleport(ProxiedPlayer p, String[] command){
if (command.length == 2) {
private static void teleport(ProxiedPlayer p, String[] args){
if (args.length == 1) {
Message.send("BAU_TP_USAGE", p);
return;
}
SteamwarUser worldOwner = SteamwarUser.get(command[2]);
SteamwarUser worldOwner = SteamwarUser.get(args[1]);
if (worldOwner == null) {
Message.send("UNKNOWN_PLAYER", p);
return;
@ -153,7 +145,7 @@ public class BauCommand {
return;
}
if(bau15(p, command, 3))
if(bau15(p, args, 2))
SubserverSystem.sendToBau15(p, worldOwner.getUuid());
else
SubserverSystem.sendToBauServer(p, worldOwner.getUuid());
@ -183,31 +175,43 @@ public class BauCommand {
}
}
private static void togglewe(ProxiedPlayer p, String[] command){
BauweltMember target = toggle(p, command, "togglewe");
private static void togglewe(ProxiedPlayer p, String[] args){
BauweltMember target = toggle(p, args, "togglewe");
if(target == null)
return;
target.setWorldEdit(!target.isWorldEdit());
clearMembercache(p);
isAllowedTo(target.isWorldEdit(), p, target, "WorldEdit verwenden");
}
private static void toggleworld(ProxiedPlayer p, String[] command){
BauweltMember target = toggle(p, command, "toggleworld");
private static void toggleworld(ProxiedPlayer p, String[] args){
BauweltMember target = toggle(p, args, "toggleworld");
if(target == null)
return;
target.setWorld(!target.isWorld());
clearMembercache(p);
isAllowedTo(target.isWorld(), p, target, "Einstellungen vornehmen");
}
private static void delmember(ProxiedPlayer p, String[] command){
if (command.length == 2) {
private static void clearMembercache(ProxiedPlayer p){
for(ServerInfo info : ProxyServer.getInstance().getServers().values()){
Subserver server = Subserver.getSubserver(info);
if(server != null && server.getType() == Servertype.BAUSERVER && ((Bauserver)server).getOwner().equals(p.getUniqueId())){
info.getPlayers().stream().findAny().ifPresent(player -> new BaumemberUpdatePacket().send(player));
break;
}
}
}
private static void delmember(ProxiedPlayer p, String[] args){
if (args.length == 1) {
Message.send("BAU_DELMEMBER_USAGE", p);
return;
}
BauweltMember target = member(p, SteamwarUser.get(command[2]));
BauweltMember target = member(p, SteamwarUser.get(args[1]));
if(target == null)
return;
@ -228,13 +232,13 @@ public class BauCommand {
Message.send("BAU_DELMEMBER_DELETED", p);
}
private static void delete(ProxiedPlayer p, String[] command){
private static void delete(ProxiedPlayer p, String[] args){
SWInventory inventory = new SWInventory(p, 9, Message.parse("BAU_DELETE_GUI_NAME", p));
inventory.addItem(8, new SWItem(Message.parse("BAU_DELETE_GUI_CANCEL", p), 1), click ->
inventory.close()
);
inventory.addItem(0, new SWItem(Message.parse("BAU_DELETE_GUI_DELETE", p), 10), click -> {
if(bau15(p, command, 2)){
if(bau15(p, args, 1)){
SteamwarUser user = SteamwarUser.get(p.getUniqueId());
deleteWorld(p, BungeeCore.USERWORLDS15 + user.getId());
}else{
@ -257,12 +261,12 @@ public class BauCommand {
});
}
public static void stopBauserver(ProxiedPlayer p){
public static boolean stopBauserver(ProxiedPlayer p){
for (Subserver subserver : Subserver.getServerList()) {
if (subserver.getType() == Servertype.BAUSERVER && ((Bauserver) subserver).getOwner().equals(p.getUniqueId())) {
if(subserver.getServer().getPlayers().isEmpty()){
if(!subserver.hasStarted()){
Message.send("BAU_START_ALREADY", p);
return;
return false;
}
subserver.stop();
try {
@ -273,12 +277,13 @@ public class BauCommand {
break;
}
}
return true;
}
private static void testarena(ProxiedPlayer p, String[] command){
FightCommand.createArena(p, "/bau testarena ", command, 2, false, (player, mode, map) -> ProxyServer.getInstance().getScheduler().runAsync(BungeeCore.get(), () -> {
stopBauserver(p);
SubserverSystem.startTestServer(p, mode, map, 0, 0);
private static void testarena(ProxiedPlayer p, String[] args){
FightCommand.createArena(p, "/bau testarena ", args, 1, false, (player, mode, map) -> ProxyServer.getInstance().getScheduler().runAsync(BungeeCore.get(), () -> {
if(stopBauserver(p))
SubserverSystem.startTestServer(p, mode, map, 0, 0);
}));
}
@ -296,13 +301,13 @@ public class BauCommand {
return target;
}
private static BauweltMember toggle(ProxiedPlayer p, String[] command, String subcommand){
if (command.length == 2) {
private static BauweltMember toggle(ProxiedPlayer p, String[] args, String subcommand){
if (args.length == 1) {
Message.send("BAU_MEMBER_TOGGLE_USAGE", p, subcommand);
return null;
}
SteamwarUser member = SteamwarUser.get(command[2]);
SteamwarUser member = SteamwarUser.get(args[1]);
return member(p, member);
}

Datei anzeigen

@ -234,7 +234,10 @@ public class CheckCommand extends BasicCommand {
this.checkList = checkQuestions.get(schematic.getSchemType()).listIterator();
ProxyServer.getInstance().getScheduler().runAsync(BungeeCore.get(), () -> {
BauCommand.stopBauserver(checker);
if(!BauCommand.stopBauserver(checker)){
remove();
return;
}
ArenaMode mode = ArenaMode.getBySchemType(schematic.getSchemType().fightType());
SubserverSystem.startTestServer(checker, mode, FightCommand.getMap(checker, mode, "Random"), schematic.getSchemID(), 0);
@ -323,8 +326,7 @@ public class CheckCommand extends BasicCommand {
}
private void stop(){
currentCheckers.remove(checker.getUniqueId());
currentSchems.remove(schematic.getSchemID());
remove();
ProxyServer.getInstance().getScheduler().runAsync(BungeeCore.get(), () -> {
for (Subserver subserver : Subserver.getServerList()) {
if (subserver.getType() == Servertype.BAUSERVER && ((Bauserver) subserver).getOwner().equals(checker.getUniqueId())) {
@ -334,5 +336,10 @@ public class CheckCommand extends BasicCommand {
}
});
}
private void remove() {
currentCheckers.remove(checker.getUniqueId());
currentSchems.remove(schematic.getSchemID());
}
}
}

Datei anzeigen

@ -46,7 +46,7 @@ public class PollresultCommand extends BasicCommand {
ProxiedPlayer player = (ProxiedPlayer) sender;
Map<String, Integer> voted = PollAnswer.getCurrentResults();
Message.send("POLLRESULT_HEADER", player, PollAnswer.getAllAnswered(), PollSystem.getQuestion());
Message.send("POLLRESULT_HEADER", player, voted.values().stream().reduce(Integer::sum), PollSystem.getQuestion());
for (Map.Entry<String, Integer> e: voted.entrySet()) {
Message.send("POLLRESULT_LIST", sender, e.getKey(), e.getValue());
}

Datei anzeigen

@ -177,7 +177,7 @@ public class TeamCommand extends BasicCommand {
if(checkTeamName(player, team, args[2]))
return;
Team.create(args[1], args[2], user);
Team.create(args[1], args[2]);
user.setTeam(Team.get(args[1]).getTeamId());
user.setLeader(true);
Message.send("TEAM_CREATE_CREATED", player, args[2]);

Datei anzeigen

@ -25,6 +25,7 @@ public class PacketIdManager {
public static final byte PING_PACKET = 0x01;
public static final byte TABLIST_NAME = 0x02;
public static final byte PREPARE_SCHEM = 0x03;
public static final byte BAUMEMBER_UPDATE = 0x04;
//0x1(X) Bungee Inventory
public static final byte INVENTORY_PACKET = 0x10;

Datei anzeigen

@ -0,0 +1,36 @@
/*
This file is a part of the SteamWar software.
Copyright (C) 2020 SteamWar.de-Serverteam
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.bungeecore.comms.packets;
import com.google.common.io.ByteArrayDataOutput;
import de.steamwar.bungeecore.comms.BungeePacket;
import de.steamwar.bungeecore.comms.PacketIdManager;
public class BaumemberUpdatePacket extends BungeePacket {
@Override
public int getId() {
return PacketIdManager.BAUMEMBER_UPDATE;
}
@Override
public void writeVars(ByteArrayDataOutput byteArrayDataOutput) {
// empty
}
}

Datei anzeigen

@ -22,7 +22,6 @@ package de.steamwar.bungeecore.listeners;
import de.steamwar.bungeecore.*;
import de.steamwar.bungeecore.bot.SteamwarDiscordBot;
import de.steamwar.bungeecore.bot.listeners.IngameChatListener;
import de.steamwar.bungeecore.commands.BauCommand;
import de.steamwar.bungeecore.commands.TpCommand;
import de.steamwar.bungeecore.comms.packets.PingPacket;
import de.steamwar.bungeecore.sql.SteamwarUser;
@ -82,11 +81,6 @@ public class ChatListener extends BasicListener {
}
switch(command[0].toLowerCase()){
case "/bau":
case "/b":
case "/gs":
BauCommand.onBau(e, command);
break;
case "/bc":
case "/bauchat":
case "/local":

Datei anzeigen

@ -19,18 +19,18 @@
package de.steamwar.bungeecore.sql;
import de.steamwar.bungeecore.BungeeCore;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
public class BannedUserIPs {
private int userID;
private Timestamp timestamp;
private static final Statement getByID = new Statement("SELECT * FROM BannedUserIPs WHERE UserID = ? ORDER BY Timestamp ASC");
private static final Statement getByIP = new Statement("SELECT * FROM BannedUserIPs WHERE IP = ? ORDER BY Timestamp DESC");
private static final Statement banIP = new Statement("INSERT INTO BannedUserIPs (UserID, Timestamp, IP) VALUES (?, NOW(), ?) ON DUPLICATE KEY UPDATE Timestamp=NOW()");
private final int userID;
private final Timestamp timestamp;
private BannedUserIPs(int userID, Timestamp timestamp){
this.userID = userID;
@ -38,37 +38,31 @@ public class BannedUserIPs {
}
public static List<BannedUserIPs> get(int userID){
List<BannedUserIPs> userIPs = new ArrayList<>();
ResultSet dbentry = SQL.select("SELECT * FROM BannedUserIPs WHERE UserID = ? ORDER BY Timestamp ASC", userID);
try {
while(dbentry.next()){
return getByID.select(rs -> {
List<BannedUserIPs> userIPs = new ArrayList<>();
while(rs.next()) {
userIPs.add(new BannedUserIPs(
userID,
dbentry.getTimestamp("Timestamp")));
rs.getTimestamp("Timestamp")));
}
} catch (SQLException e) {
BungeeCore.log("Get BannedUserIPs failed", e);
}
return userIPs;
return userIPs;
}, userID);
}
public static List<BannedUserIPs> get(String ip){
List<BannedUserIPs> userIDs = new ArrayList<>();
ResultSet dbentry = SQL.select("SELECT * FROM BannedUserIPs WHERE IP = ? ORDER BY Timestamp DESC", ip);
try {
while(dbentry.next()){
return getByIP.select(rs -> {
List<BannedUserIPs> userIDs = new ArrayList<>();
while(rs.next()) {
userIDs.add(new BannedUserIPs(
dbentry.getInt("UserID"),
dbentry.getTimestamp("Timestamp")));
rs.getInt("UserID"),
rs.getTimestamp("Timestamp")));
}
} catch (SQLException e) {
BungeeCore.log("Get BannedUserIPs failed", e);
}
return userIDs;
return userIDs;
}, ip);
}
static void banIP(SteamwarUser user, String ip){
SQL.update("INSERT INTO BannedUserIPs (UserID, Timestamp, IP) VALUES (?, NOW(), ?) ON DUPLICATE KEY UPDATE Timestamp=NOW()", user.getId(), ip);
banIP.update(user.getId(), ip);
}
public int getUserID() {

Datei anzeigen

@ -19,15 +19,17 @@
package de.steamwar.bungeecore.sql;
import de.steamwar.bungeecore.BungeeCore;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class BauweltMember{
private static final Statement delete = new Statement("DELETE FROM BauweltMember WHERE BauweltID = ? AND MemberID = ?");
private static final Statement update = new Statement("INSERT INTO BauweltMember (BauweltID, MemberID, WorldEdit, World) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE WorldEdit = VALUES(WorldEdit), World = VALUES(World)");
private static final Statement getMember = new Statement("SELECT * FROM BauweltMember WHERE BauweltID = ? AND MemberID = ?");
private static final Statement getMembers = new Statement("SELECT * FROM BauweltMember WHERE BauweltID = ?");
private final int bauweltID;
private final int memberID;
private boolean worldEdit;
@ -52,12 +54,11 @@ public class BauweltMember{
}
public void remove(){
SQL.update("DELETE FROM BauweltMember WHERE BauweltID = " + bauweltID + " AND MemberID = " + memberID);
delete.update(bauweltID, memberID);
}
private void updateDB(){
SQL.update("INSERT INTO BauweltMember (BauweltID, MemberID, WorldEdit, World) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE WorldEdit = VALUES(WorldEdit), World = VALUES(World)",
bauweltID, memberID, worldEdit, world);
update.update(bauweltID, memberID, worldEdit, world);
}
public static BauweltMember getBauMember(UUID ownerID, UUID memberID){
@ -65,18 +66,12 @@ public class BauweltMember{
}
public static BauweltMember getBauMember(int ownerID, int memberID){
ResultSet member = SQL.select("SELECT * FROM BauweltMember WHERE BauweltID = ? AND MemberID = ?", ownerID, memberID);
try {
if(member == null || !member.next()){
return getMember.select(rs -> {
if(!rs.next())
return null;
}
boolean worldEdit = member.getBoolean("WorldEdit");
boolean world = member.getBoolean("World");
return new BauweltMember(ownerID, memberID, worldEdit, world, false);
} catch (SQLException e) {
BungeeCore.log("Could not load BauweltMember", e);
}
return null;
return new BauweltMember(ownerID, memberID, rs.getBoolean("WorldEdit"), rs.getBoolean("World"), false);
}, ownerID, memberID);
}
public static List<BauweltMember> getMembers(UUID bauweltID){
@ -84,20 +79,13 @@ public class BauweltMember{
}
public static List<BauweltMember> getMembers(int bauweltID){
try{
ResultSet memberlist = SQL.select("SELECT * FROM BauweltMember WHERE BauweltID = ?", bauweltID);
return getMembers.select(rs -> {
List<BauweltMember> members = new ArrayList<>();
while(memberlist.next()){
int memberID = memberlist.getInt("MemberID");
boolean worldEdit = memberlist.getBoolean("WorldEdit");
boolean world = memberlist.getBoolean("World");
members.add(new BauweltMember(bauweltID, memberID, worldEdit, world, false));
while(rs.next()){
members.add(new BauweltMember(bauweltID, rs.getInt("MemberID"), rs.getBoolean("WorldEdit"), rs.getBoolean("World"), false));
}
return members;
}catch(SQLException e){
BungeeCore.log("Could not load BauweltMembers", e);
}
return new ArrayList<>();
}, bauweltID);
}
public int getBauweltID() {

Datei anzeigen

@ -27,6 +27,9 @@ import java.util.List;
public class CheckedSchematic {
private static final Statement create = new Statement("INSERT INTO CheckedSchematic (SchemName, SchemOwner, Validator, StartTime, EndTime, DeclineReason) VALUES (?, ?, ?, ?, ?, ?)");
private static final Statement previous = new Statement("SELECT * FROM CheckedSchematic WHERE SchemName = ? AND SchemOwner = ? ORDER BY EndTime ASC");
private final String schemName;
private final int schemOwner;
@ -45,20 +48,16 @@ public class CheckedSchematic {
}
public static void create(String schemName, int schemOwner, int validator, Timestamp startTime, Timestamp endTime, String reason){
SQL.update("INSERT INTO CheckedSchematic (SchemName, SchemOwner, Validator, StartTime, EndTime, DeclineReason) VALUES (?, ?, ?, ?, ?, ?)",
schemName, schemOwner, validator, startTime, endTime, reason);
create.update(schemName, schemOwner, validator, startTime, endTime, reason);
}
public static List<CheckedSchematic> previousChecks(String schemName, int schemOwner){
ResultSet rs = SQL.select("SELECT * FROM CheckedSchematic WHERE SchemName = ? AND SchemOwner = ? ORDER BY EndTime ASC", schemName, schemOwner);
List<CheckedSchematic> schematics = new ArrayList<>();
try {
return previous.select(rs -> {
List<CheckedSchematic> schematics = new ArrayList<>();
while(rs.next())
schematics.add(new CheckedSchematic(rs));
} catch (SQLException e) {
throw new SecurityException("Could not load previous checks", e);
}
return schematics;
return schematics;
}, schemName, schemOwner);
}
public int getValidator() {

Datei anzeigen

@ -19,33 +19,26 @@
package de.steamwar.bungeecore.sql;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Elo {
private static final Statement elo = new Statement("SELECT Elo FROM Elo WHERE UserID = ? AND GameMode = ?");
private static final Statement place = new Statement("SELECT COUNT(*) AS Place FROM Elo WHERE GameMode = ? AND Elo > ?");
private Elo(){}
public static int getElo(int userID, String gameMode){
ResultSet rs = SQL.select("SELECT Elo FROM Elo WHERE UserID = ? AND GameMode = ?", userID, gameMode);
int elo = 1000;
try {
return elo.select(rs -> {
if(rs.next())
elo = rs.getInt("Elo");
} catch (SQLException e) {
throw new SecurityException("Could not get Elo", e);
}
return elo;
return rs.getInt("Elo");
return 1000;
}, userID, gameMode);
}
public static int getPlacement(int elo, String gameMode){
ResultSet rs = SQL.select("SELECT COUNT(*) AS Place FROM Elo WHERE GameMode = ? AND Elo > ?", gameMode, elo);
try{
if(!rs.next())
return -1;
return rs.getInt("Place");
}catch(SQLException e){
throw new SecurityException("Could not get place", e);
}
return place.select(rs -> {
if(rs.next())
return rs.getInt("Place");
return -1;
}, gameMode, elo);
}
}

Datei anzeigen

@ -19,17 +19,20 @@
package de.steamwar.bungeecore.sql;
import de.steamwar.bungeecore.BungeeCore;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.time.Instant;
import java.util.LinkedList;
import java.util.ArrayList;
import java.util.List;
public class Event {
private static final Statement byCurrent = new Statement("SELECT * FROM Event WHERE Start < now() AND End > now()");
private static final Statement byId = new Statement("SELECT * FROM Event WHERE EventID = ?");
private static final Statement byName = new Statement("SELECT * FROM Event WHERE lower(EventName) = ?");
private static final Statement byComing = new Statement("SELECT * FROM Event WHERE Start > now()");
private final int eventID;
private final String eventName;
private final Timestamp start;
@ -56,57 +59,39 @@ public class Event {
if(current != null && current.now())
return current;
ResultSet rs = SQL.select("SELECT * FROM Event WHERE Start < now() AND End > now()");
try{
if(!rs.next()){
return byCurrent.select(rs -> {
if(rs.next())
current = new Event(rs);
else
current = null;
return null;
}
current = new Event(rs);
return current;
}catch (SQLException e){
BungeeCore.log("Failed to load current Event", e);
throw new SecurityException();
}
});
}
public static Event get(int eventID){
ResultSet rs = SQL.select("SELECT * FROM Event WHERE EventID = " + eventID);
try{
return byId.select(rs -> {
if(!rs.next())
throw new IllegalArgumentException();
throw new SQLException("Couldn't find event " + eventID);
return new Event(rs);
}catch (SQLException e){
BungeeCore.log("Failed to load Event", e);
throw new SecurityException();
}
}, eventID);
}
public static Event get(String eventName){
ResultSet rs = SQL.select("SELECT * FROM Event WHERE lower(EventName) = ?", eventName.toLowerCase());
try{
return byName.select(rs -> {
if(!rs.next())
return null;
return new Event(rs);
}catch (SQLException e){
BungeeCore.log("Failed to load Event by name", e);
throw new SecurityException();
}
}, eventName.toLowerCase());
}
public static List<Event> getComing(){
List<Event> events = new LinkedList<>();
ResultSet rs = SQL.select("SELECT * FROM Event WHERE Start > now()");
try{
return byComing.select(rs -> {
List<Event> events = new ArrayList<>();
while(rs.next())
events.add(new Event(rs));
}catch (SQLException e){
BungeeCore.log("Failed to load Events", e);
}
return events;
return events;
});
}
private boolean now(){

Datei anzeigen

@ -20,7 +20,6 @@
package de.steamwar.bungeecore.sql;
import de.steamwar.bungeecore.ArenaMode;
import de.steamwar.bungeecore.BungeeCore;
import java.sql.ResultSet;
import java.sql.SQLException;
@ -31,7 +30,11 @@ import static java.time.temporal.ChronoUnit.SECONDS;
public class EventFight implements Comparable<EventFight> {
private static Queue<EventFight> fights = new PriorityQueue<>();
private static final Statement reschedule = new Statement("UPDATE EventFight SET StartTime = ? WHERE EventID = ? AND FightID = ?");
private static final Statement allComing = new Statement("SELECT * FROM EventFight WHERE StartTime > now() ORDER BY `StartTime` ASC");
private static final Statement event = new Statement("SELECT * FROM EventFight WHERE EventID = ? ORDER BY `StartTime` ASC");
private static final Queue<EventFight> fights = new PriorityQueue<>();
private final int eventID;
private final int fightID;
@ -57,31 +60,26 @@ public class EventFight implements Comparable<EventFight> {
public void reschedule(){
startTime = Timestamp.from(new Date().toInstant().plus(30, SECONDS));
SQL.update("UPDATE EventFight SET StartTime = ? WHERE EventID = ? AND FightID = ?", startTime, eventID, fightID);
reschedule.update(startTime, eventID, fightID);
}
public static void loadAllComingFights(){
ResultSet rs = SQL.select("SELECT * FROM EventFight WHERE StartTime > now() ORDER BY `StartTime` ASC");
fights.clear();
try{
allComing.select(rs -> {
fights.clear();
while(rs.next()){
fights.add(new EventFight(rs));
fights.add(new EventFight(rs));
}
}catch (SQLException e){
BungeeCore.log("Failed to load EventFights", e);
}
return null;
});
}
public static List<EventFight> getEvent(int eventID){
ResultSet rs = SQL.select("SELECT * FROM EventFight WHERE EventID = ? ORDER BY `StartTime` ASC", eventID);
List<EventFight> fights = new LinkedList<>();
try{
return event.select(rs -> {
List<EventFight> fights = new LinkedList<>();
while(rs.next())
fights.add(new EventFight(rs));
}catch (SQLException e){
BungeeCore.log("Failed to load EventFights", e);
}
return fights;
return fights;
}, eventID);
}
public static Queue<EventFight> getFights() {

Datei anzeigen

@ -22,9 +22,13 @@ package de.steamwar.bungeecore.sql;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import java.sql.ResultSet;
import java.sql.SQLException;
public class IgnoreSystem{
private static final Statement select = new Statement("SELECT * FROM IgnoredPlayers WHERE Ignorer = ? AND Ignored = ?");
private static final Statement insert = new Statement("INSERT INTO IgnoredPlayers (Ignorer, Ignored) VALUES (?, ?)");
private static final Statement delete = new Statement("DELETE FROM IgnoredPlayers WHERE Ignorer = ? AND Ignored = ?");
private IgnoreSystem(){}
public static boolean isIgnored(ProxiedPlayer ignorer, ProxiedPlayer ignored){
@ -34,22 +38,14 @@ public class IgnoreSystem{
}
public static boolean isIgnored(SteamwarUser ignorer, SteamwarUser ignored) {
try {
ResultSet rs = SQL.select("SELECT COUNT(*) AS blocked FROM IgnoredPlayers WHERE Ignorer = ? AND Ignored = ?", ignorer.getId(), ignored.getId());
if(!rs.next())
return false;
return rs.getInt("blocked") > 0;
} catch (SQLException e) {
throw new SecurityException("Could not check if ignored", e);
}
return select.select(ResultSet::next, ignorer.getId(), ignored.getId());
}
public static void ignore(SteamwarUser ignorer, SteamwarUser ignored) {
SQL.update("INSERT INTO IgnoredPlayers (Ignorer, Ignored) VALUES (?, ?)", ignorer.getId(), ignored.getId());
insert.update(ignorer.getId(), ignored.getId());
}
public static void unIgnore(SteamwarUser ignorer, SteamwarUser ignored) {
SQL.update("DELETE FROM IgnoredPlayers WHERE Ignorer = ? AND Ignored = ?", ignorer.getId(), ignored.getId());
delete.update(ignorer.getId(), ignored.getId());
}
}

Datei anzeigen

@ -19,12 +19,11 @@
package de.steamwar.bungeecore.sql;
import de.steamwar.bungeecore.BungeeCore;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Mod {
private static final Statement get = new Statement("SELECT * FROM Mods WHERE ModName = ? AND Platform = ?");
private static final Statement insert = new Statement("INSERT INTO Mods (ModName, Platform) VALUES (?, ?)");
private final String modName;
private final Platform platform;
private final ModType modType;
@ -36,15 +35,15 @@ public class Mod {
}
public static Mod get(String modName, Platform platform){
ResultSet rs = SQL.select("SELECT * FROM Mods WHERE ModName = ? AND Platform = ?", modName, platform.value);
try{
Mod mod = get.select(rs -> {
if(rs.next())
return new Mod(modName, platform, ModType.valueOf(rs.getInt("ModType")));
}catch (SQLException e){
BungeeCore.log("Failed to load Mod", e);
throw new SecurityException();
}
SQL.update("INSERT INTO Mods (ModName, Platform) VALUES (?, ?)", modName, platform.value);
return null;
}, modName, platform.value);
if(mod != null)
return mod;
insert.update(modName, platform.value);
return new Mod(modName, platform, ModType.UNKLASSIFIED);
}

Datei anzeigen

@ -19,7 +19,6 @@
package de.steamwar.bungeecore.sql;
import de.steamwar.bungeecore.BungeeCore;
import de.steamwar.bungeecore.listeners.PollSystem;
import java.sql.ResultSet;
@ -29,6 +28,10 @@ import java.util.Map;
public class PollAnswer {
private static final Statement get = new Statement("SELECT * FROM PollAnswer WHERE UserID = ? AND Question = ?");
private static final Statement getResults = new Statement("SELECT Count(UserID) AS Times, Answer FROM PollAnswer WHERE Question = ? GROUP BY Answer ORDER BY `Times` ASC");
private static final Statement insert = new Statement("INSERT INTO PollAnswer (UserID, Question, Answer) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE Answer = VALUES(Answer)");
private final int userID;
private final String question;
private int answer;
@ -44,38 +47,20 @@ public class PollAnswer {
}
public static PollAnswer get(int userID){
ResultSet rs = SQL.select("SELECT * FROM PollAnswer WHERE UserID = ? AND Question = ?", userID, PollSystem.getQuestion());
try {
if(!rs.next())
return new PollAnswer(userID, PollSystem.getQuestion());
return new PollAnswer(rs);
} catch (SQLException e) {
throw new SecurityException("Unable to get PollAnswer", e);
}
return get.select(rs -> {
if(rs.next())
return new PollAnswer(rs);
return new PollAnswer(userID, PollSystem.getQuestion());
}, userID, PollSystem.getQuestion());
}
public static Map<String, Integer> getCurrentResults() {
ResultSet set = SQL.select("SELECT Count(UserID) AS Times, Answer FROM PollAnswer WHERE Question = ? GROUP BY Answer ORDER BY `Times` ASC", PollSystem.getQuestion());
try {
return getResults.select(rs -> {
Map<String, Integer> retMap = new HashMap<>();
while (set.next()) {
retMap.put(PollSystem.getAnswer(set.getInt("Answer")), set.getInt("Times"));
}
while (rs.next())
retMap.put(PollSystem.getAnswer(rs.getInt("Answer")), rs.getInt("Times"));
return retMap;
}catch (SQLException e) {
throw new SecurityException("Unable to get PollAnswer", e);
}
}
public static Integer getAllAnswered() {
ResultSet set = SQL.select("SELECT Count(UserID) AS Times FROM PollAnswer WHERE Question = ?", PollSystem.getQuestion());
try {
if(!set.next())
throw new SecurityException("Could not get PollAnswers");
return set.getInt("Times");
}catch (SQLException e) {
throw new SecurityException("Unable to get PollAnswer", e);
}
}, PollSystem.getQuestion());
}
public boolean hasAnswered(){
@ -84,6 +69,6 @@ public class PollAnswer {
public void setAnswer(int answer){
this.answer = answer;
SQL.update("INSERT INTO PollAnswer (UserID, Question, Answer) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE Answer = VALUES(Answer)", userID, question, answer);
insert.update(userID, question, answer);
}
}

Datei anzeigen

@ -31,45 +31,40 @@ import java.util.*;
public class Punishment {
private static final Statement getPunishment = new Statement("SELECT * FROM Punishments WHERE UserId = ? AND Type = ? ORDER BY PunishmentId DESC LIMIT 1");
private static final Statement getPunishments = new Statement("SELECT * FROM Punishments WHERE PunishmentId IN (SELECT MAX(PunishmentId) FROM Punishments WHERE UserId = ? GROUP BY Type)");
private static final Statement getAllPunishments = new Statement("SELECT * FROM Punishments WHERE UserId = ? ORDER BY `PunishmentId` DESC");
private static final Statement insert = new Statement("INSERT INTO Punishments (UserId, Punisher, Type, Reason, EndTime, Perma) VALUES (?, ?, ?, ?, ?, ?)");
private static final Statement update = new Statement("UPDATE Punishments SET EndTime = ?, Reason = ?, Perma = ? WHERE PunishmentId = ?");
public static Punishment getPunishmentOfPlayer(int user, PunishmentType type) {
ResultSet set = SQL.select("SELECT * FROM Punishments WHERE UserId = ? AND Type = ? ORDER BY PunishmentId DESC LIMIT 1", user, type.name());
try {
if(!set.next())
return null;
return new Punishment(set);
} catch (SQLException e) {
throw new SecurityException("Could not Load Punishments", e);
}
return getPunishment.select(rs -> {
if(rs.next())
return new Punishment(rs);
return null;
}, user, type.name());
}
public static Map<PunishmentType, Punishment> getPunishmentsOfPlayer(int user) {
ResultSet set = SQL.select("SELECT * FROM Punishments WHERE PunishmentId IN (SELECT MAX(PunishmentId) FROM Punishments WHERE UserId = ? GROUP BY Type)", user);
try {
return getPunishments.select(rs -> {
Map<PunishmentType, Punishment> punishments = new HashMap<>();
while (set.next())
punishments.put(PunishmentType.valueOf(set.getString("Type")), new Punishment(set));
while (rs.next())
punishments.put(PunishmentType.valueOf(rs.getString("Type")), new Punishment(rs));
return punishments;
} catch (SQLException e) {
throw new SecurityException("Could not Load Punishments", e);
}
}, user);
}
public static List<Punishment> getAllPunishmentsOfPlayer(int user) {
ResultSet set = SQL.select("SELECT * FROM Punishments WHERE UserId = ? ORDER BY `PunishmentId` DESC", user);
try {
return getAllPunishments.select(rs -> {
List<Punishment> punishments = new ArrayList<>();
while (set.next()) {
punishments.add(new Punishment(set));
}
while (rs.next())
punishments.add(new Punishment(rs));
return punishments;
} catch (SQLException e) {
throw new SecurityException("Could not Load all Punishments", e);
}
}, user);
}
public static Punishment createPunishment(int user, int executor, PunishmentType type, String reason, Timestamp endTime, boolean perma) {
SQL.update("INSERT INTO Punishments (UserId, Punisher, Type, Reason, EndTime, Perma) VALUES (?, ?, ?, ?, ?, ?)",
user, executor, type.name(), reason, endTime, perma);
insert.update(user, executor, type.name(), reason, endTime, perma);
return getPunishmentOfPlayer(user, type);
}
@ -122,7 +117,7 @@ public class Punishment {
}
public void updateEndTime(int from, String newreason, Timestamp newUpdate, boolean perma) {
if(newreason.equals(reason) && newUpdate.equals(endTime) && perma == perma)
if(newreason.equals(reason) && newUpdate.equals(endTime) && this.perma == perma)
return;
ProxiedPlayer player = BungeeCore.get().getProxy().getPlayer(SteamwarUser.get(from).getUuid());
String newReason = Message.parse("BAN_CHANGED", player, reason,
@ -131,7 +126,7 @@ public class Punishment {
getBantime(newUpdate, perma),
newreason);
SQL.update("UPDATE Punishments SET EndTime = ?, Reason = ?, Perma = ? WHERE PunishmentId = ?", newUpdate, newReason, perma, id);
update.update(newUpdate, newReason, perma, id);
this.reason = newReason;
this.perma = perma;
this.endTime = newUpdate;

Datei anzeigen

@ -1,95 +0,0 @@
/*
This file is a part of the SteamWar software.
Copyright (C) 2020 SteamWar.de-Serverteam
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.bungeecore.sql;
import de.steamwar.bungeecore.BungeeCore;
import net.md_5.bungee.api.ProxyServer;
import java.sql.*;
public class SQL {
private SQL(){}
private static Connection con;
private static String url;
private static String user;
private static String password;
public static void connect(String url, String user, String password) {
SQL.url = url;
SQL.user = user;
SQL.password = password;
try {
con = DriverManager.getConnection(url + "?autoreconnect=true", user, password);
}catch (SQLException e) {
ProxyServer.getInstance().stop();
throw new SecurityException("Could not start SQL-Exception", e);
}
}
public static void close() {
try {
if(con != null)
con.close();
}catch (SQLException e) {
BungeeCore.log("Could not close SQL-Connection", e);
}
}
static void update(String qry, Object... objects) {
try {
prepare(con, qry, objects).executeUpdate();
} catch (SQLException e) {
sqlException();
try (PreparedStatement st = con.prepareStatement(qry)) {
st.executeUpdate();
} catch (SQLException ex) {
throw new SecurityException("Could not execute update statement", ex);
}
}
}
static ResultSet select(String qry, Object... objects){
try{
return prepare(con, qry, objects).executeQuery();
} catch (SQLException e) {
sqlException();
try {
return prepare(con, qry, objects).executeQuery();
} catch (SQLException ex) {
throw new SecurityException("Could not run Select-Statement", ex);
}
}
}
private static PreparedStatement prepare(Connection connection, String qry, Object... objects) throws SQLException{
PreparedStatement st = connection.prepareStatement(qry);
for(int i = 0; i < objects.length; i++){
st.setObject(i+1, objects[i]);
}
return st;
}
private static void sqlException(){
close();
connect(url, user, password);
}
}

Datei anzeigen

@ -22,7 +22,9 @@ package de.steamwar.bungeecore.sql;
public class SWException {
private SWException(){}
private static final Statement insert = new Statement("INSERT INTO Exception (server, message, stacktrace) VALUES (?, ?, ?)");
public static void log(String server, String message, String stacktrace){
SQL.update("INSERT INTO Exception (server, message, stacktrace) VALUES (?, ?, ?)", server, message, stacktrace);
insert.update(server, message, stacktrace);
}
}

Datei anzeigen

@ -23,14 +23,22 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class Schematic {
private static final Statement schemByName = new Statement("SELECT SchemID, SchemName, SchemOwner, SchemType, Item FROM Schematic WHERE SchemName = ? AND SchemOwner = ?");
private static final Statement schemById = new Statement("SELECT SchemID, SchemName, SchemOwner, SchemType, Item FROM Schematic WHERE SchemID = ?");
private static final Statement schemsByType = new Statement("SELECT SchemID, SchemName, SchemOwner, SchemType, Item FROM Schematic WHERE SchemType = ?");
private static final Statement schemsByUserType = new Statement("SELECT SchemID, SchemName, SchemOwner, SchemType, Item FROM Schematic WHERE SchemType = ? AND SchemOwner = ?");
private static final Statement schemsOfUser = new Statement("SELECT SchemID, SchemName, SchemOwner, Item, SchemType, Rank, SchemFormat, Item FROM Schematic WHERE SchemOwner = ? ORDER BY SchemName");
private static final Statement updateType = new Statement("UPDATE Schematic SET SchemType = ? WHERE SchemID = ?");
private static final Statement updateRank = new Statement("UPDATE Schematic SET Rank = ? WHERE SchemID = ?");
private final int schemID;
private final String schemName;
private final int schemOwner;
private SchematicType schemType;
private String schemItem;
private final String schemItem;
private Schematic(ResultSet rs) throws SQLException {
this.schemID = rs.getInt("SchemID");
@ -40,74 +48,52 @@ public class Schematic {
this.schemItem = rs.getString("Item");
}
public static Schematic getSchemFromDB(String schemName, UUID schemOwner){
return getSchemFromDB(schemName, SteamwarUser.get(schemOwner).getId());
}
public static Schematic getSchemFromDB(String schemName, int schemOwner){
ResultSet schematic = SQL.select("SELECT SchemID, SchemName, SchemOwner, SchemType, Item FROM Schematic WHERE SchemName = ? AND SchemOwner = ?", schemName, schemOwner);
try {
if(schematic == null || !schematic.next()){
return null;
}
return new Schematic(schematic);
} catch (SQLException e) {
throw new SecurityException("Failed loading schematic", e);
}
return schemByName.select(rs -> {
if(!rs.next())
return new Schematic(rs);
return null;
}, schemName, schemOwner);
}
public static Schematic getSchemFromDB(int schemID){
ResultSet schematic = SQL.select("SELECT SchemID, SchemName, SchemOwner, SchemType, Item FROM Schematic WHERE SchemID = ?", schemID);
try {
if(!schematic.next())
return schemById.select(rs -> {
if(!rs.next())
throw new SecurityException("Failed loading schematic " + schemID);
return new Schematic(schematic);
} catch (SQLException e) {
throw new SecurityException("Failed loading schematic", e);
}
return new Schematic(rs);
}, schemID);
}
public static List<Schematic> getAllSchemsOfType(SchematicType schemType){
try{
ResultSet schematic = SQL.select("SELECT SchemID, SchemName, SchemOwner, SchemType, Item FROM Schematic WHERE SchemType = ?", schemType.toDB());
return schemsByType.select(rs -> {
List<Schematic> schematics = new ArrayList<>();
while(schematic.next()){
schematics.add(new Schematic(schematic));
}
while(rs.next())
schematics.add(new Schematic(rs));
return schematics;
}catch(SQLException e){
throw new SecurityException("Failed loading all schems of type", e);
}
}, schemType.toDB());
}
public static List<Schematic> getSchemsOfType(int userId, SchematicType schemType){
try{
ResultSet schematic = SQL.select("SELECT SchemID, SchemName, SchemOwner, SchemType, Item FROM Schematic WHERE SchemType = ? AND SchemOwner = ?", schemType.toDB(), userId);
return schemsByUserType.select(rs -> {
List<Schematic> schematics = new ArrayList<>();
while(schematic.next()){
schematics.add(new Schematic(schematic));
}
while(rs.next())
schematics.add(new Schematic(rs));
return schematics;
}catch(SQLException e){
throw new SecurityException("Failed loading schems of type", e);
}
}, schemType.toDB(), userId);
}
public static List<Schematic> getSchemsAccessibleByUser(int schemOwner){
try{
ResultSet schematic = SQL.select("SELECT SchemID, SchemName, SchemOwner, Item, SchemType, Rank, SchemFormat, Item FROM Schematic WHERE SchemOwner = ? ORDER BY SchemName", schemOwner);
return schemsOfUser.select(rs -> {
List<Schematic> schematics = new ArrayList<>();
while(schematic.next()){
schematics.add(new Schematic(schematic));
while(rs.next()){
schematics.add(new Schematic(rs));
}
List<SchematicMember> addedSchems = SchematicMember.getAccessibleSchems(schemOwner);
for(SchematicMember schem : addedSchems){
schematics.add(getSchemFromDB(schem.getSchemName(), schem.getSchemOwner()));
}
return schematics;
}catch(SQLException e){
throw new SecurityException("Failed listing schematics", e);
}
}, schemOwner);
}
public int getSchemID() {
@ -132,10 +118,10 @@ public class Schematic {
public void setSchemType(SchematicType schemType) {
this.schemType = schemType;
SQL.update("UPDATE Schematic SET SchemType = ? WHERE SchemID = ?", schemType.toDB(), schemID);
updateType.update(schemType.toDB(), schemID);
}
public void setRank(int rank) {
SQL.update("UPDATE Schematic SET Rank = ? WHERE SchemID = ?", rank, schemID);
updateRank.update(rank, schemID);
}
}

Datei anzeigen

@ -19,13 +19,15 @@
package de.steamwar.bungeecore.sql;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class SchematicMember {
private static final Statement insert = new Statement("INSERT INTO SchemMember (SchemName, SchemOwner, Member) VALUES (?, ?, ?)");
private static final Statement selectSchems = new Statement("SELECT * FROM SchemMember WHERE Member = ?");
private static final Statement delete = new Statement("DELETE FROM SchemMember WHERE SchemOwner = ? AND SchemName = ? AND Member = ?");
private final int schemOwner;
private final String schemName;
private final int member;
@ -38,82 +40,17 @@ public class SchematicMember {
updateDB();
}
public SchematicMember(String schemName, int schemOwner, int schemMember){
this(schemName, schemOwner, schemMember, true);
}
public SchematicMember(String schemName, UUID schemOwner, UUID schemMember){
this(schemName, SteamwarUser.get(schemOwner).getId(), SteamwarUser.get(schemMember).getId(), true);
}
private void updateDB(){
SQL.update("INSERT INTO SchemMember (SchemName, SchemOwner, Member) VALUES (?, ?, ?)", schemName, schemOwner, member);
}
public static SchematicMember getSchemMemberFromDB(String schemName, UUID schemOwner, UUID schemMember){
return getSchemMemberFromDB(schemName, SteamwarUser.get(schemOwner).getId(), SteamwarUser.get(schemMember).getId());
}
public static SchematicMember getSchemMemberFromDB(String schemName, int schemOwner, int schemMember){
ResultSet schematicMember = SQL.select("SELECT * FROM SchemMember WHERE SchemName = ? AND SchemOwner = ? AND Member = ?", schemName, schemOwner, schemMember);
try {
if(schematicMember == null || !schematicMember.next()){
return null;
}
return new SchematicMember(schemName, schemOwner, schemMember, false);
} catch (SQLException e) {
throw new SecurityException("Could not get schemmember", e);
}
}
public static SchematicMember getMemberBySchematic(String schemName, int schemMember){
ResultSet schematicMember = SQL.select("SELECT * FROM SchemMember WHERE SchemName = ? AND Member = ?", schemName, schemMember);
try {
if(schematicMember == null || !schematicMember.next()){
return null;
}
int schemOwner = schematicMember.getInt("SchemOwner");
return new SchematicMember(schemName, schemOwner, schemMember, false);
} catch (SQLException e) {
throw new SecurityException("Could not get member", e);
}
}
public static List<SchematicMember> getSchemMembers(String schemName, UUID schemOwner){
return getSchemMembers(schemName, SteamwarUser.get(schemOwner).getId());
}
public static List<SchematicMember> getSchemMembers(String schemName, int schemOwner){
ResultSet schematicMember = SQL.select("SELECT * FROM SchemMember WHERE SchemName = ? AND SchemOwner = ?", schemName, schemOwner);
try {
List<SchematicMember> schematicMembers = new ArrayList<>();
while(schematicMember.next()){
int schemMember = schematicMember.getInt("Member");
schematicMembers.add(new SchematicMember(schemName, schemOwner, schemMember, false));
}
return schematicMembers;
} catch (SQLException e) {
throw new SecurityException("Could not get schemmembers", e);
}
}
public static List<SchematicMember> getAccessibleSchems(UUID schemMember){
return getAccessibleSchems(SteamwarUser.get(schemMember).getId());
insert.update(schemName, schemOwner, member);
}
public static List<SchematicMember> getAccessibleSchems(int schemMember){
ResultSet schematicMember = SQL.select("SELECT * FROM SchemMember WHERE Member = ?", schemMember);
try {
return selectSchems.select(rs -> {
List<SchematicMember> schematicMembers = new ArrayList<>();
while(schematicMember.next()){
String schemName = schematicMember.getString("SchemName");
int schemOwner = schematicMember.getInt("SchemOwner");
schematicMembers.add(new SchematicMember(schemName, schemOwner, schemMember, false));
}
while(rs.next())
schematicMembers.add(new SchematicMember(rs.getString("SchemName"), rs.getInt("SchemOwner"), schemMember, false));
return schematicMembers;
} catch (SQLException e) {
throw new SecurityException("Could not get accessible schems", e);
}
}, schemMember);
}
public int getSchemOwner() {
@ -129,6 +66,6 @@ public class SchematicMember {
}
public void remove(){
SQL.update("DELETE FROM SchemMember WHERE SchemOwner = ? AND SchemName = ? AND Member = ?", schemOwner, schemName, member);
delete.update(schemOwner, schemName, member);
}
}

Datei anzeigen

@ -22,9 +22,12 @@ package de.steamwar.bungeecore.sql;
import java.sql.Timestamp;
public class Session {
private static final Statement insert = new Statement("INSERT INTO Session (UserID, StartTime, EndTime) VALUES (?, ?, NOW())");
private Session(){}
public static void insertSession(int userID, Timestamp startTime){
SQL.update("INSERT INTO Session (UserID, StartTime, EndTime) VALUES (?, ?, NOW())", userID, startTime);
insert.update(userID, startTime);
}
}

Datei anzeigen

@ -0,0 +1,137 @@
/*
This file is a part of the SteamWar software.
Copyright (C) 2020 SteamWar.de-Serverteam
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.bungeecore.sql;
import de.steamwar.bungeecore.BungeeCore;
import net.md_5.bungee.api.ProxyServer;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
public class Statement {
private static final List<Statement> statements = new ArrayList<>();
private static Connection con;
private static String url;
private static String user;
private static String password;
public static void connect(String url, String user, String password) {
Statement.url = url;
Statement.user = user;
Statement.password = password;
try {
con = DriverManager.getConnection(url + "?autoreconnect=true", user, password);
} catch (SQLException e) {
ProxyServer.getInstance().stop();
throw new SecurityException("Could not start SQL-Connection", e);
}
}
private static void reset(SQLException e) {
BungeeCore.get().getLogger().log(Level.WARNING, "SQL Exception thrown", e);
close();
connect(url, user, password);
try {
for (Statement statement : statements) {
statement.init();
}
} catch (SQLException ex) {
throw new SecurityException("Could not reprepare SQL Statements", ex);
}
}
public static void close() {
for (Statement statement : statements) {
try {
statement.st.close();
} catch (SQLException e) {
BungeeCore.get().getLogger().log(Level.INFO, "Could not close statement", e);
}
}
try {
con.close();
} catch (SQLException e) {
BungeeCore.log("Could not close SQL-Connection", e);
}
}
private final String sql;
private PreparedStatement st;
Statement(String sql) {
this.sql = sql;
statements.add(this);
try {
init();
} catch (SQLException e) {
reset(e);
}
}
private synchronized void init() throws SQLException {
st = con.prepareStatement(sql);
}
<T> T select(ResultSetUser<T> user, Object... objects) {
return prepare(() -> {
ResultSet rs = st.executeQuery();
T result = user.use(rs);
rs.close();
return result;
}, objects);
}
void update(Object... objects) {
prepare(st::executeUpdate, objects);
}
private synchronized <T> T prepare(SQLRunnable<T> runnable, Object... objects) {
try {
setObjects(objects);
return runnable.run();
} catch (SQLException e) {
reset(e);
try {
setObjects(objects);
return runnable.run();
} catch (SQLException ex) {
throw new SecurityException("Could not execute SQL statement", ex);
}
}
}
private void setObjects(Object... objects) throws SQLException {
for (int i = 0; i < objects.length; i++) {
st.setObject(i + 1, objects[i]);
}
}
interface ResultSetUser<T> {
T use(ResultSet rs) throws SQLException;
}
private interface SQLRunnable<T> {
T run() throws SQLException;
}
}

Datei anzeigen

@ -31,26 +31,34 @@ import net.md_5.bungee.api.connection.ProxiedPlayer;
import java.io.IOException;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.UnknownHostException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.UUID;
import java.util.logging.Level;
public class SteamwarUser {
private final int id;
private final UUID uuid;
private String userName;
private UserGroup userGroup;
private int team;
private boolean leader;
private Map<Punishment.PunishmentType, Punishment> punishments;
private String discordId;
private static final Statement updateName = new Statement("UPDATE UserData SET UserName = ? WHERE id = ?");
private static final Statement updateBedrock = new Statement("UPDATE UserData SET Bedrock = ? WHERE id = ?");
private static final Statement insert = new Statement("INSERT INTO UserData (UUID, UserName, UserGroup) VALUES (?, ?, 'Member')");
private static final Statement byUUID = new Statement("SELECT * FROM UserData WHERE UUID = ?");
private static final Statement byName = new Statement("SELECT * FROM UserData WHERE lower(UserName) = ?");
private static final Statement byID = new Statement("SELECT * FROM UserData WHERE id = ?");
private static final Statement byDiscord = new Statement("SELECT * FROM UserData WHERE DiscordId = ?");
private static final Statement updateTeam = new Statement("Update UserData SET Team = ? WHERE id = ?");
private static final Statement updateDiscord = new Statement("Update UserData SET DiscordId = ? WHERE id = ?");
private static final Statement deleteIPs = new Statement("DELETE FROM BannedUserIPs WHERE UserID = ?");
private static final Statement updateLeader = new Statement("Update UserData SET Leader = ? WHERE id = ?");
private static final Statement getPlaytime = new Statement("SELECT SUM(UNIX_TIMESTAMP(EndTime) - UNIX_TIMESTAMP(StartTime)) as Playtime FROM Session WHERE UserID = ?");
private static final Statement getFirstjoin = new Statement("SELECT MIN(StartTime) AS FirstJoin FROM Session WHERE UserID = ?");
private static final Map<String, SteamwarUser> usersByName = new HashMap<>();
private static final Map<UUID, SteamwarUser> usersByUUID = new HashMap<>();
@ -60,6 +68,15 @@ public class SteamwarUser {
private static final String API_URL = "https://api.mojang.com/users/profiles/minecraft/";
private static final JsonParser jsonParser = new JsonParser();
private final int id;
private final UUID uuid;
private String userName;
private final UserGroup userGroup;
private int team;
private boolean leader;
private final Map<Punishment.PunishmentType, Punishment> punishments;
private String discordId;
static {
try {
LIXFEL_DE = InetAddress.getByAddress(new byte[]{(byte) 195, (byte) 201, (byte) 242, 43});
@ -91,7 +108,7 @@ public class SteamwarUser {
if(user != null){
String userName = connection.getName();
if(!user.userName.equals(userName)){
SQL.update("UPDATE UserData SET UserName = ? WHERE id = ?", userName, user.id);
updateName.update(userName, user.id);
WebregisterCommand.changeUsername(user.userName, userName);
user.userName = userName;
}
@ -103,7 +120,7 @@ public class SteamwarUser {
}
boolean bedrock = connection.getAddress().getAddress().equals(LIXFEL_DE);
SQL.update("UPDATE UserData SET Bedrock = ? WHERE id = ?", bedrock, user.id);
updateBedrock.update(bedrock, user.id);
return user;
}
@ -113,7 +130,7 @@ public class SteamwarUser {
return user;
}
UUID uuid = SteamwarUser.loadUUID(name);
UUID uuid = SteamwarUser.getUUIDofOfflinePlayer(name);
if (uuid == null) {
return null;
}
@ -122,21 +139,29 @@ public class SteamwarUser {
}
private static SteamwarUser createUserInDatabase(UUID uuid, String name) {
SQL.update("INSERT INTO UserData (UUID, UserName, UserGroup) VALUES (?, ?, 'Member')", uuid.toString(), name);
return dbInit(SQL.select("SELECT * FROM UserData WHERE UUID = ?", uuid.toString()));
insert.update(uuid.toString(), name);
return get(uuid);
}
public static SteamwarUser get(String userName){
userName = userName.toLowerCase();
if(usersByName.containsKey(userName))
return usersByName.get(userName);
return dbInit(SQL.select("SELECT * FROM UserData WHERE lower(UserName) = ?", userName));
return byName.select(rs -> {
if(rs.next())
return new SteamwarUser(rs);
return null;
}, userName);
}
public static SteamwarUser get(UUID uuid){
if(usersByUUID.containsKey(uuid))
return usersByUUID.get(uuid);
return dbInit(SQL.select("SELECT * FROM UserData WHERE UUID = ?", uuid.toString()));
return byUUID.select(rs -> {
if(rs.next())
return new SteamwarUser(rs);
return null;
}, uuid.toString());
}
public static SteamwarUser get(ProxiedPlayer player){
@ -146,7 +171,10 @@ public class SteamwarUser {
public static SteamwarUser get(int id){
if(usersById.containsKey(id))
return usersById.get(id);
return dbInit(SQL.select("SELECT * FROM UserData WHERE id = ?", id));
return byID.select(rs -> {
rs.next();
return new SteamwarUser(rs);
}, id);
}
public static void batchCache(Set<Integer> ids) {
@ -163,7 +191,11 @@ public class SteamwarUser {
public static SteamwarUser get(Long discordId) {
if(usersByDiscord.containsKey(discordId.toString()))
return usersByDiscord.get(discordId.toString());
return dbInit(SQL.select("SELECT * FROM UserData WHERE DiscordId = ?", discordId));
return byDiscord.select(rs -> {
if(rs.next())
return new SteamwarUser(rs);
Lixfel markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Hier draus könntest du ein try with resources machen, da Statement nun AutoCloseable ist.

Hier draus könntest du ein try with resources machen, da Statement nun AutoCloseable ist.
return null;
}, discordId);
}
public static void clearCache(){
@ -173,25 +205,20 @@ public class SteamwarUser {
usersByDiscord.clear();
}
public static UUID loadUUID(String playerName) {
private static UUID getUUIDofOfflinePlayer(String playerName) {
try {
final URL url = new URL(API_URL + playerName);
return getUniqueIdFromString(jsonParser.parse(new Scanner(url.openConnection().getInputStream()).nextLine()).getAsJsonObject().get("id").getAsString());
} catch (MalformedURLException e) {
e.printStackTrace();
String uuid = jsonParser.parse(new Scanner(url.openConnection().getInputStream()).nextLine()).getAsJsonObject().get("id").getAsString();
return UUID.fromString(uuid.replaceFirst("(\\w{8})(\\w{4})(\\w{4})(\\w{4})(\\w{12})", "$1-$2-$3-$4-$5"));
} catch (IOException e) {
e.printStackTrace();
BungeeCore.get().getLogger().log(Level.SEVERE, "Could not get offline player UUID", e);
return null;
}
return null;
}
private static UUID getUniqueIdFromString(String uuid) {
return UUID.fromString(uuid.replaceFirst("(\\w{8})(\\w{4})(\\w{4})(\\w{4})(\\w{12})", "$1-$2-$3-$4-$5"));
}
public void setTeam(int team){
this.team = team;
SQL.update("Update UserData SET Team = ? WHERE id = ?", team, id);
updateTeam.update(team, id);
setLeader(false);
}
@ -226,7 +253,7 @@ public class SteamwarUser {
public void setDiscordId(String discordId) {
usersByDiscord.remove(this.discordId);
this.discordId = discordId;
SQL.update("Update UserData SET DiscordId = ? WHERE id = ?", discordId, id);
updateDiscord.update(discordId, id);
if(discordId != null) {
usersByDiscord.put(discordId, this);
}
@ -236,7 +263,7 @@ public class SteamwarUser {
if(!punishments.containsKey(Punishment.PunishmentType.Ban))
return false;
if(!punishments.get(Punishment.PunishmentType.Ban).isCurrent()) {
SQL.update("DELETE FROM BannedUserIPs WHERE UserID = ?", id);
deleteIPs.update(id);
punishments.remove(Punishment.PunishmentType.Ban);
return false;
}
@ -307,38 +334,20 @@ public class SteamwarUser {
punishments.put(Punishment.PunishmentType.Mute, Punishment.createPunishment(id, from, Punishment.PunishmentType.Mute, muteReason, time, perma));
}
private static SteamwarUser dbInit(ResultSet rs){
try {
if(!rs.next())
return null;
return new SteamwarUser(rs);
} catch (SQLException e) {
throw new SecurityException(e);
}
}
public double getOnlinetime() {
ResultSet set = SQL.select("SELECT SUM(UNIX_TIMESTAMP(EndTime) - UNIX_TIMESTAMP(StartTime)) as Playtime FROM Session WHERE UserID = ?", id);
try {
if(!set.next())
return 0;
return set.getBigDecimal("Playtime").doubleValue();
} catch (SQLException throwables) {
throw new SecurityException("Could not load Online Time", throwables);
} catch (NullPointerException e) { //When no Sessions are recorded
return 0;
}
return getPlaytime.select(rs -> {
if(rs.next())
return rs.getBigDecimal("Playtime").doubleValue();
return 0.0;
}, id);
}
public Timestamp getFirstjoin() {
ResultSet set = SQL.select("SELECT MIN(StartTime) AS FirstJoin FROM Session WHERE UserID = ?", id);
try {
if(!set.next())
return null;
return set.getTimestamp("FirstJoin");
} catch (SQLException throwables) {
throw new SecurityException("Could not load First Join");
}
return getFirstjoin.select(rs -> {
if(rs.next())
return rs.getTimestamp("FirstJoin");
return null;
}, id);
}
public boolean isLeader() {
@ -347,6 +356,6 @@ public class SteamwarUser {
public void setLeader(boolean leader) {
this.leader = leader;
SQL.update("Update UserData SET Leader = ? WHERE id = ?", leader, id);
updateLeader.update(leader, id);
}
}

Datei anzeigen

@ -19,25 +19,31 @@
package de.steamwar.bungeecore.sql;
import de.steamwar.bungeecore.BungeeCore;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import static de.steamwar.bungeecore.sql.SQL.select;
public class Team {
private static final Statement insert = new Statement("INSERT INTO Team (TeamKuerzel, TeamName) VALUES (?, ?)");
private static final Statement delete = new Statement("UPDATE Team SET TeamDeleted = 1 WHERE TeamID = ?");
private static final Statement update = new Statement("INSERT INTO Team (TeamID, TeamKuerzel, TeamName, TeamColor) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE TeamName = VALUES(TeamName), TeamKuerzel = VALUES(TeamKuerzel), TeamColor = VALUES(TeamColor)");
private static final Statement getSize = new Statement("SELECT COUNT(id) FROM UserData WHERE Team = ?");
private static final Statement getMembers = new Statement("SELECT id FROM UserData WHERE Team = ?");
private static final Statement byId = new Statement("SELECT * FROM Team WHERE TeamID = ?");
private static final Statement byName = new Statement("SELECT * FROM Team WHERE (lower(TeamName) = ? OR lower(TeamKuerzel) = ?) AND NOT TeamDeleted");
private static final Statement all = new Statement("SELECT * FROM Team WHERE NOT TeamDeleted");
private static final List<Team> teamCache = new LinkedList<>();
private static final Team pub = new Team(0, "PUB", "Öffentlich", "8");
private final int teamId;
private String teamKuerzel;
private String teamName;
private String teamColor;
private static final List<Team> teamCache = new LinkedList<>();
private static final Team pub = new Team(0, "PUB", "Öffentlich", "8");
private Team(int id, String kuerzel, String name, String color){
teamId = id;
teamKuerzel = kuerzel;
@ -52,8 +58,8 @@ public class Team {
this(rs.getInt("TeamID"), rs.getString("TeamKuerzel"), rs.getString("TeamName"), rs.getString("TeamColor"));
}
public static void create(String kuerzel, String name, SteamwarUser user){
SQL.update("INSERT INTO Team (TeamKuerzel, TeamName) VALUES (?, ?)", kuerzel, name);
public static void create(String kuerzel, String name){
insert.update(kuerzel, name);
}
public static Team get(int id){
@ -64,51 +70,38 @@ public class Team {
for(Team team : teamCache)
if(team.teamId == id)
return team;
return load(select("SELECT * FROM Team WHERE TeamID = ?", id));
return byId.select(rs -> {
rs.next();
return new Team(rs);
}, id);
}
public static Team get(String name){
for(Team team : teamCache)
if(team.teamName.equalsIgnoreCase(name))
if(team.teamName.equalsIgnoreCase(name) || team.teamKuerzel.equalsIgnoreCase(name))
return team;
for(Team team : teamCache)
if(team.teamKuerzel.equalsIgnoreCase(name))
return team;
return load(select("SELECT * FROM Team WHERE (lower(TeamName) = ? OR lower(TeamKuerzel) = ?) AND NOT TeamDeleted", name.toLowerCase(), name.toLowerCase()));
return byName.select(rs -> {
if(rs.next())
return new Team(rs);
return null;
}, name.toLowerCase(), name.toLowerCase());
}
public static List<Team> getAll(){
clearCache();
try{
ResultSet rs = select("SELECT * FROM Team WHERE NOT TeamDeleted");
if(rs == null)
return teamCache;
return all.select(rs -> {
while(rs.next())
new Team(rs);
} catch (SQLException e) {
BungeeCore.log("Could not get all Teams", e);
}
return teamCache;
return teamCache;
});
}
public static void clearCache(){
teamCache.clear();
}
private static Team load(ResultSet dbteam){
try {
if(!dbteam.next())
return null;
return new Team(dbteam);
} catch (SQLException e) {
BungeeCore.log("Could not load Team", e);
return null;
}
}
private void updateDB(){
SQL.update("INSERT INTO Team (TeamID, TeamKuerzel, TeamName, TeamColor) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE TeamName = VALUES(TeamName), TeamKuerzel = VALUES(TeamKuerzel), TeamColor = VALUES(TeamColor)", teamId, teamKuerzel, teamName, teamColor);
update.update(teamId, teamKuerzel, teamName, teamColor);
}
public int getTeamId() {
@ -143,33 +136,24 @@ public class Team {
}
public int size(){
ResultSet rs = select("SELECT COUNT(id) FROM UserData WHERE Team = ?", teamId);
try {
return getSize.select(rs -> {
rs.next();
return rs.getInt("COUNT(id)");
}catch (SQLException e) {
BungeeCore.log("Could not get Teamsize", e);
return 1000;
}
}, teamId);
}
public void disband(SteamwarUser user){
user.setLeader(false);
SQL.update("UPDATE Team SET TeamDeleted = 1 WHERE TeamID = ?", teamId);
delete.update(teamId);
teamCache.remove(this);
}
public List<Integer> getMembers(){
try{
ResultSet memberlist = select("SELECT id FROM UserData WHERE Team = ?", teamId);
return getMembers.select(rs -> {
List<Integer> members = new ArrayList<>();
while(memberlist.next()){
members.add(memberlist.getInt("id"));
}
while(rs.next())
members.add(rs.getInt("id"));
return members;
}catch(SQLException e){
BungeeCore.log("Could not get Teammembers", e);
}
return new ArrayList<>();
}, teamId);
}
}

Datei anzeigen

@ -19,55 +19,46 @@
package de.steamwar.bungeecore.sql;
import de.steamwar.bungeecore.BungeeCore;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashSet;
import java.util.Set;
public class TeamTeilnahme {
private TeamTeilnahme(){}
private static final Statement insert = new Statement("INSERT INTO TeamTeilnahme (TeamID, EventID) VALUES (?, ?)");
private static final Statement delete = new Statement("DELETE FROM TeamTeilnahme WHERE TeamID = ? AND EventID = ?");
private static final Statement byEventTeam = new Statement("SELECT * FROM TeamTeilnahme WHERE TeamID = ? AND EventID = ?");
private static final Statement byEvent = new Statement("SELECT * FROM TeamTeilnahme WHERE EventID = ?");
private static final Statement byTeam = new Statement("SELECT * FROM TeamTeilnahme WHERE TeamID = ?");
public static void teilnehmen(int teamID, int eventID){
SQL.update("INSERT INTO TeamTeilnahme (TeamID, EventID) VALUES (?, ?)", teamID, eventID);
insert.update(teamID, eventID);
}
public static void notTeilnehmen(int teamID, int eventID){
SQL.update("DELETE FROM TeamTeilnahme WHERE TeamID = ? AND EventID = ?", teamID, eventID);
delete.update(teamID, eventID);
}
public static boolean nimmtTeil(int teamID, int eventID){
ResultSet rs = SQL.select("SELECT * FROM TeamTeilnahme WHERE TeamID = ? AND EventID = ?", teamID, eventID);
try{
return rs.next();
}catch (SQLException e){
BungeeCore.log("Failed to load TeamTeilnahme", e);
throw new SecurityException();
}
return byEventTeam.select(ResultSet::next, teamID, eventID);
}
public static Set<Team> getTeams(int eventID){
Set<Team> teams = new HashSet<>();
ResultSet rs = SQL.select("SELECT * FROM TeamTeilnahme WHERE EventID = ?", eventID);
try{
return byEvent.select(rs -> {
Set<Team> teams = new HashSet<>();
while(rs.next())
teams.add(Team.get(rs.getInt("TeamID")));
}catch (SQLException e){
BungeeCore.log("Failed to load TeamTeilnahmen", e);
}
return teams;
return teams;
}, eventID);
}
public static Set<Event> getEvents(int teamID){
Set<Event> events = new HashSet<>();
ResultSet rs = SQL.select("SELECT * FROM TeamTeilnahme WHERE TeamID = ?", teamID);
try{
return byTeam.select(rs -> {
Set<Event> events = new HashSet<>();
while(rs.next())
events.add(Event.get(rs.getInt("EventID")));
}catch (SQLException e){
BungeeCore.log("Failed to load TeamTeilnahmen", e);
}
return events;
return events;
}, teamID);
}
}