@elizaos/plugin-twitter 1.2.18 → 1.2.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -6105,8 +6105,6 @@ var twitterEnvSchema = external_exports.object({
6105
6105
  // Advanced
6106
6106
  TWITTER_RETRY_LIMIT: external_exports.string().default("5")
6107
6107
  });
6108
- delete process.env.TWITTER_SEARCH_ENABLE;
6109
- delete process.env.TWITTER_POST_ENABLE;
6110
6108
  function safeParseInt(value, defaultValue) {
6111
6109
  if (!value) return defaultValue;
6112
6110
  const parsed = parseInt(value, 10);
@@ -7073,45 +7071,54 @@ var TwitterPostClient = class {
7073
7071
  logger5.log("Twitter post client stopped, exiting loop");
7074
7072
  return;
7075
7073
  }
7074
+ await this.generateNewTweet();
7075
+ if (!this.isRunning) {
7076
+ logger5.log("Twitter post client stopped after tweet, exiting loop");
7077
+ return;
7078
+ }
7076
7079
  const postIntervalMinutes = getRandomInterval(this.runtime, "post");
7077
7080
  const interval = postIntervalMinutes * 60 * 1e3;
7078
7081
  logger5.info(`Next tweet scheduled in ${postIntervalMinutes.toFixed(1)} minutes`);
7079
7082
  await new Promise((resolve) => setTimeout(resolve, interval));
7080
- if (!this.isRunning) {
7081
- logger5.log("Twitter post client stopped during wait, exiting loop");
7082
- return;
7083
- }
7084
- await this.generateNewTweet();
7085
7083
  if (this.isRunning) {
7086
7084
  generateNewTweetLoop();
7087
7085
  }
7088
7086
  };
7089
- await new Promise((resolve) => setTimeout(resolve, 1e3));
7087
+ await new Promise((resolve) => setTimeout(resolve, 5e3));
7090
7088
  const postImmediately = this.state?.TWITTER_POST_IMMEDIATELY || getSetting(this.runtime, "TWITTER_POST_IMMEDIATELY") || process.env.TWITTER_POST_IMMEDIATELY;
7091
7089
  if (postImmediately === "true" || postImmediately === true) {
7092
7090
  logger5.info(
7093
7091
  "TWITTER_POST_IMMEDIATELY is true, generating initial tweet now"
7094
7092
  );
7095
- await this.generateNewTweet();
7093
+ let retries = 0;
7094
+ while (retries < 5) {
7095
+ const success = await this.generateNewTweet();
7096
+ if (success) break;
7097
+ retries++;
7098
+ logger5.info(`Retrying immediate tweet (attempt ${retries}/5)...`);
7099
+ await new Promise((resolve) => setTimeout(resolve, 3e3));
7100
+ }
7096
7101
  }
7097
7102
  generateNewTweetLoop();
7098
7103
  }
7099
7104
  /**
7100
7105
  * Handles the creation and posting of a tweet by emitting standardized events.
7101
7106
  * This approach aligns with our platform-independent architecture.
7107
+ * @returns {Promise<boolean>} true if tweet was posted successfully
7102
7108
  */
7103
7109
  async generateNewTweet() {
7104
7110
  logger5.info("Attempting to generate new tweet...");
7105
7111
  if (this.isPosting) {
7106
7112
  logger5.info("Already posting a tweet, skipping concurrent attempt");
7107
- return;
7113
+ return false;
7108
7114
  }
7109
7115
  this.isPosting = true;
7110
7116
  try {
7111
7117
  const userId = this.client.profile?.id;
7112
7118
  if (!userId) {
7113
7119
  logger5.error("Cannot generate tweet: Twitter profile not available");
7114
- return;
7120
+ this.isPosting = false;
7121
+ return false;
7115
7122
  }
7116
7123
  logger5.info(
7117
7124
  `Generating tweet for user: ${this.client.profile?.username} (${userId})`
@@ -7174,11 +7181,11 @@ Generate a single tweet that sounds like YOU would actually write it:`;
7174
7181
  const tweetText = generatedContent.trim();
7175
7182
  if (!tweetText || tweetText.length === 0) {
7176
7183
  logger5.error("Generated empty tweet content");
7177
- return;
7184
+ return false;
7178
7185
  }
7179
7186
  if (tweetText.includes("Error: Missing")) {
7180
7187
  logger5.error("Error in generated content:", tweetText);
7181
- return;
7188
+ return false;
7182
7189
  }
7183
7190
  if (tweetText.length > 280) {
7184
7191
  logger5.warn(`Generated tweet too long (${tweetText.length} chars), truncating...`);
@@ -7195,27 +7202,27 @@ Generate a single tweet that sounds like YOU would actually write it:`;
7195
7202
  logger5.info(`Truncated tweet: ${finalTweet}`);
7196
7203
  if (this.isDryRun) {
7197
7204
  logger5.info(`[DRY RUN] Would post tweet: ${finalTweet}`);
7198
- return;
7205
+ return false;
7199
7206
  }
7200
7207
  const result2 = await this.postToTwitter(finalTweet, []);
7201
7208
  if (result2 === null) {
7202
7209
  logger5.info("Skipped posting duplicate tweet");
7203
- return;
7210
+ return false;
7204
7211
  }
7205
7212
  const tweetId2 = result2.id;
7206
7213
  logger5.info(`Tweet posted successfully! ID: ${tweetId2}`);
7207
7214
  logger5.info("Tweet posted successfully (memory saving disabled due to room constraints)");
7208
- return;
7215
+ return true;
7209
7216
  }
7210
7217
  logger5.info(`Generated tweet: ${tweetText}`);
7211
7218
  if (this.isDryRun) {
7212
7219
  logger5.info(`[DRY RUN] Would post tweet: ${tweetText}`);
7213
- return;
7220
+ return false;
7214
7221
  }
7215
7222
  const result = await this.postToTwitter(tweetText, []);
7216
7223
  if (result === null) {
7217
7224
  logger5.info("Skipped posting duplicate tweet");
7218
- return;
7225
+ return false;
7219
7226
  }
7220
7227
  const tweetId = result.id;
7221
7228
  logger5.info(`Tweet posted successfully! ID: ${tweetId}`);
@@ -7255,9 +7262,11 @@ Generate a single tweet that sounds like YOU would actually write it:`;
7255
7262
  };
7256
7263
  await this.runtime.createMemory(postedMemory, "messages");
7257
7264
  logger5.info("Tweet posted and saved to memory successfully");
7265
+ return true;
7258
7266
  }
7259
7267
  } catch (error) {
7260
7268
  logger5.error("Error generating tweet:", error);
7269
+ return false;
7261
7270
  } finally {
7262
7271
  this.isPosting = false;
7263
7272
  }