sticker-convert 2.11.0__py3-none-any.whl → 2.11.1__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 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