Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions compiler/docs/compiler.py
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,7 @@ def get_title_list(s: str) -> list:
Dialog
Restriction
EmojiStatus
ChatBackground
""",
"messages_media": """
Messages & Media
Expand Down
2 changes: 2 additions & 0 deletions hydrogram/types/user_and_chats/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
from .video_chat_members_invited import VideoChatMembersInvited
from .video_chat_scheduled import VideoChatScheduled
from .video_chat_started import VideoChatStarted
from .chat_background import ChatBackground

__all__ = [
"Chat",
Expand Down Expand Up @@ -85,4 +86,5 @@
"VideoChatMembersInvited",
"VideoChatScheduled",
"VideoChatStarted",
"ChatBackground",
]
13 changes: 12 additions & 1 deletion hydrogram/types/user_and_chats/chat.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,9 @@ class Chat(Object):
Pinned message, for groups, supergroups channels and own chat.
Returned only in :meth:`~hydrogram.Client.get_chat`.

background (:obj:`~hydrogram.types.ChatBackground`, *optional*):
A chat background.

sticker_set_name (``str``, *optional*):
For supergroups, name of group sticker set.
Returned only in :meth:`~hydrogram.Client.get_chat`.
Expand Down Expand Up @@ -177,7 +180,8 @@ def __init__(
dc_id: int | None = None,
has_protected_content: bool | None = None,
invite_link: str | None = None,
pinned_message=None,
pinned_message: types.Message | None = None,
background: types.ChatBackground | None = None,
sticker_set_name: str | None = None,
can_set_sticker_set: bool | None = None,
members_count: int | None = None,
Expand Down Expand Up @@ -213,6 +217,7 @@ def __init__(
self.has_protected_content = has_protected_content
self.invite_link = invite_link
self.pinned_message = pinned_message
self.background = background
self.sticker_set_name = sticker_set_name
self.can_set_sticker_set = can_set_sticker_set
self.members_count = members_count
Expand Down Expand Up @@ -346,6 +351,9 @@ async def _parse_full(
parsed_chat.pinned_message = await client.get_messages(
parsed_chat.id, message_ids=full_user.pinned_msg_id
)

if getattr(full_user, "wallpaper", None):
parsed_chat.background = types.ChatBackground._parse(client, full_user.wallpaper)
else:
full_chat = chat_full.full_chat
chat_raw = chats[full_chat.id]
Expand Down Expand Up @@ -375,6 +383,9 @@ async def _parse_full(

parsed_chat.send_as_chat = Chat._parse_chat(client, send_as_raw)

if getattr(full_chat, "wallpaper", None):
parsed_chat.background = types.ChatBackground._parse(client, full_chat.wallpaper)

parsed_chat.description = full_chat.about or None

if full_chat.pinned_msg_id:
Expand Down
113 changes: 113 additions & 0 deletions hydrogram/types/user_and_chats/chat_background.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# Hydrogram - Telegram MTProto API Client Library for Python
# Copyright (C) 2023-present Hydrogram <https://hydrogram.org>
#
# This file is part of Hydrogram.
#
# Hydrogram is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Hydrogram is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with Hydrogram. If not, see <http://www.gnu.org/licenses/>.

from datetime import datetime
from typing import List

import hydrogram
from hydrogram import raw, utils
from hydrogram import types
from hydrogram.file_id import (
FileId,
FileType,
FileUniqueId,
FileUniqueType,
ThumbnailSource,
)
from hydrogram.types.object import Object


class ChatBackground(Object):
"""Describes a background set for a specific chat.

Parameters:
file_id (``str``):
Identifier for this file, which can be used to download the file.

file_unique_id (``str``):
Unique identifier for this file, which is supposed to be the same over time and for different accounts.
Can't be used to download or reuse the file.

file_size (``int``):
File size.

date (:py:obj:`~datetime.datetime`):
Date the background was setted.

slug (``str``):
Identifier of the background code.
You can combine it with `https://t.me/bg/{slug}`
to get link for this background.

thumbs (List of :obj:`~pyrogram.types.Thumbnail`, *optional*):
Available thumbnails of this background.

link (``str``, *property*):
Generate a link to this background code.
"""

def __init__(
self,
*,
client: "hydrogram.Client" = None,
file_id: str,
file_unique_id: str,
file_size: int,
date: datetime,
slug: str,
thumbs: List["types.Thumbnail"] = None,
):
super().__init__(client)

self.file_id = file_id
self.file_unique_id = file_unique_id
self.file_size = file_size
self.date = date
self.slug = slug
self.thumbs = thumbs

@property
def link(self) -> str:
return f"https://t.me/bg/{self.slug}"

@staticmethod
def _parse(
client,
wallpaper: "raw.types.Wallpaper",
) -> "ChatBackground":
return ChatBackground(
file_id=FileId(
dc_id=wallpaper.document.dc_id,
file_reference=wallpaper.document.file_reference,
access_hash=wallpaper.document.access_hash,
file_type=FileType.BACKGROUND,
media_id=wallpaper.document.id,
volume_id=0,
local_id=0,
thumbnail_source=ThumbnailSource.THUMBNAIL,
thumbnail_file_type=FileType.BACKGROUND,
).encode(),
file_unique_id=FileUniqueId(
file_unique_type=FileUniqueType.DOCUMENT, media_id=wallpaper.document.id
).encode(),
file_size=wallpaper.document.size,
slug=wallpaper.slug,
date=utils.timestamp_to_datetime(wallpaper.document.date),
thumbs=types.Thumbnail._parse(client, wallpaper.document),
client=client,
)