Exemple #1
0
        public async Task <bool> Fix(bool silent = false)
        {
            if (!Permissions.IsBotOwner(Context))
            {
                if (!silent)
                {
                    await Context.ApplyResultReaction(CommandResult.FailedUserPermission).ConfigureAwait(false);
                }
                return(false);
            }

            int fixedCount = 0;

            foreach (var link in _links)
            {
                if (link.Links.Count > 0 && ulong.TryParse(link.Value, out ulong messageId))
                {
                    var channelPermissions = (await link.Guild.GetCurrentUserAsync().ConfigureAwait(false))?.GetPermissions(link.Channel);
                    if (channelPermissions?.AddReactions == true)
                    {
                        var message = await GetMessageAsync(link.Guild, messageId, link.Channel).ConfigureAwait(false);

                        if (message != null)
                        {
                            foreach (var messageLink in link.Links)
                            {
                                var emoteValue = messageLink.Identity.Split('=', StringSplitOptions.RemoveEmptyEntries).FirstOrDefault();
                                if (message != null)
                                {
                                    var emote = ulong.TryParse(emoteValue, out ulong emoteId)
                                        ? EmotesHelper.GetGuildEmoteById(link.Guild, emoteId)
                                        : EmotesHelper.GetEmojiFromString(emoteValue);
                                    if (emote != null)
                                    {
                                        if (!message.Reactions.Any(r => r.Value.IsMe && string.Equals(r.Key.Name, emote.Name, StringComparison.CurrentCultureIgnoreCase)))
                                        {
                                            // Check if an identical emote exists but in a different capital casing.
                                            var emoteCaseInsensitive = message.Reactions.FirstOrDefault(r => string.Equals(r.Key.Name, emote.Name, StringComparison.CurrentCultureIgnoreCase)).Key;

                                            await message.AddReactionAsync(emoteCaseInsensitive ?? emote).ConfigureAwait(false);

                                            fixedCount++;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

            if (!silent)
            {
                await Context.ApplyResultReaction(fixedCount == 0?CommandResult.SuccessAlt1 : CommandResult.Success).ConfigureAwait(false);
            }
            return(true);
        }