๐Ÿค– XActions Automation Framework Guide

February 25, 2026 ยท View on GitHub

A complete browser automation toolkit for X (Twitter) growth and engagement.


โš ๏ธ Important Disclaimer

These automation tools are for educational purposes and personal productivity. Please:

  • Respect X's Terms of Service โ€” automation may violate their ToS
  • Use responsibly โ€” don't spam, harass, or abuse these tools
  • Understand the risks โ€” your account could be limited or suspended
  • Start slow โ€” test with conservative settings first

๐Ÿ“ฆ Architecture Overview

All automation scripts use a modular architecture:

src/automation/
โ”œโ”€โ”€ core.js               โ† Required! Load this first
โ”œโ”€โ”€ actions.js            โ† XActions library (100+ actions)
โ”œโ”€โ”€ algorithmBuilder.js   โ† LLM-powered algorithm cultivation (browser)
โ”œโ”€โ”€ autoLiker.js          โ† Timeline auto-liking
โ”œโ”€โ”€ keywordFollow.js      โ† Search & auto-follow
โ”œโ”€โ”€ smartUnfollow.js      โ† Time-based unfollowing
โ”œโ”€โ”€ linkScraper.js        โ† Extract links from profiles
โ”œโ”€โ”€ autoCommenter.js      โ† Auto-comment on new posts
โ”œโ”€โ”€ multiAccount.js       โ† Multi-account management (user:pass import)
โ”œโ”€โ”€ growthSuite.js        โ† All-in-one growth automation
โ”œโ”€โ”€ followTargetUsers.js  โ† Follow followers/following of accounts 
โ”œโ”€โ”€ followEngagers.js     โ† Follow likers/retweeters of posts
โ”œโ”€โ”€ protectActiveUsers.js โ† Don't unfollow users who engage with you
โ”œโ”€โ”€ quotaSupervisor.js    โ† Sophisticated rate limiting
โ”œโ”€โ”€ sessionLogger.js      โ† Action tracking & analytics
โ””โ”€โ”€ customerService.js    โ† Customer service bot for businesses

Core Module provides shared utilities:

  • Rate limiting
  • DOM selectors
  • Storage helpers
  • Action queue
  • Logging system

๐ŸŽฏ XActions Library (actions.js)

The complete X/Twitter actions library with 100+ functions covering every available user action.

Quick Start

// 1. Load core.js first
// 2. Load actions.js
// 3. Use XActions!

Available Sections

SectionDescriptionKey Functions
XActions.tweetPosting & managing tweetspost(), reply(), quote(), delete(), pin(), thread()
XActions.engageEngagement actionslike(), retweet(), bookmark(), copyLink(), highlight()
XActions.userUser interactionsfollow(), unfollow(), block(), mute(), restrict()
XActions.dmDirect messagessend(), createGroup(), sendGif(), react(), delete()
XActions.searchSearch & discoveryquery(), advanced(), hashtag(), from(), latest()
XActions.navNavigationhome(), explore(), messages(), bookmarks(), profile()
XActions.listsList managementcreate(), delete(), edit(), follow(), pin()
XActions.settingsAccount settingsmutedAccounts(), addMutedWord(), downloadData()
XActions.profileProfile editingupdateName(), updateBio(), updateLocation(), updateAvatar()
XActions.utilsUtilitiesgetTokens(), exportBookmarks(), devMode(), copyToClipboard()
XActions.spacesTwitter Spacesjoin(), leave(), requestToSpeak(), share()
XActions.communitiesCommunitiesbrowse(), join(), leave(), post()

Examples

Post a tweet:

await XActions.tweet.post("Hello world! ๐Ÿ‘‹")

Reply to a tweet:

const tweets = XActions.tweet.getAll()
await XActions.tweet.reply(tweets[0], "Great post!")

Like all visible tweets:

for (const tweet of XActions.tweet.getAll()) {
  await XActions.engage.like(tweet)
}

Follow a user:

await XActions.user.follow("elonmusk")

Block a user:

await XActions.user.block("spammer123")

Send a DM:

await XActions.dm.send("username", "Hey! How are you?")

Advanced search:

await XActions.search.advanced({
  words: "javascript",
  from: "github",
  minFaves: 100,
  since: "2024-01-01",
  hasMedia: true,
})

Export all bookmarks:

const bookmarks = await XActions.utils.exportBookmarks(500)
console.log(bookmarks)

Create a list:

await XActions.lists.create("Tech News", "Best tech accounts", true)

Enable dev mode (see all selectors):

XActions.utils.devMode()

๏ฟฝ XActions Function Reference

XActions.user (Part 2) - Profile Exploration

XActions.user.viewMedia(username) - View user's media

// Example 1: View a creator's media gallery
await XActions.user.viewMedia("mkbhd")
// Opens mkbhd's media tab to see all photos and videos

// Example 2: Research competitor visual content
await XActions.user.viewMedia("competitor")
// Navigate to their media to analyze their visual strategy

// Example 3: Browse before following
const username = "potentialfollow"
await XActions.user.viewMedia(username)
// Check their media content before deciding to follow

XActions.user.viewReplies(username) - View user's replies

// Example 1: See how a user engages with others
await XActions.user.viewReplies("naval")
// View naval's replies to understand their engagement style

// Example 2: Find conversation threads
await XActions.user.viewReplies("elonmusk")
// See what topics they're actively discussing

// Example 3: Research a user's communication style
async function analyzeEngagementStyle(username) {
  await XActions.user.viewReplies(username)
  console.log(`Viewing ${username}'s replies...`)
}
await analyzeEngagementStyle("pmarca")

XActions.user.viewHighlights(username) - View user's highlights

// Example 1: See curated content from a creator
await XActions.user.viewHighlights("sama")
// View Sam Altman's highlighted/pinned content

// Example 2: Find best content quickly
await XActions.user.viewHighlights("paulg")
// Jump straight to their most important posts

// Example 3: Research thought leaders
const leaders = ["balajis", "cdixon", "naval"]
for (const leader of leaders) {
  await XActions.user.viewHighlights(leader)
  await new Promise(r => setTimeout(r, 3000)) // Review each
}

XActions.user.viewArticles(username) - View user's articles

// Example 1: Read long-form content from a writer
await XActions.user.viewArticles("maborak")
// View their X articles/long posts

// Example 2: Find in-depth analysis
await XActions.user.viewArticles("VitalikButerin")
// Navigate to their detailed articles

// Example 3: Content research workflow
async function researchArticles(username) {
  await XActions.user.viewArticles(username)
  console.log(`Reading articles from @${username}...`)
}
await researchArticles("aeyakovenko")
// Example 1: Share someone's profile
await XActions.user.shareProfile("github")
// Copies x.com/github to clipboard

// Example 2: Save profile link for later
const usersToShare = ["vercel", "supabase", "railway"]
for (const user of usersToShare) {
  await XActions.user.shareProfile(user)
  console.log(`Copied @${user}'s profile link!`)
}

// Example 3: Build a list of profile links
async function collectProfileLinks(usernames) {
  const links = []
  for (const username of usernames) {
    await XActions.user.shareProfile(username)
    links.push(`https://x.com/${username}`)
  }
  return links
}

XActions.user.followsYou(username) - Check if user follows you

// Example 1: Check if someone follows you back
const followsBack = await XActions.user.followsYou("elonmusk")
console.log(followsBack ? "They follow you!" : "They don't follow you")

// Example 2: Filter mutuals from a list
async function findMutuals(usernames) {
  const mutuals = []
  for (const username of usernames) {
    if (await XActions.user.followsYou(username)) {
      mutuals.push(username)
    }
  }
  console.log(`Found ${mutuals.length} mutuals:`, mutuals)
  return mutuals
}
await findMutuals(["friend1", "friend2", "friend3"])

// Example 3: Check before unfollowing
async function smartUnfollow(username) {
  if (await XActions.user.followsYou(username)) {
    console.log(`Keeping @${username} - they follow you!`)
    return false
  }
  await XActions.user.unfollow(username)
  return true
}

XActions.user.getInfo(username) - Get user info object

// Example 1: Get basic user information
const info = await XActions.user.getInfo("openai")
console.log(`${info.name} (@${info.username})`)
console.log(`Followers: ${info.followersCount}`)
console.log(`Bio: ${info.bio}`)

// Example 2: Analyze user metrics
async function analyzeAccount(username) {
  const info = await XActions.user.getInfo(username)
  const ratio = info.followersCount / (info.followingCount || 1)
  console.log(`@${username} follower ratio: ${ratio.toFixed(2)}`)
  return { username, ...info, ratio }
}
await analyzeAccount("ycombinator")

// Example 3: Build a user database
async function collectUserData(usernames) {
  const database = []
  for (const username of usernames) {
    const info = await XActions.user.getInfo(username)
    database.push(info)
    await new Promise(r => setTimeout(r, 1000))
  }
  console.log(`Collected data for ${database.length} users`)
  return database
}

XActions.user.restrict(username) - Restrict user interactions

// Example 1: Restrict a user without blocking
await XActions.user.restrict("annoyinguser")
// They won't know they're restricted, but their interactions are limited

// Example 2: Soft moderation for borderline accounts
const borderlineUsers = ["user1", "user2"]
for (const user of borderlineUsers) {
  await XActions.user.restrict(user)
  console.log(`Restricted @${user}`)
}

// Example 3: Restrict instead of block for public figures
async function softModerate(username) {
  await XActions.user.restrict(username)
  console.log(`@${username} restricted - they can still see you but limited interaction`)
}
await softModerate("spammyuser")

XActions.dm - Direct Messages

XActions.dm.send(username, message) - Send a DM

// Example 1: Send a simple DM
await XActions.dm.send("friend", "Hey! How are you doing?")

// Example 2: Outreach message
await XActions.dm.send("potentialclient", `
Hi! I came across your work and I'm impressed.
Would love to connect and discuss potential collaboration.
`)

// Example 3: Batch outreach with personalization
const prospects = [
  { username: "lead1", company: "TechCorp" },
  { username: "lead2", company: "StartupXYZ" }
]
for (const p of prospects) {
  await XActions.dm.send(p.username, 
    `Hi! Loved what you're building at ${p.company}. Let's connect!`)
  await new Promise(r => setTimeout(r, 5000)) // Wait between DMs
}

XActions.dm.open(username) - Open DM conversation

// Example 1: Open an existing conversation
await XActions.dm.open("bestfriend")
// Opens the DM thread with bestfriend

// Example 2: Quick access to important DMs
const priorityDMs = ["boss", "client", "partner"]
await XActions.dm.open(priorityDMs[0])

// Example 3: Navigate to DM before sending media
await XActions.dm.open("teammate")
// Then you can manually add images/files
console.log("DM opened - ready to send media!")

XActions.dm.getConversations() - Get all DM conversations

// Example 1: List all your conversations
const convos = await XActions.dm.getConversations()
console.log(`You have ${convos.length} conversations`)

// Example 2: Find unread conversations
const convos = await XActions.dm.getConversations()
const unread = convos.filter(c => c.unread)
console.log(`${unread.length} unread conversations`)

// Example 3: Export conversation list
const convos = await XActions.dm.getConversations()
const summary = convos.map(c => ({
  user: c.username,
  lastMessage: c.lastMessagePreview,
  time: c.lastMessageTime
}))
console.table(summary)

XActions.dm.deleteConversation(element) - Delete conversation

// Example 1: Delete a specific conversation
const convos = await XActions.dm.getConversations()
const targetConvo = convos.find(c => c.username === "oldcontact")
if (targetConvo) {
  await XActions.dm.deleteConversation(targetConvo.element)
  console.log("Conversation deleted!")
}

// Example 2: Clean up old conversations
const convos = await XActions.dm.getConversations()
for (const convo of convos.slice(0, 5)) { // Delete first 5
  await XActions.dm.deleteConversation(convo.element)
  await new Promise(r => setTimeout(r, 1000))
}

// Example 3: Delete conversations with specific users
const toDelete = ["spammer1", "spammer2"]
const convos = await XActions.dm.getConversations()
for (const convo of convos) {
  if (toDelete.includes(convo.username)) {
    await XActions.dm.deleteConversation(convo.element)
  }
}

XActions.dm.leaveGroup() - Leave group DM

// Example 1: Leave current group DM
await XActions.dm.leaveGroup()
console.log("Left the group!")

// Example 2: Leave after sending goodbye
await XActions.dm.send("", "Thanks everyone, I'm leaving this group. Bye!")
await new Promise(r => setTimeout(r, 2000))
await XActions.dm.leaveGroup()

// Example 3: Cleanup group memberships
// First navigate to the group DM you want to leave
await XActions.dm.open("groupname")
await XActions.dm.leaveGroup()
console.log("Successfully left group")

XActions.dm.createGroup(usernames, groupName) - Create group DM

// Example 1: Create a team group
await XActions.dm.createGroup(
  ["teammate1", "teammate2", "teammate3"],
  "Project Alpha Team"
)

