@@ -157,19 +157,22 @@ export class ClientBase extends EventEmitter {
157
157
const username = this . runtime . getSetting ( "TWITTER_USERNAME" ) ;
158
158
const password = this . runtime . getSetting ( "TWITTER_PASSWORD" ) ;
159
159
const email = this . runtime . getSetting ( "TWITTER_EMAIL" ) ;
160
- const twitter2faSecret = this . runtime . getSetting ( "TWITTER_2FA_SECRET" ) || undefined ;
160
+ const twitter2faSecret =
161
+ this . runtime . getSetting ( "TWITTER_2FA_SECRET" ) || undefined ;
161
162
const cookies = this . runtime . getSetting ( "TWITTER_COOKIES" ) ;
162
163
163
-
164
164
if ( ! username ) {
165
165
throw new Error ( "Twitter username not configured" ) ;
166
166
}
167
167
// Check for Twitter cookies
168
168
if ( cookies ) {
169
+ elizaLogger . debug ( "Using cookies from settings" ) ;
169
170
const cookiesArray = JSON . parse ( cookies ) ;
170
171
171
172
await this . setCookiesFromArray ( cookiesArray ) ;
172
173
} else {
174
+ elizaLogger . debug ( "No cookies found in settings" ) ;
175
+ elizaLogger . debug ( "Checking for cached cookies" ) ;
173
176
const cachedCookies = await this . getCachedCookies ( username ) ;
174
177
if ( cachedCookies ) {
175
178
await this . setCookiesFromArray ( cachedCookies ) ;
@@ -180,7 +183,8 @@ export class ClientBase extends EventEmitter {
180
183
let retries = 5 ; // Optional: Set a retry limit
181
184
while ( retries > 0 ) {
182
185
const cookies = await this . twitterClient . getCookies ( ) ;
183
- if ( await this . twitterClient . isLoggedIn ( ) || ! ! cookies ) {
186
+ if ( ( await this . twitterClient . isLoggedIn ( ) ) && ! ! cookies ) {
187
+ elizaLogger . info ( "Already logged in." ) ;
184
188
await this . cacheCookies ( username , cookies ) ;
185
189
elizaLogger . info ( "Successfully logged in and cookies cached." ) ;
186
190
break ;
@@ -198,10 +202,14 @@ export class ClientBase extends EventEmitter {
198
202
}
199
203
200
204
retries -- ;
201
- elizaLogger . error ( `Failed to login to Twitter. Retrying... (${ retries } attempts left)` ) ;
205
+ elizaLogger . error (
206
+ `Failed to login to Twitter. Retrying... (${ retries } attempts left)`
207
+ ) ;
202
208
203
209
if ( retries === 0 ) {
204
- elizaLogger . error ( "Max retries reached. Exiting login process." ) ;
210
+ elizaLogger . error (
211
+ "Max retries reached. Exiting login process."
212
+ ) ;
205
213
throw new Error ( "Twitter login failed after maximum retries." ) ;
206
214
}
207
215
@@ -243,63 +251,72 @@ export class ClientBase extends EventEmitter {
243
251
244
252
async fetchHomeTimeline ( count : number ) : Promise < Tweet [ ] > {
245
253
elizaLogger . debug ( "fetching home timeline" ) ;
246
- const homeTimeline = await this . twitterClient . fetchHomeTimeline ( count , [ ] ) ;
254
+ const homeTimeline = await this . twitterClient . fetchHomeTimeline (
255
+ count ,
256
+ [ ]
257
+ ) ;
247
258
248
259
elizaLogger . debug ( homeTimeline , { depth : Infinity } ) ;
249
260
const processedTimeline = homeTimeline
250
- . filter ( ( t ) => t . __typename !== "TweetWithVisibilityResults" ) // what's this about?
251
- . map ( ( tweet ) => {
252
- //console.log("tweet is", tweet);
253
- const obj = {
254
- id : tweet . id ,
255
- name :
256
- tweet . name ??
257
- tweet ?. user_results ?. result ?. legacy . name ,
258
- username :
259
- tweet . username ??
260
- tweet . core ?. user_results ?. result ?. legacy . screen_name ,
261
- text : tweet . text ?? tweet . legacy ?. full_text ,
262
- inReplyToStatusId :
263
- tweet . inReplyToStatusId ??
264
- tweet . legacy ?. in_reply_to_status_id_str ??
265
- null ,
266
- timestamp : new Date ( tweet . legacy ?. created_at ) . getTime ( ) / 1000 ,
267
- createdAt : tweet . createdAt ?? tweet . legacy ?. created_at ?? tweet . core ?. user_results ?. result ?. legacy . created_at ,
268
- userId : tweet . userId ?? tweet . legacy ?. user_id_str ,
269
- conversationId :
270
- tweet . conversationId ??
271
- tweet . legacy ?. conversation_id_str ,
272
- permanentUrl : `https://x.com/${ tweet . core ?. user_results ?. result ?. legacy ?. screen_name } /status/${ tweet . rest_id } ` ,
273
- hashtags : tweet . hashtags ?? tweet . legacy ?. entities . hashtags ,
274
- mentions :
275
- tweet . mentions ?? tweet . legacy ?. entities . user_mentions ,
276
- photos :
277
- tweet . photos ??
278
- tweet . legacy ?. entities . media ?. filter (
279
- ( media ) => media . type === "photo"
280
- ) ??
281
- [ ] ,
282
- thread : tweet . thread || [ ] ,
283
- urls : tweet . urls ?? tweet . legacy ?. entities . urls ,
284
- videos :
285
- tweet . videos ??
286
- tweet . legacy ?. entities . media ?. filter (
287
- ( media ) => media . type === "video"
288
- ) ??
289
- [ ] ,
290
- } ;
291
- //console.log("obj is", obj);
292
- return obj ;
293
- } ) ;
261
+ . filter ( ( t ) => t . __typename !== "TweetWithVisibilityResults" ) // what's this about?
262
+ . map ( ( tweet ) => {
263
+ //console.log("tweet is", tweet);
264
+ const obj = {
265
+ id : tweet . id ,
266
+ name :
267
+ tweet . name ?? tweet ?. user_results ?. result ?. legacy . name ,
268
+ username :
269
+ tweet . username ??
270
+ tweet . core ?. user_results ?. result ?. legacy . screen_name ,
271
+ text : tweet . text ?? tweet . legacy ?. full_text ,
272
+ inReplyToStatusId :
273
+ tweet . inReplyToStatusId ??
274
+ tweet . legacy ?. in_reply_to_status_id_str ??
275
+ null ,
276
+ timestamp :
277
+ new Date ( tweet . legacy ?. created_at ) . getTime ( ) / 1000 ,
278
+ createdAt :
279
+ tweet . createdAt ??
280
+ tweet . legacy ?. created_at ??
281
+ tweet . core ?. user_results ?. result ?. legacy . created_at ,
282
+ userId : tweet . userId ?? tweet . legacy ?. user_id_str ,
283
+ conversationId :
284
+ tweet . conversationId ??
285
+ tweet . legacy ?. conversation_id_str ,
286
+ permanentUrl : `https://x.com/${ tweet . core ?. user_results ?. result ?. legacy ?. screen_name } /status/${ tweet . rest_id } ` ,
287
+ hashtags : tweet . hashtags ?? tweet . legacy ?. entities . hashtags ,
288
+ mentions :
289
+ tweet . mentions ?? tweet . legacy ?. entities . user_mentions ,
290
+ photos :
291
+ tweet . photos ??
292
+ tweet . legacy ?. entities . media ?. filter (
293
+ ( media ) => media . type === "photo"
294
+ ) ??
295
+ [ ] ,
296
+ thread : tweet . thread || [ ] ,
297
+ urls : tweet . urls ?? tweet . legacy ?. entities . urls ,
298
+ videos :
299
+ tweet . videos ??
300
+ tweet . legacy ?. entities . media ?. filter (
301
+ ( media ) => media . type === "video"
302
+ ) ??
303
+ [ ] ,
304
+ } ;
305
+ //console.log("obj is", obj);
306
+ return obj ;
307
+ } ) ;
294
308
//elizaLogger.debug("process homeTimeline", processedTimeline);
295
309
return processedTimeline ;
296
310
}
297
311
298
312
async fetchTimelineForActions ( count : number ) : Promise < Tweet [ ] > {
299
313
elizaLogger . debug ( "fetching timeline for actions" ) ;
300
- const homeTimeline = await this . twitterClient . fetchHomeTimeline ( count , [ ] ) ;
314
+ const homeTimeline = await this . twitterClient . fetchHomeTimeline (
315
+ count ,
316
+ [ ]
317
+ ) ;
301
318
302
- return homeTimeline . map ( tweet => ( {
319
+ return homeTimeline . map ( ( tweet ) => ( {
303
320
id : tweet . rest_id ,
304
321
name : tweet . core ?. user_results ?. result ?. legacy ?. name ,
305
322
username : tweet . core ?. user_results ?. result ?. legacy ?. screen_name ,
@@ -311,10 +328,16 @@ export class ClientBase extends EventEmitter {
311
328
permanentUrl : `https://twitter.com/${ tweet . core ?. user_results ?. result ?. legacy ?. screen_name } /status/${ tweet . rest_id } ` ,
312
329
hashtags : tweet . legacy ?. entities ?. hashtags || [ ] ,
313
330
mentions : tweet . legacy ?. entities ?. user_mentions || [ ] ,
314
- photos : tweet . legacy ?. entities ?. media ?. filter ( media => media . type === "photo" ) || [ ] ,
331
+ photos :
332
+ tweet . legacy ?. entities ?. media ?. filter (
333
+ ( media ) => media . type === "photo"
334
+ ) || [ ] ,
315
335
thread : tweet . thread || [ ] ,
316
336
urls : tweet . legacy ?. entities ?. urls || [ ] ,
317
- videos : tweet . legacy ?. entities ?. media ?. filter ( media => media . type === "video" ) || [ ]
337
+ videos :
338
+ tweet . legacy ?. entities ?. media ?. filter (
339
+ ( media ) => media . type === "video"
340
+ ) || [ ] ,
318
341
} ) ) ;
319
342
}
320
343
0 commit comments