sticker-convert 2.13.3.0__py3-none-any.whl → 2.14.0.0__py3-none-any.whl
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.
- sticker_convert/cli.py +26 -10
- sticker_convert/converter.py +4 -4
- sticker_convert/gui.py +5 -0
- sticker_convert/gui_components/windows/kakao_get_auth_window.py +212 -65
- sticker_convert/job_option.py +1 -0
- sticker_convert/resources/NotoColorEmoji.ttf +0 -0
- sticker_convert/resources/help.json +8 -6
- sticker_convert/utils/auth/{get_kakao_auth.py → get_kakao_auth_android_login.py} +1 -1
- sticker_convert/utils/auth/get_kakao_auth_desktop_login.py +282 -0
- sticker_convert/utils/auth/{get_kakao_desktop_auth.py → get_kakao_auth_desktop_memdump.py} +13 -11
- sticker_convert/utils/auth/telegram_api.py +6 -5
- sticker_convert/version.py +1 -1
- {sticker_convert-2.13.3.0.dist-info → sticker_convert-2.14.0.0.dist-info}/METADATA +39 -40
- {sticker_convert-2.13.3.0.dist-info → sticker_convert-2.14.0.0.dist-info}/RECORD +18 -17
- {sticker_convert-2.13.3.0.dist-info → sticker_convert-2.14.0.0.dist-info}/WHEEL +0 -0
- {sticker_convert-2.13.3.0.dist-info → sticker_convert-2.14.0.0.dist-info}/entry_points.txt +0 -0
- {sticker_convert-2.13.3.0.dist-info → sticker_convert-2.14.0.0.dist-info}/licenses/LICENSE +0 -0
- {sticker_convert-2.13.3.0.dist-info → sticker_convert-2.14.0.0.dist-info}/top_level.txt +0 -0
sticker_convert/cli.py
CHANGED
@@ -15,8 +15,9 @@ from sticker_convert.definitions import CONFIG_DIR, DEFAULT_DIR
|
|
15
15
|
from sticker_convert.job import Job
|
16
16
|
from sticker_convert.job_option import CompOption, CredOption, InputOption, OutputOption
|
17
17
|
from sticker_convert.utils.auth.get_discord_auth import GetDiscordAuth
|
18
|
-
from sticker_convert.utils.auth.
|
19
|
-
from sticker_convert.utils.auth.
|
18
|
+
from sticker_convert.utils.auth.get_kakao_auth_android_login import GetKakaoAuthAndroidLogin
|
19
|
+
from sticker_convert.utils.auth.get_kakao_auth_desktop_login import GetKakaoAuthDesktopLogin
|
20
|
+
from sticker_convert.utils.auth.get_kakao_auth_desktop_memdump import GetKakaoAuthDesktopMemdump
|
20
21
|
from sticker_convert.utils.auth.get_line_auth import GetLineAuth
|
21
22
|
from sticker_convert.utils.auth.get_signal_auth import GetSignalAuth
|
22
23
|
from sticker_convert.utils.auth.get_viber_auth import GetViberAuth
|
@@ -176,8 +177,9 @@ class CLI:
|
|
176
177
|
flags_cred_bool = (
|
177
178
|
"signal_get_auth",
|
178
179
|
"telethon_setup",
|
179
|
-
"
|
180
|
-
"
|
180
|
+
"kakao_get_auth_desktop_memdump",
|
181
|
+
"kakao_get_auth_desktop_login",
|
182
|
+
"kakao_get_auth_android_login",
|
181
183
|
"line_get_auth",
|
182
184
|
"discord_get_auth",
|
183
185
|
"save_cred",
|
@@ -511,28 +513,42 @@ class CLI:
|
|
511
513
|
else creds.get("discord", {}).get("token"),
|
512
514
|
)
|
513
515
|
|
514
|
-
if args.
|
515
|
-
|
516
|
+
if args.kakao_get_auth_android_login:
|
517
|
+
get_kakao_auth_android_login = GetKakaoAuthAndroidLogin(
|
516
518
|
opt_cred=opt_cred,
|
517
519
|
cb_msg=self.cb.msg,
|
518
520
|
cb_msg_block=self.cb.msg_block,
|
519
521
|
cb_ask_str=self.cb.ask_str,
|
520
522
|
)
|
521
|
-
auth_token =
|
523
|
+
auth_token = get_kakao_auth_android_login.get_cred()
|
522
524
|
|
523
525
|
if auth_token:
|
524
526
|
opt_cred.kakao_auth_token = auth_token
|
525
527
|
|
526
528
|
self.cb.msg(f"Got auth_token successfully: {auth_token}")
|
527
529
|
|
528
|
-
if args.
|
529
|
-
|
530
|
+
if args.kakao_get_auth_desktop_memdump:
|
531
|
+
get_kakao_auth_desktop_memdump = GetKakaoAuthDesktopMemdump(
|
530
532
|
cb_ask_str=self.cb.ask_str,
|
531
533
|
)
|
532
534
|
kakao_bin_path = None
|
533
535
|
if args.kakao_bin_path:
|
534
536
|
kakao_bin_path = args.kakao_bin_path
|
535
|
-
auth_token, msg =
|
537
|
+
auth_token, msg = get_kakao_auth_desktop_memdump.get_cred(kakao_bin_path)
|
538
|
+
|
539
|
+
if auth_token:
|
540
|
+
opt_cred.kakao_auth_token = auth_token
|
541
|
+
|
542
|
+
self.cb.msg(msg)
|
543
|
+
|
544
|
+
if args.kakao_get_auth_desktop_login:
|
545
|
+
get_kakao_auth_desktop_login = GetKakaoAuthDesktopLogin(
|
546
|
+
opt_cred=opt_cred,
|
547
|
+
cb_msg=self.cb.msg,
|
548
|
+
cb_msg_block=self.cb.msg_block,
|
549
|
+
cb_ask_str=self.cb.ask_str,
|
550
|
+
)
|
551
|
+
auth_token, msg = get_kakao_auth_desktop_login.get_cred()
|
536
552
|
|
537
553
|
if auth_token:
|
538
554
|
opt_cred.kakao_auth_token = auth_token
|
sticker_convert/converter.py
CHANGED
@@ -111,10 +111,10 @@ def yuva_to_rgba(frame: "VideoFrame") -> "np.ndarray[Any, Any]":
|
|
111
111
|
u = u.repeat(2, axis=0).repeat(2, axis=1)
|
112
112
|
v = v.repeat(2, axis=0).repeat(2, axis=1)
|
113
113
|
|
114
|
-
y = y.reshape((y.shape[0], y.shape[1], 1))
|
115
|
-
u = u.reshape((u.shape[0], u.shape[1], 1))
|
116
|
-
v = v.reshape((v.shape[0], v.shape[1], 1))
|
117
|
-
a = a.reshape((a.shape[0], a.shape[1], 1))
|
114
|
+
y = y.reshape((y.shape[0], y.shape[1], 1)) # type: ignore
|
115
|
+
u = u.reshape((u.shape[0], u.shape[1], 1)) # type: ignore
|
116
|
+
v = v.reshape((v.shape[0], v.shape[1], 1)) # type: ignore
|
117
|
+
a = a.reshape((a.shape[0], a.shape[1], 1)) # type: ignore
|
118
118
|
|
119
119
|
yuv_array = np.concatenate((y, u, v), axis=2)
|
120
120
|
|
sticker_convert/gui.py
CHANGED
@@ -163,6 +163,7 @@ class GUI(Window):
|
|
163
163
|
self.kakao_password_var = StringVar(self)
|
164
164
|
self.kakao_country_code_var = StringVar(self)
|
165
165
|
self.kakao_phone_number_var = StringVar(self)
|
166
|
+
self.kakao_device_uuid_var = StringVar(self)
|
166
167
|
self.kakao_bin_path_var = StringVar(self)
|
167
168
|
self.line_cookies_var = StringVar(self)
|
168
169
|
self.viber_auth_var = StringVar(self)
|
@@ -427,6 +428,9 @@ class GUI(Window):
|
|
427
428
|
self.kakao_phone_number_var.set(
|
428
429
|
self.creds.get("kakao", {}).get("phone_number", "")
|
429
430
|
)
|
431
|
+
self.kakao_device_uuid_var.set(
|
432
|
+
self.creds.get("kakao", {}).get("device_uuid", "")
|
433
|
+
)
|
430
434
|
self.line_cookies_var.set(self.creds.get("line", {}).get("cookies", ""))
|
431
435
|
self.viber_auth_var.set(self.creds.get("viber", {}).get("auth", ""))
|
432
436
|
self.discord_token_var.set(self.creds.get("discord", {}).get("token", ""))
|
@@ -599,6 +603,7 @@ class GUI(Window):
|
|
599
603
|
kakao_password=self.kakao_password_var.get(),
|
600
604
|
kakao_country_code=self.kakao_country_code_var.get(),
|
601
605
|
kakao_phone_number=self.kakao_phone_number_var.get(),
|
606
|
+
kakao_device_uuid=self.kakao_device_uuid_var.get(),
|
602
607
|
line_cookies=self.line_cookies_var.get(),
|
603
608
|
viber_auth=self.viber_auth_var.get(),
|
604
609
|
discord_token=self.discord_token_var.get(),
|
@@ -9,8 +9,9 @@ from ttkbootstrap import Button, Entry, Frame, Label, LabelFrame # type: ignore
|
|
9
9
|
from sticker_convert.gui_components.frames.right_clicker import RightClicker
|
10
10
|
from sticker_convert.gui_components.gui_utils import GUIUtils
|
11
11
|
from sticker_convert.gui_components.windows.base_window import BaseWindow
|
12
|
-
from sticker_convert.utils.auth.
|
13
|
-
from sticker_convert.utils.auth.
|
12
|
+
from sticker_convert.utils.auth.get_kakao_auth_android_login import GetKakaoAuthAndroidLogin
|
13
|
+
from sticker_convert.utils.auth.get_kakao_auth_desktop_login import GetKakaoAuthDesktopLogin
|
14
|
+
from sticker_convert.utils.auth.get_kakao_auth_desktop_memdump import GetKakaoAuthDesktopMemdump
|
14
15
|
|
15
16
|
|
16
17
|
class KakaoGetAuthWindow(BaseWindow):
|
@@ -22,72 +23,76 @@ class KakaoGetAuthWindow(BaseWindow):
|
|
22
23
|
self.cb_msg_block_kakao = partial(self.gui.cb_msg_block, parent=self)
|
23
24
|
self.cb_ask_str_kakao = partial(self.gui.cb_ask_str, parent=self)
|
24
25
|
|
25
|
-
self.
|
26
|
-
self.scrollable_frame, text="Method 1:
|
26
|
+
self.frame_desktop_memdump = LabelFrame(
|
27
|
+
self.scrollable_frame, text="Method 1: KakaoTalk Desktop memdump"
|
27
28
|
)
|
28
|
-
self.
|
29
|
-
self.scrollable_frame, text="Method 2: Simulate login"
|
29
|
+
self.frame_desktop_login = LabelFrame(
|
30
|
+
self.scrollable_frame, text="Method 2: Simulate Desktop login"
|
31
|
+
)
|
32
|
+
self.frame_android_login = LabelFrame(
|
33
|
+
self.scrollable_frame, text="Method 3: Simulate Android login"
|
30
34
|
)
|
31
35
|
self.frame_login_btn = Frame(self.scrollable_frame)
|
32
36
|
|
33
|
-
self.
|
34
|
-
self.
|
37
|
+
self.frame_desktop_memdump.grid(column=0, row=0, sticky="news", padx=3, pady=3)
|
38
|
+
self.frame_desktop_login.grid(column=0, row=1, sticky="news", padx=3, pady=3)
|
39
|
+
self.frame_android_login.grid(column=0, row=2, sticky="news", padx=3, pady=3)
|
35
40
|
|
36
41
|
# Method 1 frame
|
37
42
|
self.explanation1_1_lbl = Label(
|
38
|
-
self.
|
43
|
+
self.frame_desktop_memdump,
|
39
44
|
text="This will get Kakao auth_token from Kakao Desktop",
|
40
45
|
justify="left",
|
41
46
|
anchor="w",
|
42
47
|
)
|
43
48
|
self.explanation1_2_lbl = Label(
|
44
|
-
self.
|
49
|
+
self.frame_desktop_memdump,
|
45
50
|
text="Download Kakao Desktop, login and press 'Get auth_token'",
|
46
51
|
justify="left",
|
47
52
|
anchor="w",
|
48
53
|
)
|
49
54
|
self.explanation1_3_lbl = Label(
|
50
|
-
self.
|
55
|
+
self.frame_desktop_memdump,
|
51
56
|
text="This can take about a minute.",
|
52
57
|
justify="left",
|
53
58
|
anchor="w",
|
54
59
|
)
|
55
60
|
if platform.system() != "Darwin":
|
56
61
|
self.explanation1_4_lbl = Label(
|
57
|
-
self.
|
62
|
+
self.frame_desktop_memdump,
|
58
63
|
text="Note: This will download ProcDump and read memory of KakaoTalk Desktop",
|
59
64
|
justify="left",
|
60
65
|
anchor="w",
|
61
66
|
)
|
62
67
|
else:
|
63
68
|
self.explanation1_4_lbl = Label(
|
64
|
-
self.
|
69
|
+
self.frame_desktop_memdump,
|
65
70
|
text="Note: This will read memory of KakaoTalk Desktop",
|
66
71
|
justify="left",
|
67
72
|
anchor="w",
|
68
73
|
)
|
69
74
|
self.kakao_bin_path_lbl = Label(
|
70
|
-
self.
|
75
|
+
self.frame_desktop_memdump,
|
71
76
|
text="Kakao app path (Optional):",
|
72
77
|
justify="left",
|
73
78
|
anchor="w",
|
74
79
|
)
|
75
80
|
self.kakao_bin_path_entry = Entry(
|
76
|
-
self.
|
81
|
+
self.frame_desktop_memdump,
|
77
82
|
textvariable=self.gui.kakao_bin_path_var,
|
78
83
|
width=30,
|
79
84
|
)
|
80
85
|
self.launch_desktop_btn = Button(
|
81
|
-
self.
|
86
|
+
self.frame_desktop_memdump,
|
82
87
|
text="Launch Desktop app",
|
83
88
|
command=self.cb_launch_desktop,
|
84
89
|
width=24,
|
85
90
|
bootstyle="secondary", # type: ignore
|
86
91
|
)
|
87
92
|
self.get_auth_desktop_btn = Button(
|
88
|
-
self.
|
93
|
+
self.frame_desktop_memdump,
|
89
94
|
text="Get auth_token",
|
90
|
-
command=self.
|
95
|
+
command=self.cb_get_auth_desktop_memdump,
|
91
96
|
width=24,
|
92
97
|
)
|
93
98
|
|
@@ -110,26 +115,143 @@ class KakaoGetAuthWindow(BaseWindow):
|
|
110
115
|
|
111
116
|
# Method 2 frame
|
112
117
|
self.explanation2_1_lbl = Label(
|
113
|
-
self.
|
114
|
-
text="This will simulate login to
|
118
|
+
self.frame_desktop_login,
|
119
|
+
text="This will simulate login to Desktop Kakao app",
|
115
120
|
justify="left",
|
116
121
|
anchor="w",
|
117
122
|
)
|
118
123
|
self.explanation2_2_lbl = Label(
|
119
|
-
self.
|
120
|
-
text="You
|
124
|
+
self.frame_desktop_login,
|
125
|
+
text="You may receive verification code from Kakao app on phone",
|
121
126
|
justify="left",
|
122
127
|
anchor="w",
|
123
128
|
)
|
124
129
|
self.explanation2_3_lbl = Label(
|
125
|
-
self.
|
130
|
+
self.frame_desktop_login,
|
131
|
+
text="It is not necessary to download Desktop Kakao app",
|
132
|
+
justify="left",
|
133
|
+
anchor="w",
|
134
|
+
)
|
135
|
+
|
136
|
+
self.kakao_username_help_btn2 = Button(
|
137
|
+
self.frame_desktop_login,
|
138
|
+
text="?",
|
139
|
+
width=1,
|
140
|
+
command=lambda: self.cb_msg_block_kakao(
|
141
|
+
self.gui.help["cred"]["kakao_username"]
|
142
|
+
),
|
143
|
+
bootstyle="secondary", # type: ignore
|
144
|
+
)
|
145
|
+
self.kakao_username_lbl2 = Label(
|
146
|
+
self.frame_desktop_login,
|
147
|
+
text="Username",
|
148
|
+
width=18,
|
149
|
+
justify="left",
|
150
|
+
anchor="w",
|
151
|
+
)
|
152
|
+
self.kakao_username_entry2 = Entry(
|
153
|
+
self.frame_desktop_login,
|
154
|
+
textvariable=self.gui.kakao_username_var,
|
155
|
+
width=30,
|
156
|
+
)
|
157
|
+
self.kakao_username_entry2.bind("<Button-3><ButtonRelease-3>", RightClicker)
|
158
|
+
|
159
|
+
self.kakao_password_help_btn2 = Button(
|
160
|
+
self.frame_desktop_login,
|
161
|
+
text="?",
|
162
|
+
width=1,
|
163
|
+
command=lambda: self.cb_msg_block_kakao(
|
164
|
+
self.gui.help["cred"]["kakao_password"]
|
165
|
+
),
|
166
|
+
bootstyle="secondary", # type: ignore
|
167
|
+
)
|
168
|
+
self.kakao_password_lbl2 = Label(
|
169
|
+
self.frame_desktop_login, text="Password", justify="left", anchor="w"
|
170
|
+
)
|
171
|
+
self.kakao_password_entry2 = Entry(
|
172
|
+
self.frame_desktop_login,
|
173
|
+
textvariable=self.gui.kakao_password_var,
|
174
|
+
width=30,
|
175
|
+
)
|
176
|
+
self.kakao_password_entry2.bind("<Button-3><ButtonRelease-3>", RightClicker)
|
177
|
+
|
178
|
+
self.kakao_device_uuid_help_btn = Button(
|
179
|
+
self.frame_desktop_login,
|
180
|
+
text="?",
|
181
|
+
width=1,
|
182
|
+
command=lambda: self.cb_msg_block_kakao(
|
183
|
+
self.gui.help["cred"]["kakao_device_uuid"]
|
184
|
+
),
|
185
|
+
bootstyle="secondary", # type: ignore
|
186
|
+
)
|
187
|
+
self.kakao_device_uuid_lbl = Label(
|
188
|
+
self.frame_desktop_login,
|
189
|
+
text="Device UUID (Optional)",
|
190
|
+
justify="left",
|
191
|
+
anchor="w",
|
192
|
+
)
|
193
|
+
self.kakao_device_uuid_entry = Entry(
|
194
|
+
self.frame_desktop_login,
|
195
|
+
textvariable=self.gui.kakao_device_uuid_var,
|
196
|
+
width=30,
|
197
|
+
)
|
198
|
+
self.kakao_device_uuid_entry.bind("<Button-3><ButtonRelease-3>", RightClicker)
|
199
|
+
|
200
|
+
self.login_btn2 = Button(
|
201
|
+
self.frame_desktop_login,
|
202
|
+
text="Login and get auth_token",
|
203
|
+
command=self.cb_get_auth_desktop_login,
|
204
|
+
width=24,
|
205
|
+
)
|
206
|
+
|
207
|
+
self.explanation2_1_lbl.grid(
|
208
|
+
column=0, row=0, columnspan=3, sticky="w", padx=3, pady=3
|
209
|
+
)
|
210
|
+
self.explanation2_2_lbl.grid(
|
211
|
+
column=0, row=1, columnspan=3, sticky="w", padx=3, pady=3
|
212
|
+
)
|
213
|
+
self.explanation2_3_lbl.grid(
|
214
|
+
column=0, row=2, columnspan=3, sticky="w", padx=3, pady=3
|
215
|
+
)
|
216
|
+
|
217
|
+
self.kakao_username_help_btn2.grid(column=0, row=3, sticky="w", padx=3, pady=3)
|
218
|
+
self.kakao_username_lbl2.grid(column=1, row=3, sticky="w", padx=3, pady=3)
|
219
|
+
self.kakao_username_entry2.grid(column=2, row=3, sticky="w", padx=3, pady=3)
|
220
|
+
|
221
|
+
self.kakao_password_help_btn2.grid(column=0, row=4, sticky="w", padx=3, pady=3)
|
222
|
+
self.kakao_password_lbl2.grid(column=1, row=4, sticky="w", padx=3, pady=3)
|
223
|
+
self.kakao_password_entry2.grid(column=2, row=4, sticky="w", padx=3, pady=3)
|
224
|
+
|
225
|
+
self.kakao_device_uuid_help_btn.grid(
|
226
|
+
column=0, row=5, sticky="w", padx=3, pady=3
|
227
|
+
)
|
228
|
+
self.kakao_device_uuid_lbl.grid(column=1, row=5, sticky="w", padx=3, pady=3)
|
229
|
+
self.kakao_device_uuid_entry.grid(column=2, row=5, sticky="w", padx=3, pady=3)
|
230
|
+
|
231
|
+
self.login_btn2.grid(column=0, row=6, columnspan=3, padx=3, pady=3)
|
232
|
+
|
233
|
+
# Method 3 frame
|
234
|
+
self.explanation3_1_lbl = Label(
|
235
|
+
self.frame_android_login,
|
236
|
+
text="This will simulate login to Android Kakao app",
|
237
|
+
justify="left",
|
238
|
+
anchor="w",
|
239
|
+
)
|
240
|
+
self.explanation3_2_lbl = Label(
|
241
|
+
self.frame_android_login,
|
242
|
+
text="You will send / receive verification code via SMS",
|
243
|
+
justify="left",
|
244
|
+
anchor="w",
|
245
|
+
)
|
246
|
+
self.explanation3_3_lbl = Label(
|
247
|
+
self.frame_android_login,
|
126
248
|
text="You will be logged out of existing device",
|
127
249
|
justify="left",
|
128
250
|
anchor="w",
|
129
251
|
)
|
130
252
|
|
131
|
-
self.
|
132
|
-
self.
|
253
|
+
self.kakao_username_help_btn3 = Button(
|
254
|
+
self.frame_android_login,
|
133
255
|
text="?",
|
134
256
|
width=1,
|
135
257
|
command=lambda: self.cb_msg_block_kakao(
|
@@ -137,22 +259,22 @@ class KakaoGetAuthWindow(BaseWindow):
|
|
137
259
|
),
|
138
260
|
bootstyle="secondary", # type: ignore
|
139
261
|
)
|
140
|
-
self.
|
141
|
-
self.
|
262
|
+
self.kakao_username_lbl3 = Label(
|
263
|
+
self.frame_android_login,
|
142
264
|
text="Username",
|
143
265
|
width=18,
|
144
266
|
justify="left",
|
145
267
|
anchor="w",
|
146
268
|
)
|
147
|
-
self.
|
148
|
-
self.
|
269
|
+
self.kakao_username_entry3 = Entry(
|
270
|
+
self.frame_android_login,
|
149
271
|
textvariable=self.gui.kakao_username_var,
|
150
272
|
width=30,
|
151
273
|
)
|
152
|
-
self.
|
274
|
+
self.kakao_username_entry3.bind("<Button-3><ButtonRelease-3>", RightClicker)
|
153
275
|
|
154
|
-
self.
|
155
|
-
self.
|
276
|
+
self.kakao_password_help_btn3 = Button(
|
277
|
+
self.frame_android_login,
|
156
278
|
text="?",
|
157
279
|
width=1,
|
158
280
|
command=lambda: self.cb_msg_block_kakao(
|
@@ -160,18 +282,18 @@ class KakaoGetAuthWindow(BaseWindow):
|
|
160
282
|
),
|
161
283
|
bootstyle="secondary", # type: ignore
|
162
284
|
)
|
163
|
-
self.
|
164
|
-
self.
|
285
|
+
self.kakao_password_lbl3 = Label(
|
286
|
+
self.frame_android_login, text="Password", justify="left", anchor="w"
|
165
287
|
)
|
166
|
-
self.
|
167
|
-
self.
|
288
|
+
self.kakao_password_entry3 = Entry(
|
289
|
+
self.frame_android_login,
|
168
290
|
textvariable=self.gui.kakao_password_var,
|
169
291
|
width=30,
|
170
292
|
)
|
171
|
-
self.
|
293
|
+
self.kakao_password_entry3.bind("<Button-3><ButtonRelease-3>", RightClicker)
|
172
294
|
|
173
295
|
self.kakao_country_code_help_btn = Button(
|
174
|
-
self.
|
296
|
+
self.frame_android_login,
|
175
297
|
text="?",
|
176
298
|
width=1,
|
177
299
|
command=lambda: self.cb_msg_block_kakao(
|
@@ -180,17 +302,17 @@ class KakaoGetAuthWindow(BaseWindow):
|
|
180
302
|
bootstyle="secondary", # type: ignore
|
181
303
|
)
|
182
304
|
self.kakao_country_code_lbl = Label(
|
183
|
-
self.
|
305
|
+
self.frame_android_login, text="Country code", justify="left", anchor="w"
|
184
306
|
)
|
185
307
|
self.kakao_country_code_entry = Entry(
|
186
|
-
self.
|
308
|
+
self.frame_android_login,
|
187
309
|
textvariable=self.gui.kakao_country_code_var,
|
188
310
|
width=30,
|
189
311
|
)
|
190
312
|
self.kakao_country_code_entry.bind("<Button-3><ButtonRelease-3>", RightClicker)
|
191
313
|
|
192
314
|
self.kakao_phone_number_help_btn = Button(
|
193
|
-
self.
|
315
|
+
self.frame_android_login,
|
194
316
|
text="?",
|
195
317
|
width=1,
|
196
318
|
command=lambda: self.cb_msg_block_kakao(
|
@@ -199,39 +321,39 @@ class KakaoGetAuthWindow(BaseWindow):
|
|
199
321
|
bootstyle="secondary", # type: ignore
|
200
322
|
)
|
201
323
|
self.kakao_phone_number_lbl = Label(
|
202
|
-
self.
|
324
|
+
self.frame_android_login, text="Phone number", justify="left", anchor="w"
|
203
325
|
)
|
204
326
|
self.kakao_phone_number_entry = Entry(
|
205
|
-
self.
|
327
|
+
self.frame_android_login,
|
206
328
|
textvariable=self.gui.kakao_phone_number_var,
|
207
329
|
width=30,
|
208
330
|
)
|
209
331
|
self.kakao_phone_number_entry.bind("<Button-3><ButtonRelease-3>", RightClicker)
|
210
332
|
|
211
|
-
self.
|
212
|
-
self.
|
333
|
+
self.login_btn3 = Button(
|
334
|
+
self.frame_android_login,
|
213
335
|
text="Login and get auth_token",
|
214
|
-
command=self.
|
336
|
+
command=self.cb_get_auth_android_login,
|
215
337
|
width=24,
|
216
338
|
)
|
217
339
|
|
218
|
-
self.
|
340
|
+
self.explanation3_1_lbl.grid(
|
219
341
|
column=0, row=0, columnspan=3, sticky="w", padx=3, pady=3
|
220
342
|
)
|
221
|
-
self.
|
343
|
+
self.explanation3_2_lbl.grid(
|
222
344
|
column=0, row=1, columnspan=3, sticky="w", padx=3, pady=3
|
223
345
|
)
|
224
|
-
self.
|
346
|
+
self.explanation3_3_lbl.grid(
|
225
347
|
column=0, row=2, columnspan=3, sticky="w", padx=3, pady=3
|
226
348
|
)
|
227
349
|
|
228
|
-
self.
|
229
|
-
self.
|
230
|
-
self.
|
350
|
+
self.kakao_username_help_btn3.grid(column=0, row=3, sticky="w", padx=3, pady=3)
|
351
|
+
self.kakao_username_lbl3.grid(column=1, row=3, sticky="w", padx=3, pady=3)
|
352
|
+
self.kakao_username_entry3.grid(column=2, row=3, sticky="w", padx=3, pady=3)
|
231
353
|
|
232
|
-
self.
|
233
|
-
self.
|
234
|
-
self.
|
354
|
+
self.kakao_password_help_btn3.grid(column=0, row=4, sticky="w", padx=3, pady=3)
|
355
|
+
self.kakao_password_lbl3.grid(column=1, row=4, sticky="w", padx=3, pady=3)
|
356
|
+
self.kakao_password_entry3.grid(column=2, row=4, sticky="w", padx=3, pady=3)
|
235
357
|
|
236
358
|
self.kakao_country_code_help_btn.grid(
|
237
359
|
column=0, row=5, sticky="w", padx=3, pady=3
|
@@ -244,16 +366,41 @@ class KakaoGetAuthWindow(BaseWindow):
|
|
244
366
|
)
|
245
367
|
self.kakao_phone_number_lbl.grid(column=1, row=6, sticky="w", padx=3, pady=3)
|
246
368
|
self.kakao_phone_number_entry.grid(column=2, row=6, sticky="w", padx=3, pady=3)
|
247
|
-
self.
|
369
|
+
self.login_btn3.grid(column=0, row=7, columnspan=3, padx=3, pady=3)
|
248
370
|
|
249
371
|
GUIUtils.finalize_window(self)
|
250
372
|
|
251
|
-
def
|
252
|
-
Thread(target=self.
|
373
|
+
def cb_get_auth_android_login(self) -> None:
|
374
|
+
Thread(target=self.cb_get_auth_android_login_thread, daemon=True).start()
|
375
|
+
|
376
|
+
def cb_get_auth_desktop_login_thread(self, *_: Any) -> None:
|
377
|
+
self.gui.save_creds()
|
378
|
+
m = GetKakaoAuthDesktopLogin(
|
379
|
+
opt_cred=self.gui.get_opt_cred(),
|
380
|
+
cb_msg=self.gui.cb_msg,
|
381
|
+
cb_msg_block=self.cb_msg_block_kakao,
|
382
|
+
cb_ask_str=self.cb_ask_str_kakao,
|
383
|
+
)
|
384
|
+
|
385
|
+
auth_token, msg = m.get_cred()
|
386
|
+
|
387
|
+
if auth_token:
|
388
|
+
if not self.gui.creds.get("kakao"):
|
389
|
+
self.gui.creds["kakao"] = {}
|
390
|
+
self.gui.creds["kakao"]["auth_token"] = auth_token
|
391
|
+
self.gui.kakao_auth_token_var.set(auth_token)
|
392
|
+
|
393
|
+
self.gui.save_creds()
|
394
|
+
self.gui.highlight_fields()
|
395
|
+
|
396
|
+
self.cb_msg_block_kakao(msg)
|
397
|
+
|
398
|
+
def cb_get_auth_desktop_login(self) -> None:
|
399
|
+
Thread(target=self.cb_get_auth_desktop_login_thread, daemon=True).start()
|
253
400
|
|
254
|
-
def
|
401
|
+
def cb_get_auth_android_login_thread(self, *_: Any) -> None:
|
255
402
|
self.gui.save_creds()
|
256
|
-
m =
|
403
|
+
m = GetKakaoAuthAndroidLogin(
|
257
404
|
opt_cred=self.gui.get_opt_cred(),
|
258
405
|
cb_msg=self.gui.cb_msg,
|
259
406
|
cb_msg_block=self.cb_msg_block_kakao,
|
@@ -275,7 +422,7 @@ class KakaoGetAuthWindow(BaseWindow):
|
|
275
422
|
self.cb_msg_block_kakao("Failed to get auth_token")
|
276
423
|
|
277
424
|
def cb_launch_desktop(self) -> None:
|
278
|
-
m =
|
425
|
+
m = GetKakaoAuthDesktopMemdump(
|
279
426
|
cb_ask_str=self.cb_ask_str_kakao,
|
280
427
|
)
|
281
428
|
if self.gui.kakao_bin_path_var.get() != "":
|
@@ -290,14 +437,14 @@ class KakaoGetAuthWindow(BaseWindow):
|
|
290
437
|
"Error: Cannot launch Kakao Desktop. Is it installed?"
|
291
438
|
)
|
292
439
|
|
293
|
-
def
|
294
|
-
Thread(target=self.
|
440
|
+
def cb_get_auth_desktop_memdump(self) -> None:
|
441
|
+
Thread(target=self.cb_get_auth_desktop_memdump_thread, daemon=True).start()
|
295
442
|
|
296
|
-
def
|
443
|
+
def cb_get_auth_desktop_memdump_thread(self, *_: Any) -> None:
|
297
444
|
self.gui.save_creds()
|
298
445
|
self.gui.cb_msg("Getting auth_token, this may take a minute...")
|
299
446
|
self.gui.cb_bar("indeterminate")
|
300
|
-
m =
|
447
|
+
m = GetKakaoAuthDesktopMemdump(
|
301
448
|
cb_ask_str=self.cb_ask_str_kakao,
|
302
449
|
)
|
303
450
|
|
sticker_convert/job_option.py
CHANGED
Binary file
|
@@ -66,13 +66,15 @@
|
|
66
66
|
"telegram_userid": "Set Telegram user_id (From real account, not bot account). Required for uploading Telegram stickers.",
|
67
67
|
"telethon_setup": "Setup Telethon",
|
68
68
|
"kakao_auth_token": "Set Kakao auth_token. Required for downloading animated stickers from https://e.kakao.com/t/xxxxx",
|
69
|
-
"
|
70
|
-
"
|
69
|
+
"kakao_get_auth_android_login": "Get Kakao auth_token by simulating login from Android. Kakao username, password, country code and phone number required.",
|
70
|
+
"kakao_get_auth_desktop_memdump": "Get Kakao auth_token from installed Kakao Desktop application with memdump.",
|
71
|
+
"kakao_get_auth_desktop_login": "Get Kakao auth_token by simulating login from Desktop application. Kakao username and password required.",
|
71
72
|
"kakao_bin_path": "Set Kakao Desktop application path for launching and getting auth_token.\nUseful for portable installation.",
|
72
|
-
"kakao_username": "Set Kakao username, which is email or phone number used for signing up Kakao account\nExample: +447700900142\nRequired for
|
73
|
-
"kakao_password": "Set Kakao password (Password of Kakao account).\nRequired for
|
74
|
-
"kakao_country_code": "Set Kakao country code of phone.\nExample: 82 (For korea), 44 (For UK), 1 (For USA).\nRequired for
|
75
|
-
"kakao_phone_number": "Set Kakao phone number (Phone number associated with your Kakao account)\nDo NOT enter country code\nExample: 7700900142\nUsed for send / receive verification code via SMS.\nRequired for
|
73
|
+
"kakao_username": "Set Kakao username, which is email or phone number used for signing up Kakao account\nExample: +447700900142\nRequired for getting Kakao auth_token by simulating android/desktop login.",
|
74
|
+
"kakao_password": "Set Kakao password (Password of Kakao account).\nRequired for getting Kakao auth_token by simulating android/desktop login.",
|
75
|
+
"kakao_country_code": "Set Kakao country code of phone.\nExample: 82 (For korea), 44 (For UK), 1 (For USA).\nRequired for getting Kakao auth_token by simulating android login.",
|
76
|
+
"kakao_phone_number": "Set Kakao phone number (Phone number associated with your Kakao account)\nDo NOT enter country code\nExample: 7700900142\nUsed for send / receive verification code via SMS.\nRequired for getting Kakao auth_token by simulating android login.",
|
77
|
+
"kakao_device_uuid": "Set Kakao device uuid for desktop login. Defaults to real device uuid.\nOptional for getting Kakao auth_token by simulating desktop login",
|
76
78
|
"line_get_auth": "Get Line cookies from browser, which is required to create custom message stickers.",
|
77
79
|
"line_cookies": "Set Line cookies, which is required to create custom message stickers.",
|
78
80
|
"viber_auth": "Set Viber authentication data.\nRequired for uploading Viber stickers.",
|
@@ -0,0 +1,282 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
import base64
|
3
|
+
import hashlib
|
4
|
+
import json
|
5
|
+
import os
|
6
|
+
import platform
|
7
|
+
import shutil
|
8
|
+
import socket
|
9
|
+
import subprocess
|
10
|
+
import time
|
11
|
+
import uuid
|
12
|
+
from typing import Any, Callable, Optional, Tuple
|
13
|
+
|
14
|
+
import requests
|
15
|
+
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
|
16
|
+
|
17
|
+
from sticker_convert.job_option import CredOption
|
18
|
+
|
19
|
+
|
20
|
+
class GetKakaoAuthDesktopLogin:
|
21
|
+
def __init__(
|
22
|
+
self,
|
23
|
+
opt_cred: CredOption,
|
24
|
+
cb_msg: Callable[..., None] = print,
|
25
|
+
cb_msg_block: Callable[..., Any] = input,
|
26
|
+
cb_ask_str: Callable[..., str] = input,
|
27
|
+
) -> None:
|
28
|
+
self.opt_cred = opt_cred
|
29
|
+
self.username = opt_cred.kakao_username
|
30
|
+
self.password = opt_cred.kakao_password
|
31
|
+
|
32
|
+
self.cb_msg = cb_msg
|
33
|
+
self.cb_msg_block = cb_msg_block
|
34
|
+
self.cb_ask_str = cb_ask_str
|
35
|
+
|
36
|
+
if platform.system() == "Darwin":
|
37
|
+
self.plat = "mac"
|
38
|
+
user_agent_os = "Mc"
|
39
|
+
self.os_version = platform.mac_ver()[0]
|
40
|
+
version = "25.2.0"
|
41
|
+
else:
|
42
|
+
self.plat = "win32"
|
43
|
+
user_agent_os = "Wd"
|
44
|
+
if platform.system() == "Windows":
|
45
|
+
self.os_version = platform.uname().version
|
46
|
+
else:
|
47
|
+
self.os_version = "10.0"
|
48
|
+
version = "25.7.7"
|
49
|
+
|
50
|
+
user_agent = f"KT/{version} {user_agent_os}/{self.os_version} en"
|
51
|
+
self.headers = {
|
52
|
+
"user-agent": user_agent,
|
53
|
+
"a": f"{self.plat}/{version}/en",
|
54
|
+
"accept": "*/*",
|
55
|
+
"accept-encoding": "gzip, deflate, br",
|
56
|
+
"accept-language": "en",
|
57
|
+
"host": "katalk.kakao.com",
|
58
|
+
"Connection": "close",
|
59
|
+
}
|
60
|
+
|
61
|
+
self.device_name = socket.gethostname()
|
62
|
+
self.device_uuid = self.get_device_uuid()
|
63
|
+
|
64
|
+
hash = hashlib.sha512(
|
65
|
+
f"KLEAL|{self.username}|{self.device_uuid}|LCNUE|{user_agent}".encode(
|
66
|
+
"utf-8"
|
67
|
+
)
|
68
|
+
).hexdigest()
|
69
|
+
xvc = hash[:16]
|
70
|
+
|
71
|
+
self.headers_login = self.headers.copy()
|
72
|
+
self.headers_login["x-vc"] = xvc
|
73
|
+
|
74
|
+
def pkcs7_pad(self, m: str) -> str:
|
75
|
+
return m + chr(16 - len(m) % 16) * (16 - len(m) % 16)
|
76
|
+
|
77
|
+
def windows_get_pragma(self, use_wine: bool = False) -> Optional[str]:
|
78
|
+
sys_uuid = None
|
79
|
+
hdd_model = None
|
80
|
+
hdd_serial = None
|
81
|
+
|
82
|
+
if use_wine and shutil.which("wine") is None:
|
83
|
+
return None
|
84
|
+
|
85
|
+
regkey = "HKEY_CURRENT_USER\\Software\\Kakao\\KakaoTalk\\DeviceInfo"
|
86
|
+
wine = "wine " if use_wine else ""
|
87
|
+
cmd = f"{wine}reg query '{regkey}' /v Last"
|
88
|
+
last_device_info = subprocess.run(
|
89
|
+
cmd, stdout=subprocess.PIPE, shell=True
|
90
|
+
).stdout.decode()
|
91
|
+
if "REG_SZ" not in last_device_info:
|
92
|
+
return None
|
93
|
+
last_device_info = last_device_info.split("\n")[2].split()[2]
|
94
|
+
|
95
|
+
if self.opt_cred.kakao_device_uuid:
|
96
|
+
sys_uuid = self.opt_cred.kakao_device_uuid
|
97
|
+
else:
|
98
|
+
cmd = f"{wine}reg query '{regkey}\\{last_device_info}' /v sys_uuid"
|
99
|
+
sys_uuid = subprocess.run(
|
100
|
+
cmd, stdout=subprocess.PIPE, shell=True
|
101
|
+
).stdout.decode()
|
102
|
+
if "REG_SZ" in sys_uuid:
|
103
|
+
sys_uuid = sys_uuid.split("\n")[2].split()[2]
|
104
|
+
|
105
|
+
cmd = f"{wine}reg query '{regkey}\\{last_device_info}' /v hdd_model"
|
106
|
+
hdd_model = subprocess.run(
|
107
|
+
cmd, stdout=subprocess.PIPE, shell=True
|
108
|
+
).stdout.decode()
|
109
|
+
if "REG_SZ" in hdd_model:
|
110
|
+
hdd_model = hdd_model.split("\n")[2].split()[2]
|
111
|
+
|
112
|
+
cmd = f"{wine}reg query '{regkey}\\{last_device_info}' /v hdd_serial"
|
113
|
+
hdd_serial = subprocess.run(
|
114
|
+
cmd, stdout=subprocess.PIPE, shell=True
|
115
|
+
).stdout.decode()
|
116
|
+
if "REG_SZ" in hdd_serial:
|
117
|
+
hdd_serial = hdd_serial.split("\n")[2].split()[2]
|
118
|
+
|
119
|
+
if sys_uuid and hdd_model and hdd_serial:
|
120
|
+
return f"{sys_uuid}|{hdd_model}|{hdd_serial}"
|
121
|
+
else:
|
122
|
+
return None
|
123
|
+
|
124
|
+
def get_device_uuid(self) -> str:
|
125
|
+
if platform.system() == "Darwin":
|
126
|
+
cmd = "ioreg -rd1 -c IOPlatformExpertDevice | grep IOPlatformUUID | awk '{print $3}'"
|
127
|
+
result = subprocess.run(cmd, stdout=subprocess.PIPE, shell=True, check=True)
|
128
|
+
hwid = result.stdout.decode().strip().replace('"', "")
|
129
|
+
|
130
|
+
hwid_sha1 = bytes.fromhex(hashlib.sha1(hwid.encode()).hexdigest())
|
131
|
+
hwid_sha256 = bytes.fromhex(hashlib.sha256(hwid.encode()).hexdigest())
|
132
|
+
|
133
|
+
return base64.b64encode(hwid_sha1 + hwid_sha256).decode()
|
134
|
+
else:
|
135
|
+
use_wine = True if platform.system != "Windows" else False
|
136
|
+
pragma = self.windows_get_pragma(use_wine=use_wine)
|
137
|
+
if pragma is None:
|
138
|
+
if platform.system == "Windows":
|
139
|
+
if self.opt_cred.kakao_device_uuid:
|
140
|
+
sys_uuid = self.opt_cred.kakao_device_uuid
|
141
|
+
else:
|
142
|
+
cmd = "wmic csproduct get uuid"
|
143
|
+
result = subprocess.run(cmd, stdout=subprocess.PIPE, shell=True)
|
144
|
+
sys_uuid = result.stdout.decode().split("\n")[1].strip()
|
145
|
+
cmd = "wmic diskdrive get Model"
|
146
|
+
result = subprocess.run(cmd, stdout=subprocess.PIPE, shell=True)
|
147
|
+
hdd_model = result.stdout.decode().split("\n")[1].strip()
|
148
|
+
cmd = "wmic diskdrive get SerialNumber"
|
149
|
+
result = subprocess.run(cmd, stdout=subprocess.PIPE, shell=True)
|
150
|
+
hdd_serial = result.stdout.decode().split("\n")[1].strip()
|
151
|
+
else:
|
152
|
+
if self.opt_cred.kakao_device_uuid:
|
153
|
+
sys_uuid = self.opt_cred.kakao_device_uuid
|
154
|
+
else:
|
155
|
+
product_uuid_path = "/sys/devices/virtual/dmi/id/product_uuid"
|
156
|
+
sys_uuid = None
|
157
|
+
if os.access(product_uuid_path, os.R_OK):
|
158
|
+
cmd = f"cat {product_uuid_path}"
|
159
|
+
result = subprocess.run(
|
160
|
+
cmd, stdout=subprocess.PIPE, shell=True
|
161
|
+
)
|
162
|
+
if result.returncode == 0:
|
163
|
+
sys_uuid = result.stdout.decode().strip()
|
164
|
+
if sys_uuid is None:
|
165
|
+
sys_uuid = str(uuid.uuid4()).upper()
|
166
|
+
self.opt_cred.kakao_device_uuid = sys_uuid
|
167
|
+
hdd_model = "Wine Disk Drive"
|
168
|
+
hdd_serial = ""
|
169
|
+
pragma = f"{sys_uuid}|{hdd_model}|{hdd_serial}"
|
170
|
+
|
171
|
+
aes_key = bytes.fromhex("9FBAE3118FDE5DEAEB8279D08F1D4C79")
|
172
|
+
aes_iv = bytes.fromhex("00000000000000000000000000000000")
|
173
|
+
|
174
|
+
cipher = Cipher(algorithms.AES(aes_key), modes.CBC(aes_iv))
|
175
|
+
encryptor = cipher.encryptor()
|
176
|
+
padded = self.pkcs7_pad(pragma).encode()
|
177
|
+
encrypted_pragma = encryptor.update(padded) + encryptor.finalize()
|
178
|
+
pragma_hash = hashlib.sha512(encrypted_pragma).digest()
|
179
|
+
|
180
|
+
return base64.b64encode(pragma_hash).decode()
|
181
|
+
|
182
|
+
def login(self, forced: bool = False):
|
183
|
+
data = {
|
184
|
+
"device_name": self.device_name,
|
185
|
+
"device_uuid": self.device_uuid,
|
186
|
+
"email": self.username,
|
187
|
+
"os_version": self.os_version,
|
188
|
+
"password": self.password,
|
189
|
+
"permanent": "1",
|
190
|
+
}
|
191
|
+
|
192
|
+
if forced:
|
193
|
+
data["forced"] = "1"
|
194
|
+
|
195
|
+
headers = self.headers_login.copy()
|
196
|
+
headers["content-type"] = "application/x-www-form-urlencoded"
|
197
|
+
response = requests.post(
|
198
|
+
f"https://katalk.kakao.com/{self.plat}/account/login.json",
|
199
|
+
headers=headers,
|
200
|
+
data=data,
|
201
|
+
)
|
202
|
+
|
203
|
+
return json.loads(response.text)
|
204
|
+
|
205
|
+
def generate_passcode(self):
|
206
|
+
data = {
|
207
|
+
"password": self.password,
|
208
|
+
"permanent": True,
|
209
|
+
"device": {
|
210
|
+
"name": self.device_name,
|
211
|
+
"osVersion": self.os_version,
|
212
|
+
"uuid": self.device_uuid,
|
213
|
+
},
|
214
|
+
"email": self.username,
|
215
|
+
}
|
216
|
+
|
217
|
+
if platform.system() == "Darwin":
|
218
|
+
cmd = "sysctl -n hw.model"
|
219
|
+
result = subprocess.run(cmd, stdout=subprocess.PIPE, shell=True, check=True)
|
220
|
+
data["device"]["model"] = result.stdout.decode().strip() # type: ignore
|
221
|
+
|
222
|
+
headers = self.headers_login.copy()
|
223
|
+
headers["content-type"] = "application/json"
|
224
|
+
response = requests.post(
|
225
|
+
f"https://katalk.kakao.com/{self.plat}/account/passcodeLogin/generate",
|
226
|
+
headers=headers,
|
227
|
+
json=data,
|
228
|
+
)
|
229
|
+
|
230
|
+
return json.loads(response.text)
|
231
|
+
|
232
|
+
def register_device(self):
|
233
|
+
data = {
|
234
|
+
"device": {"uuid": self.device_uuid},
|
235
|
+
"email": self.username,
|
236
|
+
"password": self.password,
|
237
|
+
}
|
238
|
+
|
239
|
+
headers = self.headers_login.copy()
|
240
|
+
headers["content-type"] = "application/json"
|
241
|
+
response = None
|
242
|
+
|
243
|
+
response = requests.post(
|
244
|
+
f"https://katalk.kakao.com/{self.plat}/account/passcodeLogin/registerDevice",
|
245
|
+
headers=headers,
|
246
|
+
json=data,
|
247
|
+
)
|
248
|
+
return json.loads(response.text)
|
249
|
+
|
250
|
+
def get_cred(self) -> Tuple[Optional[str], str]:
|
251
|
+
self.cb_msg("Get authorization token")
|
252
|
+
rjson = self.login()
|
253
|
+
access_token = rjson.get("access_token")
|
254
|
+
if access_token is not None:
|
255
|
+
auth_token = access_token + "-" + self.device_uuid
|
256
|
+
return auth_token, f"Login successful, auth_token: {auth_token}"
|
257
|
+
|
258
|
+
rjson = self.generate_passcode()
|
259
|
+
if rjson.get("status") != 0:
|
260
|
+
return None, f"Failed to generate passcode: {rjson}"
|
261
|
+
passcode = rjson["passcode"]
|
262
|
+
|
263
|
+
start_time = time.time()
|
264
|
+
register_success = False
|
265
|
+
while time.time() - start_time < 60:
|
266
|
+
self.cb_ask_str(f"Please enter passcode within 1 minute: {passcode}")
|
267
|
+
rjson = self.register_device()
|
268
|
+
if rjson["status"] == 0:
|
269
|
+
register_success = True
|
270
|
+
break
|
271
|
+
if register_success is False:
|
272
|
+
return None, f"Failed to register device: {rjson}"
|
273
|
+
|
274
|
+
rjson = self.login()
|
275
|
+
if rjson.get("status") == -101:
|
276
|
+
rjson = self.login(forced=True)
|
277
|
+
access_token = rjson.get("access_token")
|
278
|
+
if access_token is None:
|
279
|
+
return None, f"Failed to login after registering device: {rjson}"
|
280
|
+
|
281
|
+
auth_token = access_token + "-" + self.device_uuid
|
282
|
+
return auth_token, f"Login successful, auth_token: {auth_token}"
|
@@ -26,9 +26,13 @@ MSG_LAUNCH_FAIL = "Failed to launch Kakao"
|
|
26
26
|
MSG_PERMISSION_ERROR = "Failed to read Kakao process memory"
|
27
27
|
|
28
28
|
|
29
|
-
class
|
29
|
+
class GetKakaoAuthDesktopMemdump:
|
30
30
|
def __init__(self, cb_ask_str: Callable[..., str] = input) -> None:
|
31
31
|
self.cb_ask_str = cb_ask_str
|
32
|
+
if platform.system() == "Windows":
|
33
|
+
self.auth_token_length = 64
|
34
|
+
else:
|
35
|
+
self.auth_token_length = 52
|
32
36
|
|
33
37
|
def launch_kakao(self, kakao_bin_path: str) -> None:
|
34
38
|
if platform.system() == "Windows":
|
@@ -69,12 +73,11 @@ class GetKakaoDesktopAuth:
|
|
69
73
|
):
|
70
74
|
auth_token_addr = cast(int, address) + 15
|
71
75
|
auth_token_bytes = process.read_process_memory(
|
72
|
-
auth_token_addr, bytes,
|
76
|
+
auth_token_addr, bytes, self.auth_token_length + 1
|
73
77
|
)
|
74
|
-
|
75
|
-
if auth_token_term == -1:
|
78
|
+
if auth_token_bytes[-1:] != b"\x00":
|
76
79
|
continue
|
77
|
-
auth_token_candidate = auth_token_bytes[
|
80
|
+
auth_token_candidate = auth_token_bytes[:-1].decode(
|
78
81
|
encoding="ascii"
|
79
82
|
)
|
80
83
|
if len(auth_token_candidate) > 150:
|
@@ -126,13 +129,12 @@ class GetKakaoDesktopAuth:
|
|
126
129
|
for i in re.finditer(b"authorization: ", s):
|
127
130
|
auth_token_addr = i.start() + 15
|
128
131
|
|
129
|
-
auth_token_bytes = s[
|
130
|
-
|
131
|
-
|
132
|
+
auth_token_bytes = s[
|
133
|
+
auth_token_addr : auth_token_addr + self.auth_token_length + 1
|
134
|
+
]
|
135
|
+
if auth_token_bytes[-1:] != b"\x00":
|
132
136
|
return None, MSG_NO_AUTH
|
133
|
-
auth_token_candidate = auth_token_bytes[
|
134
|
-
encoding="ascii"
|
135
|
-
)
|
137
|
+
auth_token_candidate = auth_token_bytes[:-1].decode(encoding="ascii")
|
136
138
|
if len(auth_token_candidate) > 150:
|
137
139
|
auth_token = auth_token_candidate
|
138
140
|
break
|
@@ -67,11 +67,12 @@ class BotAPI(TelegramAPI):
|
|
67
67
|
self.cb.put("Token required for downloading from telegram")
|
68
68
|
return False
|
69
69
|
|
70
|
-
if opt_cred.telegram_userid
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
70
|
+
if opt_cred.telegram_userid:
|
71
|
+
if opt_cred.telegram_userid.isnumeric():
|
72
|
+
self.telegram_userid = int(opt_cred.telegram_userid)
|
73
|
+
else:
|
74
|
+
self.cb.put("Invalid userid, should contain numbers only")
|
75
|
+
return False
|
75
76
|
|
76
77
|
self.application = ( # type: ignore
|
77
78
|
ApplicationBuilder()
|
sticker_convert/version.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: sticker-convert
|
3
|
-
Version: 2.
|
3
|
+
Version: 2.14.0.0
|
4
4
|
Summary: Convert (animated) stickers to/from WhatsApp, Telegram, Signal, Line, Kakao, Viber, Discord, iMessage. Written in Python.
|
5
5
|
Author-email: laggykiller <chaudominic2@gmail.com>
|
6
6
|
Maintainer-email: laggykiller <chaudominic2@gmail.com>
|
@@ -366,9 +366,10 @@ License-File: LICENSE
|
|
366
366
|
Requires-Dist: aiolimiter~=1.2.1
|
367
367
|
Requires-Dist: anyio~=4.10.0
|
368
368
|
Requires-Dist: apngasm_python~=1.3.2
|
369
|
-
Requires-Dist: av
|
370
|
-
Requires-Dist: beautifulsoup4~=4.13.
|
369
|
+
Requires-Dist: av<15,>=13.1.0
|
370
|
+
Requires-Dist: beautifulsoup4~=4.13.5
|
371
371
|
Requires-Dist: cryptg~=0.5.1
|
372
|
+
Requires-Dist: cryptography~=46.0.1
|
372
373
|
Requires-Dist: rookiepy~=0.5.6
|
373
374
|
Requires-Dist: httpx~=0.28.1
|
374
375
|
Requires-Dist: imagequant~=1.1.4
|
@@ -376,15 +377,15 @@ Requires-Dist: memory-tempfile~=2.2.3
|
|
376
377
|
Requires-Dist: mergedeep~=1.3.4
|
377
378
|
Requires-Dist: numpy>=1.22.4
|
378
379
|
Requires-Dist: Pillow~=11.3.0
|
379
|
-
Requires-Dist: pyoxipng~=9.1.
|
380
|
-
Requires-Dist: python-telegram-bot~=22.
|
380
|
+
Requires-Dist: pyoxipng~=9.1.1
|
381
|
+
Requires-Dist: python-telegram-bot~=22.4
|
381
382
|
Requires-Dist: psutil~=7.0.0
|
382
383
|
Requires-Dist: PyMemoryEditor~=1.5.24
|
383
384
|
Requires-Dist: requests~=2.32.4
|
384
|
-
Requires-Dist: rlottie_python~=1.3.
|
385
|
+
Requires-Dist: rlottie_python~=1.3.8
|
385
386
|
Requires-Dist: signalstickers-client-fork-laggykiller~=3.3.0.post2
|
386
387
|
Requires-Dist: socksio~=1.0.0
|
387
|
-
Requires-Dist: telethon~=1.
|
388
|
+
Requires-Dist: telethon~=1.41.2
|
388
389
|
Requires-Dist: tqdm~=4.67.1
|
389
390
|
Requires-Dist: ttkbootstrap-fork-laggykiller~=1.5.1
|
390
391
|
Requires-Dist: websocket_client~=1.8.0
|
@@ -497,37 +498,29 @@ Dynamic: license-file
|
|
497
498
|
To run in CLI mode, pass on any arguments
|
498
499
|
|
499
500
|
```
|
500
|
-
usage: sticker-convert.py [-h] [--version] [--no-confirm] [--no-progress]
|
501
|
-
[--custom-presets CUSTOM_PRESETS] [--input-dir INPUT_DIR]
|
501
|
+
usage: sticker-convert.py [-h] [--version] [--no-confirm] [--no-progress] [--custom-presets CUSTOM_PRESETS] [--input-dir INPUT_DIR]
|
502
502
|
[--download-auto DOWNLOAD_AUTO | --download-signal DOWNLOAD_SIGNAL | --download-telegram DOWNLOAD_TELEGRAM | --download-telegram-telethon DOWNLOAD_TELEGRAM_TELETHON | --download-line DOWNLOAD_LINE | --download-kakao DOWNLOAD_KAKAO | --download-band DOWNLOAD_BAND | --download-ogq DOWNLOAD_OGQ | --download-viber DOWNLOAD_VIBER | --download-discord DOWNLOAD_DISCORD | --download-discord-emoji DOWNLOAD_DISCORD_EMOJI]
|
503
503
|
[--output-dir OUTPUT_DIR] [--author AUTHOR] [--title TITLE]
|
504
504
|
[--export-signal | --export-telegram | --export-telegram-emoji | --export-telegram-telethon | --export-telegram-emoji-telethon | --export-viber | --export-whatsapp | --export-imessage]
|
505
505
|
[--no-compress]
|
506
506
|
[--preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,band,ogq,viber,discord,discord_emoji,imessage_small,imessage_medium,imessage_large,custom}]
|
507
|
-
[--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX]
|
508
|
-
[--
|
509
|
-
[--res-
|
510
|
-
[--res-
|
511
|
-
[--
|
512
|
-
[--
|
513
|
-
[--
|
514
|
-
[--
|
515
|
-
[--
|
516
|
-
[--
|
517
|
-
[--
|
518
|
-
[--
|
519
|
-
[--
|
520
|
-
[--
|
521
|
-
[--
|
522
|
-
[--
|
523
|
-
[--
|
524
|
-
[--kakao-get-auth-desktop] [--kakao-bin-path KAKAO_BIN_PATH]
|
525
|
-
[--kakao-username KAKAO_USERNAME] [--kakao-password KAKAO_PASSWORD]
|
526
|
-
[--kakao-country-code KAKAO_COUNTRY_CODE]
|
527
|
-
[--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth]
|
528
|
-
[--line-cookies LINE_COOKIES] [--viber-auth VIBER_AUTH]
|
529
|
-
[--viber-get-auth VIBER_GET_AUTH] [--viber-bin-path VIBER_BIN_PATH]
|
530
|
-
[--discord-get-auth] [--discord-token DISCORD_TOKEN] [--save-cred]
|
507
|
+
[--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX] [--fps-power FPS_POWER]
|
508
|
+
[--res-min RES_MIN] [--res-max RES_MAX] [--res-w-min RES_W_MIN] [--res-w-max RES_W_MAX]
|
509
|
+
[--res-h-min RES_H_MIN] [--res-h-max RES_H_MAX] [--res-power RES_POWER] [--res-snap-pow2]
|
510
|
+
[--no-res-snap-pow2] [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--quality-power QUALITY_POWER]
|
511
|
+
[--color-min COLOR_MIN] [--color-max COLOR_MAX] [--color-power COLOR_POWER] [--duration-min DURATION_MIN]
|
512
|
+
[--duration-max DURATION_MAX] [--padding-percent PADDING_PERCENT] [--bg-color BG_COLOR]
|
513
|
+
[--vid-size-max VID_SIZE_MAX] [--img-size-max IMG_SIZE_MAX] [--vid-format VID_FORMAT]
|
514
|
+
[--img-format IMG_FORMAT] [--fake-vid] [--no-fake-vid] [--scale-filter SCALE_FILTER]
|
515
|
+
[--quantize-method QUANTIZE_METHOD] [--cache-dir CACHE_DIR] [--chromium-path CHROMIUM_PATH]
|
516
|
+
[--default-emoji DEFAULT_EMOJI] [--signal-uuid SIGNAL_UUID] [--signal-password SIGNAL_PASSWORD]
|
517
|
+
[--signal-get-auth] [--telegram-token TELEGRAM_TOKEN] [--telegram-userid TELEGRAM_USERID] [--telethon-setup]
|
518
|
+
[--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth-android-login] [--kakao-get-auth-desktop-memdump]
|
519
|
+
[--kakao-get-auth-desktop-login] [--kakao-bin-path KAKAO_BIN_PATH] [--kakao-username KAKAO_USERNAME]
|
520
|
+
[--kakao-password KAKAO_PASSWORD] [--kakao-country-code KAKAO_COUNTRY_CODE]
|
521
|
+
[--kakao-phone-number KAKAO_PHONE_NUMBER] [--kakao-device-uuid KAKAO_DEVICE_UUID] [--line-get-auth]
|
522
|
+
[--line-cookies LINE_COOKIES] [--viber-auth VIBER_AUTH] [--viber-get-auth VIBER_GET_AUTH]
|
523
|
+
[--viber-bin-path VIBER_BIN_PATH] [--discord-get-auth] [--discord-token DISCORD_TOKEN] [--save-cred]
|
531
524
|
|
532
525
|
CLI for stickers-convert
|
533
526
|
|
@@ -706,29 +699,35 @@ Credentials options:
|
|
706
699
|
--telethon-setup Setup Telethon
|
707
700
|
--kakao-auth-token KAKAO_AUTH_TOKEN
|
708
701
|
Set Kakao auth_token. Required for downloading animated stickers from https://e.kakao.com/t/xxxxx
|
709
|
-
--kakao-get-auth
|
710
|
-
|
711
|
-
|
702
|
+
--kakao-get-auth-android-login
|
703
|
+
Get Kakao auth_token by simulating login from Android. Kakao username, password, country code and phone number required.
|
704
|
+
--kakao-get-auth-desktop-memdump
|
705
|
+
Get Kakao auth_token from installed Kakao Desktop application with memdump.
|
706
|
+
--kakao-get-auth-desktop-login
|
707
|
+
Get Kakao auth_token by simulating login from Desktop application. Kakao username and password required.
|
712
708
|
--kakao-bin-path KAKAO_BIN_PATH
|
713
709
|
Set Kakao Desktop application path for launching and getting auth_token.
|
714
710
|
Useful for portable installation.
|
715
711
|
--kakao-username KAKAO_USERNAME
|
716
712
|
Set Kakao username, which is email or phone number used for signing up Kakao account
|
717
713
|
Example: +447700900142
|
718
|
-
Required for
|
714
|
+
Required for getting Kakao auth_token by simulating android/desktop login.
|
719
715
|
--kakao-password KAKAO_PASSWORD
|
720
716
|
Set Kakao password (Password of Kakao account).
|
721
|
-
Required for
|
717
|
+
Required for getting Kakao auth_token by simulating android/desktop login.
|
722
718
|
--kakao-country-code KAKAO_COUNTRY_CODE
|
723
719
|
Set Kakao country code of phone.
|
724
720
|
Example: 82 (For korea), 44 (For UK), 1 (For USA).
|
725
|
-
Required for
|
721
|
+
Required for getting Kakao auth_token by simulating android login.
|
726
722
|
--kakao-phone-number KAKAO_PHONE_NUMBER
|
727
723
|
Set Kakao phone number (Phone number associated with your Kakao account)
|
728
724
|
Do NOT enter country code
|
729
725
|
Example: 7700900142
|
730
726
|
Used for send / receive verification code via SMS.
|
731
|
-
Required for
|
727
|
+
Required for getting Kakao auth_token by simulating android login.
|
728
|
+
--kakao-device-uuid KAKAO_DEVICE_UUID
|
729
|
+
Set Kakao device uuid for desktop login. Defaults to real device uuid.
|
730
|
+
Optional for getting Kakao auth_token by simulating desktop login
|
732
731
|
--line-get-auth Get Line cookies from browser, which is required to create custom message stickers.
|
733
732
|
--line-cookies LINE_COOKIES
|
734
733
|
Set Line cookies, which is required to create custom message stickers.
|
@@ -1,12 +1,12 @@
|
|
1
1
|
sticker_convert/__init__.py,sha256=iQnv6UOOA69c3soAn7ZOnAIubTIQSUxtq1Uhh8xRWvU,102
|
2
2
|
sticker_convert/__main__.py,sha256=elDCMvU27letiYs8jPUpxaCq5puURnvcDuqGsAAb6_w,592
|
3
|
-
sticker_convert/cli.py,sha256=
|
4
|
-
sticker_convert/converter.py,sha256=
|
3
|
+
sticker_convert/cli.py,sha256=AWdcGeMJudYb39Pxi28svPQrNs6pPpa-d-RhQN-Ryz8,23674
|
4
|
+
sticker_convert/converter.py,sha256=7-XQbBUAqfc9mLuLTIkjjMeO-UTInldeRD32suFgNJo,41141
|
5
5
|
sticker_convert/definitions.py,sha256=BqROmOvqIqw8ANaqZXIxJAXGD0HgjAvCfFouQ4SaWHc,2254
|
6
|
-
sticker_convert/gui.py,sha256=
|
6
|
+
sticker_convert/gui.py,sha256=kUEIfd7fYtvlGwc29VQV1dpQLn07Gv2WEeXuJDuAlsE,34571
|
7
7
|
sticker_convert/job.py,sha256=AJoxWg61ZxQRHzKyGIrQaaCGs-S6NDO6lvWjddYemH8,28543
|
8
|
-
sticker_convert/job_option.py,sha256=
|
9
|
-
sticker_convert/version.py,sha256=
|
8
|
+
sticker_convert/job_option.py,sha256=unG8kt2cCK-Rmg45xkhD4JFt5ubx6P6JEvLvDeOeX_I,8222
|
9
|
+
sticker_convert/version.py,sha256=u8HiSgljvPyJwWtEWrwe5go7kX6hzYxjhPg2UDJ2ssg,49
|
10
10
|
sticker_convert/downloaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
11
11
|
sticker_convert/downloaders/download_band.py,sha256=JPjwwdxbMXPBM9TXF76wT9mtoDCLssYnrm1iS2C6uVM,3629
|
12
12
|
sticker_convert/downloaders/download_base.py,sha256=MI5pCT_tkfoaFlrD1oNynDj1Rv1CK0APuNVElTEAEis,5110
|
@@ -32,7 +32,7 @@ sticker_convert/gui_components/windows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JC
|
|
32
32
|
sticker_convert/gui_components/windows/advanced_compression_window.py,sha256=mIkapYo93Kw7oa10in1yH-DwR3hX0D2JYJ7cTAs48bk,33748
|
33
33
|
sticker_convert/gui_components/windows/base_window.py,sha256=xBE1peGMPvWsdrFej0CJUVhmQ57GJGvz-cX03nIIhkE,1108
|
34
34
|
sticker_convert/gui_components/windows/discord_get_auth_window.py,sha256=a9ptBqtpZslQJ87-ZPotcT6gigouIHWAFijfkWv2rZQ,2786
|
35
|
-
sticker_convert/gui_components/windows/kakao_get_auth_window.py,sha256=
|
35
|
+
sticker_convert/gui_components/windows/kakao_get_auth_window.py,sha256=TH4yLi4YmydukTm4K99DficaxBne0tAAvbDzU3EYR0A,17624
|
36
36
|
sticker_convert/gui_components/windows/line_get_auth_window.py,sha256=S4ES_lk2-GDvPokZtYALnUc5zW1VbS4WulNqO9K1aSs,3375
|
37
37
|
sticker_convert/gui_components/windows/signal_get_auth_window.py,sha256=d9vWMfrD0s-qI-TmB0796LRvDW64Jh2wmA1mZcRubUw,3126
|
38
38
|
sticker_convert/gui_components/windows/viber_get_auth_window.py,sha256=DI-RayYAfk6ig7NlGy97ulYgZZs77S8CEDIUJdtGDwI,5787
|
@@ -68,13 +68,13 @@ sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworks
|
|
68
68
|
sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist,sha256=36D5u4W5XMupxoEa2t-MtAf7XVIIjonbg-vDCOxEhUI,238
|
69
69
|
sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/xcuserdata/niklaspeterson.xcuserdatad/UserInterfaceState.xcuserstate,sha256=GB0zcEgI5Ot4Djb1WUSpYFyBomrwM3I-9zlQ0tdonWQ,21835
|
70
70
|
sticker_convert/ios-message-stickers-template/stickers.xcodeproj/xcuserdata/niklaspeterson.xcuserdatad/xcschemes/xcschememanagement.plist,sha256=uHJbEexYAQ1YSuNrCh2mYY_h67_OoJGLGlP0Fuo7lls,364
|
71
|
-
sticker_convert/resources/NotoColorEmoji.ttf,sha256=
|
71
|
+
sticker_convert/resources/NotoColorEmoji.ttf,sha256=cqY1yz0vNSTFFiDN3kBrIXIE6KagbGoJb_jtS1_W4ns,10673480
|
72
72
|
sticker_convert/resources/appicon.icns,sha256=FB2DVTOQcFfQNZ9RcyG3z9c9k7eOiI1qw0IJhXMRFg4,5404
|
73
73
|
sticker_convert/resources/appicon.ico,sha256=-ldugcl2Yq2pBRTktnhGKWInpKyWzRjCiPvMr3XPTlc,38078
|
74
74
|
sticker_convert/resources/appicon.png,sha256=6XBEQz7PnerqS43aRkwpWolFG4WvKMuQ-st1ly-_JPg,5265
|
75
75
|
sticker_convert/resources/compression.json,sha256=X3b3KCpf9KdHWjmV9KzXFf8KQYq7MSFk9O8WmzahVZg,16695
|
76
76
|
sticker_convert/resources/emoji.json,sha256=q9DRFdVJfm7feZW7ZM6Xa5P1QsMvrn0PbBVU9jKcJKI,422720
|
77
|
-
sticker_convert/resources/help.json,sha256=
|
77
|
+
sticker_convert/resources/help.json,sha256=LpqTOvORlY2pqVjpN1RCRn2PuOzkxuRMCNw2UwEgCOM,8289
|
78
78
|
sticker_convert/resources/input.json,sha256=cpLQQ-jwXSHQUd8faLn-e-mAEvJViKs_d7UuqIvF7ZQ,4575
|
79
79
|
sticker_convert/resources/memdump_linux.sh,sha256=SFKXiE0ztZyGvpFYPOrdQ0wmY3ndgJuqfiofC7BQon0,625
|
80
80
|
sticker_convert/resources/memdump_windows.ps1,sha256=CfyNSSEW3HJOkTu-mKrP3qh5aprN-1VCBfj-R1fELA0,302
|
@@ -93,12 +93,13 @@ sticker_convert/utils/process.py,sha256=y_W-D9zkxAEfPvYJZTKxNtNHxmuK0NldpDXu-OdG
|
|
93
93
|
sticker_convert/utils/singletons.py,sha256=SiV374FxU68DpysGoj_ytU1ErINkeOBbP4s9QTcexeY,357
|
94
94
|
sticker_convert/utils/url_detect.py,sha256=_wmI28hUyngq8TVz1bw7YM90qPLd3bIynawVlbr_lcI,939
|
95
95
|
sticker_convert/utils/auth/get_discord_auth.py,sha256=8H9Z0c7pl6JjzkP8lo0-lCFnBAT5Eql-LYc6M92FY_k,4283
|
96
|
-
sticker_convert/utils/auth/
|
97
|
-
sticker_convert/utils/auth/
|
96
|
+
sticker_convert/utils/auth/get_kakao_auth_android_login.py,sha256=YOyzNvPBUseoZBD8o3IoJsDA207G_sJGfZU3x1aUwTA,10772
|
97
|
+
sticker_convert/utils/auth/get_kakao_auth_desktop_login.py,sha256=Lf_AzTzRW-NwYrayL7hwXIfQUYZxc03cnFB8WcyBwuE,10680
|
98
|
+
sticker_convert/utils/auth/get_kakao_auth_desktop_memdump.py,sha256=GE4rjVx32zHmQbX8tuO8V_ZhBCcXv-sHdeqHEG5H6HI,8911
|
98
99
|
sticker_convert/utils/auth/get_line_auth.py,sha256=8l8ha2vQmk3rHGvDE7PkcxQXbH3oe62LKbI3qVUtvqc,2196
|
99
100
|
sticker_convert/utils/auth/get_signal_auth.py,sha256=I6od2aj8yl1eLV8S2TtNQEPM77DC7FpkRKex0pXY2II,4580
|
100
101
|
sticker_convert/utils/auth/get_viber_auth.py,sha256=aQiv1JI2RKiPVoo_JjbjcWwsUr2OK2FXMsFLPb3TtGU,8123
|
101
|
-
sticker_convert/utils/auth/telegram_api.py,sha256=
|
102
|
+
sticker_convert/utils/auth/telegram_api.py,sha256=_DAtxE1vP5eChKyQ53WIdDzojH6YY4hza_LJPF5NZZQ,24368
|
102
103
|
sticker_convert/utils/auth/telethon_setup.py,sha256=7VtsSM3n8qrN_VXV8hBaNSmApxgIPCa84Z08fRr43eQ,3309
|
103
104
|
sticker_convert/utils/chromiums/linux.py,sha256=voWOxQVNy2icGDQfnZEa-2Nwrv-Qmuvt0v1L65hKnY8,1719
|
104
105
|
sticker_convert/utils/chromiums/osx.py,sha256=ET6_uWZDbPCIN-GihMmjNcva0-WAyn0fA2-SzNn5wcU,3255
|
@@ -113,9 +114,9 @@ sticker_convert/utils/media/apple_png_normalize.py,sha256=LbrQhc7LlYX4I9ek4XJsZE
|
|
113
114
|
sticker_convert/utils/media/codec_info.py,sha256=HwA6eVh7cLhOlUoR_K9d_wyBRJ_ocGtB3GAyne_iZAU,16483
|
114
115
|
sticker_convert/utils/media/decrypt_kakao.py,sha256=4wq9ZDRnFkx1WmFZnyEogBofiLGsWQM_X69HlA36578,1947
|
115
116
|
sticker_convert/utils/media/format_verify.py,sha256=oM32P186tWe9YxvBQRPr8D3FEmBN3b2rEe_2S_MwxyQ,6236
|
116
|
-
sticker_convert-2.
|
117
|
-
sticker_convert-2.
|
118
|
-
sticker_convert-2.
|
119
|
-
sticker_convert-2.
|
120
|
-
sticker_convert-2.
|
121
|
-
sticker_convert-2.
|
117
|
+
sticker_convert-2.14.0.0.dist-info/licenses/LICENSE,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
|
118
|
+
sticker_convert-2.14.0.0.dist-info/METADATA,sha256=lef3juGzbeG_KZ71ntLIhD68ztCclv1_WlsYC5ZHmbU,56527
|
119
|
+
sticker_convert-2.14.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
120
|
+
sticker_convert-2.14.0.0.dist-info/entry_points.txt,sha256=MNJ7XyC--ugxi5jS1nzjDLGnxCyLuaGdsVLnJhDHCqs,66
|
121
|
+
sticker_convert-2.14.0.0.dist-info/top_level.txt,sha256=r9vfnB0l1ZnH5pTH5RvkobnK3Ow9m0RsncaOMAtiAtk,16
|
122
|
+
sticker_convert-2.14.0.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|