// Example 2: Create a friends group
await XActions.dm.createGroup(
  ["friend1", "friend2", "friend3", "friend4"],
  "Weekend Plans ๐ŸŽ‰"
)

// Example 3: Create mastermind group
const mastermindMembers = ["founder1", "founder2", "founder3"]
await XActions.dm.createGroup(mastermindMembers, "Founders Mastermind")
console.log("Group created with", mastermindMembers.length, "members")

XActions.dm.sendImage() - Send image in DM

// Example 1: Open image picker in DM
await XActions.dm.open("friend")
await XActions.dm.sendImage()
// Opens file picker to select an image

// Example 2: Prepare to send screenshot
await XActions.dm.open("colleague")
await XActions.dm.sendImage()
console.log("Select your screenshot to send...")

// Example 3: Share image workflow
async function shareImageWith(username) {
  await XActions.dm.open(username)
  await XActions.dm.sendImage()
  console.log(`Image picker opened for @${username}`)
}
await shareImageWith("designer")

XActions.dm.sendGif(searchTerm) - Send GIF in DM

// Example 1: Send a celebration GIF
await XActions.dm.open("friend")
await XActions.dm.sendGif("celebration")

// Example 2: React with a funny GIF
await XActions.dm.sendGif("laughing")

// Example 3: Send themed GIFs
const reactions = {
  happy: "excited dance",
  sad: "crying",
  surprised: "shocked",
  thanks: "thank you bow"
}
await XActions.dm.open("bestie")
await XActions.dm.sendGif(reactions.happy)

XActions.dm.react(messageElement, emoji) - React to message

// Example 1: React to a message with heart
const messages = document.querySelectorAll('[data-testid="messageEntry"]')
const lastMessage = messages[messages.length - 1]
await XActions.dm.react(lastMessage, "โค๏ธ")

// Example 2: React with fire emoji
await XActions.dm.react(lastMessage, "๐Ÿ”ฅ")

// Example 3: React to multiple messages
const messages = document.querySelectorAll('[data-testid="messageEntry"]')
const reactions = ["โค๏ธ", "๐Ÿ˜‚", "๐Ÿ”ฅ", "๐Ÿ‘", "๐Ÿ˜ฎ"]
for (let i = 0; i < Math.min(5, messages.length); i++) {
  await XActions.dm.react(messages[i], reactions[i])
  await new Promise(r => setTimeout(r, 500))
}

XActions.search - Search & Discovery

XActions.search.query(query, filter) - Search with query

// Example 1: Basic search
await XActions.search.query("javascript tips")

// Example 2: Search with filter
await XActions.search.query("web development", "latest")
// Filters: 'top', 'latest', 'people', 'photos', 'videos'

// Example 3: Research trending topics
const topics = ["AI news", "startup funding", "tech layoffs"]
for (const topic of topics) {
  await XActions.search.query(topic, "latest")
  console.log(`Searching: ${topic}`)
  await new Promise(r => setTimeout(r, 3000))
}

XActions.search.top(query) - Search top results

// Example 1: Find most popular tweets about a topic
await XActions.search.top("machine learning")

// Example 2: Research viral content
await XActions.search.top("product launch")
// Shows most engaged tweets

// Example 3: Competitive research
const competitors = ["shopify", "stripe", "square"]
for (const comp of competitors) {
  await XActions.search.top(comp)
  console.log(`Top tweets about ${comp}`)
  await new Promise(r => setTimeout(r, 2000))
}

XActions.search.latest(query) - Search latest

// Example 1: Find breaking news
await XActions.search.latest("breaking news crypto")

// Example 2: Real-time event monitoring
await XActions.search.latest("conference keynote")

// Example 3: Track live discussions
setInterval(async () => {
  await XActions.search.latest("bitcoin")
  console.log("Refreshed latest bitcoin tweets")
}, 60000) // Every minute

XActions.search.people(query) - Search people

// Example 1: Find experts in a field
await XActions.search.people("AI researcher")

// Example 2: Discover potential connections
await XActions.search.people("javascript developer")

// Example 3: Find team members
const roles = ["frontend engineer", "product designer", "DevRel"]
for (const role of roles) {
  await XActions.search.people(role)
  console.log(`Found people: ${role}`)
  await new Promise(r => setTimeout(r, 2000))
}

XActions.search.photos(query) - Search photos

// Example 1: Find visual content
await XActions.search.photos("infographic design")

// Example 2: Research visual trends
await XActions.search.photos("UI design inspiration")

// Example 3: Find memes and visual content
await XActions.search.photos("tech meme")
console.log("Browsing tech memes...")

XActions.search.videos(query) - Search videos

// Example 1: Find video content
await XActions.search.videos("coding tutorial")

// Example 2: Discover video creators
await XActions.search.videos("tech review")

// Example 3: Research video formats
const videoTypes = ["explainer video", "demo video", "product showcase"]
for (const type of videoTypes) {
  await XActions.search.videos(type)
  await new Promise(r => setTimeout(r, 3000))
}

XActions.search.from(username) - Search from user

// Example 1: Search all tweets from a user
await XActions.search.from("elonmusk")

// Example 2: Find a user's tweets about a topic
await XActions.search.from("naval")
// Then manually add keywords to refine

// Example 3: Research someone's tweet history
async function researchUser(username) {
  await XActions.search.from(username)
  console.log(`Viewing all tweets from @${username}`)
}
await researchUser("paulg")

XActions.search.to(username) - Search to user

// Example 1: Find replies to a user
await XActions.search.to("github")

// Example 2: See what people are asking someone
await XActions.search.to("openai")

// Example 3: Monitor customer feedback
await XActions.search.to("yourcompany")
console.log("Viewing all replies to your company account")

XActions.search.mentions(username) - Search mentions

// Example 1: Find all mentions of a user
await XActions.search.mentions("vitalikbuterin")

// Example 2: Track brand mentions
await XActions.search.mentions("yourbrand")

// Example 3: Monitor mentions of competitors
const competitors = ["competitor1", "competitor2"]
for (const comp of competitors) {
  await XActions.search.mentions(comp)
  console.log(`Mentions of @${comp}`)
  await new Promise(r => setTimeout(r, 2000))
}

XActions.search.hashtag(tag) - Search hashtag

// Example 1: Track a hashtag
await XActions.search.hashtag("buildinpublic")

// Example 2: Find community discussions
await XActions.search.hashtag("100DaysOfCode")

// Example 3: Monitor event hashtags
const eventTags = ["TechConf2024", "ProductHunt", "WebSummit"]
for (const tag of eventTags) {
  await XActions.search.hashtag(tag)
  console.log(`#${tag} tweets loaded`)
  await new Promise(r => setTimeout(r, 2000))
}

XActions.search.advanced(options) - Advanced search with operators

// Example 1: Find viral tweets from a user
await XActions.search.advanced({
  from: "elonmusk",
  minFaves: 10000,
  since: "2024-01-01"
})

// Example 2: Find tech discussions with media
await XActions.search.advanced({
  words: "AI startup",
  hasMedia: true,
  minRetweets: 100,
  lang: "en"
})

// Example 3: Find your own mentions
await XActions.search.advanced({
  mentioning: "yourusername",
  excludeRetweets: true
})

// Example 4: Complex research query
await XActions.search.advanced({
  words: "remote work",
  from: "",           // Any user
  minFaves: 500,
  minRetweets: 50,
  hasLinks: true,
  since: "2024-06-01",
  until: "2024-12-31",
  lang: "en",
  excludeReplies: true
})

// Example 5: Find job opportunities
await XActions.search.advanced({
  words: "hiring OR job",
  hasLinks: true,
  minFaves: 10,
  lang: "en"
})

XActions.search.getResults() - Get current search results

// Example 1: Get tweets from current search
const results = await XActions.search.getResults()
console.log(`Found ${results.length} results`)

// Example 2: Process search results
await XActions.search.latest("web3 jobs")
const results = await XActions.search.getResults()
for (const tweet of results) {
  console.log(`@${tweet.username}: ${tweet.text.slice(0, 100)}...`)
}

// Example 3: Export search results
await XActions.search.top("startup advice")
const results = await XActions.search.getResults()
const data = results.map(r => ({
  user: r.username,
  text: r.text,
  likes: r.likeCount,
  retweets: r.retweetCount
}))
console.table(data)

XActions.nav (Part 1) - Core Navigation

XActions.nav.home() - Navigate to home

// Example 1: Go to home timeline
await XActions.nav.home()

// Example 2: Return home after browsing
// After finishing tasks on other pages
await XActions.nav.home()
console.log("Back to home timeline!")

// Example 3: Start automation from home
await XActions.nav.home()
// Begin liking/engagement automation from home feed

XActions.nav.explore() - Navigate to explore

// Example 1: Go to explore page
await XActions.nav.explore()

// Example 2: Discover trending content
await XActions.nav.explore()
console.log("Browsing explore page for trends...")

// Example 3: Content discovery workflow
await XActions.nav.explore()
await new Promise(r => setTimeout(r, 2000))
const trends = document.querySelectorAll('[data-testid="trend"]')
console.log(`Found ${trends.length} trending topics`)

XActions.nav.notifications() - Navigate to notifications

// Example 1: Check notifications
await XActions.nav.notifications()

// Example 2: Monitor mentions and interactions
await XActions.nav.notifications()
console.log("Checking latest notifications...")

// Example 3: Notification check workflow
async function checkNotifications() {
  await XActions.nav.notifications()
  await new Promise(r => setTimeout(r, 2000))
  console.log("Notifications loaded")
}
await checkNotifications()

XActions.nav.messages() - Navigate to messages

// Example 1: Open DM inbox
await XActions.nav.messages()

// Example 2: Check for new DMs
await XActions.nav.messages()
console.log("Checking direct messages...")

// Example 3: DM management workflow
await XActions.nav.messages()
const convos = await XActions.dm.getConversations()
console.log(`You have ${convos.length} conversations`)

XActions.nav.bookmarks() - Navigate to bookmarks

// Example 1: View saved bookmarks
await XActions.nav.bookmarks()

// Example 2: Review saved content
await XActions.nav.bookmarks()
console.log("Browsing your bookmarked tweets...")

// Example 3: Bookmark management
await XActions.nav.bookmarks()
await new Promise(r => setTimeout(r, 2000))
// Now you can export or organize bookmarks

XActions.nav.lists() - Navigate to lists

// Example 1: View your lists
await XActions.nav.lists()

// Example 2: Manage list subscriptions
await XActions.nav.lists()
console.log("Viewing all your lists...")

// Example 3: List organization workflow
await XActions.nav.lists()
const lists = await XActions.lists.getAll()
console.log(`You have ${lists.length} lists`)

XActions.nav.communities() - Navigate to communities

// Example 1: Browse communities
await XActions.nav.communities()

// Example 2: Find new communities
await XActions.nav.communities()
console.log("Discovering X Communities...")

// Example 3: Community engagement workflow
await XActions.nav.communities()
await new Promise(r => setTimeout(r, 2000))
console.log("Ready to engage with communities")

XActions.nav.premium() - Navigate to premium signup

// Example 1: View premium features
await XActions.nav.premium()

// Example 2: Check subscription options
await XActions.nav.premium()
console.log("Viewing X Premium options...")

// Example 3: Premium signup workflow
await XActions.nav.premium()
// Review features and pricing

๏ฟฝ๐Ÿš€ Quick Start

Step 1: Load the Core Module

// ALWAYS paste core.js first!
// Copy the contents of src/automation/core.js

Step 2: Load Your Automation Script

// Then paste the automation script you want to use
// e.g., autoLiker.js, keywordFollow.js, etc.

Step 3: Configure & Run

Each script has a configuration section at the top. Modify it to match your needs.


๐Ÿ“š Script Documentation

1. Auto-Liker (autoLiker.js)

Purpose: Automatically like posts on your timeline based on keywords or users.

How to use:

  1. Go to x.com/home
  2. Paste core.js then autoLiker.js
  3. Configure and run

Configuration:

const CONFIG = {
  KEYWORDS: ['web3', 'crypto'],      // Like posts containing these words
  FROM_USERS: ['elonmusk'],          // Always like posts from these users
  MAX_LIKES: 50,                     // Stop after this many likes
  ALSO_RETWEET: false,               // Also retweet liked posts
  SCROLL_DELAY: 2000,                // Delay between scrolls (ms)
};

Commands:

stopAutoLiker()           // Stop the script
window.XActions.Liker.stats()   // View statistics

2. Keyword Follow (keywordFollow.js)

Purpose: Search for keywords and auto-follow users who match your criteria.

How to use:

  1. Go to x.com/home
  2. Paste core.js then keywordFollow.js
  3. Configure and run

Configuration:

const CONFIG = {
  KEYWORDS: ['solidity developer', 'web3 builder'],
  MAX_FOLLOWS_PER_KEYWORD: 10,
  TOTAL_MAX_FOLLOWS: 30,
  
  // Filters
  MIN_FOLLOWERS: 100,
  MAX_FOLLOWERS: 50000,
  MUST_HAVE_BIO: true,
  BIO_KEYWORDS: ['dev', 'builder', 'founder'],
};

Tracking:

  • Followed users are saved to localStorage
  • Timestamps are recorded for smart unfollow later
  • Run window.XActions.KeywordFollow.tracked() to see followed list

3. Smart Unfollow (smartUnfollow.js)

Purpose: Unfollow users who didn't follow back within a specified time period.

How to use:

  1. Go to your Following page: x.com/YOUR_USERNAME/following
  2. Paste core.js then smartUnfollow.js
  3. Configure and run

Configuration:

const CONFIG = {
  DAYS_TO_WAIT: 3,               // Days before unfollowing
  MAX_UNFOLLOWS: 50,             // Limit per session
  DRY_RUN: false,                // Set true to preview without unfollowing
  WHITELIST: ['friend1', 'friend2'],  // Never unfollow these users
};

Integration: Works best with keywordFollow.js โ€” it reads the tracking data to know when you followed each user.


Purpose: Extract all external links shared by a user.

How to use:

  1. Go to the target user's profile
  2. Paste core.js then linkScraper.js
  3. Configure and run

Configuration:

const CONFIG = {
  TARGET_USER: 'elonmusk',       // Or null to use current page
  MAX_SCROLLS: 100,              // How far to scroll
  AUTO_DOWNLOAD: true,           // Download results automatically
  INCLUDE_DOMAINS: [],           // Only include these domains (empty = all)
  EXCLUDE_DOMAINS: ['x.com', 'x.com'],  // Skip these domains
};

Output:

  • JSON file with all links and metadata
  • TXT file with clean link list
  • Console summary grouped by domain

5. Auto-Commenter (autoCommenter.js)

Purpose: Monitor a user and automatically comment on their new posts.

How to use:

  1. Open X in your browser (any page)
  2. Paste core.js then autoCommenter.js
  3. Configure and run

Configuration:

const CONFIG = {
  TARGET_USER: 'elonmusk',
  CHECK_INTERVAL_SECONDS: 60,    // How often to check for new posts
  
  COMMENTS: [
    'Great insight! ๐Ÿ”ฅ',
    'This is exactly what I was thinking!',
    'Thanks for sharing!',
  ],
  
  KEYWORD_COMMENTS: {
    'AI': ['The AI revolution is here!', 'Fascinating AI take!'],
    'crypto': ['Bullish! ๐Ÿš€', 'Web3 is the future!'],
  },
};

Commands:

stopAutoCommenter()        // Stop monitoring
window.XActions.Commenter.stats()   // View statistics

โš ๏ธ Warning: Be careful with auto-commenting โ€” it can appear spammy if overused.


6. Multi-Account Manager (multiAccount.js)

Purpose: Store and manage multiple X accounts for automation.

How to use:

  1. Paste core.js then multiAccount.js
  2. Use the command interface

Commands:

// Add an account
XAccounts.add('username', 'password', { note: 'Main account' })

// List all accounts
XAccounts.list()

// Get next account (rotation)
XAccounts.getNext()

// Remove an account
XAccounts.remove('username')

// Export accounts (encrypted)
XAccounts.export()

// Import accounts
XAccounts.import('encrypted-string')

// Login helper
XAccounts.login('username')

Security:

  • Accounts are stored in localStorage (base64 encoded)
  • Clear with localStorage.removeItem('xactions_accounts')
  • Never share your export strings

7. Growth Suite (growthSuite.js)

Purpose: All-in-one growth automation combining follow, like, and unfollow.

How to use:

  1. Go to x.com/home
  2. Paste core.js then growthSuite.js
  3. Configure and run

Configuration:

const STRATEGY = {
  KEYWORDS: ['web3 developer', 'solidity engineer'],
  
  ACTIONS: {
    FOLLOW: true,
    LIKE: true,
    UNFOLLOW: true,
  },
  
  LIMITS: {
    FOLLOWS: 20,
    LIKES: 30,
    UNFOLLOWS: 15,
  },
  
  TIMING: {
    UNFOLLOW_AFTER_DAYS: 3,
    SESSION_DURATION_MINUTES: 30,
  },
};

Phases:

  1. Phase 1: Keyword search and follow
  2. Phase 2: Like posts in timeline
  3. Phase 3: Unfollow non-followers past threshold

Commands:

stopGrowth()                 // Stop all automation
window.XActions.Growth.state()    // View current state
window.XActions.Growth.tracked()  // View tracked users

๐Ÿ›ก๏ธ Rate Limiting

All scripts include built-in rate limiting to protect your account:

ActionDefault DelayRecommended Range
Follow3-5 seconds2-10 seconds
Unfollow2-4 seconds2-8 seconds
Like1-3 seconds1-5 seconds
Comment30-60 seconds30-120 seconds

Tips:

  • Start with conservative delays
  • Increase delays if you get errors
  • Stop if you see "rate limit" warnings
  • Take breaks between sessions

๐Ÿ’พ Data Persistence

All tracking data is stored in localStorage:

KeyDescription
xactions_followedUsers you've followed with timestamps
xactions_likedTweet IDs you've liked
xactions_accountsMulti-account credentials
xactions_links_*Scraped links cache
xactions_rate_*Rate limit tracking

Clear all data:

Object.keys(localStorage)
  .filter(k => k.startsWith('xactions_'))
  .forEach(k => localStorage.removeItem(k));

๐Ÿ”ง Customization

Adjusting Selectors

If X updates their UI, you may need to update selectors in core.js:

const SELECTORS = {
  tweet: '[data-testid="tweet"]',
  userCell: '[data-testid="UserCell"]',
  followButton: '[data-testid$="-follow"]',
  unfollowButton: '[data-testid$="-unfollow"]',
  likeButton: '[data-testid="like"]',
  confirmButton: '[data-testid="confirmationSheetConfirm"]',
  // Add or modify as needed
};

Creating Custom Scripts

Use the core module to build your own automations:

(async () => {
  const { log, sleep, clickElement, waitForElement, SELECTORS } = window.XActions.Core;
  
  log('Starting custom automation...', 'info');
  
  // Your custom logic here
  const element = await waitForElement(SELECTORS.tweet, 5000);
  if (element) {
    await clickElement(element);
    log('Clicked!', 'success');
  }
})();

8. Follow Target Users (followTargetUsers.js)

Purpose: Follow the followers or following of any target account.

How to use:

  1. Open X in your browser
  2. Paste core.js then followTargetUsers.js
  3. Configure target accounts and run

Configuration:

const CONFIG = {
  TARGET_ACCOUNTS: ['elonmusk', 'naval'],  // Accounts to scrape
  LIST_TYPE: 'followers',                   // 'followers' or 'following'
  MAX_FOLLOWS_PER_ACCOUNT: 20,
  TOTAL_MAX_FOLLOWS: 50,
  
  FILTERS: {
    MIN_FOLLOWERS: 100,
    MAX_FOLLOWERS: 50000,
    MUST_HAVE_BIO: true,
    SKIP_PROTECTED: true,
    SKIP_VERIFIED: false,
  },
};

9. Follow Engagers (followEngagers.js)

Purpose: Follow users who liked, retweeted, or quoted specific posts.

How to use:

  1. Navigate to a post you want to analyze
  2. Paste core.js then followEngagers.js
  3. Configure and run

Configuration:

const CONFIG = {
  MODE: 'likers',  // 'likers', 'retweeters', 'quoters', or 'all'
  TARGET_POSTS: [],  // Leave empty to use current page
  MAX_FOLLOWS_PER_POST: 15,
  TOTAL_MAX_FOLLOWS: 30,
};

10. Protect Active Users (protectActiveUsers.js)

Purpose: Scan your posts for engagers and protect them from being unfollowed.

How to use:

  1. Paste core.js then protectActiveUsers.js
  2. It will scan your recent posts for engagers
  3. Works with smartUnfollow.js โ€” protected users won't be unfollowed

Configuration:

const CONFIG = {
  POSTS_TO_SCAN: 10,
  LOOKBACK_DAYS: 30,
  MIN_ENGAGEMENTS: 1,
  
  ENGAGEMENT_TYPES: {
    likers: true,
    repliers: true,
    retweeters: true,
    quoters: true,
  },
};

Commands:

viewProtected()           // See all protected users
isProtected('username')   // Check if user is protected

11. Quota Supervisor (quotaSupervisor.js)

Purpose: Sophisticated rate limiting to protect your account from restrictions.

How to use:

  1. Paste core.js then quotaSupervisor.js
  2. All other automation scripts will respect the quotas

Configuration:

const QUOTAS = {
  HOURLY: {
    likes: 60,
    follows: 30,
    unfollows: 40,
    comments: 10,
  },
  DAILY: {
    likes: 500,
    follows: 200,
    unfollows: 300,
    comments: 50,
  },
  
  STOCHASTIC: {
    enabled: true,     // Randomize limits slightly
    variance: 0.15,    // 15% variance
  },
};

Commands:

quotaStatus()    // View current quota status
quotaReset()     // Reset all quotas
quotaWake()      // Wake up from quota sleep

12. Session Logger (sessionLogger.js)

Purpose: Track all automation actions and generate analytics reports.

How to use:

  1. Paste core.js then sessionLogger.js
  2. All actions will be automatically logged

Commands:

stats()           // View all-time stats
todayStats()      // View today's stats
weekStats()       // View this week's stats
dailyStats()      // View daily breakdown
sessionStats()    // View current session
exportLogs()      // Export logs as JSON

๐ŸŽง Customer Service Tools

13. Customer Service Bot (customerService.js)

Purpose: Automate customer service responses for business accounts.

How to use:

  1. Configure your accounts inline (user:pass format)
  2. Paste core.js then customerService.js
  3. It monitors mentions and suggests/sends responses

Configuration:

// Add accounts inline (paste from txt file)
const ACCOUNTS = `
personal_account:password123
business_account:bizpass456
`.trim().split('\n')...

const CONFIG = {
  ACTIVE_ACCOUNT: 'business_account',
  
  MONITOR: {
    mentions: true,
    dms: true,
    replies: true,
  },
  
  RESPONSE: {
    autoReply: true,
    requireApproval: true,  // Review before sending
  },
  
  BUSINESS_HOURS: {
    enabled: true,
    start: 9,   // 9 AM
    end: 17,    // 5 PM
    days: [1,2,3,4,5],  // Mon-Fri
  },
};

Response Templates:

const TEMPLATES = {
  greeting: ["Hi {customer}! How can I help?"],
  issue: ["Sorry about that! Please DM us details."],
  thanks: ["Thank you so much! ๐Ÿ™"],
  pricing: ["Check our website for pricing info!"],
  support: ["Please DM us for faster support."],
};

Commands:

stopCS()          // Stop the bot
csStats()         // View statistics
csTemplates()     // Show all templates
csRespond('issue') // Get a response template

14. Algorithm Builder (algorithmBuilder.js)

Purpose: LLM-powered algorithm cultivation engine. Trains X's algorithm by systematically searching your niche, liking relevant content, following key accounts, and posting AI-generated comments and original posts โ€” all in your persona's voice.

This is the browser console version. For the 24/7 headless Puppeteer version, use the CLI: xactions persona run <id>.

How to use:

  1. Go to x.com/home
  2. Paste core.js then algorithmBuilder.js
  3. Edit the NICHE_CONFIG and LLM_CONFIG at the top
  4. The script runs indefinitely with activity cycles and rest periods

Configuration:

const NICHE_CONFIG = {
  topics: ['crypto', 'defi', 'web3', 'bitcoin'],
  searchTerms: ['crypto alpha', 'defi yield', 'new token launch'],
  targetAccounts: ['0xCygaar', 'DefiIgnas'],
  avoidTopics: ['scam', 'rug'],
  commentStyle: 'brief, hype-driven, crypto lingo',
  tone: 'degen casual โ€” short, punchy, uses crypto slang',
};

const LLM_CONFIG = {
  enabled: true,
  apiKey: 'your_openrouter_api_key',
  model: 'google/gemini-flash-2.0',
};

What it does each cycle:

  1. Search phase โ€” Searches niche terms, scrolls results, likes on-topic tweets
  2. Engage phase โ€” Follows relevant users, comments using LLM-generated replies
  3. Create phase โ€” Posts original content in your persona's voice
  4. Browse phase โ€” Scrolls timeline, visits profiles, checks notifications
  5. Rest phase โ€” Sleeps 30โ€“120 seconds between cycles to appear human

Fallback behavior: If OpenRouter is unavailable, the script falls back to curated comment templates stored in FALLBACK_COMMENTS.

Commands:

stopAlgorithm()                     // Stop the builder
window.XActions.Algorithm.stats()   // View engagement stats
window.XActions.Algorithm.state()   // View current state

Tip: For 24/7 unattended operation, use the Node.js version via xactions persona create + xactions persona run <id> instead.


Multi-Account with user:pass Import

The Multi-Account Manager now supports importing from simple text format:

