Esempio n. 1
0
        public async Task <List <string> > CleanOldEmotesAsync(SocketGuild guild)
        {
            await guild.SyncGuildAsync().ConfigureAwait(false);

            lock (Locker)
            {
                using var scope      = Provider.CreateScope();
                using var repository = scope.ServiceProvider.GetService <EmoteStatsRepository>();
                var removed = new List <string>();

                var emoteClearCandidates = repository.GetEmoteStats(guild.Id, true).ToList();

                foreach (var candidate in emoteClearCandidates)
                {
                    var parsedEmote = Emote.Parse(candidate.GetRealId());

                    if (!guild.Emotes.Any(o => o.Id == parsedEmote.Id))
                    {
                        removed.Add($"Smazán starý emote **{parsedEmote.Name}** ({parsedEmote.Id})");
                        repository.RemoveEmojiNoCommit(guild, candidate.GetRealId());
                    }
                }

                repository.SaveChanges();
                return(removed);
            }
        }
Esempio n. 2
0
        public async Task <List <string> > CleanOldEmotesAsync(SocketGuild guild)
        {
            await guild.SyncGuildAsync().ConfigureAwait(false);

            lock (Locker)
            {
                var removed = new List <string>();

                using (var repository = new GrillBotRepository(Config))
                {
                    foreach (var emote in Counter.Values.Where(o => !o.IsUnicode).ToList())
                    {
                        var parsedEmote = Emote.Parse(emote.GetRealId());

                        if (!guild.Emotes.Any(o => o.Id == parsedEmote.Id))
                        {
                            removed.Add($"Mažu starý emote {parsedEmote.Name} ({parsedEmote.Id})");
                            repository.EmoteStats.RemoveEmote(emote.GetRealId());
                            Counter.Remove(emote.GetRealId());
                        }
                    }
                }

                return(removed);
            }
        }
