Back to projects

Completed system

Combat Robotics Event Tracker

A Python and GitHub Actions system for combat robotics event notifications in Discord.

My role
Python development & workflow setup
Objective
Bring competition listings into the team’s Discord channel
Tools & methods
Python · GitHub Actions · JSON · Discord webhooks
Current result / status
Built: scheduled notifications with duplicate prevention

Why I built it

As the Embry-Riddle ASME Combat Robotics program grew, keeping track of competitions across multiple websites became time-consuming. I built a Python event tracker to collect that information and post structured updates in the team’s Discord channel. The goal was to make registration opportunities and travel planning easier to follow.

Two Combat Event Tracker notifications in Discord for The DropKick Dojo and Hickory Bot Battles, showing dates, locations, estimated distances from ERAU Daytona Beach, weight classes, registration estimates, and sources.
Event notifications posted to the team’s Discord channel, bringing dates, locations, estimated distances, weight classes, and registration information into one place. Select the image to view it at full size.

How it works

Scheduled GitHub Actions runs collect event information, parse each source, estimate distance from Daytona Beach, and prepare Discord embeds. The tracker stores previously posted events in JSON to prevent duplicate notifications.

  1. Collect event listings from supported websites.
  2. Extract dates, locations, weight classes, and available registration information.
  3. Filter by distance, with different treatment for major national competitions.
  4. Send newly discovered events through a Discord webhook.
  5. Save the posting history for the next run.

The documented sources are Robot Combat Events, Builders Database, NHRL Events, and Robot Ruckus. The implementation uses Python, Requests, BeautifulSoup4, JSON, GitHub Actions, and Discord webhooks.

Parsing and filtering

Each organizer presents event information differently, so the tracker needs source-specific parsing and fallback logic. It also distinguishes nearby competitions from major events that may justify longer travel.

Registration labels inferred from page text are estimates. The code marks them as likely open or closed and directs readers to check the event page. This keeps a useful notification from implying more certainty than the source provides.

Python logic for distance filtering, requests, weight classes, and registration estimates.
Python logic for distance filtering, requests, weight classes, and registration estimates.

Outcome and next steps

The completed tracker gives the team a central stream of competition information in Discord and reduces manual monitoring. It gave me practical experience with web parsing, scheduled cloud workflows, duplicate prevention, and webhook integration.

Registration reminders and role-based notifications are possible extensions, rather than completed features.

Explore the Combat Robotics program
Back to projects