sticker-convert 2.11.7__py3-none-any.whl → 2.11.9__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.
@@ -818,7 +818,9 @@ class StickerConvert:
818
818
  im_out = [Image.fromarray(i) for i in self.frames_processed] # type: ignore
819
819
  extra_kwargs["format"] = "WebP"
820
820
  extra_kwargs["allow_mixed"] = True
821
- extra_kwargs["kmax"] = 1 # Keyframe every frame, otherwise black lines artifact can appear
821
+ extra_kwargs["kmax"] = (
822
+ 1 # Keyframe every frame, otherwise black lines artifact can appear
823
+ )
822
824
  if self.quality:
823
825
  if self.quality < 20:
824
826
  extra_kwargs["minimize_size"] = True
@@ -4,12 +4,10 @@ from __future__ import annotations
4
4
  import itertools
5
5
  import json
6
6
  from pathlib import Path
7
- from typing import Any, List, Optional, Tuple, cast
7
+ from typing import Any, List, Optional, Tuple
8
8
  from urllib.parse import urlparse
9
9
 
10
10
  import requests
11
- from bs4 import BeautifulSoup
12
- from py_mini_racer import MiniRacer
13
11
 
14
12
  from sticker_convert.downloaders.download_base import DownloadBase
15
13
  from sticker_convert.job_option import CredOption, InputOption
@@ -17,34 +15,32 @@ from sticker_convert.utils.callback import CallbackProtocol, CallbackReturn
17
15
  from sticker_convert.utils.files.metadata_handler import MetadataHandler
18
16
  from sticker_convert.utils.media.decrypt_kakao import DecryptKakao
19
17
 
20
- JSINJECT = """
21
- class osclass {
22
- android = true;
23
- }
24
- class uaclass {
25
- os = new osclass();
26
- }
27
- class util {
28
- static userAgent() {
29
- return new uaclass();
30
- }
31
- }
32
- class daumtools {
33
- static web2app(dataDict) {
34
- return dataDict['urlScheme'];
35
- }
36
- }
37
- class document {
38
- static querySelectorAll(selectors) {
39
- return [];
40
- }
41
- }
42
- """
43
-
44
18
 
45
19
  class MetadataKakao:
46
20
  @staticmethod
47
- def get_item_code(title_ko: str, auth_token: str) -> Optional[str]:
21
+ def get_item_code_from_hash(hash: str, auth_token: str) -> Optional[str]:
22
+ headers = {
23
+ "Authorization": auth_token,
24
+ }
25
+
26
+ data = {"hashedItemCode": hash}
27
+
28
+ response = requests.post(
29
+ "https://talk-pilsner.kakao.com/emoticon/api/store/v3/item-code-by-hash",
30
+ headers=headers,
31
+ data=data,
32
+ )
33
+
34
+ if response.status_code != 200:
35
+ return None
36
+
37
+ response_json = json.loads(response.text)
38
+ item_code = response_json["itemCode"]
39
+
40
+ return item_code
41
+
42
+ @staticmethod
43
+ def get_item_code_from_title(title_ko: str, auth_token: str) -> Optional[str]:
48
44
  headers = {
49
45
  "Authorization": auth_token,
50
46
  }
@@ -112,66 +108,47 @@ class DownloadKakao(DownloadBase):
112
108
  self.pack_info_unauthed: Optional[dict[str, Any]] = None
113
109
  self.pack_info_authed: Optional[dict[str, Any]] = None
114
110
 
