mirror of
https://github.com/TeamPGM/PagerMaid_Plugins_Pyro.git
synced 2024-11-22 07:47:40 +00:00
78 lines
2.6 KiB
Python
78 lines
2.6 KiB
Python
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')}")
|