Skip to content
Merged
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
47 changes: 47 additions & 0 deletions MixItUp.Base/Model/Currency/InventoryModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,30 @@ public InventoryModel()
[JsonIgnore]
public string UserUniqueItemsTotalSpecialIdentifier { get { return string.Format("{0}uniqueitemstotal", this.UserAmountSpecialIdentifierHeader); } }

[JsonIgnore]
public string TopItemRegexSpecialIdentifierHeader { get { return string.Format("{0}\\d+{1}", SpecialIdentifierStringBuilder.TopSpecialIdentifierHeader, this.SpecialIdentifier); } }

[JsonIgnore]
public string TopItemSpecialIdentifierHeader { get { return string.Format("{0}{1}", SpecialIdentifierStringBuilder.TopSpecialIdentifierHeader, this.SpecialIdentifier); } }

[JsonIgnore]
public string TopTotalRegexSpecialIdentifier { get { return string.Format("{0}\\d+{1}total", SpecialIdentifierStringBuilder.TopSpecialIdentifierHeader, this.SpecialIdentifier); } }

[JsonIgnore]
public string TopTotalSpecialIdentifier { get { return string.Format("{0}{1}total", SpecialIdentifierStringBuilder.TopSpecialIdentifierHeader, this.SpecialIdentifier); } }

[JsonIgnore]
public string TopTotalUserSpecialIdentifier { get { return string.Format("{0}{1}", this.TopTotalSpecialIdentifier, SpecialIdentifierStringBuilder.UserSpecialIdentifierHeader); } }

[JsonIgnore]
public string TopUniqueRegexSpecialIdentifier { get { return string.Format("{0}\\d+{1}unique", SpecialIdentifierStringBuilder.TopSpecialIdentifierHeader, this.SpecialIdentifier); } }

[JsonIgnore]
public string TopUniqueSpecialIdentifier { get { return string.Format("{0}{1}unique", SpecialIdentifierStringBuilder.TopSpecialIdentifierHeader, this.SpecialIdentifier); } }

[JsonIgnore]
public string TopUniqueUserSpecialIdentifier { get { return string.Format("{0}{1}", this.TopUniqueSpecialIdentifier, SpecialIdentifierStringBuilder.UserSpecialIdentifierHeader); } }

[JsonIgnore]
public CommandModelBase ItemsBoughtCommand
{
Expand Down Expand Up @@ -335,6 +359,29 @@ public Dictionary<Guid, int> GetAmounts(UserV2ViewModel user)
return amounts;
}

public int GetTotalAmount(UserV2Model user)
{
int total = 0;
foreach (InventoryItemModel item in this.Items.Values)
{
total += this.GetAmount(user, item);
}
return total;
}

public int GetUniqueItemCount(UserV2Model user)
{
int count = 0;
foreach (InventoryItemModel item in this.Items.Values)
{
if (this.GetAmount(user, item) > 0)
{
count++;
}
}
return count;
}

public bool HasAmount(UserV2ViewModel user, Guid itemID, int amount)
{
if (this.ItemExists(itemID))
Expand Down
123 changes: 123 additions & 0 deletions MixItUp.Base/Util/SpecialIdentifierStringBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -389,6 +389,129 @@ await this.ReplaceNumberBasedRegexSpecialIdentifier(currency.TopRegexSpecialIden
await this.HandleUserSpecialIdentifiers(topUser, currency.TopSpecialIdentifier);
}
}