115
- def get_info_from_share_link(self, url: str) -> Tuple[Optional[str], Optional[str]]:
116
- headers = {"User-Agent": "Android"}
117
-
118
- response = requests.get(url, headers=headers)
119
- soup = BeautifulSoup(response.content.decode("utf-8", "ignore"), "html.parser")
120
-
121
- pack_title_tag = soup.find("title") # type: ignore
122
- if not pack_title_tag:
123
- return None, None
124
-
125
- pack_title: str = pack_title_tag.string # type: ignore
126
-
127
- js = ""
128
- for script_tag in soup.find_all("script"):
129
- js = script_tag.string
130
- if js and "daumtools.web2app" in js:
131
- break
132
- if "daumtools.web2app" not in js:
133
- return None, None
134
-
135
- js = JSINJECT + js
136
-
137
- ctx = MiniRacer()
138
- kakao_url = cast(str, ctx.eval(js))
139
- item_code = urlparse(kakao_url).path.split("/")[2]
140
-
141
- # Share link redirect to preview link if use desktop headers
142
- # This allows us to find pack author
143
- headers_desktop = {"User-Agent": "Chrome"}
144
-
145
- response = requests.get(url, headers=headers_desktop, allow_redirects=True)
146
- response.url
147
-
148
- pack_title_url = urlparse(response.url).path.split("/")[-1]
149
- pack_info_unauthed = MetadataKakao.get_pack_info_unauthed(pack_title_url)
150
- if pack_info_unauthed:
151
- self.author = pack_info_unauthed["result"]["artist"]
152
-
153
- return pack_title, item_code
154
-
155
111
  def download_stickers_kakao(self) -> Tuple[int, int]:
156
112
  self.auth_token = None
157
113
  if self.opt_cred:
158
114
  self.auth_token = self.opt_cred.kakao_auth_token
159
115
 
160
116
  if urlparse(self.url).netloc == "emoticon.kakao.com":
161
- self.pack_title, item_code = self.get_info_from_share_link(self.url)
117
+ item_code = None
118
+ if self.auth_token is not None:
119
+ hash = urlparse(self.url).path.split("/")[-1]
120
+ item_code = MetadataKakao.get_item_code_from_hash(hash, self.auth_token)
162
121
 
163
- if item_code:
164
- return self.download_animated(item_code)
165
- self.cb.put("Download failed: Cannot download metadata for sticker pack")
166
- return 0, 0
122
+ # Share link redirect to preview link if use desktop headers
123
+ # This allows us to find pack author
124
+ headers_desktop = {"User-Agent": "Chrome"}
125
+
126
+ r = requests.get(self.url, headers=headers_desktop, allow_redirects=True)
127
+
128
+ self.pack_title = urlparse(r.url).path.split("/")[-1]
129
+ pack_info_unauthed = MetadataKakao.get_pack_info_unauthed(self.pack_title)
130
+ if pack_info_unauthed is None:
131
+ self.cb.put("Download failed: Cannot download metadata for sticker pack")
132
+ return 0, 0
133
+
134
+ self.author = pack_info_unauthed["result"]["artist"]
135
+ thumbnail_urls = pack_info_unauthed["result"]["thumbnailUrls"]
167
136
 
168
- if self.url.isnumeric() or self.url.startswith("kakaotalk://store/emoticon/"):
169
- item_code = self.url.replace("kakaotalk://store/emoticon/", "")
137
+ if item_code is None:
138
+ if self.auth_token is None:
139
+ self.cb.put("Warning: Downloading animated sticker requires auth_token")
140
+ else:
141
+ self.cb.put("Warning: auth_token invalid, cannot download animated sticker")
142
+ self.cb.put("Downloading static stickers...")
143
+ self.download_static(thumbnail_urls)
144
+ else:
145
+ return self.download_animated(item_code)
170
146
 
147
+ if self.url.isnumeric():
171
148
  self.pack_title = None
172
149
  if self.auth_token:
173
150
  self.pack_info_authed = MetadataKakao.get_pack_info_authed(
174
- item_code, self.auth_token
151
+ self.url, self.auth_token
175
152
  )
176
153
  if self.pack_info_authed:
177
154
  self.pack_title = self.pack_info_authed["itemUnitInfo"][0]["title"]
@@ -182,7 +159,7 @@ class DownloadKakao(DownloadBase):
182
159
  )
183
160
  self.cb.put("Continuing without getting pack_title")
184
161
 
185
- return self.download_animated(item_code)
162
+ return self.download_animated(self.url)
186
163
 
187
164
  if urlparse(self.url).netloc == "e.kakao.com":
188
165
  self.pack_title = urlparse(self.url).path.split("/")[-1]
@@ -201,7 +178,9 @@ class DownloadKakao(DownloadBase):
201
178
  thumbnail_urls = self.pack_info_unauthed["result"]["thumbnailUrls"]
202
179
 
203
180
  if self.auth_token:
