Реализация мута пользователей в групповом чате — Telegram-Bot
Наша библиотека вновь обновлена, посему продолжим учиться создавать Телеграм-ботов. В сегодняшней статье поговорим о реализации системы мута пользователей.
Для понимания принципа работы нашей задумки — пройдёмся по изменениям в библиотеке и её новым возможностям. Изменения коснулись по сути только класса Bot. Итак, начинаем разбирать:
- Метод deleteMessage( $chat_id, $message_id ) — удаляет указанное сообщение
- $chat_id — айди чата
- $message_id — айди сообщения
public function deleteMessage( int $chat_id, int $message_id ) : void < $this->request( 'deleteMessage', [ 'chat_id' => $chat_id, 'message_id' => $message_id ] ); >- Метод memberStatus( $chat_id, $user_id ) — возвращает роль пользователя в чате (может вернуть следующие значения: creator — создатель, left — админ, false — пользователь, null — пользователя нет в чате)
- $chat_id — айди чата
- $user_id — айди пользователя
public function memberStatus( int $chat_id, int $user_id ) : string|false|null < $member_info = $this->request( 'getChatMember', [ 'chat_id' => $chat_id, 'user_id' => $user_id ] ); return ( $member_info['result'] ? ( $member_info['result']['status'] == 'creator' ) ? 'creator' : ( $member_info['result']['status'] == 'left' ? 'left' : false ) : null ); >- Метод mute( $chat_id, $user_id, $unit, $value, $reason ) — мутит пользователя в чате на определённый срок, либо навсегда при неуказании времени
- $chat_id — айди чата
- $user_id — айди пользователя
- $unit — единица измерения времени — дни, часы, минуты, секунды (необязательный параметр)
- $value — срок мута в указанных единицах измерения времени (необязательный параметр)
- $reason — причина (необязательный параметр)
public function mute( int $chat_id, int $user_id, string $unit = '', int $value = 0, string $reason = '' ) : void < [ $arr, $mutes_file ] = $this->blacklistCache( 'mutes' ); $arr[$chat_id . '_' . $user_id] = [ 'duration' => $this->durationCount( $unit, $value ), 'reason' => $reason, ]; $this->record( $arr, $mutes_file ); >- Метод unMute( $chat_id, $user_id ) — размучивает пользователя в групповом чате
- $chat_id — айди чата
- $user_id — айди пользователя
public function unMute( int $chat_id, int $user_id ) : void < [ $arr ] = $this->blacklistCache( 'mutes' ); unset( $arr[$chat_id . '_' . $user_id] ); >- Метод isMuted( $chat_id, $user_id ) — проверяет, замучен ли пользователь (true — замучен, false— не замучен)
- $chat_id — айди чата
- $user_id — айди пользователя
public function isMuted( int $chat_id, int $user_id ) : bool < [ $arr ] = $this->blacklistCache( 'mutes' ); if ( isset( $arr[$chat_id . '_' . $user_id] ) and $arr[$chat_id . '_' . $user_id]['duration'] >= time() ) return true; return false; >- Метод blacklistCache( $type )— возвращает чёрный список пользователей (в нашем случае чёрным списком является список мутов, однако можно реализовать, к примеру, и баны)
- $type — тип чёрного списка (мы рассматриваем муты, поэтому в $type передавать будем строку ‘mutes’)
private function blacklistCache( string $type ) : array < if ( !is_dir( self::$cache_dir ) ) mkdir( self::$cache_dir ); $bans_file = self::$cache_dir . '/' . $type . '.php'; $arr = file_exists( $bans_file ) ? require $bans_file : []; return [ $arr, $bans_file ]; >- Метод durationCount( $unit, $value ) — высчитывает срок пребывания в чёрном списке (в муте) в зависимости от заданной единицы измерения времени (определяется по первой букве: д/d — дни, ч/h — часы, м/m — минуты, с/s— секунды)
- $unit — единица измерения времени — дни, часы, минуты, секунды
- $value — срок мута в указанных единицах измерения времени
private function durationCount( string $unit = '', int $value = 0 ) : int
- Метод record( $arr ) — перекочевал из класса Storage в класс Bot. Принцип работы не изменился, добавился второй аргумент (теперь путь к файлу можно указать вручную)
- $arr — массив для записи в кэш
protected function record( array $arr, string $path ) : false|int
Теперь переходим непосредственно к написанию бота. Создаём php-файл, подключаем библиотеку, создаём экземпляр класса Bot и инициализируем необходимые перменные:
initData( $data ) ->initChatId( $chat_id ) // Инициализируем айди чата, из которого поступают боту сообщения (например, это может быть айди пользователя, написавшего боту) ->initUserId( $user_id ) // Инициализация ID пользователя ->initMessage( $message ); // Инициализируем текст сообщения, которе было отправлено ботуМы уже рассмотрели метод isMuted(), поэтому теперь смело можем его применять. А применять мы его будем для того, чтобы удалять сообщения юзеров, которые были замучены:
if ( $tg->isMuted( $chat_id, $user_id ) ) < $tg->deleteMessage( $chat_id, $data['message']['message_id'] ); >Теперь все сообщения от заткнутых пользователей бот будет автоматически подчищать.
Далее переходим к реализации самого мута. Чтобы такая привилегия была исключительно у администраторов — проверяем роль пользователя, который ввёл команду, с помощью метода memberStatus():
else if ( str_starts_with( $message, '/' ) ) < if ( $tg->memberStatus( $chat_id, $user_id ) ) < // Тут продолжим писать код >>Условие выполнится только если будет возвращена строка (creator или left). Напомню, что для обычных пользователей возвращается false.
Теперь, когда проверка пройдена — можно раздробить команду на части через пробелы и далее обработать её:
$message_data = explode( ' ', $message ); switch ( $message_data[0] ) < case '/мут': < $tg->mute( $chat_id, $data['message']['reply_to_message']['from']['id'], $message_data[2], $message_data[1], $message_data[3] ?? '' ); $tg->reply( 'Пользователь заткнут' ); break; > case '/размут': < $tg->unMute( $chat_id, $data['message']['reply_to_message']['from']['id'] ); $tg->reply( 'Пользователь размучен' ); break; > >И на этом, пожалуй, всё
- 5id15
- 01.09.2022
- 6 683
- 1
- 77
Добавление бота в чат Телеграм

Чат-боты используют многие бизнесы: это помогает автоматизировать рутинную работу. При этом они довольно хорошо справляются со своей работой. SaluteBot, например, может не только выдавать пользователю готовые пункты для выбора, чтобы продолжить диалог, но и анализировать написанный текст, чтобы подобрать нужный ответ из базы.
В статье расскажем, как добавить робота в чат Телеграм и как настроить его работу по определённому сценарию.
Видеозвонки в SberJazz
Общайтесь с друзьями и близкими везде, где есть Интернет
Попробовать сейчасКак добавить в Телеграм
Для создания бота в Телеграме необходимо выполнить следующие шаги:

- Через поиск найдите профиль BotFather или перейдите по ссылке https://telegram.me/BotFather.
- Нажмите кнопку «Start» в чате.
- Введите команду /newbot.
- Укажите название — это то, как пользователи будут видеть его в списке контактов.
- Укажите системное имя: это логин после знака @.
Системное имя должно быть уникальным, а название может повторяться с уже существующими.
Когда бот будет создан, вы увидите токен. Он нужен для интеграции со сценариями. Если вы забыли сохранить токен, просто напишите команду /token в диалог с BotFather.
Основа для чат-бота создана, и ему даже можно написать сообщение. Но чтобы он заработал, нужно создать для него сценарий. Сделать это можно через сервис SaluteBot.
Создайте своего чат-бота в Telegram
Простая настройка чат-бота в личном кабинете Цифровой витрины
ПопробоватьКак настроить бота в личном кабинете Цифровой витрины
Чтобы создать свой собственный сценарий и привязать его к чат-боту, зарегистрируйтесь в личном кабинете Цифровой витрины и войдите в аккаунт. Мы будем использовать инструмент SaluteBot, который помогает создать сценарий в режиме карты. Навыки программирования не нужны, если нет интеграции со сторонними системами.
После этого зарегистрируйтесь в сервисе Jivo, который свяжет робота со сценарием. Для работы потребуется профессиональный аккаунт, первые 14 дней им можно пользоваться бесплатно. Подробнее как создать читайте в статье.
Далее порядок действий будет следующий:

