public async Task <string> RemoveUnverifyAsync(SocketGuild guild, SocketGuildUser user, SocketUser fromUser, bool isAuto = false) { try { BotState.CurrentReturningUnverifyFor.Add(user); var userEntity = await GrillBotRepository.UsersRepository.GetUserAsync(guild.Id, user.Id, UsersIncludes.Unverify); if (userEntity?.Unverify == null) { return(MessageGenerator.CreateRemoveAccessUnverifyNotFound(user)); } var unverifyConfig = (await GrillBotRepository.ConfigRepository.FindConfigAsync(guild.Id, "unverify", null, false))?.GetData <UnverifyConfig>(); var mutedRole = unverifyConfig == null ? null : guild.GetRole(unverifyConfig.MutedRoleID); var rolesToReturn = userEntity.Unverify.DeserializedRoles.Where(o => !user.Roles.Any(x => x.Id == o)) .Select(o => guild.GetRole(o)).Where(role => role != null).ToList(); var channelsToReturn = userEntity.Unverify.DeserializedChannels .Select(o => new ChannelOverwrite(guild.GetChannel(o.ChannelIdSnowflake), o.GetPermissions())) .Where(o => o.Channel != null).ToList(); if (isAuto) { await UnverifyLogger.LogAutoRemoveAsync(rolesToReturn, channelsToReturn, user, guild); } else { await UnverifyLogger.LogRemoveAsync(rolesToReturn, channelsToReturn, guild, user, fromUser); } foreach (var channel in channelsToReturn) { if (channel.Channel is SocketGuildChannel socketGuildChannel) { try { await socketGuildChannel.AddPermissionOverwriteAsync(user, channel.Perms); } catch (HttpException ex) { var message = new LogMessage(LogSeverity.Error, nameof(UnverifyService), $"An error occured when unverify returning access to channel {channel.Channel.Name} for user {user.GetFullName()}", ex); await Logger.OnLogAsync(message); } } } await user.AddRolesAsync(rolesToReturn); if (mutedRole != null) { await user.RemoveRoleAsync(mutedRole); } userEntity.Unverify = null; await GrillBotRepository.CommitAsync(); Queue.TryRemove <UnverifyBackgroundTask>(o => o.GuildId == guild.Id && o.UserId == user.Id); if (!isAuto) { var message = MessageGenerator.CreateRemoveAccessManuallyPMMessage(guild); await user.SendPrivateMessageAsync(message); } return(MessageGenerator.CreateRemoveAccessManuallyToChannel(user)); } catch (Exception ex) { if (!isAuto) { throw; } var message = new LogMessage(LogSeverity.Error, nameof(UnverifyService), "An error occured when unverify returning access.", ex); await Logger.OnLogAsync(message); return(MessageGenerator.CreateRemoveAccessManuallyFailed(user, ex)); } finally { BotState.CurrentReturningUnverifyFor.RemoveAll(o => o.Id == user.Id); } }
public MathCalcResult Solve(string input, SocketUserMessage message) { MathSession session = null; try { var user = (SocketGuildUser)message.Author; bool booster = Config.Discord.IsBooster(user.Roles); session = LockAndGetSession(input, booster); input = ("" + input).Trim(); // treatment against null values. if (string.IsNullOrEmpty(input)) { return(new MathCalcResult() { ErrorMessage = "Nelze spočítat prázdný výraz.", }); } if (input.Contains("nan", StringComparison.InvariantCultureIgnoreCase)) { return(new MathCalcResult() { ErrorMessage = "NaN není platný vstup." }); } using (var repository = new GrillBotRepository(Config)) { var config = repository.Config.FindConfig(user.Guild.Id, "", "solve"); var configData = config.GetData <MathConfig>(); var appPath = configData.ProcessPath; using (var process = new Process()) { process.StartInfo.FileName = "dotnet"; process.StartInfo.Arguments = $"{appPath} \"{input}\""; process.StartInfo.UseShellExecute = false; process.StartInfo.CreateNoWindow = true; process.StartInfo.RedirectStandardOutput = true; process.Start(); if (!process.WaitForExit(session.ComputingTime)) { process.Kill(); return(new MathCalcResult() { IsTimeout = true, AssingedComputingTime = session.ComputingTime }); } var output = process.StandardOutput.ReadToEnd(); return(JsonConvert.DeserializeObject <MathCalcResult>(output)); } } } finally { ReleaseSession(session); } }
private async Task <string> SetUnverifyAsync(SocketUser socketUser, string time, string data, SocketGuild guild, SocketUser fromUser, bool selfUnverify, List <string> toKeep, SocketRole mutedRole) { var user = await guild.GetUserFromGuildAsync(socketUser.Id); await Checker.ValidateAsync(user, guild, selfUnverify); var profile = await UnverifyProfileGenerator.CreateProfileAsync(user, guild, time, data, selfUnverify, toKeep, mutedRole); UnverifyLog unverifyLogEntity; if (selfUnverify) { unverifyLogEntity = await UnverifyLogger.LogSelfUnverifyAsync(profile, guild); } else { unverifyLogEntity = await UnverifyLogger.LogUnverifyAsync(profile, guild, fromUser); } try { if (mutedRole != null) { await user.SetRoleAsync(mutedRole); } await user.RemoveRolesAsync(profile.RolesToRemove); foreach (var channelOverride in profile.ChannelsToRemove) { var channel = guild.GetChannel(channelOverride.ChannelID); await channel?.AddPermissionOverwriteAsync(user, new OverwritePermissions(viewChannel : PermValue.Deny)); } var userEntity = await GrillBotRepository.UsersRepository.GetOrCreateUserAsync(guild.Id, user.Id, UsersIncludes.Unverify); userEntity.Unverify = new Database.Entity.Unverify.Unverify() { DeserializedChannels = profile.ChannelsToRemove.ConvertAll(o => new ChannelOverride(o.ChannelID, o.Perms)), DeserializedRoles = profile.RolesToRemove.ConvertAll(o => o.Id), EndDateTime = profile.EndDateTime, Reason = profile.Reason, StartDateTime = profile.StartDateTime, SetLogOperation = unverifyLogEntity }; await GrillBotRepository.CommitAsync(); Queue.Add(new UnverifyBackgroundTask(guild.Id, user.Id, profile.EndDateTime)); var pmMessage = MessageGenerator.CreateUnverifyPMMessage(profile, guild); await user.SendPrivateMessageAsync(pmMessage); return(MessageGenerator.CreateUnverifyMessageToChannel(profile)); } catch (Exception ex) { if (mutedRole != null) { await user.RemoveRoleAsync(mutedRole); } await user.AddRolesAsync(profile.RolesToRemove); foreach (var channelOverride in profile.ChannelsToRemove) { var channel = guild.GetChannel(channelOverride.ChannelID); if (channel != null) { await channel.AddPermissionOverwriteAsync(user, channelOverride.Perms); } } var errorMessage = new LogMessage(LogSeverity.Warning, nameof(UnverifyService), "An error occured when unverify removing access.", ex); await Logger.OnLogAsync(errorMessage); return(MessageGenerator.CreateUnverifyFailedToChannel(user)); } }
public TeamSearchService(IOptions <Configuration> config, IMessageCache cache) { Config = config.Value; Repository = new GrillBotRepository(Config); Cache = cache; }