204
- item_code = MetadataKakao.get_item_code(title_ko, self.auth_token)
181
+ item_code = MetadataKakao.get_item_code_from_title(
182
+ title_ko, self.auth_token
183
+ )
205
184
  if item_code:
206
185
  return self.download_animated(item_code)
207
186
  msg = "Warning: Cannot get item code.\n"
sticker_convert/job.py CHANGED
@@ -172,6 +172,10 @@ class Executor:
172
172
  try:
173
173
  for process in self.processes:
174
174
  process.join()
175
+ if process.exitcode != 0 and self.is_cancel_job.value == 0:
176
+ self.cb_msg(
177
+ f"Warning: A process exited with error (code {process.exitcode})"
178
+ )
175
179
  except KeyboardInterrupt:
176
180
  pass
177
181
 
@@ -52,7 +52,7 @@
52
52
  "kakao": {
53
53
  "full_name": "Download from Kakao",
54
54
  "help": "Download kakao stickers from a URL / ID as input",
55
- "example": "Example: https://e.kakao.com/t/xxxxx OR kakaotalk://store/emoticon/4404400\nOR https://emoticon.kakao.com/items/xxxxx OR 4404400",
55
+ "example": "Example: https://e.kakao.com/t/xxxxx \nOR https://emoticon.kakao.com/items/xxxxx OR 4404400",
56
56
  "address_lbls": "URL address / ID",
57
57
  "metadata_provides": {
58
58
  "title": true,
@@ -6,6 +6,7 @@ from typing import Any, Callable, Dict, Optional
6
6
  from urllib.parse import parse_qs, urlparse
7
7
 
8
8
  import requests
9
+ from bs4 import BeautifulSoup
9
10
 
10
11
  from sticker_convert.job_option import CredOption
11
12
 
@@ -32,10 +33,10 @@ class GetKakaoAuth:
32
33
  self.uuid_c = str(uuid.uuid4())
33
34
  self.device_info = (
34
35
  f"android/30; uuid={self.device_uuid}; ssaid={self.device_ssaid}; "
35
- + 'model=ANDROID-SDK-BUILT-FOR-X86; screen_resolution=1080x1920; sim=310260/1/us; onestore=false; uvc2={"volume":5,"network_operator":"310260","is_roaming":"false","va":[],"brightness":102,"totalMemory":30866040,"batteryPct":1,"webviewVersion":"83.0.4103.106"}'
36
+ + "model=SDK_GPHONE_X86_64; screen_resolution=1080x1920; sim=310260/1/us; onestore=false; uvc3=null"
36
37
  )
37
38
  self.app_platform = "android"
38
- self.app_version_number = "10.0.3"
39
+ self.app_version_number = self.get_version()
39
40
  self.app_language = "en"
40
41
  self.app_version = (
41
42
  f"{self.app_platform}/{self.app_version_number}/{self.app_language}"
@@ -44,7 +45,7 @@ class GetKakaoAuth:
44
45
  self.headers = {
45
46
  "Host": "katalk.kakao.com",
46
47
  "Accept-Language": "en",
47
- "User-Agent": "KT/10.0.3 An/11 en",
48
+ "User-Agent": f"KT/{self.app_version_number} An/11 en",
48
49
  "Device-Info": self.device_info,
49
50
  "A": self.app_version,
50
51
  "C": self.uuid_c,
@@ -52,6 +53,20 @@ class GetKakaoAuth:
52
53
  "Connection": "close",
53
54
  }
54
55
 
56
+ def get_version(self) -> str:
57
+ # It is difficult to get app version number from Google Play
58
+ r = requests.get(
59
+ "https://apkpure.net/kakaotalk-messenger/com.kakao.talk/versions"
60
+ )
61
+ soup = BeautifulSoup(r.text, "html.parser")
62
+ for li in soup.find_all("li"):
63
+ a = li.find("a", class_="dt-version-icon")
64
+ if a is None:
65
+ continue
66
+ if "/kakaotalk-messenger/com.kakao.talk/download/" in a.get("href", ""):
67
+ return a.get("href").split("/")[-1]
68
+ return "25.2.1"
69
+
55
70
  def login(self) -> bool:
56
71
  self.cb_msg("Logging in")
57
72
 
@@ -96,7 +111,6 @@ class GetKakaoAuth:
96
111
  "countryCode": self.country_code,
97
112
  "countryIso": self.country_iso,
98
113
  "phoneNumber": self.phone_number,
99
- "method": "sms",
100
114
  "termCodes": [],
101
115
  "simPhoneNumber": f"+{self.country_code}{self.phone_number}",
102
116
  }
@@ -244,6 +258,21 @@ class GetKakaoAuth:
244
258
  self.cb_msg_block(f"Failed at passcode callback: {response.text}")
245
259
  return False
246
260
 
261
+ return True
262
+
263
+ def skip_restoration(self) -> bool:
264
+ self.cb_msg("Skip restoration")
265
+
266
+ response = requests.post(
267
+ "https://katalk.kakao.com/android/account2/skip-restoration",
268
+ headers=self.headers,
269
+ )
270
+ response_json = json.loads(response.text)
271
+
272
+ if response_json["status"] != 0:
273
+ self.cb_msg_block(f"Failed at skip restoration: {response.text}")
274
+ return False
275
+
247
276
  self.nickname = response_json.get("viewData", {}).get("nickname")
248
277
 
249
278
  if self.nickname is None:
@@ -288,6 +317,7 @@ class GetKakaoAuth:
288
317
  self.enter_phone,
289
318
  self.confirm_device_change,
290
319
  self.passcode_callback,
320
+ self.skip_restoration,
291
321
  self.get_profile,
292
322
  )
293
323
 
@@ -105,7 +105,7 @@ class GetKakaoDesktopAuth:
105
105
  return None, msg
106
106
 
107
107
  auth_token = None
108
- for i in re.finditer(b"\x00authorization\x00", s):
108
+ for i in re.finditer(b"authorization: ", s):
109
109
  auth_token_addr = i.start() + 15
110
110
 
111
111
  auth_token_bytes = s[auth_token_addr : auth_token_addr + 200]
@@ -22,9 +22,7 @@ class UrlDetect:
22
22
  ):
