abotbasho: The Self-Hosted NFT Sales Bot for Discord & Twitter

May 3, 2026 · 8 min read
abotbasho: The Self-Hosted NFT Sales Bot for Discord & Twitter

abotbasho: The Self-Hosted Discord & Twitter NFT Sales Bot I Built in 2026

What is this about?

You probably clicked here because you want to set up an NFT sales bot for Discord, Twitter, or both, without paying $9 a month per collection for the privilege. Good news: that's exactly what abotbasho is. It's open source under the MIT license and self-hosted. The fixed cost is a small VPS (around $5/month) plus a free-tier Ethereum RPC URL. Twitter has its own per-tweet cost since X went pay-per-post in early 2026, but for typical NFT collection volumes the total still beats hosted SaaS pricing.

By the end of this post you'll have abotbasho running for your collection. But first, a quick word on why I built it, because the why shaped a lot of the design choices you'll bump into in the how.

Why did I build it

A few reasons.

Price. The cost of common hosted NFT sales bots is, in my opinion, way too high. Services like NFTBOT start around $9/month per collection and go up from there as you add features and contracts. With abotbasho you pay for hosting and that's it. A small VPS (Virtual Private Server, basically a small rented Linux box) runs around $4-6/month with providers like Hetzner, Vultr, or DigitalOcean. If you don't already have an Ethereum RPC URL, the free tier on Alchemy, Infura, or dRPC is plenty for a single collection.

Ads in your channels. A few of the free-tier NFT bot services I've used surface sponsored content or affiliate links inside the sales posts the bot makes. The general pattern is well-documented across Discord bot ecosystems: Top.gg's monetization tag is a directory of Discord bots built on sponsored commands and premium-tier upsells, and NFT-specific bot services commonly run affiliate programs paying around 25% recurring commissions to creators who promote them. None of that is bad on its own, it's just not what I want surfaced in my community channels or on my project's Twitter timeline.

Control over what's actually running. Third-party Discord bots have been a recurring attack surface for NFT communities specifically. The 2022 MEE6 compromise was used to push phishing links into Bored Ape Yacht Club, Doodles, and KaijuKings. OpenSea's own Discord was compromised the same year by a hacked bot posting a fake "YouTube Genesis Mint Pass" mint link. Webhook-level attacks across BAYC, Doodles, and Fractal caused over $22M in linked phishing losses between May 2022 and the time of that report. With abotbasho the source code is open and the bot token lives in my .env on a VPS I control, so I can read what the bot does, harden it, and rotate credentials when something goes wrong. The same applies on the Twitter side; the four OAuth credentials never leave my server.

FOSS means I can change it. Free and open source isn't just a label. It means I can extend the bot for things specific to my project. For example, the Abasho NFT collection has a wrapper contract called Abashos, and I wanted wrap and unwrap events to post on Discord and Twitter the same way sales do. Because abotbasho's plugin system is modular, that was a small addition rather than a fork. The same pattern works for any custom contract event you want surfaced in your community.

abotbasho-architecture-crop.png## How to set it up

