public async Task <IActionResult> CleanChatSettings(ulong guildId, [FromServices] IDiscordGuildService guildService) { var viewModel = new CleanChatSettingsViewModel { Enabled = false, GuildId = guildId, CleanChatChannels = new List <ulong>() }; var settings = await _cleanchatSettingsService.GetSettingsByGuild(guildId, x => x.Channels); if (settings == null) { return(View(viewModel)); } viewModel.GuildId = settings.GuildId; viewModel.Enabled = settings.Enabled; viewModel.CleanChatChannels = settings.Channels?.Select(c => c.Id).ToList(); viewModel.MessageDuration = settings.MessageDuration; return(View(viewModel)); }
public async Task <IActionResult> StreamAnnouncerSettings(ulong guildId, [FromServices] IDiscordGuildService guildService) { var channels = await guildService.GetChannels(guildId); var viewModel = new StreamAnnouncerSettingsViewModel { Channels = new SelectList(channels.FilterChannelType(0), "Id", "Name") }; var settings = await _streamAnnouncerSettingsService.GetSettingsByGuild(guildId); if (settings == null) { return(View(viewModel)); } viewModel.ChannelId = settings.AnnouncementChannelId; viewModel.Enabled = settings.Enabled; viewModel.RemoveMessages = settings.RemoveMessages; return(View(viewModel)); }
public RemembotController(IEntityService <RecurringReminderMessage> reminderService, IDiscordGuildService guildService) { _reminderService = reminderService; _guildService = guildService; }
public async Task <IActionResult> StreamerSettings(ulong guildId, StreamerSettingsViewModel viewModel, [FromServices] IBot bot, [FromServices] IDiscordGuildService guildService) { var botRolePosition = bot.GetBotRoleHierarchy(guildId); var roles = await guildService.GetRoles(guildId); var selectedRolePosition = roles.FirstOrDefault(r => r.Id == viewModel.RoleId)?.Position; // Discord bots cannot assign to roles that are higher then them in the hierarchy. if (selectedRolePosition > botRolePosition) { ModelState.AddModelError("RolePosition", "The bots managed role must be positioned higher then the selected role"); // All channels in guild. var channels = await guildService.GetChannels(guildId); // Text channels in guild. var textChannels = channels.Where(x => x.Type == 0).ToList(); viewModel.Channels = new SelectList(textChannels, "Id", "Name"); viewModel.Roles = new SelectList(roles.RemoveManaged(), "Id", "Name"); return(View(viewModel)); } var settings = await _streamAnnouncerChannelSettingsService.Find(viewModel.ChannelId); // Remember if there were settings in db, as settings will be populated later if they aren't. var isSettingsInDb = settings != null; var saveSettingsTasks = new List <Task> { _streamAnnouncerSettingsService.SaveSettings(new StreamerSettings { GuildId = guildId, Enabled = viewModel.Enabled, StreamerRoleEnabled = viewModel.StreamerRoleEnabled, RoleId = viewModel.RoleId }) }; // Save general module settings to the database if (!isSettingsInDb) { settings = new StreamerChannelSettings { GuildId = guildId, ChannelId = viewModel.ChannelId } } ; settings.RemoveMessage = viewModel.ChannelSettings.RemoveMessages; // Save specific channel settings to the database. if (viewModel.ChannelSettings.Enabled) { saveSettingsTasks.Add(!isSettingsInDb ? _streamAnnouncerChannelSettingsService.Create(settings) : _streamAnnouncerChannelSettingsService.Update(settings)); } else { if (isSettingsInDb) { saveSettingsTasks.Add(_streamAnnouncerChannelSettingsService.Remove(settings)); } } await Task.WhenAll(saveSettingsTasks.ToArray()); return(RedirectToAction("Index")); }
public PermissionService(IDiscordGuildService discordGuildService) { _discordGuildService = discordGuildService; }
public async Task <IActionResult> StreamerSettings(ulong guildId, StreamerSettingsViewModel viewModel, [FromServices] IBot bot, [FromServices] IDiscordGuildService guildService) { var botRolePosition = bot.GetBotRoleHierarchy(guildId); var roles = await guildService.GetRoles(guildId); var selectedRolePosition = roles.FirstOrDefault(r => r.Id == viewModel.RoleId)?.Position; // Discord bots cannot assign to roles that are higher then them in the hierarchy. if (selectedRolePosition > botRolePosition) { ModelState.AddModelError("RolePosition", "The bots managed role must be positioned higher than the selected role"); // All channels in guild. var channels = await guildService.GetChannels(guildId); // Text channels in guild. var textChannels = channels.Where(x => x.Type == 0).ToList(); viewModel.Channels = new SelectList(textChannels, "Id", "Name"); viewModel.Roles = new SelectList(roles.RemoveManaged(), "Id", "Name"); return(View(viewModel)); } var moduleSettings = await _streamAnnouncerSettingsService.GetSettingsByGuild(guildId); var saveSettingsTasks = new List <Task>(); // If the guild doesn't already have a settings DB entry, we want to add one before we do anything else. // Running that operation along side adding individual channel settings risks throwing an FK exception. if (moduleSettings == null) { var streamerSettings = new StreamerSettings { GuildId = guildId, Enabled = viewModel.Enabled, StreamerRoleEnabled = viewModel.StreamerRoleEnabled, RoleId = viewModel.RoleId, WhiteListedRoleIds = new List <WhiteListedRole>() }; if (viewModel.WhiteListedRoleIds != null) { streamerSettings.WhiteListedRoleIds = new List <WhiteListedRole>(viewModel.WhiteListedRoleIds .Select(r => new WhiteListedRole { RoleId = r })); } await _streamAnnouncerSettingsService.SaveSettings(streamerSettings); } else { // Clear all white listed roles from the database var whiteListedRoles = await _whiteListedRoleEntityService.Get(w => w.GuildId == guildId); if (whiteListedRoles != null) { await _whiteListedRoleEntityService.RemoveBulk(whiteListedRoles); } if (viewModel.WhiteListedRoleIds != null) { await _whiteListedRoleEntityService.CreateBulk(viewModel.WhiteListedRoleIds.Select(r => new WhiteListedRole { RoleId = r, GuildId = guildId })); } saveSettingsTasks.Add(_streamAnnouncerSettingsService.SaveSettings(new StreamerSettings { GuildId = guildId, Enabled = viewModel.Enabled, StreamerRoleEnabled = viewModel.StreamerRoleEnabled, RoleId = viewModel.RoleId })); } // Value defaults to 0, if the value is 0, EF will try to auto increment the ID, throwing an error. if (viewModel.ChannelId != 0) { // Settings for the specified channel of a guild. var settings = await _streamAnnouncerChannelSettingsService.Find(viewModel.ChannelId); // Remember if there were settings in db, as settings will be populated later if they aren't. var isSettingsInDb = settings != null; // Save general module settings to the database if (!isSettingsInDb) { settings = new StreamerChannelSettings { GuildId = guildId, ChannelId = viewModel.ChannelId } } ; settings.RemoveMessage = viewModel.ChannelSettings.RemoveMessages; // Save specific channel settings to the database. if (viewModel.ChannelSettings.Enabled) { saveSettingsTasks.Add(!isSettingsInDb ? _streamAnnouncerChannelSettingsService.Create(settings) : _streamAnnouncerChannelSettingsService.Update(settings)); } else { if (isSettingsInDb) { saveSettingsTasks.Add(_streamAnnouncerChannelSettingsService.Remove(settings)); } } } await Task.WhenAll(saveSettingsTasks.ToArray()); return(RedirectToAction("Index")); }
public DashboardController(IDiscordUserGuildService userGuildService, IDiscordGuildService guildService, IBot bot) { _userGuildService = userGuildService; _guildService = guildService; _bot = bot; }
public UnMuteExpiredMutesJob(IMediator mediator, IDiscordGuildService service, ILogger <UnMuteExpiredMutesJob> logger) { _logger = logger; _mediator = mediator; _service = service; }
public async Task <IActionResult> StreamerRoleSettings(ulong guildId, StreamerRoleSettingsViewModel viewModel, [FromServices] IBot bot, [FromServices] IDiscordGuildService guildService) { var botRolePosition = bot.GetBotRoleHierarchy(guildId); var roles = await guildService.GetRoles(guildId); var selectedRolePosition = roles.FirstOrDefault(r => r.Id == viewModel.RoleId)?.Position; // Discord bots cannot assign to roles that are higher then them in the hierarchy. if (selectedRolePosition > botRolePosition) { ModelState.AddModelError("RolePosition", "The bots managed role must be positioned higher then the selected role"); viewModel.Roles = new SelectList(roles.RemoveManaged(), "Id", "Name"); return(View(viewModel)); } // Save the settings to the database await _streamerRoleSettingsService.SaveSettings(new StreamerRoleSettings { GuildId = guildId, Enabled = viewModel.Enabled, RoleId = viewModel.RoleId }); return(RedirectToAction("Index")); }
public async Task <IActionResult> NewPoll([FromServices] IDiscordGuildService guildService, [FromServices] IMessageService messageService, ulong guildId, NewPollViewModel viewModel, List <string> options) { // All channels for guild. var channels = await guildService.GetChannels(guildId); // Text channels for guild. var textChannels = channels.Where(x => x.Type == (int)ChannelType.Text).ToList(); // Authorization - make sure channel belongs to the guild (prevents exploitation by providing a channel that isn't theirs, if they're authorized). // Note - this should be extracted into a seperate web filter. if (textChannels.FirstOrDefault(x => x.Id == viewModel.ChannelId) == null) { ModelState.AddModelError("All", "You are not authorized to perform this action."); viewModel.Channels = new SelectList(textChannels, "Id", "Name"); return(View(viewModel)); } var validOptions = options.Where(x => !string.IsNullOrWhiteSpace(x)).ToList(); // Make sure user supplied valid no of options if (validOptions.Count < 2 || validOptions.Count > ModuleConstants.TotalOptions) { ModelState.AddModelError("All", $"Please provide between 2 and {ModuleConstants.TotalOptions} valid options."); viewModel.Channels = new SelectList(textChannels, "Id", "Name"); return(View(viewModel)); } if (!ModelState.IsValid) { return(View(viewModel)); } var poll = new StringBuilder(); // Add poll title. poll.Append(":small_blue_diamond: " + viewModel.Title + Environment.NewLine); var discordNumbers = MessageService.DiscordNumberEmotes; // Add options to poll. for (var i = 0; i < validOptions.Count; i++) { poll.Append($"{discordNumbers[i + 1]} {validOptions[i]}{Environment.NewLine}"); } // Post message and get message details. var message = await messageService.Post(viewModel.ChannelId, poll.ToString()); // Create poll settings entry for guild in db, if doesn't exist. if (await _entityServicePollSettings.Find(guildId) == null) { await _entityServicePollSettings.Create(new PollSettings() { GuildId = guildId }); } // Save poll to database await _entityServicePoll.Create(new Poll() { ChannelId = viewModel.ChannelId, MessageId = message.Id, PollTitle = viewModel.Title, GuildId = guildId }); // Add reactions to message to act as voting buttons. for (var i = 1; i < validOptions.Count + 1; i++) { await messageService.AddReaction(message, new Emoji(discordNumbers[i])); } return(RedirectToAction("Index")); }