23
23
  return "line"
24
24
 
25
- if domain in ("e.kakao.com", "emoticon.kakao.com") or url.startswith(
26
- "kakaotalk://store/emoticon/"
27
- ):
25
+ if domain in ("e.kakao.com", "emoticon.kakao.com"):
28
26
  return "kakao"
29
27
 
30
28
  if domain == "stickers.viber.com":
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env python3
2
2
 
3
- __version__ = "2.11.7"
3
+ __version__ = "2.11.9"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sticker-convert
3
- Version: 2.11.7
3
+ Version: 2.11.9
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>
@@ -371,10 +371,9 @@ Requires-Dist: beautifulsoup4~=4.13.3
371
371
  Requires-Dist: cryptg~=0.5.0.post0
372
372
  Requires-Dist: rookiepy~=0.5.6
373
373
  Requires-Dist: httpx~=0.28.1
374
- Requires-Dist: imagequant~=1.1.3
374
+ Requires-Dist: imagequant~=1.1.4
375
375
  Requires-Dist: memory-tempfile~=2.2.3
376
376
  Requires-Dist: mergedeep~=1.3.4
377
- Requires-Dist: mini-racer~=0.12.4
378
377
  Requires-Dist: numpy>=1.22.4
379
378
  Requires-Dist: Pillow~=11.1.0
380
379
  Requires-Dist: pyoxipng~=9.0.0
@@ -384,6 +383,7 @@ Requires-Dist: PyMemoryEditor~=1.5.22
384
383
  Requires-Dist: requests~=2.32.3
385
384
  Requires-Dist: rlottie_python~=1.3.6
386
385
  Requires-Dist: signalstickers-client-fork-laggykiller~=3.3.0.post2
386
+ Requires-Dist: socksio~=1.0.0
387
387
  Requires-Dist: telethon~=1.39.0
388
388
  Requires-Dist: tqdm~=4.67.1
389
389
  Requires-Dist: ttkbootstrap-fork-laggykiller~=1.5.1
@@ -436,7 +436,7 @@ Dynamic: license-file
436
436
  | [Telegram](docs/guide_telegram.md) | ✅ (Require `token` or telethon) | ✅ (Require `token` & `user_id` or telethon or manually) |
