Гайд: как создать бота для группового чата, который будет выводить инфо участников и напоминать про дни рождения
Многие знают, что у пана Снорковского есть крупный чатик. И в такой беседе тяжело запомнить у кого когда день рождения, и у кого какой ник на DTF. Он спросил у меня, как такое автоматизировать, я ему скинул все готовое, а для вас решил сделать такой туториал. Думаю у многих есть разного размера чаты, и возможно вам захочется тоже такого бота себе заиметь. Так еще и сами его сделаете.
Предисловие
Вы положительно откликнулись на прошлый гайд, поэтому я буду делать разные интересные штучки для вас почаще.
И да, кто писал в прошлый раз свои предложения, какой гайд сделать, не переживайте, я все помню, я выписал себе ваши просьбы отдельно, мы до них дойдем, на все нужно время.
Также я запущу серию лонгов "Погромирование для DTFеров", где мы будем с нуля разбирать Python, и потом будем писать на нем всякие разные штучки. Если в гайдах я упускаю объяснение кода и всех нюансов, то тут все будет разложено по полочкам, что бы как можно больше людей могло влиться в это дело. Часто слышу, что программирование это сложно, и что многие хотели бы делать игры, но код их пугает. Я хочу помочь вам развеять ваши сомнения и провести по пути этих цветных непонятных слов как можно понятнее.
Ну и как в прошлый раз, это более легкая версия гайда, что б вас лишний раз не путать и вам же было легче это все повторить.
Подготовка
Если вы какие-то шаги делали еще по прошлому гайду, просто пропускайте их.
Скачиваем Visual Studio Code:
Установка стандартная.
Скачиваем Python:
ОБЯЗАТЕЛЬНО проставьте галочку на "Add Python to PATH". И дальше обычная установка.
Эти программы есть и на Windows, и на MacOS и на Linux. Просто на эти ссылки кликаете, и на той же странице у вас будет кнопка DOWNLOAD.
Открываем VSCode:
Кликаем по иконке с четырьмя квадратами слева. В поисковой строке пишем "python":
Скачиваем вот это расширение с цифрой 7 на иконке. Это целый пак базовых расширений.
Теперь в поисковой строке пишем "sqlite3 editor":
Скачиваем вот это расширение от пользователя yy0931.
Теперь на той же панели слева кликаем по иконке с двумя файликами.
Пишем код
Создайте на рабочем столе папку (лучше на английском и вместо пробелов используйте _). Ну или где вам удобно. Открывайте ее в редакторе.
File -> Open Folder -> ищем нашу папку на рабочем столе -> Выбрать
Создадим виртуальную среду. Туда мы будем устанавливать необходимые библиотеки.
Жмем Ctrl + Shift + P или command + Shift + P, в зависимости от вашей ОС. В окне пишем python create environment.
Кликаем на соответствующую строку.
Тут выбираем Venv. А дальше кликаем на Python, он там у вас один должен быть.
В папке нашего проекта должна появиться папка .venv. Это та самая виртуальная среда. Теперь ее нужно активировать.
Кликай на Terminal -> New Terminal
Внизу открылось волшебное окно.
В терминале пишите.
Если у вас Windows:
Если MacOS:
И жмакаем Enter.
Если все работает, то вы увидите в начале следующей строки (.venv). На винде так это еще и зеленым будет выделятся, точно не пропустите.
Дальше в том же терминале пишем:
Это библиотека для создания бота в телеграме.
Вот так это будет выглядеть, когда все установиться:
На этом все, теперь создаем в нашей папке еще одну папку bot.
На имя папки наводитесь, там будут вот такие иконки:
Кликаете на папку с плюсиком, и дальше вводите название папки, как я уже писал выше, bot.
Теперь сделайте вот так:
В папке bot создайте еще три папки, и два файла: start_bot.py и create_bot.py. Файл можно создать так же как мы создавали папку, рядом будет иконка файлика с плюсиком.
Или нажмите правой кнопкой мыши по папке, и выберите New File...
На всякий случай уточню, что файлы __init__.py имеют ДВА нижних подчеркивания по бокам, именно по ДВА, не по одному.
Код для db_handlers -> __init__.py:
Код для db_handlers -> admin_db_handlers.py:
Код для db_handlers -> create_table.py:
Код для db_handlers -> user_db_handlers.py:
Код для handlers -> __init__.py:
Код для handlers -> admin_handlers.py:
Код для handlers -> user_handlers.py:
Код для settings -> __init__.py:
Код для settings -> config.py:
Код для settings -> prompts.py:
Что бы это все заработало, вам нужны две вещи.
Первая – создать бота в тг и получить токен.
Пишем BotFather'у:
Тыкаем кнопку Create a New Bot:
Заполняем поля:
Копируем токен:
И вставляем в файл config.py, токен должен находиться в кавычках:
Второе – ваш айдишник. Пишем боту:
Он вам выдаст ваш айди, копируйте его, и вставляйте вместо нулей в файле config.py:
Запуск
Переходим в файл create_table.py:
Запускаем его, нажав на кнопку запуска справа сверху или нажав на клавишу F5:
Если сверху будут вылазить мини окна, выбирайте там всегда первое, python debugger там будет, например.
Этот файл надо запустить ТОЛЬКО ОДИН РАЗ, он создает локальную базу данных. Она у вас слева появиться в файлах, называется database.db. Нажмите на нее, и при помощи расширения, которое мы устанавливали вначале, файл откроется вот так:
В будущем вы сможете вручную менять какие-то данные при необходимости.
Теперь в терминале с активированной виртуальной средой пишите:
После чего пользователи Windows пишут:
А пользователи macOS пишут:
Поздравляю, бот запущен, теперь вы можете пользоваться командами:
/checkbirthday – выдает пользователей, у которых сегодня день рождения (может использовать только админ).
/newuser – позволяет добавить в БД нового пользователя (может использовать только админ).
/getuserinfo – выдает информацию о конкретном пользователе. После команды пишите пробел и имя пользователя, о котором хотите больше узнать.
Для того что бы не писать в чат каждый раз команду, вы можете добавить их в список команд, сделать это можно тут:
Переходите в своего бота в BotFather, кликаете Commands, и вот такое окошко будет. Заполните сами команды и их описание. Но команду /getuserinfo все равно надо будет писать ручками, потому что вам надо еще ник дописать.
И не забудьте бота добавить в нужный вам чат.
Ответы на возможные вопросы:
Почему SQLite? Потому что людям для такого бота и не нужна полноценная БД, тем более для гайда, который я старался сделать проще.
Напоминалка о ДР, но ничего не напоминает. Почему надо самому тыкать кнопку что бы узнать у кого день рождения? Потому что бот будет работать в 99,9% случаев у людей на их же компе, и он не будет делать это круглосуточно, следовательно напоминание по времени бессмысленно, но оно все же необходимо.
Вот и все, вот такой получился бот. Надеюсь для кого-то это было полезно. Ну а если у вас что-то не получается, пишите мне в ЛС, я вам помогу чем смогу. В прошлый раз я был приятно удивлен, как много людей мне писали, и я на данный момент помог всем, кроме одного, там совсем тяжело, и дело уже не в боте, надо ковыряться в компе сидеть самому, что б понять в чем дело.
Ну и конечно же пишите, что бы вы еще хотели видеть. Кто писал свои пожелания в прошлый раз, можете не дублировать, я себе все записал уже.