diff --git a/e621.py b/e621.py index 29abddb..ebd5a11 100644 --- a/e621.py +++ b/e621.py @@ -178,3 +178,7 @@ class E621: if 'success' in r: return [] return [E621PostVersion.from_dict(p) for p in r] + + async def get_tag_aliases(self, name: str) -> List[str]: + r = (await self.client.get('/tag_aliases.json', params={'search[antecedent_name]': name})).json() + return [alias['consequent_name'] for alias in r] diff --git a/main.py b/main.py index f427531..9580004 100644 --- a/main.py +++ b/main.py @@ -297,6 +297,27 @@ async def list_tags(msg: Message): await msg.reply(f'Monitored tags:\n\n{lines}') +@dp.message(filters.Command('check_aliases'), ChatFilter) +async def check_aliases(msg: Message): + tags = [t.decode() for t in await redis.smembers(REDIS_SUBS_KEY)] + tags.sort() + progress = 0 + lines = [] + + resp = await msg.reply('tmp') + + async def send_progress(): + await resp.edit_text(f'Checking aliases {progress}/{len(tags)}\n\n' + f'{"\n".join(lines)}', parse_mode=ParseMode.HTML) + + for sub in tags: + for subtag in sub.split(): + if replacements := await e621.get_tag_aliases(subtag): + lines.append(f'- {subtag} -> {replacements[0]}, ({sub})') + progress += 1 + await send_progress() + + @dp.message(filters.Command('update'), ChatFilter) async def update(msg: Message): await check_updates()