base on Lightweight Source RCON client that works on Windows, macOS, & Linux. <p align="center"> <img src="https://i.imgur.com/BdC2Qz9.png" alt="ARRCON Banner" /> </p> <p align="center"> A lightweight cross-platform RCON client compatible with <b>any game using the Source RCON Protocol</b>.<br/> <p align="center"> <a href="https://github.com/radj307/ARRCON/releases/latest"><img alt="GitHub release (latest by date)" src="https://img.shields.io/github/v/release/radj307/ARRCON?label=Latest+Version&style=flat"></a> <nobr/> <a href="https://github.com/awesome-selfhosted/awesome-selfhosted#games---administrative-utilities--control-panels"><img alt="Mentioned in Awesome-Selfhosted" src="https://awesome.re/mentioned-badge.svg"></a> <nobr/> <a href="https://github.com/radj307/ARRCON/releases"><img alt="Downloads" src="https://img.shields.io/github/downloads/radj307/ARRCON/total?label=Downloads&style=flat"></a> </p> <p align="center"> <a href="https://github.com/radj307/ARRCON/actions/workflows/MakeRelease.yaml"><img alt="Release Workflow Status" src="https://img.shields.io/github/actions/workflow/status/radj307/ARRCON/MakeRelease.yaml?label=Build Status&logo=github&style=flat"> </p> <p align="center"> <a href="https://github.com/radj307/ARRCON/releases">Downloads</a>&nbsp&nbsp|&nbsp&nbsp<a href="https://github.com/radj307/ARRCON/wiki">Wiki</a>&nbsp&nbsp|&nbsp&nbsp<a href="https://github.com/radj307/ARRCON/issues">Issues</a> </p> # Features - Highly configurable - **Cross-Platform:** - Windows - Linux - macOS - **Works for any game using the [Source RCON Protocol](https://developer.valvesoftware.com/wiki/Source_RCON_Protocol)** - **Handles large packets without issue** - **Handles multi-packet responses without issue** - **Supports Minecraft Bukkit's colorized text** - You can set delays in the INI file or directly on the commandline - Supports saving a server's connection info so you can connect to it with 1 word If you've ever used `ssh`'s `config` file, this will be very familiar. *(albeit with more sensible syntax)* - This can be done in a text editor **or entirely from the commandline** - Can be used as a one-off from the commandline, or in an interactive console - Supports piped input using shell operators. For example; `echo "help" | ARRCON -S myServer` would send the `help` command to the `myServer` host - Piped commands are sent _after_ any commands explicitly specified on the commandline - You can write scripts and manually execute them with the `-f`/`--file` options in addition to shell scripts - Commands are separated by newlines - Commands from script files are sent _after_ any piped commands - Line comments can be written using semicolons `;` or pound signs '#' - Shows an indicator when the server didn't respond to your command # Installation Get the latest version for your OS from the [releases](https://github.com/radj307/ARRCON/releases) page. If you're using the [Windows](#windows) or [MacOS](#macos) versions, see the additional information below. There is no installation process required, simply extract the archive to a location of your choice, then run it using a terminal emulator. If you want to be able to run ARRCON from any working directory without specifying its location, you must [add the location to your environment's PATH variable](https://github.com/radj307/ARRCON/wiki/Adding-To-Path). ## Windows On newer versions of Windows, you may be required to "unblock" the executable before Windows will let you use it. This is because the executable isn't signed with a Microsoft-approved signing certificate, which costs upwards of [$300/year](https://docs.microsoft.com/en-us/windows-hardware/drivers/dashboard/get-a-code-signing-certificate#step-2-buy-a-new-code-signing-certificate). To unblock it, ___Right-Click___ on `ARRCON.exe` in the file explorer and click ___Properties___ at the bottom of the right-click menu. ![](https://i.imgur.com/LKLZPVX.png) Check the ___unblock___ box, then click ___Apply___. ## MacOS **If you're running macOS 10.9 or later, you must install `gcc` via [HomeBrew](https://brew.sh) or some other package manager!** If homebrew is installed, you can run this command to install and setup `gcc` automatically: `brew install gcc` This is because Apple no longer includes `libstdc++` by default as of macOS 10.9 *(See [#11](https://github.com/radj307/ARRCON/issues/11))*, which is required for ARRCON to run. ## Building from Source See [here](https://github.com/radj307/ARRCON/wiki/Building-from-Source) for a brief guide on building ARRCON from source. # Usage ARRCON is a CLI _(Command-Line Interface)_ program, which means you need to run it through a terminal. __On Windows, you can use `cmd.exe` or `powershell.exe` by R+Clicking on the start menu and selecting "Command Prompt" or "PowerShell".__ For more detailed usage instructions, see the [Getting Started](https://github.com/radj307/ARRCON/wiki) page on the wiki. To see a list of commands, use `ARRCON -h` or `ARRCON --help` To see a list of environment variables, their current values, and a description of each, use `ARRCON --print-env` ## Modes - ___Interactive Shell___ ![](https://i.imgur.com/4d4Epkb.png) Opens an interactive console session. You can send commands and view the responses in real-time. - Used by default when there are no command arguments. - Connection remains open until you disconnect or kill the process, or if the server closes. - ___One-Shot___ ![ARRCON Scripting Support](https://i.imgur.com/oPX47RD.png) This mode is designed for scripting, it sends commands directly from the commandline in sequential order before exiting. _(You can also open an interactive shell at the same time with the `-i` / `--interactive` options.)_ Supported input methods: - Commandline Parameters _These are any arguments that are __not__ short/long-opts and __not captured by__ short/long-opts._ - Shell Scripts - Redirected input from STDIN - Script Files Splits commands by line, and allows comments using a semicolon `;` or pound sign `#`. Comments are always considered line comments. _Use the '`-f`' or '`--file`' options to specify a scriptfile to load._ # Contributing If you want to add a new feature, fix a bug, or just improve something that annoys you, feel free to submit pull requests and/or issues. ## Feedback & Requests Feel free to leave feedback on the issues tab! There are a number of premade templates for the following situations: - [Questions](https://github.com/radj307/ARRCON/issues/new?assignees=radj307&labels=question&template=question.md&title=%5BQUESTION%5D+) - [Bug Reports](https://github.com/radj307/ARRCON/issues/new?assignees=radj307&labels=bug&template=bug-report.md&title=%5BBUG%5D+%E2%80%A6) - [Protocol Support Requests](https://github.com/radj307/ARRCON/issues/new?assignees=radj307&labels=bug%2C+enhancement%2C+support&template=support-request.md&title=Unsupported+Title%3A+%3Ctitle%3E) - __A note on Battleye's RCON protocol:__ Battleye's RCON protocol requires sending "keep-alive" packets at least every 45 seconds to maintain the connection, which is better suited by a multithreaded GUI application, and as such will not be implemented in ARRCON. Other protocols or game-specific implementations however, will be considered. - [Feature Requests](https://github.com/radj307/ARRCON/issues/new?assignees=&labels=enhancement%2C+new+feature+request&template=request-a-new-feature.md&title=%5BNEW%5D) - [Suggestions](https://github.com/radj307/ARRCON/issues/new?assignees=&labels=&template=change-an-existing-feature.md&title=%5BCHANGE%5D+) - [Documentation Suggestions or Additions](https://github.com/radj307/ARRCON/issues/new?assignees=&labels=documentation&template=documentation-request.md&title=%5BDOC%5D+) ## Pull Requests Feel free to submit a pull request if you've added a feature or fixed a bug with the project! Contributions are always welcomed, I'll review it as soon as I see the notification. ", Assign "at most 3 tags" to the expected json: {"id":"7271","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"