1
1
from base64 import b64encode
2
+ import datetime
2
3
import random
3
4
import requests
4
5
from requests .adapters import HTTPAdapter
@@ -19,6 +20,9 @@ def __init__(
19
20
sleepSecondsActionMax : int ,
20
21
sleepSecondsLimitedMin : int ,
21
22
sleepSecondsLimitedMax : int ,
23
+ sleepHour = None ,
24
+ sleepMinute = None ,
25
+ sleepTime = None ,
22
26
maxAction = None ,
23
27
):
24
28
if not isinstance (username , str ):
@@ -32,6 +36,9 @@ def __init__(
32
36
self .__sleepSecondsActionMax = sleepSecondsActionMax
33
37
self .__sleepSecondsLimitedMin = sleepSecondsLimitedMin
34
38
self .__sleepSecondsLimitedMax = sleepSecondsLimitedMax
39
+ self .__sleepHour = sleepHour
40
+ self .__sleepMinute = sleepMinute
41
+ self .__sleepTime = sleepTime
35
42
self .__maxAction = maxAction
36
43
self .__usersToAction = []
37
44
self .__followings = []
@@ -109,6 +116,30 @@ def sleepSecondsLimitedMax(self):
109
116
def sleepSecondsLimitedMax (self , value ):
110
117
self .__sleepSecondsLimitedMax = value
111
118
119
+ @property
120
+ def sleepHour (self ):
121
+ return self .__sleepHour
122
+
123
+ @sleepHour .setter
124
+ def sleepHour (self , value ):
125
+ self .__sleepHour = value
126
+
127
+ @property
128
+ def sleepMinute (self ):
129
+ return self .__sleepMinute
130
+
131
+ @sleepMinute .setter
132
+ def sleepMinute (self , value ):
133
+ self .__sleepMinute = value
134
+
135
+ @property
136
+ def sleepTime (self ):
137
+ return self .__sleepTime
138
+
139
+ @sleepTime .setter
140
+ def sleepTime (self , value ):
141
+ self .__sleepTime = value
142
+
112
143
@property
113
144
def maxAction (self ):
114
145
return self .__maxAction
@@ -212,6 +243,10 @@ def run(self, action):
212
243
if self .maxAction != None :
213
244
self .usersToAction = self .usersToAction [: min (len (self .usersToAction ), int (self .maxAction ))]
214
245
246
+ # Time for the bot to go to sleep
247
+ if self .sleepHour != None and self .sleepMinute != None and self .sleepTime != None :
248
+ sleepTime = nextSleepTime (int (self .__sleepHour ), int (self .sleepMinute ))
249
+
215
250
# Start follow/unfollow
216
251
print (f"\n Starting to { action } .\n " )
217
252
users = tqdm (
@@ -224,6 +259,14 @@ def run(self, action):
224
259
leave = False ,
225
260
)
226
261
for user in users :
262
+
263
+ # Set the bot to sleep at the set time
264
+ if self .sleepHour != None and self .sleepMinute != None and self .sleepTime != None :
265
+ timeNow = datetime .datetime .now ()
266
+ if timeNow .timestamp () > sleepTime .timestamp ():
267
+ sleepTime = nextSleepTime (int (self .__sleepHour ), int (self .__sleepMinute ))
268
+ timeNow += datetime .timedelta (hours = int (self .__sleepTime ))
269
+ sleepUntil (timeNow .hour , random .randint (0 , 59 ))
227
270
228
271
# Follow/unfollow user
229
272
try :
@@ -261,3 +304,35 @@ def follow(self):
261
304
262
305
def unfollow (self ):
263
306
self .run ("unfollow" )
307
+
308
+ def nextSleepTime (hour , minute ):
309
+ timeNow = datetime .datetime .now ()
310
+ future = datetime .datetime (timeNow .year , timeNow .month , timeNow .day , hour , minute )
311
+
312
+ if timeNow .timestamp () > future .timestamp ():
313
+ future += datetime .timedelta (days = 1 )
314
+ return future
315
+
316
+ def sleepUntil (hour , minute ):
317
+ t = datetime .datetime .today ()
318
+ future = datetime .datetime (t .year , t .month , t .day , hour , minute )
319
+
320
+ if t .timestamp () >= future .timestamp ():
321
+ future += datetime .timedelta (days = 1 )
322
+
323
+ print (f'\n Sleeping... Waking up at { future .hour } :{ future .minute } ' )
324
+
325
+ sleepSeconds = int ((future - t ).total_seconds ())
326
+ sleepSecondsObj = list (range (0 , sleepSeconds ))
327
+ sleepSecondsBar = tqdm (
328
+ sleepSecondsObj ,
329
+ dynamic_ncols = True ,
330
+ smoothing = True ,
331
+ bar_format = "[SLEEPING] {n_fmt}s/{total_fmt}s |{l_bar}{bar}|" ,
332
+ position = 2 ,
333
+ leave = False ,
334
+ )
335
+ for second in sleepSecondsBar :
336
+ time .sleep (1 )
337
+
338
+ print (f'\n Waking up...' )
0 commit comments