Skip to content

Instantly share code, notes, and snippets.

@Aikufurr
Last active February 24, 2022 00:07
Show Gist options
  • Save Aikufurr/855a5c6927796b3285b5bd71a1a3e586 to your computer and use it in GitHub Desktop.
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.
### 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()
@SamLam140330
Copy link

Add # pip install requests in line 3 as it is also a requirement

@Aikufurr
Copy link
Author

@SamLam140330 Ah yeah, forgot about that one, thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment