public async Task <ActionResult> SendTestMessage(string discordServer, string module, string key) { var discordServerId = long.Parse(discordServer); ActionResult ErrorResult() => new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest, "User does not have required permission"); var currentUser = DataContext.DiscordUsers.FirstOrDefault(x => x.UserId == _currentUserId)?.Servers.FirstOrDefault(x => x.Server?.ServerId == discordServerId); if (currentUser == null) { return(ErrorResult()); } bool IsChannelType(string settingType) { var type = Type.GetType(settingType); var fallBack = settingType.Split(',')[0]; if (fallBack.Contains(".")) { fallBack = fallBack.Split('.')[1]; } return((type?.Name ?? fallBack) == "ITextChannel"); } Data.DataModels.DiscordModels.DiscordSetting setting = null; if (module == null) { var botSetting = DiscordMetadata.BotSettings.FirstOrDefault(x => x.Key.ToLower() == key.ToLower()); if (botSetting == null) { return(ErrorResult()); } if (IsChannelType(botSetting.Type) && (currentUser.IsOwner || currentUser.Roles.Any(x => (x.DiscordPermissions & 8) != 0))) { setting = DataContext.DiscordSettings.FirstOrDefault(x => x.Server.ServerId == currentUser.Server.ServerId && x.Key == botSetting.Key); } } else { var discordModule = DiscordMetadata.Modules.FirstOrDefault(x => x.Name.ToLower() == module.ToLower()); if (discordModule == null) { return(ErrorResult()); } var moduleSetting = discordModule.Settings.Concat(discordModule.Commands.SelectMany(x => x.Settings)).FirstOrDefault(x => x.Key.ToLower() == key.ToLower()); if (moduleSetting == null) { return(ErrorResult()); } if (IsChannelType(moduleSetting.Type) && (currentUser.IsOwner || currentUser.Roles.Any(x => (x.DiscordPermissions & 8) != 0))) { setting = DataContext.DiscordSettings.FirstOrDefault(x => x.Server.ServerId == currentUser.Server.ServerId && x.Key == moduleSetting.Key); } } var _serviceBus = new QueueClient(ConfigurationManager.AppSettings["AzureSBConnString"], ConfigurationManager.AppSettings["AzureSBQueueName"]); await _serviceBus.SendAsync(new Message(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new GenericMessage(MessageCategory.DiscordTestMessage, setting.Key) { DiscordServer = discordServerId })))); return(Json(JsonConvert.SerializeObject(new { result = 1, setting.Key, setting.Value }))); }
public async Task <ActionResult> SaveSetting(string discordServer, string module, string key, string value) { var discordServerId = long.Parse(discordServer); ActionResult ErrorResult() => new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest, "User does not have required permission"); var currentUser = DataContext.DiscordUsers.FirstOrDefault(x => x.UserId == _currentUserId)?.Servers.FirstOrDefault(x => x.Server?.ServerId == discordServerId); if (currentUser == null) { return(ErrorResult()); } Data.DataModels.DiscordModels.DiscordSetting setting = null; if (module == null) { var botSetting = DiscordMetadata.BotSettings.FirstOrDefault(x => x.Key.ToLower() == key.ToLower()); if (botSetting == null) { return(ErrorResult()); } if (currentUser.IsOwner || currentUser.Roles.Any(x => (x.DiscordPermissions & 8) != 0)) { setting = DataContext.DiscordSettings.FirstOrDefault(x => x.Server.ServerId == currentUser.Server.ServerId && x.Key == botSetting.Key); if (setting == null) { setting = DataContext.DiscordSettings.Add(new Data.DataModels.DiscordModels.DiscordSetting { Server = currentUser.Server, Key = botSetting.Key }); } setting.Value = value; } } else { var discordModule = DiscordMetadata.Modules.FirstOrDefault(x => x.Name.ToLower() == module.ToLower()); if (discordModule == null) { return(ErrorResult()); } var moduleSetting = discordModule.Settings.Concat(discordModule.Commands.SelectMany(x => x.Settings)).FirstOrDefault(x => x.Key.ToLower() == key.ToLower()); if (moduleSetting == null) { return(ErrorResult()); } if (currentUser.IsOwner || currentUser.Roles.Any(x => (x.DiscordPermissions & 8) != 0)) { setting = DataContext.DiscordSettings.FirstOrDefault(x => x.Server.ServerId == currentUser.Server.ServerId && x.Key == moduleSetting.Key); if (setting == null) { setting = DataContext.DiscordSettings.Add(new Data.DataModels.DiscordModels.DiscordSetting { Server = currentUser.Server, Key = moduleSetting.Key }); } setting.Value = value; } } DataContext.SaveChanges(); var _serviceBus = new QueueClient(ConfigurationManager.AppSettings["AzureSBConnString"], ConfigurationManager.AppSettings["AzureSBQueueName"]); await _serviceBus.SendAsync(new Message(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new GenericMessage(MessageCategory.SettingUpdated, setting.Key) { DiscordServer = discordServerId })))); return(Json(JsonConvert.SerializeObject(new { result = 1, setting.Key, setting.Value }))); }