A utility for generating Discord embeds that display Guild Wars 2 World vs. World (WvW) team compositions.
The tool organizes data by World IDs, Alliances, Alliance Guilds, and Solo Guilds, then posts formatted embeds to a Discord channel via webhook.
- Reads
.csvexports of theAlliancesandSoloGuildsworksheets from the official WvW Guilds Google Sheet.
(Example CSVs are included in this repository.) - Processes data into per-world summaries using Pandas.
- Builds Discord embed messages and posts them to your configured server.
- Optionally fetches world assignments via GW2 API (
fetch_north_american_guilds()). - Can detect and update only when alliance/world changes occur.
Edit config.ini with your Discord server details:
[discord]
WEBHOOK_URL = https://discord.com/api/webhooks/your_webhook_id/your_webhook_token
GUILD_ID = 123456789012345678To find your GUILD_ID, copy a message link from the target channel.
The format is:
https://discord.com/channels/<guild_id>/<channel_id>/<message_id>
Validate that the links are still valid for remote resources
ALLIANCES_REMOTE_SHEET_URL
SOLO_GUILDS_REMOTE_SHEET_URL
GW2_NA_GUILDS_API_URL Requires Python 3.9+.
pip install -r requirements.txtIf you are running with --local , export the latest worksheets from the WvW Guilds Google Sheet:
Alliances→WvW Guilds - Alliances.csvSoloGuilds→WvW Guilds - SoloGuilds.csv
Place both files in the same directory as wvw-teams.py.
(The default export filenames will match the above.)
From the project directory, run:
# Use local CSV exports
python wvw-teams.py --local
# Fetch data from Google Sheets
python wvw-teams.py --remoteThe script will:
- Process the alliance/solo guild data.
- Build per-world embeds.
- Post them to your Discord channel.
Example Output:
Install with:
pip install -r requirements.txt- Automatic Google Sheets integration
- Smarter caching and change detection
- Error handling and retry logic
- Automated cron/scheduled updates
- Weekly reset helpers (e.g., one-up-one-down match data)
The current design follows these steps:
-
Fetch GW2 API Guild Data
fetch_north_american_guilds()
-
Compare with Cached Data
detect_world_changes(prev, curr)cache_data_file()/load_data_file()
-
If Changes Detected → Continue Otherwise exit.
-
Fetch Google Sheet Data
fetch_guild_data()
-
Update World Assignments
update_world_ids()
-
Clean Up Old Messages
delete_previous_discord_msgs_for_world_links()
-
Build Embeds Per World
build_guild_embeds()
-
Post Embeds to Discord
post_embeds_and_get_links()
-
Post Summary Embed with Links
build_summary_embed()
-
Cache New Links/Data
This project is currently a prototype and evolving. Suggestions, issues, and pull requests are very welcome!
GPL-3.0 license – see LICENSE for details.

