pfp 快速设置头像

This commit is contained in:
xtaodada 2023-01-02 13:27:53 +08:00
parent 705c01e5dd
commit 25b15bc044
Signed by: xtaodada
GPG Key ID: 4CBB3F4FA8C85659

72
pfp/main.py Normal file
View File

@ -0,0 +1,72 @@
import contextlib
from typing import Optional
from pyrogram.enums import ChatType
from pyrogram.errors import PhotoCropSizeSmall, ImageProcessFailed, BadRequest
from pyrogram.raw.functions.photos import UploadContactProfilePhoto
from pyrogram.raw.types import InputUser
from pagermaid import Config
from pagermaid.enums import Client, Message
from pagermaid.listener import listener
from pagermaid.single_utils import safe_remove
from pagermaid.utils import lang
async def get_photo(message: Message) -> Optional[str]:
if reply := message.reply_to_message:
if reply.photo:
return await reply.download()
elif reply.document and reply.document.mime_type and reply.document.mime_type.startswith("image"):
return await reply.download()
elif message.photo:
return await message.download()
elif message.document and message.document.mime_type and message.document.mime_type.startswith("image"):
return await message.download()
return None
async def set_photo(client: Client, user: InputUser, photo: str, me: bool) -> None:
if me:
await client.set_profile_photo(photo=photo)
else:
try:
await client.invoke(
UploadContactProfilePhoto(
user_id=user,
suggest=False,
save=True,
file=await client.save_file(photo),
)
)
except BadRequest:
await set_photo(client, user, photo, True)
safe_remove(photo)
@listener(
command="pfp",
description=lang("pfp_des")
)
async def pfp(client: Client, message: Message):
""" Sets your profile picture. """
me = await client.get_me()
peer = await client.resolve_peer(me.id)
with contextlib.suppress(Exception):
if message.chat.type == ChatType.PRIVATE:
peer = await client.resolve_peer(message.chat.id)
photo = await get_photo(message)
if not photo:
return await message.edit(f"{lang('error_prefix')}{lang('pfp_e_notp')}")
if not Config.SILENT:
message = await message.edit(lang('pfp_process'))
try:
await set_photo(client, peer, photo, peer.user_id == me.id)
await message.edit("头像修改成功啦 ~")
return
except PhotoCropSizeSmall:
await message.edit(f"{lang('error_prefix')}{lang('pfp_e_size')}")
except ImageProcessFailed:
await message.edit(f"{lang('error_prefix')}{lang('pfp_e_img')}")
except Exception:
await message.edit(f"{lang('error_prefix')}{lang('pfp_e_notp')}")