public override Task <TypeReaderResult> ReadAsync(ICommandContext context, string input, IServiceProvider services) { input = input.Replace("`", "").Replace(@"\", "").Trim(); // Find by name foreach (var emote in EmotesHelper.Emotes) { if (input.Equals($":{EmotesHelper.GetEmojiName(emote)}:", StringComparison.CurrentCultureIgnoreCase)) { return(Task.FromResult(TypeReaderResult.FromSuccess(EmotesHelper.GetEmoji(emote)))); } } // Find by unicode value foreach (var emote in EmotesHelper.Emojis) { if (input.Equals(emote.Name, StringComparison.CurrentCultureIgnoreCase)) { return(Task.FromResult(TypeReaderResult.FromSuccess(emote))); } } // Check guild-emotes var guildEmote = context.Guild.Emotes.FirstOrDefault(e => string.Equals($"<:{e.Name}:{e.Id}>", input, StringComparison.CurrentCultureIgnoreCase) || string.Equals($"<a:{e.Name}:{e.Id}>", input, StringComparison.CurrentCultureIgnoreCase)); if (guildEmote != null) { return(Task.FromResult(TypeReaderResult.FromSuccess(guildEmote))); } return(Task.FromResult(TypeReaderResult.FromError(CommandError.Unsuccessful, "Unable to find a valid emote"))); }