Friendly telegram userbot как установить
В данной статье я расскажу о том как написать Telegram бота с нуля. При этом, делая это не на коленке, а достаточно “по-взрослому”: имея “на борту” Django (для управления контентом, настройками бота, расписанием выполнения задач и пр.), Celery, python-telegram-bot в качестве обертки над Telegram API, Redis, PostgreSQL для хранения всего, что нужно боту. При этом для разработки используя Docker, а деплой в продакшн реализуя через Dokku с python buildback-ом от Heroku.
В качестве примера разработае м простенького бота, который порадует всех любителей поэзии: раз в сутки он будет присылать случайный стих, который будет парсить с одного из сайтов со стихами. Кроме этого, пользователи бота смогут по кнопке получать сколько угодно случайных стихов здесь и сейчас. Понравившиеся стихи смогут добавлять в избранное с возможностью последующего просмотра и прочтения.
Первым делом оставлю ссылки на репозитории, где все можно посмотреть, потыкать, клонировать и применить в своих проектах:
Telegram поддерживает два режима работы:
Как легко догадаться, webhook-и намного более эффективны. Аналитики подсчитали, что, в среднем, 98.5% запросов в режиме polling-а происходит “вхолостую”, тогда как эффективность webhook-ов, само собой, равняется 100%, потому что обращение происходит тогда и только тогда, когда появляется событие для этого обращения.
Polling — быстрое идеальное решение для разработки и отладки, поэтому его мы и используем для этих целей.
Webhook — идеален для продакшена.
Первое с чего следует начать разработку бота — с его регистрации.
Для регистрации бота добавляем в Телеграм @BotFather — головного бота, где происходит регистрация новых ботов.
Пишем команду /newbot и задаем наименование нашего бота. В моем случае: “Поэтическая душа”.
После этого бот попросит ввести имя на латинском для никнейма бота, которое должно заканчиваться на _bot. В моем случае будет: poetry_soul_bot.
После этого бот выдаст информацию о том, по какой ссылке можно начать диалог с ботом и токен, который необходимо сохранить и добавить в .env файл проекта (об этом позже).
На этом — регистрация бота завершена. Можно переходить к разработке.
.env файлик содержит в себе переменные окружения, которые нужны нам для локальной разработки. При деплое на прод мы единожды при развертывании приложения пропишем несколько переменных окружения на сервере и более про это забудем. Основные переменные, которые нам понадобятся:
Dockerfile — докерфайл проекта, базовые директива для докера, применяться будет только для локальной разработки.
docker-compose.yml — тут описаны сервисы, которые будут подняты в контейнерах докером на локальной машине. По умолчанию это: db (PostgreSQL), redis, web, bot, celery, celery-beat (последние два нужны для периодических задач, которые, возможно, понадобится выполять нашему боту).
entrypoint.sh — последний файлик для локальной работы проекта, говорит докеру, что делать после того как поднимутся все контейнеры. Тут говорим, что надо сделать миграции, создать админа по кредам из .env файла, прогрузить различного рода фикстуры, если таковые имеются в проекте, собрать статику и запустить сервер.
Procfile — данный файл необходим для Dokku при деплое на прод. Он содержит одну или более строк описывающих типы процессов и ассоциированных им команд. При деплое приложения в Dokku будет создан Docker образ, затем Dokku извлечет файл Procfile и команды, которые в нем описаны, будут переданы в docker run. В нашем случае мы говорим, что необходимо сделать миграции, поднять gunicorn сервер, запустить celery воркера и celery beat.
requirements.txt — тут все понятно, список зависимостей нашего бота, которые будут ставится как при развертывании на локальной машине, так и при деплое на продашкн.
run_pooling.py — для кейса, когда приложение работает в pooling режиме (на локальном ПК).
runtime.txt — говорит Dokku, какую версию Python мы хотим использовать.
staticfiles — в данной папке вся статика проекта (админка).
media — по умолчанию используем данную папку для хранения медиа файлов. Предположим, мы из админки закачиваем какие-то картинки, которые надо будет показывать пользователям, вот они падают в данную папку потому, что в settings.py проекта прописано: MEDIA_ROOT = os.path.join(BASE_DIR, ‘media’)
logs — очень важная папка, потому что по логам мы будем отлавливать все, что происходит с ботом. В settings.py у нас задан логгер по умолчанию, который будет писать в файлик main.log все, что надо, ротируя его каждые 5 Мб.
dtb — головная папка Django проекта. Тут, скорее всего, ничего менять не придется, кроме settings.py.
tgbot — вся бизнес-логика бота находится в данной папке.
tgbot/admin.py — регистрирует модели приложения для использования в админке.
tgbot/models.py — содержит все модели, используемые ботом. Как минимум для базовой работы необходимы модели:
- Config — для задания различных параметров бота в формате “параметр” — “значение”;
- User — для пользователей бота;
- Location, Arcgis — для работы с геокодированием, если будет надо боту;
- UserActionLog — фиксация действий пользователя.
tgbot/tasks.py — celery задачи, которые можно устанавливать на исполнение по расписанию в очень удобной форме в админке проекта благодаря django-celery-beat.
tgbot/utils.p — различные функции-хелперы.
tgbot/fixtures — здесь могут быть различные фикстуры с данными для моделей проекта.
tgbot/migrations — тут все понятно, миграции проекта.
tgbot/templates — кастомные шаблоны для админки.
tgbot/handlers/admin.py — модуль-обработчик событий для пользователей с правами администратора. Наша модель пользователей, описанная в модуле tgbot/models.py содержит возможность задавать различные права пользователям. Так вот, если пользователь — администратор, то можно описать для него тот или иной функционал, который будет реализовываться при вызове им команд бота. Логика как раз описывается в данном модуле.
tgbot/handlers/files.py — модуль-обработчик событий, связанных с отправкой боту файлов. Опять же, по-умолчанию, заточен на администраторов. Когда мы посылаем какой-нибудь файл боту (фото, видео, документ и пр) — файл сохраняется и ему присваивается уникальные ID. В последующем, если мы хотим отослать файл пользователю, можно в соответствующий API метод передавать полный URL до этого файла (например, на внешнем хранилище), а можно передать просто Telegram ID этого файла. Вот как раз тут описана функция, которая возвращает ID файла отосланного боту, если его отослал пользователь с правами администратора.
tgbot/handlers/handlers.py — головной модуль-обработчик всех пользовательских событий, которые могут возникнуть у пользователей в процессе взаимодействия с ботом. Логика большинства функций довольно простая: прилетает в метод два параметра — update и context, из которых можно извлечь все: id чата, информацию о пользователе, что отослано и т.п. Далее происходит та или иная бизнес-логика, после чего, либо вызывается api метод edit_message, либо send_message, либо какая-то другая отправка, либо ничего, в зависимости от нужд логики.
tgbot/handlers/utils.py — функции-хелперы для работы обработчиков. Базовый набор: функция отсылки пользователя действия “печатаю”, декоратор для логирования и обертка над api методом send_message с обработками исключений.
tgbot/handlers/manage_data.py — в данном модуле определяются переменные для параметра callback_data, задаваемого при использовании клавиатуры. Т.е. в keyboard_utils модуле мы создаем клавиатуры, которые состоят из кнопок, а у кнопок есть два главных параметра: текст и обратный вызов, т.е. какая строка будет отправлена боту, когда пользователь нажмет на кнопку.
tgbot/handlers/static_text.py — в данный модуль выносим все текстовые данные, которые используем в боте.
Теперь, имея представление о структуре нашего проекта, мы можем немного углубиться в код, чтобы понять как и что происходит.
Прежде всего, небольшая вводная. Разворачивая проект в Docker-е на локальной машине, не забывайте, что после того как внесли правки в код, необходимо перезагрузить контейнер с ботом. Т.е. вы делаете:
docker-compose up -d — build — в результате поднимутся все контейнеры.
Далее просматриваете их:
И, найдя в списке контейнер с ботом пишите (когда это необходимо):
docker restart XXX , где XXX — ID контейнера.
Соответственно, если вы изменяете Celery-задачи, то не забывает перезагружать контейнер соответствующий для тестирования.
Для нашего проекта, не считая стандартных моделей из скелетона, необходимо добавить две новых: для хранения полученных стихов и для хранения списка избранных стихов пользователем.
Модуль /tgbot/poetry.py содержит в себе класс, который описывает головную логику проекта. Давайте рассмотрим его.
У класса есть два свойства — адрес источника и домен источника для последующей компоновки ссылок на стихи.
Инициализируя объект класса мы привязываем его к конкретному пользователю, который обратился за тем или иным функционалом.
Метод load_poem делает следующее: если в него передан id, то он просто выбирает из базы стих по id и возвращает его, если ничего не передано, то используя библиотеки requests и bs4, метод парсит источник со стихами выбирая случайный стих.
Метод add_to_fav получает id стиха, который пользователь хочет добавить в избранное и делает это.
Метод get_authors — нужен в нескольких местах нашего бота. Когда пользователь выбирает посмотреть содержимое избранное, то сначала бот показывает ему алфавитный список всех авторов, которые есть в избранном. Кликнув по букве, бот показывает уже полный список всех авторов на эту букву, наконец, кликнув на автора — пользователь получает список стихов. Так вот, данный метод либо просто возвращает всех авторов из избранного пользователя, либо список из первых букв фамилий авторов. В обоих случаях список отсортирован по алфавиту.
Метод get_poems — тут все просто, получает фамилию автора и возвращает все его стихи из избранного пользователя.
Метод get_poem_by_id — имеет красноречивое название.
Метод format_poem — статический, получает объект модели Poem и возвращает строку в разметке Markdown, которая будет красиво выводится ботом (название — жирным, автор — курсивом).
Центральный модуль нашей логики — /tgbot/handlers/dispatcher.py, а именно его метод setup_dispatcher.
Здесь происходит связка событий с нашими реакциями на события. Например, следующая строчка говорит о том, что мы хотим добавить в диспетчер обработчик команд (это, когда пользователь печатает слеш и что-то там), который при вводе команды /start вызовет соответствующую функцию command_start из модуля commands:
А следующая строчка говорит о том, что мы хотим добавить в диспетчер обработчик нажатия на кнопку пользователем CallbackQueryHandler, который должен вызывать функцию send_more из модуля hnd, когда бот получит callback-команду SEND_MORE, описанную в модуле md:
Теперь рассмотрим как бот реагирует на все это дело на примере функции send_more модуля hnd:
Как видим, функция получает два параметра — update и context.
Context — объект типа telegram.ext.callbackcontext.CallbackContext и он нам не особо интересен, т.к. в нашей функции все, что мы делаем, просто в конце с помощью этого объекта вызываем нужный нам мето: edit_message_text, send_message и т.п.
А вот update — интересный объект, ниже привожу все данные, которые прилетают в нем:
Как видно, в update-е содержится избыточная информация по всему, что нас может интересовать: кто написал, кому написал, что написал, какая была клавиатура, все даты и времена, какая кнопка была нажата и т.п.
В ряде случаев нам необходимо передать не просто некий callback от пользователя, но еще и тот или иной его выбор. Предположим, если речь идет о клавиатуре с алфавитом. В функции обработчике нам необходимо знать, какую буквы выбрал пользователь. Мы, конечно, можем для каждой буквы написать свой обработчик, но это будет ужасно. Поэтому, можно поступить проще. Посмотрим пример формирования клавиатуры для такого случая:
Как видно, мы указываем в callback_data не просто фиксированное значение, а указываем еще после символ решетки и текущую букву кнопки. После чего, в диспетчере мы определяем обработчик события как всегда, обычном способом:
А вот уже в функции обработчике получаем доступ к тому, что было передано после решетки вот так:
Как видно, мы получаем запрос из update.callback_query, а затем обращаемся к свойству data, которое и хранит нужную нам информацию, вычленяя из нее необходимую букву и производя необходимые манипуляции.
Что такое Dokku? Если вкратце и совсем просто Dokku — это open source Heroku, сделанный на базе Docker. Когда я прочел это определение, то следующим вопросом лично у меня был: “А что такое Heroku?”. Да, я слышал о Heroku неоднократно, но никогда не вдавался в подробности. Так вот, Heroku — это облачная PaaS (платформа как услуга)-платформа, поддерживающая множество языков программирования. Heroku, так же как и Dokku, обеспечивает быстрый и легкий деплой приложений “под ключ”: базы данных, логирования, мониторинг, контейниризация и т.д. и т.п. Heroku — модный и дорогой, Dokku — маленький, бесплатный и, возможно, не столь user friendly, но тем не менее, очень простой в изучении.
Можно сказать, что Dokku — это обертка над Docker, Heroku Buildpacks, Nginx и Git. Docker — обеспечивает Dokku контейнерами; Dokku использует свой собственный базовый образ Docker с ubuntu, всеми необходимыми пакетами, Heroku buildpack-ами и т.п. Heroku Buildpack — набор скриптов, задача которых определить, соответствует ли приложение заданному типу, скомпилировать и выпустить его. Билдпак, который Dokku запускает внутри контейнера, создает всю необходимую среду выполнения, устанавливает все зависимости и на выходе приложение готово к работе на 100%. Что касается Nginx, то Dokku передает внутрь приложения номер порта 5000, а для внешних использует порты 49200+, а трафик из/в контейнер проксирует Nginx, который нам не надо конфигурировать вообще никак, потому что Dokku все сделает сам. Наконец, в аспекте GIT-а тоже все очень удобно: Dokku использует git-hooks, отслеживает, когда код пушится в GIT и запускает скрипт, который и делает всю магию: создает docker образ из базового, запускает скрипт инициализации среды, запускает само приложение и рестартует Nginx.
Как я раньше разворачивал проекты, если не использовал Docker (хотя, с ним тоже были свои сложности)? Заход на чистый сервер, обновление пакетов, установка всех необходимых пакетов, создание пользователей, морока с правами, установка git, инициализация и пул проекта, установка virtual env, установка всех зависимостей проекта, установка python сервера и настройка, установка nginx и настройка для связи с Python сервером, установка БД и конфигурация приложения, установка redis, celery и их конфигурация, установка supervisor-а, который бы менеджил все это дело… В общем, очень много всяких муторных действий. Ниже я опишу как все это сделать буквально за пяток команд по 10–15 букв в каждой с использованием Dokku.
В рамках данного раздела с установкой и настройкой Dokku хотелось бы акцентировать еще на одном нюансе — работа со статикой. Если в нашем проекте все отлично и нам не о чем беспокоиться, потому что мы используем whitenoise , то в случае деплоя проекта, который не использует whotenoise, а хочет управлять статикой через nginx (хотя, даже официальная дока Heroku советует использовать whitenoise)— у нас возникнут небольшие проблемы. Дело в том, что хоть у нас и будет выполняться команда collectstatic, но nginx не будет знать, где находится наша статика — это проблема №1. Проблема №2 — статика будет внутри нашего контейнера с приложением, поэтому нам надо как-то смонтировать volume-ы, чтобы nginx имел доступ к статике проекта. Делается это все довольно просто. Ниже пара пунктов реализации:
Бонусом к очень удобной и беспроблемной настройке теперь идет прекрасный и очень удобный деплой: вносите правки в ваш код, делаете комит — пуш, и во время пуша в dokku происходит ребилд проекта, установка всего необходимого, прогоны тестов (если они у вас есть) и сборка проекта. Невероятно круто и очень удобно.
Ознакомившись и разобравшись с написанным, склонировав проект-скелетон, вы готовы начать писать своего бота. Мы изучили основы работы ботов, детально изучили структуру проекта, аспекты реализации функционала и удобные техники разворачивания решения на продакшне.
Ну а если вы не хотите со всем этим морочиться и хотите заказать разработку, то я, как член команды компании Webtronics готов вам в этом помочь. Заходите к нам на сайт, связывайтесь удобным образом и уверен, что мы сможем быть полезны друг другу :)
🤖 Модифицированный и многофункциональный юзер-бот для Telegram.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
- Это всё делалось для опыта.
- Мод предназначен для тех, кто уже пользовался юзерботом.
- Все изменения основного кода также зеркалируются сюда.
- Активная поддержка ведётся только в сообществе Friendly-Telegram RU
- По умолчанию стоит русский язык, кроме Web.
- Добавлена полная поддержка iOS на Alpine Linux iSh. (!)
- Кастомный звук рестарта (Windows 7).
- Фикс ошибки SSL, которая начала появляться у некоторых пользователей с Termux.
- Русифицирован процесс получения кода по Web.
- Сразу ставит регион EU (Европа, пинг 30-50мс) в Heroku прямо во время установки.
- Ставит пакет neofetch по умолчанию. В Heroku нет доступа к пакетному менеджеру apt. (!²)
- Обновляется/устанавливается из этого репозитория.
- Возможно ещё будут и другие изменения.
Вводите APP_ID, API_HASH, номер телефона и код. Дождитесь запуска, когда напишет "Started for ". Последующие запуски -
На Heroku через Termux
Начальный запуск идентичный с примером выше, только в этом случае Вам потребуется ещё и API Key (ключ) с сайта Heroku.
- Telegram App_ID и Api_hash - Тут
- Heroku Api Key - Тут
Alpine Linux (iPhone iSh)
Обновляем список пакетов и сами пакеты. Upd. 25.10: Если появляется ошибка о том что команда apk не найдена, то установите его здесь
Скачиваем необходимые пакеты bash.
Используя nano (или любой другой редактор) открываем конфигурационный файл passwd в папке /etc.
- $ nano /etc/passwd
- Видим первую строку с нашем именем пользователя и путь к shell по умолчанию. В моем случае это root , потому что в системе нет других пользователей -
- root:x:0:0:root:/root:/bin/ash .
- Заменяем ash (иногда может быть просто sh ) => bash . Получится как-то так:
- root:x:0:0:root:/root:/bin/bash
- Сохраняем и идём дальше.
- (! Не нужно обращаться к автору/чат поддержки с вопросами по типу "Как редактировать?", "Как сделать что-то" и особенно с "Что дальше?". В интернете сотни гайдов на эти темы. Пишите только в случае ошибки в самом скрипте или гайде.)
Редактируем теперь /etc/profile и добавим переменную SHELL ниже остальных переменных.
Закрываем консоль командой exit и открываем, чтобы изменения уж точно сработали. Проверим shell, в котором мы находимся:
- echo "$OSTYPE" .
- Получили linux-musl? Успех. Идём дальше. А если пустота - значит где-то и что-то сделали не так. Повторите шаги 3-4.
Локальный сервер работать не будет, ставим только на Heroku. Выполняем команду и ждём, ждём, и снова ждём.
Вводим API_HASH, API_ID и Heroku API_KEY - логинимся. И поздравляю, мы победили Купертино. Проверяем .ping и вступаем в чат поддержки.
No module named requests
Попробуйте вручную установить зависимости, т.к. инсталлер мог попросту пропустить их:The SSL module is not available
No module named friendly-telegram.main
This is split into several methods, one for each supported OS.
Debian-like Linux
Follow the instructions written here to get your API key/hash and ID
On the newly opened menu, select “API Key/hash and ID” When prompted, enter your API key/hash and ID
Termux
Windows
Install Git from the website. Make sure to add Git to the PATH
Install Python from the website. Make sure to add Python to the PATH
Open a Windows Powershell window tutorial.
Follow the instructions written here to get your API key/hash and ID
Enter the API hash and ID when prompted (note the menu is a little archeic on Windows, read everything the program outputs to get a better understanding)
Manual Installation
This is split into several methods, one for each supported OS.
Debian-like Linux
Follow the instructions written here to get your API key/hash and ID
On the newly opened menu, select “API Key/hash and ID” When prompted, enter your API key/hash and ID
Termux
Windows
Install Git from the website. Make sure to add Git to the PATH
Install Python from the website. Make sure to add Python to the PATH
Open a Windows Powershell window tutorial.
Follow the instructions written here to get your API key/hash and ID
Enter the API hash and ID when prompted (note the menu is a little archeic on Windows, read everything the program outputs to get a better understanding)
Полный мануал по установке FTG
Содержание
Благодоря этому, вы можете быстро переходить по разделам статьи
Подготовка к установке
Если у вас что-либо пойдёт не так, проверьте конец статьи, там решение самых частых проблем (ещё не написано, но будет)
Существует несколько вариантов установки
- Установка локально в Termux/iSH
- Установка на удаленном сервере VPS или Heroku
Вам потребуется получить app id и app hash тут
введите ваш номер введите код введите данные сохраните api_id и api_hash
Если вы будете устанавливать удаленно на Heroku, то вам будет нужен api_key, его получим тут
Регистрируемся в Heroku если ранее не было аккаунта
Вводим все данные и не забываем прости капчу
Переходим по ссылке из письма Вводим пароль и заходим в аккаут
Копируем api_key
Никогда не передавайте 3м лицам ваш api_key, так как с помощью него можно получить доступ к вашим dyno на heroku и в итоге украсть аккаунт
Выберите удобный для вас способ установки:
Установка в Termux локально без веб интерфейса
(для настоящих хацкеров)
Если зажать точку на экране терминала, появиться контекстное меню, где можно вставить команду
Вводим команды в терминал
Или вводим команду, если хотите поставить geekFTG:
Ждёте пока он установить все зависимости и компоненты. Хоть и написано 3-7 минут, все зависит от вашего интернета. Если автоматическая установка длиться более получаса, попробуйте ручную установку (ещё не дописано, проверяйте документацию)
Копируем api hash и вставляем его, после нажмите enter. Если ничего не измениться, нажмите enter ещё раз
Если вы получили окно с надписью "Invalid hash", вы ввели не правильно hash. Нажмите enter и введите правильно
Копируем api id и вставляем его, после нажмите enter. Если ничего не измениться, нажмите enter ещё раз
Если вы получили окно с надписью "Invalid ID", вы ввели не правильно api id. Нажмите enter и введите правильно. Начните заново с api hash
Если вы всё сделали правильно, должно появиться такое окно, нажимаем enter Вводим номер с + и нажимаем enter Вам придёт код подтверждения от telegram, вводим его и нажимаем enter Если у вас есть двух этапная аутентификация, вам надо будет ввести пароль. Он НЕ будет отображаться, не волнуйтесь, оно вводиться
Если у вас включён Т9, возможно у пароль введётся не правильно, поэтому лучше заранее скопируйте его и вставьте его для надежности
Если вы ввели пароль не верно, у вас будет возможность его ввести ещё раз. НЕ более 3х попыток
Если вы так и не смогли ввести пароль, начните все заново, вводим команду
Или эту команду, если вы ставили geekFTG
На этот раз проверьте правильность пароля, ПРОБЕЛ тоже символ, нужно копировать без него
Сначала у вас появится эта строка, после очень много текста В итоге у вас появиться эта строка
Введите .ping что бы проверить работу. А так же .help что бы увидеть все команды
После прочтите "Этические правила использования FTG в конце статьи" (не написано)
Так как вы установили всё локально, termux должен быть всегда запушен в фоне. Его нельзя закрывать
Если вам нужно закрыть termux, CTRL C и enter
Установка на Heroku через termux без веб интерфейса
Вам будет нужен api_key, как получить написано на этапе подготовки
Если зажать точку на экране терминала, появиться контекстное меню, где можно вставить команду
Вводим команды в терминал
Или вводим команду, если хотите поставить geekFTG:
Ждёте пока он установить все зависимости и компоненты. Хоть и написано 3-7 минут, все зависит от вашего интернета. Если автоматическая установка длиться более получаса, попробуйте ручную установку (ещё не дописано, проверяйте документацию)
Копируем api hash и вставляем его, после нажмите enter. Если ничего не измениться, нажмите enter ещё раз
Если вы получили окно с надписью "Invalid hash", вы ввели не правильно hash. Нажмите enter и введите правильно
Копируем api id и вставляем его, после нажмите enter. Если ничего не измениться, нажмите enter ещё раз
Если вы получили окно с надписью "Invalid ID", вы ввели не правильно api id. Нажмите enter и введите правильно. Начните заново с api hash
Если вы всё сделали правильно, должно появиться такое окно, нажимаем enter Вводим номер с + и нажимаем enter Вам придёт код подтверждения от telegram, вводим его и нажимаем enter Если у вас есть двух этапная аутентификация, вам надо будет ввести пароль. Он НЕ будет отображаться, не волнуйтесь, оно вводиться
Если у вас включён Т9, возможно у пароль введётся не правильно, поэтому лучше заранее скопируйте его и вставьте его для надежности
Если вы ввели пароль не верно, у вас будет возможность его ввести ещё раз. НЕ более 3х попыток
Если вы так и не смогли ввести пароль, начните все заново, вводим команду
Или эту команду, если вы ставили geekFTG
На этот раз проверьте правильность пароля, ПРОБЕЛ тоже символ, нужно копировать без него
Вводим ваш apy_key
Копируйте и вставляйте api_key внимательно и правильно
Нажимаем enter и ждём
Все готово, FTG установлен. Напишите в любом чате .help что бы проверить
Если оно не изменилось
Вероятнее всего вы где-то накосячили или это баг (редко)
Попробуйте переустановить. Для начала удалим с heroku.
Вводим данные и заходим в аккаунт Находим что-то похожее на это и нажимаем на название dyno
Если у вас совсем не так, заходим на эту страницу
Переходим в настройки dyno Перелистываем в самый низ Копируем имя dyno, вставляем и нажимаем удалить Если вы всё сделали верно, dyno пропадёт с списка
Теперь вводим команду и начинаем всё заново
Или эту команду, если вы ставили geekFTG
Если даже после этого оно не заработает, пишем в неофициальную группу поддержки FTG
Если вы ставили geekFTG следует обратиться в группу поддержки geekFTG
Как получить логи ?
Вводим данные и заходим в аккаунт Находим что-то похожее на это и нажимаем на название dyno
Если у вас совсем не так, заходим на эту страницу
Открываем логи Сохраняем логи
Вот теперь можно идти в группу. Не забудьте прочитать правила и пройти капчу
Установка на VPS
Этот способ требует от вас наличия VPS (как получить бесплатно)
Я ничего особо обьяснять не стал, лишь показал как я это сделать без особых подробностей. Статья написана совсем на другом уровне, в отличие от этой
Если вы ничего не поняли или не смогли все сделать, я могу вас срочно проконсультировать или установить все на ваш VPS под ключ на платной основе. Мои контакты
Но это совсем не обязательно, вам могут помочь в группе, в том числе и я совершенно бесплатно.
Советы новичкам
Что делают те или иные команды:
*добавить русский перевод можно тут
Python: eval, exec исполнение python кода
Эти дополнительные команды доступны только в geekFTG:
Где брать модули
Вообще верховная партия не советует доверять кому либо в вопросе модулей, но вот более менее доверенные источники
Фича GeekTG
В встроенном репозитории geektg-ftg есть довольно много популярных модулей (.dlmod чтоб увидеть список)
Так же, вы можете поделиться модулем который у вас есть с другом, просто
.moduleinfo имя_модуля
Статья ещё не дописана
Что такое юзерботы в Telegram и как их использовать?
Урок по основам Python Pyrogram.
Я, после просмотра видео и решив пользоваться юзерботом:
Комментарий удалён пользователем или руководителем страницы
Mereke,
1.Нажми WIN + R
2.Напиши cmd и нажми enter
3.И пиши свой "pip install"
Читайте также: