Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
9 changes: 9 additions & 0 deletions src/main/java/ti4/helpers/ButtonHelperAbilities.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -2548,6 +2549,7 @@ public static void resolveFollowUpIndoctrinationQuestion(
ButtonHelper.resolveInfantryRemoval(p2, 1, tile);
opponent = p2.getRepresentationNoPing();
colour = p2.getColor();
indoctrinatedPlayer = p2;
break;
}
}
Expand Down Expand Up @@ -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(),
Expand Down
36 changes: 29 additions & 7 deletions src/main/java/ti4/helpers/ButtonHelperCommanders.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<Player> 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_")
Expand Down Expand Up @@ -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_")
Expand Down
21 changes: 21 additions & 0 deletions src/main/java/ti4/helpers/ButtonHelperFactionSpecific.java
Original file line number Diff line number Diff line change
Expand Up @@ -3044,13 +3044,25 @@ 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<Player> 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<Button> options = ButtonHelper.getExhaustButtonsWithTG(game, player, "res");
MessageHelper.sendMessageToChannel(
event.getMessageChannel(),
player.getRepresentationNoPing() + " replaced 1 of their infantry with 1 " + unit + " on "
+ Helper.getPlanetRepresentation(planet, game) + " using the mech's DEPLOY ability.");
for (Player p2 : playersToNotify) {
MessageHelper.sendPrivateMessageToPlayer(
p2,
game,
player.getFactionEmoji() + " replaced 1 infantry with 1 " + unit + " on "
+ Helper.getPlanetRepresentation(planet, game) + " using the mech's DEPLOY ability.");
}
options.add(Buttons.red("deleteButtons", "Done Exhausting Planets"));
MessageHelper.sendMessageToChannelWithButtons(
event.getMessageChannel(),
Expand Down Expand Up @@ -3699,13 +3711,15 @@ public static void resolveGreyfire(Player player, Game game, String buttonID, Bu
Tile tile = game.getTileFromPlanet(planet);
AddUnitService.addUnits(event, tile, game, player.getColor(), "1 " + unit + " " + planet);
String opponent = "their opponent's";
Player greyfireTarget = null;
for (Player p2 : game.getRealPlayersNNeutral()) {
if (p2 == player) {
continue;
}
if (FoWHelper.playerHasInfantryOnPlanet(p2, tile, planet)) {
RemoveUnitService.removeUnits(event, tile, game, p2.getColor(), "1 infantry " + planet);
opponent = p2.getRepresentationNoPing();
greyfireTarget = p2;
break;
}
}
Expand All @@ -3720,6 +3734,13 @@ public static void resolveGreyfire(Player player, Game game, String buttonID, Bu
player.getRepresentationNoPing() + " replaced 1 of " + opponent + " infantry with 1 " + unit
+ " on " + Helper.getPlanetRepresentation(planet, game) + " using _Greyfire Mutagen_.");
}
if (game.isFowMode() && greyfireTarget != null) {
MessageHelper.sendPrivateMessageToPlayer(
greyfireTarget,
game,
player.getFactionEmoji() + " replaced 1 of your infantry with 1 " + unit + " on "
+ Helper.getPlanetRepresentation(planet, game) + " using _Greyfire Mutagen_.");
}
event.getMessage().delete().queue(Consumers.nop(), BotLogger::catchRestError);
}

Expand Down
25 changes: 19 additions & 6 deletions src/main/java/ti4/helpers/TransactionHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,16 @@

