Last active
February 24, 2022 00:07
-
-
Save Aikufurr/855a5c6927796b3285b5bd71a1a3e586 to your computer and use it in GitHub Desktop.
Simple Python script I hacked together to allow you so have an updating list of servers with their player count, gamemode, and map.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
### Requirements | |
# pip install requests tabulate | |
### Config | |
# Update interval in seconds | |
update_interval = 14 | |
# Terms to search for (can be list) | |
query = ["[UK]", "[EU/GER]"] | |
# Display query | |
display_query = True | |
# Sort by name | |
sort_name = True | |
# Sort by playercount (overrides name) | |
sort_playercount = True | |
# Display date | |
display_date = True | |
# Long date (Tue 4 Jan 11:04:25 2022) or Short date (2022-01-04 11:04:25) | |
long_date = True | |
### Code | |
import threading | |
import requests | |
import json | |
import os | |
from time import sleep | |
from datetime import datetime | |
from tabulate import tabulate | |
def update(): | |
url = "https://northstar.tf/client/servers" | |
servers = requests.get(url).json() | |
query_results = [] | |
for term in query: | |
for server in servers: | |
if term in server["name"]: | |
query_results.append(server) | |
if sort_name: query_results.sort(key=lambda s: s["name"]) | |
if sort_playercount: query_results.sort(key=lambda s: s["playerCount"], reverse=True) | |
os.system("cls" if os.name == "nt" else "clear") | |
print(""" __ __ _ _ | |
/ _\ ___ _ ____ _____ _ __ / _\ |_ __ _| |_ ___ | |
\ \ / _ \ '__\ \ / / _ \ '__| \ \| __/ _` | __/ __| | |
_\ \ __/ | \ V / __/ | _\ \ || (_| | |_\__ \ | |
\__/\___|_| \_/ \___|_| \__/\__\__,_|\__|___/""") | |
print("\n" + (((datetime.now().strftime("%Y-%m-%d %H:%M:%S") if not long_date else datetime.now().strftime("%a %d %b %H:%M:%S %Y")) + " | ") if display_date else "") + "Update interval: " + str(update_interval) + "s") | |
if display_query: print("Query: " + ", ".join(query)) | |
table = [["Name", "Player Count", "Gamemode", "Map"]] | |
for server in query_results: | |
table.append([server["name"], str(server["playerCount"]) + "/" + str(server["maxPlayers"]), server["playlist"], server["map"]]) | |
print(tabulate(table)) | |
threading.Timer(update_interval, update).start() | |
update() | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add # pip install requests in line 3 as it is also a requirement