The short version, end to end. The two companion tutorials linked at the bottom of this section go deeper on each platform's gotchas; this is the connective overview.

  1. Get an Ethereum RPC URL. Free tier on Alchemy, Infura, or dRPC is fine for one collection.

  2. Create a Discord application at discord.com/developers. You'll collect four values: bot token, application ID, server (guild) ID, and channel ID. When you generate the OAuth invite URL, check both bot and applications.commands scopes. If you forget the second one, slash commands won't appear and you'll think the bot is broken.

  3. Create an X/Twitter app at developer.x.com using the account you want the bot to post from. Critical order: set the app's User Authentication to Read and Write before generating tokens. If you generate tokens first and change the permission after, the tokens stay read-only and you have to regenerate them.

  4. Clone the repo:

    git clone https://github.com/abashoverse/abotbasho.git
    cd abotbasho
    cp .env.example .env
  5. Fill in .env with PONDER_RPC_URL_1 (your Ethereum RPC URL) and the Discord and Twitter credentials you collected.

  6. Edit abotbasho.config.ts to point at your collection. The required fields are the contract address, deploy block (find it on Etherscan as your contract's first transaction), display name, and a short internal label. If you have a wrapper contract, add a wrapper block with its own address and deploy block.

  7. Test locally:

    bun install
    bun run dev:indexer    # in one terminal
    bun run dev:discord    # in another
    bun run dev:twitter    # in a third, if you set up Twitter

    In Discord, run /debug all to push sample events through the pipeline and confirm the wiring.

  8. Deploy to your VPS with Docker Compose:

    docker compose up -d --build

For the platform-specific deep dives:

Features

70625834-40ff-4c01-9d49-df8e40a00dc6-crop.pngWhat the bot actually does:

  • Real-time sales notifications. Discord posts a rich embed with token image, traits, price, and marketplace. Twitter posts a tweet with the token image, ETH+USD price, and seller/buyer ENS where available.
  • Multi-marketplace coverage on Ethereum mainnet. Sales are decoded directly from Seaport (OpenSea and most aggregators) and Blur Exchange v2 contract events. No marketplace API in the path. Other EVM chains (Base, Polygon, Arbitrum) work with contract address edits.
  • Slash commands in Discord. /recent [type] [count] for the last N events, /view <id> for a token's image and owner, /wrapped <id> for wrap status (when a wrapper plugin is configured), /config for runtime admin (channel routing, message overrides), /debug to push sample events, /blog <url> to unfurl an external URL into a designated channel.
  • Per-event-type channel routing. Sales in #sales, wrap events in #vault, blog posts in #announcements, etc. Set via env vars (DISCORD_SALES_CHANNEL_ID, DISCORD_WRAPS_CHANNEL_ID, ...) or runtime overrides via /config channel.
  • Modular plugin system. Wrap/unwrap notifications come from a wrapper plugin; adding new event types follows the same pattern. This is what made the Abashos integration trivial for me.
  • Cost-conscious Twitter posting. X moved to pay-per-post pricing in early 2026 (around $0.015 per tweet, $0.20 per tweet that includes a URL). abotbasho's default tweet template doesn't include URLs for exactly that reason, and the plugin filters (price floor, event-type disable) double as cost controls.
  • RSS feed of sales. For piping into anything that doesn't have a built-in integration.
  • Independent services. Discord and Twitter posters run in separate containers and share only the indexer and Postgres. If Twitter rate-limits, Discord keeps going, and vice versa.

What it costs to run

The bot itself is free. abotbasho is MIT-licensed open source on GitHub, with no SaaS layer, no account, and no usage fees.

Your fixed monthly costs are a VPS and (optionally) an Ethereum RPC plan. Approximate prices as of mid-2026:

ItemTypical cost (US)Typical cost (EU)Ethereum RPC URL$0 (Alchemy, Infura, dRPC free tier)$0 (same providers)VPS (1-2 vCPU, 1-2GB RAM)$4-6/month (Vultr, DigitalOcean basic, AWS Lightsail)€4-6/month (Hetzner CPX11, Contabo VPS S)

The Twitter side is variable and deserves its own line. X moved to pay-per-post pricing in February 2026, so there's no Free tier for new developers anymore. Current rates are roughly $0.015 per tweet, jumping to $0.20 per tweet that includes a URL. The 20× markup on link-bearing posts is, in my opinion, pretty diabolical.

abotbasho's default tweet template doesn't include URLs for exactly this reason, but the math is still worth knowing:

Sales / monthX cost (no URLs)X cost (every tweet has a URL)100~$1.50~$20500~$7.50~$1001,000~$15~$2005,000 (launch week)~$75~$1,000

Legacy X Basic at $200/month is still available to existing subscribers but closed to new signups. If you're Discord-only and skip Twitter entirely, the X line is $0 and your total is just the VPS.

By comparison, hosted SaaS sales bots typically start around $9/month per collection (NFTBOT, for example) and scale up from there as you add contracts and feature tiers. Even with X usage included, a low-volume collection on abotbasho generally lands lower.

What's next and how to help

abotbasho is FOSS (Free and Open Source Software), released under the MIT license. Pull requests, bug reports, and design feedback are welcome at github.com/abashoverse/abotbasho.

Things on my own list, in rough priority order:

  1. First-class Base support without contract address edits.
  2. A more declarative way to add new marketplace decoders. Right now adding a marketplace means writing a TypeScript file. I'd like it to be closer to "drop in an ABI fragment plus a price-extraction function".
  3. Better backfill UX for projects deploying mid-season.
  4. A spend cap for the X API. With pay-per-post pricing, runaway tweets during a busy launch can rack up real cost; a configurable monthly budget that pauses posting when exceeded would be useful.

The contribution bar is "would I run this in production for one of my own collections." Issues are the right place to start a discussion before opening a PR. If you set the bot up and something breaks, file an issue. I'd rather fix the bot than have you fight the docs.

Written by

nodestarQ

devbasho

Read next

Comments

Connect your wallet to leave a comment.