SAMURAI-бот для Telegram
Имея образование разработчика и почти 8-летний опыт в этой сфере грех таким не пользоваться.
Те, кто следит за каналом очень давно, вероятно, помнят, что я разрабатывал своего бота для кросс-постинга: кидаешь пост в бота, а он пересылает в ВК, в ТГ и в Discord.
К сожалению, Discord на территории РФ сейчас нестабилен, посты перестали туда доходить, и я забросил эту платформу, хотя горячо любил ее.
Группа в ВК совсем чахлая (пизд*ц, вот это слово я вспомнил). Я туда заливаю видео, чтобы они были еще где-то. Сама аудитория в группе абсолютно неактивная. Ставок на эту платформу не делаю. Пересылать посты туда я перестал (к тому же, ВК планирует менять домен, а значит поменяется и API, а мне лень переписывать что-то у бота).
Жаль, мой первый в жизни бот с крутым функционалом, который другие боты/сервисы дают только за деньги, стал неактуален.
Но тяга к программированию вне работы у меня остается, и мне нужно было это куда-то сублимировать. Я решил написать своего собственного модератора - SAMURAI-бот.
Он следит за чатом и умеет следующее:
1. Приветствовать новых участников чата и верифицировать, что это не бот - участнику нужно нажать на кнопку "Я не бот", после чего у него появится возможность писать в чат
2. В ручном режиме через бота я могу мьютить, банить или кикать участников. Ну и, конечно же, возвращать состояние по-умолчанию
3. Фильтрация ссылок. Точнее, удаление любых ссылок от любых пользователей.
4. Обо всех действиях бот сообщает мне в админку - о новом участнике чата, об удаленной ссылке и прочее.
И вот вчера ребята в чате попросили отключить бота или настроить фильтрацию ссылок, чтобы старожилы чата смогли присылать ссылки. Я не планировал вчера программировать, но в моменте загорелся идеей усовершенствовать бота.
План был такой:
1. Прикрутить к боту БД на postgre, куда он будет складывать всю инфу по всем юзерам, их ID, имена, состояние, статус и время вступления в чат.
2. Именно время вступления в чат станет важным атрибутом, дабы разрешать тем, кто уже давно в чате, присылать ссылки.
3. Сделать так, чтобы бот не просто удалял ссылки, а еще и пересылал их мне в админку (для пущего контроля)
Всё было более чем реализуемо (я так думал), у меня свой собственный сервер на Linux под столом, где крутятся мои боты и БД.
СОЗДАЕМ ТАБЛИЦУ В БД
НАПОЛНЯЕМ ТАБЛИЦУ
И уже здесь я встретился с проблемой.
API ботов не имеет возможности выдать список всех участников группы.
То есть, после включения бота новые участники чата будут сохраняться в БД, и будет фиксироваться дата вступления. Но что делать с теми, кто УЖЕ состоит в чате?
Нашел возможность выгрузить список всех участников через my.telegram.org.
Следует залогиниться под своим номером, создать Application, получить app_id и hash, заюзать библиотеку telethon из класса TelegramClient.
Код, который подключается к нужному чату, обходит всех участников и каждого добавляет в БД:
py
import_users.py1.86 Kb
Но! Помимо этого нужно получить дату, когда участник вступил в чат.
На момент написания этого текста я нашел возможность - ниже отдельный метод, который можете прикрутить к предыдущему import_users.py и сохранить существующих юзеров в БД уже с правильными датами:
py
tg_group_join_date.py1017 Byte
Супер, таблица наполнена данными.
HELPERS ДЛЯ РАБОТЫ С БД
Теперь подготовить класс, который будет иметь все необходимые helpers для работы с БД: добавление новых юзеров, обновление данных или получение данных из таблицы по user_id
py
Database.py3.92 Kb
Можно дорабатывать класс под свои нужны. Сейчас понимаю, что не хватает некоторых вещей. Но это уже чисто механика.
Соответственно, при каждом важном событии (появление нового юзера, бана, мьюта, кика и прочее) - вызываем нужный helper
ФИЛЬТР ССЫЛОК
Ну и то, с чего началась эта эпопея с БД - фильтрация ссылок.
Я решил, что буду удалять все ссылки от ботов и от юзеров, которые в чате менее месяца.
Для этого я достаю через helper из БД информацию, участник = бот или нет, ну и когда участник вступил в группу, чтобы вычислить количество прошедших дней с того момента.
Думаю, для эффективности в будущем добавлю функцию в БД, которая будет каждый день пересчитывать флаг "может постить ссылки", чтобы бот использовал именно флаг, а не постоянные вычисления дат.
Код самого бота выкладывать не буду, но может быть однажды выложу за символическую стоимость, когда бот будет доведен до ума и иметь полный функционал управления и учета. Но основная работа уже выполнена.
Вот такая табличка в БД у нас получилась.
Не буду раздувать пост водой. На этом пока что хватит. Следите за дальнейшими новостями, если интересно!
бот
samurai
программирование
it
айти