public final class TransactionHelper {

public static MessageChannel getTradeNotificationChannel(Player player, Game game) {
if (game.isFowMode()) {
MessageChannel cardsInfoThread = player.getCardsInfoThread();
if (cardsInfoThread != null) {
return cardsInfoThread;
}
}
return player.getCorrectChannel();
}

private static void acceptTransactionOffer(Player p1, Player p2, Game game, ButtonInteractionEvent event) {
List<String> transactionItems = p1.getTransactionItemsWithPlayer(p2);
List<Player> players = new ArrayList<>();
Expand Down Expand Up @@ -1680,8 +1690,10 @@ private static void resolveSpecificTransButtonPress(
String msg = p1.getRepresentation() + " sent "
+ (RandomHelper.isOneInX(20) ? "||a secret objective||" : "a secret objective") + " to "
+ p2.getRepresentation() + ".";
MessageHelper.sendMessageToChannel(p1.getCorrectChannel(), msg);
if (game.isFowMode()) MessageHelper.sendMessageToChannel(p2.getCorrectChannel(), msg);
MessageHelper.sendMessageToChannel(getTradeNotificationChannel(p1, game), msg);
if (game.isFowMode()) {
MessageHelper.sendMessageToChannel(getTradeNotificationChannel(p2, game), msg);
}
}
case "Frags" -> {
String fragType = amountToTrans.substring(0, 3).toUpperCase();
Expand All @@ -1700,7 +1712,7 @@ private static void resolveSpecificTransButtonPress(
case "Technology" -> {
p2.addTech(amountToTrans);
MessageHelper.sendMessageToChannel(
p2.getCorrectChannel(),
getTradeNotificationChannel(p2, game),
p2.getRepresentation() + ", you have received the technology _" + Mapper.getTech(amountToTrans)
+ "_ from a transaction.");
}
Expand All @@ -1715,7 +1727,8 @@ private static void resolveSpecificTransButtonPress(
if (game.isFowMode()) {
if (!message2.isEmpty()) {
MessageHelper.sendMessageToChannel(p1.getCardsInfoThread(), message2);
MessageHelper.sendMessageToChannel(p2.getPrivateChannel(), "**🤝 Transaction:** " + message2);
MessageHelper.sendMessageToChannel(
getTradeNotificationChannel(p2, game), "**🤝 Transaction:** " + message2);
}
} else {
TextChannel channel = game.getMainGameChannel();
Expand Down Expand Up @@ -1977,9 +1990,9 @@ public static void returnPNInPlayArea(ButtonInteractionEvent event, Player p1, S
String message2 = p1.getRepresentation() + " returned _"
+ Mapper.getPromissoryNote(id).getName() + "_ from their play area to " + p2.getRepresentation()
+ ".";
MessageHelper.sendMessageToChannel(p2.getCorrectChannel(), message2);
MessageHelper.sendMessageToChannel(getTradeNotificationChannel(p2, game), message2);
if (game.isFowMode()) {
MessageHelper.sendMessageToChannel(p1.getCorrectChannel(), message2);
MessageHelper.sendMessageToChannel(getTradeNotificationChannel(p1, game), message2);
}
}
ButtonHelper.deleteMessage(event);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import ti4.helpers.FoWHelper;
import ti4.helpers.Helper;
import ti4.helpers.PromissoryNoteHelper;
import ti4.helpers.TransactionHelper;
import ti4.image.Mapper;
import ti4.message.MessageHelper;
import ti4.model.PromissoryNoteModel;
Expand Down Expand Up @@ -101,10 +102,10 @@ private static void reportSentProm(
} else {
reportMsg = String.format(reportMsgFmt, "a promissory note to the hand");
}
MessageHelper.sendMessageToChannel(receiver.getCorrectChannel(), reportMsg);
MessageHelper.sendMessageToChannel(TransactionHelper.getTradeNotificationChannel(receiver, game), reportMsg);
if (game.isFowMode()) {
MessageHelper.sendMessageToChannel(
sender.getCorrectChannel(),
TransactionHelper.getTradeNotificationChannel(sender, game),
reportMsg.replace(receiver.getRepresentation(), receiver.getColorIfCanSeeStats(sender)));
String extra = null;
if (model.getAlias().endsWith("_sftt")) extra = "Scores changed.";
Expand Down Expand Up @@ -142,9 +143,9 @@ private static boolean promissoryShouldBeReturnedFromPlayArea(
private static void reportReturnedProm(Game game, Player sender, Player receiver, PromissoryNoteModel model) {
String reportMsg = sender.getRepresentation() + " returned " + model.getNameRepresentation() + " to "
+ receiver.getRepresentation() + ".";
MessageHelper.sendMessageToChannel(receiver.getCorrectChannel(), reportMsg);
MessageHelper.sendMessageToChannel(TransactionHelper.getTradeNotificationChannel(receiver, game), reportMsg);
if (game.isFowMode()) {
MessageHelper.sendMessageToChannel(sender.getCorrectChannel(), reportMsg);
MessageHelper.sendMessageToChannel(TransactionHelper.getTradeNotificationChannel(sender, game), reportMsg);
String extra = null;
if (model.getAlias().endsWith("_sftt")) extra = "Scores changed.";
FoWHelper.pingPlayersTransaction(game, null, sender, receiver, CardEmojis.PN + model.getName(), extra);
Expand Down
Loading