// Import accounts from a txt/csv file format
XAccounts.importText(`
personal:mypassword123
business:bizpassword456
support:supportpass789
`)

// Export back to text format
XAccounts.exportText()

// Other commands
XAccounts.list()      // List all accounts
XAccounts.getNext()   // Get next account (rotation)
XAccounts.stats.show() // View per-account stats

Supported formats:

  • username:password
  • username,password
  • username;password
  • username\tpassword (tab-separated)

๏ฟฝ XActions Function Reference

XActions.settings (Part 2 - Advanced Settings)

// XActions.settings.blockedAccounts - View blocked accounts
// Example 1: Navigate to blocked accounts page
await XActions.settings.blockedAccounts()
console.log("Now viewing your blocked accounts list")

// Example 2: View blocked accounts then export the list
await XActions.settings.blockedAccounts()
await XActions.utils.waitForPageLoad()
const blockedUsers = document.querySelectorAll('[data-testid="UserCell"]')
console.log(`You have ${blockedUsers.length} visible blocked accounts`)
// XActions.settings.addMutedWord - Add muted word with options
// Example 1: Mute a word from home timeline
await XActions.settings.addMutedWord("spoilers", { duration: "forever" })

// Example 2: Temporarily mute trending topic
await XActions.settings.addMutedWord("#GameOfThrones", { 
  duration: "7days",
  homeTimeline: true,
  notifications: true
})

// Example 3: Mute multiple keywords for content filtering
const toxicWords = ["drama", "beef", "cancelled"]
for (const word of toxicWords) {
  await XActions.settings.addMutedWord(word, { duration: "forever" })
  console.log(`Muted: ${word}`)
}
// XActions.settings.downloadData - Download your Twitter data
// Example 1: Request data download
await XActions.settings.downloadData()
console.log("Navigate through the prompts to request your archive")

// Example 2: Download data for backup before cleanup
console.log("Backing up before mass unfollow...")
await XActions.settings.downloadData()
// Wait for download request, then proceed with cleanup
// XActions.settings.deactivate - Navigate to account deactivation page
// Example 1: Go to deactivation page
await XActions.settings.deactivate()
console.log("โš ๏ธ Deactivation page loaded - proceed with caution!")

// Example 2: Pre-deactivation checklist
console.log("Pre-deactivation checklist:")
console.log("1. Downloaded your data?")
console.log("2. Saved important DMs?")
console.log("3. Notified followers?")
await XActions.settings.deactivate()

XActions.profile (Profile Management)

// XActions.profile.edit - Open profile editor
// Example 1: Open profile editor
await XActions.profile.edit()
console.log("Profile editor opened - make your changes!")

// Example 2: Open editor and wait for load
await XActions.profile.edit()
await XActions.utils.waitForPageLoad()
console.log("Ready to edit your profile")
// XActions.profile.updateName - Update display name
// Example 1: Simple name update
await XActions.profile.updateName("John Developer ๐Ÿš€")

// Example 2: Add holiday theme to name
const originalName = "Sarah Tech"
await XActions.profile.updateName(`${originalName} ๐ŸŽ„`)
console.log("Added holiday flair to your name!")

// Example 3: Rotate name based on time of day
const hour = new Date().getHours()
const emoji = hour < 12 ? "โ˜€๏ธ" : hour < 18 ? "๐Ÿ’ผ" : "๐ŸŒ™"
await XActions.profile.updateName(`Developer ${emoji}`)
// XActions.profile.updateBio - Update profile bio
// Example 1: Set a new bio
await XActions.profile.updateBio("Building the future with code | Open source enthusiast | DMs open ๐Ÿ“ฌ")

// Example 2: Add current project to bio
const project = "WorkingOnAI"
await XActions.profile.updateBio(`Currently building #${project} | Founder @MyStartup | Tweets about tech & startups`)

// Example 3: Bio with call to action
await XActions.profile.updateBio(`
๐Ÿ”ง Full-stack developer
๐Ÿš€ Building @XActions
๐Ÿ“ฉ Collabs: dm me
๐Ÿ”— Portfolio below โฌ‡๏ธ
`.trim())
// XActions.profile.updateLocation - Update location
// Example 1: Set your location
await XActions.profile.updateLocation("San Francisco, CA ๐ŸŒ‰")

// Example 2: Fun location for events
await XActions.profile.updateLocation("Currently at #TechConf2024 ๐ŸŽค")

// Example 3: Remote work indicator
await XActions.profile.updateLocation("๐ŸŒ Remote | Everywhere")
// XActions.profile.updateWebsite - Update website URL
// Example 1: Set your main website
await XActions.profile.updateWebsite("https://myportfolio.dev")

// Example 2: Link to latest project
await XActions.profile.updateWebsite("https://github.com/username/cool-project")

// Example 3: Linktree or link aggregator
await XActions.profile.updateWebsite("https://linktr.ee/yourusername")
console.log("Website updated! Visitors can now find all your links.")
// XActions.profile.updateAvatar - Open avatar picker
// Example 1: Open avatar picker to upload new photo
await XActions.profile.updateAvatar()
console.log("Select your new profile picture")

// Example 2: Prompt for avatar update
console.log("Time to update your avatar for the new season!")
await XActions.profile.updateAvatar()
// XActions.profile.updateHeader - Open header image picker
// Example 1: Open header picker
await XActions.profile.updateHeader()
console.log("Upload a header image (1500x500 recommended)")

// Example 2: Update header for campaign
console.log("Updating header for product launch...")
await XActions.profile.updateHeader()
// XActions.profile.switchToProfessional - Switch to professional account
// Example 1: Switch to creator/business account
await XActions.profile.switchToProfessional()
console.log("Follow the prompts to set up your professional account")

// Example 2: Upgrade for analytics access
console.log("Switching to Professional for advanced analytics...")
await XActions.profile.switchToProfessional()
console.log("You'll now have access to tweet analytics and audience insights!")

XActions.utils (Utilities & Helpers)

// XActions.utils.getCurrentUser - Get current logged-in username
// Example 1: Get your username
const me = await XActions.utils.getCurrentUser()
console.log(`Logged in as: @${me}`)

// Example 2: Use in automation
const username = await XActions.utils.getCurrentUser()
await XActions.nav.profile(username)
console.log("Navigated to your own profile")

// Example 3: Conditional logic based on account
const user = await XActions.utils.getCurrentUser()
if (user === "myBusinessAccount") {
  console.log("Running business automation...")
} else {
  console.log("Running personal automation...")
}
// XActions.utils.isLoggedIn - Check if logged in
// Example 1: Simple login check
if (await XActions.utils.isLoggedIn()) {
  console.log("โœ… Logged in - ready to automate!")
} else {
  console.log("โŒ Please log in first")
}

// Example 2: Guard clause for scripts
const loggedIn = await XActions.utils.isLoggedIn()
if (!loggedIn) {
  throw new Error("Must be logged in to run this script")
}

// Example 3: Health check
async function healthCheck() {
  const status = {
    loggedIn: await XActions.utils.isLoggedIn(),
    user: await XActions.utils.getCurrentUser(),
    time: new Date().toISOString()
  }
  console.table(status)
  return status
}
await healthCheck()
// XActions.utils.getTokens - Get authentication tokens
// Example 1: Get auth tokens for API calls
const tokens = await XActions.utils.getTokens()
console.log("Bearer token:", tokens.bearer)
console.log("CSRF token:", tokens.csrf)

// Example 2: Use tokens for custom fetch
const tokens = await XActions.utils.getTokens()
const response = await fetch("https://api.x.com/2/...", {
  headers: {
    "Authorization": `Bearer ${tokens.bearer}`,
    "x-csrf-token": tokens.csrf
  }
})

// Example 3: Token debugging
const tokens = await XActions.utils.getTokens()
console.log("Tokens available:", Object.keys(tokens))
// XActions.utils.getTweetIdFromUrl - Extract tweet ID from URL
// Example 1: Extract ID from a tweet URL
const url = "https://x.com/elonmusk/status/1234567890123456789"
const tweetId = XActions.utils.getTweetIdFromUrl(url)
console.log(`Tweet ID: ${tweetId}`) // 1234567890123456789

// Example 2: Batch process tweet URLs
const urls = [
  "https://x.com/user1/status/111111111",
  "https://x.com/user2/status/222222222"
]
const ids = urls.map(u => XActions.utils.getTweetIdFromUrl(u))
console.log("Tweet IDs:", ids)

// Example 3: Validate tweet URL
const input = "https://x.com/user/status/123456"
const id = XActions.utils.getTweetIdFromUrl(input)
if (id) {
  console.log(`Valid tweet URL, ID: ${id}`)
} else {
  console.log("Invalid tweet URL")
}
// XActions.utils.getUsernameFromUrl - Extract username from URL
// Example 1: Get username from profile URL
const url = "https://x.com/nichxbt"
const username = XActions.utils.getUsernameFromUrl(url)
console.log(`Username: @${username}`) // nichxbt

// Example 2: Extract from any X URL
const tweetUrl = "https://x.com/elonmusk/status/12345"
const user = XActions.utils.getUsernameFromUrl(tweetUrl)
console.log(`Tweet author: @${user}`) // elonmusk

// Example 3: Clean up pasted URLs
const messyUrl = "https://x.com/TechCrunch?s=20"
const clean = XActions.utils.getUsernameFromUrl(messyUrl)
console.log(`Clean username: @${clean}`) // TechCrunch
// XActions.utils.waitForPageLoad - Wait for page to fully load
// Example 1: Wait after navigation
await XActions.nav.explore()
await XActions.utils.waitForPageLoad()
console.log("Explore page fully loaded")

// Example 2: Wait before scraping
await XActions.nav.profile("elonmusk")
await XActions.utils.waitForPageLoad()
const tweets = XActions.tweet.getAll()
console.log(`Found ${tweets.length} tweets`)

// Example 3: Chained navigation with waits
async function visitProfiles(usernames) {
  for (const user of usernames) {
    await XActions.nav.profile(user)
    await XActions.utils.waitForPageLoad()
    console.log(`Visited @${user}`)
  }
}
await visitProfiles(["user1", "user2", "user3"])
// XActions.utils.loadMore - Scroll to load more content
// Example 1: Load 5 more pages of content
await XActions.utils.loadMore(5)
console.log("Loaded 5 more batches of content")

// Example 2: Load until target count reached
let tweets = XActions.tweet.getAll()
while (tweets.length < 100) {
  await XActions.utils.loadMore(1)
  tweets = XActions.tweet.getAll()
}
console.log(`Loaded ${tweets.length} tweets`)

// Example 3: Deep scroll for data export
console.log("Loading all visible content...")
await XActions.utils.loadMore(20)
console.log("Done loading!")
// XActions.utils.clearXData - Clear X data from localStorage
// Example 1: Clear cached data
XActions.utils.clearXData()
console.log("Cleared all XActions cached data")

// Example 2: Fresh start
XActions.utils.clearXData()
location.reload()
console.log("Cache cleared and page reloaded")

// Example 3: Clear before new session
console.log("Starting fresh session...")
XActions.utils.clearXData()
console.log("All local data cleared")
// XActions.utils.exportBookmarks - Export all bookmarks
// Example 1: Export first 100 bookmarks
const bookmarks = await XActions.utils.exportBookmarks(100)
console.log(`Found ${bookmarks.length} bookmarks`)

// Example 2: Export and download as JSON
const bookmarks = await XActions.utils.exportBookmarks(500)
const blob = new Blob([JSON.stringify(bookmarks, null, 2)], {type: 'application/json'})
const url = URL.createObjectURL(blob)
const a = document.createElement('a'); a.href = url; a.download = 'bookmarks.json'; a.click()
console.log("Downloaded bookmarks.json!")

// Example 3: Find bookmarks containing specific keyword
const bookmarks = await XActions.utils.exportBookmarks(200)
const aiBookmarks = bookmarks.filter(b => b.text?.toLowerCase().includes('ai'))
console.log(`Found ${aiBookmarks.length} AI-related bookmarks`)
// XActions.utils.exportLikes - Export user's likes
// Example 1: Export your own likes
const me = await XActions.utils.getCurrentUser()
const myLikes = await XActions.utils.exportLikes(me, 100)
console.log(`Exported ${myLikes.length} of your likes`)

// Example 2: Export and analyze likes
const likes = await XActions.utils.exportLikes("username", 200)
const withMedia = likes.filter(l => l.hasMedia)
console.log(`${withMedia.length} liked tweets have media`)

// Example 3: Download likes as CSV
const likes = await XActions.utils.exportLikes("techinfluencer", 300)
const csv = likes.map(l => `"${l.author}","${l.text?.replace(/"/g, '""')}"`).join('\n')
const blob = new Blob([csv], {type: 'text/csv'})
const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = 'likes.csv'; a.click()
// XActions.utils.copyToClipboard - Copy text to clipboard
// Example 1: Copy a string
await XActions.utils.copyToClipboard("Hello from XActions!")
console.log("Copied to clipboard!")

