-
Notifications
You must be signed in to change notification settings - Fork 26
Description
Free Tier only allows 1 endpoint interaction / 15 mins
Basic Tier costs $200/month (really pricey for a basic twitter bot)
Question: can we avoid fetching the home timeline at startup? I used 67 of 100 monthly allocated posts with that initial fetch.
Steps to reproduce:
- Create new Project on X developer portal using readme instructions
- i started with a fairly basic configuration
`# Basic Configuration
TWITTER_DRY_RUN=true # Set to true to test without posting
TWITTER_ENABLE_POST=true # Enable autonomous tweet posting
TWITTER_ENABLE_REPLIES=true # Enable mention and reply handling
TWITTER_ENABLE_ACTIONS=false # Enable timeline actions (likes, retweets, quotes)
TWITTER_ENABLE_DISCOVERY=falseOptional: Posting Configuration
TWITTER_POST_IMMEDIATELY=true # Post on startup (great for testing)
TWITTER_POST_INTERVAL=120 # Minutes between posts (default: 120)For more natural timing, use MIN/MAX intervals:
TWITTER_POST_INTERVAL_MIN=90 # Minimum minutes between posts
TWITTER_POST_INTERVAL_MAX=150 # Maximum minutes between posts`
- Ran elizaos dev to startup the project. An agent i created has the twitter plugin added.
- Got a 429 rate limiting error right away and web client
`Startup successful!
Go to the dashboard at http://localhost:3000
AgentServer is listening on port 3000
[2025-08-15 13:53:45] INFO: Final plugins being loaded:
plugins: [
"@elizaos/plugin-sql",
"openai",
"twitter",
"bootstrap"
]
[2025-08-15 13:53:45] INFO: Initializing character
[2025-08-15 13:53:45] INFO: Name: Eliza
[2025-08-15 13:53:45] INFO: plugin-sql init starting...
[2025-08-15 13:53:45] INFO: Database adapter created and registered
[2025-08-15 13:53:46] INFO: Twitter posting is DISABLED - set TWITTER_ENABLE_POST=true to enable automatic posting
[2025-08-15 13:53:46] INFO: Twitter replies/interactions are ENABLED
[2025-08-15 13:53:46] INFO: Twitter timeline actions are DISABLED
[2025-08-15 13:53:46] INFO: Twitter discovery service is DISABLED - set TWITTER_ENABLE_DISCOVERY=true to enable
[2025-08-15 09:53:45.765 -0400] INFO: Running plugin migrations...
agentName: "Eliza"
logLevel: "info"
[2025-08-15 09:53:45.765 -0400] INFO: Found 1 plugins with schemas to migrate.
agentName: "Eliza"
logLevel: "info"
[2025-08-15 09:53:45.765 -0400] INFO: Running migrations for plugin: @elizaos/plugin-sql
agentName: "Eliza"
logLevel: "info"
[2025-08-15 09:53:45.765 -0400] INFO: Successfully migrated plugin: @elizaos/plugin-sql
agentName: "Eliza"
logLevel: "info"
[2025-08-15 09:53:45.765 -0400] INFO: Plugin migrations completed.
agentName: "Eliza"
logLevel: "info"
[2025-08-15 13:53:46] INFO: Successfully authenticated with Twitter API v2
[2025-08-15 13:54:01] INFO: Twitter interaction client will check in 30.0 minutes
[2025-08-15 13:54:01] INFO: [Eliza] MessageBusService: Subscribing to internal message bus for 'new_message', 'message_deleted', and 'channel_cleared' events.
[2025-08-15 13:54:01] WARN: DatabaseMigrationService not found - plugin schema migrations skipped
[2025-08-15 13:54:01] INFO: [Eliza] MessageBusService: Agent is subscribed to 1 servers (including default server)
[2025-08-15 13:54:01] INFO: [Eliza] MessageBusService: Fetched 10 channels from server 00000000-0000-0000-0000-000000000000
[2025-08-15 13:54:01] INFO: [Eliza] MessageBusService: Loaded 10 valid channel IDs from 1 servers (including default server)
[2025-08-15 13:54:01] INFO: [AgentServer] Automatically registered MessageBusConnector for agent Eliza
[2025-08-15 13:54:01] INFO: [AgentServer] Auto-associated agent Eliza with server ID: 00000000-0000-0000-0000-000000000000
Search error: 99 | }
100 | else {
101 | errorString += ' - ' + this.formatV2Error(data);
102 | }
103 | }
104 | return new types_1.ApiResponseError(errorString, {
^
error: Request failed with code 429
error: true,
type: "response",
code: 429,
headers: {
date: "Fri, 15 Aug 2025 13:54:01 GMT",
"content-type": "application/json; charset=utf-8",
"content-length": "94",
connection: "keep-alive",
"cache-control": "no-cache, no-store, max-age=0",
"x-frame-options": "SAMEORIGIN",
"content-encoding": "gzip",
"x-xss-protection": "0",
"content-disposition": "attachment; filename=json.json",
"x-content-type-options": "nosniff",
"strict-transport-security": "max-age=631138519; includeSubdomains",
vary: "accept-encoding",
"set-cookie": [ "guest_id_marketing=v1%3A175526604097220534; Max-Age=63072000; Expires=Sun, 15 Aug 2027 13:54:00 GMT; Path=/; Domain=.x.com; Secure; SameSite=None",
"guest_id_ads=v1%3A175526604097220534; Max-Age=63072000; Expires=Sun, 15 Aug 2027 13:54:00 GMT; Path=/; Domain=.x.com; Secure; SameSite=None",
"personalization_id="v1_+11Ta4SKgZE3fqMkKBsp+A=="; Max-Age=63072000; Expires=Sun, 15 Aug 2027 13:54:00 GMT; Path=/; Domain=.x.com; Secure; SameSite=None",
"guest_id=v1%3A175526604097220534; Max-Age=63072000; Expires=Sun, 15 Aug 2027 13:54:00 GMT; Path=/; Domain=.x.com; Secure; SameSite=None",
"__cf_bm=o3e9_t7zNMuWs339SrcvPoFbvnjkGWXjpY3lOwhKdt4-1755266041-1.0.1.1-6fTC2v4VlAgNVEDHBC3Qojdbd3uf9InzZL294bmuwdcSL30Hl_Eh_5PETheTuSWg1LkbtlfgikluszIeUA2AxVbF7yMfw7lbHGNmGva3gp8; path=/; expires=Fri, 15-Aug-25 14:24:01 GMT; domain=.x.com; HttpOnly; Secure; SameSite=None"
],
"cf-ray": "96f92e73ee25ac5d-YYZ",
perf: "7402827104",
"api-version": "2.146",
"x-access-level": "read-write",
"x-transaction-id": "0d190ecee24dc975",
"x-rate-limit-limit": "1",
"x-rate-limit-reset": "1755266926",
"x-rate-limit-remaining": "0",
"x-response-time": "15",
"x-connection-hash": "0e2ade72914cf48a0fabc23b70a9f9ae1b31856a619df97b596949a24a5aa49a",
"cf-cache-status": "DYNAMIC",
server: "cloudflare tsa_b",
},
rateLimit: {
limit: 1,
remaining: 0,
reset: 1755266926,
},
data: {
title: "Too Many Requests",
detail: "Too Many Requests",
type: "about:blank",
status: 429,
},at createResponseError (/mnt/z/Projects/eliza/regcheck-8/node_modules/twitter-api-v2/dist/cjs/client-mixins/request-handler.helper.js:104:16) at onResponseEndHandler (/mnt/z/Projects/eliza/regcheck-8/node_modules/twitter-api-v2/dist/cjs/client-mixins/request-handler.helper.js:262:25) at emit (node:events:92:22) at endReadableNT (internal:streams/readable:862:50)[2025-08-15 13:54:01] ERROR: Error fetching search tweets:
message: "(Error) Request failed with code 429"
stack: [
"Error: Request failed with code 429",
"at createResponseError (/mnt/z/Projects/eliza/regcheck-8/node_modules/twitter-api-v2/dist/cjs/client-mixins/request-handler.helper.js:104:28)",
"at onResponseEndHandler (/mnt/z/Projects/eliza/regcheck-8/node_modules/twitter-api-v2/dist/cjs/client-mixins/request-handler.helper.js:262:25)",
"at emit (node:events:92:22)",
"at endReadableNT (internal:streams/readable:862:50)",
"at processTicksAndRejections (native:7:39)"
]
[2025-08-15 13:54:01] INFO: Processing 0 of 0 mention tweets (max: 10)`