@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 +27 -18
- package/dist/index.js.map +1 -1
- package/package.json +87 -10
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
}
|