Removing Legacy File
This commit is contained in:
parent
663361f39e
commit
32fe86cdd6
@ -1,291 +0,0 @@
|
|||||||
using System;
|
|
||||||
using Discord;
|
|
||||||
using System.Text;
|
|
||||||
using Discord.Commands;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using ChaosBot.Lodestone;
|
|
||||||
using ChaosBot.Services;
|
|
||||||
using Discord.Net;
|
|
||||||
using NLog;
|
|
||||||
|
|
||||||
|
|
||||||
namespace ChaosBot.Discord.Modules
|
|
||||||
{
|
|
||||||
public class LodestoneCommands : ModuleBase
|
|
||||||
{
|
|
||||||
private static readonly ILogger _logger = Program.Logger;
|
|
||||||
|
|
||||||
|
|
||||||
[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);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Reply with the Embed created above
|
|
||||||
*/
|
|
||||||
await ReplyAsync(null, false, embed.Build());
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.Error($"InfoCommands.InfoCommand: Exception [{ex}] thrown, <[{ex.Message}]>.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[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);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Reply with the Embed created above
|
|
||||||
*/
|
|
||||||
await ReplyAsync(null, false, embed.Build());
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.Error($"InfoCommands.InfoCommand: Exception [{ex}] thrown, <[{ex.Message}]>.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[Command("lodestone freecompany")]
|
|
||||||
[Alias("lodestone fc")]
|
|
||||||
public async Task GetFreeCompanyById(string id)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
await Context.Channel.TriggerTypingAsync();
|
|
||||||
FreeCompanyDetailed freeCompany = LodestoneManager.GetFreeCompanyById(id.ToString());
|
|
||||||
|
|
||||||
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}]>.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[Command("lodestone freecompany")]
|
|
||||||
[Alias("lodestone fc")]
|
|
||||||
public async Task GetFreeCompany(string server, params string[] name)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
await Context.Channel.TriggerTypingAsync();
|
|
||||||
FreeCompanyDetailed freeCompany = LodestoneManager.GetFreeCompany(server, string.Join(" ", 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}]>.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[Command("nick set")]
|
|
||||||
[Alias("lodestone nick set")]
|
|
||||||
[RequireBotPermission(GuildPermission.ManageNicknames)]
|
|
||||||
public async Task SetNickname(string server, params string[] name)
|
|
||||||
{
|
|
||||||
await Context.Channel.TriggerTypingAsync();
|
|
||||||
CharacterDetailed character = LodestoneManager.GetCharacter(server, string.Join(" ", name));
|
|
||||||
await NickNameBuilder(character);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Command("nick set")]
|
|
||||||
[Alias("lodestone nick set")]
|
|
||||||
[RequireBotPermission(GuildPermission.ManageNicknames)]
|
|
||||||
public async Task SetNickname(long id)
|
|
||||||
{
|
|
||||||
await Context.Channel.TriggerTypingAsync();
|
|
||||||
CharacterDetailed character = LodestoneManager.GetCharacter(id);
|
|
||||||
await NickNameBuilder(character);
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task NickNameBuilder(CharacterDetailed character)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
IUserMessage message =
|
|
||||||
await ReplyAsync(
|
|
||||||
$"Found character {character.Character.Name} on server {character.Character.Server}. Is this correct?");
|
|
||||||
List<(Emoji emoji, bool state)> reactions = new List<(Emoji emoji, bool state)>
|
|
||||||
{
|
|
||||||
(emoji: new Emoji("✅"), state: true),
|
|
||||||
(emoji: new Emoji("❎"), state: false)
|
|
||||||
};
|
|
||||||
|
|
||||||
foreach ((Emoji emoji, bool state) reaction in reactions)
|
|
||||||
await message.AddReactionAsync(reaction.emoji);
|
|
||||||
|
|
||||||
int timerWaitId = -1,
|
|
||||||
timerCancelWaitId = -1;
|
|
||||||
|
|
||||||
async void WaitForReaction()
|
|
||||||
{
|
|
||||||
foreach ((Emoji emoji, bool state) reaction in reactions)
|
|
||||||
{
|
|
||||||
IReadOnlyCollection<IUser> users = (await message.GetReactionUsersAsync(reaction.emoji, 50, null).ToArrayAsync()).First();
|
|
||||||
if (users.Any(u => u.Id == Context.User.Id))
|
|
||||||
{
|
|
||||||
bool state = reaction.state;
|
|
||||||
|
|
||||||
Timer.CancelTimer(timerWaitId);
|
|
||||||
Timer.CancelTimer(timerCancelWaitId);
|
|
||||||
await message.DeleteAsync();
|
|
||||||
|
|
||||||
if (state)
|
|
||||||
{
|
|
||||||
await ReplyAsync("Confirmed your username!");
|
|
||||||
IGuildUser user = await Context.Guild.GetUserAsync(Context.User.Id);
|
|
||||||
try
|
|
||||||
{
|
|
||||||
await user.ModifyAsync(x => { x.Nickname = character.Character.Name; });
|
|
||||||
}
|
|
||||||
catch (HttpException ex)
|
|
||||||
{
|
|
||||||
await ReplyAsync("Cannot update your role. Is your role above mine?");
|
|
||||||
_logger.Warn($"LodestoneCommands.NickNameBuilder.WaitForReaction: Exception [{ex}] thrown, <[{ex.Message}]>.");
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async void StopWaitingForReaction()
|
|
||||||
{
|
|
||||||
await message.DeleteAsync();
|
|
||||||
await ReplyAsync("Timed out. Please try again.");
|
|
||||||
|
|
||||||
Timer.CancelTimer(timerWaitId);
|
|
||||||
}
|
|
||||||
|
|
||||||
timerWaitId = Timer.RunTimer(WaitForReaction, new TimeSpan(TimeSpan.TicksPerSecond));
|
|
||||||
timerCancelWaitId = Timer.RunIn(StopWaitingForReaction, new TimeSpan(TimeSpan.TicksPerSecond)*20.5);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.Error($"LodestoneCommands.NickNameBuilder: Exception [{ex}] thrown, <[{ex.Message}]>.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static EmbedBuilder BuildEmbedFromFreeCompany(FreeCompanyDetailed freeCompany)
|
|
||||||
{
|
|
||||||
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();
|
|
||||||
return embed;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static EmbedBuilder BuildEmbedFromCharacter(CharacterDetailed character)
|
|
||||||
{
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
var embed = new EmbedBuilder();
|
|
||||||
|
|
||||||
embed.WithColor(new Color(255, 255, 0));
|
|
||||||
embed.Title = $"Character Information";
|
|
||||||
embed.Url = $"https://na.finalfantasyxiv.com/lodestone/character/{character.Character.ID}/";
|
|
||||||
embed.ImageUrl = character.Character.Avatar;
|
|
||||||
embed.Footer = new EmbedFooterBuilder().WithText($"Lodestone ID {character.Character.ID}");
|
|
||||||
|
|
||||||
char genderIcon = character.Character.Gender == 1 ? '♂' : '♀';
|
|
||||||
sb.AppendLine($"{character.Character.Name} {genderIcon} ({character.Character.Server})");
|
|
||||||
sb.AppendLine($"Bio: {character.Character.Bio}");
|
|
||||||
sb.AppendLine();
|
|
||||||
sb.AppendLine(
|
|
||||||
$"Current Job: {LodestoneManager.Classes.GetValueOrDefault(character.Character.ActiveClassJob.UnlockedState.Name)?.Item1.ToString()} {character.Character.ActiveClassJob.Level}");
|
|
||||||
sb.AppendLine();
|
|
||||||
sb.AppendLine("All Jobs:");
|
|
||||||
|
|
||||||
sb.Append("```");
|
|
||||||
List<Tuple<string, ClassType, int>> classInfoList = new List<Tuple<string, ClassType, int>>();
|
|
||||||
foreach (CharacterClassJob characterClassJob in character.Character.ClassJobs.ToArray())
|
|
||||||
{
|
|
||||||
if (characterClassJob.Level == 0) continue;
|
|
||||||
Tuple<string, ClassType> classInfo =
|
|
||||||
LodestoneManager.Classes.GetValueOrDefault(characterClassJob.UnlockedState.Name);
|
|
||||||
classInfoList.Add(new Tuple<string, ClassType, int>(classInfo.Item1, classInfo.Item2, characterClassJob.Level));
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var classTypeList in classInfoList.GroupBy(ci => ci.Item2)
|
|
||||||
.Select(group => new {ClassType = @group.Key, classList = @group.ToArray()}).OrderBy(g => g.ClassType))
|
|
||||||
{
|
|
||||||
sb.Append($"{classTypeList.ClassType.ToString()}:");
|
|
||||||
|
|
||||||
for (int i = 0; i < classTypeList.classList.Length; i++)
|
|
||||||
{
|
|
||||||
if ((i % 4) == 0)
|
|
||||||
sb.AppendLine();
|
|
||||||
|
|
||||||
Tuple<string, ClassType, int> classItem = classTypeList.classList[i];
|
|
||||||
sb.Append(String.Format(" {0,3}: {1,2}", classItem.Item1, classItem.Item3));
|
|
||||||
}
|
|
||||||
|
|
||||||
sb.AppendLine("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
sb.Append("```");
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Add the string to the Embed
|
|
||||||
*/
|
|
||||||
embed.Description = sb.ToString();
|
|
||||||
return embed;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue
Block a user