Close Menu
NERDBOT
    Facebook X (Twitter) Instagram YouTube
    Subscribe
    NERDBOT
    • News
      • Reviews
    • Movies & TV
    • Comics
    • Gaming
    • Collectibles
    • Science & Tech
    • Culture
    • Nerd Voices
    • About Us
      • Join the Team at Nerdbot
    NERDBOT
    Home»Nerd Voices»I Built a Discord Bot That Roasts My D&D Party, and Here’s the Cheap AI Setup Behind It
    AI Generated
    Nerd Voices

    I Built a Discord Bot That Roasts My D&D Party, and Here’s the Cheap AI Setup Behind It

    Abdullah JamilBy Abdullah JamilAugust 2, 20268 Mins Read
    Share
    Facebook Twitter Pinterest Reddit WhatsApp Email

    The hook

    My D&D group has been running the same campaign for two years. We are four sessions from the end. And for the last eight months, a Discord bot has been writing our session recaps.

    It is not a serious bot. It writes a short summary of what happened, and then it says something rude about one of us. Two actual lines from the channel:

    “Session 41: the party finally reached the Ashen Vault. Torvald picked the lock in one attempt, which everyone agreed was suspicious.”

    “Meanwhile Bryn spent the entire session asking the innkeeper about his feelings. Bryn is a barbarian.”

    That is the whole thing. It reads the session’s chat log, writes a paragraph, adds one insult, and posts it. My group checks for it before they check the actual notes. Bryn has asked me twice to turn it off.

    The reason I am writing this up is not the bot. It is that building it cost me nothing for the first two months and about the price of a sandwich a month after that. If you have been assuming this kind of project needs a subscription, it does not, and the gap between “assuming” and “trying” is roughly one evening.

    Getting a key without paying anything

    You need an API key. You do not need to pay for one to start.

    Every major provider runs a free tier, and for a personal project the free tier is not a teaser. It is genuinely enough. My bot handles one session a week, which is one longish request every seven days. That is nowhere near any free limit I have ever hit.

    If you have never done this before, this walkthrough on how to get a Gemini API key covers both the free tier and the paid one in about five minutes. The free tier was more than enough for my bot’s first two months, and I only moved off it because I added a second feature, not because I ran out.

    Two practical warnings, learned the tedious way.

    Do not put the key in your code. Put it in an environment variable. I know you know this. I also know you are going to paste it into the file “just for testing”, and then push it, and then get an email about it.

    And check the free tier’s terms before you build something you care about. Free tiers sometimes come with different data handling than paid ones. For a bot that reads my friends’ jokes about a fictional innkeeper, I do not care. For anything involving real personal information, read the page.

    Illustration: a hobby developer keeping an AI API credential separate from the tabletop-game bot codebase.

    The 40 lines that actually do the work

    Here is the core of it. I am using discord.py, which has genuinely good documentation, and an OpenAI-compatible client for the model call.

    import os, discord

    from openai import OpenAI

    client = OpenAI(

        base_url=os.environ[“AI_BASE_URL”],

        api_key=os.environ[“AI_API_KEY”],

    )

    MODEL = os.environ.get(“AI_MODEL”, “gemini-3.1-flash”)

    SYSTEM = (

        “You write short D&D session recaps. Two paragraphs maximum. “

        “End with exactly one gentle joke about one player. “

        “Never be cruel and never mention anything outside the log.”

    )

    bot = discord.Client(intents=discord.Intents(messages=True, message_content=True, guilds=True))

    @bot.event

    async def on_message(msg):

        if msg.author == bot.user or not msg.content.startswith(“!recap”):

            return

        log = [m.content async for m in msg.channel.history(limit=300)]

        log.reverse()

        resp = client.chat.completions.create(

            model=MODEL,

            messages=[

                {“role”: “system”, “content”: SYSTEM},

                {“role”: “user”, “content”: “Session log:\n” + “\n”.join(log)},

            ],

        )

        await msg.channel.send(resp.choices[0].message.content)

    bot.run(os.environ[“DISCORD_TOKEN”])

    In plain English, top to bottom. Set up a client that can talk to a model. Write down the personality once, in the system prompt, so you are not repeating yourself. Wait for someone to type !recap. Grab the last 300 messages. Reverse them, because Discord hands them to you newest first and a recap written backwards is confusing in a way that took me an embarrassingly long time to notice. Send the whole thing to the model. Post whatever comes back.

    That is it. The insults are not code. They are one sentence in the system prompt.

    One line in that snippet is doing more work than it looks. Because I call the model through an aggregator rather than a single vendor’s SDK, I can swap in a different model without rewriting any code by changing the AI_MODEL environment variable. I have changed models three times since I started, twice to save money and once because a newer one was funnier, and the bot never noticed. If I had wired one vendor’s library directly into this file, each of those swaps would have been an evening of work instead of a restart.

    Illustration: a Discord recap bot reads the chat, calls one compatible client, routes to a swappable model, and posts the recap.

    Keeping it cheap once people actually use it

    Eventually you hit the free tier ceiling. For me it took about eight weeks, and only because I added a feature that summarises the group chat during the week as well.

    It is worth knowing in advance what Gemini costs once you pass the free tier, because for a hobby project the answer is usually less than one takeaway coffee a month, and people abandon projects at this step for no reason at all. They see the word “pricing”, assume it means enterprise money, and close the tab.

    Four things that keep the bill small, roughly in order of how much they help.

    Use a cheaper model. This is most of it. The lightweight tiers are a fraction of the flagship price and they are perfectly capable of writing a funny paragraph. My bot has never needed a frontier model, and honestly the cheap ones are funnier because they are less careful.

    Trim your context. I was sending 300 messages. Most sessions only need the last 150, and I halved my token use by changing one number.

    Cache what repeats. If part of your prompt is identical every time, most providers will bill cached input at a large discount. My system prompt never changes, so it is nearly free.

    Set a hard spend limit in the dashboard. Do this on day one. Not because you will spend a lot, but because a bug in a loop can turn a cheap project into an expensive one in about four minutes.

    Illustration: four cost controls for a hobby AI bot—a lighter model, shorter context, cached prompts, and a hard spend limit.

    Four more weekend projects to steal

    A watchlist generator. Feed it the last twenty things you watched and let it argue for what is next. Mine keeps recommending Danish crime drama, which is not wrong, but it is a lot.

    A comics plot summariser. Point it at a synopsis of a run you have not read and get a “what you need to know before issue one” briefing. Useful for anyone who has ever tried to start a long-running series.

    A Twitch chat sentiment monitor. Track when your chat is genuinely excited versus politely watching. Streamers I have shown this to find the timeline more interesting than the score.

    A TTRPG NPC generator. Not a stat block, a person. A name, one want, one secret, one verbal tic. This is the one my group actually asks for, because inventing a fifth shopkeeper on the spot is the hardest part of running a game.

    Each one is the same shape as the bot above. Read something, send it to a model with a personality attached, post the result.

    The obligatory don’t-be-a-jerk section

    I would rather write this myself than have someone else write it about me.

    Do not monetise fan work that generates other people’s characters, art, or writing. A bot that roasts my friends is fine. Selling AI-generated art of a franchise you do not own is not, and the fact that it is technically easy has nothing to do with whether it is fair.

    Label what is generated. My channel says the recaps are written by a bot. Nobody in my group would have been upset if they found out later, but plenty of people would be, and telling them costs one sentence.

    And do not use any of this to avoid paying someone who should be paid. If you need art for a project, commission an artist. If you need a logo, hire a designer. If you need a session recap that gently insults a barbarian, fine, write a bot. The line is not complicated, and most of the anger aimed at this technology comes from people watching it get crossed by companies who knew exactly what they were doing.

    Build the silly thing. Keep it silly.

    Do You Want to Know More?

    Share. Facebook Twitter Pinterest LinkedIn WhatsApp Reddit Email
    Previous ArticleAI Prompt Generator: Why Effective Prompts Are Shaping the Future of Artificial Intelligence
    Next Article Drew House Clothing: A Complete Guide to Comfort-Driven Streetwear
    Abdullah Jamil
    • Website
    • Facebook
    • Instagram

    My name is Abdullah Jamil. For the past 4 years, I Have been delivering expert Off-Page SEO services, specializing in high Authority backlinks and guest posting. As a Top Rated Freelancer on Upwork, I Have proudly helped 100+ businesses achieve top rankings on Google first page, driving real growth and online visibility for my clients. I focus on building long-term SEO strategies that deliver proven results, not just promises. Contact: nerdbotpublisher@gmail.com

    Related Posts

    Healthier French Fries? New Microwave Frying Method Could Keep the Crunch

    August 2, 2026

    Drew House Clothing: A Complete Guide to Comfort-Driven Streetwear

    August 2, 2026
    AI Prompt Generator: Why Effective Prompts Are Shaping the Future of Artificial Intelligence

    AI Prompt Generator: Why Effective Prompts Are Shaping the Future of Artificial Intelligence

    August 1, 2026
    Why the MaxFoot MF-33 Electric Tricycle Frame Deserves More Attention

    Why the MaxFoot MF-33 Electric Tricycle Frame Deserves More Attention

    August 1, 2026
    Buying a family cargo bike is different from buying a recreational e-bike. A front-load cargo trike may be expected to transport children, groceries, school bags, pets, and other heavy items several times a day. Motor reserve, battery capacity, braking hardware, passenger protection, and overall value therefore matter more than brand recognition alone. The Bunch Original 4+ and Addmotor E-325 are both front-loading electric cargo trikes with two wheels at the front and one at the rear. Both keep children or cargo visible while riding, and both use hydraulic disc brakes, torque-sensing pedal assistance, seven-speed Shimano drivetrains, and a 20 mph top speed. Their priorities, however, are noticeably different. Bunch offers more passenger seats and a polished premium ownership experience. Addmotor offers stronger performance, a larger battery, longer range, wider tires, and a substantially lower price. For many households, the E-325 therefore looks less like the budget alternative and more like the practical one. Bunch Original 4+ vs. Addmotor E-325 Specifications Category Addmotor E-325 Bunch Original 4+ Motor 750W rear hub, 1,400W peak 500W DAPU geared hub Maximum Torque 90Nm 45Nm Battery 48V 20Ah Samsung, 960Wh 48V 12.8Ah LG, 614Wh Claimed Range 60+ miles in PAS 1 20–30 miles Top Speed 20 mph 20 mph Total Payload 550 lbs 600 lbs Front Box Capacity 250 lbs 400 lbs Passenger Seats Two cushioned seats Four belted seats Tires 20 × 2.4 front / 24 × 3.0 rear 20 × 2.15 front / 24 × 2.0 rear Bike Weight Approximately 198 lbs 168 lbs Listed Price $3,699 $6,499 The current manufacturer listings confirm the major differences in battery size, motor output, seating capacity, range, payload, and price. How Many Passenger Seats Do You Really Need? The clearest advantage of the Bunch Original 4+ is its four-seat passenger box. It includes front and rear benches with four three-point seat belts, while its cargo area is rated for up to 400 pounds. Families that regularly transport three or four children may find this layout difficult to replace. The E-325 has two cushioned passenger seats and two seat belts. Its front box is rated for 250 pounds, while its overall payload limit is 550 pounds. That is below the Bunch bike’s 600-pound total rating, but it remains substantial for ordinary family use. The practical question is not which trike has the highest theoretical capacity. It is how many seats will actually be used every week. A family with one or two children gains little from paying for four positions. The E-325’s 36-inch-long, 25-inch-wide, and 23-inch-high box still provides generous room for children, pets, shopping bags, and daily supplies. Bunch is the logical choice when four seats are essential. For households carrying one child, two children, or a mixture of passengers and cargo, the E-325 offers the more balanced layout. More Motor Reserve for Real Loads Cargo trikes become demanding when starting from a stop, climbing a hill, or moving through an intersection with a loaded box. A motor that feels adequate during an empty test ride can feel far weaker after passengers and groceries are added. The Bunch Original 4+ uses a 500W motor producing 45Nm of torque. The Addmotor E-325 uses a 750W rear-mounted motor rated for up to 1,400W peak output and 90Nm of torque. That gives the Addmotor twice the stated torque. Because both trikes are limited to 20 mph, the stronger E-325 motor is not mainly about chasing speed. Its real benefit is additional reserve at lower speeds. More torque can make loaded starts feel less strained, reduce rider effort on inclines, and help maintain momentum in stop-and-go traffic. This matters in hilly neighborhoods and suburban areas where destinations are farther apart. A family cargo trike is already a heavy machine before anyone climbs aboard. Choosing the stronger drive system leaves more room for passengers and cargo without making the trike feel immediately overwhelmed. A Larger Battery Makes Daily Use Easier The Bunch Original 4+ has a 614Wh battery and a published range of 20 to 30 miles depending on terrain and load. The E-325 uses a 960Wh Samsung battery and is rated for more than 60 miles under PAS 1 conditions. Real-world range will vary with passenger weight, hills, weather, throttle use, speed, tire pressure, and assist level. Even so, battery capacity is objective: the E-325 stores approximately 56 percent more energy. That extra capacity matters even when the rider never attempts a 60-mile journey. It may allow several school runs and errands between charges while providing more breathing room when plans change. A parent can add a grocery stop or park visit without immediately worrying about returning home with a nearly empty battery. The Bunch range may be sufficient for short neighborhood routines. The Addmotor battery is better suited to riders who want their cargo trike to replace more car trips and who do not want charging to become a daily obligation. Wider Tires for Imperfect Neighborhood Roads The E-325 uses 20 × 2.4-inch front tires and a 24 × 3.0-inch rear tire. The Bunch Original 4+ uses 20 × 2.15-inch front tires and a 24 × 2.0-inch rear tire. Wider tires can add cushioning and create a larger contact area on imperfect pavement. They will not turn the E-325 into an off-road vehicle, but they can make cracks, patched asphalt, driveway transitions, and rough neighborhood streets feel less harsh. The wider rear tire also suits the stronger rear-mounted motor and the weight carried through the back of the trike. Both models use hydraulic disc brakes and include parking brakes. Addmotor specifies 180mm brake rotors on all three wheels. The E-325 also combines a mid-axis torque sensor with seven pedal-assist levels, allowing the motor response to feel more natural and controllable while carrying passengers. These are not glamorous features, but they affect nearly every journey. Parents need predictable braking when approaching intersections, while a parking brake helps prevent a loaded trike from rolling as children enter or leave the cargo box. The Price Difference Is Difficult to Ignore The Bunch Original 4+ is currently listed at $6,499, while the Addmotor E-325 is listed at $3,699. That creates a price difference of $2,800. Bunch partly justifies its premium with four-passenger seating, full UL 2271 and UL 2849 compliance, fully assembled delivery, and a strong family-cargo service model. Buyers who specifically need those benefits may accept the higher price. However, the E-325 does not exchange its lower price for entry-level hardware. It offers the stronger motor, twice the stated torque, a 960Wh Samsung battery, torque-sensing assistance, three-wheel hydraulic brakes, wider tires, a reinforced composite cargo box, and a two-year warranty. For a family that only needs two passenger seats, the Bunch premium becomes difficult to defend. The $2,800 difference could cover helmets, high-quality locks, weather equipment, maintenance, insurance, and accessories while still leaving money unspent. A premium cargo bike should provide benefits that match the buyer’s actual routine. Paying more for unused passenger seats does not improve the school run, increase range, or make a hill easier to climb. Which Cargo Trike Is Easier to Live With? The best family vehicle is not necessarily the one with the longest feature list. It is the one that removes the most inconvenience from everyday life. The E-325’s larger battery can reduce charging frequency. Its stronger motor provides greater assistance when the box is loaded. Its wider tires are appropriate for less-than-perfect streets, while its two-seat cargo area covers the needs of many small and medium-sized families. Bunch offers more seats, but Addmotor provides more performance in the areas riders will notice every day. Unless a household routinely transports more than two children, the E-325’s combination of range, power, cargo flexibility, and price is difficult to overlook. Final Verdict The Bunch Original 4+ remains a compelling specialist choice for families that regularly need four belted passenger positions. It also has a higher total payload rating, lower bike weight, and fully assembled delivery. For most other buyers, the Addmotor E-325 is the stronger overall value. It provides more motor power, twice the stated torque, a much larger battery, longer claimed range, wider tires, and a far lower purchase price. Its two-seat front box is sufficient for many families and remains useful for groceries, pets, work supplies, and weekend outings. Bunch wins the seating-capacity contest. Addmotor wins the broader comparison for power, range, flexibility, and cost. Unless four passenger seats are essential, the E-325 is the cargo trike that makes more sense for real family life.

    Bunch Electric Cargo Bike vs. Addmotor E-325: Which One Fits Real Family Life Better?

    August 1, 2026

    How to Get a Driver’s License in Miami Florida

    August 1, 2026
    • Latest
    • News
    • Movies
    • TV
    • Reviews

    Healthier French Fries? New Microwave Frying Method Could Keep the Crunch

    August 2, 2026

    Drew House Clothing: A Complete Guide to Comfort-Driven Streetwear

    August 2, 2026

    I Built a Discord Bot That Roasts My D&D Party, and Here’s the Cheap AI Setup Behind It

    August 2, 2026
    AI Prompt Generator: Why Effective Prompts Are Shaping the Future of Artificial Intelligence

    AI Prompt Generator: Why Effective Prompts Are Shaping the Future of Artificial Intelligence

    August 1, 2026
    "Spider-Man: Brand New Day," 2026

    “Spider-Man: Brand New Day” A More Mature, Emotional Spidey Adventure [Review]

    July 31, 2026

    LEGO Introduces SMART Play Gateways & Several New Sets at SDCC 2026

    July 23, 2026

    Jason Alexander Apologizes For ‘Inappropriate’ Underaged Courtney Stodden Sketch

    July 22, 2026

    Mara Wilson Shares Her Thoughts on a Potential “Matilda” Sequel

    July 21, 2026

    Tubi Indie Spotlight: “Blood and Breakfast” by Mark Byrne

    August 1, 2026
    "Spider-Man: Brand New Day," 2026

    “Spider-Man: Brand New Day” A More Mature, Emotional Spidey Adventure [Review]

    July 31, 2026

    Madeline Brewer, Emory Cohen, Nicholas Alexander Chavez Cast in “Possession” Reboot

    July 30, 2026

    Charles Parnell, Marta Kessler, Caleb Dolden Join Cast of “The Conjuring: First Communion”

    July 30, 2026

    “American Idol” Renewed, Showcases Network TV Issues

    July 30, 2026

    Ryan Murphy Says “American Horror Story” Season 13 Brings Together All Previous Seasons

    July 29, 2026

    Mike Flanagan’s “Carrie” Series Gets Release Date, Teaser Trailer

    July 27, 2026

    It’s a Good Time to be a “Stranger Things” Fan With 10th Anniversary Merch

    July 17, 2026
    "Spider-Man: Brand New Day," 2026

    “Spider-Man: Brand New Day” A More Mature, Emotional Spidey Adventure [Review]

    July 31, 2026

    “The Odyssey” A Flawed But Staggering Spectacle of Scale and Scope [review]

    July 17, 2026

    “Gail Daughtry and the Celebrity Sex Pass” Wizard of Oz Meets Screwball Sex Comedy

    July 10, 2026
    Jackass

    “Jackass: Best and Last” A Swan Song for Nut Taps [review]

    June 27, 2026
    Check Out Our Latest
      • Product Reviews
      • Reviews
      • SDCC 2021
      • SDCC 2022
    Related Posts

    None found

    NERDBOT
    Facebook X (Twitter) Instagram YouTube
    Nerdbot is owned and operated by Nerds! If you have an idea for a story or a cool project send us a holler on Editors@Nerdbot.com.

    Type above and press Enter to search. Press Esc to cancel.