Skip to content

Steam Monitor V2 is a Python tool for real-time monitoring of Steam user activities with a modern, modular architecture.

Notifications You must be signed in to change notification settings

Spectrewolf8/SteamMonitorV2

Repository files navigation

Steam Monitor V2

Steam Monitor V2 is a Python tool for real-time monitoring of Steam user activities with a modern, modular architecture.

Features

  • Real-time monitoring of Steam user gaming activity (online/offline status detection and game tracking)
  • Comprehensive statistics for user activity (session times, game durations, activity summaries)
  • Email notifications for various events (status changes, game changes, API errors)
  • CSV logging to save all user activities with timestamps
  • Signal control for runtime configuration changes (Unix/Linux/macOS)
  • Modular architecture with clean separation of concerns
  • Environment-based configuration using .env files

steam_monitor_screenshot

Change Log

Release notes can be found here

Disclaimer

I'm not a dev, project done as a hobby. Code is ugly and as-is, but it works (at least for me) ;-)

Requirements

The tool requires Python 3.5 or higher.

It uses steam library, also requests and python-dateutil.

It has been tested successfully on:

  • macOS (Ventura & Sonoma)
  • Linux:
    • Raspberry Pi Bullseye & Bookworm
    • Ubuntu 24
    • Kali Linux 2024
  • Windows (10 & 11)

It should work on other versions of macOS, Linux, Unix and Windows as well.

Installation

Install the required Python packages:

python3 -m pip install requests python-dateutil "steam[client]"

Or from requirements.txt:

pip3 install -r requirements.txt

Clone or download this repository to your desired location:

git clone <repository-url>
cd SteamMonitorV2/steam_monitor

Or download the package and extract it to your preferred directory.

Configuration

Environment Variables (.env file)

Create a .env file in the steam_monitor directory using the provided template:

cp .env.example .env

Edit the .env file and configure the following variables (all parameters have detailed descriptions in the file):

Steam Web API key

You can get the Steam Web API key here: http://steamcommunity.com/dev/apikey

Set the STEAM_API_KEY variable in your .env file (or use -u parameter).

User privacy settings

In order to monitor Steam user activity, proper privacy settings need to be enabled on the monitored user account, i.e. in 'Edit Profile' -> 'Privacy Settings', the value in section 'My Profile' and 'Game details' should be set to 'Friends Only' (if you are friends) or to 'Public'.

SMTP settings

If you want to use email notifications functionality you need to configure the SMTP settings in your .env file. Set the following variables:

  • SMTP_HOST - Your SMTP server address
  • SMTP_PORT - SMTP server port (usually 587 for TLS or 465 for SSL)
  • SMTP_USER - Your email username
  • SMTP_PASSWORD - Your email password or app password
  • SMTP_SSL - Set to true for SSL or false for TLS
  • SENDER_EMAIL - Email address to send from
  • RECEIVER_EMAIL - Email address to receive notifications

If you leave the default settings then no notifications will be sent.

You can verify if your SMTP settings are correct by using --test-email parameter (the tool will try to send a test email notification):

python main.py --test-email

Other settings

All other variables can be left at their defaults, but feel free to experiment with it.

Getting started

List of supported parameters

To get the list of all supported parameters:

python main.py -h

or

python main.py -h

Monitoring mode

To monitor specific user activity, just type the player's Steam64 ID (76561198116287247 in the example below):

python main.py 76561198116287247

If you have not set STEAM_API_KEY variable in your .env file, you can use -u parameter:

python main.py 76561198116287247 -u "your_steam_web_api_key"

If you do not know the user's Steam64 ID, but you know the Steam profile/community URL (which can be customized by the user), you can also run the tool with -r parameter which will automatically resolve it to Steam64 ID:

python main.py -r "https://steamcommunity.com/id/misiektoja/"

The tool will run infinitely and monitor the player until the script is interrupted (Ctrl+C) or killed the other way.

You can monitor multiple Steam players by spawning multiple copies of the script.

It is suggested to use sth like tmux or screen to have the script running after you log out from the server (unless you are running it on your desktop).

The tool automatically saves its output to steammonitor{user_steam64_id}.log file (the log file name suffix can be changed via -y parameter or logging can be disabled completely with -d parameter).

The tool also saves the timestamp and last status (after every change) to steam_{user_display_name}_last_status.json file, so the last status is available after the restart of the tool.

How to use other features

Email notifications

If you want to get email notifications once the user gets online or offline use -a parameter:

./steam_monitor.py -r "https://steamcommunity.com/id/misiektoja/" -a

Make sure you defined your SMTP settings earlier (see SMTP settings).

Example email:

steam_monitor_email_notifications

If you want to be informed about any user status changes (online/away/snooze/offline) use -s parameter:

./steam_monitor.py -r "https://steamcommunity.com/id/misiektoja/" -s

If you want to be informed when user starts, stops or changes the played game then use -g parameter:

./steam_monitor.py -r "https://steamcommunity.com/id/misiektoja/" -g

Saving gaming activity to the CSV file

If you want to save all reported activities of the Steam user, use -b parameter with the name of the file (it will be automatically created if it does not exist):

./steam_monitor.py -r "https://steamcommunity.com/id/misiektoja/" -b steam_misiektoja.csv

Check intervals

If you want to change the check interval when the user is online/away/snooze to 15 seconds use -k parameter and when the user is offline to 2 mins (120 seconds) use -c parameter:

./steam_monitor.py -r "https://steamcommunity.com/id/misiektoja/" -k 15 -c 120

Controlling the script via signals (only macOS/Linux/Unix)

The tool has several signal handlers implemented which allow to change behavior of the tool without a need to restart it with new parameters.

List of supported signals:

Signal Description
USR1 Toggle email notifications when user gets online or offline (-a)
USR2 Toggle email notifications when user starts/stops/changes the game (-g)
CONT Toggle email notifications for all user status changes (online/away/snooze/offline) (-s)
TRAP Increase the check timer for player activity when user is online/away/snooze (by 30 seconds)
ABRT Decrease check timer for player activity when user is online/away/snooze (by 30 seconds)

So if you want to change functionality of the running tool, just send the proper signal to the desired copy of the script.

I personally use pkill tool, so for example to toggle email notifications when user gets online or offline, for the tool instance monitoring the 76561198116287247 user:

pkill -f -USR1 "python3 ./steam_monitor.py 76561198116287247"

As Windows supports limited number of signals, this functionality is available only on Linux/Unix/macOS.

Other

Check other supported parameters using -h.

You can combine all the parameters mentioned earlier.

Coloring log output with GRC

If you use GRC and want to have the tool's log output properly colored you can use the configuration file available here

Change your grc configuration (typically .grc/grc.conf) and add this part:

# monitoring log file
.*_monitor_.*\.log
conf.monitor_logs

Now copy the conf.monitor_logs to your .grc directory and steam_monitor log files should be nicely colored when using grc tool.

License

This project is licensed under the GPLv3 - see the LICENSE file for details

About

Steam Monitor V2 is a Python tool for real-time monitoring of Steam user activities with a modern, modular architecture.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages