EnotPRO Logo EnotPRO

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} (проверяем, что сообщение от канала)

Реакции:

  1. BanChatSenderChat
  • Целевой чат: ${chat.id}
  • Канал отправителя: ${update.message.sender_chat.id}
  1. SendMessage
  • Текст: Канал ${update.message.sender_chat.title} заблокирован за отправку сообщений в эту группу.

Пример 2: Блокировка по команде администратора

Задача: Администратор может заблокировать канал командой /ban_channel @channel_username.

Обработчик: Команда /ban_channel

Реакции:

  1. TakeUser → получение ID канала по username
  2. BanChatSenderChat
  • Целевой чат: ${chat.id}
  • Канал отправителя: ${target.chat.id}
  1. SendMessage → текст: Канал заблокирован.

Пример 3: Блокировка канала, нарушившего правила

Задача: При обнаружении запрещённого слова в сообщении от канала — заблокировать канал.

Обработчик: Тип «Регулярное выражение» (например, спам|реклама)

Условие: Has${update.message.sender_chat.id}

Реакции:

  1. BanChatSenderChat
  • Целевой чат: ${chat.id}
  • Канал отправителя: ${update.message.sender_chat.id}
  1. SendMessage → текст: Канал заблокирован за нарушение правил.
  2. 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 Загрузка данных о пересланном сообщении

🔗 Ссылка на официальную документацию

banChatSenderChat — Telegram Bot API

© 2025 EnotPRO. Все права защищены.