Skip to content

Commit

Permalink
Apply @Secludely 's batch trade order fix.
Browse files Browse the repository at this point in the history
  • Loading branch information
bdawg1989 committed Oct 27, 2024
1 parent 8922ec2 commit 48a14f3
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 24 deletions.
31 changes: 19 additions & 12 deletions SysBot.Pokemon.Discord/Commands/Bots/TradeModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -796,6 +796,7 @@ public async Task BatchTradeAsync([Summary("List of Showdown Sets separated by '
_ = ReplyAndDeleteAsync("You already have an existing trade in the queue. Please wait until it is processed.", 2);
return;
}

content = ReusableActions.StripCodeBlock(content);
var trades = TradeModule<T>.ParseBatchTradeContent(content);
var maxTradesAllowed = SysCord<T>.Runner.Config.Trade.TradeConfiguration.MaxPkmsPerTrade;
Expand All @@ -808,22 +809,28 @@ public async Task BatchTradeAsync([Summary("List of Showdown Sets separated by '
return;
}

// Check if the number of trades exceeds the limit
if (trades.Count > maxTradesAllowed)
{
_ = ReplyAndDeleteAsync($"You can only process up to {maxTradesAllowed} trades at a time. Please reduce the number of trades in your batch.", 2, Context.Message);
_ = DeleteMessagesAfterDelayAsync(null, Context.Message, 2);
return;
}

var batchTradeCode = Info.GetRandomTradeCode(userID);
int batchTradeNumber = 1;

foreach (var trade in trades)
// Execute the trades in order of request, with delay
for (int i = 0; i < trades.Count; i++)
{
await ProcessSingleTradeAsync(trade, batchTradeCode, true, batchTradeNumber, trades.Count); // Pass the total number of trades here
batchTradeNumber++;
var trade = trades[i];
int batchTradeNumber = i + 1;

// Execute
await ProcessSingleTradeAsync(trade, batchTradeCode, true, batchTradeNumber, trades.Count);

// Log to confirm trade order and pause
Console.WriteLine($"Completed batch trade #{batchTradeNumber}: {trade}");

// Add a delay of 3/4 of a second before processing the next batch trade number
if (i < trades.Count - 1)
{
await Task.Delay(750); // 750 milliseconds = 0.75 seconds (Delay to process order)
}
}

// Final cleanup
if (Context.Message is IUserMessage userMessage)
{
_ = DeleteMessagesAfterDelayAsync(userMessage, null, 2);
Expand Down
16 changes: 4 additions & 12 deletions SysBot.Pokemon/Queues/TradeQueueInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -204,20 +204,12 @@ public QueueResultAdd AddToTradeQueue(TradeEntry<T> trade, ulong userID, bool al
if (Hub.Config.Legality.ResetHOMETracker && trade.Trade.TradeData is IHomeTrack t)
t.Tracker = 0;

var basePriority = sudo ? PokeTradePriorities.Tier1 :
trade.Trade.IsFavored ? PokeTradePriorities.Tier2 :
PokeTradePriorities.TierFree;

int adjustedPriority = (int)basePriority;

if (trade.Trade.Type == PokeTradeType.Batch)
{
adjustedPriority = (int)(basePriority * 1000 - trade.Trade.BatchTradeNumber);
}

var priority = sudo ? PokeTradePriorities.Tier1 :
trade.Trade.IsFavored ? PokeTradePriorities.Tier2 :
PokeTradePriorities.TierFree;
var queue = Hub.Queues.GetQueue(trade.Type);

queue.Enqueue(trade.Trade, (uint)adjustedPriority);
queue.Enqueue(trade.Trade, priority);
UsersInQueue.Add(trade);

trade.Trade.Notifier.OnFinish = _ => Remove(trade);
Expand Down

0 comments on commit 48a14f3

Please sign in to comment.