diff --git a/src/de/steamwar/bungeecore/bot/SteamwarDiscordBot.java b/src/de/steamwar/bungeecore/bot/SteamwarDiscordBot.java index 03dceb9a..295db915 100644 --- a/src/de/steamwar/bungeecore/bot/SteamwarDiscordBot.java +++ b/src/de/steamwar/bungeecore/bot/SteamwarDiscordBot.java @@ -22,20 +22,16 @@ package de.steamwar.bungeecore.bot; import de.steamwar.bungeecore.BungeeCore; import de.steamwar.bungeecore.bot.config.SteamwarDiscordBotConfig; import de.steamwar.bungeecore.bot.events.EventManager; -import de.steamwar.bungeecore.bot.listeners.AnnouncementListener; -import de.steamwar.bungeecore.bot.listeners.DiscordAuthListener; -import de.steamwar.bungeecore.bot.listeners.DiscordTicketListener; -import de.steamwar.bungeecore.bot.listeners.RolesInteractionButtonListener; -import de.steamwar.bungeecore.bot.util.DiscordTicketMessage; +import de.steamwar.bungeecore.bot.listeners.*; import de.steamwar.bungeecore.bot.util.DiscordRolesMessage; import de.steamwar.bungeecore.bot.util.DiscordRulesMessage; +import de.steamwar.bungeecore.bot.util.DiscordTicketMessage; import de.steamwar.bungeecore.sql.Event; import lombok.Getter; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDABuilder; import net.dv8tion.jda.api.OnlineStatus; import net.dv8tion.jda.api.entities.Activity; -import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.hooks.ListenerAdapter; import net.dv8tion.jda.api.utils.MemberCachePolicy; import net.md_5.bungee.api.ProxyServer; @@ -54,6 +50,12 @@ public class SteamwarDiscordBot { @Getter private AnnouncementListener announcementListener; + @Getter + private IngameChatListener ingameChatListener; + + @Getter + private ServerTeamChatListener serverTeamChatListener; + @Getter private final JDA jda; @@ -86,6 +88,8 @@ public class SteamwarDiscordBot { new DiscordTicketListener(); new DiscordAuthListener(); announcementListener = new AnnouncementListener(); + ingameChatListener = new IngameChatListener(); + serverTeamChatListener = new ServerTeamChatListener(); } private int index = 0; diff --git a/src/de/steamwar/bungeecore/bot/config/SteamwarDiscordBotConfig.java b/src/de/steamwar/bungeecore/bot/config/SteamwarDiscordBotConfig.java index 14f1efbd..cefedccf 100644 --- a/src/de/steamwar/bungeecore/bot/config/SteamwarDiscordBotConfig.java +++ b/src/de/steamwar/bungeecore/bot/config/SteamwarDiscordBotConfig.java @@ -33,6 +33,8 @@ public class SteamwarDiscordBotConfig { public static String GUILD; public static String ANNOUNCEMENTS_CHANNEL; public static String EVENTS_CHANNEL; + public static String INGAME_CHANNEL; + public static String SERVER_TEAM_CHANNEL; public static String ROLES_CHANNEL; public static String ROLES_BASE_MESSAGE; public static String ROLES_ADDED; @@ -55,6 +57,8 @@ public class SteamwarDiscordBotConfig { GUILD = config.getString("guild"); ANNOUNCEMENTS_CHANNEL = config.getString("announcements-channel"); EVENTS_CHANNEL = config.getString("events-channel"); + INGAME_CHANNEL = config.getString("ingame-channel"); + SERVER_TEAM_CHANNEL = config.getString("server-team-channel"); Configuration rolesSection = config.getSection("roles-claim"); ROLES_CHANNEL = rolesSection.getString("channel"); ROLES_BASE_MESSAGE = rolesSection.getString("base"); diff --git a/src/de/steamwar/bungeecore/bot/listeners/IngameChatListener.java b/src/de/steamwar/bungeecore/bot/listeners/IngameChatListener.java new file mode 100644 index 00000000..ae392133 --- /dev/null +++ b/src/de/steamwar/bungeecore/bot/listeners/IngameChatListener.java @@ -0,0 +1,58 @@ +/* + * 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 . + */ + +package de.steamwar.bungeecore.bot.listeners; + +import de.steamwar.bungeecore.bot.SteamwarDiscordBot; +import de.steamwar.bungeecore.bot.config.SteamwarDiscordBotConfig; +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; +import net.dv8tion.jda.api.entities.TextChannel; +import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; +import org.jetbrains.annotations.NotNull; + +public class IngameChatListener extends BasicDiscordListener { + + @Override + public void onGuildMessageReceived(@NotNull GuildMessageReceivedEvent event) { + if (!event.getChannel().getId().equals(SteamwarDiscordBotConfig.INGAME_CHANNEL)) { + return; + } + if (event.getAuthor().isBot()) { + return; + } + Member member = event.getMember(); + SteamwarUser steamwarUser = SteamwarUser.get(member.getIdLong()); + if (steamwarUser == null) { + event.getMessage().delete().complete(); + } else { + ChatListener.discordChat(steamwarUser, event.getMessage().getContentRaw()); + } + } + + public void send(String message) { + TextChannel textChannel = SteamwarDiscordBot.instance().getJda().getGuildById(SteamwarDiscordBotConfig.GUILD).getTextChannelById(SteamwarDiscordBotConfig.INGAME_CHANNEL); + assert textChannel != null; + MessageBuilder messageBuilder = new MessageBuilder(); + messageBuilder.append(message.replace("&", "")); + textChannel.sendMessage(messageBuilder.build()).complete(); + } +} diff --git a/src/de/steamwar/bungeecore/bot/listeners/ServerTeamChatListener.java b/src/de/steamwar/bungeecore/bot/listeners/ServerTeamChatListener.java new file mode 100644 index 00000000..432c2872 --- /dev/null +++ b/src/de/steamwar/bungeecore/bot/listeners/ServerTeamChatListener.java @@ -0,0 +1,59 @@ +/* + * 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 . + */ + +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; +import net.dv8tion.jda.api.entities.TextChannel; +import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; +import org.jetbrains.annotations.NotNull; + +public class ServerTeamChatListener extends BasicDiscordListener { + + @Override + public void onGuildMessageReceived(@NotNull GuildMessageReceivedEvent event) { + if (!event.getChannel().getId().equals(SteamwarDiscordBotConfig.SERVER_TEAM_CHANNEL)) { + return; + } + if (event.getAuthor().isBot()) { + return; + } + Member member = event.getMember(); + SteamwarUser steamwarUser = SteamwarUser.get(member.getIdLong()); + if (steamwarUser == null) { + event.getMessage().delete().complete(); + } else { + ServerTeamchatCommand.sendToTeam(event.getMessage().getContentRaw(), steamwarUser); + } + } + + public void send(String message) { + TextChannel textChannel = SteamwarDiscordBot.instance().getJda().getGuildById(SteamwarDiscordBotConfig.GUILD).getTextChannelById(SteamwarDiscordBotConfig.SERVER_TEAM_CHANNEL); + assert textChannel != null; + MessageBuilder messageBuilder = new MessageBuilder(); + messageBuilder.append(message.replace("&", "")); + textChannel.sendMessage(messageBuilder.build()).complete(); + } +} diff --git a/src/de/steamwar/bungeecore/commands/ServerTeamchatCommand.java b/src/de/steamwar/bungeecore/commands/ServerTeamchatCommand.java index 0aca552f..b9b0ab1a 100644 --- a/src/de/steamwar/bungeecore/commands/ServerTeamchatCommand.java +++ b/src/de/steamwar/bungeecore/commands/ServerTeamchatCommand.java @@ -20,7 +20,9 @@ package de.steamwar.bungeecore.commands; import de.steamwar.bungeecore.Message; +import de.steamwar.bungeecore.bot.SteamwarDiscordBot; import de.steamwar.bungeecore.listeners.ChatListener; +import de.steamwar.bungeecore.sql.SteamwarUser; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; @@ -49,10 +51,20 @@ public class ServerTeamchatCommand extends BasicCommand { String msg = msgBuilder.toString(); msg = ChatColor.translateAlternateColorCodes('&', msg); + SteamwarDiscordBot.instance().getServerTeamChatListener().send(" " + (player.getName() + "» " + msg).replaceAll("§[a-f0-9r]", "")); sendToTeam(msg, player); } } + public static void sendToTeam(String message, SteamwarUser sender){ + for (ProxiedPlayer target : ProxyServer.getInstance().getPlayers()){ + if ((target.hasPermission("bungeecore.teamchat")) + && target.getChatMode() == ProxiedPlayer.ChatMode.SHOWN){ + Message.sendPrefixless("STC_FORMAT", target, sender.getUserName(), ChatListener.parseAtMessage(message, "§r", target)); + } + } + } + public static void sendToTeam(String message, ProxiedPlayer sender){ for (ProxiedPlayer target : ProxyServer.getInstance().getPlayers()){ if ((target.hasPermission("bungeecore.teamchat")) diff --git a/src/de/steamwar/bungeecore/listeners/ChatListener.java b/src/de/steamwar/bungeecore/listeners/ChatListener.java index a73ea6d5..d7c96ca4 100644 --- a/src/de/steamwar/bungeecore/listeners/ChatListener.java +++ b/src/de/steamwar/bungeecore/listeners/ChatListener.java @@ -20,6 +20,8 @@ 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; @@ -170,6 +172,27 @@ public class ChatListener extends BasicListener { } } + public static void discordChat(SteamwarUser user, String message){ + String name = user.getUserGroup().getColorCode() + user.getUserGroup().name() + " " + user.getUserName() + "§r"; + String chatcolor = user.getUserGroup().getChatColorCode(); + + if(user.getUserGroup() != UserGroup.Member || user.getTeam() == 12 || user.getTeam() == 285 || user.getTeam() == 54) + message = ChatColor.translateAlternateColorCodes('&', message); + + String msg = name + "§7»" + chatcolor + " " + message; + if(user.getTeam() != 0){ + Team team = Team.get(user.getTeam()); + msg = "§" + team.getTeamColor() + team.getTeamKuerzel() + " §r" + msg; + } + + for(ProxiedPlayer target : ProxyServer.getInstance().getPlayers()){ + Subserver targetServer = Subserver.getSubserver(target); + if(!(targetServer == null || targetServer.getType() != Servertype.ARENA || targetServer.getServer() != target.getServer().getInfo())) continue; + + BungeeCore.send(target, ChatMessageType.CHAT, parseAtMessage(msg, chatcolor, target)); + } + } + private void publicChat(SteamwarUser user, ProxiedPlayer sender, String message){ String name = sender.getDisplayName(); String chatcolor = user.getUserGroup().getChatColorCode(); @@ -183,6 +206,7 @@ public class ChatListener extends BasicListener { msg = "§" + team.getTeamColor() + team.getTeamKuerzel() + " §r" + msg; } + SteamwarDiscordBot.instance().getIngameChatListener().send(" " + msg.replaceAll("§[a-f0-9r]", "")); for(ProxiedPlayer target : ProxyServer.getInstance().getPlayers()){ Subserver targetServer = Subserver.getSubserver(target); if(!(targetServer == null || targetServer.getType() != Servertype.ARENA || targetServer.getServer() != target.getServer().getInfo())) continue;