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); } }
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); } }
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); } } } }
/// <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); } } }
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); }
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)); }
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()); }
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); } }
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); } }
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); } }
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); }
/// <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); } }
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); }
public static async Task <List <SocketGuildUser> > GetBotsAsync(this SocketGuild guild) { await guild.SyncGuildAsync(); return(guild.Users.Where(o => o.IsBot).ToList()); }