-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathMemberApplicationExtensions.cs
More file actions
79 lines (77 loc) · 3.59 KB
/
MemberApplicationExtensions.cs
File metadata and controls
79 lines (77 loc) · 3.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
using System;
using System.Collections.Generic;
using System.Linq;
using Mmcc.Bot.Common.Models.Colours;
using Mmcc.Bot.Database.Entities;
using Mmcc.Bot.RemoraAbstractions.Timestamps;
using Remora.Discord.API.Objects;
namespace Mmcc.Bot.Common.Extensions.Database.Entities
{
/// <summary>
/// Extensions for <see cref="MemberApplication"/>.
/// </summary>
public static class MemberApplicationExtensions
{
/// <summary>
/// Get an embed representation of a member application.
/// </summary>
/// <param name="memberApplication">Member application.</param>
/// <param name="colourPalette">Colour palette for the embed to use.</param>
/// <returns>Embed representing the member application.</returns>
public static Embed GetEmbed(this MemberApplication memberApplication, IColourPalette colourPalette)
{
var statusStr = memberApplication.AppStatus.ToString();
var embedConditionalAttributes = memberApplication.AppStatus switch
{
ApplicationStatus.Pending => new
{
Colour = colourPalette.Blue,
StatusFieldValue = $":clock1: {statusStr}"
},
ApplicationStatus.Approved => new
{
Colour = colourPalette.Green,
StatusFieldValue = $":white_check_mark: {statusStr}"
},
ApplicationStatus.Rejected => new
{
Colour = colourPalette.Red,
StatusFieldValue = $":no_entry: {statusStr}"
},
_ => throw new ArgumentOutOfRangeException(nameof(memberApplication))
};
return new Embed
{
Title = $"Member Application #{memberApplication.MemberApplicationId}",
Description =
$"Submitted at {new DiscordTimestamp(memberApplication.AppTime).AsStyled(DiscordTimestampStyle.ShortDateTime)}.",
Fields = new List<EmbedField>
{
new("Author", $"{memberApplication.AuthorDiscordName} (ID: `{memberApplication.AuthorDiscordId}`)",
false),
new("Status", embedConditionalAttributes.StatusFieldValue, false),
new(
"Provided details",
$"{memberApplication.MessageContent}\n" +
$"**[Original message (click here)](https://discord.com/channels/{memberApplication.GuildId}/{memberApplication.ChannelId}/{memberApplication.MessageId})**",
false
)
},
Colour = embedConditionalAttributes.Colour,
Thumbnail = new EmbedThumbnail(memberApplication.ImageUrl)
};
}
/// <summary>
/// Gets an enumerable of formatted embed fields that represent the member applications.
/// </summary>
/// <param name="memberApplications">Enumerable of member applications.</param>
/// <returns>Enumerable of formatted embed fields that represent the member applications.</returns>
public static IEnumerable<EmbedField> GetEmbedFields(this IEnumerable<MemberApplication> memberApplications) =>
memberApplications.Select(app => new EmbedField
(
$"[{app.MemberApplicationId}] {app.AuthorDiscordName}",
$"*Submitted at:* {new DiscordTimestamp(app.AppTime).AsStyled(DiscordTimestampStyle.ShortDateTime)}.",
false
));
}
}