// Example 2: Copy current tweet link
const tweets = XActions.tweet.getAll()
const link = await XActions.engage.copyLink(tweets[0])
await XActions.utils.copyToClipboard(link)
console.log("Tweet link copied!")

// Example 3: Copy formatted data
const data = { followers: 1000, following: 500 }
await XActions.utils.copyToClipboard(JSON.stringify(data, null, 2))
console.log("Data copied to clipboard as JSON")
// XActions.utils.screenshotTweet - Screenshot a tweet
// Example 1: Screenshot a tweet by URL
const imageBlob = await XActions.utils.screenshotTweet("https://x.com/user/status/123456")
console.log("Tweet screenshot captured!")

// Example 2: Screenshot and download
const url = "https://x.com/elonmusk/status/123456789"
const screenshot = await XActions.utils.screenshotTweet(url)
const imgUrl = URL.createObjectURL(screenshot)
const a = document.createElement('a'); a.href = imgUrl; a.download = 'tweet.png'; a.click()

// Example 3: Screenshot for evidence/documentation
const reportedTweet = "https://x.com/user/status/123456"
await XActions.utils.screenshotTweet(reportedTweet)
console.log("Evidence captured before reporting")
// XActions.utils.showKeyboardShortcuts - Show keyboard shortcuts
// Example 1: Display shortcuts
XActions.utils.showKeyboardShortcuts()

// Example 2: Learn shortcuts
console.log("Opening keyboard shortcuts reference...")
XActions.utils.showKeyboardShortcuts()
console.log("Press '?' anytime to see this again")
// XActions.utils.devMode - Enable developer mode
// Example 1: Enable dev mode for debugging
XActions.utils.devMode()
console.log("Dev mode enabled - all elements now show data-testid")

// Example 2: Use dev mode to find selectors
XActions.utils.devMode()
console.log("Hover over elements to see their testid selectors")
console.log("Use getAllSelectors() to dump all selectors")
// XActions.utils.getAllSelectors - Get all data-testid selectors
// Example 1: Dump all selectors on page
const selectors = XActions.utils.getAllSelectors()
console.log("All selectors:", selectors)

// Example 2: Find specific selector
const selectors = XActions.utils.getAllSelectors()
const buttons = selectors.filter(s => s.includes('button') || s.includes('Button'))
console.log("Button selectors:", buttons)

// Example 3: Export selectors for documentation
const selectors = XActions.utils.getAllSelectors()
console.log(JSON.stringify(selectors, null, 2))

XActions.spaces (Twitter Spaces)

// XActions.spaces.browse - Browse live spaces
// Example 1: Go to spaces discovery
await XActions.spaces.browse()
console.log("Browsing live Twitter Spaces")

// Example 2: Find spaces to join
await XActions.spaces.browse()
await XActions.utils.waitForPageLoad()
console.log("Find a Space that interests you!")
// XActions.spaces.join - Join a space
// Example 1: Join a space by ID
await XActions.spaces.join("1BRKjZYWXYZKw")
console.log("Joined the Space!")

// Example 2: Join from URL
const spaceUrl = "https://x.com/i/spaces/1BRKjZYWXYZKw"
const spaceId = spaceUrl.split('/').pop()
await XActions.spaces.join(spaceId)

// Example 3: Join and request to speak
await XActions.spaces.join("1BRKjZYWXYZKw")
await sleep(2000) // Wait for connection
await XActions.spaces.requestToSpeak()
console.log("Joined and requested to speak!")
// XActions.spaces.leave - Leave current space
// Example 1: Leave a space
await XActions.spaces.leave()
console.log("Left the Space")

// Example 2: Leave with confirmation
console.log("Leaving Space in 3 seconds...")
await sleep(3000)
await XActions.spaces.leave()
console.log("Successfully left")
// XActions.spaces.requestToSpeak - Request to speak in a space
// Example 1: Request speaker access
await XActions.spaces.requestToSpeak()
console.log("Requested to speak - wait for host approval")

// Example 2: Request with notification
await XActions.spaces.requestToSpeak()
console.log("๐ŸŽค Hand raised! The host will see your request.")
// XActions.spaces.setReminder - Set reminder for upcoming space
// Example 1: Set reminder for a scheduled space
await XActions.spaces.setReminder("1BRKjZYWXYZKw")
console.log("Reminder set! You'll be notified when it starts")

// Example 2: Set reminders for multiple spaces
const upcomingSpaces = ["space1id", "space2id", "space3id"]
for (const id of upcomingSpaces) {
  await XActions.spaces.setReminder(id)
  console.log(`Reminder set for Space: ${id}`)
}
// XActions.spaces.share - Share current space link
// Example 1: Share space link
const link = await XActions.spaces.share()
console.log("Space link:", link)

// Example 2: Share to clipboard
const spaceLink = await XActions.spaces.share()
await XActions.utils.copyToClipboard(spaceLink)
console.log("Space link copied to clipboard!")

// Example 3: Share via DM
const link = await XActions.spaces.share()
await XActions.dm.send("friend", `Join this Space! ${link}`)

XActions.communities (Twitter Communities)

// XActions.communities.browse - Browse communities
// Example 1: Open communities browser
await XActions.communities.browse()
console.log("Browsing Twitter Communities")

// Example 2: Explore and discover
await XActions.communities.browse()
await XActions.utils.waitForPageLoad()
console.log("Find communities that match your interests!")
// XActions.communities.view - View a specific community
// Example 1: View a community by ID
await XActions.communities.view("1234567890")
console.log("Viewing community page")

// Example 2: View and check rules
await XActions.communities.view("1234567890")
await XActions.utils.waitForPageLoad()
console.log("Check the community rules before posting!")
// XActions.communities.join - Join a community
// Example 1: Join a community
await XActions.communities.join("1234567890")
console.log("Joined the community!")

// Example 2: Join multiple communities
const techCommunities = ["123", "456", "789"]
for (const id of techCommunities) {
  await XActions.communities.join(id)
  console.log(`Joined community: ${id}`)
  await sleep(1000)
}

// Example 3: Join and navigate to community
await XActions.communities.join("1234567890")
await XActions.communities.view("1234567890")
console.log("Joined and viewing your new community!")
// XActions.communities.leave - Leave a community
// Example 1: Leave a community
await XActions.communities.leave("1234567890")
console.log("Left the community")

// Example 2: Leave with confirmation
const communityId = "1234567890"
console.log(`Leaving community ${communityId}...`)
await XActions.communities.leave(communityId)
console.log("Successfully left!")

๏ฟฝ๐Ÿ› Troubleshooting

Script stops working:

  • X may have updated their UI โ€” check selectors
  • You may be rate limited โ€” wait 15-30 minutes
  • Page may need refresh โ€” reload and try again

"Core module not loaded" error:

  • Always paste core.js first
  • Make sure it finished executing

Account getting limited:

  • Increase delays between actions
  • Reduce max limits per session
  • Take longer breaks between sessions

๐Ÿ“‹ Best Practices

  1. Start small โ€” Test with 5-10 actions first
  2. Monitor results โ€” Watch for errors or unusual behavior
  3. Use natural timing โ€” Random delays look more human
  4. Take breaks โ€” Don't run automation 24/7
  5. Keep logs โ€” Track what the scripts are doing
  6. Have backups โ€” Export your tracking data regularly

๐Ÿ“– XActions Function Reference

Complete reference with practical examples for every XActions function.


๐Ÿฆ XActions.tweet โ€” Posting & Managing Tweets

Functions for posting and managing tweets.

post(text, options) - Post a new tweet

// XActions.tweet.post - Post a new tweet
// Example 1: Simple tweet
await XActions.tweet.post("Hello world! ๐ŸŒ")

// Example 2: Tweet with draft mode (opens composer but doesn't post)
await XActions.tweet.post("This needs review before posting", { draft: true })

// Example 3: Daily motivation bot - post random quote
const quotes = [
  "Stay focused and never give up! ๐Ÿ’ช",
  "Every day is a new opportunity ๐ŸŒŸ",
  "Build something amazing today ๐Ÿš€"
]
const randomQuote = quotes[Math.floor(Math.random() * quotes.length)]
await XActions.tweet.post(randomQuote)

reply(tweetElement, text) - Reply to a tweet

// XActions.tweet.reply - Reply to a tweet
// Example 1: Reply to the first tweet on your timeline
const tweets = XActions.tweet.getAll()
await XActions.tweet.reply(tweets[0], "Great post! Thanks for sharing ๐Ÿ™Œ")

// Example 2: Auto-reply to all tweets from a specific user
const tweets = XActions.tweet.getAll()
for (const tweet of tweets) {
  if (tweet.textContent.includes('@elonmusk')) {
    await XActions.tweet.reply(tweet, "Interesting perspective!")
    await new Promise(r => setTimeout(r, 3000)) // Wait between replies
  }
}

// Example 3: Reply with formatted response
const tweet = XActions.tweet.getAll()[0]
await XActions.tweet.reply(tweet, `
๐Ÿ“Œ Key takeaways:
โ€ข Point one
โ€ข Point two
โ€ข Point three

Thanks for the insights!
`)

quote(tweetElement, text) - Quote tweet

// XActions.tweet.quote - Quote tweet with commentary
// Example 1: Quote tweet with commentary
const tweet = XActions.tweet.getAll()[0]
await XActions.tweet.quote(tweet, "This is exactly what I've been saying! ๐Ÿ’ฏ")

// Example 2: Quote tweet for content curation
const tweets = XActions.tweet.getAll()
const techTweet = tweets.find(t => t.textContent.toLowerCase().includes('javascript'))
if (techTweet) {
  await XActions.tweet.quote(techTweet, "๐Ÿ“š Must-read for JavaScript developers #WebDev")
}

// Example 3: Quote with thread context
const tweet = XActions.tweet.getAll()[0]
await XActions.tweet.quote(tweet, `
Adding some context to this thread ๐Ÿงต

1/ This relates to what I posted last week about AI trends...
`)

delete(tweetElement) - Delete your tweet

// XActions.tweet.delete - Delete your tweet
// Example 1: Delete your most recent tweet
const myTweets = XActions.tweet.getAll()
const myTweet = myTweets.find(t => t.querySelector('[data-testid="caret"]'))
if (myTweet) {
  await XActions.tweet.delete(myTweet)
  console.log('Tweet deleted!')
}

// Example 2: Bulk delete tweets containing specific word
const tweets = XActions.tweet.getAll()
for (const tweet of tweets) {
  if (tweet.textContent.toLowerCase().includes('typo')) {
    await XActions.tweet.delete(tweet)
    await new Promise(r => setTimeout(r, 2000))
  }
}

// Example 3: Delete old tweets from your profile
const tweets = XActions.tweet.getAll()
for (const tweet of tweets) {
  await XActions.tweet.delete(tweet)
  await new Promise(r => setTimeout(r, 3000)) // Rate limit protection
}

pin(tweetElement) - Pin tweet to profile

// XActions.tweet.pin - Pin tweet to profile
// Example 1: Pin a specific tweet
const tweets = XActions.tweet.getAll()
await XActions.tweet.pin(tweets[0])

// Example 2: Find and pin your best performing tweet
const tweets = XActions.tweet.getAll()
const bestTweet = tweets.find(tweet => {
  const likes = tweet.querySelector('[data-testid="like"]')?.textContent
  return parseInt(likes) > 100 // Pin if over 100 likes
})
if (bestTweet) {
  await XActions.tweet.pin(bestTweet)
  console.log('Pinned high-engagement tweet!')
}

// Example 3: Pin your latest announcement
const tweets = XActions.tweet.getAll()
const announcement = tweets.find(t => 
  t.textContent.includes('๐Ÿš€') || t.textContent.toLowerCase().includes('announcing')
)
if (announcement) await XActions.tweet.pin(announcement)

getId(tweetElement) - Get tweet ID from element

// XActions.tweet.getId - Get tweet ID from element
// Example 1: Get ID of first visible tweet
const tweets = XActions.tweet.getAll()
const tweetId = XActions.tweet.getId(tweets[0])
console.log(`Tweet ID: ${tweetId}`)

// Example 2: Build array of all visible tweet IDs for tracking
const tweets = XActions.tweet.getAll()
const tweetIds = tweets.map(t => XActions.tweet.getId(t)).filter(id => id)
console.log(`Found ${tweetIds.length} tweet IDs:`, tweetIds)

// Example 3: Create shareable link from tweet
const tweet = XActions.tweet.getAll()[0]
const id = XActions.tweet.getId(tweet)
const shareUrl = `https://x.com/i/status/${id}`
console.log(`Share this: ${shareUrl}`)

getAll() - Get all visible tweets

// XActions.tweet.getAll - Get all visible tweets
// Example 1: Count visible tweets
const tweets = XActions.tweet.getAll()
console.log(`${tweets.length} tweets visible on page`)

