@@ -20,7 +20,7 @@ export class TwitterService {
|
||||
void this.initClient(apiKey, apiSecret, accessToken, accessSecret);
|
||||
} else {
|
||||
this.logger.warn(
|
||||
"⚠️ Twitter API keys not configured. Set TWITTER_API_KEY, TWITTER_API_SECRET, TWITTER_ACCESS_TOKEN, TWITTER_ACCESS_SECRET",
|
||||
"⚠️ X/Twitter API keys not configured. Set TWITTER_API_KEY, TWITTER_API_SECRET, TWITTER_ACCESS_TOKEN, TWITTER_ACCESS_SECRET",
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -64,10 +64,10 @@ export class TwitterService {
|
||||
}
|
||||
|
||||
try {
|
||||
// Step 1: Upload media via v1.1
|
||||
// Step 1: Upload image media via the X media upload endpoint.
|
||||
const mediaData = fs.readFileSync(imagePath);
|
||||
const mediaId = await this.client.v1.uploadMedia(mediaData, {
|
||||
mimeType: "image/png",
|
||||
mimeType: this.getMimeType(imagePath),
|
||||
});
|
||||
|
||||
// Step 2: Create tweet via v2
|
||||
@@ -84,4 +84,12 @@ export class TwitterService {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private getMimeType(imagePath: string): string {
|
||||
const ext = imagePath.toLowerCase().split(".").pop();
|
||||
if (ext === "jpg" || ext === "jpeg") return "image/jpeg";
|
||||
if (ext === "webp") return "image/webp";
|
||||
if (ext === "png") return "image/png";
|
||||
return "image/jpeg";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user