Skip to content

Commit

Permalink
add discord supporter overview
Browse files Browse the repository at this point in the history
  • Loading branch information
th0mk committed Jun 29, 2023
1 parent e5b772a commit dcd565c
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 2 deletions.
80 changes: 79 additions & 1 deletion src/FMBot.Bot/Builders/StaticBuilders.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,12 @@ namespace FMBot.Bot.Builders;
public class StaticBuilders
{
private readonly SupporterService _supporterService;
private readonly UserService _userService;

public StaticBuilders(SupporterService supporterService)
public StaticBuilders(SupporterService supporterService, UserService userService)
{
this._supporterService = supporterService;
this._userService = userService;
}

public static ResponseModel OutOfSync(
Expand Down Expand Up @@ -293,4 +295,80 @@ public async Task<ResponseModel> OpenCollectiveSupportersAsync(

return response;
}

public async Task<ResponseModel> DiscordSupportersAsync(
ContextModel context)
{
var response = new ResponseModel
{
ResponseType = ResponseType.Paginator,
};

var existingSupporters = await this._supporterService.GetAllSupporters();

var supporters = await this._supporterService.GetDiscordEntitlements();

var supporterLists = supporters.OrderByDescending(o => o.StartsAt).Chunk(10);

var description = new StringBuilder();

var pages = new List<PageBuilder>();
foreach (var supporterList in supporterLists)
{
var supporterString = new StringBuilder();
supporterString.Append(description.ToString());

foreach (var supporter in supporterList)
{
supporterString.Append($"**{supporter.DiscordUserId}** - <@{supporter.DiscordUserId}>");

var user = await this._userService.GetUserAsync(supporter.DiscordUserId);
if (user != null)
{
supporterString.Append($" - [{user.UserNameLastFM}]({Constants.LastFMUserUrl}{user.UserNameLastFM})");
}
else
{
supporterString.Append($" - No .fmbot user :(");
}

supporterString.AppendLine();

if (supporter.StartsAt.HasValue && supporter.EndsAt.HasValue)
{
var startsAt = DateTime.SpecifyKind(supporter.StartsAt.Value, DateTimeKind.Utc);
var startsAtValue = ((DateTimeOffset)startsAt).ToUnixTimeSeconds();

var endsAt = DateTime.SpecifyKind(supporter.EndsAt.Value, DateTimeKind.Utc);
var endsAtValue = ((DateTimeOffset)endsAt).ToUnixTimeSeconds();

supporterString.AppendLine($"Started at: <t:{endsAtValue}:D> - Ends at: <t:{startsAtValue}:D>");
}
else
{
supporterString.AppendLine($"No start or end date (unlimited test entitlement)");
}

supporterString.AppendLine();
}

pages.Add(new PageBuilder()
.WithDescription(supporterString.ToString())
.WithColor(DiscordConstants.InformationColorBlue)
.WithAuthor(response.EmbedAuthor)
.WithFooter($"Discord total: {supporters.Count} - db total: {existingSupporters.Count(c => c.SubscriptionType == SubscriptionType.Discord)}\n" +
$"Discord active: {supporters.Count(c => c.Active)} - db active {existingSupporters.Count(c => c.SubscriptionType == SubscriptionType.Discord && c.Expired != true)}")
.WithTitle(".fmbot Discord supporters overview"));
}

if (!pages.Any())
{
pages.Add(new PageBuilder()
.WithDescription("No pages, most likely an error while fetching supporters"));
}

response.StaticPaginator = StringService.BuildStaticPaginator(pages);

return response;
}
}
5 changes: 5 additions & 0 deletions src/FMBot.Bot/Services/SupporterService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -636,6 +636,11 @@ private string OpenCollectiveSupporterToEmbedDescription(Supporter supporter)
$"Notes: `{supporter.Notes}`";
}

public async Task<List<DiscordEntitlement>> GetDiscordEntitlements()
{
return await this._discordSkuService.GetEntitlements();
}

public async Task UpdateDiscordSupporters()
{
var discordSupporters = await this._discordSkuService.GetEntitlements();
Expand Down
25 changes: 24 additions & 1 deletion src/FMBot.Bot/TextCommands/AdminCommands.cs
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ public async Task PurgeCacheAsync()
[Command("opencollectivesupporters", RunMode = RunMode.Async)]
[Summary("Displays all .fmbot supporters.")]
[Alias("ocsupporters")]
public async Task AllSupportersAsync()
public async Task OpenCollectiveSupportersAsync()
{
if (!await this._adminService.HasCommandAccessAsync(this.Context.User, UserType.Admin))
{
Expand All @@ -297,6 +297,29 @@ public async Task AllSupportersAsync()
this.Context.LogCommandUsed(response.CommandResponse);
}

[Command("discordsupporters", RunMode = RunMode.Async)]
[Summary("Displays all .fmbot supporters.")]
[Alias("dsupporters")]
public async Task DiscordSupportersAsync()
{
if (!await this._adminService.HasCommandAccessAsync(this.Context.User, UserType.Admin))
{
await ReplyAsync(Constants.FmbotStaffOnly);
this.Context.LogCommandUsed(CommandResponse.NoPermission);
return;
}

_ = this.Context.Channel.TriggerTypingAsync();

var prfx = this._prefixService.GetPrefix(this.Context.Guild?.Id);
var userSettings = await this._userService.GetUserSettingsAsync(this.Context.User);

var response = await this._staticBuilders.DiscordSupportersAsync(new ContextModel(this.Context, prfx, userSettings));

await this.Context.SendResponse(this.Interactivity, response);
this.Context.LogCommandUsed(response.CommandResponse);
}

[Command("addalbum")]
[Summary("Manage album censoring")]
[Examples("addcensoredalbum Death Grips No Love Deep Web")]
Expand Down

0 comments on commit dcd565c

Please sign in to comment.