// Example 2: Filter tweets by content
const tweets = XActions.tweet.getAll()
const aiTweets = tweets.filter(t => 
  t.textContent.toLowerCase().includes('ai') ||
  t.textContent.toLowerCase().includes('artificial intelligence')
)
console.log(`Found ${aiTweets.length} AI-related tweets`)

// Example 3: Extract all tweet texts for analysis
const tweets = XActions.tweet.getAll()
const tweetTexts = tweets.map(t => 
  t.querySelector('[data-testid="tweetText"]')?.textContent || ''
)
console.log('Tweet contents:', tweetTexts)

thread(tweets) - Post a thread of tweets

// XActions.tweet.thread - Post a thread of tweets
// Example 1: Post a simple thread
await XActions.tweet.thread([
  "๐Ÿงต Thread: 5 things I learned building my startup",
  "1/ Start with the problem, not the solution",
  "2/ Talk to users before writing code",
  "3/ Launch early, iterate often",
  "4/ Metrics matter, but so does intuition",
  "5/ Build in public - the community helps!",
  "That's it! Follow for more startup insights ๐Ÿš€"
])

// Example 2: Educational thread with formatting
await XActions.tweet.thread([
  "๐Ÿ“š JavaScript Promises Explained (Thread)",
  "A Promise is like ordering food:\n\nโ€ข Pending: Order placed\nโ€ข Fulfilled: Food arrived! ๐Ÿ•\nโ€ข Rejected: Out of stock ๐Ÿ˜ž",
  "Here's the syntax:\n\nnew Promise((resolve, reject) => {\n  // async operation\n})",
  "Use .then() for success, .catch() for errors:\n\nfetch(url)\n  .then(data => use(data))\n  .catch(err => handle(err))",
  "Pro tip: Use async/await for cleaner code! โœจ\n\nLike & retweet if this helped!"
])

// Example 3: Story thread
await XActions.tweet.thread([
  "Here's how I went from 0 to 10K followers in 6 months ๐Ÿ‘‡",
  "Month 1: Posted consistently every day. Engagement was low but I kept going.",
  "Month 2-3: Started engaging with others for 30 min before posting. Game changer!",
  "Month 4: Went viral with a thread. Gained 2K followers in a week.",
  "Month 5-6: Collaborated with bigger accounts. Growth accelerated.",
  "Key lesson: Consistency + genuine engagement = growth ๐Ÿ“ˆ"
])

๐Ÿ’œ XActions.engage โ€” Engagement Actions

Functions for engaging with tweets (likes, retweets, bookmarks, etc.).

like(tweetElement) - Like a tweet

// XActions.engage.like - Like a tweet
// Example 1: Like the first tweet on your timeline
const tweets = XActions.tweet.getAll()
await XActions.engage.like(tweets[0])

// Example 2: Like all tweets from a specific user
const tweets = XActions.tweet.getAll()
for (const tweet of tweets) {
  const author = tweet.querySelector('[data-testid="User-Name"]')?.textContent
  if (author?.includes('elonmusk')) {
    await XActions.engage.like(tweet)
    await new Promise(r => setTimeout(r, 1500)) // Rate limit
  }
}

// Example 3: Like tweets containing specific keywords
const tweets = XActions.tweet.getAll()
const keywords = ['javascript', 'typescript', 'react', 'nodejs']
for (const tweet of tweets) {
  const text = tweet.textContent.toLowerCase()
  if (keywords.some(kw => text.includes(kw))) {
    await XActions.engage.like(tweet)
    await new Promise(r => setTimeout(r, 2000))
  }
}

unlike(tweetElement) - Unlike a tweet

// XActions.engage.unlike - Unlike a tweet
// Example 1: Unlike a tweet you accidentally liked
const tweets = XActions.tweet.getAll()
const likedTweet = tweets.find(t => t.querySelector('[data-testid="unlike"]'))
if (likedTweet) await XActions.engage.unlike(likedTweet)

// Example 2: Unlike all visible tweets (cleanup)
const tweets = XActions.tweet.getAll()
for (const tweet of tweets) {
  if (tweet.querySelector('[data-testid="unlike"]')) {
    await XActions.engage.unlike(tweet)
    await new Promise(r => setTimeout(r, 1000))
  }
}

// Example 3: Unlike tweets from blocked topics
const tweets = XActions.tweet.getAll()
const blockedWords = ['spam', 'scam', 'giveaway']
for (const tweet of tweets) {
  const isLiked = tweet.querySelector('[data-testid="unlike"]')
  const hasBlockedWord = blockedWords.some(w => tweet.textContent.toLowerCase().includes(w))
  if (isLiked && hasBlockedWord) {
    await XActions.engage.unlike(tweet)
  }
}

retweet(tweetElement) - Retweet

// XActions.engage.retweet - Retweet
// Example 1: Retweet the first tweet
const tweets = XActions.tweet.getAll()
await XActions.engage.retweet(tweets[0])

// Example 2: Retweet high-engagement content
const tweets = XActions.tweet.getAll()
for (const tweet of tweets) {
  const likeCount = tweet.querySelector('[data-testid="like"]')?.textContent
  if (parseInt(likeCount) > 500) {
    await XActions.engage.retweet(tweet)
    await new Promise(r => setTimeout(r, 3000))
  }
}

// Example 3: Retweet content from your network
const trustedUsers = ['naval', 'paulg', 'sama']
const tweets = XActions.tweet.getAll()
for (const tweet of tweets) {
  const author = tweet.querySelector('[data-testid="User-Name"]')?.textContent?.toLowerCase()
  if (trustedUsers.some(u => author?.includes(u))) {
    await XActions.engage.retweet(tweet)
    console.log(`Retweeted from ${author}`)
  }
}

unretweet(tweetElement) - Undo retweet

// XActions.engage.unretweet - Undo retweet
// Example 1: Undo retweet on first retweeted tweet
const tweets = XActions.tweet.getAll()
const retweeted = tweets.find(t => t.querySelector('[data-testid="unretweet"]'))
if (retweeted) await XActions.engage.unretweet(retweeted)

// Example 2: Undo all retweets on page
const tweets = XActions.tweet.getAll()
for (const tweet of tweets) {
  if (tweet.querySelector('[data-testid="unretweet"]')) {
    await XActions.engage.unretweet(tweet)
    await new Promise(r => setTimeout(r, 1500))
  }
}

// Example 3: Clean up old retweets (on your profile)
const tweets = XActions.tweet.getAll()
let count = 0
for (const tweet of tweets) {
  if (count >= 10) break // Limit to 10
  if (await XActions.engage.unretweet(tweet)) count++
  await new Promise(r => setTimeout(r, 2000))
}
console.log(`Removed ${count} retweets`)

bookmark(tweetElement) - Bookmark tweet

// XActions.engage.bookmark - Bookmark tweet
// Example 1: Bookmark a valuable tweet
const tweets = XActions.tweet.getAll()
await XActions.engage.bookmark(tweets[0])

// Example 2: Bookmark all tweets with code snippets
const tweets = XActions.tweet.getAll()
for (const tweet of tweets) {
  const hasCode = tweet.textContent.includes('```') || 
                  tweet.textContent.includes('function') ||
                  tweet.textContent.includes('const ')
  if (hasCode) {
    await XActions.engage.bookmark(tweet)
    console.log('Bookmarked code tweet')
    await new Promise(r => setTimeout(r, 1500))
  }
}

// Example 3: Bookmark learning resources
const tweets = XActions.tweet.getAll()
const resourceKeywords = ['tutorial', 'guide', 'learn', 'course', 'free', 'resource']
for (const tweet of tweets) {
  if (resourceKeywords.some(kw => tweet.textContent.toLowerCase().includes(kw))) {
    await XActions.engage.bookmark(tweet)
  }
}

unbookmark(tweetElement) - Remove bookmark

// XActions.engage.unbookmark - Remove bookmark
// Example 1: Remove bookmark from first bookmarked tweet
const tweets = XActions.tweet.getAll()
const bookmarked = tweets.find(t => t.querySelector('[data-testid="removeBookmark"]'))
if (bookmarked) await XActions.engage.unbookmark(bookmarked)

// Example 2: Clean up bookmarks page (navigate to /i/bookmarks first)
const tweets = XActions.tweet.getAll()
for (const tweet of tweets) {
  await XActions.engage.unbookmark(tweet)
  await new Promise(r => setTimeout(r, 1000))
}

// Example 3: Remove outdated bookmarks
const tweets = XActions.tweet.getAll()
for (const tweet of tweets) {
  if (tweet.textContent.includes('2022') || tweet.textContent.includes('2021')) {
    await XActions.engage.unbookmark(tweet)
  }
}

addToList(tweetElement, listName) - Add tweet author to list

// XActions.engage.addToList - Add tweet author to list
// Example 1: Add author to your "Interesting People" list
const tweets = XActions.tweet.getAll()
await XActions.engage.addToList(tweets[0], "Interesting People")

// Example 2: Curate experts by topic
const tweets = XActions.tweet.getAll()
for (const tweet of tweets) {
  const text = tweet.textContent.toLowerCase()
  if (text.includes('machine learning') || text.includes('deep learning')) {
    await XActions.engage.addToList(tweet, "AI Experts")
    await new Promise(r => setTimeout(r, 2000))
  }
}

// Example 3: Build competitor list
const tweets = XActions.tweet.getAll()
const competitors = ['competitor1', 'competitor2', 'competitor3']
for (const tweet of tweets) {
  if (competitors.some(c => tweet.textContent.toLowerCase().includes(c))) {
    await XActions.engage.addToList(tweet, "Competitors")
  }
}

report(tweetElement, reason) - Report tweet

// XActions.engage.report - Report tweet
// Example 1: Report a spam tweet
const tweets = XActions.tweet.getAll()
const spamTweet = tweets.find(t => t.textContent.includes('FREE CRYPTO'))
if (spamTweet) {
  await XActions.engage.report(spamTweet, 'spam')
  console.log('Reported spam tweet - complete the form manually')
}

// Example 2: Report tweets with specific content
const tweets = XActions.tweet.getAll()
for (const tweet of tweets) {
  if (tweet.textContent.toLowerCase().includes('scam')) {
    await XActions.engage.report(tweet, 'spam')
    await new Promise(r => setTimeout(r, 5000))
  }
}

// Example 3: Batch report suspicious tweets
const tweets = XActions.tweet.getAll()
const suspiciousTweet = tweets.find(t => 
  t.textContent.includes('DM me for investment') ||
  t.textContent.includes('guaranteed returns')
)
if (suspiciousTweet) await XActions.engage.report(suspiciousTweet, 'scam')
// XActions.engage.copyLink - Copy tweet link
// Example 1: Copy link of first tweet
const tweets = XActions.tweet.getAll()
await XActions.engage.copyLink(tweets[0])
console.log('Link copied to clipboard!')

// Example 2: Copy links of all valuable tweets for sharing
const tweets = XActions.tweet.getAll()
const links = []
for (const tweet of tweets) {
  const id = XActions.tweet.getId(tweet)
  if (id) links.push(`https://x.com/i/status/${id}`)
}
console.log('Tweet links:', links.join('\n'))

// Example 3: Copy and log for content curation
const tweet = XActions.tweet.getAll()[0]
await XActions.engage.copyLink(tweet)
const id = XActions.tweet.getId(tweet)
console.log(`Copied: https://x.com/i/status/${id}`)

shareViaDM(tweetElement, username) - Share via DM

// XActions.engage.shareViaDM - Share via DM
// Example 1: Share tweet with a friend
const tweets = XActions.tweet.getAll()
await XActions.engage.shareViaDM(tweets[0], "friendusername")

// Example 2: Share interesting content with your team
const tweet = XActions.tweet.getAll()[0]
const teamMembers = ['teammate1', 'teammate2', 'teammate3']
for (const member of teamMembers) {
  await XActions.engage.shareViaDM(tweet, member)
  await new Promise(r => setTimeout(r, 2000))
}

// Example 3: Share breaking news
const tweets = XActions.tweet.getAll()
const importantTweet = tweets.find(t => t.textContent.includes('breaking news'))
if (importantTweet) {
  await XActions.engage.shareViaDM(importantTweet, "newseditor")
}

embed(tweetElement) - Get embed code

// XActions.engage.embed - Get embed code
// Example 1: Get embed code for first tweet
const tweets = XActions.tweet.getAll()
await XActions.engage.embed(tweets[0])
console.log('Embed dialog opened - copy the code')

// Example 2: Open embed for a blog-worthy tweet
const tweets = XActions.tweet.getAll()
const quoteTweet = tweets.find(t => 
  t.textContent.includes('great insight')
)
if (quoteTweet) await XActions.engage.embed(quoteTweet)

// Example 3: Embed for documentation
const tweet = XActions.tweet.getAll()[0]
await XActions.engage.embed(tweet)
// Then copy the embed HTML for your website

viewAnalytics(tweetElement) - View tweet analytics