- Зайдите в личный кабинет Цифровой витрины и нажмите «Создать проект».
- Выберите «Приложения» — SaluteBot.
- Нажмите «Добавить аккаунт» и авторизуйтесь в Jivo.
- Придумайте название проекта.
- Выберите «Свой сценарий», это бесплатное создание сценария в режиме конструктора.
- Далее вы попадёте в конструктор, где сможете собрать нужный сценарий.
Вот какие возможности есть в конструкторе:
- Отправка пользователю текста (приветствие, ответ на сообщение или на действие).
- Запрос данных — если нужно уточнить у клиента какую-то информацию, например, имя, телефон, номер заказа.
- Условие — сценарий должен гибко реагировать на действия клиента, поэтому при выборе того или иного пункта меню бот, в зависимости от настроенного условия, будет реагировать по-разному.
- Перевод диалога на оператора. Если бот не справляется с вопросом, он автоматически пригласит оператора в чат.
- Вызов скрипта — для продвинутых сценариев, где подразумевается обмен данными со сторонними системами.
Как добавить в группу
Самый частый сценарий для чат-ботов в группе — это онбординг для новых участников и модерация сообщений на предмет запрещённых тем с вынесением предупреждений.
Чтобы использовать телеграм-бот в группе, просто выберите его как нового участника: созданный нами робот — это обычный отдельный аккаунт в списке участников группы.

Вот что нужно сделать:
- Перейдите в настройки группы в Телеграме.
- Нажмите на кнопку «Добавить участников».
- Найдите бот по системному имени через @имя.
- Нажмите на него, а затем — «ОК», чтобы добавить его к телеграм-чату.
После того как робот добавлен в группу, он начнёт отрабатывать сценарий, который был в него заложен в конструкторе.
Таким образом можно использовать не только созданный самостоятельно бот, но и любой уже существующий.
Как добавить в канал
В канале чат-боты используются для отложенных публикаций или как путеводитель по каналу. Чтобы робот мог создавать посты или иначе действовать от имени канала, нужно сделать его администратором. Вот как это сделать:
- Зайдите в телеграм-канал, нажмите на три точки и выберите «Управление каналом».
- Перейдите в раздел «Администраторы».
- В поиске найдите бот по системному имени через @имя.
- Добавьте его в качестве администратора и укажите, какие разрешения у него должны быть. Если не выдать нужное разрешение, то некоторые функции могут не работать.
В канал можно добавить собственный бот или выбрать уже существующий.
Для личных чатов
Если у вас нет группы или канала, и они для ваших задач не требуются, можно использовать бот в режиме личных сообщений. Это возможно сразу после того, как он создан, нужно просто написать ему сообщение напрямую.
Такой тип использования, пожалуй, самый востребованный у бизнеса, потому что в режиме личных сообщений клиент может передавать свои данные, а если диалог зашёл в тупик, в любой момент подключится оператор.
А ещё работа с ботом напрямую позволяет протестировать его перед использованием в группе или канале — так можно проверить, что все функции работают, как ожидалось.
Combot FAQ: Команды в чате

Ярослав Семёнов
Combot отвечает на команды, отправленные в чат (если конечно не включено удаление команд в админке). Некоторые команды доступны только администраторам, если такую команду отправит обычный пользователь, бот не ответит. Во избежание того, чтобы другие пользователи не кликали на команды, начинающиеся со слеша, рекомендуется использовать команды, начинающиеся с восклицательного знака.
Администрирование
Эти команды надо отправлять в ответ на сообщение участника, к которому вы хотите применить санкции. Работает только для администраторов.

