Communities¶
Bot API 10.2 — July 2026
A community is a bundle of chats presented as one thing. Instead of a group, an announcement channel and three topic groups sitting apart in the chat list, they appear as a single entry that opens into its member chats.
The chats keep their own ids, permissions and histories. The community is the wrapper.
Recognising one¶
A chat that belongs to a community carries it:
chat = await app.get_chat("some_chat")
if chat.community:
print(chat.community.id, chat.community.title, chat.community.is_collapsed)
Community is small on purpose — id, title, date and the
flags is_creator, is_left, is_min and is_collapsed. Everything you do with a
chat inside a community is still done against that chat.
ChatType also gained a COMMUNITY member, so a dialog list can be
filtered on it directly.
Membership changes¶
When a chat joins or leaves a community, a service message says so:
@app.on_message()
async def watch(client, message):
if message.community_chat_added:
print(f"added to community {message.community_chat_added.community_id}")
if message.community_chat_removed:
print(f"removed from community {message.community_chat_removed.community_id}")
Both CommunityChatAdded and
CommunityChatRemoved carry community_id and, when it is known,
the community’s community chat.
Searching inside one¶
search_global() takes a community, which narrows a global search
to the chats that community holds:
async for message in app.search_global("changelog", community=community_id):
print(message.chat.title, message.text)
search_global_count() takes the same argument for a count without the
messages.
Gotchas¶
is_collapsedis a presentation flag on your own client — whether the community shows as one row or expanded into its chats. It says nothing about the community itself.is_minmeans the object came from a context that only carried a partial community. Fetch the chat properly before relying on fields beyond the id and title.There is no “send to a community”. Messages go to one of its chats.