add test to print out all commands
This commit is contained in:
commit
dded60a6ef
@ -10,6 +10,7 @@ using System.Text;
|
|||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using SharedLibraryCore.Localization;
|
using SharedLibraryCore.Localization;
|
||||||
|
using IW4MAdmin.Application.Migration;
|
||||||
|
|
||||||
namespace IW4MAdmin.Application
|
namespace IW4MAdmin.Application
|
||||||
{
|
{
|
||||||
@ -42,6 +43,9 @@ namespace IW4MAdmin.Application
|
|||||||
Console.CancelKeyPress += new ConsoleCancelEventHandler(OnCancelKey);
|
Console.CancelKeyPress += new ConsoleCancelEventHandler(OnCancelKey);
|
||||||
|
|
||||||
CheckDirectories();
|
CheckDirectories();
|
||||||
|
// do any needed migrations
|
||||||
|
// todo: move out
|
||||||
|
ConfigurationMigration.MoveConfigFolder10518(null);
|
||||||
|
|
||||||
ServerManager = ApplicationManager.GetInstance();
|
ServerManager = ApplicationManager.GetInstance();
|
||||||
Localization.Configure.Initialize(ServerManager.GetApplicationSettings().Configuration()?.CustomLocale);
|
Localization.Configure.Initialize(ServerManager.GetApplicationSettings().Configuration()?.CustomLocale);
|
||||||
|
@ -53,9 +53,6 @@ namespace IW4MAdmin.Application
|
|||||||
|
|
||||||
private ApplicationManager()
|
private ApplicationManager()
|
||||||
{
|
{
|
||||||
// do any needed migrations
|
|
||||||
// todo: move out
|
|
||||||
ConfigurationMigration.MoveConfigFolder10518(Logger);
|
|
||||||
_servers = new List<Server>();
|
_servers = new List<Server>();
|
||||||
Commands = new List<Command>();
|
Commands = new List<Command>();
|
||||||
TaskStatuses = new List<AsyncStatus>();
|
TaskStatuses = new List<AsyncStatus>();
|
||||||
|
@ -30,7 +30,7 @@ namespace IW4MAdmin.Application.Migration
|
|||||||
|
|
||||||
if (!Directory.Exists(configDirectory))
|
if (!Directory.Exists(configDirectory))
|
||||||
{
|
{
|
||||||
log.WriteDebug($"Creating directory for configs {configDirectory}");
|
log?.WriteDebug($"Creating directory for configs {configDirectory}");
|
||||||
Directory.CreateDirectory(configDirectory);
|
Directory.CreateDirectory(configDirectory);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -40,7 +40,7 @@ namespace IW4MAdmin.Application.Migration
|
|||||||
|
|
||||||
foreach (var configFile in configurationFiles)
|
foreach (var configFile in configurationFiles)
|
||||||
{
|
{
|
||||||
log.WriteDebug($"Moving config file {configFile}");
|
log?.WriteDebug($"Moving config file {configFile}");
|
||||||
string destinationPath = Path.Join("Configuration", configFile);
|
string destinationPath = Path.Join("Configuration", configFile);
|
||||||
if (!File.Exists(destinationPath))
|
if (!File.Exists(destinationPath))
|
||||||
{
|
{
|
||||||
@ -51,7 +51,7 @@ namespace IW4MAdmin.Application.Migration
|
|||||||
if (!File.Exists(Path.Join("Database", "Database.db")) &&
|
if (!File.Exists(Path.Join("Database", "Database.db")) &&
|
||||||
File.Exists("Database.db"))
|
File.Exists("Database.db"))
|
||||||
{
|
{
|
||||||
log.WriteDebug("Moving database file");
|
log?.WriteDebug("Moving database file");
|
||||||
File.Move("Database.db", Path.Join("Database", "Database.db"));
|
File.Move("Database.db", Path.Join("Database", "Database.db"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
|
|||||||
_customcallbacks.gsc = _customcallbacks.gsc
|
_customcallbacks.gsc = _customcallbacks.gsc
|
||||||
README.md = README.md
|
README.md = README.md
|
||||||
RunPublishPre.cmd = RunPublishPre.cmd
|
RunPublishPre.cmd = RunPublishPre.cmd
|
||||||
|
RunPublishRelease.cmd = RunPublishRelease.cmd
|
||||||
version.txt = version.txt
|
version.txt = version.txt
|
||||||
EndProjectSection
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
|
@ -18,7 +18,9 @@ namespace Tests
|
|||||||
{
|
{
|
||||||
File.WriteAllText("test_mp.log", "test_log_file");
|
File.WriteAllText("test_mp.log", "test_log_file");
|
||||||
|
|
||||||
Manager = Program.ServerManager;
|
IW4MAdmin.Application.Localization.Configure.Initialize("en-US");
|
||||||
|
|
||||||
|
Manager = ApplicationManager.GetInstance();
|
||||||
|
|
||||||
var config = new ApplicationConfiguration
|
var config = new ApplicationConfiguration
|
||||||
{
|
{
|
||||||
@ -43,6 +45,7 @@ namespace Tests
|
|||||||
Manager.ConfigHandler.Set(config);
|
Manager.ConfigHandler.Set(config);
|
||||||
|
|
||||||
Manager.Init().Wait();
|
Manager.Init().Wait();
|
||||||
|
|
||||||
Task.Run(() => Manager.Start());
|
Task.Run(() => Manager.Start());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -188,6 +188,22 @@ namespace Tests
|
|||||||
|
|
||||||
resetEvent.Wait(5000);
|
resetEvent.Wait(5000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void PrintCommands()
|
||||||
|
{
|
||||||
|
var sb = new StringBuilder();
|
||||||
|
|
||||||
|
sb.AppendLine("|Name |Alias|Description |Requires Target|Syntax |Required Level|");
|
||||||
|
sb.AppendLine("|--------------| -----| --------------------------------------------------------| -----------------| -------------| ----------------|");
|
||||||
|
|
||||||
|
foreach (var command in Manager.GetCommands().OrderByDescending(c => c.Permission).ThenBy(c => c.Name))
|
||||||
|
{
|
||||||
|
sb.AppendLine($"|{command.Name}|{command.Alias}|{command.Description}|{command.RequiresTarget}|{command.Syntax.Substring(8).EscapeMarkdown()}|{command.Permission}|");
|
||||||
|
}
|
||||||
|
|
||||||
|
Assert.True(false, sb.ToString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
39
README.md
39
README.md
@ -5,13 +5,15 @@ _______
|
|||||||
### About
|
### About
|
||||||
**IW4MAdmin** is an administration tool for [IW4x](https://iw4xcachep26muba.onion.link/), [Pluto T6](https://forum.plutonium.pw/category/33/plutonium-t6), ~~[Pluto IW5](https://forum.plutonium.pw/category/5/plutonium-iw5)~~, and most Call of Duty® dedicated servers. It allows complete control of your server; from changing maps, to banning players, **IW4MAdmin** monitors and records activity on your server(s). With plugin support, extending its functionality is a breeze.
|
**IW4MAdmin** is an administration tool for [IW4x](https://iw4xcachep26muba.onion.link/), [Pluto T6](https://forum.plutonium.pw/category/33/plutonium-t6), ~~[Pluto IW5](https://forum.plutonium.pw/category/5/plutonium-iw5)~~, and most Call of Duty® dedicated servers. It allows complete control of your server; from changing maps, to banning players, **IW4MAdmin** monitors and records activity on your server(s). With plugin support, extending its functionality is a breeze.
|
||||||
### Download
|
### Download
|
||||||
Latest binary builds are always available at https://raidmax.org/IW4MAdmin
|
Latest binary builds are always available at:
|
||||||
|
- [RaidMax](https://raidmax.org/IW4MAdmin)
|
||||||
|
- [GitHub](https://github.com/RaidMax/IW4M-Admin/releases)
|
||||||
|
|
||||||
---
|
---
|
||||||
### Setup
|
### Setup
|
||||||
**IW4MAdmin** requires minimal effort to get up and running.
|
**IW4MAdmin** requires minimal effort to get up and running.
|
||||||
#### Prerequisites
|
#### Prerequisites
|
||||||
* [.NET Core 2.1 Runtime](https://www.microsoft.com/net/download) *or newer*
|
* [.NET Core 2.1.5 Runtime](https://www.microsoft.com/net/download) *or newer*
|
||||||
#### Installation
|
#### Installation
|
||||||
1. Install .NET Core Runtime
|
1. Install .NET Core Runtime
|
||||||
2. Extract `IW4MAdmin-<version>.zip`
|
2. Extract `IW4MAdmin-<version>.zip`
|
||||||
@ -105,6 +107,11 @@ If you wish to further customize your experience of **IW4MAdmin**, the following
|
|||||||
`ConnectionString`
|
`ConnectionString`
|
||||||
* Specifies the [connection string](https://www.connectionstrings.com/mysql/) to a MySQL server that is used instead of SQLite
|
* Specifies the [connection string](https://www.connectionstrings.com/mysql/) to a MySQL server that is used instead of SQLite
|
||||||
* Default — `null`
|
* Default — `null`
|
||||||
|
|
||||||
|
`DatabaseProvider`
|
||||||
|
* Specifies the database provider **IW4MAdmin** should use
|
||||||
|
* Possible values — `sqlite`, `mysql`, `postgresql`
|
||||||
|
* Default — `sqlite`
|
||||||
|
|
||||||
`RConPollRate`
|
`RConPollRate`
|
||||||
* Specifies (in milliseconds) how often to poll each server for updates
|
* Specifies (in milliseconds) how often to poll each server for updates
|
||||||
@ -163,9 +170,9 @@ If you wish to further customize your experience of **IW4MAdmin**, the following
|
|||||||
___
|
___
|
||||||
|
|
||||||
### Commands
|
### Commands
|
||||||
|Name |Alias|Description |Requires Target|Syntax |Required Level|
|
|Name |Alias|Description |Requires Target|Syntax |Required Level|
|
||||||
|--------------| -----| --------------------------------------------------------| -----------------| -------------| ----------------|
|
|--------------| -----| --------------------------------------------------------| -----------------| -------------| ---------------|
|
||||||
|prune|pa|demote any privileged clients that have not connected recently (defaults to 30 days)|False|!pa \<optional inactive days\>|Owner|
|
|prune|pa|demote any trusted clients that have not connected recently (defaults to 30 days)|False|!pa \<optional inactive days\>|Owner|
|
||||||
|quit|q|quit IW4MAdmin|False|!q |Owner|
|
|quit|q|quit IW4MAdmin|False|!q |Owner|
|
||||||
|rcon|rcon|send rcon command to server|False|!rcon \<commands\>|Owner|
|
|rcon|rcon|send rcon command to server|False|!rcon \<commands\>|Owner|
|
||||||
|ban|b|permanently ban a client from the server|True|!b \<player\> \<reason\>|SeniorAdmin|
|
|ban|b|permanently ban a client from the server|True|!b \<player\> \<reason\>|SeniorAdmin|
|
||||||
@ -190,24 +197,21 @@ ___
|
|||||||
|unflag|uf|Remove flag for client|True|!uf \<player\>|Moderator|
|
|unflag|uf|Remove flag for client|True|!uf \<player\>|Moderator|
|
||||||
|uptime|up|get current application running time|False|!up |Moderator|
|
|uptime|up|get current application running time|False|!up |Moderator|
|
||||||
|usage|us|get application memory usage|False|!us |Moderator|
|
|usage|us|get application memory usage|False|!us |Moderator|
|
||||||
|balance|bal|balance teams|False|!bal |Trusted|
|
|
||||||
|login|li|login using password|False|!li \<password\>|Trusted|
|
|
||||||
|warn|w|warn client for infringing rules|True|!w \<player\> \<reason\>|Trusted|
|
|warn|w|warn client for infringing rules|True|!w \<player\> \<reason\>|Trusted|
|
||||||
|warnclear|wc|remove all warnings for a client|True|!wc \<player\>|Trusted|
|
|warnclear|wc|remove all warnings for a client|True|!wc \<player\>|Trusted|
|
||||||
|admins|a|list currently connected privileged clients|False|!a |User|
|
|admins|a|list currently connected privileged clients|False|!a |User|
|
||||||
|getexternalip|ip|view your external IP address|False|!ip |User|
|
|getexternalip|ip|view your external IP address|False|!ip |User|
|
||||||
|help|h|list all available commands|False|!h \<optional commands\>|User|
|
|help|h|list all available commands|False|!h \<optional commands\>|User|
|
||||||
|mostplayed|mp|view the top 5 dedicated players on the server|False|!mp |User|
|
|nextmap|nm|view next map in rotation|False|!nm |User|
|
||||||
|owner|iamgod|claim ownership of the server|False|!iamgod |User|
|
|owner|iamgod|claim ownership of the server|False|!iamgod |User|
|
||||||
|ping|pi|get client's latency|False|!pi \<optional player\>|User|
|
|ping|pi|get client's latency|False|!pi \<optional player\>|User|
|
||||||
|privatemessage|pm|send message to other client|True|!pm \<player\> \<message\>|User|
|
|privatemessage|pm|send message to other client|True|!pm \<player\> \<message\>|User|
|
||||||
|report|rep|report a client for suspicious behavior|True|!rep \<player\> \<reason\>|User|
|
|report|rep|report a client for suspicious behavior|True|!rep \<player\> \<reason\>|User|
|
||||||
|resetstats|rs|reset your stats to factory-new|False|!rs |User|
|
|
||||||
|rules|r|list server rules|False|!r |User|
|
|rules|r|list server rules|False|!r |User|
|
||||||
|stats|xlrstats|view your stats|False|!xlrstats \<optional player\>|User|
|
|setgravatar|sg|set gravatar for webfront profile|False|!sg \<gravatar email\>|User|
|
||||||
|topstats|ts|view the top 5 players in this server|False|!ts |User|
|
|
||||||
|whoami|who|give information about yourself|False|!who |User|
|
|whoami|who|give information about yourself|False|!who |User|
|
||||||
|
|
||||||
|
|
||||||
_These commands include all shipped plugin commands._
|
_These commands include all shipped plugin commands._
|
||||||
|
|
||||||
---
|
---
|
||||||
@ -302,6 +306,11 @@ ___
|
|||||||
#### VPN Detection [Script Plugin]
|
#### VPN Detection [Script Plugin]
|
||||||
- This plugin detects if a client is using a VPN and kicks them if they are
|
- This plugin detects if a client is using a VPN and kicks them if they are
|
||||||
- To disable this plugin, delete `Plugins\VPNDetection.js`
|
- To disable this plugin, delete `Plugins\VPNDetection.js`
|
||||||
|
- Adding ClientIds to `vpnExceptionIds` will prevent a client from being kicked.
|
||||||
|
|
||||||
|
#### Shared GUID Kicker [Script Plugin]
|
||||||
|
- This plugin kicks users using a specific GUID
|
||||||
|
- GUID `F4D2C30B712AC6E3` on IW4x was packed into a torrent version of the game.
|
||||||
___
|
___
|
||||||
### Webfront
|
### Webfront
|
||||||
`Home`
|
`Home`
|
||||||
@ -432,9 +441,13 @@ python DiscordWebhook.py
|
|||||||
#### Anti-cheat
|
#### Anti-cheat
|
||||||
This is an [IW4x](https://iw4xcachep26muba.onion.link/) only feature (wider game support planned), that uses analytics to detect aimbots and aim-assist tools.
|
This is an [IW4x](https://iw4xcachep26muba.onion.link/) only feature (wider game support planned), that uses analytics to detect aimbots and aim-assist tools.
|
||||||
To utilize anti-cheat, enable it during setup **and** copy `_customcallbacks.gsc` from `userraw` into your `IW4x Server\userraw\scripts` folder.
|
To utilize anti-cheat, enable it during setup **and** copy `_customcallbacks.gsc` from `userraw` into your `IW4x Server\userraw\scripts` folder.
|
||||||
|
|
||||||
The anti-cheat feature is a work in progress and as such will be constantly tweaked and may not be 100% accurate, however the goal is to deter as many cheaters as possible from IW4x.
|
The anti-cheat feature is a work in progress and as such will be constantly tweaked and may not be 100% accurate, however the goal is to deter as many cheaters as possible from IW4x.
|
||||||
#### Database Storage
|
#### Database Storage
|
||||||
By default, all **IW4MAdmin** information is stored in `Database.db`.
|
By default, all **IW4MAdmin** information is stored in `Database.db`.
|
||||||
|
|
||||||
Should you need to reset your database, this file can simply be deleted.
|
Should you need to reset your database, this file can simply be deleted.
|
||||||
Additionally, this file should be preserved during updates to retain client information.
|
Additionally, this file should be preserved during updates to retain client information.
|
||||||
Setting the `ConnectionString` property in `IW4MAdminSettings.json` will cause **IW4MAdmin** to attempt to use a MySQL connection for database storage.
|
|
||||||
|
Setting the `ConnectionString` and `DatabaseProvider` properties in `IW4MAdminSettings.json`
|
||||||
|
will allow **IW4MAdmin** to use alternate methods for database storage.
|
12
version.txt
12
version.txt
@ -3,15 +3,23 @@ Version 2.2:
|
|||||||
-added top player stats page
|
-added top player stats page
|
||||||
-added JavaScript plugin support
|
-added JavaScript plugin support
|
||||||
-added webhook script to send notifications to discord
|
-added webhook script to send notifications to discord
|
||||||
|
-added remote log server to read log files on external machines
|
||||||
-added abillity to exempt specific clients from VPN check
|
-added abillity to exempt specific clients from VPN check
|
||||||
|
-added ability to tempban through webfront with customizable times
|
||||||
-added reserved slots for privileged users
|
-added reserved slots for privileged users
|
||||||
-added support for localized permission levels
|
-added support for localized permission levels
|
||||||
-added linux support!
|
-added linux support!
|
||||||
-added {{NEXTMAP}}, {{ADMINS}}, and {{MOSTPLAYED}} automessage tokens
|
-added {{NEXTMAP}}, {{ADMINS}}, and {{MOSTPLAYED}} automessage tokens
|
||||||
|
-added link to profile on client chat
|
||||||
|
-added shared GUID kicker plugin
|
||||||
|
-added PostgreSQL support
|
||||||
|
-updated welcome plugin to use webapi instead of hardcoded file
|
||||||
-updated event api
|
-updated event api
|
||||||
-updated webfront tweak
|
-updated webfront tweak
|
||||||
-update client search by IP
|
-update client search by IP
|
||||||
-updated event management and client authentication
|
-updated event management and client authentication
|
||||||
|
-refactor RCon queries
|
||||||
|
-cleaned up the folder structure of the application
|
||||||
-fixed some namespace discrepancies
|
-fixed some namespace discrepancies
|
||||||
-fixed parsing of certain chat messages
|
-fixed parsing of certain chat messages
|
||||||
-fixed various bugs
|
-fixed various bugs
|
||||||
@ -173,7 +181,7 @@ CHANGELOG:
|
|||||||
-fixed crash when RCON stops responding and removing a player
|
-fixed crash when RCON stops responding and removing a player
|
||||||
-version on footer
|
-version on footer
|
||||||
|
|
||||||
?VERSION: 0.8.1
|
VERSION: 0.8.1
|
||||||
CHANGELOG:
|
CHANGELOG:
|
||||||
-no longer have `world` client handle broken events
|
-no longer have `world` client handle broken events
|
||||||
-hopefully fixed an issue with clients missing connection event
|
-hopefully fixed an issue with clients missing connection event
|
||||||
@ -215,7 +223,7 @@ CHANGELOG:
|
|||||||
-stability fixes
|
-stability fixes
|
||||||
-welcome has post-fixed connection indicator
|
-welcome has post-fixed connection indicator
|
||||||
|
|
||||||
?VERSION: 0.5
|
VERSION: 0.5
|
||||||
CHANGELOG:
|
CHANGELOG:
|
||||||
-close config files after reading oops
|
-close config files after reading oops
|
||||||
-added reload command
|
-added reload command
|
||||||
|
Loading…
Reference in New Issue
Block a user