!kick — выбрасывание человека из чата (он может вернуться в любой момент)
!ban — бан участника. Он больше не сможет зайти в ваш чат. Бан может быть временным, для этого после команды надо написать время, на которое вы хотите забанить участника: !ban 30d — на 30 дней, !ban 10h — на 10 часов, !ban 2w — на 2 недели, !ban 5m — на 5 минут. После окончания периода бана, пользователь может вернуться в чат
!unban — снимает бан с пользователя. Он сможет вернуться в чат. Внимание! Если использовать эту команду на участнике, который не забанен в чате, его выкинет из чата (так реализован Telegram API, мы ничего не можем с этим сделать).
!mute — участник не сможет больше отправлять сообщения в чат. Мут тоже может быть временным, действуют такой же синтаксис, как и у команды !ban
!unmute — снимает действие !mute
!warn — выдача предупреждения участнику. После 3 предупреждений участник банится (это можно настроить в админке)
!unwarn или !acquit — снятие с участника всех предупреждений
!un or !unrestrict — снимает с пользователя все ограничения (например !mute), в том числе наложенные автоматически по New users restrictions policy
Статистика
/stat — вывод ссылки на статистику (с восклицательным знаком не работает)
Репутация и Уровни
+, Спасибо, — (отправляется в ответ на сообщение) Повышает репутацию. Также работают «Спасибо» на некоторых других языках
—, — (отправляется в ответ на сообщение) Понижает репутацию
!status — (отправляется в ответ на сообщение) вывод информации о пользователе. Работает только для администраторов

!toprep — выводит топ-10 пользователей по репутации
!bottomrep — выводит топ-10 пользователей с минимальной (отрицательной) репутацией
!toplvl — выводит список топ-10 пользователей по XP
!resetrep — (отправляется в ответ на сообщение) сброс репутации пользователя до нуля. Работает только для администраторов, в будущем возможно будет удалена
!resetrepall — сброс репутации всех участников чата. Работает только для администраторов, в будущем возможно будет удалена
Разное
!cdoctor — проверка статуса Combot в чате

