-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconversation_backup.py
More file actions
110 lines (88 loc) · 3.27 KB
/
Copy pathconversation_backup.py
File metadata and controls
110 lines (88 loc) · 3.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import os,shutil
def get_all_history(client,conv_id,conv_path,override=False,mirror=False):
err_list = []
exists_ids = []
#Each covertsation need to manage her own data in folder
if not(os.path.isdir(conv_path)):
os.mkdir(conv_path)
else:
if(override):
override_count = 0
else:
exists_ids = get_exists_id_list(conv_path)
#None limit since we want all the history
messages = client.get_messages(conv_id,None)
#User console
print("---------------------------------")
print("Start to get history of "+conv_id)
print("Starting download messages")
for idx,message in enumerate(messages):
print(" Downloading "+str(idx+1)+" from "+ str(len(messages)), end='\r')
#Skip when massage already exists
if (override is False) and (message.id in exists_ids):
continue
#Each message contain it's own data, seperate folder
message_path = conv_path+'/'+str(message.id)+'/'
#If path exists an need to override - re create
if(os.path.isdir(message_path) & override):
shutil.rmtree(message_path)
override_count += 1
elif(os.path.isdir(message_path)):
continue
os.mkdir(message_path)
#Save text from the message
if(message.message):
with open(message_path+'/text.txt','w') as textfile:
try:
textfile.write(message.message)
except:
textfile.close()
err_list.append(err_detail(
"Error saving text from the massage",
message.id,
message.date
))
# Save media attached
if(message.media) is not None:
try:
message.download_media(file=message_path)
except:
err_list.append(err_detail(
"Error saving text from the massage",
message.id,
message.d
))
if(mirror):
try:
message.forward_to('BackupMyDataBot')
except:
continue
clear_empty(message_path)
#User summary
print('\n')
print("---------------------------------")
if(len(err_list)>0):
print("We found %d errors while saving" % len(err_list))
for err in err_list:
print(err)
if(override):
print("%d messages override" % override_count)
print("Downloaded data can be found at: '"+conv_path+"'")
print("Complete!")
#----------------- Sub functions -----------------#
def get_exists_id_list(conv_path):
dir_list = os.listdir(conv_path)
if(len(dir_list)<1):
clear_empty(conv_path)
else:
return dir_list
def clear_empty(path_to_check):
if len(os.listdir(path_to_check) ) == 0:
os.rmdir(path_to_check)
class err_detail:
def __init__(self, details, message_id,message_time):
self.details = details
self.message_id = message_id
self.message_time = message_time
def __str__(self):
return self.details + " in massage "+ str(self.message_id) +", time: "+ str(self.message_time)