public static bool TryParse(string input, out IEmoji result) { result = null; if (LocalCustomEmoji.TryParse(input, out var emoji)) { result = emoji; return(true); } var utf32 = Encoding.UTF32.GetBytes(input); for (var i = 0; i < utf32.Length; i += 4) { var codepoint = BitConverter.ToInt32(utf32, i); var any = false; for (var j = 0; j < CodePoints.Length; j++) { if (CodePoints[j] == codepoint) { any = true; break; } } if (!any) { return(false); } } result = new LocalEmoji(input); return(true); }
ParseAsync(Parameter parameter, string value, CommandContext context) { if (LocalCustomEmoji.TryParse(value, out var localCustomEmoji)) { return(TypeParserResult <IEmoji> .Successful(localCustomEmoji)); } if (emojis == null) { await Locker.WaitAsync(); try { await GetEmojis(); } finally { Locker.Release(); } } var match = emojis.FirstOrDefault(x => x.Surrogates == value || x.NamesWithColons.Any(n => n.Equals(value, System.StringComparison.OrdinalIgnoreCase)) || x.Names.Any(n => n.Equals(value, System.StringComparison.OrdinalIgnoreCase))); if (match != null) { var localEmoji = new LocalEmoji(match.Surrogates); return(TypeParserResult <IEmoji> .Successful(localEmoji)); } return(TypeParserResult <IEmoji> .Unsuccessful("Invalid custom emoji format.")); }
public override ValueTask <CheckResult> CheckAsync(object argument, CommandContext ctx) { var context = (AdminCommandContext)ctx; return(!LocalCustomEmoji.TryParse(((IEmoji)argument).MessageFormat, out _) ? CheckResult.Unsuccessful(context.Localize("require_custom_emoji")) : CheckResult.Successful); }
/// <inheritdoc/> public override ValueTask <TypeParserResult <ICustomEmoji> > ParseAsync(Parameter parameter, string value, DiscordCommandContext context) { if (LocalCustomEmoji.TryParse(value, out var emoji)) { return(Success(emoji)); } return(Failure("Invalid custom emoji.")); }
public ButtonAttribute(string emoji) { if (emoji == null) { throw new ArgumentNullException(nameof(emoji)); } Emoji = LocalCustomEmoji.TryParse(emoji, out var customEmoji) ? customEmoji as IEmoji : new LocalEmoji(emoji); }
/// <inheritdoc/> public override ValueTask <TypeParserResult <IGuildEmoji> > ParseAsync(Parameter parameter, string value, DiscordGuildCommandContext context) { if (LocalCustomEmoji.TryParse(value, out var emoji)) { if (context.Guild.Emojis.TryGetValue(emoji.Id, out var guildEmoji)) { return(Success(guildEmoji)); } return(Failure("The provided custom emoji is not from this guild.")); } return(Failure("Invalid custom emoji.")); }
private async Task <ICustomEmoji> GetEmojiAsync(string value) { if (LocalCustomEmoji.TryParse(value, out var emoji)) { return(Context.Guild !.Emojis.FirstOrDefault(x => x.Value.Id == emoji.Id).Value ?? (ICustomEmoji)await Context.Guild !.GetEmojiAsync(emoji.Id)); } if (Snowflake.TryParse(value, out var emojiId)) { return(Context.Guild !.Emojis.FirstOrDefault(x => x.Value.Id == emojiId).Value ?? (ICustomEmoji)await Context.Guild !.GetEmojiAsync(emojiId)); } value = value.Replace(" ", "_"); return(Context.Guild !.Emojis.FirstOrDefault(e => string.Equals(e.Value.Name, value, StringComparison.OrdinalIgnoreCase)).Value); }