Clean up duplicate code and add typing triggers

This commit is contained in:
Daniel_I_Am 2020-06-05 02:29:31 +02:00
parent 588093bef6
commit afafe1f61c
No known key found for this signature in database
GPG Key ID: 80C428FCC9743E84

View File

@ -19,10 +19,12 @@ namespace ChaosBot.Discord.Modules
[Command("lodestone character")]
[Alias("lodestone c")]
public async Task GetCharacterById(long id)
{
try
{
await Context.Channel.TriggerTypingAsync();
CharacterDetailed character = LodestoneManager.GetCharacter(id);
var embed = BuildEmbedFromCharacter(character);
@ -39,10 +41,12 @@ namespace ChaosBot.Discord.Modules
}
[Command("lodestone character")]
[Alias("lodestone c")]
public async Task GetCharacter(string server, params string[] name)
{
try
{
await Context.Channel.TriggerTypingAsync();
CharacterDetailed character = LodestoneManager.GetCharacter(server, string.Join(" ", name));
var embed = BuildEmbedFromCharacter(character);
@ -64,38 +68,10 @@ namespace ChaosBot.Discord.Modules
{
try
{
await Context.Channel.TriggerTypingAsync();
FreeCompanyDetailed freeCompany = LodestoneManager.GetFreeCompanyById(id.ToString());
var sb = new StringBuilder();
var embed = new EmbedBuilder();
embed.WithColor(new Color(255, 255,0));
embed.Title = $"Free Company Information";
embed.Url = $"https://na.finalfantasyxiv.com/lodestone/freecompany/{freeCompany.FreeCompany.ID}/";
embed.ImageUrl = freeCompany.FreeCompany.Crest.First();
embed.Footer = new EmbedFooterBuilder().WithText($"Lodestone ID {freeCompany.FreeCompany.ID}");
sb.AppendLine($"{freeCompany.FreeCompany.Name} ({freeCompany.FreeCompany.Server}, rank {freeCompany.FreeCompany.Rank})");
sb.AppendLine($"{freeCompany.FreeCompany.Slogan}");
sb.AppendLine();
sb.AppendLine($"{freeCompany.FreeCompany.ActiveMemberCount} active members.");
sb.AppendLine($"Company estate {freeCompany.FreeCompany.Estate.Plot}");
sb.AppendLine($"Pledged to Grand Company {freeCompany.FreeCompany.GrandCompany}");
sb.AppendLine();
var rankCounts = freeCompany.FreeCompanyMembers.GroupBy(m => m.Rank).Select(g => new {Rank = g.Key, Count = g.Count()})
.OrderBy(x => x.Rank);
foreach (string rank in new List<string>{"Council", "Mentor", "Member", "Initiate"})
{
var rankCount = rankCounts.First(e => e.Rank == rank);
sb.AppendLine($"{rankCount.Count} members are of rank {rankCount.Rank} ");
}
/*
* Add the string to the Embed
*/
embed.Description = sb.ToString();
var embed = BuildEmbedFromFreeCompany(freeCompany);
/*
* Reply with the Embed created above
@ -114,8 +90,24 @@ namespace ChaosBot.Discord.Modules
{
try
{
await Context.Channel.TriggerTypingAsync();
FreeCompanyDetailed freeCompany = LodestoneManager.GetFreeCompany(server, name);
var embed = BuildEmbedFromFreeCompany(freeCompany);
/*
* Reply with the Embed created above
*/
await ReplyAsync(null, false, embed.Build());
}
catch (Exception ex)
{
_logger.Error($"InfoCommands.InfoCommand: Exception [{ex}] thrown, <[{ex.Message}]>.");
}
}
private static EmbedBuilder BuildEmbedFromFreeCompany(FreeCompanyDetailed freeCompany)
{
var sb = new StringBuilder();
var embed = new EmbedBuilder();
@ -125,7 +117,8 @@ namespace ChaosBot.Discord.Modules
embed.ImageUrl = freeCompany.FreeCompany.Crest.First();
embed.Footer = new EmbedFooterBuilder().WithText($"Lodestone ID {freeCompany.FreeCompany.ID}");
sb.AppendLine($"{freeCompany.FreeCompany.Name} ({freeCompany.FreeCompany.Server}, rank {freeCompany.FreeCompany.Rank})");
sb.AppendLine(
$"{freeCompany.FreeCompany.Name} ({freeCompany.FreeCompany.Server}, rank {freeCompany.FreeCompany.Rank})");
sb.AppendLine($"{freeCompany.FreeCompany.Slogan}");
sb.AppendLine();
sb.AppendLine($"{freeCompany.FreeCompany.ActiveMemberCount} active members.");
@ -133,7 +126,8 @@ namespace ChaosBot.Discord.Modules
sb.AppendLine($"Pledged to Grand Company {freeCompany.FreeCompany.GrandCompany}");
sb.AppendLine();
var rankCounts = freeCompany.FreeCompanyMembers.GroupBy(m => m.Rank).Select(g => new {Rank = g.Key, Count = g.Count()})
var rankCounts = freeCompany.FreeCompanyMembers.GroupBy(m => m.Rank)
.Select(g => new {Rank = g.Key, Count = g.Count()})
.OrderBy(x => x.Rank);
foreach (string rank in new List<string> {"Council", "Mentor", "Member", "Initiate"})
@ -146,16 +140,7 @@ namespace ChaosBot.Discord.Modules
* Add the string to the Embed
*/
embed.Description = sb.ToString();
/*
* Reply with the Embed created above
*/
await ReplyAsync(null, false, embed.Build());
}
catch (Exception ex)
{
_logger.Error($"InfoCommands.InfoCommand: Exception [{ex}] thrown, <[{ex.Message}]>.");
}
return embed;
}
private static EmbedBuilder BuildEmbedFromCharacter(CharacterDetailed character)