/ping — в ответ бот пришлёт Pong. Проверка, работают ли команды, и какая задержка их выполнения. С восклицательным знаком не работает.
!nokeyboard — убирает сторонние клавиатуры от других ботов
!purge — Удаление множества сообщений разом, очистка чата. Отправлять команду необходимо в ответ на сообщение, начиная с которого необходимо удалить сообщения. За один раз можно удалить не более 500 сообщений. Полезна при очистке чата от флуда.
!report — (отправляется в ответ на сообщение) отправка уведомления администратору(-ам) чата о нежелательном контенте. По умолчанию выключена, включается и настраивается в админке.
!readonly или !channelmode — включение в чате режима канала. Писать сообщения смогут только администраторы. Чтобы вернуть обычный режим, отправьте команду еще раз. Работает только для администраторов
!rules — вывод сообщения с правилами чата (правила прописываются в админке)
Список команд Group Help
reload — Обновить список администраторов
ban — Забанить пользователя [ответ/идентификатор/имя пользователя]
kick — Кикнуть пользователя [ответ/идентификатор/имя пользователя]
warn — Предупредить пользователя [ответ/идентификатор/имя пользователя]
unban — разблокировать пользователя [ответ/идентификатор/имя пользователя]
info — Информация о пользователе [ответ/идентификатор/имя пользователя]
staff — Персонал Группы
settings — Настроить бота
help — Объяснение команд ботаПолный список команд:
reload — перезагрузить бот
ban — бан пользователя
multiban — Забанить больше пользователей
mban — Забанить больше пользователей
kick — выгнать пользователя
multikick — Выгнать больше пользователей
mkick — Выгнать больше пользователей
warn — Предупредить пользователя
warns — управляйте и просматривайте количеством предупреждения пользователя
mute — заглушить пользователя
multimute — Заглушить больше пользователей
mmute — Заглушить больше пользователей
delban — забанить пользователя и удалить его сообщение
delkick — выгнать пользователя и удалить его сообщение
delwarn — предупредить пользователя и удалить его сообщение
delmute — отключить звук пользователя и удалить его сообщение
unban — разблокировать пользователя
multiunban — Разбанить больше пользователей
munban — Разбанить больше пользователей
unwarn — удалить предупреждение у пользователя
unmute — включить звук пользователю
multiunmute — Включить звук для большего числа пользователей
munmute — Включить звук для большего количества пользователей
info — информация о пользователе
infopvt — информация о пользователе в приватном чате
del — удалить сообщение пользователя
logdel — удалить сообщение пользователя и отправить в лог журнал
log — Отправить сообщение в лог-канал журнала
delall — выберите «Пуск» из сообщений, которые будут удалены
delallgo — выберите «конец» из сообщений, которые будут удалены
multidel — Удалить из выбранного сообщения до последнего отправленного
mdel — Удалить из выбранного сообщения до последнего отправленного
purge — Удалить из выбранного сообщения до последнего отправленного
personal — Позволяет создать новую персональную команду
alias — Позволяет создать новую персональную команду
unalias — Позволяет удалить личную команду
unpersonal — Позволяет удалить личную команду
remove — позволяет удалить личную команду
reply — позволяет создать новый личный ответ (только про версии)
unreply — позволяет удалить личный ответ (только про версии)
antiflood — настроить антифлуд
listroles — отправить в приватный чат список ролей пользователей
list — отправить в приватный чат список всех пользователей вашей группы
inactives — отправить в приватный чат список всех неактивных пользователей в вашей группе
chatid — chat_id вашей группы
send — позволяет отправить сообщение с помощью самого бота в вашей группе
multisend — Отправьте сообщение нескольким группам, в которых вы являетесь администратором (в приватном чате с ботом)
pin — отправить сообщение и закрепляет его в группе
npin — Отправить сообщение от бота и исправить с уведомлением
spin — отправить сообщение от бота и исправить без уведомления
editpin — редактировать закрепленное сообщение
delpin — удалить прикрепленное сообщение
repin — удалить прикрепленное сообщение и повторно отправить его в группу
unpinall — Удаляет все закрепленные сообщения
commands — список всех личных команд
ammoniti — список предупрежденных пользователей
block — позволяет вам заблокировать подарок или стикер(или весь стикерпак)
unblock — разблокирует гифку или стикер
magic — превращает gif или стикер в команду
unmagic — Удалить связь с гифкой или наклейкой из команды
geturl — получает url сообщения (ссылку)
graphic — тренд количества участников в вашей группе (график)
trend — тренд количества подписчиков в вашей группе
views — Просмотр активных пользователей
addviews — Просмотр активных пользователей
top10 — Показать 10 самых активных пользователей
lotteria — извлекает пользователя группы из randkm (отключены в группах более 500 участников)
slot — Вращайте игровой автомат
game — Показать мини-игры в групповой помощи
lang — установить язык бота
cofounder — добавить соучредителя
uncofounder — удалить соучредителя
admin — Добавить админа
unadmin — Удалить админа
mod — добавить модератора
unmod — удалить модератора
muter — добавить хозяина мьютов
unmuter — удалить из хозяинов мьюта
cleaner — добавить очистителя чата
uncleaner — удалить очистителя чата
helper — добавить помощника
unhelper — Удалить помощника
free — бот не действует на них (свободный от бота)
unfree — Удалить свободную роль
silence — глобальное молчание вашей группы
unsilence — отключить глобальное молчание в группе
protezione — активная защита от ботов
chimpostazioni — позволяет выбрать, какой администратор может управлять настройками бота
backup — Получить резервную копию настроек
support — отправить сообщение в службу поддержки Group help
intervention — попросить официального сторонника присоединиться к вашей группе, чтобы помочь вам
umh — показывает, если ваша группа про
uhm — показывает, если ваша группа про
pro — Делает группу Pro
unpro — Удалить Pro
groupspro — Запустите его в клоне приватно, и он покажет все созданные вами профессиональные группы
me — отправляет в приватный чат сообщение с вашими данными
translate — перевести сообщение
trad — перевести сообщение
staff — персонал группы (админы)
rules — показывает правила группы
pinned — показывает закрепленное сообщение
link — показывает ссылку группы
settings — меню настроек
config — меню настроек
pvtconfig — меню настроек
help — основные команды (мануал)Обозначение эмодзи:
Используется основателем
Используется администратором
Используется модератором
Используется хозяином мьютов
Используется очистителям чата
Используется всеми
Только для профессиональных групп и пользователей-доноров
