Hackeroos intern project: Rooby was built by Aadarsh Karki during a Hackeroos internship, based on product and community-tooling direction from Kasey Robinson (bitpixi). This repository is a fork of aadarsh1282/pika-bot and preserves Aadarsh's implementation credit.
AI-Powered Hackathon Intelligence & Community Automation Platform
Aggregates 250+ hackathons across 5 platforms Β· AI-driven Q&A Β· Real-time community moderation Β· Fully automated
β‘ Rooby is live. Join the Hackeroos Discord to see it in action β run
/hackathons,/ask, or/pollin the server.
Rooby is a production-grade Discord bot and hackathon intelligence system built for the Hackeroos community. It continuously scrapes, deduplicates, and serves hackathon data from multiple platforms β providing community members with real-time event discovery, AI-powered Q&A, and automated moderation through a unified Discord interface.
Rooby solves three real problems:
- Discovery fragmentation β hackathon events are scattered across Devpost, MLH, Lu.ma, Hack Club, and more
- Community noise β unmoderated servers suffer from spam, raids, and content violations
- Insight gap β participants and organizers lack structured, queryable data on trends and events
Rooby is running 24/7 in the Hackeroos Discord server. Join and interact with it directly:
Once inside, try these commands in #rooby-bots:
| Command | What to expect |
|---|---|
/hackathons |
Live feed of 250+ upcoming hackathons |
/ask upcoming |
AI-curated list with links and dates |
/poll <question> |
Create a poll instantly |
/winners |
See the community leaderboard |
/rooby-help |
Full command reference |
- Aggregates events from Devpost, MLH, Lu.ma, Hack Club, and Hackeroos into a single unified feed
- Auto-deduplicates cross-platform listings
- Posts new hackathons in real-time to the
#all-hackathonsDiscord channel - Standardises all event data: title, dates, location, mode (Online / In-Person / Hybrid), source
/askcommand powered by Hugging Face (Qwen2.5 viagradio_client)- Users can query hackathon advice, ask community questions, or get project feedback
- Infrastructure in place to evolve into a full RAG-based analytics assistant
/hackathonsβ browse upcoming events/pollβ create instant community polls/winners&/set-winnerβ track and celebrate hackathon winners/verifyβ member onboarding and role assignment- Countdown announcements for curated Hackeroos-specific events
- Spam detection with configurable rate-limit thresholds
- Persistent strike system β violation tracking per user stored in
strikes.json - Raid protection β detects and mitigates mass-join attacks
- Word/content filtering with admin control
- Thread-safe async state management via
asyncio.Lock
- Daily scraper runs at 05:00 UTC via GitHub Actions
- Smart commit logic β only pushes when new data is detected (
[skip ci]tagged) - Outputs a clean
data/hackathons.jsonconsumable by external frontends or APIs
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Rooby System β
βββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ€
β Data Layer β Bot Layer β
β β β
β scrape_hackathons.py β main.py β
β β β
β Devpost βββ β βββββββββββββββ ββββββββββββββ β
β MLH βββββββ€ β β Slash Cmds β β Moderation β β
β Lu.ma βββββΌβββΊ merge β β /hackathons β β Spam guard β β
β Hack Club ββ€ dedupe β β /ask β β Raid guard β β
β Hackeroos ββ β β β /poll β β Strikes β β
β β β β /winners β ββββββββββββββ β
β data/ βΌ β ββββββββ¬βββββββ β
β hackathons.json ββββββββΌβββββββββββ β
β β AI Q&A (Hugging Face / Qwen2.5) β
βββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββ€
β CI/CD Layer β
β GitHub Actions β Daily @ 05:00 UTC β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Rooby-bot/
βββ .github/
β βββ workflows/
β βββ hackathons-scraper.yml # Automated daily scraper (GitHub Actions)
βββ data/
β βββ hackathons.json # Aggregated + deduplicated events (250+)
β βββ hackeroos_events.json # Curated Hackeroos community events
βββ docs/
β βββ assets/ # Screenshots, banners (add yours here)
βββ main.py # Discord bot β commands, moderation, AI Q&A
βββ scrape_hackathons.py # Multi-source hackathon scraper
βββ requirements.txt # Python dependencies
βββ runtime.txt # Python version pin (3.11.8)
βββ README.md
- Python 3.11+
- A Discord bot token (create one here)
- Hugging Face token (optional β enables
/askAI feature)
git clone https://github.com/bitpixi2/Rooby-bot.git
cd Rooby-botpython -m venv venv
source venv/bin/activate # macOS / Linux
venv\Scripts\activate # Windowspip install -r requirements.txtCreate a .env file in the project root:
# Required
DISCORD_TOKEN=your_discord_bot_token_here
# Optional β enables /ask AI feature
HF_TOKEN=your_huggingface_token_here
# Optional β custom hackathon feed endpoint
HACKATHONS_API_BASE=https://your-api-endpoint.compython main.pypython scrape_hackathons.pyThe scraper runs automatically every day at 05:00 UTC via GitHub Actions. Running it manually refreshes
data/hackathons.jsonimmediately.
Rooby is backed by the Hackeroos Insights API β a production FastAPI service deployed on Railway that powers the bot's hackathon intelligence.
Base URL: https://hackeroos-insights-api-production.up.railway.app
| Endpoint | Method | Description |
|---|---|---|
/health |
GET | Health check |
/hackathons/upcoming |
GET | Upcoming hackathons (filter by days, tag, mode, location) |
/hackathons/stats |
GET | Aggregate stats across the hackathon dataset |
Interactive docs: https://hackeroos-insights-api-production.up.railway.app/redoc
{
"title": "HackSydney 2026",
"url": "https://devpost.com/hacksydney2026",
"start_date": "Apr 28 - 29, 2026",
"end_date": "2026-04-29T23:59:59Z",
"location": "Sydney, Australia",
"mode": "in-person",
"source": "Devpost",
"tags": ["ai", "fintech", "sustainability"],
"description": "48-hour hackathon at the University of Sydney."
}| Source | Method | Approx. Events |
|---|---|---|
| Devpost | REST API | ~100+ |
| MLH | Selenium (JS-rendered) | ~50+ |
| Lu.ma | BeautifulSoup | ~40+ |
| Hack Club | HTML scraper | ~30+ |
| Hackeroos | Curated JSON | ~20+ |
import json
with open("data/hackathons.json") as f:
hackathons = json.load(f)
online = [h for h in hackathons if h.get("mode") == "online"]
print(f"{len(online)} online hackathons found")| Command | Description | Access |
|---|---|---|
/hackathons |
Browse upcoming hackathon events | Everyone |
/ask <question> |
AI-powered Q&A via Hugging Face | Everyone |
/poll <question> |
Create a community poll | Everyone |
/winners |
View hackathon winners leaderboard | Everyone |
/set-winner |
Record a hackathon winner | Admin |
/verify |
Member onboarding & role assignment | Everyone |
/rooby-help |
Show all available commands | Everyone |
/about |
About Rooby | Everyone |
/faq |
Frequently asked questions | Everyone |
Trigger: Daily cron at 05:00 UTC (or manual via workflow_dispatch)
β
βββ Checkout repo
βββ Setup Python 3.11
βββ pip install -r requirements.txt
βββ python scrape_hackathons.py
βββ data/hackathons.json changed?
βββ Yes β git commit "Update hackathons JSON [skip ci]" + push
βββ No β skip (no unnecessary commits)
- Multi-source hackathon aggregation (5 platforms)
- Discord slash commands
- AI Q&A via Hugging Face
- Moderation system (spam, raids, strikes)
- Automated daily scraper via GitHub Actions
- RAG-based AI using the hackathon dataset as a knowledge base
- Web dashboard for browsing hackathon analytics
- Trend detection and winning pattern analysis
- REST API for external integrations
- User authentication & personalised event recommendations
- MLOps pipeline for production model deployment
- Real-time WebSocket feed for live event updates
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature - Commit your changes:
git commit -m 'Add your feature' - Push:
git push origin feature/your-feature - Open a Pull Request
MIT License β see LICENSE for details.