sticker-convert 2.11.0__py3-none-any.whl → 2.11.1__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
sticker_convert/cli.py CHANGED
@@ -71,26 +71,26 @@ class CLI:
71
71
 
72
72
  parser_input = parser.add_argument_group("Input options")
73
73
  for k, v_str in self.help["input"].items():
74
- parser_input.add_argument(f'--{k.replace("_", "-")}', dest=k, help=v_str)
74
+ parser_input.add_argument(f"--{k.replace('_', '-')}", dest=k, help=v_str)
75
75
  parser_input_src = parser_input.add_mutually_exclusive_group()
76
76
  for k, v_dict in self.input_presets.items():
77
77
  if k == "local":
78
78
  continue
79
79
  parser_input_src.add_argument(
80
- f'--download-{k.replace("_", "-")}',
80
+ f"--download-{k.replace('_', '-')}",
81
81
  dest=f"download_{k}",
82
- help=f'{v_dict["help"]}\n({v_dict["example"]})',
82
+ help=f"{v_dict['help']}\n({v_dict['example']})",
83
83
  )
84
84
 
85
85
  parser_output = parser.add_argument_group("Output options")
86
86
  for k, v_str in self.help["output"].items():
87
- parser_output.add_argument(f'--{k.replace("_", "-")}', dest=k, help=v_str)
87
+ parser_output.add_argument(f"--{k.replace('_', '-')}", dest=k, help=v_str)
88
88
  parser_output_dst = parser_output.add_mutually_exclusive_group()
89
89
  for k, v_dict in self.output_presets.items():
90
90
  if k == "local":
91
91
  continue