437
437
  | [WhatsApp](docs/guide_whatsapp.md) | ⭕ (By Android or WhatsApp Web) | ⭕ (Create `.wastickers`, import by Sticker Maker) |
438
438
  | [Line](docs/guide_line.md) | ✅ | 🚫 (Need to submit for manual approval) |
439
- | [Kakao](docs/guide_kakao.md) | ✅ (Need 'share link' for animated) | 🚫 (Need to submit for manual approval) |
439
+ | [Kakao](docs/guide_kakao.md) | ✅ (Need 'auth_token' for animated) | 🚫 (Need to submit for manual approval) |
440
440
  | [Viber](docs/guide_viber.md) | ✅ | ✅ (Require `viber_auth`) |
441
441
  | [Discord](docs/guide_discord.md) | ✅ (Require `token`) | 🚫 |
442
442
  | [iMessage](docs/guide_imessage.md) | 🚫 | ⭕ (Create Xcode stickerpack project for sideload) |
@@ -461,7 +461,7 @@ Dynamic: license-file
461
461
  - For more information: https://github.com/doubleplusc/Line-sticker-downloader
462
462
  - Upload: Not supported. You need to manually submit sticker pack for approval before you can use in app.
463
463
  - Kakao
464
- - Download: Supported (e.g. `https://e.kakao.com/t/xxxxx` OR `kakaotalk://store/emoticon/4404400` OR `https://emoticon.kakao.com/items/xxxxx` OR `4404400`). It is rather complicated, learn more from [docs/guide_kakao.md](docs/guide_kakao.md)
464
+ - Download: Supported (e.g. `https://e.kakao.com/t/xxxxx` OR `https://emoticon.kakao.com/items/xxxxx` OR `4404400`). It is rather complicated, learn more from [docs/guide_kakao.md](docs/guide_kakao.md)
465
465
  - Upload: Not supported. You need to manually submit sticker pack for approval before you can use in app.
466
466
  - Viber
467
467
  - Download: Supported (e.g. `https://stickers.viber.com/pages/example` OR `https://stickers.viber.com/pages/custom-sticker-packs/example`)
@@ -549,7 +549,7 @@ Input options:
549
549
  OR https://line.me/S/sticker/1234/?lang=en OR line://shop/detail/1234 OR 1234)
550
550
  --download-kakao DOWNLOAD_KAKAO
551
551
  Download kakao stickers from a URL / ID as input
