The Peril of AI in the Engagement Era

There’s an alarming trend quietly reshaping the internet, and it lies at the crossroads of three unsettling ideas.
First, the Dead Internet Theory—the notion that most online activity and engagement today is driven by bots. Some dismiss it as a conspiracy, but we’ll come back to why it might not be so far-fetched.
Second, the rise of Artificial Intelligence. I know, everybody’s exhausted by the AI discourse—but bear with me.
And third, astroturfing, the manufacturing of fake grassroots movements to make fringe ideas or small groups seem massive and organic.
But before we get ahead of ourselves, let’s take a step back.
When Nothing Online Feels Authentic
Like many people, I’ve developed a habit (or rather, addiction) of doomscrolling on social media. And the deeper I go, the more I have to ask how many of these posts originated from real people.
Every social media platform has its own set of unique issues. Facebook has AI posts that are very clearly engagement bait - an AI image of somebody with a deformity, or down on their luck, with a statement like “Nobody wished me Happy Birthday sad face“
Instagram now has plenty of AI or artificially generated videos, and its algorithm keeps you scrolling much like TikTok’s.
And Twitter (not calling it X), is another beast entirely. It used to be that you could sus out fake accounts due to the “egg” profile photo and excessive numbers at the end of a profile handle, but now, posting about any hot topic will likely draw the ire of some hyper-fanatic.
But in my opinion, the latter platform has grown increasingly suspect, particularly in the last few years. When any controversial event arises, it almost seems like there’s a concerted narrative pushed by numerous accounts with very generic names. There are countless accounts that define themselves by a single platform or ideal. It really makes somebody question how can people be that increadibly one-dimensional, and how can someone be so terminally online that they have accumulated tens of thousands of posts, and thousands of followers with those same one-dimensional ideals.
I think the truth is that while sure, there are some people out there so dedicated to a principle that it defines them so much that they can post something essentially every few minutes of each day, but that would be an incredibly rare edge case and that there must be something more at play.
Intersection of Automation and API’s
I’ve recently been spending quite a bit of time studying and developing my ability to use Python. As somebody who works in IT, the idea is that you ALWAYS have to be developing a new skill or ability. With the advent of automation, being able to develop a script to accomplish a task is a differentiating skill. One core tenet of automation is the ability to program repeatable actions to be able to be a force multiplier. In this way, one person can accomplish the tasks of many.
A concept many in the technical space are familiar with is that of an API, or Application Programming Interface. When us humans need to use a piece of software or a service, we need to go through a cumbersome set of steps, such as logging in, clicking around, giving directions, etc. An API is a way to develop a program, or code, that can interact with another program or service, without the need for these human interfaces. In this way, they can operate much more efficiently.
Instead of logins and passwords, many web API’s use tokens. For the layman, think of this setup as a VIP backdoor where instead of needing to log in to complete an action, your script can simply reach a special endpoint with a token and perform a desired action right away.
The Goodest Dog

Enter Piper.
Personifying your pet with their own personality and human characteristics is something I think everyone does, and my personal head-canon for my cockapoo Piper is that she’s just an incredibly positive, hyper-religious, naive force for good in the world.
I couldn’t think of a funner project than to create her own little artificially intelligent persona on Twitter - so I went to work.
The easiest part was creating an account at https://platform.openai.com/. Here, I was able to create my API keys, and load $5 into my account so that I can make API calls to generate tweets based on any prompt I gave it.
Similarly, I then went to https://developer.x.com/ to create a developer account for my dog persona - in which case I gave her the handle @PiperIsGood and also created my API keys.

I decided on a very simple program loop. Every two hours, Piper would roll a random number, which would determine the tweet prompt that was fed into OpenAI’s API.
For example, here is an excerpt if an 8 was rolled, which would ask for OpenAI to generate a tweet in support of the homeless.
elif num == 8:
print("Rolled Homeless Support Tweet")
prompt=f"Craft a wholesome 140 char religious tweet from a cockapoo dog in support of the homeless"
response = openai.chat.completions.create(
model="gpt-4o-mini",
messages=[
{
"role": "user",
"content": prompt,
}
],
max_tokens=50
)
This in turn, would cause OpenAI to return a payload that looks like this:
ChatCompletion(id='REDACTED',
choices=[Choice(finish_reason='stop', index=0,
logprobs=None, message=ChatCompletionMessage(content="
🐾✨ As a cockapoo, I wag my tail in support of the
homeless! 💖 Let's share warmth & kindness, for every soul
deserves love. #PawsForHope 🐶🙏", refusal=None,
role='assistant', audio=None, function_call=None,
tool_calls=None, annotations=[]))], created=1746370017,
model='gpt-4o-mini-2024-07-18', object='chat.completion',
service_tier='default', system_fingerprint='fp_129a36352a',
usage=CompletionUsage(completion_tokens=43,
prompt_tokens=26, total_tokens=69,
completion_tokens_details=CompletionTokensDetails
(accepted_prediction_tokens=0, audio_tokens=0,
reasoning_tokens=0, rejected_prediction_tokens=0),
prompt_tokens_details=PromptTokensDetails(audio_tokens=0,
cached_tokens=0)))
This payload can then be stripped, and then fed into Tweepy’s API with the line api.create_tweet(text=tweet_content)
. Note that most of the heavy lifting on this code was performed when the API object was created, which is where the API keys and other attributes were defined.
From here, if we were to go to Twitter, our Goodest Dog has then tweeted:

Semi-Dynamic Interaction
Having an online persona for Piper was admittedly pretty cool, but seeing her post online to nobody doesn’t really go beyond the “neat party trick” category. We have a foundation to work with, so now let’s add a little bit of extra interactivity.
In version two of the Piper bot, a dice-roll of ten will now call an added function to check her feed, pull in the first tweet at the top of the feed, and then feed it into the OpenAI API with the prompt of "Craft a wholesome 140 char response a religious cockapoo dog would give to the following tweet: {tweet}"
.
The code itself to pull in a tweet is not complicated, to make the script fairly modular, it was added as it’s own function:
def get_first_feed():
response = api.get_home_timeline(max_results=1)
print("Tweet Piper is Responding to:")
print(response.data[0].text)
return response.data[0].id, response.data[0].text
A reply flag was also added throughout the script, so if the random number generator landed on the reply case, it would flip that flag to true, which would then signal the post_tweet()
function to know that this is a tweet that replies to an existing tweet, and would know to also use the ID of the original tweet in it’s post.
def post_tweet():
tweet_content, reply, id = generate_chatgpt_content()
print(f"Posting tweet: {tweet_content}")
if reply == False:
api.create_tweet(text=tweet_content)
elif reply == True:
api.create_tweet(in_reply_to_tweet_id=id,text=tweet_content)
Now this added functionality yielded some… interesting results…

Firstly - I’m always surprised at how dynamic her responses are. In almost every post, the response seems almost organic. You wouldn’t really think that an AI would be at the point that given something as simple as a tweet, it could have the creativity and the context to draft something relevant. I also think it’s interesting to call attention to the “Post Activity” button on the bottom. The Piper AI simply commenting on a post was able to get 1.2K impressions by riding on the coattails of another post. That’s 1.2K people that saw her tweet.
West Texas Travis
It was concerningly easy to put together a simple script that makes semi-organic seeming posts online, and this leads to to the third part of the thesis - that it can also be trivially easy to steer public opinion.
Enter Travis.

To nearly every person who uses Twitter online, Piper is an obviously fake profile. Though we don’t know who is on the other side of the screen we can likely rest assured only a strange person would sit behind a computer at all hours and post imaginary tweets from the mind of a dog.
What if, the same logic behind her account were attached to something quite a bit more tangible - with a face as recognizable as our own, with a seemingly common backstory. It was incredibly simple to even fake a profile picture, San Antonio is a very common tourist destination to anybody in Texas. This actually would provide somebody skeptical with some grounding in the real world.

Travis has a similar setup, except Travis’ color is firing off the occasional tweet about West Texas Wind Energy, Country music, and being very open about his political affiliations. He even shares Pipers ability to respond to tweets about current events.

One of my theories was that if left alone long enough, Travis would eventually become accepted by other bots and start to gain their followings and engagements, which, did not take long.

Not only do those tweets look familiar, but, I spy a Grok watermark.

And it wasn’t long until he began to get interaction from real people…

And for a set-it-and-forget-it script running at all times, with a 10% chance of engaging with other accounts, he slowly but surely gained followers. Most, if not all were clearly not from real accounts, however to anybody taking a quick glance at a profile, it lends initial credibility to what is basically an account that could be weaponized to help push an agenda. A web for any unaware person to get caught up in, thinking they are a part of a movement.

The original idea was to push this as far as possible - purchasing a verified profile badge to lend even more legitimacy, and increasing the amount of engagement to expedite the follower count. Something I did not expect was how well this account actually performed, and while I think this experiment at this scale is ethical as far as a proof of concept in it’s theory, I have major concerns at the current time in scaling further.
Selling Shovels
West Texas Travis could be of any political affiliation. East Texas Travis could be used to influence a democratic primary, or even far-left activist agendas. I also believe that this is not only a known problem, but one that is profited on as well.
While reading, you may have asked yourself - if the idea and experiment was to gauge engagement, why was there only a 10% chance to reply to one tweet every two hours? Wouldn’t you want to create a script that is constantly engaging and posting?
Well, let me introduce you to API Pricing.

Many API’s online are free, and most will rate-limit to avoid congestion at their endpoints. And because services can be expensive to maintain, some API’s may carry a premium as well.
Twitter has a very interesting API setup. For free, you can only create 500 posts in a month. At roughy 720 hours in a month, divided by 500, that’s about a post every hour and a half. This limit matches their rate-limit - you can only make a post 17 times per 24 hour period.
However, the free-tier allows you to only read about 100 posts a month. This is incredibly limiting. Refreshing your timeline probably pulls about 30 posts, so imagine you can only do that 3 times in a month period. This is why the reply function only scrapes the top post without even bothering to look at the others.
For $200 a month, the lid is blown off of most of these limits. You could post 100 times in 24 hours per user (1667/24 hours per app), read 15K posts in a month, access DM functions, and get access to trends.
This price almost seems too strategically placed for this type of use case. If you were attempting to create fake personas online, $200 a month seems like a pretty strategic price point to be able to create 2.4K posts with potentially a heavy amount of influence.
In Conclusion
Many are very aware that not everybody online is real, and with the proliferation and ease of access of sophisticated AI tools this problem only seems as though it may get worse. To my knowledge, there aren’t any laws, regulations nor guardrails in place or planned to attempt to curb this problem. I couldn’t even begin to theorize what palatable regulations would even look like. In my honest opinion, social media has been so damaging to society that I believe that all social media profiles should be verifiable to traced back to the person or organization behind them, but that would not be politically feasible.
The scripts here were cobbled together in mere hours, and placed on my GitHub at https://github.com/rodriguezmarkd/SimpleTwitterBot. For now, awareness is likely the best antidote to this issue.