import html import re from pyrogram.enums import ParseMode from pagermaid.enums import Message, AsyncClient from pagermaid.listener import listener def clean_html(raw_html): return re.sub(re.compile(r"<.*?>"), "", raw_html) def escape_definition(definition): for key, value in definition.items(): if isinstance(value, str): definition[key] = html.escape(clean_html(value)) return definition @listener(command="pypi", description="Search PyPI packages", parameters="The query string") async def pypi(message: Message, httpx: AsyncClient): if not message.arguments: return await message.edit("Please provide a query string") r = await httpx.get(f"https://pypi.org/pypi/{message.arguments}/json", follow_redirects=True) if r.status_code != 200: return await message.edit("Could not find the package") json = r.json() pypi_info = escape_definition(json["info"]) text = """ {package_name} by {author_name} {author_email} 平台:{platform} 版本:{version} 许可协议:{license} 摘要:{summary}""".format( package_link=f"https://pypi.org/pypi/{message.arguments}", package_name=pypi_info["name"], author_name=pypi_info["author"], author_email=f"<{pypi_info['author_email']}>" if pypi_info["author_email"] else "", platform=pypi_info["platform"] or "未指定", version=pypi_info["version"], license=pypi_info["license"] or "未指定", summary=pypi_info["summary"], ) await message.edit(text, parse_mode=ParseMode.HTML, disable_web_page_preview=True)