foreach (InventoryModel inventory in ChannelSession.Settings.Inventory.Values)
{
if (this.ContainsRegexSpecialIdentifier(inventory.TopTotalRegexSpecialIdentifier))
{
await this.ReplaceNumberBasedRegexSpecialIdentifier(inventory.TopTotalRegexSpecialIdentifier, async (total) =>
{
IEnumerable<UserV2Model> applicableUsers = await SpecialIdentifierStringBuilder.GetAllNonExemptUsers();
List<string> inventoryUserList = new List<string>();
int userPosition = 1;
foreach (UserV2Model userData in applicableUsers.OrderByDescending(u => inventory.GetTotalAmount(u)).Take(total))
{
UserV2ViewModel userViewModel = new UserV2ViewModel(userData);
inventoryUserList.Add($"#{userPosition}) {userViewModel.Username} - {inventory.GetTotalAmount(userData).ToNumberDisplayString()}");
userPosition++;
}

string result = MixItUp.Base.Resources.NoUsersFound;
if (inventoryUserList.Count > 0)
{
result = string.Join(", ", inventoryUserList);
}
return result;
});
}

if (this.ContainsSpecialIdentifier(inventory.TopTotalUserSpecialIdentifier))
{
IEnumerable<UserV2Model> applicableUsers = await SpecialIdentifierStringBuilder.GetAllNonExemptUsers();
UserV2Model topUserData = applicableUsers.Top(u => inventory.GetTotalAmount(u));
if (topUserData != null)
{
UserV2ViewModel topUser = ServiceManager.Get<UserService>().GetActiveUserByID(parameters.Platform, topUserData.ID);
if (topUser == null)
{
topUser = new UserV2ViewModel(topUserData);
}
await this.HandleUserSpecialIdentifiers(topUser, inventory.TopTotalSpecialIdentifier);
}
}

if (this.ContainsRegexSpecialIdentifier(inventory.TopUniqueRegexSpecialIdentifier))
{
await this.ReplaceNumberBasedRegexSpecialIdentifier(inventory.TopUniqueRegexSpecialIdentifier, async (total) =>
{
IEnumerable<UserV2Model> applicableUsers = await SpecialIdentifierStringBuilder.GetAllNonExemptUsers();
List<string> inventoryUserList = new List<string>();
int userPosition = 1;
foreach (UserV2Model userData in applicableUsers.OrderByDescending(u => inventory.GetUniqueItemCount(u)).Take(total))
{
UserV2ViewModel userViewModel = new UserV2ViewModel(userData);
inventoryUserList.Add($"#{userPosition}) {userViewModel.Username} - {inventory.GetUniqueItemCount(userData).ToNumberDisplayString()}");
userPosition++;
}

string result = MixItUp.Base.Resources.NoUsersFound;
if (inventoryUserList.Count > 0)
{
result = string.Join(", ", inventoryUserList);
}
return result;
});
}

if (this.ContainsSpecialIdentifier(inventory.TopUniqueUserSpecialIdentifier))
{
IEnumerable<UserV2Model> applicableUsers = await SpecialIdentifierStringBuilder.GetAllNonExemptUsers();
UserV2Model topUserData = applicableUsers.Top(u => inventory.GetUniqueItemCount(u));
if (topUserData != null)
{
UserV2ViewModel topUser = ServiceManager.Get<UserService>().GetActiveUserByID(parameters.Platform, topUserData.ID);
if (topUser == null)
{
topUser = new UserV2ViewModel(topUserData);
}
await this.HandleUserSpecialIdentifiers(topUser, inventory.TopUniqueSpecialIdentifier);
}
}

foreach (InventoryItemModel item in inventory.Items.Values)
{
string itemTopRegex = string.Format("{0}\\d+{1}{2}", SpecialIdentifierStringBuilder.TopSpecialIdentifierHeader, inventory.SpecialIdentifier, item.SpecialIdentifier);
if (this.ContainsRegexSpecialIdentifier(itemTopRegex))
{
await this.ReplaceNumberBasedRegexSpecialIdentifier(itemTopRegex, async (total) =>
{
IEnumerable<UserV2Model> applicableUsers = await SpecialIdentifierStringBuilder.GetAllNonExemptUsers();
List<string> itemUserList = new List<string>();
int userPosition = 1;
foreach (UserV2Model userData in applicableUsers.OrderByDescending(u => inventory.GetAmount(u, item)).Take(total))
{
UserV2ViewModel userViewModel = new UserV2ViewModel(userData);
itemUserList.Add($"#{userPosition}) {userViewModel.Username} - {inventory.GetAmount(userData, item).ToNumberDisplayString()}");
userPosition++;
}

string result = MixItUp.Base.Resources.NoUsersFound;
if (itemUserList.Count > 0)
{
result = string.Join(", ", itemUserList);
}
return result;
});
}

string itemTopUser = string.Format("{0}{1}{2}{3}", SpecialIdentifierStringBuilder.TopSpecialIdentifierHeader, inventory.SpecialIdentifier, item.SpecialIdentifier, SpecialIdentifierStringBuilder.UserSpecialIdentifierHeader);
if (this.ContainsSpecialIdentifier(itemTopUser))
{
IEnumerable<UserV2Model> applicableUsers = await SpecialIdentifierStringBuilder.GetAllNonExemptUsers();
UserV2Model topUserData = applicableUsers.Top(u => inventory.GetAmount(u, item));
if (topUserData != null)
{
UserV2ViewModel topUser = ServiceManager.Get<UserService>().GetActiveUserByID(parameters.Platform, topUserData.ID);
if (topUser == null)
{
topUser = new UserV2ViewModel(topUserData);
}
string itemTopPrefix = string.Format("{0}{1}{2}", SpecialIdentifierStringBuilder.TopSpecialIdentifierHeader, inventory.SpecialIdentifier, item.SpecialIdentifier);
await this.HandleUserSpecialIdentifiers(topUser, itemTopPrefix);
}
}
}
}
}

foreach (CurrencyModel currency in ChannelSession.Settings.Currency.Values)
Expand Down