552
- (Example: https://e.kakao.com/t/xxxxx OR kakaotalk://store/emoticon/4404400
552
+ (Example: https://e.kakao.com/t/xxxxx
553
553
  OR https://emoticon.kakao.com/items/xxxxx OR 4404400)
554
554
  --download-viber DOWNLOAD_VIBER
555
555
  Download viber stickers from a URL as input
@@ -1,16 +1,16 @@
1
1
  sticker_convert/__init__.py,sha256=iQnv6UOOA69c3soAn7ZOnAIubTIQSUxtq1Uhh8xRWvU,102
2
2
  sticker_convert/__main__.py,sha256=elDCMvU27letiYs8jPUpxaCq5puURnvcDuqGsAAb6_w,592
3
3
  sticker_convert/cli.py,sha256=MWzq9QJJ7HYBD73DmSgRIPo-u58mTGEIoUUpJKNjI0Q,22358
4
- sticker_convert/converter.py,sha256=K9VOVyPGHykkknujjCJ3i4HcUre6Aqm2SemjWZ4jMxg,36752
4
+ sticker_convert/converter.py,sha256=aK06RPz5DQb5p-8IvsXqZQrvL6miKt4otX9vcdXBfqc,36784
5
5
  sticker_convert/definitions.py,sha256=ZhP2ALCEud-w9ZZD4c3TDG9eHGPZyaAL7zPUsJAbjtE,2073
6
6
  sticker_convert/gui.py,sha256=D9L-lFif4P4MANglis_wpjkzlUuGPuq8AybWGyPVP8E,33824
7
- sticker_convert/job.py,sha256=FAjQPYr7anibaGovLwuFJdquq5ameDkcn7fQQpFIYQY,27790
7
+ sticker_convert/job.py,sha256=gEd6yF8WPUR1_7q9SVhnwdD5usrDxwowNnR5q9uS8Yc,28011
8
8
  sticker_convert/job_option.py,sha256=NysZtKVVG7EzRkLnVaeYJY0uNlYKFmjoststB1cvVrY,8020
9
- sticker_convert/version.py,sha256=0RaydMSz6T9tM7fxULD9zW3LWJAm_xCsH_Uf0Mbl9cQ,47
9
+ sticker_convert/version.py,sha256=s_bdZbn3ID-sOa5uFfhycit0Dt5g-Qr6b7Ymksvt7wU,47
10
10
  sticker_convert/downloaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  sticker_convert/downloaders/download_base.py,sha256=MI5pCT_tkfoaFlrD1oNynDj1Rv1CK0APuNVElTEAEis,5110
12
12
  sticker_convert/downloaders/download_discord.py,sha256=6AFpLAYL2hRvVcsqUtzDUC31U66U02ZcnKXDnZRi2jk,3496
13
- sticker_convert/downloaders/download_kakao.py,sha256=qc2Ldv_zrM6H_o0dVI8Qp8xuakTNuEYPwqFfC7l_ehc,12530
13
+ sticker_convert/downloaders/download_kakao.py,sha256=3Q8BYAu4kbYTSOd10iB-ym6OwGGjwc8GkDwP0lGnmks,12335
14
14
  sticker_convert/downloaders/download_line.py,sha256=c-hTzEarGQP0b-pnPl29NuSKcaZWUeRo_94YpJzz72M,17911
15
15
  sticker_convert/downloaders/download_signal.py,sha256=3wv-BLd4qggly4AdtwV8f3vUpCVZ-8GnoPLoWngY3Pk,3728
16
16
  sticker_convert/downloaders/download_telegram.py,sha256=iGmOcVjU2Ai19t1lyDY2JhQIc--O5XMyNCGXZAA4DVY,2028
@@ -73,7 +73,7 @@ sticker_convert/resources/appicon.png,sha256=6XBEQz7PnerqS43aRkwpWolFG4WvKMuQ-st
73
73
  sticker_convert/resources/compression.json,sha256=hZY906wUmdAuflVhUowm9EW6h40BzuD4LBNe-Mpd9V8,14184
74
74
  sticker_convert/resources/emoji.json,sha256=q9DRFdVJfm7feZW7ZM6Xa5P1QsMvrn0PbBVU9jKcJKI,422720
75
75
  sticker_convert/resources/help.json,sha256=oI8OIB0aFKgDw4bTKT69zDNshOjf0-bM5el3nbJTzMs,7225
76
- sticker_convert/resources/input.json,sha256=NUyIpOGPtP_goDi8FwmbJPuCyLYtDDy83vTpzz5lnb0,3895
76
+ sticker_convert/resources/input.json,sha256=BYHYDqMLZuQnA3MF0ViudGpkSuAG8OMS7L-7hxC3K3o,3858
77
77
  sticker_convert/resources/memdump_linux.sh,sha256=YbdX5C5RyCnoeDUE6JgTo8nQXKhrUw5-kFDx5bQp9tY,651
78
78
  sticker_convert/resources/memdump_windows.ps1,sha256=CfyNSSEW3HJOkTu-mKrP3qh5aprN-1VCBfj-R1fELA0,302
79
79
  sticker_convert/resources/output.json,sha256=SC_3vtEBJ79R7q0vy_p33eLsGFEyBsSOai0Hy7mLqG8,2208
@@ -88,10 +88,10 @@ sticker_convert/utils/callback.py,sha256=spYUGlklOs1yPZAxoqwOWgR1sdimpfM8a27if3T
88
88
  sticker_convert/utils/chrome_remotedebug.py,sha256=AuAb-wMHiu7RDZ0YWD-WvIUc2CoR_TLsPVj4cdI2Kuw,5056
89
89
  sticker_convert/utils/emoji.py,sha256=AqB26JY-PkYzNwPLReSnqLiQKe-bR9UXnLclAbgubJ8,367
90
90
  sticker_convert/utils/process.py,sha256=EAQZ9WpiKmkvToIv8G1HNY4V7m0jXyyePTmeP2XOZzE,4688
91
- sticker_convert/utils/url_detect.py,sha256=bgW7tM3_j8zv4uKPPhyyOkYoNdljUdqDkbyBMqAZoEI,947
91
+ sticker_convert/utils/url_detect.py,sha256=vCbhQbcW1X_UtdfQlICGY8pMX34KQ6sCtDJZbp0NrSg,876
92
92
  sticker_convert/utils/auth/get_discord_auth.py,sha256=i5SaXU9Ly6Ci_iBYCYIPcQB5FaAehi9DidB4jbKJMVg,4215
93
- sticker_convert/utils/auth/get_kakao_auth.py,sha256=ipAZ1DUd5CMTpUoxRXHVOFC3DKIpxwxpTYAfrOJ6UZ8,9829
94
- sticker_convert/utils/auth/get_kakao_desktop_auth.py,sha256=VbEec-yujlLJOBeM55Rm5deu4YE9G9Oi_AKTwOsmUMg,5815
93
+ sticker_convert/utils/auth/get_kakao_auth.py,sha256=Wok5sp0GGBgTwwlfYB7lVq82ndBAOGTcqsWEaWAXFNE,10760
94
+ sticker_convert/utils/auth/get_kakao_desktop_auth.py,sha256=BBfFI08cVOmi6akenQwMI0Uiatmn76wI8QYHnbvopxg,5809
95
95
  sticker_convert/utils/auth/get_line_auth.py,sha256=8l8ha2vQmk3rHGvDE7PkcxQXbH3oe62LKbI3qVUtvqc,2196
96
96
  sticker_convert/utils/auth/get_signal_auth.py,sha256=oDTcIUcRM8_zfmR6UoBvzBhIscwLRe7n2zw4aw0j8_Q,4564
97
97
  sticker_convert/utils/auth/get_viber_auth.py,sha256=mUTrcxq5bTrzSXEVaeTPqVQIdZdwvIhrbMgBUb7dU30,8173
@@ -107,9 +107,9 @@ sticker_convert/utils/media/apple_png_normalize.py,sha256=LbrQhc7LlYX4I9ek4XJsZE
107
107
  sticker_convert/utils/media/codec_info.py,sha256=XoEWBfPWTzr4zSVQIU1XF1yh5viHxH5FytNEpdZR38c,14874
108
108
  sticker_convert/utils/media/decrypt_kakao.py,sha256=4wq9ZDRnFkx1WmFZnyEogBofiLGsWQM_X69HlA36578,1947
109
109
  sticker_convert/utils/media/format_verify.py,sha256=oM32P186tWe9YxvBQRPr8D3FEmBN3b2rEe_2S_MwxyQ,6236
110
- sticker_convert-2.11.7.dist-info/licenses/LICENSE,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
111
- sticker_convert-2.11.7.dist-info/METADATA,sha256=cu9-d2XmGROc77_PQ_kWHvLoSjmFHkPzk7wvw4QTMEQ,53564
112
- sticker_convert-2.11.7.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
113
- sticker_convert-2.11.7.dist-info/entry_points.txt,sha256=MNJ7XyC--ugxi5jS1nzjDLGnxCyLuaGdsVLnJhDHCqs,66
114
- sticker_convert-2.11.7.dist-info/top_level.txt,sha256=r9vfnB0l1ZnH5pTH5RvkobnK3Ow9m0RsncaOMAtiAtk,16
115
- sticker_convert-2.11.7.dist-info/RECORD,,
110
+ sticker_convert-2.11.9.dist-info/licenses/LICENSE,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
111
+ sticker_convert-2.11.9.dist-info/METADATA,sha256=zR97LNr5SeYo7Bn2PbX8uv1yseWKBehqvFcoFv-vAWc,53484
112
+ sticker_convert-2.11.9.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
113
+ sticker_convert-2.11.9.dist-info/entry_points.txt,sha256=MNJ7XyC--ugxi5jS1nzjDLGnxCyLuaGdsVLnJhDHCqs,66
114
+ sticker_convert-2.11.9.dist-info/top_level.txt,sha256=r9vfnB0l1ZnH5pTH5RvkobnK3Ow9m0RsncaOMAtiAtk,16
115
+ sticker_convert-2.11.9.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (77.0.3)
2
+ Generator: setuptools (78.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5