92
92
  parser_output_dst.add_argument(
93
- f'--export-{k.replace("_", "-")}',
93
+ f"--export-{k.replace('_', '-')}",
94
94
  dest=f"export_{k}",
95
95
  action="store_true",
96
96
  help=v_dict["help"],
@@ -154,7 +154,7 @@ class CLI:
154
154
  else:
155
155
  continue
156
156
  parser_comp.add_argument(
157
- f'--{k.replace("_", "-")}',
157
+ f"--{k.replace('_', '-')}",
158
158
  **keyword_args,
159
159
  dest=k,
160
160
  help=v,
@@ -181,7 +181,7 @@ class CLI:
181
181
  if k in flags_cred_bool:
182
182
  keyword_args = {"action": "store_true"}
183
183
  parser_cred.add_argument(
184
- f'--{k.replace("_", "-")}',
184
+ f"--{k.replace('_', '-')}",
185
185
  **keyword_args,
186
186
  dest=k,
187
187
  help=v,
@@ -24,8 +24,7 @@ if TYPE_CHECKING:
24
24
  MSG_START_COMP = "[I] Start compressing {} -> {}"
25
25
  MSG_SKIP_COMP = "[S] Compatible file found, skip compress and just copy {} -> {}"
26
26
  MSG_COMP = (
27
- "[C] Compressing {} -> {} res={}x{}, "
28
- "quality={}, fps={}, color={} (step {}-{}-{})"
27
+ "[C] Compressing {} -> {} res={}x{}, quality={}, fps={}, color={} (step {}-{}-{})"
29
28
  )
30
29
  MSG_REDO_COMP = "[{}] Compressed {} -> {} but size {} {} limit {}, recompressing"
31
30
  MSG_DONE_COMP = "[S] Successful compression {} -> {} size {} (step {})"
@@ -909,10 +908,10 @@ class StickerConvert:
909
908
  def _quantize_by_imagequant(self, image: Image.Image) -> Image.Image:
910
909
  import imagequant # type: ignore
911
910
 
912
- assert self.quality
913
- assert self.opt_comp.quality_min
914
- assert self.opt_comp.quality_max
915
- assert self.color
911
+ assert isinstance(self.quality, int)
912
+ assert isinstance(self.opt_comp.quality_min, int)
913
+ assert isinstance(self.opt_comp.quality_max, int)
914
+ assert isinstance(self.color, int)
916
915
 
917
916
  dither = 1 - (self.quality - self.opt_comp.quality_min) / (
918
917
  self.opt_comp.quality_max - self.opt_comp.quality_min
@@ -104,7 +104,7 @@ class DownloadBase:
104
104
  self.cb.put(f"Downloaded {url}")
105
105
  else:
106
106
  self.cb.put(
107
- f"Error {response.status_code}: {url} (tried {retry+1}/{retries} times)"
107
+ f"Error {response.status_code}: {url} (tried {retry + 1}/{retries} times)"
108
108
  )
109
109
 
110
110
  if results is not None:
@@ -153,7 +153,7 @@ class DownloadBase:
153
153
  break
154
154
  except requests.exceptions.RequestException as e:
155
155
  self.cb.put(
156
- f"Cannot download {url} (tried {retry+1}/{retries} times): {e}"
156
+ f"Cannot download {url} (tried {retry + 1}/{retries} times): {e}"
157
157
  )
158
158
 
159
159
  if not result:
sticker_convert/job.py CHANGED
@@ -346,7 +346,7 @@ class Job:
346
346
  if not MetadataHandler.check_metadata_provided(
347
347
  self.opt_input.dir, input_option, metadata
348
348
  ):
349
- error_msg += f'[X] {output_presets[output_option]["full_name"]} requires {metadata}\n'
349
+ error_msg += f"[X] {output_presets[output_option]['full_name']} requires {metadata}\n"
350
350
  if self.opt_input.option == "local":
351
351
  error_msg += f" {metadata} was not supplied and {metadata}.txt is absent\n"
352
352
  else:
@@ -356,7 +356,7 @@ class Job:
356
356
  )
357
357
  error_msg += f" Create {metadata}.txt with the {metadata} name\n"
358
358
  else:
359
- info_msg += f'[!] {output_presets[output_option]["full_name"]} requires {metadata}\n'
359
+ info_msg += f"[!] {output_presets[output_option]['full_name']} requires {metadata}\n"
360
360
  if self.opt_input.option == "local":
361
361
  info_msg += f" {metadata} was not supplied but {metadata}.txt is present\n"
362
362
  info_msg += f" Using {metadata} name in {metadata}.txt\n"
@@ -1,6 +1,5 @@
1
1
  #!/usr/bin/env python3
2
2
  import copy
3
- import shutil
4
3
  import zipfile
5
4
  from pathlib import Path
6
5
  from typing import Any, List, Tuple
@@ -9,7 +8,6 @@ from sticker_convert.converter import StickerConvert
9
8
  from sticker_convert.job_option import CompOption, CredOption, OutputOption
10
9
  from sticker_convert.uploaders.upload_base import UploadBase
11
10
  from sticker_convert.utils.callback import CallbackProtocol, CallbackReturn
12
- from sticker_convert.utils.files.cache_store import CacheStore
13
11
  from sticker_convert.utils.files.metadata_handler import MetadataHandler
14
12
  from sticker_convert.utils.files.sanitize_filename import sanitize_filename
15
13
  from sticker_convert.utils.media.codec_info import CodecInfo
@@ -70,8 +68,65 @@ class CompressWastickers(UploadBase):
70
68
  stickers_total = 0
71
69
  for pack_title, stickers in packs.items():
72
70
  stickers_total += len(stickers)
73
- # Originally the Sticker Maker application name the files with int(time.time())
74
- with CacheStore.get_cache_store(path=self.opt_comp.cache_dir) as tempdir:
71
+ out_f = Path(
72
+ self.opt_output.dir, sanitize_filename(pack_title + ".wastickers")
73
+ ).as_posix()
74
+
75
+ MetadataHandler.set_metadata(
76
+ self.opt_output.dir, author=author, title=title, newline=True
77
+ )
78
+ with zipfile.ZipFile(out_f, "w", zipfile.ZIP_DEFLATED) as zipf:
79
+ cover_opt_comp_merged = copy.deepcopy(self.opt_comp)
80
+ cover_opt_comp_merged.merge(self.spec_cover)
81
+
82
+ cover_path_old = MetadataHandler.get_cover(self.opt_output.dir)
83
+ cover_path_new = Path("bytes.png")
84
+ if cover_path_old is None:
85
+ # First image in the directory, extracting first frame
86
+ first_image = [
87
+ i
88
+ for i in sorted(self.opt_output.dir.iterdir())
89
+ if Path(self.opt_output.dir, i.name).is_file()
90
+ and i.suffix not in (".txt", ".m4a", ".wastickers")
91
+ ][0]
92
+ self.cb.put(f"Creating cover using {first_image.name}")
93
+ success, _, cover_data, _ = StickerConvert.convert(
94
+ Path(self.opt_output.dir, first_image),
95
+ cover_path_new,
96
+ cover_opt_comp_merged,
97
+ self.cb,
98
+ self.cb_return,
99
+ )
100
+ if not success:
101
+ self.cb.put(
102
+ f"Warning: Cannot compress cover {first_image.name}, unable to create .wastickers"
103
+ )
104
+ continue
105
+ else:
106
+ if not FormatVerify.check_file(
107
+ cover_path_old, spec=self.spec_cover
108
+ ):
109
+ success, _, cover_data, _ = StickerConvert.convert(
110
+ cover_path_old,
111
+ cover_path_new,
112
+ cover_opt_comp_merged,
113
+ self.cb,
114
+ self.cb_return,
115
+ )
116
+ if not success:
117
+ self.cb.put(
118
+ f"Warning: Cannot compress cover {cover_path_old.name}, unable to create .wastickers"
119
+ )
120
+ continue
121
+ else:
122
+ with open(cover_path_old, "rb") as f:
123
+ cover_data = f.read()
124
+
125
+ assert isinstance(cover_data, bytes)
126
+ zipf.writestr("tray.png", cover_data)
127
+ zipf.write(Path(self.opt_output.dir, "author.txt"), "author.txt")
128
+ zipf.write(Path(self.opt_output.dir, "title.txt"), "title.txt")
129
+
75
130
  for num, src in enumerate(stickers):
76
131
  self.cb.put(f"Verifying {src} for compressing into .wastickers")
77
132
 
@@ -79,72 +134,37 @@ class CompressWastickers(UploadBase):
79
134
  ext = ".webp"
80
135
  else:
81
136
  ext = ".png"
137
+ dst = f"bytes{ext}"
82
138
 
83
- dst = Path(tempdir, f"sticker_{num+1}{ext}")
84
-
85
- if FormatVerify.check_file(
86
- src, spec=self.webp_spec
87
- ) or FormatVerify.check_file(src, spec=self.png_spec):
88
- shutil.copy(src, dst)
89
- else:
90
- StickerConvert.convert(
139
+ if not (
140
+ FormatVerify.check_file(src, spec=self.webp_spec)
141
+ or FormatVerify.check_file(src, spec=self.png_spec)
142
+ ):
143
+ success, _, image_data, _ = StickerConvert.convert(
91
144
  Path(src),
92
145
  Path(dst),
93
146
  self.opt_comp_merged,
94
147
  self.cb,
95
148
  self.cb_return,
96
149
  )
150
+ assert isinstance(image_data, bytes)
151
+ if not success:
152
+ self.cb.put(
153
+ f"Warning: Cannot compress file {Path(src).name}, skip this file..."
154
+ )
155
+ continue
156
+ else:
157
+ with open(src, "rb") as f:
158
+ image_data = f.read()
97
159
 
98
- out_f = Path(
99
- self.opt_output.dir, sanitize_filename(pack_title + ".wastickers")
100
- ).as_posix()
101
-
102
- self.add_metadata(Path(tempdir), pack_title, author)
103
- with zipfile.ZipFile(out_f, "w", zipfile.ZIP_DEFLATED) as zipf:
104
- for file in Path(tempdir).iterdir():
105
- file_path = Path(tempdir, file.name)
106
- zipf.write(file_path, arcname=file_path.name)
160
+ # Originally the Sticker Maker application name the files with int(time.time())
161
+ zipf.writestr(f"sticker_{num + 1}{ext}", image_data)
107
162
 
108
163
  self.cb.put((out_f))
109
164
  urls.append(out_f)
110
165
 
111
166
  return stickers_total, stickers_total, urls
112
167
 
113
- def add_metadata(self, pack_dir: Path, title: str, author: str) -> None:
114
- opt_comp_merged = copy.deepcopy(self.opt_comp)
115
- opt_comp_merged.merge(self.spec_cover)
116
-
117
- cover_path_old = MetadataHandler.get_cover(self.opt_output.dir)
118
- cover_path_new = Path(pack_dir, "tray.png")
119
- if cover_path_old:
120
- if FormatVerify.check_file(cover_path_old, spec=self.spec_cover):
121
- shutil.copy(cover_path_old, cover_path_new)
122
- else:
123
- StickerConvert.convert(
124
- cover_path_old,
125
- cover_path_new,
126
- opt_comp_merged,
127
- self.cb,
128
- self.cb_return,
129
- )
130
- else:
131
- # First image in the directory, extracting first frame
132
- first_image = [
133
- i
134
- for i in sorted(self.opt_output.dir.iterdir())
135
- if Path(self.opt_output.dir, i.name).is_file()
136
- and i.suffix not in (".txt", ".m4a", ".wastickers")
137
- ][0]
138
- StickerConvert.convert(
139
- Path(self.opt_output.dir, first_image),
140
- cover_path_new,
141
- opt_comp_merged,
142
- self.cb,
143
- self.cb_return,
144
- )
145
-
146
- MetadataHandler.set_metadata(pack_dir, author=author, title=title, newline=True)
147
-
148
168
  @staticmethod
149
169
  def start(
150
170
  opt_output: OutputOption,
@@ -1,7 +1,6 @@
1
1
  #!/usr/bin/env python3
2
2
  import copy
3
3
  import json
4
- import shutil
5
4
  import zipfile
6
5
  from pathlib import Path
7
6
  from typing import Any, Dict, List, Tuple
@@ -12,7 +11,6 @@ from sticker_convert.converter import StickerConvert
12
11
  from sticker_convert.job_option import CompOption, CredOption, OutputOption
13
12
  from sticker_convert.uploaders.upload_base import UploadBase
14
13
  from sticker_convert.utils.callback import CallbackProtocol, CallbackReturn
15
- from sticker_convert.utils.files.cache_store import CacheStore
16
14
  from sticker_convert.utils.files.metadata_handler import MetadataHandler
17
15
  from sticker_convert.utils.files.sanitize_filename import sanitize_filename
18
16
  from sticker_convert.utils.media.format_verify import FormatVerify
@@ -96,31 +94,32 @@ class UploadViber(UploadBase):
96
94
  stickers_ok = 0
97
95
  for pack_title, stickers in packs.items():
98
96
  stickers_total += len(stickers)
99
- with CacheStore.get_cache_store(path=self.opt_comp.cache_dir) as tempdir:
97
+ out_f = Path(
98
+ self.opt_output.dir, sanitize_filename(pack_title + ".zip")
99
+ ).as_posix()
100
+ with zipfile.ZipFile(out_f, "w", zipfile.ZIP_DEFLATED) as zipf:
100
101
  for num, src in enumerate(stickers):
101
102
  self.cb.put(f"Verifying {src} for uploading to Viber")
102
103
 
103
- dst = Path(tempdir, f"{str(num).zfill(2)}.png")
104
-
105
- if FormatVerify.check_file(src, spec=self.png_spec):
106
- shutil.copy(src, dst)
107
- else:
108
- StickerConvert.convert(
109
- Path(src),
110
- Path(dst),
104
+ if not FormatVerify.check_file(src, spec=self.png_spec):
105
+ success, _, image_data, _ = StickerConvert.convert(
106
+ src,
107
+ Path("bytes.png"),
111
108
  self.opt_comp_merged,
112
109
  self.cb,
113
110
  self.cb_return,
114
111
  )
112
+ assert isinstance(image_data, bytes)
113
+ if not success:
114
+ self.cb.put(
115
+ f"Warning: Cannot compress file {src.name}, skip this file..."
116
+ )
117
+ continue
118
+ else:
119
+ with open(src, "rb") as f:
120
+ image_data = f.read()
115
121
 
116
- out_f = Path(
117
- self.opt_output.dir, sanitize_filename(pack_title + ".zip")
118
- ).as_posix()
119
-
120
- with zipfile.ZipFile(out_f, "w", zipfile.ZIP_DEFLATED) as zipf:
121
- for file in Path(tempdir).iterdir():
122
- file_path = Path(tempdir, file.name)
123
- zipf.write(file_path, arcname=file_path.name)
122
+ zipf.writestr(f"{str(num).zfill(2)}.png", image_data)
124
123
 
125
124
  upload_data = copy.deepcopy(upload_data_base)
126
125
  upload_data["title"] = pack_title
@@ -76,7 +76,7 @@ class BotAPI(TelegramAPI):
76
76
  self.application = ( # type: ignore
77
77
  ApplicationBuilder()
78
78
  .token(opt_cred.telegram_token)
79
- .rate_limiter(AIORateLimiter(max_retries=3))
79
+ .rate_limiter(AIORateLimiter(overall_max_rate=4, max_retries=3))
80
80
  .connect_timeout(self.timeout)
81
81
  .pool_timeout(self.timeout)
82
82
  .read_timeout(self.timeout)
@@ -389,13 +389,15 @@ class TelethonAPI(TelegramAPI):
389
389
  sent_message = cast(Message, await self.client.send_file("Stickers", msg)) # type: ignore
390
390
 
391
391
  for _ in range(5):
392
+ # https://core.telegram.org/bots/faq#my-bot-is-hitting-limits-how-do-i-avoid-this
393
+ # In a single chat, avoid sending more than one message per second.
394
+ time.sleep(1)
392
395
  last_message = cast(
393
396
  List[Message],
394
397
  await self.client.get_messages("Stickers", 1), # type: ignore
395
398
  )[0]
396
399
  if sent_message.id != last_message.id:
397
400
  return last_message.message
398
- time.sleep(1)
399
401
 
400
402
  return "timeout"
401
403
 
@@ -264,7 +264,7 @@ class MetadataHandler:
264
264
  if len(anim_stickers) == file_per_anim_pack or (
265
265
  finished_all and len(anim_stickers) > 0
266
266
  ):
267
- suffix = f'{"-anim" if image_present else ""}{"-" + str(anim_pack_count) if anim_pack_count > 0 else ""}'
267
+ suffix = f"{'-anim' if image_present else ''}{'-' + str(anim_pack_count) if anim_pack_count > 0 else ''}"
268
268
  title_current = str(title) + suffix
269
269
  packs[title_current] = anim_stickers.copy()
270
270
  anim_stickers = []
@@ -272,7 +272,7 @@ class MetadataHandler:
272
272
  if len(image_stickers) == file_per_image_pack or (
273
273
  finished_all and len(image_stickers) > 0
274
274
  ):
275
- suffix = f'{"-image" if anim_present else ""}{"-" + str(image_pack_count) if image_pack_count > 0 else ""}'
275
+ suffix = f"{'-image' if anim_present else ''}{'-' + str(image_pack_count) if image_pack_count > 0 else ''}"
276
276
  title_current = str(title) + suffix
277
277
  packs[title_current] = image_stickers.copy()
278
278
  image_stickers = []
@@ -292,7 +292,7 @@ class MetadataHandler:
292
292
  if len(stickers) == file_per_pack or (
293
293
  finished_all and len(stickers) > 0
294
294
  ):
295
- suffix = f'{"-" + str(pack_count) if pack_count > 0 else ""}'
295
+ suffix = f"{'-' + str(pack_count) if pack_count > 0 else ''}"
296
296
  title_current = str(title) + suffix
297
297
  packs[title_current] = stickers.copy()
298
298
  stickers = []
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env python3
2
2
 
3
- __version__ = "2.11.0"
3
+ __version__ = "2.11.1"
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: sticker-convert
3
- Version: 2.11.0
3
+ Version: 2.11.1
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>
@@ -364,7 +364,7 @@ Requires-Python: >=3.9
364
364
  Description-Content-Type: text/markdown
365
365
  License-File: LICENSE
366
366
  Requires-Dist: aiolimiter~=1.2.1
367
- Requires-Dist: anyio~=4.7.0
367
+ Requires-Dist: anyio~=4.8.0
368
368
  Requires-Dist: apngasm_python~=1.3.1
369
369
  Requires-Dist: av~=13.1.0
370
370
  Requires-Dist: beautifulsoup4~=4.12.3
@@ -376,9 +376,9 @@ Requires-Dist: memory-tempfile~=2.2.3
376
376
  Requires-Dist: mergedeep~=1.3.4
377
377
  Requires-Dist: mini-racer~=0.12.4
378
378
  Requires-Dist: numpy>=1.22.4
379
- Requires-Dist: Pillow~=10.4.0
379
+ Requires-Dist: Pillow~=11.1.0
380
380
  Requires-Dist: pyoxipng~=9.0.0
381
- Requires-Dist: python-telegram-bot~=21.9
381
+ Requires-Dist: python-telegram-bot~=21.10
382
382
  Requires-Dist: psutil~=6.1.1
383
383
  Requires-Dist: PyMemoryEditor~=1.5.22
384
384
  Requires-Dist: requests~=2.32.3
@@ -1,14 +1,14 @@
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=t6-7q4umAtiG2zVPkZ83LuEtpmCx4GSfzmeHrSP09N4,22358
4
- sticker_convert/converter.py,sha256=1q0xsIaPlrigk7QS0apYPb7q6XVn8K9Vmm33NBCaDS4,36230
3
+ sticker_convert/cli.py,sha256=MWzq9QJJ7HYBD73DmSgRIPo-u58mTGEIoUUpJKNjI0Q,22358
4
+ sticker_convert/converter.py,sha256=Y2Ypvy1GjGAteLDLEXcbRXP6Z0sgdIjJk3ZssYwa1jw,36291
5
5
  sticker_convert/definitions.py,sha256=ZhP2ALCEud-w9ZZD4c3TDG9eHGPZyaAL7zPUsJAbjtE,2073
6
6
  sticker_convert/gui.py,sha256=7nQ9yxxuTU6EiFicErXA-igVAz3-0qmevvLVHsweJF0,33656
7
- sticker_convert/job.py,sha256=TS2kjYsHe3kXiPAcHWqZVg9VxpECP6eHa_uUwTWhuL8,27617
7
+ sticker_convert/job.py,sha256=9J2a-yEqdISHUmPI1gw5CAdwmlJ9cIecJfzVU40A9VU,27617
8
8
  sticker_convert/job_option.py,sha256=NysZtKVVG7EzRkLnVaeYJY0uNlYKFmjoststB1cvVrY,8020
9
- sticker_convert/version.py,sha256=UnmK32p96-2XKeR1FrK6i-20wgaWMTTRMqiJe64PsnY,47
9
+ sticker_convert/version.py,sha256=B1A0zdNjEP5npHwLfEerwv890gLeBzul8X8eOXThNYg,47
10
10
  sticker_convert/downloaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- sticker_convert/downloaders/download_base.py,sha256=KnCPYlkQNlnjzI6zpaax-F2B7iOaPk0eX0RGftnSAGA,5106
11
+ sticker_convert/downloaders/download_base.py,sha256=MI5pCT_tkfoaFlrD1oNynDj1Rv1CK0APuNVElTEAEis,5110
12
12
  sticker_convert/downloaders/download_discord.py,sha256=6AFpLAYL2hRvVcsqUtzDUC31U66U02ZcnKXDnZRi2jk,3496
13
13
  sticker_convert/downloaders/download_kakao.py,sha256=qc2Ldv_zrM6H_o0dVI8Qp8xuakTNuEYPwqFfC7l_ehc,12530
14
14
  sticker_convert/downloaders/download_line.py,sha256=c-hTzEarGQP0b-pnPl29NuSKcaZWUeRo_94YpJzz72M,17911
@@ -78,11 +78,11 @@ sticker_convert/resources/memdump_linux.sh,sha256=YbdX5C5RyCnoeDUE6JgTo8nQXKhrUw
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
80
80
  sticker_convert/uploaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
- sticker_convert/uploaders/compress_wastickers.py,sha256=JrXlMflJ5HGKSEXLHysxcFtDaXJSDfn9f0S3wftHbz4,6140
81
+ sticker_convert/uploaders/compress_wastickers.py,sha256=Rgl3WzIDJn7oa00nNqeBFDqIHP-cWvgQqET2-kDbf9c,7417
82
82
  sticker_convert/uploaders/upload_base.py,sha256=uQupPn6r4zrlAzpKzzX7CgvZb69ATyrwPKahWOQj0ds,1203
83
83
  sticker_convert/uploaders/upload_signal.py,sha256=Qhay8HS3b9J7DGETcLtNg9kV16BGoSgYC5cX5wJd0ew,6674
84
84
  sticker_convert/uploaders/upload_telegram.py,sha256=WlUyLJlW83XZz6RhA76jHMXA6TNUIEVbPwhi14RTnds,12482
85
- sticker_convert/uploaders/upload_viber.py,sha256=CsFzKQj-olC-xpNLhZxTpg8njs_FDhAk75YpoIFlPGI,6390
85
+ sticker_convert/uploaders/upload_viber.py,sha256=kRvZZCv5WcalOJvz9Mdl2yqi3L5n4joovA39WMWn4qs,6420
86
86
  sticker_convert/uploaders/xcode_imessage.py,sha256=iTTT8gDYOTNkKqXeSWUBuWfxu7xeE418t2Z1YQFR5L0,11365
87
87
  sticker_convert/utils/callback.py,sha256=spYUGlklOs1yPZAxoqwOWgR1sdimpfM8a27if3TaVYk,6155
88
88
  sticker_convert/utils/chrome_remotedebug.py,sha256=tLc1C1u7U3kJvAi1WFK5_3gKcdfg4x6SAkTIX2g87VE,4765
@@ -95,21 +95,21 @@ sticker_convert/utils/auth/get_kakao_desktop_auth.py,sha256=VbEec-yujlLJOBeM55Rm
95
95
  sticker_convert/utils/auth/get_line_auth.py,sha256=8l8ha2vQmk3rHGvDE7PkcxQXbH3oe62LKbI3qVUtvqc,2196
96
96
  sticker_convert/utils/auth/get_signal_auth.py,sha256=9L9kqpfJ4j9B10nJ8iLFKolPd6r_8TsGUDxCpTLR43o,4306
97
97
  sticker_convert/utils/auth/get_viber_auth.py,sha256=mUTrcxq5bTrzSXEVaeTPqVQIdZdwvIhrbMgBUb7dU30,8173
98
- sticker_convert/utils/auth/telegram_api.py,sha256=YrMBEQ7MpLBCYYId8B2D7E7Kh9e8qBGhh-6JHFD8m0c,23975
98
+ sticker_convert/utils/auth/telegram_api.py,sha256=WQi3dat8IZy13nXfyDS25XTS3HKp5BhVzgHimgbPnmw,24169
99
99
  sticker_convert/utils/auth/telethon_setup.py,sha256=3hH0KglsotFBxT3gwFjHiDuREyahFIlmx-ZL1_-zM2A,2714
100
100
  sticker_convert/utils/files/cache_store.py,sha256=etfe614OAhAyrnM5fGeESKq6R88YLNqkqkxSzEmZ0V0,1047
101
101
  sticker_convert/utils/files/json_manager.py,sha256=Vr6pZJdLMkrJJWN99210aduVHb0ILyf0SSTaw4TZqgc,541
102
102
  sticker_convert/utils/files/json_resources_loader.py,sha256=flZFixUXRTrOAhvRQpuSQgmJ69yXL94sxukcowLT1JQ,1049
103
- sticker_convert/utils/files/metadata_handler.py,sha256=KDwzCwSckTob2VacOvzLdu1256WLicmzXgkhfFvRBzo,10108
103
+ sticker_convert/utils/files/metadata_handler.py,sha256=UNCfsbAmN-s4LhMUGlAj-CVCsoDCv4BaP5yQG7R81Jk,10108
104
104
  sticker_convert/utils/files/run_bin.py,sha256=C_KKGtMUTajJnKo4Ia9e6WuWCXSQRdGsVPG-r5GXT_I,1784
105
105
  sticker_convert/utils/files/sanitize_filename.py,sha256=HBklPGsHRJjFQUIC5rYTQsUrsuTtezZXIEA8CPhLP8A,2156
106
106
  sticker_convert/utils/media/apple_png_normalize.py,sha256=LbrQhc7LlYX4I9ek4XJsZE4l0MygBA1jB-PFiYLEkzk,3657
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.0.dist-info/LICENSE,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
111
- sticker_convert-2.11.0.dist-info/METADATA,sha256=I7ZPRQ5yiV_hOEvVLbo-iDKkoXATolWvrk5yoxTGMWQ,53574
112
- sticker_convert-2.11.0.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
113
- sticker_convert-2.11.0.dist-info/entry_points.txt,sha256=MNJ7XyC--ugxi5jS1nzjDLGnxCyLuaGdsVLnJhDHCqs,66
114
- sticker_convert-2.11.0.dist-info/top_level.txt,sha256=r9vfnB0l1ZnH5pTH5RvkobnK3Ow9m0RsncaOMAtiAtk,16
115
- sticker_convert-2.11.0.dist-info/RECORD,,
110
+ sticker_convert-2.11.1.dist-info/LICENSE,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
111
+ sticker_convert-2.11.1.dist-info/METADATA,sha256=KIoxhhqLPn8bsyfpwTptU5l0hxAKsEQYMjUIBvpHZhY,53575
112
+ sticker_convert-2.11.1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
113
+ sticker_convert-2.11.1.dist-info/entry_points.txt,sha256=MNJ7XyC--ugxi5jS1nzjDLGnxCyLuaGdsVLnJhDHCqs,66
114
+ sticker_convert-2.11.1.dist-info/top_level.txt,sha256=r9vfnB0l1ZnH5pTH5RvkobnK3Ow9m0RsncaOMAtiAtk,16
115
+ sticker_convert-2.11.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.6.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5