Example #1
0
        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 })));
        }
Example #2
0
        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 })));
        }