public async Task DeleteAsync(CommandContext ctx, [Description("IP.")] CustomIPFormat ip) { await this.Database.RemoveSwatIpBanAsync(ip.Content); await this.InformAsync(ctx, $"Removed an IP ban rule for {Formatter.InlineCode(ip.Content)}.", important : false); }
public async Task AddAsync(CommandContext ctx, [Description("Name.")] string name, [Description("IP.")] CustomIPFormat ip, [Description("Query port")] int queryport = 10481) { if (string.IsNullOrWhiteSpace(name)) { throw new InvalidCommandUsageException("Invalid name."); } if (queryport <= 0 || queryport > 65535) { throw new InvalidCommandUsageException("Port range invalid (must be in range [1, 65535])!"); } using (DatabaseContext db = this.Database.CreateContext()) { var newServer = DatabaseSwatServer.FromIP(ip.Content, queryport, name); if (db.SwatServers.Any(s => s.Name == name || (s.IP == newServer.IP && s.JoinPort == newServer.JoinPort && s.QueryPort == newServer.QueryPort))) { throw new CommandFailedException("A server with such name/IP is already listed!"); } db.SwatServers.Add(newServer); await db.SaveChangesAsync(); } await this.InformAsync(ctx, "Server added. You can now query it using the name provided.", important : false); }
public async Task AliasAsync(CommandContext ctx, [Description("Player alias.")] string alias, [Description("Player IP.")] CustomIPFormat ip) { using (DatabaseContext db = this.Database.CreateContext()) { DatabaseSwatPlayer player = db.SwatPlayers .Include(p => p.DbAliases) .Include(p => p.DbIPs) .AsEnumerable() .FirstOrDefault(p => p.IPs.Contains(ip.Content)); if (player is null) { throw new CommandFailedException($"A player with IP {Formatter.Bold(ip.Content)} is not present in the database!"); } if (alias.Equals(player.Name, StringComparison.InvariantCultureIgnoreCase)) { throw new InvalidCommandUsageException("Alias cannot be same as player's main name."); } if (!player.Aliases.Contains(alias)) { player.DbAliases.Add(new DatabaseSwatPlayerAlias { Alias = alias, PlayerId = player.Id }); } db.SwatPlayers.Update(player); await db.SaveChangesAsync(); await this.InformAsync(ctx, $"Added an alias {Formatter.Bold(alias)} for player {Formatter.Bold(player.Name)}.", important : false); } }
public async Task SearchIpAsync(CommandContext ctx, [Description("IP or range.")] CustomIPFormat ip, [Description("Number of results")] int amount = 10) { if (amount < 1 || amount > 100) { throw new InvalidCommandUsageException("Amount of results to fetch is out of range [1, 100]."); } List <DatabaseSwatPlayer> matches; using (DatabaseContext db = this.Database.CreateContext()) { matches = db.SwatPlayers .Include(p => p.DbAliases) .Include(p => p.DbIPs) .AsEnumerable() .Where(p => p.IPs.Any(dbip => dbip.StartsWith(ip.Content))) .ToList(); } if (!matches.Any()) { throw new CommandFailedException("No results."); } await ctx.SendCollectionInPagesAsync($"Search matches for {ip.Content}", matches, p => p.Stringify(), this.ModuleColor, 1); }
public async Task DeleteAsync(CommandContext ctx, [Description("IP or range.")] CustomIPFormat ip) { await this.Database.RemoveSwatIpEntryAsync(ip.Content); await this.InformAsync(ctx, $"Removed {Formatter.Bold(ip.Content)} from database.", important : false); }
public async Task AddAsync(CommandContext ctx, [Description("Player name.")] string name, [Description("IP.")] CustomIPFormat ip, [RemainingText, Description("Reason for ban.")] string reason = null) { await this.Database.AddSwatIpBanAsync(ip.Content, name, reason); await this.InformAsync(ctx, $"Added a ban entry for {Formatter.Bold(name)} ({Formatter.InlineCode(ip.Content)})", important : false); }
public Task QueryAsync(CommandContext ctx, [Description("Server IP.")] CustomIPFormat ip, [Description("Query port")] int queryport = 10481) { if (queryport <= 0 || queryport > 65535) { throw new InvalidCommandUsageException("Port range invalid (must be in range [1, 65535])!"); } var server = DatabaseSwatServer.FromIP(ip.Content, queryport); return(this.QueryAndPrintInfoAsync(ctx, server)); }
public async Task AddAsync(CommandContext ctx, [Description("Player name.")] string name, [Description("IP.")] CustomIPFormat ip, [RemainingText, Description("Additional info.")] string info = null) { if (info?.Length > 120) { throw new InvalidCommandUsageException("Info cannot exceed 120 characters."); } await this.Database.AddSwatIpEntryAsync(ip.Content, name, info); await this.InformAsync(ctx, $"Added a database entry for {Formatter.Bold(name)} ({Formatter.InlineCode(ip.Content)})", important : false); }
public async Task DeleteAsync(CommandContext ctx, [Description("IP.")] CustomIPFormat ip) { using (DatabaseContext db = this.Database.CreateContext()) { DatabaseSwatPlayer player = db.SwatPlayers .Include(p => p.DbIPs) .FirstOrDefault(p => p.IPs.Contains(ip.Content)); if (!(player is null) && player.IsBlacklisted) { player.IsBlacklisted = false; db.SwatPlayers.Update(player); } await db.SaveChangesAsync(); } await this.InformAsync(ctx, $"Removed an IP ban rule for {Formatter.InlineCode(ip.Content)}.", important : false); }
public async Task SearchIpAsync(CommandContext ctx, [Description("IP.")] CustomIPFormat ip, [Description("Number of results")] int amount = 10) { if (amount < 1 || amount > 100) { throw new InvalidCommandUsageException("Amount of results to fetch is out of range [1, 100]."); } IReadOnlyList <SwatDatabaseEntry> res = await this.Database.SwatDatabaseIpSearchAsync(ip.Content, amount); await ctx.SendCollectionInPagesAsync( $"Search matches for {ip.Content}", res, entry => $"{Formatter.InlineCode(entry.Ip)} | {Formatter.Bold(entry.Name)} | {Formatter.Italic(entry.AdditionalInfo ?? "(no details)")}", DiscordColor.Black ); }
public async Task AddAsync(CommandContext ctx, [Description("Player name.")] string name, [Description("IP.")] CustomIPFormat ip, [RemainingText, Description("Additional info.")] string info = null) { using (DatabaseContext db = this.Database.CreateContext()) { DatabaseSwatPlayer player = db.SwatPlayers .Include(p => p.DbIPs) .Include(p => p.DbAliases) .AsEnumerable() .FirstOrDefault(p => p.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase) || p.IPs.Contains(ip.Content)); if (player is null) { var toAdd = new DatabaseSwatPlayer { Info = info, IsBlacklisted = false, Name = name }; toAdd.DbIPs.Add(new DatabaseSwatPlayerIP { PlayerId = toAdd.Id, IP = ip.Content }); db.SwatPlayers.Add(toAdd); } else { if (player.Name != name && !player.Aliases.Contains(name)) { player.DbAliases.Add(new DatabaseSwatPlayerAlias { Alias = name, PlayerId = player.Id }); } if (!player.IPs.Contains(ip.Content)) { player.DbIPs.Add(new DatabaseSwatPlayerIP { PlayerId = player.Id, IP = ip.Content }); } db.SwatPlayers.Update(player); } await db.SaveChangesAsync(); } await this.InformAsync(ctx, $"Added a database entry for {Formatter.Bold(name)} ({Formatter.InlineCode(ip.Content)})", important : false); }
public async Task AddAsync(CommandContext ctx, [Description("Name.")] string name, [Description("IP.")] CustomIPFormat ip, [Description("Query port")] int queryport = 10481) { if (string.IsNullOrWhiteSpace(name)) { throw new InvalidCommandUsageException("Invalid name."); } if (queryport <= 0 || queryport > 65535) { throw new InvalidCommandUsageException("Port range invalid (must be in range [1, 65535])!"); } await this.Database.AddSwatServerAsync(SwatServer.FromIP(ip.Content, queryport, name)); await this.InformAsync(ctx, "Server added. You can now query it using the name provided.", important : false); }
public async Task StartCheckAsync(CommandContext ctx, [Description("IP.")] CustomIPFormat ip, [Description("Query port")] int queryport = 10481) { if (queryport <= 0 || queryport > 65535) { throw new InvalidCommandUsageException("Port range invalid (must be in range [1, 65535])!"); } if (SwatSpaceCheckService.IsListening(ctx.Channel)) { throw new CommandFailedException("Already checking space in this channel!"); } var server = SwatServer.FromIP(ip.Content, queryport); SwatSpaceCheckService.AddListener(server, ctx.Channel); await this.InformAsync(ctx, $"Starting space listening on {server.Ip}:{server.JoinPort}... Use command {Formatter.Bold("swat stopcheck")} to stop the check.", important : false); }
public async Task QueryAsync(CommandContext ctx, [Description("Server IP.")] CustomIPFormat ip, [Description("Query port")] int queryport = 10481) { if (queryport <= 0 || queryport > 65535) { throw new InvalidCommandUsageException("Port range invalid (must be in range [1, 65535])!"); } var server = SwatServer.FromIP(ip.Content, queryport); SwatServerInfo info = await SwatServerInfo.QueryIPAsync(server.Ip, server.QueryPort); if (info != null) { await ctx.RespondAsync(embed : info.ToDiscordEmbed(this.ModuleColor)); } else { await this.InformFailureAsync(ctx, "No reply from server."); } }
public async Task DeleteAsync(CommandContext ctx, [Description("IP or range.")] CustomIPFormat ip) { using (DatabaseContext db = this.Database.CreateContext()) { DatabaseSwatPlayer player = db.SwatPlayers.Include(p => p.DbIPs).FirstOrDefault(p => p.IPs.Contains(ip.Content)); if (!(player is null)) { player.DbIPs.Remove(new DatabaseSwatPlayerIP { IP = ip.Content, PlayerId = player.Id }); if (player.DbIPs.Any()) { db.SwatPlayers.Update(player); } else { db.SwatPlayers.Remove(player); } } await db.SaveChangesAsync(); } await this.InformAsync(ctx, $"Removed {Formatter.Bold(ip.Content)} from the database.", important : false); }
public async Task AddAsync(CommandContext ctx, [Description("Player name.")] string name, [Description("IP.")] CustomIPFormat ip, [RemainingText, Description("Reason for ban.")] string reason = null) { using (DatabaseContext db = this.Database.CreateContext()) { DatabaseSwatPlayer player = db.SwatPlayers.FirstOrDefault(p => p.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase)); if (player is null) { db.SwatPlayers.Add(new DatabaseSwatPlayer { Info = reason, IsBlacklisted = true }); } else { player.IsBlacklisted = true; db.SwatPlayers.Update(player); } await db.SaveChangesAsync(); } await this.InformAsync(ctx, $"Added a ban entry for {Formatter.Bold(name)} ({Formatter.InlineCode(ip.Content)})", important : false); }
public Task AddAsync(CommandContext ctx, [Description("IP.")] CustomIPFormat ip, [Description("Player name.")] string name, [RemainingText, Description("Additional info.")] string reason = null) => this.AddAsync(ctx, name, ip, reason);
public Task ExecuteGroupAsync(CommandContext ctx, [Description("IP or range.")] CustomIPFormat ip, [Description("Number of results")] int amount = 10) => this.SearchIpAsync(ctx, ip, amount);
public Task AliasAsync(CommandContext ctx, [Description("Player IP.")] CustomIPFormat ip, [Description("Player alias.")] string alias) => this.AliasAsync(ctx, alias, ip);
public Task AddAsync(CommandContext ctx, [Description("IP.")] CustomIPFormat ip, [Description("Name.")] string name, [Description("Query port")] int queryport = 10481) => this.AddAsync(ctx, name, ip, queryport);