BanChatSenderChat
BanChatSenderChat — блокирует канал, который отправляет сообщения в группу от своего имени.
📝 Назначение
В Telegram существует функция, позволяющая каналам комментировать сообщения в группах от своего имени (анонимно). Эта реакция блокирует возможность конкретному каналу отправлять такие сообщения в указанной группе.
Когда это нужно:
- Канал-отправитель спамит в группе
- Нужно запретить конкретному каналу комментировать
- Модерация анонимных сообщений от каналов
💡 Совет: Для разблокировки используйте реакцию UnBanSenderChat.
⚙️ Параметры
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| Целевой чат | Integer/String | ✅ Да | ID чата (группы/супергруппы), в котором нужно заблокировать канал |
| Канал отправителя | Integer | ✅ Да | ID канала, который нужно заблокировать |
📥 Получение ID канала-отправителя
Когда канал отправляет сообщение в группу, в update появляется поле sender_chat. ID канала доступен по пути:
${update.message.sender_chat.id}
Пример структуры update с sender_chat:
{
"message": {
"chat": { "id": -100123456789, "title": "Моя группа" },
"sender_chat": { "id": -100987654321, "title": "Какой-то канал", "type": "channel" },
"text": "Текст сообщения от имени канала"
}
}
⚠️ Важно: Поле
sender_chatприсутствует только в сообщениях, отправленных от имени канала или группы. В обычных сообщениях пользователей его нет.
🔐 Требуемые права бота
| Право | Описание |
|---|---|
| Администратор чата | Бот должен быть администратором группы |
| can_restrict_members | Право блокировать участников (включая каналы-отправители) |
💡 Совет: Проверить права бота можно через реакцию
GetChatMemberдля самого бота или в разделе/adm→ Чаты/Каналы.
🧪 Примеры использования
Пример 1: Блокировка канала, только что отправившего сообщение
Задача: При получении сообщения от канала немедленно заблокировать его.
Обработчик: Тип «Сообщение» (любое)
Условие: Has → ${update.message.sender_chat.id} (проверяем, что сообщение от канала)
Реакции:
BanChatSenderChat→
Целевой чат:${chat.id}Канал отправителя:${update.message.sender_chat.id}
SendMessage→
- Текст:
Канал ${update.message.sender_chat.title} заблокирован за отправку сообщений в эту группу.
Пример 2: Блокировка по команде администратора
Задача: Администратор может заблокировать канал командой /ban_channel @channel_username.
Обработчик: Команда /ban_channel
Реакции:
TakeUser→ получение ID канала по usernameBanChatSenderChat→
Целевой чат:${chat.id}Канал отправителя:${target.chat.id}
SendMessage→ текст:Канал заблокирован.
Пример 3: Блокировка канала, нарушившего правила
Задача: При обнаружении запрещённого слова в сообщении от канала — заблокировать канал.
Обработчик: Тип «Регулярное выражение» (например, спам|реклама)
Условие: Has → ${update.message.sender_chat.id}
Реакции:
BanChatSenderChat→
Целевой чат:${chat.id}Канал отправителя:${update.message.sender_chat.id}
SendMessage→ текст:Канал заблокирован за нарушение правил.DeleteMessage→ удалить сообщение-нарушитель
🔄 Особенности поведения
| Ситуация | Поведение |
|---|---|
| Канал уже заблокирован | Повторная блокировка не вызывает ошибку |
| Блокировка обычного пользователя | Не работает — используйте BanChatMember |
| Блокировка канала в личном чате | Невозможно, только в группах |
| Канал отправитель — ваш бот | Не блокируется (но обычно бот не отправляет сообщения как канал) |
⚠️ Частые ошибки
Ошибка 1: Реакция не срабатывает
Причина: Бот не является администратором чата или у него нет права can_restrict_members.
Решение: Добавьте бота в администраторы группы и убедитесь, что у него есть право блокировать участников.
Ошибка 2: Неправильно указан ID канала
Причина: Использован ${update.message.from.id} вместо ${update.message.sender_chat.id}.
Решение: Для каналов-отправителей используйте sender_chat.id, а не from.id (который может быть пустым или содержать ID другого пользователя).
Ошибка 3: Не могу получить ID канала по команде
Причина: Канал не является участником чата, его нельзя «взять» через TakeUser.
Решение: ID канала-отправителя можно получить только из поля sender_chat в сообщении, отправленном этим каналом.
Ошибка 4: После блокировки канал продолжает писать
Причина: Блокировка применяется только к сообщениям, отправляемым от имени этого канала. Если канал пишет через обычного пользователя — блокировка не действует.
Решение: Для блокировки конкретного пользователя используйте BanChatMember.
Ошибка 5: Блокировка работает только в группах
Причина: Функция sender_chat существует только в группах и супергруппах.
Решение: Не пытайтесь использовать эту реакцию в личных чатах или каналах.
🔗 Связанные реакции
| Реакция | Назначение |
|---|---|
| UnBanSenderChat | Разблокировать канал |
| BanChatMember | Заблокировать пользователя |
| GetChatMember | Проверить статус |
🔗 Связанные разделы
| Раздел | Описание |
|---|---|
| Обработчики системных сообщений | Отслеживание сообщений от каналов |
| TakeExternal | Загрузка данных о пересланном сообщении |