Esempio n. 3
0
        private async Task RemoveOverwritesForPreprocessedChannels(SocketGuildUser user, SocketGuild guild,
                                                                   List <ChannelOverride> overrideExceptions)
        {
            await guild.SyncGuildAsync().ConfigureAwait(false);

            using (var repository = new GrillBotRepository(Config))
            {
                var config     = repository.Config.FindConfig(guild.Id, "unverify", "");
                var configData = config.GetData <TempUnverifyConfig>();

                var channels = guild.Channels
                               .OfType <SocketTextChannel>()
                               .Where(o => configData.PreprocessRemoveAccess.Contains(o.Id.ToString()))
                               .Where(o => !overrideExceptions.Any(x => x.ChannelIdSnowflake == o.Id));

                foreach (var channel in channels)
                {
                    var overwrites = channel.GetPermissionOverwrite(user);

                    if (overwrites != null)
                    {
                        await channel.RemovePermissionOverwriteAsync(user).ConfigureAwait(false);
                    }
                }
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Remove access to channels where user can't see now, but after unverify can see.
        /// </summary>
        private async Task PreRemoveAccessToPublicChannels(SocketGuildUser user, SocketGuild guild)
        {
            await guild.SyncGuildAsync().ConfigureAwait(false);

            using (var repository = new GrillBotRepository(Config))
            {
                var config     = repository.Config.FindConfig(guild.Id, "unverify", "");
                var configData = config.GetData <TempUnverifyConfig>();

                var channels = guild.Channels
                               .OfType <SocketTextChannel>()
                               .Where(o => configData.PreprocessRemoveAccess.Contains(o.Id.ToString()));

                foreach (var channel in channels)
                {
                    var canSee = channel.GetUser(user.Id) != null;
                    if (!canSee)
                    {
                        return;
                    }

                    var perms = new OverwritePermissions(sendMessages: PermValue.Deny);
                    await channel.AddPermissionOverwriteAsync(user, perms).ConfigureAwait(false);
                }
            }
        }
Esempio n. 5
0
        public static async Task <int> CalculateJoinPositionAsync(this SocketGuild guild, SocketGuildUser user)
        {
            await guild.SyncGuildAsync();

            var positions = guild.Users
                            .Where(o => o.JoinedAt != null)
                            .OrderBy(o => o.JoinedAt)
                            .ToList();

            return(positions.FindIndex(o => o == user) + 1);
        }
Esempio n. 6
0
        public async Task <string> SetUnverifyAsync(SocketUser user, string time, string data, SocketGuild guild, SocketUser fromUser, bool selfUnverify,
                                                    List <string> toKeep)
        {
            var unverifyConfig = await GetUnverifyConfigAsync(guild);

            await guild.SyncGuildAsync();

            var mutedRole = guild.GetRole(unverifyConfig.MutedRoleID);

            return(await SetUnverifyAsync(user, time, data, guild, fromUser, selfUnverify, toKeep, mutedRole));
        }
Esempio n. 7
0
        public async Task <List <SocketGuildUser> > FindUsersAsync(SocketGuild guild, string query)
        {
            if (string.IsNullOrEmpty(query))
            {
                return(null);
            }

            await guild.SyncGuildAsync();

            if (query.Equals("*", StringComparison.InvariantCultureIgnoreCase))
            {
                return(guild.Users.ToList());
            }

            return(guild.Users.Where(o => IsValidUserWithQuery(o, query)).ToList());
        }
Esempio n. 8
0
        private async Task FindAndToggleMutedRole(SocketGuildUser user, SocketGuild guild, bool set)
        {
            await guild.SyncGuildAsync().ConfigureAwait(false);

            var mutedRole = guild.Roles.FirstOrDefault(o => string.Equals(o.Name, "muted", StringComparison.InvariantCultureIgnoreCase));

            if (mutedRole == null)
            {
                return; // Mute role not exists on this server.
            }
            if (set)
            {
                await user.AddRoleAsync(mutedRole).ConfigureAwait(false);
            }
            else
            {
                await user.RemoveRoleAsync(mutedRole).ConfigureAwait(false);
            }
        }
Esempio n. 9
0
        private async Task RemoveOverwritesForPreprocessedChannels(SocketGuildUser user, SocketGuild guild,
                                                                   List <ChannelOverride> overrideExceptions)
        {
            await guild.SyncGuildAsync();

            var configData = GetConfig(guild);

            var overwrites = guild.Channels
                             .OfType <SocketTextChannel>()
                             .Where(o => configData.PreprocessRemoveAccess.Contains(o.Id.ToString()) &&
                                    !overrideExceptions.Any(x => x.ChannelIdSnowflake == o.Id))
                             .Select(ch => new { channel = ch, overwrite = ch.GetPermissionOverwrite(user) })
                             .Where(o => o.overwrite != null);

            foreach (var channel in overwrites)
            {
                await channel.channel.RemovePermissionOverwriteAsync(user).ConfigureAwait(false);
            }
        }
Esempio n. 10
0
        private async Task FindAndToggleMutedRoleAsync(SocketGuildUser user, SocketGuild guild, bool set)
        {
            await guild.SyncGuildAsync();

            var mutedRole = guild.FindMutedRole();

            if (mutedRole == null)
            {
                return; // Mute role not exists on this server.
            }
            if (set)
            {
                await user.SetRoleAsync(mutedRole);
            }
            else
            {
                await user.RemoveRoleAsync(mutedRole);
            }
        }
Esempio n. 11
0
        public async Task <List <string> > SetUnverifyAsync(List <SocketUser> users, string time, string data, SocketGuild guild, SocketUser fromUser)
        {
            var unverifyConfig = await GetUnverifyConfigAsync(guild);

            var messages = new List <string>();

            await guild.SyncGuildAsync();

            var mutedRole = guild.GetRole(unverifyConfig.MutedRoleID);

            foreach (var user in users)
            {
                var message = await SetUnverifyAsync(user, time, data, guild, fromUser, false, null, mutedRole);

                messages.Add(message);
            }

            return(messages);
        }
Esempio n. 12
0
        /// <summary>
        /// Remove access to channels where user can't see now, but after unverify can see.
        /// </summary>
        private async Task PreRemoveAccessToPublicChannels(SocketGuildUser user, SocketGuild guild)
        {
            await guild.SyncGuildAsync();

            var config   = GetConfig(guild);
            var channels = guild.Channels
                           .OfType <SocketTextChannel>()
                           .Where(o => config.PreprocessRemoveAccess.Contains(o.Id.ToString()));

            foreach (var channel in channels)
            {
                var cantSee = channel.GetUser(user.Id) == null;
                if (cantSee)
                {
                    return;
                }

                var perms = new OverwritePermissions(sendMessages: PermValue.Deny);
                await channel.AddPermissionOverwriteAsync(user, perms).ConfigureAwait(false);
            }
        }
Esempio n. 13
0
        public async Task <List <string> > CleanOldEmotesAsync(SocketGuild guild)
        {
            await guild.SyncGuildAsync();

            var emoteClearCandidates = GrillBotRepository.EmoteStatsRepository.GetEmotesForClear(guild.Id, 14);

            if (emoteClearCandidates.Count == 0)
            {
                return(new List <string>());
            }

            var removed = new List <string>();

            foreach (var candidate in emoteClearCandidates)
            {
                if (candidate.IsUnicode)
                {
                    var formatedFirstOccured = candidate.FirstOccuredAt.ToLocaleDatetime();
                    var formatedLastOccured  = candidate.LastOccuredAt.ToLocaleDatetime();

                    removed.Add($"> Smazán unicode emote **{candidate.RealID}**. Použití: 0, Poprvé použit: {formatedFirstOccured}, Naposledy použit: {formatedLastOccured}");
                    await GrillBotRepository.EmoteStatsRepository.RemoveEmojiNoCommitAsync(guild, candidate.EmoteID);

                    continue;
                }

                var parsedEmote = Emote.Parse(candidate.RealID);
                if (!guild.Emotes.Any(o => o.Id == parsedEmote.Id))
                {
                    removed.Add($"> Smazán starý emote **{parsedEmote.Name}** ({parsedEmote.Id}). Použito {candidate.UseCount.FormatWithSpaces()}x.");
                    await GrillBotRepository.EmoteStatsRepository.RemoveEmojiNoCommitAsync(guild, candidate.RealID);
                }
            }

            await GrillBotRepository.CommitAsync();

            return(removed);
        }
Esempio n. 14
0
        public static async Task <List <SocketGuildUser> > GetBotsAsync(this SocketGuild guild)
        {
            await guild.SyncGuildAsync();

            return(guild.Users.Where(o => o.IsBot).ToList());
        }