// XActions.engage.viewAnalytics - View tweet analytics
// Example 1: View analytics of your recent tweet
const tweets = XActions.tweet.getAll()
const myTweet = tweets.find(t => t.querySelector('[data-testid="caret"]'))
if (myTweet) await XActions.engage.viewAnalytics(myTweet)

// Example 2: Check performance of pinned tweet
const tweets = XActions.tweet.getAll()
await XActions.engage.viewAnalytics(tweets[0])

// Example 3: Analyze your best content
const tweets = XActions.tweet.getAll()
for (const tweet of tweets.slice(0, 5)) {
  await XActions.engage.viewAnalytics(tweet)
  await new Promise(r => setTimeout(r, 5000)) // Time to view
}

requestNote(tweetElement) - Request community note

// XActions.engage.requestNote - Request community note
// Example 1: Request note on misleading tweet
const tweets = XActions.tweet.getAll()
const misleadingTweet = tweets.find(t => 
  t.textContent.includes('fake') || t.textContent.includes('false claim')
)
if (misleadingTweet) await XActions.engage.requestNote(misleadingTweet)

// Example 2: Request fact-check on viral tweet
const tweets = XActions.tweet.getAll()
for (const tweet of tweets) {
  const likes = parseInt(tweet.querySelector('[data-testid="like"]')?.textContent || '0')
  if (likes > 10000) {
    await XActions.engage.requestNote(tweet)
    console.log('Requested community note for viral tweet')
  }
}

// Example 3: Report misinformation
const tweet = XActions.tweet.getAll()[0]
await XActions.engage.requestNote(tweet)
console.log('Community note request submitted')

highlight(tweetElement) - Highlight tweet (Premium)

// XActions.engage.highlight - Highlight tweet (X Premium)
// Example 1: Highlight your best tweet
const tweets = XActions.tweet.getAll()
await XActions.engage.highlight(tweets[0])

// Example 2: Highlight an announcement tweet
const tweets = XActions.tweet.getAll()
const announcement = tweets.find(t => 
  t.textContent.includes('๐Ÿš€') || t.textContent.includes('Announcing')
)
if (announcement) await XActions.engage.highlight(announcement)

// Example 3: Highlight high-engagement content
const tweets = XActions.tweet.getAll()
const bestTweet = tweets.find(t => {
  const likes = parseInt(t.querySelector('[data-testid="like"]')?.textContent || '0')
  return likes > 1000
})
if (bestTweet) {
  await XActions.engage.highlight(bestTweet)
  console.log('High-engagement tweet highlighted!')
}

๐Ÿ‘ค XActions.user โ€” User Interactions (Part 1)

Functions for interacting with user accounts.

follow(target) - Follow user (username or element)

// XActions.user.follow - Follow user
// Example 1: Follow a user by username
await XActions.user.follow("elonmusk")

// Example 2: Follow from a user card element
const userCells = document.querySelectorAll('[data-testid="UserCell"]')
await XActions.user.follow(userCells[0])

// Example 3: Follow multiple users from a list
const usersToFollow = ['naval', 'paulg', 'sama', 'balaboris']
for (const username of usersToFollow) {
  await XActions.user.follow(username)
  await new Promise(r => setTimeout(r, 3000)) // Rate limit
  console.log(`Followed @${username}`)
}

unfollow(target) - Unfollow user

// XActions.user.unfollow - Unfollow user
// Example 1: Unfollow a specific user
await XActions.user.unfollow("oldaccount")

// Example 2: Unfollow from Following page elements
const userCells = document.querySelectorAll('[data-testid="UserCell"]')
for (const cell of userCells.slice(0, 5)) {
  await XActions.user.unfollow(cell)
  await new Promise(r => setTimeout(r, 2500))
}

// Example 3: Cleanup inactive accounts
const inactiveUsers = ['user1', 'user2', 'user3']
for (const user of inactiveUsers) {
  await XActions.user.unfollow(user)
  console.log(`Unfollowed @${user}`)
  await new Promise(r => setTimeout(r, 3000))
}

block(username) - Block user

// XActions.user.block - Block user
// Example 1: Block a spam account
await XActions.user.block("spammer123")
console.log('User blocked!')

// Example 2: Block multiple problematic accounts
const blocklist = ['troll1', 'spammer2', 'bot_account']
for (const user of blocklist) {
  await XActions.user.block(user)
  await new Promise(r => setTimeout(r, 2000))
}
console.log('Blocklist processed')

// Example 3: Block from saved list
const accountsToBlock = localStorage.getItem('blocklist')?.split(',') || []
for (const account of accountsToBlock) {
  await XActions.user.block(account.trim())
  await new Promise(r => setTimeout(r, 3000))
}

unblock(username) - Unblock user

// XActions.user.unblock - Unblock user
// Example 1: Unblock a specific user
await XActions.user.unblock("formerlyblocked")

// Example 2: Unblock users after review
const reviewList = ['user1', 'user2']
for (const user of reviewList) {
  await XActions.user.unblock(user)
  console.log(`Unblocked @${user}`)
  await new Promise(r => setTimeout(r, 2000))
}

// Example 3: Second chance - unblock all
const blocked = ['account1', 'account2', 'account3']
for (const account of blocked) {
  await XActions.user.unblock(account)
  await new Promise(r => setTimeout(r, 2500))
}
console.log('All accounts unblocked')

mute(username) - Mute user

// XActions.user.mute - Mute user
// Example 1: Mute a noisy account
await XActions.user.mute("loudaccount")
console.log('Account muted!')

// Example 2: Mute competitors
const competitors = ['competitor1', 'competitor2']
for (const comp of competitors) {
  await XActions.user.mute(comp)
  await new Promise(r => setTimeout(r, 2000))
}

// Example 3: Mute during event
const eventAccounts = ['conference2024', 'eventspam']
for (const account of eventAccounts) {
  await XActions.user.mute(account)
  console.log(`Muted @${account} for quieter timeline`)
}

unmute(username) - Unmute user

// XActions.user.unmute - Unmute user
// Example 1: Unmute a specific user
await XActions.user.unmute("nowrelevant")

// Example 2: Unmute after event ends
const eventAccounts = ['conference2024', 'eventspam']
for (const account of eventAccounts) {
  await XActions.user.unmute(account)
  console.log(`Unmuted @${account}`)
  await new Promise(r => setTimeout(r, 2000))
}

// Example 3: Unmute from saved list
const mutedList = JSON.parse(localStorage.getItem('muted_accounts') || '[]')
for (const username of mutedList) {
  await XActions.user.unmute(username)
}
localStorage.removeItem('muted_accounts')

report(username) - Report user

// XActions.user.report - Report user
// Example 1: Report a spam/bot account
await XActions.user.report("suspiciousbot")
console.log('Report dialog opened - complete manually')

// Example 2: Report impersonator
await XActions.user.report("fake_official_account")

// Example 3: Report multiple problematic accounts
const reportList = ['scammer1', 'impersonator2']
for (const user of reportList) {
  await XActions.user.report(user)
  console.log(`Opened report for @${user}`)
  await new Promise(r => setTimeout(r, 10000)) // Time to complete report
}

addToList(username, listName) - Add user to list

// XActions.user.addToList - Add user to list
// Example 1: Add to your curated list
await XActions.user.addToList("techexpert", "Tech Leaders")

// Example 2: Organize follows into lists
const categories = {
  "Tech Founders": ['naval', 'paulg', 'sama'],
  "Developers": ['dan_abramov', 'kentcdodds', 'ryanflorence']
}
for (const [listName, users] of Object.entries(categories)) {
  for (const user of users) {
    await XActions.user.addToList(user, listName)
    await new Promise(r => setTimeout(r, 2000))
  }
}

// Example 3: Build a private research list
const researchTargets = ['competitor1', 'competitor2', 'industryanalyst']
for (const target of researchTargets) {
  await XActions.user.addToList(target, "Research")
  console.log(`Added @${target} to Research list`)
}

notifyOn(username) - Turn on notifications

// XActions.user.notifyOn - Turn on notifications
// Example 1: Get notifications for a key account
await XActions.user.notifyOn("breakingnews")
console.log('Notifications enabled!')

// Example 2: Enable for VIP follows
const vips = ['ceo_account', 'important_client', 'team_lead']
for (const vip of vips) {
  await XActions.user.notifyOn(vip)
  await new Promise(r => setTimeout(r, 2000))
}

// Example 3: Track competitor announcements
const competitors = ['rival1', 'rival2']
for (const comp of competitors) {
  await XActions.user.notifyOn(comp)
  console.log(`Now tracking @${comp}'s posts`)
}

notifyOff(username) - Turn off notifications

// XActions.user.notifyOff - Turn off notifications
// Example 1: Stop notifications from noisy account
await XActions.user.notifyOff("toofrequent")

// Example 2: Clean up notification overload
const noisyAccounts = ['account1', 'account2', 'account3']
for (const account of noisyAccounts) {
  await XActions.user.notifyOff(account)
  await new Promise(r => setTimeout(r, 2000))
}
console.log('Notification cleanup complete')

// Example 3: Turn off after event/launch
await XActions.user.notifyOff("productlaunch2024")
console.log('Post-launch notifications disabled')

viewTopics(username) - View user's topics

// XActions.user.viewTopics - View user's topics
// Example 1: See what topics a user follows
await XActions.user.viewTopics("elonmusk")

// Example 2: Research competitor's interests
await XActions.user.viewTopics("competitor")
console.log('Check their topics for market insights')

// Example 3: Find topic overlap
const interestingUsers = ['user1', 'user2']
for (const user of interestingUsers) {
  await XActions.user.viewTopics(user)
  await new Promise(r => setTimeout(r, 5000)) // Time to review
}

viewLists(username) - View user's lists

// XActions.user.viewLists - View user's lists
// Example 1: Discover curated lists
await XActions.user.viewLists("curator")
console.log('Browse their public lists')

// Example 2: Find industry expert lists
await XActions.user.viewLists("techinfluencer")

// Example 3: Research for list ideas
const curators = ['listmaker1', 'listmaker2']
for (const curator of curators) {
  await XActions.user.viewLists(curator)
  await new Promise(r => setTimeout(r, 5000))
}

viewFollowers(username) - View followers

// XActions.user.viewFollowers - View followers
// Example 1: Browse a user's followers
await XActions.user.viewFollowers("popularaccount")

// Example 2: Research competitor's audience
await XActions.user.viewFollowers("competitor")
console.log('Analyze their follower demographics')

// Example 3: Find potential follows
await XActions.user.viewFollowers("industryexpert")
// Now scroll and follow interesting accounts

viewFollowing(username) - View following

// XActions.user.viewFollowing - View following
// Example 1: See who a user follows
await XActions.user.viewFollowing("tastemaker")

// Example 2: Discover through curators
await XActions.user.viewFollowing("techcurator")
console.log('Great source for new follows!')

// Example 3: Competitive analysis
await XActions.user.viewFollowing("competitor")
console.log('See who your competitors watch')

viewLikes(username) - View user's likes

// XActions.user.viewLikes - View user's likes
// Example 1: See what content a user likes
await XActions.user.viewLikes("influencer")

// Example 2: Research interests for outreach
await XActions.user.viewLikes("potentialclient")
console.log('Understand their interests')

// Example 3: Content inspiration
await XActions.user.viewLikes("successfulcreator")
console.log('See what resonates with them')

๐Ÿงญ XActions.nav โ€” Navigation (Part 2)

Navigate anywhere on X with simple function calls.

profile(username) - Navigate to user profile

// XActions.nav.profile - Navigate to any user's profile
// Example 1: View a specific user's profile
await XActions.nav.profile("elonmusk")

// Example 2: View your own profile
await XActions.nav.profile()  // Defaults to current user

// Example 3: Navigate through a list of profiles
const usersToCheck = ["naval", "paulg", "sama"]
for (const user of usersToCheck) {
  await XActions.nav.profile(user)
  console.log(`Viewing @${user}'s profile`)
  await new Promise(r => setTimeout(r, 3000))
}

settings() - Navigate to settings

// XActions.nav.settings - Go to account settings
// Example 1: Quick access to settings
await XActions.nav.settings()

// Example 2: Navigate to settings before making changes
await XActions.nav.settings()
console.log("Settings page loaded - ready to configure")

notifyAll() - All notifications tab

// XActions.nav.notifyAll - View all notifications
// Example 1: Check all notifications
await XActions.nav.notifyAll()

// Example 2: Morning notification check routine
console.log("Checking all notifications...")
await XActions.nav.notifyAll()

notifyVerified() - Verified notifications only

// XActions.nav.notifyVerified - Filter to verified accounts only
// Example 1: See only verified account interactions
await XActions.nav.notifyVerified()
console.log("Showing verified accounts only")

// Example 2: Focus on important notifications
await XActions.nav.notifyVerified()
// Verified users often have higher-quality interactions

notifyMentions() - Mentions tab

// XActions.nav.notifyMentions - View mentions only
// Example 1: Check who's talking about you
await XActions.nav.notifyMentions()

// Example 2: Monitor mentions for engagement
await XActions.nav.notifyMentions()
console.log("Checking mentions for replies to respond to...")

