Skip to content

Commit

Permalink
Added support for topics in Bot API 6.3 (#1061)
Browse files Browse the repository at this point in the history
* Added support for topics in Bot API 6.3

* Added the field can_manage_topics

* Added new classes for topics

* Added is_forum field to Chat class

Co-authored-by: katant <katantdev@mail.ru>
  • Loading branch information
KatantDev and katant committed Nov 5, 2022
1 parent 8604ab7 commit 27dea25
Show file tree
Hide file tree
Showing 14 changed files with 210 additions and 9 deletions.
96 changes: 94 additions & 2 deletions aiogram/bot/bot.py

Large diffs are not rendered by default.

7 changes: 6 additions & 1 deletion aiogram/dispatcher/webhook.py
Expand Up @@ -1450,7 +1450,7 @@ class PromoteChatMember(BaseResponse):

__slots__ = ('chat_id', 'user_id', 'can_change_info', 'can_post_messages', 'can_edit_messages',
'can_delete_messages', 'can_invite_users', 'can_restrict_members', 'can_pin_messages',
'can_promote_members')
'can_manage_topics', 'can_promote_members')

method = api.Methods.PROMOTE_CHAT_MEMBER

Expand All @@ -1463,6 +1463,7 @@ def __init__(self, chat_id: Union[Integer, String],
can_invite_users: Optional[Boolean] = None,
can_restrict_members: Optional[Boolean] = None,
can_pin_messages: Optional[Boolean] = None,
can_manage_topics: Optional[Boolean] = None,
can_promote_members: Optional[Boolean] = None):
"""
:param chat_id: Union[Integer, String] - Unique identifier for the target chat
Expand All @@ -1477,6 +1478,8 @@ def __init__(self, chat_id: Union[Integer, String],
:param can_invite_users: Boolean - Pass True, if the administrator can invite new users to the chat
:param can_restrict_members: Boolean - Pass True, if the administrator can restrict, ban or unban chat members
:param can_pin_messages: Boolean - Pass True, if the administrator can pin messages, supergroups only
:param can_manage_topics: Boolean - Pass True if the user is allowed to create, rename, close, and reopen forum
topics, supergroups only
:param can_promote_members: Boolean - Pass True, if the administrator can add new administrators
with a subset of his own privileges or demote administrators that he has promoted,
directly or indirectly (promoted by administrators that were appointed by him)
Expand All @@ -1490,6 +1493,7 @@ def __init__(self, chat_id: Union[Integer, String],
self.can_invite_users = can_invite_users
self.can_restrict_members = can_restrict_members
self.can_pin_messages = can_pin_messages
self.can_manage_topics = can_manage_topics
self.can_promote_members = can_promote_members

def prepare(self):
Expand All @@ -1503,6 +1507,7 @@ def prepare(self):
'can_invite_users': self.can_invite_users,
'can_restrict_members': self.can_restrict_members,
'can_pin_messages': self.can_pin_messages,
'can_manage_topics': self.can_manage_topics,
'can_promote_members': self.can_promote_members
}

Expand Down
6 changes: 6 additions & 0 deletions aiogram/types/__init__.py
Expand Up @@ -29,6 +29,9 @@
from .encrypted_passport_element import EncryptedPassportElement
from .file import File
from .force_reply import ForceReply
from .forum_topic_created import ForumTopicCreated
from .forum_topic_closed import ForumTopicClosed
from .forum_topic_reopened import ForumTopicReopened
from .game import Game
from .game_high_score import GameHighScore
from .inline_keyboard import InlineKeyboardButton, InlineKeyboardMarkup
Expand Down Expand Up @@ -240,6 +243,9 @@
'WebAppData',
'WebAppInfo',
'WebhookInfo',
'ForumTopicCreated',
'ForumTopicClosed',
'ForumTopicReopened',
'base',
'fields',
)
3 changes: 3 additions & 0 deletions aiogram/types/chat.py
Expand Up @@ -27,8 +27,11 @@ class Chat(base.TelegramObject):
username: base.String = fields.Field()
first_name: base.String = fields.Field()
last_name: base.String = fields.Field()
is_forum: base.Boolean = fields.Field()
all_members_are_administrators: base.Boolean = fields.Field()
photo: ChatPhoto = fields.Field(base=ChatPhoto)
active_usernames: typing.List[base.String] = fields.Field()
emoji_status_custom_emoji_id: base.String = fields.Field()
bio: base.String = fields.Field()
has_private_forwards: base.Boolean = fields.Field()
has_restricted_voice_and_video_messages: base.Boolean = fields.Field()
Expand Down
7 changes: 5 additions & 2 deletions aiogram/types/chat_administrator_rights.py
Expand Up @@ -19,6 +19,7 @@ class ChatAdministratorRights(base.TelegramObject):
can_post_messages: base.Boolean = fields.Field()
can_edit_messages: base.Boolean = fields.Field()
can_pin_messages: base.Boolean = fields.Field()
can_manage_topics: base.Boolean = fields.Field()

def __init__(self,
is_anonymous: base.Boolean = None,
Expand All @@ -31,7 +32,8 @@ def __init__(self,
can_invite_users: base.Boolean = None,
can_post_messages: base.Boolean = None,
can_edit_messages: base.Boolean = None,
can_pin_messages: base.Boolean = None):
can_pin_messages: base.Boolean = None,
can_manage_topics: base.Boolean = None):
super(ChatAdministratorRights, self).__init__(
is_anonymous=is_anonymous,
can_manage_chat=can_manage_chat,
Expand All @@ -43,4 +45,5 @@ def __init__(self,
can_invite_users=can_invite_users,
can_post_messages=can_post_messages,
can_edit_messages=can_edit_messages,
can_pin_messages=can_pin_messages)
can_pin_messages=can_pin_messages,
can_manage_topics=can_manage_topics)
3 changes: 3 additions & 0 deletions aiogram/types/chat_member.py
Expand Up @@ -135,6 +135,7 @@ class ChatMemberOwner(ChatMember):
can_change_info: base.Boolean = fields.ConstField(True)
can_invite_users: base.Boolean = fields.ConstField(True)
can_pin_messages: base.Boolean = fields.ConstField(True)
can_manage_topics: base.Boolean = fields.ConstField(True)


class ChatMemberAdministrator(ChatMember):
Expand All @@ -159,6 +160,7 @@ class ChatMemberAdministrator(ChatMember):
can_change_info: base.Boolean = fields.Field()
can_invite_users: base.Boolean = fields.Field()
can_pin_messages: base.Boolean = fields.Field()
can_manage_topics: base.Boolean = fields.Field()


class ChatMemberMember(ChatMember):
Expand All @@ -185,6 +187,7 @@ class ChatMemberRestricted(ChatMember):
can_change_info: base.Boolean = fields.Field()
can_invite_users: base.Boolean = fields.Field()
can_pin_messages: base.Boolean = fields.Field()
can_manage_topics: base.Boolean = fields.Field()
can_send_messages: base.Boolean = fields.Field()
can_send_media_messages: base.Boolean = fields.Field()
can_send_polls: base.Boolean = fields.Field()
Expand Down
3 changes: 3 additions & 0 deletions aiogram/types/chat_permissions.py
Expand Up @@ -16,6 +16,7 @@ class ChatPermissions(base.TelegramObject):
can_change_info: base.Boolean = fields.Field()
can_invite_users: base.Boolean = fields.Field()
can_pin_messages: base.Boolean = fields.Field()
can_manage_topics: base.Boolean = fields.Field()

def __init__(self,
can_send_messages: base.Boolean = None,
Expand All @@ -26,6 +27,7 @@ def __init__(self,
can_change_info: base.Boolean = None,
can_invite_users: base.Boolean = None,
can_pin_messages: base.Boolean = None,
can_manage_topics: base.Boolean = None,
**kwargs):
super(ChatPermissions, self).__init__(
can_send_messages=can_send_messages,
Expand All @@ -36,4 +38,5 @@ def __init__(self,
can_change_info=can_change_info,
can_invite_users=can_invite_users,
can_pin_messages=can_pin_messages,
can_manage_topics=can_manage_topics,
)
10 changes: 10 additions & 0 deletions aiogram/types/forum_topic_closed.py
@@ -0,0 +1,10 @@
from . import base


class ForumTopicClosed(base.TelegramObject):
"""
This object represents a service message about a forum topic closed in the chat. Currently holds no information.
https://core.telegram.org/bots/api#forumtopicclosed
"""
pass
13 changes: 13 additions & 0 deletions aiogram/types/forum_topic_created.py
@@ -0,0 +1,13 @@
from . import base
from . import fields


class ForumTopicCreated(base.TelegramObject):
"""
This object represents a service message about a new forum topic created in the chat.
https://core.telegram.org/bots/api#forumtopiccreated
"""
name: base.String = fields.Field()
icon_color: base.Integer = fields.Field()
icon_custom_emoji_id: base.String = fields.Field()
10 changes: 10 additions & 0 deletions aiogram/types/forum_topic_reopened.py
@@ -0,0 +1,10 @@
from . import base


class ForumTopicReopened(base.TelegramObject):
"""
This object represents a service message about a forum topic closed in the chat. Currently holds no information.
https://core.telegram.org/bots/api#forumtopicreopened
"""
pass

0 comments on commit 27dea25

Please sign in to comment.