Giter Club home page Giter Club logo

pavlovrconwebserver's Introduction

PavlovRconWebserver

GitHub All Releases GitHub tag (latest by date) Platforms CodeFactor CircleCI Discord
Pictures:
Index Servers PavlovServerSystemSettings PavlovServerSettings MapsSelector Rcon Commands ChooseItem.png IndexMapCycleView.png LeaderBoard.png

Running Instances:

Attention:

This software can easily manage your pavlov servers. This also means deleting.
Please proceed only if you know what you are doing.
Otherwise ask for help first:
https://github.com/devinSpitz/PavlovRconWebserver/discussions

Features:

newly added:

  • GDPR stuff added so you can download and remove your data from the system.
  • Added request limiter
  • steam login added (*be aware that you need to change the service and nginx redirect for this to work in chrome and other browsers in the future (check the nginx section))
  • Added limited Shack Support
  • Show pavlov server logs in the gui
  • Added TTT Commands
  • fixed some stuff in the matchmaking but its still WIP
  • You need to create a appsettings.Production.json now. Copy past from appsettings.Development.json.
  • Arch and subfolder together is not supported. Just leave this option in the appsettings empty or a /
  • Autobalance is broken right now will check that in the next version
  • Added leaderboard per server
  • ApiKey support
  • Auto Balance (default disabled)
  • Save Stats (default disabled)
  • new Game ini settings
  • Map view on index page so visitors can see the map cycle
  • Premium Role: The costume clown is now only available for premium members or higher roles.(Global roles with access to Clown: Premium,OnPremise,ServerRent,Mod,Captain,Admin)
  • OnPremise Role which administers an ssh server itself and can therefore also administer its own servers etc. via the platform.
  • ServerRent Role which can administer a separate pavlov server in a limited way.
  • Changed The Captain and Mod rights so they can not handle onPremise and ServerRent servers.
  • Team roles only are active in the Team Manager and Match Handler or in the match itself.
  • 1 KeyFile per SSh server can be store in the Database(be aware breaking change to before!)
  • Index now shows all server online and there stats.
  • The ssh user now should be the steam user. (Root user can fail in code)
  • Root user is needed to create a pavlov server(will not be saved!). Need root to be able to make the .service file.
  • Users can now change there skin
  • Server handle Stop and Start
  • Chosen maps not only have effect on deleting also has effect on the server settings.
  • You can edit the server settings now
  • The system knows which state the server of a pavlov server has
  • You can now edit the Mod and White list of a pavlov server
  • Mod on a pavlov server now also means Mod in case of commands for this single server in the GUI
  • Users are now no longer able to inspect server where they are not a mod. (they can get the infos from a website which gets the HTML from /PublicViewLists/PlayersFromServers/*)
  • Logs 24h for errors and stuff
  • Better notification when something happens in the background that could interrupt your work

older:

  • Player list with stats etc.
  • Ban list over time. You can now ban People for a specific time.
  • You can select maps that will not get deleted, when the cache will get cleaned.
  • Maps will be deleted every day on 3 o clock in the morning(so the cache will not overflow on your server)
  • Maps from steam will be crawled every day on 3 o clock in the morning(While this is happening the server may have a lot to do and will answer with some delay)
  • the selected maps from the server will be first in the map selector
  • Telnet direct connections are not supported anymore cause i have to clean the maps from the cache!
  • Swagger is only available in development mode: http://localhost:5001/swagger and without registration / Thats why its disabled on production

Offer:

That applies to all offers:

  • The primary aspect of these offers is the support of the developer with a consideration (OnPromise or ServerRent) without guarantee.
  • The server is located in Frankfurt/Germany.
  • No virtualization.
  • The service can be reached at: https://pavlov.spitzen.solutions
  • The arrangement can be canceled every month from your side or my side and you pay in front. That means if you don't pay for a month your account on the service and the server will get removed from the service within 30 days.

Offers:

  1. I can help installing or updating the software. If you want more information: https://github.com/sponsors/devinSpitz
  2. you can now rent a 30 Slot Pavlov server(No Shack) from me for 30$/โ‚ฌ a month:
    2.1 You can administrate the server with this software as a user in the ServerRent role.
    2.2 You will get support with normally answer within 2 working days. Timezone Europe/Zurich from 9:00 to 16:00 Mon.-Fri.
    2.3 You can appoint mods and configure maps yourself etc.
    Rent 2.4 There is no uptime guarantee and no other guarantee. This package mainly supports this software.
    2.5 If you are interested just contact: [email protected]
  3. you can now get an account with the on Promise Role for 30$/โ‚ฌ a month.
    3.1 You will need your own Debian/Ubuntu server that has a static IP.
    3.2 You will get support with normally answer within 2 working days. Time zone Europe/Zurich from 9:00 to 16:00 Mon-Fri.
    3.3 You only have to enter your ssh login data and install steamcmd to create new Pavlov servers with this software.
    3.4 You can then also appoint mods yourself etc. and everything that a rental can do.
    3.5 There is no uptime guarantee and no other guarantee. This package mainly supports this software.
    3.6 If you are interested just contact: [email protected]
    3.7 You can also edit the Game Ini settings: OnPremise

Auth:

Auth logic with priority(with added multiple options):

  1. ssh key + username + passphrase
  2. ssh key + username
  3. ssh username pass

Default users:
User: admin
pw: A2345a$

Note:

  • If you build it by yourself be sure to add the database.db file and the other required folders(see release) before start the application.
  • The old user and roles system ist not compatible to the new one. So you have to restart with a new database, if you are from the version 0.0.1!
  • Telnet direct connections are not supported anymore cause i have to clean the maps from the cache!

Help:

  1. Known issues found by makupi/pavlov-bot: https://github.com/makupi/pavlov-bot#known-issues-with-rcon-that-bot-cant-fix
  2. If you are had KeyFiles before 0.0.3 you need to restart with the defaultDb or drop the tables sshserver and pavlovServer with Lite DB Studio https://github.com/mbdavid/LiteDB.Studio
  3. If you are coming from an older version then you have to copy the database to the new location. ./Database/Database.db

Install Linux:

  1. Download newest build in the releases https://github.com/devinSpitz/PavlovRconWebserver/releases
  2. unzip the zip archive: unzip PavlovRconBuildLinux.zip
  3. Go into the folder and to Build Linux step 5

Build Linux:

Requirements:

  1. dotnet sdk 5.0: https://dotnet.microsoft.com/download/dotnet/5.0
  2. git

Steps :

  1. git clone https://github.com/devinSpitz/PavlovRconWebserver.git
  2. cd PavlovRconWebserver/PavlovRconWebserver
  3. (without brackets) dotnet publish -c release -o "Full build path" --runtime linux-x64 --self-contained true --framework net5.0
  4. copy the default database to your "Full build path"/Database/Database.db. 4.5 copy the appsettings.Development.json to "Full build path"/appsettings.Production.json if its not already exist.
  5. create a service: sudo nano /etc/systemd/system/pavlovRconWebserver.service
  6. Content (without brackets) and replace your variables:
        
[Unit]
Description=PavlovWebServer
 
[Service]
WorkingDirectory="Full build path"
ExecStart="Full build path"/PavlovRconWebserver --urls=https://*:5001/
Restart=always
RestartSec=10 # Restart service after 10 seconds if dotnet service crashes
SyslogIdentifier=dotnet-core-app
User=steam
Environment=ASPNETCORE_ENVIRONMENT=Production
#Environment=ASPNETCORE_ENVIRONMENT=Development
[Install]
WantedBy=multi-user.target
  1. sudo systemctl enable pavlovRconWebserver
  2. sudo systemctl start pavlovRconWebserver
  3. sudo apt install nginx
  4. sudo nano /etc/nginx/sites-available/default
  5. Replace content (without brackets) and replace your variables:
server {
        listen 80 default_server;
        server_name "Domain/subdomain";
    location / {
        proxy_pass         https://localhost:5001;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_read_timeout 300;
        proxy_connect_timeout 300;
        proxy_send_timeout 300;
  }
}
  1. sudo apt-get install certbot python-certbot-nginx
  2. sudo certbot --nginx -d "Domain/subdomain"
  3. Go to your Domain/subdomain
  4. Login as Admin
  5. Change password
  6. Goto Hangfire -> Recurring Jobs -> Start: SteamService.CrawlSteamMaps
    Rent
  7. Use the software as you like.

Docker:

  1. Just wget the docker-compose.yml file
  2. In the same folder where you downloaded the file execute: docker-compose up -d
  3. For lets encrypt etc. i would use something like: https://github.com/nginx-proxy/docker-gen

Install Windows:

  1. Download newest build in the releases https://github.com/devinSpitz/PavlovRconWebserver/releases
  2. unzip the zip archive: PavlovRconBuildWindows.zip
  3. Go into the folder and to Build Windows step 6

Build Windows:

Requirements:

  1. Install dotnet sdk 5.0: https://dotnet.microsoft.com/download/dotnet/5.0
  2. git CLI: https://git-scm.com/download/win

Steps:

  1. open the git cli wherever you want to download the files.
  2. git clone https://github.com/devinSpitz/PavlovRconWebserver.git
  3. goto to created directory and then to this folder: PavlovRconWebserver/PavlovRconWebserver
  4. open a Powershell and enter the command: dotnet publish -c release -o "Full build path" --runtime win-x64 --self-contained true --framework net5.0
  5. copy the default database to your "Full build path"\Database\Database.db. 5.5 copy the appsettings.Development.json to "Full build path"/appsettings.Production.json if its not already exist.
  6. run the PavlovRconWebserver.exe in the "Full build path"
  7. Please don't use it public like this. You need at least a SSL Certificate. Use something like that: https://certbot.eff.org/lets-encrypt/windows-other.html
  8. After you have your ssl done go to your Domain/subdomain
  9. Login as Admin
  10. Change password
  11. Goto Hangfire -> Recurring Jobs -> Start: SteamService.CrawlSteamMaps
    Rent
  12. Use the software as you like.

Any problem or bug?:

Read and create issues: https://github.com/devinSpitz/PavlovRconWebserver/issues

Want to discuss, asking questions or having trouble installing the software?:

Read and write here: https://github.com/devinSpitz/PavlovRconWebserver/discussions

Todo:

Read: https://github.com/devinSpitz/PavlovRconWebserver/projects

Donate:

Feel free to support my work by donating:

Donate with PayPal

Business:

For business inquiries please use:

[email protected]

Credits:

LiteDB.Identity
Implementation of AspNetCore.Identity for LiteDB database engine.
https://github.com/quicksln/LiteDB.Identity

Serilog
This package routes ASP.NET Core log messages through Serilog, so you can get information about ASP.NET's internal operations written to the same Serilog sinks as your application events.
https://github.com/serilog/serilog-aspnetcore

Mock & Automock
An automocking container for Moq. Use this if you're invested in your IoC container and want to decouple your unit tests from changes to their constructor arguments. https://github.com/moq/Moq.AutoMocker

Coverlet
Cross platform code coverage for .NET
https://github.com/coverlet-coverage/coverlet

ToastNotification
ToastNotification is a Minimal & Elegant Toast Notification Package for ASP.NET Core Web Applications that can be invoked via C#. Compatible with ASP.NET Core 3.1 and .NET 5.
https://github.com/aspnetcorehero/ToastNotification

Fluent Assertions
A very extensive set of extension methods that allow you to more naturally specify the expected outcome of a TDD or BDD-style unit tests. Targets .NET Framework 4.7, .NET Core 2.1 and 3.0, as well as .NET Standard 2.0 and 2.1. Supports the unit test frameworks MSTest2, NUnit3, XUnit2, MSpec, and NSpec3. https://github.com/fluentassertions/fluentassertions

Json.NET
Json.NET is a popular high-performance JSON framework for .NET
https://www.newtonsoft.com/json

SSH.NET
SSH.NET is a Secure Shell (SSH) library for .NET, optimized for parallelism.
https://github.com/sshnet/SSH.NET/

Boostrap:
The most popular front-end framework for developing responsive, mobile first projects on the web.
https://getbootstrap.com

Datatables:
Add advanced interaction controls to your HTML tables the free & easy way
https://github.com/DataTables/Dist-DataTables

Html Agility Pack (HAP)
Html Agility Pack (HAP) is a free and open-source HTML parser written in C# to read/write DOM and supports plain XPATH or XSLT. It is a .NET code library that allows you to parse "out of the web" HTML files. https://github.com/zzzprojects/html-agility-pack

Hangfire
An easy and reliable way to perform fire-and-forget, delayed and recurring, long-running, short-running,
CPU or I/O intensive tasks inside ASP.NET applications. No Windows Service / Task Scheduler required. Even ASP.NET is not required. Backed by Redis, SQL Server, SQL Azure or MSMQ. This is a .NET alternative to Sidekiq, Resque and Celery.
https://www.hangfire.io/

Telnet
A minimal open-source C# 3.5/4.0/4.5/4.5.1/NetStandard1.6/NetStandard2.0 Telnet client library implementation; just enough to send simple text commands and retrieve the response.
https://github.com/9swampy/Telnet/

Font Awesome
Get vector icons and social logos on your website with Font Awesome, the web's most popular icon set and toolkit.
https://fontawesome.com/

Bootswatch
Free themes for Bootstrap
https://bootswatch.com/

Xunit
xUnit.net is a free, open source, community-focused unit testing tool for the .NET Framework.
https://github.com/xunit/xunit

Swagger tools for documenting APIs built on ASP.NET Core
https://github.com/domaindrivendev/Swashbuckle.AspNetCore

LiteDB.Identity.Async
Make LiteDB.Identity async
https://github.com/devinSpitz/LiteDB.Identity.Async

Serilog.Sinks.LiteDb.Async
Serilog event sink that writes to LiteDb database
https://github.com/devinSpitz/Serilog.Sinks.LiteDb.Async

Thanks to all this people who worked for this nuget packages. Without that it wouldn't be possible to do this.

Powered by Spitz IT Solutions

For commercial licences you can find more information here: https://github.com/sponsors/devinSpitz

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

pavlovrconwebserver's People

Contributors

devinspitz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

pavlovrconwebserver's Issues

There are new commands and skins

implement

AddMod {UniqueID} -Adds a mod ID to the mods.txt file
RemoveMod {UniqueID} -Removes a mod ID to the mods.txt file
ItemList -Shows available items for GiveItem command

skins:
clown, prisoner, naked, farmer, russian, nato, us, soviet, german

Users / Servers

Add servers to users so they can only send commands to server who are in there list.

Suggestions for improvement

Hello dear devinSpitz,

my suggestion for improvement would be a ban list and time management, for example. 1 minute ban, 5 min, 10 min, 30 min, 1 hour, maybe you write in yourself how long a ban should go and make the player list bigger or simpler

a player list with info about the stats Kill Death how many hours someone has been playing.

bad perms :(

So i ran into this shortly after install and and i tried adjusting the perms to no luck

https://cloud.jtwp.org/index.php/s/ExKjTXy9neXKzjt

so placed into development mode and got a more detailed error report

SftpPathNotFoundException: No such file

    Renci.SshNet.Sftp.SftpSession.RequestOpen(string path, Flags flags, bool nullOnError)
    Renci.SshNet.Sftp.SftpFileStream..ctor(ISftpSession session, string path, FileMode mode, FileAccess access, int bufferSize)
    Renci.SshNet.SftpClient.Create(string path)
    PavlovRconWebserver.Services.RconService.GetFile(PavlovServer server, string path) in RconService.cs

                    sftp.Connect();
                    //check if file exist
                    if (!sftp.Exists(path))
                        try
                        {

                            sftp.Create(path);

                        }
                        catch (SftpPermissionDeniedException e)
                        {
                            sftp.Disconnect();
                            throw new CommandException(server.Name + ": Could not create file: " + path + " " + e.Message);
                        }

PavlovRconWebserver.Models.PavlovServerGameIni.ReadFromFile(PavlovServer pavlovServer, RconService rconService) in PavlovServerGameIni.cs

            public List<PavlovServerGameIniMap> MapRotation { get; set; } =
                new List<PavlovServerGameIniMap>(); // example string = (MapId="UGC1758245796", GameMode="GUN")
            public async Task<bool> ReadFromFile(PavlovServer pavlovServer, RconService rconService)
            {

                var GameIniContent = await rconService.GetFile(pavlovServer,

                    pavlovServer.ServerFolderPath + FilePaths.GameIni);
                var lines = GameIniContent.Split("\n");
                var first = true; // cause the first line is to ignore
                foreach (var line in lines)
                {
                    if (first)

PavlovRconWebserver.Controllers.PavlovServerController.EditServerSettings(int serverId) in PavlovServerController.cs

                viewModel.serverId = serverId;

Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor+TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, object controller, object[] arguments)
System.Threading.Tasks.ValueTask<TResult>.get_Result()
System.Runtime.CompilerServices.ValueTaskAwaiter<TResult>.GetResult()
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask<IActionResult> actionResultValueTask)
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|24_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|19_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker)
Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)
Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
Microsoft.AspNetCore.Builder.Extensions.MapMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

so then i tried

root@rs-zap763817-1:/home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer# chown steam /home/steam/pavlovserver1/Pavlov/Saved/Config/LinuxServer/Game.ini

still the same cannot create file tried this

no luck so then

chown -R steam:steam /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer

no luck
i even tried

chown -R steam:steam /root/root/pavlovserver/Pavlov/Saved/Config/LinuxServer

im out of ideas lol

Limited Shack support

Limited functions:

What will work:

  1. simple rcon commands
  2. adding mods via the GUI
  3. adding a whitelist via the GUI
  4. statistics - leaderboard
  5. history
  6. start server
  7. stop server
  8. creating a shack server via software.
  9. map selection/settings and also deleting maps.
  10. editing server settings
  11. update server

unban

To make unbane usfull i need to know which players are banned.
Also if i just save the banned from the gui i dont have the ones directly done on the server.

Parse the itemlist from maps

Add a feature to parse the itemlist for any custom weapons and add them to a seperate tab in the giveitem menu each time a new map is loaded.

new default maps

The new list of maps are like this:

datacenter

sand

bridge

containeryard

prisonbreak (Siberia)

hospital (Zombies map)

killhouse

range

tutorial

stalingrad (PC only)

santorini

ogcontainers

station (PC BETA only)

industry (PC BETA only)

haguenau (Shack RC only)

DNS with port ?

        so i know if i am to set a DNS , A Record for a IP you would typically use a default port  like :80 or :443 so i was going to set my DNS on my domain  with an A Record with the name of cloud but i get     **bad request**   i think there used to be more in the instructions about this and i cant seem to find them now so i just change 5001 to 80 ?  the older version i used before that used nginx said it used 80 and 443 for something 

Give the player the possibility to report persons.

Give the player the possibility to abuse persons on the gui.
Show them the players they played with etc. so they can choose which one was a cheater.

Do not do anything just collect it for the admins so they can react.

Multiple commands from bucket

Add a new button to execute multiple commands in succession. It would generate a .txt file with all of the commands u want to run then save it and add it to a list so the user can select it and run it.

Time Ban problems?

ok so time bans ? they don't seem to work currently , iv also checked with another group that uses the tool exclusively and for a wile they get the same thing

it is not a typical error (we are still in dev mode )
this is the popup
{"readyState":4,"responseText":"Renci.SshNet.Common.SftpPathNotFoundException: No such file\n at Renci.SshNet.Sftp.SftpSession.RequestOpen(String path, Flags flags, Boolean nullOnError)\n at Renci.SshNet.Sftp.SftpFileStream..ctor(ISftpSession session, String path, FileMode mode, FileAccess access, Int32 bufferSize)\n at Renci.SshNet.SftpClient.Create(String path)\n at PavlovRconWebserver.Services.RconService.GetFile(PavlovServer server, AuthType type, String path, SshServer sshServer) in /root/pavlovSource/PavlovRconWebserver/Services/RconService.cs:line 217\n at PavlovRconWebserver.Services.RconService.SendCommand(PavlovServer server, String command, Boolean deleteUnusedMaps, Boolean getFile, String writeContent, Boolean writeFile) in /root/pavlovSource/PavlovRconWebserver/Services/RconService.cs:line 501\n at PavlovRconWebserver.Services.RconService.GetServerBansFromBlackList(PavlovServer server, List1 banlist) in /root/pavlovSource/PavlovRconWebserver/Services/RconService.cs:line 324\n at PavlovRconWebserver.Controllers.RconController.RemoveBanPlayer(Int32 serverId, String steamId) in /root/pavlovSource/PavlovRconWebserver/Controllers/RconController.cs:line 202\n at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask1 actionResultValueTask)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()\n--- End of stack trace from previous location where exception was thrown ---\n at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|24_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync()\n--- End of stack trace from previous location where exception was thrown ---\n at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker)\n at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)\n at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)\n at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)\n at Microsoft.AspNetCore.Builder.Extensions.MapMiddleware.Invoke(HttpContext context)\n at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)\n at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)\n at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)\n\nHEADERS\n=======\nConnection: keep-alive\nContent-Type: application/x-www-form-urlencoded; charset=UTF-8\nAccept: */*\nAccept-Encoding: gzip, deflate\nAccept-Language: en-US,en;q=0.5\nCookie: .AspNetCore.Antiforgery.N_7Mmx87XUM=CfDJ8AlysNExmKVGuB10wue04O-oMXYZCfQSzwoXRMuJOAGKxoBRij5klUz63i3VPITyxvxKkx73oLXysqzeFpnhp0XNwObAplQMMM0MS9nW74bU3mt7J-H4g2AOlZP3LKtssb0BIgghlFbgvmRDOW0KJDg; .AspNetCore.Antiforgery.hmGEr0CMAUQ=CfDJ8BYbFs7wBu5PgTQiG_rX0JeX9GrkxM1Du78qMqrguJVudlazWlg6VSEpRsJQiV_ir7Mksm_bym57GZxvJXS6lliLFlSIL6c1bCD6woOWvgYRk9fwfljYpBBeJILtQUMcknMRvZ6nhBxtuzkfcz838Jg; .AspNetCore.Identity.Application=CfDJ8BYbFs7wBu5PgTQiG_rX0JeUPqXFJBsfWUuQA7Hrk0xVr4Rqvjn9-HVJj2-mtmtEJqTop--uAcRLJsNeThysXPX7LcoZUmyBQTC-njvg-tp4EJOuQFRCb-AxBx5ofZYq_p4azdyHZ5ldTizq6rrKAWar8Ag1gBeuopgB2KDhwnn0ihUC_nHQii9Mi__dghlq7lRYHwwP1gWXU5VQOInX4G_2ORE-x5l5IgSny_o61_X7Ct9_mC933Cpk5wa-ClMHw023qmztXaJD0Wkbd10iGU2y0bC3Qg-lfS_YBrCRkFTVze8lv-K7jiIlZU0hEVobJyZ6CZECrB5ccowYZntQCftDa4kUQxQB6itLE8ZELfHV8Ff-WUNpxGVnvnrlSIWNLPwHMp2PDsm92_6ZW3JeZaoTKwCgeGc5-gY3egDBPKtC29LUIsGsl6mejzpRe-Cr75NP6EtoGgcp932ykLE8lRD4bFjXBJs2vlhM63_PCtIOEFqEmxMlx7NHLm3e3x1RVjkx90gOlZ7bftFmOwAJ5xdbLXvAx4GmqlET0fq0VeMVquSYSguxh5wdCb63yoppY6hfOcfPGb0oPh1t7TsaC8PUI7Urb8TVI06Xmwi_6WLCcm18hJizvp8d2NR6Oh1bUlzE8wsJvScYAsdUx8sZtasB9XzXqIsrG0J1bm6n0wwAyN1tqSrwLY-CSiyixZW6kMFuKOYv6SqNLm77z2ISWJkQITq8tr8UsHLIBL6j_eWIGSx2e0ql-UHYyqzttJH4jgpx8eFUlR_ZUTPcoONeogFmGMIEhKQHB_79rGS6m-mRQg8sA7emyfl0viGvN5yCLb1Ke1VAZSkh3UCNKQH1LsCQv2hoAwp3b4wY8CpuZeR6\nHost: 147.189.173.79:5001\nReferer: http://147.189.173.79:5001/Rcon\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0\nDNT: 1\nOrigin: http://147.189.173.79:5001\nContent-Length: 36\nX-Requested-With: XMLHttpRequest\n","status":500,"statusText":"Internal Server Error"}

Originally posted by @oneSALTycracker in #42 (comment)

server stuck on datacenter

The software should reset the server and save a log that the server had to be reset.

Will just check the server if datacenter is not in the rotation.

Switch Map not working

Switching the Map is not working (SwitchMap).
Only Rotate Map is working.
And great work man!
(Using Windows Build v0.0.2)

Pavlov server logs

Show the service logs of the pavlov servers so you can track issues down from there.

Multi server commands

There should be an option for multiserver commands.
Like:

restart
stop
start
changeMap
resetSND
rotateMap
give team cash

It would be better for tournaments and stuff where you want to start at the same time on multiple server etc.

Team aliases and matchsetup

By far the most useful feature of pavlov-bot is the SND ;matchsetup command. This requires your system to know about players and in particular teams. That is you need to have way to pre-define all of the players on a team regardless if they are currently playing. Once you have defined a pair of teams, the ;matchsetup command pushes the two teams to the correct sides requested using SwitchTeam then runs ResetSnd. There is no problem with issuing SwtichTeam for players who are already on the right team or aren't actually playing in that match.

Your team setup system needs to be able to quickly accommodate adding Ringers to a team. These are players who are only playing for a match and don't become permanent team members.

Again feel free to steal from pavlov-bot

Permissions structure for users

Currently it seems that all users can run all commands. This is way too powerful. Suggest stealing User/Captain/Mod/Admin user structure from pavlov-bot.

Consider a more limited map chooser

I see a few issues with the map chooser method you are using.

  1. It is slow because of need to grab all the maps
  2. It is not very VR friendly due to the need to search (favourites will help somewhat, but everyone will need to set that up)
  3. It will require a large amount of storage or a map cleanup system for cloud computing deployments where storage is $$$. The issue is that every map picked gets downloaded and never deleted... your /tmp/workshop will get huge. When you start loading datacentre everytime, this is because you have run out of space.

Suggest having a pre-defined short list of maps you are hosting. Faster to choose, less bloat over time. Then move your current map chooser a level deeper as a "request" system. Admins and mods can use directly to add to the hosted list and other users perhaps can just make requests.

Or you will need to follow Dave's official server system and clean up the maps, then re-download them (slow) later on.

logged in STEAM:ID to make commands

Pull the user that is logged in STEAM:ID to make the giveitem button or execute command button apply to the local-player instead of having to select every time

API/Swagger

Add swagger so we have a API documentation.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.