diff --git a/src/main/java/ti4/discord/interactions/commands/cardspn/SendPN.java b/src/main/java/ti4/discord/interactions/commands/cardspn/SendPN.java index afc041e5f4..53cbbf753c 100644 --- a/src/main/java/ti4/discord/interactions/commands/cardspn/SendPN.java +++ b/src/main/java/ti4/discord/interactions/commands/cardspn/SendPN.java @@ -12,6 +12,7 @@ import ti4.helpers.Constants; import ti4.helpers.FoWHelper; import ti4.helpers.PromissoryNoteHelper; +import ti4.helpers.TransactionHelper; import ti4.image.Mapper; import ti4.message.MessageHelper; import ti4.model.PromissoryNoteModel; @@ -132,8 +133,9 @@ public void execute(SlashCommandInteractionEvent event) { String message = player.getRepresentation() + " sent " + CardEmojis.PN + conditionalPNName + preposition + targetPlayer.getRepresentation() + "."; if (game.isFowMode()) { - MessageHelper.sendMessageToChannel(targetPlayer.getPrivateChannel(), message); - MessageHelper.sendMessageToChannel(player.getCorrectChannel(), "Promissory note sent."); + MessageHelper.sendMessageToChannel( + TransactionHelper.getTradeNotificationChannel(targetPlayer, game), message); + MessageHelper.sendMessageToChannel(TransactionHelper.getTradeNotificationChannel(player, game), message); } else { MessageHelper.sendMessageToChannel(player.getCorrectChannel(), message); } diff --git a/src/main/java/ti4/discord/interactions/commands/player/SendCommodities.java b/src/main/java/ti4/discord/interactions/commands/player/SendCommodities.java index 11f94ed862..5ab8d8e813 100644 --- a/src/main/java/ti4/discord/interactions/commands/player/SendCommodities.java +++ b/src/main/java/ti4/discord/interactions/commands/player/SendCommodities.java @@ -72,7 +72,7 @@ public void execute(SlashCommandInteractionEvent event) { String p2 = targetPlayer.getRepresentation(); String commString = sendCommodities + " commodit" + (sendCommodities == 1 ? "y" : "ies"); String message = p1 + " sent " + commString + " to " + p2 + "."; - MessageHelper.sendMessageToChannel(player.getCorrectChannel(), message); + MessageHelper.sendMessageToChannel(TransactionHelper.getTradeNotificationChannel(player, game), message); ButtonHelperFactionSpecific.resolveDarkPactCheck(game, player, targetPlayer, sendCommodities); ButtonHelperAbilities.pillageCheck(targetPlayer, game); ButtonHelperAbilities.pillageCheck(player, game); @@ -87,7 +87,8 @@ public void execute(SlashCommandInteractionEvent event) { } if (game.isFowMode()) { - MessageHelper.sendMessageToChannel(targetPlayer.getPrivateChannel(), message); + MessageHelper.sendMessageToChannel( + TransactionHelper.getTradeNotificationChannel(targetPlayer, game), message); // Add extra message for transaction visibility FoWHelper.pingPlayersTransaction(game, event, player, targetPlayer, commString, null); diff --git a/src/main/java/ti4/discord/interactions/commands/player/SendDebt.java b/src/main/java/ti4/discord/interactions/commands/player/SendDebt.java index 13523bf431..3e58aadeb0 100644 --- a/src/main/java/ti4/discord/interactions/commands/player/SendDebt.java +++ b/src/main/java/ti4/discord/interactions/commands/player/SendDebt.java @@ -9,6 +9,7 @@ import ti4.game.Game; import ti4.game.Player; import ti4.helpers.Constants; +import ti4.helpers.TransactionHelper; import ti4.message.MessageHelper; import ti4.service.leader.CommanderUnlockCheckService; import ti4.service.transaction.SendDebtService; @@ -52,9 +53,10 @@ public void execute(SlashCommandInteractionEvent event) { String debtMsg = sendingPlayer.getRepresentation() + " sent " + debtCountToSend + " debt token" + (debtCountToSend == 1 ? "" : "s") + " to " + receivingPlayer.getRepresentation() + ", for their \"" + pool + "\" pool."; - MessageHelper.sendMessageToChannel(sendingPlayer.getCorrectChannel(), debtMsg); + MessageHelper.sendMessageToChannel(TransactionHelper.getTradeNotificationChannel(sendingPlayer, game), debtMsg); if (game.isFowMode()) { - MessageHelper.sendMessageToChannel(receivingPlayer.getPrivateChannel(), debtMsg); + MessageHelper.sendMessageToChannel( + TransactionHelper.getTradeNotificationChannel(receivingPlayer, game), debtMsg); } } } diff --git a/src/main/java/ti4/discord/interactions/commands/player/SendTG.java b/src/main/java/ti4/discord/interactions/commands/player/SendTG.java index 9750b8df39..2420acd6e2 100644 --- a/src/main/java/ti4/discord/interactions/commands/player/SendTG.java +++ b/src/main/java/ti4/discord/interactions/commands/player/SendTG.java @@ -75,7 +75,8 @@ public void execute(SlashCommandInteractionEvent event) { } if (game.isFowMode()) { - MessageHelper.sendMessageToChannel(targetPlayer.getPrivateChannel(), message); + MessageHelper.sendMessageToChannel( + TransactionHelper.getTradeNotificationChannel(targetPlayer, game), message); // Add extra message for transaction visibility FoWHelper.pingPlayersTransaction(game, event, player, targetPlayer, tgString, null); diff --git a/src/main/java/ti4/helpers/ButtonHelperAbilities.java b/src/main/java/ti4/helpers/ButtonHelperAbilities.java index 1df24b3dfa..cba4238b7a 100644 --- a/src/main/java/ti4/helpers/ButtonHelperAbilities.java +++ b/src/main/java/ti4/helpers/ButtonHelperAbilities.java @@ -2536,6 +2536,7 @@ public static void resolveFollowUpIndoctrinationQuestion( AddUnitService.addUnits(event, tile, game, player.getColor(), "1 " + unit + " " + planet); String opponent = "their opponent's"; String colour = ""; + Player indoctrinatedPlayer = null; for (Player p2 : game.getPlayers().values()) { if (p2.getColor() == null || p2 == player @@ -2548,6 +2549,7 @@ public static void resolveFollowUpIndoctrinationQuestion( ButtonHelper.resolveInfantryRemoval(p2, 1, tile); opponent = p2.getRepresentationNoPing(); colour = p2.getColor(); + indoctrinatedPlayer = p2; break; } } @@ -2611,6 +2613,13 @@ public static void resolveFollowUpIndoctrinationQuestion( player.getRepresentationNoPing() + " replaced 1 of " + opponent + " infantry with 1 " + unit + " on " + Helper.getPlanetRepresentation(planet, game) + " using **Indoctrination**."); } + if (game.isFowMode() && indoctrinatedPlayer != null) { + MessageHelper.sendPrivateMessageToPlayer( + indoctrinatedPlayer, + game, + player.getFactionEmoji() + " replaced 1 of your infantry with 1 " + unit + " on " + + Helper.getPlanetRepresentation(planet, game) + " using **Indoctrination**."); + } options.add(Buttons.red("deleteButtons", "Done Exhausting Planets")); MessageHelper.sendMessageToChannelWithButtons( event.getMessageChannel(), diff --git a/src/main/java/ti4/helpers/ButtonHelperCommanders.java b/src/main/java/ti4/helpers/ButtonHelperCommanders.java index 16a5eed5ac..9e327b6d15 100644 --- a/src/main/java/ti4/helpers/ButtonHelperCommanders.java +++ b/src/main/java/ti4/helpers/ButtonHelperCommanders.java @@ -869,11 +869,23 @@ public static void resolveSolCommander(Player player, Game game, String buttonID String planet = buttonID.split("_")[1]; ButtonHelper.deleteButtonAndDeleteMessageIfEmpty(event); Tile tile = game.getTileFromPlanet(planet); + List playersToNotify = game.isFowMode() + ? game.getRealPlayersExcludingThis(player).stream() + .filter(p2 -> FoWHelper.playerHasUnitsOnPlanet(p2, tile, planet)) + .toList() + : List.of(); AddUnitService.addUnits(event, tile, game, player.getColor(), "1 inf " + planet); MessageHelper.sendMessageToChannel( event.getMessageChannel(), player.getFactionEmoji() + " placed 1 infantry on " + Helper.getPlanetRepresentation(planet, game) + " using Claire Gibson, the Sol Commander."); + for (Player p2 : playersToNotify) { + MessageHelper.sendPrivateMessageToPlayer( + p2, + game, + player.getFactionEmoji() + " placed 1 infantry on " + Helper.getPlanetRepresentation(planet, game) + + " using Claire Gibson, the Sol Commander."); + } } @ButtonHandler("utilizeMykoBT_") @@ -901,22 +913,32 @@ public static void utilizePharadnCommander( Player player, Game game, String buttonID, ButtonInteractionEvent event) { String planet = buttonID.split("_")[1]; Tile tile = game.getTileFromPlanet(planet); + String playerFactionEmoji = player.getFactionEmoji(); + String planetRepresentation = Helper.getPlanetRepresentation(planet, game); + Player destroyedPlayer = null; for (Player p2 : game.getPlayers().values()) { - if (p2.getColor() == null - || p2 == player - || player.getAllianceMembers().contains(p2.getFaction())) { + boolean isAllianceMember = player.getAllianceMembers().contains(p2.getFaction()); + if (p2.getColor() == null || p2 == player || isAllianceMember) { continue; // fix indoctrinate vs neutral } - if (FoWHelper.playerHasInfantryOnPlanet(p2, tile, planet) - && !player.getAllianceMembers().contains(p2.getFaction())) { + if (FoWHelper.playerHasInfantryOnPlanet(p2, tile, planet)) { DestroyUnitService.destroyUnits(event, tile, game, p2.getColor(), "1 infantry " + planet, true); + destroyedPlayer = p2; break; } } MessageHelper.sendMessageToChannel( event.getMessageChannel(), - player.getFactionEmoji() + " destroyed 1 opposing infantry on " - + Helper.getPlanetRepresentation(planet, game) + " using the Avhkan, the Pharad’n commander."); + playerFactionEmoji + " destroyed 1 opposing infantry on " + planetRepresentation + + " using the Avhkan, the Pharad’n commander."); + if (game.isFowMode() && destroyedPlayer != null) { + MessageHelper.sendPrivateMessageToPlayer( + destroyedPlayer, + game, + playerFactionEmoji + " destroyed 1 of your infantry on " + + planetRepresentation + + " using the Avhkan, the Pharad’n commander."); + } } @ButtonHandler("yssarilcommander_") diff --git a/src/main/java/ti4/helpers/ButtonHelperFactionSpecific.java b/src/main/java/ti4/helpers/ButtonHelperFactionSpecific.java index 7091d7037c..5bb6dbfe91 100644 --- a/src/main/java/ti4/helpers/ButtonHelperFactionSpecific.java +++ b/src/main/java/ti4/helpers/ButtonHelperFactionSpecific.java @@ -3044,6 +3044,11 @@ public static void resolveLetnevMech(Player player, Game game, String buttonID, String planet = buttonID.split("_")[1]; String unit = buttonID.split("_")[2]; Tile tile = game.getTileFromPlanet(planet); + List playersToNotify = game.isFowMode() + ? game.getRealPlayersExcludingThis(player).stream() + .filter(p2 -> FoWHelper.playerHasUnitsOnPlanet(p2, tile, planet)) + .toList() + : List.of(); AddUnitService.addUnits(event, tile, game, player.getColor(), "1 " + unit + " " + planet); RemoveUnitService.removeUnits(event, tile, game, player.getColor(), "1 infantry " + planet); List