Получение информации о чатах, участие в группах и каналах, управление подписками.
Ключевая идея: Чаты, группы и каналы — это основные сущности общения в Telegram. Telethon позволяет получать информацию о них, управлять подписками, анализировать участников и мониторить активность.
Метод get_dialogs() возвращает все открытые чаты пользователя:
# Получаем все диалоги
dialogs = await client.get_dialogs()
for dialog in dialogs:
print(f'{dialog.name} — последнее сообщение: {dialog.message.text if dialog.message else "нет"}')Ключевая идея: Диалог (dialog) — это чат, в котором вы состоите и у которого есть история сообщений. Это включает личные чаты, группы и каналы.
# Только группы
groups = await client.get_dialogs(folder=0)
# Только каналы
channels = [d for d in dialogs if d.is_channel]
# Только личные чаты
private = [d for d in dialogs if d.is_user]
# Только с непрочитанными сообщениями
unread = [d for d in dialogs if d.unread_count > 0]# Асинхронная итерация — загружает порциями
async for dialog in client.iter_dialogs():
if dialog.unread_count > 0:
print(f'{dialog.name}: {dialog.unread_count} непрочитанных')# По username
chat = await client.get_entity('t.me/durov')
print(f'{chat.first_name} @{chat.username}')
# По ID
chat = await client.get_entity(-1001234567890)
print(chat.title)
# Полная информация через get_full_chat
from telethon.tl.functions.messages import GetFullChatRequest
full = await client(GetFullChatRequest(chat.id))
print(f'Участников: {full.full_chat.participants_count}')| Тип | Определение | Особенности |
|---|---|---|
| Личный чат | isinstance(chat, User) | Один на один, есть first_name |
| Группа | isinstance(chat, Chat) | До 200 000 участников, общая история |
| Супергруппа | isinstance(chat, Channel) и chat.megagroup | До 200 000, расширенные права |
| Канал | isinstance(chat, Channel) и не megagroup | Широковещательный, подписчики |
# Вступление по ссылке-приглашению
from telethon.tl.functions.messages import ImportChatInviteRequest
await client(ImportChatInviteRequest('hash_приглашения'))
# Вступление по username (для публичных чатов)
await client.join_channel('public_channel_username')
# Вступление в группу по ID
await client(ImportChatInviteRequest('abc123def456'))Важно: для закрытых чатов требуется хэш приглашения. Для публичных можно вступить по username.
# Покинуть чат
await client.leave_channel('chat_username')
# Покинуть по entity
chat = await client.get_entity('chat_to_leave')
await client.leave_channel(chat)Для групп и каналов можно получить список участников:
# Получение участников канала/группы
participants = await client.get_participants('chat_username')
for p in participants:
print(f'@{p.username or ""} — {p.first_name}')
# С лимитом
participants = await client.get_participants('chat_username', limit=100)# Найти участника по username
user = await client.get_participants('chat', search='username_part')
# Проверить права администратора
from telethon.tl.functions.channels import GetParticipantRequest
participant = await client(GetParticipantRequest('chat', user_id))
print(f'Админ: {participant.participant.admin_rights}')from telethon.tl.functions.messages import CreateChatRequest
from telethon.tl.functions.channels import CreateChannelRequest
# Создание группы
await client(CreateChatRequest(
title='Моя группа',
users=['friend_username']
))
# Создание канала
await client(CreateChannelRequest(
title='Мой канал',
about='Описание канала',
megagroup=False # False = канал, True = супергруппа
))# Архивирование чата
await client.edit_folder('chat_username', folder=1) # 1 = архив
# Изменение уведомлений
from telethon.tl.types import InputPeerNotifySettings
await client.edit_notify_settings(
'chat_username',
mute_until=365 * 24 * 60 * 60 # Мут на год
)# Добавление пользователя в группу
from telethon.tl.functions.channels import InviteToChannelRequest
await client(InviteToChannelRequest('chat_username', ['user_to_add']))
# Удаление участника из группы
from telethon.tl.functions.channels import EditBannedRequest
from telethon.tl.types import ChatBannedRights
await client(EditBannedRequest(
'chat_username',
user_id,
ChatBannedRights(
until_date=None, # Навсегда
view_messages=True # Забанить
)
))from telethon.tl.functions.channels import EditAdminRequest
from telethon.tl.types import ChatAdminRights
await client(EditAdminRequest(
'chat_username',
user_id,
ChatAdminRights(
change_info=True,
post_messages=True,
edit_messages=True,
delete_messages=True,
ban_users=True,
invite_users=True,
pin_messages=True
),
'Администратор'
))# Статистика канала (требует прав админа)
from telethon.tl.functions.stats import GetBroadcastStatsRequest
stats = await client(GetBroadcastStatsRequest('channel_username'))
print(f'Подписчиков: {stats.followers}')
print(f'Прирост: {stats.growth}')# Анализ просмотровов
async for msg in client.iter_messages('channel', limit=50):
if msg.views:
print(f'Сообщение {msg.id}: {msg.views} просмотров, {msg.forwards} пересылок')| Ошибка | Причина | Решение |
|---|---|---|
UsernameNotOccupiedError | Username не найден | Проверьте написание |
ChatAdminRequiredError | Нужны права админа | Запросите права или используйте бота |
UserAlreadyParticipantError | Уже в чате | Пропустите добавление |
UserNotMutualContactError | Нельзя добавить в личку | Это ограничение Telegram |
FloodWaitError | Лимит запросов | Ждите указанное время |
from telethon.errors import (
UsernameNotOccupiedError,
ChatAdminRequiredError,
UserAlreadyParticipantError
)
async def safe_add_user(chat, user):
try:
await client(InviteToChannelRequest(chat, [user]))
except UserAlreadyParticipantError:
print('Пользователь уже в чате')
except ChatAdminRequiredError:
print('Нужны права администратора')entity = await client.get_entity('some_chat')
if isinstance(entity, types.Channel):
if entity.megagroup:
print('Это супергруппа')
else:
print('Это канал')
elif isinstance(entity, types.Chat):
print('Это обычная группа')
elif isinstance(entity, types.User):
print('Это пользователь')Ключевая идея: понимание типа сущности критично, так как разные типы имеют разные доступные методы и права.
Чаты — это сущности, но настоящая мощь Telethon раскрывается с обработкой событий в реальном времени. Следующая тема — обработчики событий — научит реагировать на сообщения и действия мгновенно.
Вопросы ещё не добавлены
Вопросы для этой подтемы ещё не добавлены.