DEV Community

Apex
Apex

Posted on Edited on Originally published at apexnexus.site

How I Built a $0 AI News Bot That Posts to Discord (Full Guide)

The Problem: 45 Minutes a Day Wasted Every morning I was doing the same thing: opening 7 news sites, scanning headlines, deciding what mattered, writing summaries, and pasting them into a Discord community. It took 30, 45 minutes a day, and honestly? I kept missing stories. So I built a bot that does it all automatically. It's been running for months, costs $0/month, and posts curated AI news to Discord six times a day. This guide shows you exactly how it works so you can build the same thing, for your niche, your community, your use case. Full disclosure: this is the exact system powering the Apex Nexus daily AI news digest. --- ## What the Bot Does Every 4 hours, on schedule: 1. Fetches articles from 7+ RSS feeds (Hacker News, Hugging Face, Google AI, Lobste.rs, plus niche sources)

  1. Deduplicates by title so nothing repeats
  2. Categorizes each article (AI/ML, Security, Automation, Dev/Infra, Industry)
  3. Summarizes the top stories into a clean digest
  4. Posts the digest to Discord with a link back to the blog
  5. Rebuilds + deploys the website with the latest posts Total processing: ~3 minutes. Human effort: zero. --- ## The Architecture (Three Pieces) ### 1. The Fetcher (RSS + Python) RSS feeds are the backbone. Every feed is free and structured, no APIs, no keys, no rate limits to beg for. python import feedparser FEEDS = [ "https://hnrss.org/frontpage", "https://huggingface.co/blog/feed.xml", "https://blog.google/technology/ai/rss/", # add your niche feeds here ] def fetch_all(): articles = [] for url in FEEDS: feed = feedparser.parse(url) for entry in feed.entries[:10]: articles.append({ "title": entry.title, "link": entry.link, "summary": clean_html(entry.summary), "source": url, }) return articles Key lesson: always set a User-Agent header. Many feeds reject default library requests. ### 2. The Brain (Filter + Categorize) The magic is that this doesn't need to call an AI model at all. Deterministic keyword matching handles 90% of it for free: python CATEGORIES = { "AI/ML": ["machine learning", "llm", "openai", "anthropic", "model", "neural"], "Security": ["vulnerability", "breach", "malware", "ransomware", "exploit"], "Automation": ["automation", "workflow", "agent", "rpa", "pipeline"], } def categorize(title, summary): text = f"{title} {summary}".lower() for category, keywords in CATEGORIES.items(): if any(k in text for k in keywords): return category return "General" Why this matters: AI model calls cost money. Keyword categorization costs nothing, runs in milliseconds, and for a news digester it's plenty smart. We only call a model when we want a polished summary, and even that is optional. ### 3. The Output (Discord Webhook) Posting to Discord is one HTTP request. No bot token needed, just a webhook URL: python import requests WEBHOOK_URL = "https://discord.com/api/webhooks/." # from Discord channel settings def send_to_discord(stories): message = "πŸ“‘ **AI News Digest**\n\n" + "\n".join( f"β€’ **{s['title']}**\n {s['link']}" for s in stories ) requests.post(WEBHOOK_URL, json={"content": message[:1900]}) Pro tip: use Discord embeds for prettier posts, title, link, color, footer. Same API, much better look. --- ## Scheduling: The Piece Everyone Forgets A bot that doesn't run on schedule isn't a bot, it's a script. We use cron through OpenClaw: cron # Every 4 hours 0 */4 * * * cd /path/to/project && python3 news_bot.py The lesson we learned the hard way: webhooks expire and break silently. Your bot should check its webhook before every run and recreate it if it's gone, ours did 404 for a week before we noticed. Add one line of health-checking, not a week of silence. --- ## The Complete Cost Breakdown | Component | Monthly Cost | |---|---| | RSS feeds (all free) | $0 | | Python + feedparser (open source) | $0 | | Discord webhooks (free tier) | $0 | | Static site hosting (Vercel free tier) | $0 | | Cron scheduling (local) | $0 | | AI summaries (optional, only when wanted) | $0, few dollars | | Total | $0/month | The whole thing runs on free tiers and open source. This is the killer feature: a production automation with zero recurring cost. --- ## How to Build Yours (Today) Beginner path (no code, 30 minutes):
  6. Create a Discord channel β†’ Settings β†’ Integrations β†’ Webhooks β†’ copy URL
  7. Use Zapier or IFTTT: trigger = RSS feed, action = Discord webhook
  8. Done. You have a news bot. Intermediate path (n8n, 1 hour):
  9. RSS Read node β†’ Filter node (keywords) β†’ Discord node
  10. Add an AI node if you want summaries
  11. Schedule with the cron trigger Advanced path (Python, this guide, 1 afternoon):
  12. Copy the three code blocks above into a project
  13. Add your niche feeds and keywords
  14. Set up cron
  15. Add error handling + webhook health checks (seriously) --- ## What I'd Do Differently If I built this again, I'd start with the advanced path from day one. The beginner tools work, but you hit their walls fast: per-task fees, black-box failures, no way to customize. Python + RSS + webhooks is the same effort and gives you everything. And the one thing that made the biggest difference for growth: every digest post links back to the blog, and every blog post links back to the community. Bot β†’ content β†’ community β†’ more members β†’ more reason to build. The loop is the product. --- ## Build It With Us We run this exact system, and a weekly automation challenge where community members build their own versions. Free to join: https://discord.gg/E5vuXxRtu9E5vuXxRtu9 - πŸ—ΊοΈ Roadmaps & cheat sheets: https://apexnexus.site/resources.html
  16. β˜• Enjoyed this guide? Support the free hub: https://ko-fi.com/apexnexus Ship your bot. Post your build. That's the whole assignment.

🌐 More free guides: apexnexus.site - the free AI Nexus learning hub (guides, cheat sheets, roadmaps)

β˜• Enjoying this guide? Support the free AI Nexus learning hub: buy us a coffee β˜•

πŸ’¬ Join the AI Nexus Discord (free community for AI automation learners): https://discord.gg/E5vuXxRtu9

πŸš€ Membership is coming soon - free guides + Discord stay open until then.

Top comments (0)