ARC SPY is a public Discord bot that:
- Posts and auto-updates an "ACTIVE Events" embed panel per server (guild).
- Lets server admins create/remove that panel via slash commands or prefix commands.
- Lets users browse "blueprint intel" from a CSV dataset (paged UI).
It pulls live data from the MetaForge ARC Raiders API and formats event end-times using Discord timestamps (e.g. <t:UNIX:t> for time-only).
- Per-server panel:
/set_event_panelposts a panel message in the current channel and stores the channel/message IDs inguild_config.json. - Auto updater: background task refreshes panels every ~5 minutes.
- Blueprint browser:
/blueprints(ephemeral) browses your CSV intel with Next/Prev buttons.
If you find ARC SPY useful and want to support development/hosting costs, you can support me here:
- Python 3.11+ recommended
- A Discord application + bot token
discord.py2.x
- Go to the Discord Developer Portal.
- Create an application → add a Bot user.
- Copy the bot token.
This bot uses prefix commands (A$...) which require reading message content. message_content is a privileged intent and must be enabled in the Developer Portal if you keep prefix commands.
In Developer Portal → Bot → Privileged Gateway Intents:
- Enable Message Content Intent (recommended if you want prefix commands)
- Members/presences are not needed
If you only want slash commands, you can remove/disable message content usage in code and disable that intent.
Use an OAuth2 URL with these scopes:
botapplications.commands
Relevant permissions (minimum practical set):
- View Channels
- Send Messages
- Embed Links
- Read Message History
Use the Discord Permissions Calculator to generate your invite URL.
Copy .env.example to .env and fill it in, or export the variables in your host.
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -U pip
pip install -r requirements.txt
python public-bot.py/set_event_panel(Manage Server): post a panel in this channel and start updating it./remove_event_panel(Manage Server): stop updating this server's panel./blueprints: browse blueprint intel (ephemeral)./help: show help (includes Patreon link)./update_events(owner-only): force-refresh panels./reload_blueprints(owner-only): reload the CSV./refresh_cache(owner-only): refresh item cache.
Prefix: A$
A$set_event_panel,A$remove_event_panel,A$blueprints,A$help, etc.
Created/updated automatically. Format:
{
"123456789012345678": {
"channel_id": 111111111111111111,
"message_id": 222222222222222222
}
}By default the bot reads: ./arc_raiders_blueprints_final.csv (override with BLUEPRINTS_CSV_PATH).
Expected columns:
BlueprintName,Map,MapCondition,Scavengable,Containers,QuestReward,TrialsReward,ContainerTypeAssumed,DropRateEstimate_PerContainer,AvgRaidsEstimate_6Containers,AvgRaidsEstimate_9Containers,Notes,LocationNotes,BestKnownRoute,CraftingMaterials,WorkshopLevel
- Linux VPS (systemd), Docker, or a platform with persistent disk (so
guild_config.jsonsurvives restarts). - Consider using a process manager like systemd, PM2, or supervisor for auto-restart.
Create /etc/systemd/system/arcspy.service:
[Unit]
Description=ARC SPY Discord Bot
After=network.target
[Service]
Type=simple
User=youruser
WorkingDirectory=/path/to/bot
EnvironmentFile=/path/to/bot/.env
ExecStart=/path/to/bot/.venv/bin/python public-bot.py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.targetThen:
sudo systemctl daemon-reload
sudo systemctl enable arcspy
sudo systemctl start arcspy- If your host is ephemeral (disk resets), you'll lose
guild_config.jsonunless you mount persistent storage.
- Never commit your bot token — use
.envor environment variables. - Consider using slash commands only (remove message content intent) for easier approval at scale. Message Content Intent is privileged and requires manual approval for verified bots.
- Rate limiting: Discord has aggressive rate limits. The bot uses a 5-minute update cycle to stay safe.
arc-spy-bot/
├── public-bot.py # Main bot code
├── arc_raiders_blueprints_final.csv # Blueprint intel dataset
├── guild_config.json # Auto-generated per-guild config
├── .env.example # Template
├── requirements.txt # Python dependencies
Contributions welcome! Please:
- Fork the repo
- Create a feature branch
- Run
ruff checkandruff formatbefore committing - Open a PR with a clear description
See LICENSE.
- Built with discord.py
- Data from MetaForge ARC Raiders API
- Blueprint intel curated by the community
- Patreon: https://patreon.com/connorbotboi?utm_medium=unknown&utm_source=join_link&utm_campaign=creatorshare_creator&utm_content=copyLink
- Discord Developer Portal: https://discord.com/developers/applications
- discord.py Docs: https://discordpy.readthedocs.io/