// Example 3: Daily mentions audit
await XActions.nav.notifyMentions()
// Great for customer service monitoring

forYou() - For You timeline

// XActions.nav.forYou - Switch to algorithmic timeline
// Example 1: See what's trending for you
await XActions.nav.forYou()

// Example 2: Compare timelines
await XActions.nav.forYou()
console.log("Viewing For You algorithmic feed")
await new Promise(r => setTimeout(r, 5000))
await XActions.nav.following()
console.log("Now viewing Following chronological feed")

following() - Following timeline

// XActions.nav.following - Switch to chronological following timeline
// Example 1: See latest from people you follow
await XActions.nav.following()

// Example 2: Prefer chronological for catching up
await XActions.nav.following()
console.log("Showing posts from accounts you follow, newest first")
// XActions.nav.trending - See what's trending
// Example 1: Check trending topics
await XActions.nav.trending()

// Example 2: Research before posting
await XActions.nav.trending()
console.log("Checking trending topics for content ideas...")

// Example 3: Monitor trending for news
await XActions.nav.trending()
// Great for staying updated on current events

forYouExplore() - For You in Explore

// XActions.nav.forYouExplore - Personalized explore content
// Example 1: Discover personalized content
await XActions.nav.forYouExplore()

// Example 2: Content discovery routine
await XActions.nav.forYouExplore()
console.log("Exploring personalized recommendations...")

news() - News tab

// XActions.nav.news - Navigate to news section
// Example 1: Check latest news
await XActions.nav.news()

// Example 2: Morning news routine
await XActions.nav.news()
console.log("Loading news section...")

sports() - Sports tab

// XActions.nav.sports - Navigate to sports section
// Example 1: Check sports updates
await XActions.nav.sports()

// Example 2: Game day monitoring
await XActions.nav.sports()
console.log("Checking sports updates...")

entertainment() - Entertainment tab

// XActions.nav.entertainment - Navigate to entertainment section
// Example 1: Browse entertainment news
await XActions.nav.entertainment()

// Example 2: Pop culture updates
await XActions.nav.entertainment()
console.log("Loading entertainment section...")

spaces() - Spaces page

// XActions.nav.spaces - Navigate to Twitter Spaces
// Example 1: Browse live audio rooms
await XActions.nav.spaces()

// Example 2: Find spaces to join
await XActions.nav.spaces()
console.log("Browsing live Spaces...")

scrollToTop() - Scroll to top

// XActions.nav.scrollToTop - Scroll page to top
// Example 1: Return to top after browsing
XActions.nav.scrollToTop()

// Example 2: Quick refresh view
XActions.nav.scrollToTop()
console.log("Scrolled to top of page")

// Example 3: Use after loading content
await XActions.utils.loadMore(10)
XActions.nav.scrollToTop()  // Go back to start

scrollToBottom() - Scroll to bottom

// XActions.nav.scrollToBottom - Scroll page to bottom
// Example 1: Load more content
XActions.nav.scrollToBottom()

// Example 2: Quick jump to bottom
XActions.nav.scrollToBottom()
console.log("Scrolled to bottom")

scrollBy(pixels) - Scroll by specific amount

// XActions.nav.scrollBy - Scroll by pixel amount
// Example 1: Scroll down gradually
XActions.nav.scrollBy(500)

// Example 2: Scroll up (negative value)
XActions.nav.scrollBy(-300)

// Example 3: Simulate human scrolling pattern
for (let i = 0; i < 5; i++) {
  XActions.nav.scrollBy(Math.random() * 400 + 200)
  await new Promise(r => setTimeout(r, 1000))
}

back() - Browser back

// XActions.nav.back - Go to previous page
// Example 1: Simple back navigation
XActions.nav.back()

// Example 2: Navigate and return
await XActions.nav.profile("elonmusk")
// ... view profile ...
XActions.nav.back()  // Return to previous page

forward() - Browser forward

// XActions.nav.forward - Go forward in browser history
// Example 1: Undo a back navigation
XActions.nav.forward()

// Example 2: Navigate forward after going back
XActions.nav.back()
// Changed your mind...
XActions.nav.forward()

refresh() - Refresh page

// XActions.nav.refresh - Reload the current page
// Example 1: Refresh to see new content
XActions.nav.refresh()

// Example 2: Reset page state
console.log("Refreshing page...")
XActions.nav.refresh()

๐Ÿ“‹ XActions.lists โ€” List Management

Create and manage X Lists for organizing accounts.

create(name, description, isPrivate) - Create a new list

// XActions.lists.create - Create a new X list
// Example 1: Create a private competitors list
await XActions.lists.create("Competitors", "Track competitor accounts", true)

// Example 2: Create a public tech news list
await XActions.lists.create("Tech News", "Best tech journalists and outlets", false)

// Example 3: Create a team members list
await XActions.lists.create("Team", "Our company team members", true)
console.log("Team list created - add members next!")

// Example 4: Batch create multiple lists
const listsToCreate = [
  { name: "VCs", desc: "Venture capitalists to follow", private: true },
  { name: "Founders", desc: "Startup founders", private: false },
  { name: "Engineers", desc: "Top engineers in tech", private: false }
]
for (const list of listsToCreate) {
  await XActions.lists.create(list.name, list.desc, list.private)
  console.log(`Created list: ${list.name}`)
}

delete(listId) - Delete a list

// XActions.lists.delete - Remove a list permanently
// Example 1: Delete a list by ID
await XActions.lists.delete("1234567890")

// Example 2: Clean up unused list
const listId = "1234567890"
console.log(`Deleting list ${listId}...`)
await XActions.lists.delete(listId)
console.log("List deleted successfully")

// Example 3: Delete with confirmation
if (confirm("Are you sure you want to delete this list?")) {
  await XActions.lists.delete("1234567890")
}

edit(listId, newName, newDescription) - Edit list details

// XActions.lists.edit - Update list name and description
// Example 1: Rename a list
await XActions.lists.edit("1234567890", "Tech Influencers", null)

// Example 2: Update description only
await XActions.lists.edit("1234567890", null, "Updated: Top tech voices in 2024")

// Example 3: Full list update
await XActions.lists.edit(
  "1234567890",
  "AI & ML Experts",
  "Leading researchers and practitioners in artificial intelligence"
)
console.log("List updated!")

follow(listId) - Follow a list

// XActions.lists.follow - Subscribe to a public list
// Example 1: Follow a curated list
await XActions.lists.follow("1234567890")

// Example 2: Follow multiple lists
const listsToFollow = ["1234567890", "0987654321", "1122334455"]
for (const listId of listsToFollow) {
  await XActions.lists.follow(listId)
  console.log(`Now following list: ${listId}`)
}

// Example 3: Follow and confirm
await XActions.lists.follow("1234567890")
console.log("Successfully followed list!")

unfollow(listId) - Unfollow a list

// XActions.lists.unfollow - Unsubscribe from a list
// Example 1: Unfollow a list
await XActions.lists.unfollow("1234567890")

// Example 2: Clean up followed lists
await XActions.lists.unfollow("1234567890")
console.log("Unfollowed list - will no longer see in timeline")

pin(listId) - Pin/unpin list

// XActions.lists.pin - Toggle pin status for quick access
// Example 1: Pin your most-used list
await XActions.lists.pin("1234567890")
console.log("List pinned for quick access!")

// Example 2: Organize pinned lists
const priorityLists = ["1234567890", "0987654321"]
for (const listId of priorityLists) {
  await XActions.lists.pin(listId)
}
console.log("Priority lists pinned!")

// Example 3: Toggle pin (run again to unpin)
await XActions.lists.pin("1234567890")
// Run again to unpin:
// await XActions.lists.pin("1234567890")

getAll() - Get all your lists

// XActions.lists.getAll - Retrieve all lists you own or follow
// Example 1: View all lists
const myLists = await XActions.lists.getAll()
console.log(`You have ${myLists.length} lists`)

// Example 2: List all list names
const myLists = await XActions.lists.getAll()
myLists.forEach((list, i) => {
  console.log(`${i + 1}. ${list.text}`)
})

// Example 3: Audit your lists
const myLists = await XActions.lists.getAll()
console.log(`Total lists: ${myLists.length}`)
console.log("Consider archiving unused lists!")

viewMembers(listId) - View list members

// XActions.lists.viewMembers - See all members of a list
// Example 1: View members of a list
await XActions.lists.viewMembers("1234567890")

// Example 2: Audit list membership
await XActions.lists.viewMembers("1234567890")
console.log("Review members and remove inactive accounts")

// Example 3: Navigate to members for management
await XActions.lists.viewMembers("1234567890")
// Now you can manually add/remove members from the UI

viewFollowers(listId) - View list followers

// XActions.lists.viewFollowers - See who follows your list
// Example 1: Check list popularity
await XActions.lists.viewFollowers("1234567890")

// Example 2: Analyze list audience
await XActions.lists.viewFollowers("1234567890")
console.log("See who's interested in your curated list")

// Example 3: Growth tracking
await XActions.lists.viewFollowers("1234567890")
// Great for seeing how many people value your curation

โš™๏ธ XActions.settings โ€” Account Settings

Quick access to all X settings pages.

account() - Account settings

// XActions.settings.account - Navigate to account settings
// Example 1: View account settings
await XActions.settings.account()

// Example 2: Check account status
await XActions.settings.account()
console.log("Account settings loaded - check username, email, etc.")

// Example 3: Pre-flight before changes
await XActions.settings.account()
// Review current settings before making updates

security() - Security settings

// XActions.settings.security - Navigate to security settings
// Example 1: Review security settings
await XActions.settings.security()

// Example 2: Security audit
await XActions.settings.security()
console.log("Review: 2FA status, connected apps, active sessions")

// Example 3: After suspicious activity
await XActions.settings.security()
// Check for unauthorized access and update password

privacy() - Privacy settings

// XActions.settings.privacy - Navigate to privacy settings
// Example 1: Review privacy settings
await XActions.settings.privacy()

// Example 2: Privacy audit
await XActions.settings.privacy()
console.log("Review: discoverability, data sharing, ad preferences")

// Example 3: Lockdown privacy
await XActions.settings.privacy()
// Review who can see your posts, find you by email/phone, etc.

notifications() - Notification settings

// XActions.settings.notifications - Navigate to notification settings
// Example 1: Configure notifications
await XActions.settings.notifications()

// Example 2: Reduce notification noise
await XActions.settings.notifications()
console.log("Customize which notifications you receive")

// Example 3: Notification audit
await XActions.settings.notifications()
// Turn off notifications you don't need

accessibility() - Accessibility settings

// XActions.settings.accessibility - Navigate to accessibility settings
// Example 1: View accessibility options
await XActions.settings.accessibility()

// Example 2: Configure display preferences
await XActions.settings.accessibility()
console.log("Adjust: font size, color contrast, motion settings")

// Example 3: Enable accessibility features
await XActions.settings.accessibility()
// Great for: autoplay settings, image descriptions, reduced motion

monetization() - Monetization settings

// XActions.settings.monetization - Navigate to monetization settings
// Example 1: Check monetization status
await XActions.settings.monetization()

// Example 2: Creator earnings review
await XActions.settings.monetization()
console.log("Review: ad revenue, tips, subscriptions")

// Example 3: Set up monetization
await XActions.settings.monetization()
// Enable features to earn from your content

creatorSubs() - Creator subscriptions

// XActions.settings.creatorSubs - Navigate to creator subscriptions
// Example 1: Manage subscriptions
await XActions.settings.creatorSubs()

// Example 2: Review active subscriptions
await XActions.settings.creatorSubs()
console.log("See creators you're subscribed to")

// Example 3: Subscription audit
await XActions.settings.creatorSubs()
// Review and cancel unused subscriptions

premium() - Premium settings

// XActions.settings.premium - Navigate to Premium/X Premium settings
// Example 1: Check Premium status
await XActions.settings.premium()

// Example 2: View Premium features
await XActions.settings.premium()
console.log("Review your Premium subscription and features")

// Example 3: Upgrade or manage Premium
await XActions.settings.premium()
// Upgrade tier or manage billing

mutedAccounts() - View muted accounts

// XActions.settings.mutedAccounts - See all muted accounts
// Example 1: Review muted accounts
await XActions.settings.mutedAccounts()

// Example 2: Mute list audit
await XActions.settings.mutedAccounts()
console.log("Review accounts you've muted - unmute if needed")

// Example 3: Clean up mute list
await XActions.settings.mutedAccounts()
// Remove mutes for accounts you want to see again

mutedWords() - View muted words

// XActions.settings.mutedWords - See all muted words/phrases
// Example 1: Review muted keywords
await XActions.settings.mutedWords()

// Example 2: Keyword filter audit
await XActions.settings.mutedWords()
console.log("Review muted words - add or remove as needed")

// Example 3: Content filter management
await XActions.settings.mutedWords()
// Great for managing what content you don't want to see

โญ Back to Main README