mirror of
https://github.com/TeamPGM/pyrogram.git
synced 2024-11-16 04:35:24 +00:00
Add business_info attribute to Chat type
This commit is contained in:
parent
351fda3208
commit
deffcbf357
@ -415,6 +415,12 @@ def pyrogram_api():
|
||||
categories = dict(
|
||||
users_chats="""
|
||||
Users & Chats
|
||||
BusinessInfo
|
||||
BusinessMessage
|
||||
BusinessRecipients
|
||||
BusinessSchedule
|
||||
BusinessWeeklyOpen
|
||||
BusinessWorkingHours
|
||||
User
|
||||
Chat
|
||||
ChatPreview
|
||||
|
@ -16,6 +16,7 @@
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from .business_schedule import BusinessSchedule
|
||||
from .chat_action import ChatAction
|
||||
from .chat_event_action import ChatEventAction
|
||||
from .chat_member_status import ChatMemberStatus
|
||||
@ -35,6 +36,7 @@ from .stories_privacy_rules import StoriesPrivacyRules
|
||||
from .user_status import UserStatus
|
||||
|
||||
__all__ = [
|
||||
'BusinessSchedule',
|
||||
'ChatAction',
|
||||
'ChatEventAction',
|
||||
'ChatMemberStatus',
|
||||
|
33
pyrogram/enums/business_schedule.py
Normal file
33
pyrogram/enums/business_schedule.py
Normal file
@ -0,0 +1,33 @@
|
||||
# Pyrogram - Telegram MTProto API Client Library for Python
|
||||
# Copyright (C) 2017-present Dan <https://github.com/delivrance>
|
||||
#
|
||||
# This file is part of Pyrogram.
|
||||
#
|
||||
# Pyrogram 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.
|
||||
#
|
||||
# Pyrogram 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 Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from pyrogram import raw
|
||||
from .auto_name import AutoName
|
||||
|
||||
|
||||
class BusinessSchedule(AutoName):
|
||||
"""Business away enumeration used in :obj:`~pyrogram.types.BusinessInfo`."""
|
||||
|
||||
ALWAYS = raw.types.BusinessAwayMessageScheduleAlways
|
||||
"Send always"
|
||||
|
||||
OUTSIDE_WORK_HOURS = raw.types.BusinessAwayMessageScheduleOutsideWorkHours
|
||||
"Outside of Business Hours"
|
||||
|
||||
CUSTOM = raw.types.BusinessAwayMessageScheduleCustom
|
||||
"Custom Schedule"
|
@ -16,6 +16,11 @@
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from .business_info import BusinessInfo
|
||||
from .business_message import BusinessMessage
|
||||
from .business_recipients import BusinessRecipients
|
||||
from .business_weekly_open import BusinessWeeklyOpen
|
||||
from .business_working_hours import BusinessWorkingHours
|
||||
from .chat import Chat
|
||||
from .chat_admin_with_invite_links import ChatAdminWithInviteLinks
|
||||
from .chat_color import ChatColor
|
||||
@ -44,6 +49,11 @@ from .video_chat_scheduled import VideoChatScheduled
|
||||
from .video_chat_started import VideoChatStarted
|
||||
|
||||
__all__ = [
|
||||
"BusinessInfo",
|
||||
"BusinessMessage",
|
||||
"BusinessRecipients",
|
||||
"BusinessWeeklyOpen",
|
||||
"BusinessWorkingHours",
|
||||
"Chat",
|
||||
"ChatMember",
|
||||
"ChatPermissions",
|
||||
|
81
pyrogram/types/user_and_chats/business_info.py
Normal file
81
pyrogram/types/user_and_chats/business_info.py
Normal file
@ -0,0 +1,81 @@
|
||||
# Pyrogram - Telegram MTProto API Client Library for Python
|
||||
# Copyright (C) 2017-present Dan <https://github.com/delivrance>
|
||||
#
|
||||
# This file is part of Pyrogram.
|
||||
#
|
||||
# Pyrogram 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.
|
||||
#
|
||||
# Pyrogram 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 Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from typing import Optional
|
||||
|
||||
from pyrogram import types, raw
|
||||
from ..object import Object
|
||||
|
||||
|
||||
class BusinessInfo(Object):
|
||||
"""Business information of a user.
|
||||
|
||||
Parameters:
|
||||
address (``str``, *optional*):
|
||||
Address of the business.
|
||||
|
||||
location (:obj:`~pyrogram.types.Location`, *optional*):
|
||||
Location of the business on the map.
|
||||
|
||||
greeting_message (:obj:`~pyrogram.types.BusinessMessage`, *optional*):
|
||||
Greeting message of the business.
|
||||
|
||||
away_message (:obj:`~pyrogram.types.BusinessMessage`, *optional*):
|
||||
Away message of the business.
|
||||
|
||||
working_hours (:obj:`~pyrogram.types.BusinessWorkingHours`, *optional*):
|
||||
Working hours of the business.
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
address: str = None,
|
||||
location: "types.Location" = None,
|
||||
greeting_message: "types.BusinessMessage" = None,
|
||||
away_message: "types.BusinessMessage" = None,
|
||||
working_hours: "types.BusinessWorkingHours" = None,
|
||||
|
||||
):
|
||||
self.address = address
|
||||
self.location = location
|
||||
self.greeting_message = greeting_message
|
||||
self.away_message = away_message
|
||||
self.working_hours = working_hours
|
||||
|
||||
@staticmethod
|
||||
def _parse(
|
||||
client,
|
||||
user: "raw.types.UserFull" = None,
|
||||
users: dict = None
|
||||
) -> Optional["BusinessInfo"]:
|
||||
working_hours = getattr(user, "business_work_hours", None)
|
||||
location = getattr(user, "business_location", None)
|
||||
greeting_message = getattr(user, "business_greeting_message", None)
|
||||
away_message = getattr(user, "business_away_message", None)
|
||||
|
||||
if not any((working_hours, location, greeting_message, away_message)):
|
||||
return None
|
||||
|
||||
return BusinessInfo(
|
||||
address=getattr(location, "address", None),
|
||||
location=types.Location._parse(client, getattr(location, "geo_point", None)),
|
||||
greeting_message=types.BusinessMessage._parse(client, greeting_message, users),
|
||||
away_message=types.BusinessMessage._parse(client, away_message, users),
|
||||
working_hours=types.BusinessWorkingHours._parse(working_hours),
|
||||
)
|
111
pyrogram/types/user_and_chats/business_message.py
Normal file
111
pyrogram/types/user_and_chats/business_message.py
Normal file
@ -0,0 +1,111 @@
|
||||
# Pyrogram - Telegram MTProto API Client Library for Python
|
||||
# Copyright (C) 2017-present Dan <https://github.com/delivrance>
|
||||
#
|
||||
# This file is part of Pyrogram.
|
||||
#
|
||||
# Pyrogram 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.
|
||||
#
|
||||
# Pyrogram 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 Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Optional, Union, List
|
||||
|
||||
from pyrogram import types, enums, raw, utils
|
||||
from ..object import Object
|
||||
|
||||
|
||||
class BusinessMessage(Object):
|
||||
"""Business working hours.
|
||||
|
||||
Parameters:
|
||||
shortcut_id (``int``):
|
||||
ID of the shortcut.
|
||||
|
||||
is_greeting (``bool``, *optional*):
|
||||
True, if the message is a greeting message.
|
||||
|
||||
is_away (``bool``, *optional*):
|
||||
True, if the message is an away message.
|
||||
|
||||
no_activity_days (``int``, *optional*):
|
||||
Period of inactivity after which the greeting message should be sent again.
|
||||
|
||||
offline_only (``bool``, *optional*):
|
||||
Dont send the away message if you've recently been online.
|
||||
|
||||
recipients (List of :obj:`~pyrogram.types.User`, *optional*):
|
||||
Recipients of the message.
|
||||
|
||||
schedule (:obj:`~pyrogram.enums.BusinessSchedule`, *optional*):
|
||||
Schedule of the away message to be sent.
|
||||
|
||||
start_date (``datetime``, *optional*):
|
||||
Start date of the away message.
|
||||
|
||||
end_date (``datetime``, *optional*):
|
||||
End date of the away message.
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
shortcut_id: int,
|
||||
is_greeting: bool = None,
|
||||
is_away: bool = None,
|
||||
no_activity_days: int = None,
|
||||
offline_only: bool = None,
|
||||
recipients: List["types.User"] = None,
|
||||
schedule: "enums.BusinessSchedule" = None,
|
||||
start_date: datetime = None,
|
||||
end_date: datetime = None,
|
||||
|
||||
):
|
||||
self.shortcut_id = shortcut_id
|
||||
self.is_greeting = is_greeting
|
||||
self.is_away = is_away
|
||||
self.no_activity_days = no_activity_days
|
||||
self.offline_only = offline_only
|
||||
self.recipients = recipients
|
||||
self.schedule = schedule
|
||||
self.start_date = start_date
|
||||
self.end_date = end_date
|
||||
|
||||
@staticmethod
|
||||
def _parse(
|
||||
client,
|
||||
message: Union["raw.types.BusinessGreetingMessage", "raw.types.BusinessAwayMessage"] = None,
|
||||
users: dict = None
|
||||
) -> Optional["BusinessMessage"]:
|
||||
if not message:
|
||||
return None
|
||||
|
||||
schedule = None
|
||||
|
||||
if isinstance(message, raw.types.BusinessAwayMessage):
|
||||
if isinstance(message.schedule, raw.types.BusinessAwayMessageScheduleAlways):
|
||||
schedule = enums.BusinessSchedule.ALWAYS
|
||||
elif isinstance(message.schedule, raw.types.BusinessAwayMessageScheduleOutsideWorkHours):
|
||||
schedule = enums.BusinessSchedule.OUTSIDE_WORK_HOURS
|
||||
elif isinstance(message.schedule, raw.types.BusinessAwayMessageScheduleCustom):
|
||||
schedule = enums.BusinessSchedule.CUSTOM
|
||||
|
||||
return BusinessMessage(
|
||||
shortcut_id=message.shortcut_id,
|
||||
is_greeting=isinstance(message, raw.types.BusinessGreetingMessage),
|
||||
is_away=isinstance(message, raw.types.BusinessAwayMessage),
|
||||
no_activity_days=getattr(message, "no_activity_days", None),
|
||||
offline_only=getattr(message, "offline_only", None),
|
||||
recipients=types.BusinessRecipients._parse(client, message.recipients, users),
|
||||
schedule=schedule,
|
||||
start_date=utils.timestamp_to_datetime(message.schedule.start_date) if schedule == enums.BusinessSchedule.CUSTOM else None,
|
||||
end_date=utils.timestamp_to_datetime(message.schedule.end_date) if schedule == enums.BusinessSchedule.CUSTOM else None
|
||||
)
|
78
pyrogram/types/user_and_chats/business_recipients.py
Normal file
78
pyrogram/types/user_and_chats/business_recipients.py
Normal file
@ -0,0 +1,78 @@
|
||||
# Pyrogram - Telegram MTProto API Client Library for Python
|
||||
# Copyright (C) 2017-present Dan <https://github.com/delivrance>
|
||||
#
|
||||
# This file is part of Pyrogram.
|
||||
#
|
||||
# Pyrogram 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.
|
||||
#
|
||||
# Pyrogram 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 Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from typing import List
|
||||
|
||||
from pyrogram import types, raw
|
||||
from ..object import Object
|
||||
|
||||
|
||||
class BusinessRecipients(Object):
|
||||
"""Business recipients.
|
||||
|
||||
Parameters:
|
||||
existing_chats (``bool``, *optional*):
|
||||
True, if the message should be sent to existing chats.
|
||||
|
||||
new_chats (``bool``, *optional*):
|
||||
True, if the message should be sent to new chats.
|
||||
|
||||
contacts (``bool``, *optional*):
|
||||
True, if the message should be sent to contacts.
|
||||
|
||||
non_contacts (``bool``, *optional*):
|
||||
True, if the message should be sent to non-contacts.
|
||||
|
||||
exclude_selected (``bool``, *optional*):
|
||||
True, if the message should be sent to non-selected contacts.
|
||||
|
||||
users (List of :obj:`~pyrogram.types.User`, *optional*):
|
||||
Recipients of the message.
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
existing_chats: bool = None,
|
||||
new_chats: bool = None,
|
||||
contacts: bool = None,
|
||||
non_contacts: bool = None,
|
||||
exclude_selected: bool = None,
|
||||
users: List[int] = None
|
||||
):
|
||||
self.existing_chats = existing_chats
|
||||
self.new_chats = new_chats
|
||||
self.contacts = contacts
|
||||
self.non_contacts = non_contacts
|
||||
self.exclude_selected = exclude_selected
|
||||
self.users = users
|
||||
|
||||
@staticmethod
|
||||
def _parse(
|
||||
client,
|
||||
recipients: "raw.types.BusinessRecipients",
|
||||
users: dict = None
|
||||
) -> "BusinessRecipients":
|
||||
return BusinessRecipients(
|
||||
existing_chats=getattr(recipients, "existing_chats", None),
|
||||
new_chats=getattr(recipients, "new_chats", None),
|
||||
contacts=getattr(recipients, "contacts", None),
|
||||
non_contacts=getattr(recipients, "non_contacts", None),
|
||||
exclude_selected=getattr(recipients, "exclude_selected", None),
|
||||
users=types.List(types.User._parse(client, users[i]) for i in recipients.users) or None if getattr(recipients, "users", None) else None
|
||||
)
|
49
pyrogram/types/user_and_chats/business_weekly_open.py
Normal file
49
pyrogram/types/user_and_chats/business_weekly_open.py
Normal file
@ -0,0 +1,49 @@
|
||||
# Pyrogram - Telegram MTProto API Client Library for Python
|
||||
# Copyright (C) 2017-present Dan <https://github.com/delivrance>
|
||||
#
|
||||
# This file is part of Pyrogram.
|
||||
#
|
||||
# Pyrogram 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.
|
||||
#
|
||||
# Pyrogram 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 Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from pyrogram import raw
|
||||
from ..object import Object
|
||||
|
||||
|
||||
class BusinessWeeklyOpen(Object):
|
||||
"""Business weekly open hours.
|
||||
|
||||
Parameters:
|
||||
start_minute (``int``):
|
||||
Start minute of the working day.
|
||||
|
||||
end_minute (``int``):
|
||||
End minute of the working day.
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
start_minute: int,
|
||||
end_minute: int,
|
||||
|
||||
):
|
||||
self.start_minute = start_minute
|
||||
self.end_minute = end_minute
|
||||
|
||||
@staticmethod
|
||||
def _parse(weekly_open: "raw.types.BusinessWeeklyOpen" = None) -> "BusinessWeeklyOpen":
|
||||
return BusinessWeeklyOpen(
|
||||
start_minute=weekly_open.start_minute,
|
||||
end_minute=weekly_open.end_minute,
|
||||
)
|
62
pyrogram/types/user_and_chats/business_working_hours.py
Normal file
62
pyrogram/types/user_and_chats/business_working_hours.py
Normal file
@ -0,0 +1,62 @@
|
||||
# Pyrogram - Telegram MTProto API Client Library for Python
|
||||
# Copyright (C) 2017-present Dan <https://github.com/delivrance>
|
||||
#
|
||||
# This file is part of Pyrogram.
|
||||
#
|
||||
# Pyrogram 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.
|
||||
#
|
||||
# Pyrogram 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 Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from typing import Optional, List
|
||||
|
||||
from pyrogram import types, raw
|
||||
from ..object import Object
|
||||
|
||||
|
||||
class BusinessWorkingHours(Object):
|
||||
"""Business working hours.
|
||||
|
||||
Parameters:
|
||||
timezone (``str``):
|
||||
Timezone of the business.
|
||||
|
||||
working_hours (List of :obj:`~pyrogram.types.BusinessWeeklyOpen`):
|
||||
Working hours of the business.
|
||||
|
||||
is_open_now (``bool``, *optional*):
|
||||
True, if the business is open now.
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
timezone: str,
|
||||
working_hours: List["types.BusinessWeeklyOpen"],
|
||||
is_open_now: bool = None
|
||||
|
||||
):
|
||||
self.timezone = timezone
|
||||
self.is_open_now = is_open_now
|
||||
self.working_hours = working_hours
|
||||
|
||||
@staticmethod
|
||||
def _parse(work_hours: "raw.types.BusinessWorkHours" = None) -> Optional["BusinessWorkingHours"]:
|
||||
if not work_hours:
|
||||
return None
|
||||
|
||||
return BusinessWorkingHours(
|
||||
timezone=work_hours.timezone_id,
|
||||
working_hours=types.List(
|
||||
types.BusinessWeeklyOpen._parse(i) for i in work_hours.weekly_open
|
||||
),
|
||||
is_open_now=getattr(work_hours, "open_now", None),
|
||||
)
|
@ -171,6 +171,9 @@ class Chat(Object):
|
||||
|
||||
profile_color (:obj:`~pyrogram.types.ChatColor`, *optional*):
|
||||
Chat profile color.
|
||||
|
||||
business_info (:obj:`~pyrogram.types.BusinessInfo`, *optional*):
|
||||
Business information of a chat.
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
@ -217,7 +220,8 @@ class Chat(Object):
|
||||
available_reactions: Optional["types.ChatReactions"] = None,
|
||||
level: int = None,
|
||||
reply_color: "types.ChatColor" = None,
|
||||
profile_color: "types.ChatColor" = None
|
||||
profile_color: "types.ChatColor" = None,
|
||||
business_info: "types.BusinessInfo" = None
|
||||
):
|
||||
super().__init__(client)
|
||||
|
||||
@ -262,6 +266,7 @@ class Chat(Object):
|
||||
self.level = level
|
||||
self.reply_color = reply_color
|
||||
self.profile_color = profile_color
|
||||
self.business_info = business_info
|
||||
|
||||
@staticmethod
|
||||
def _parse_user_chat(client, user: raw.types.User) -> "Chat":
|
||||
@ -384,6 +389,7 @@ class Chat(Object):
|
||||
parsed_chat = Chat._parse_user_chat(client, users[full_user.id])
|
||||
parsed_chat.bio = full_user.about
|
||||
parsed_chat.folder_id = getattr(full_user, "folder_id", None)
|
||||
parsed_chat.business_info = types.BusinessInfo._parse(client, full_user, users)
|
||||
|
||||
if full_user.pinned_msg_id:
|
||||
parsed_chat.pinned_message = await client.get_messages(
|
||||
|
Loading…
Reference in New Issue
Block a user