Ghosted my NPD Boyfriend for 24 Hours
Inspiration
I missed the class where we built Mastodon bots, so I relied on the slides and documentation to catch up.
But I didn’t just want to post quotes or auto-respond. I wanted to build something with a story, something… uncomfortable. Something that feels like bumping into a random sub account and immediately thinking “okay they both need help.”
For the record, I have never ghosted anyone, unless it’s a platform I forget to log into.
So I started wondering — what kind of person would make me want to ghost them?
Character Design
The bot persona is inspired by the following traits:
- NPD
- emotionally manipulative
- incapable of clear communication
- paranoid
Bot Structure
- 24 groups of messages, one group per hour (time interval between each message in a group is 600000ms = 10 minutes)
- messages reflect time passing, mental deterioration, and failed emotional regulation
- the tone shifts from coldly performative → agitated → delusional → resigned
- by the end you’re meant to think: “this is awful but why am I feeling relatable”
Text Preperation
I interviewed several friends, especially those who’ve been ghosted or hurt by emotionally manipulative people, & asked: “what kind of things do toxic people say when they message you after being ignored?”
I also ran roleplay scenarios where I pretended to be the ghoster, they responded as the ghosted.
Here are some screenshots from our groupchat:



A lot of the text came out of those mock dialogues, revised and rearranged.




In the end I have a full document with 24 group of messages.
Code
I organized the messages in a nested array.
Every hour, the bot takes messages[i], loops through the sub-array, and posts each string as a separate toot.
Each message inside a group is sent with a short delay using setTimeout for drama & typing stimulation & community rule 2.
The outer loop is handled by a setInterval scheduled every hour.
After 24 rounds, the bot stops & clearInterval() (We’ll get to that later)
Testing
For testing, I:
- Changed the visibility from public to private
- Changed the interval from 3600000 ms to 30000 ms so I don’t have to wait so long between message groups
After only two tries running locally the whole cycle works!!

Technical Issues
After the last batch of messages was posted, the bot kept trying to post again.

This error came from trying to access currentGroup[messageIndex] when currentGroup was already undefined cuz the array was out of bounds, but setInterval was still looping.
To fix it, I wrapped setInterval in a const so I could later call clearInterval(hourlyInterval) once everything had been posted.


Profile
This part has nothing to do with functionality but only vibes.
I want to give a “you should’ve blocked this guy earlier” vibe.
I literally googled “emo boy profile pic”, pulled a dozen cursed options, and asked my interviewees which one gave them “the most concerning energy.” They voted democratically.

Server
