Руководство: как сделать простого бота для Телеграм на JS для новичка в программировании

Я начал погружение в мир IT лишь три недели назад. Серьезно, три недели назад я даже не понимал синтаксиса HTML, а знакомство с языками программирования заканчивалось школьной программой по Pascal 10-летней давности. Однако я решился поехать в IT-лагерь, для детей которого было бы неплохо сделать бота. Я решил, что это вряд ли так сложно.

С этого начался длинный путь, в рамках которого я:

  • развернул облачный сервер с Ubuntu,
  • зарегистрировался на GitHub,
  • выучил базовый синтаксис JavaScript,
  • прочитал тонну статей на английском и русском языках,
  • сделал, наконец, бота,
  • написал эту статью, наконец.

Выглядел итоговый результат примерно так:



Скажу сразу, это статья для начинающих — чтобы просто понять, как делать элементарные вещи с самой нулевой точки.

А еще — для продвинутых программистов — просто чтобы их немного посмешить.

1. Как писать код на JS?

Я понимал, что стоит для начала хотя бы разобраться в синтаксисе языка. Выбор пал на JavaScript, просто потому что следующим шагом для меня было создание приложения на ReactNative. Я начал с курса на Codecademy и остался в большом восторге. Первые 7 дней бесплатно. Реальные проекты. Рекомендую. Прохождение его заняло порядка 25 часов. На самом деле далекоооо не все из него пригодилось. Вот так примерно выглядит структура курса и подробно первый блок.



2. Как зарегистрировать бота?

В начале мне очень помогла вот эта статья из блога некоего Арчакова. Он разжевывает самое начало. Но главное, что там есть — это инструкция по регистрации бота. Лучше я не напишу, и поскольку это самая легкая часть, просто напишу суть. Нужно создать бота и получить его API. Это делается через другого бота — @BotFather. Найдите его в telegram, напишите ему, пройдите простой путь и получите (сохраните!) API-ключ (это набор цифр и букв). Он пригодился мне позже.



3. Как выглядит код бота?

После долгого изучения статей, я понял, что стоит использовать какую-то библиотеку (сторонний код в формате модуля), чтобы не мучаться с изучением API телеграма и созданием с нуля больших кусков кода. Я нашел фреймворк telegraf, который нужно было как-то подключить к чему-то при помощи npm или yarn. Примерно так я понимал тогда, из чего состоит развертывание бота. Смеяться здесь. Я не обижусь. Больше всего при последующем создании бота мне помогли примеры, указанные внизу страницы:



3. Как создать собственный облачный сервер за 100 рублей

После долгих поисков я понял, что команда 'npm' из картинки выше относится к командной строке. Командная строка есть везде, но чтобы получилось ее исполнить, нужно поставить NodePackageManager. Проблема была в том, что программировал я на PixelBook с ChromeOS. Я пропущу здесь большой блок про то, как я познавал Linux — для большинства это пустое и ненужное. Если у вас есть Windows или MacBook, у вас уже есть консоль.

Если в двух словах, я поставил Linux через Crostini.

Однако в процессе я понял, что для постоянной работы бота (а не только когда у меня включен компьютер) мне нужен облачный сервер. Я выбрал vscale.io Я закинул 100 рублей, купил самый дешевый сервер Ubuntu (см.картинку).



4. Как подготовить сервер для запуска бота

После этого я понял, что нужно сделать на сервере какую-то папку, в которую я положу файл с текстом кода. Для этого в консоли (запускать прямо на сайте через кнопку «Открыть консоль») я вбил

mkdir bot

bot — это стало название моей папки. После этого я установил npm и Node.js, что позволит запускать мне потом код из файликов с разрешением *.js

sudo apt update
sudo apt install nodejs
sudo apt install npm

Очень рекомендую на этом этапе настроить подключение к серверу через свою консоль. Вот инструкция Это позволит работать с сервером напрямую через консоль своего компьютера.

5. Как написать код первого бота.

А вот теперь просто открытие для меня. Любая программа — это просто строки текста. Их можно вбить куда угодно, сохранить с нужным расширением и все. Ты прекрасен. Я использовал Atom, но реально, можно просто в блокноте стандартном писать. Главное — сохранить потом файл в нужном расширении. Это как написать текст в Word и сохранить.

Я сделал новый файл, в который вставил код из примера на странице telegraf и сохранил в файл index.js (вообще не обязательно называть файл так, но так принято). Важно — вместо BOT_TOKEN вставьте свой API-ключ из второго пункта.

const Telegraf = require('telegraf')

const bot = new Telegraf(process.env.BOT_TOKEN)
bot.start((ctx) => ctx.reply('Welcome!'))
bot.help((ctx) => ctx.reply('Send me a sticker'))
bot.on('sticker', (ctx) => ctx.reply(''))
bot.hears('hi', (ctx) => ctx.reply('Hey there'))
bot.launch()

6. Как закинуть код на сервер через github

Теперь мне нужно было закинуть как-то этот код на сервер и запустить его. Для меня это стало челленджем. В итоге, после долгих мытарств я понял, что проще будет создать файл на github, который позовляет обновлять код при помощи команды в консоли. Я зарегал аккаунт на github и сделал новый проект, куда и загрузил файл. После этого мне нужно было понять, как же настроить загрузку файлов с моего аккаунта (открытого!) на сервер в папку bot (если вдруг вы вышли из нее — просто напишите cd bot).

7. Как загрузить файлы на сервер через github ч.2

Мне нужно было поставить на сервер программу, которая будет загружать файлы с git. Я поставил git на сервер, вбив в консоль

apt-get install git

После этого мне нужно было настроить загрузку файлов. Для этого я вбил в командную строку

git clone git://github.com/b0tank/bot.git bot

В итоге все из проекта загрузилось на сервер. Ошибкой на данном этапе было, что я, по сути, сделал вторую папку внутри уже существующей папки bot. Адрес до файла выглядел как */bot/bot/index.js

Я решил пренебречь этой проблемой.

И чтобы подгрузить библиотеку telegraf, которую мы запрашиваем в первой строке кода, вбейте в консоль команду.

npm install telegraf

8. Как запустить бота

Для этого, находясь в папке с файлом (чтобы переходить из папки в папку через консоль — выполняйте команду формата cd bot Чтобы убедиться, что вы там, где нужно можно вбить команду, которая отобразит в консоли все файлы и папки, которые там лежат ls -a

Для запуска я ввел в консоль

node index.js

Если нет никакой ошибки — все хорошо, бот работает. Ищите его в телеграме. Если ошибка есть — применяйте свои знания из 1 пункта.

9. Как запустить бота в фоновом режиме

Достаточно быстро вы поймете, что бот работает только тогда, когда вы сами сидите в консоли. Чтобы решить эту проблему я использовал команду

screen

После этого появится экран с каким-то текстом. Это значит, что все хорошо. Вы на виртуальном сервере на облачном сервере. Чтобы понять лучше, как это все работает — вот статья. Просто заходите в свою папку и вбивайте команду по запуску бота

node index.js

10. Как работает бот и как расширить его функционал

Что же умеет наш бот из примера? Он умеет

bot.start((ctx) => ctx.reply('Welcome!'))

говорить «Welcome!» в момент старта (попробуйте поменять текст)

bot.help((ctx) => ctx.reply('Send me a sticker'))

в ответ на стандартную команду /help отправлять сообщение «Send me a sticker»

bot.on('sticker', (ctx) => ctx.reply(''))

в ответ на стикер отправлять одобрение

bot.hears('hi', (ctx) => ctx.reply('Hey there'))

отвечать «Hey there», если ему пишут 'hi'
bot.launch()



Если вы посмотрите код на github, то быстро поймете, что сильно далеко от этого функционала я не ушел. Что активно используется, так это функция ctx.replyWithPhoto Она позволяет отправлять заданное фото или gif в ответ на определенный текст.

Значимая часть кода была написана детьми 11-13 лет, которым я дал доступ к боту. Они ввели свои user-case. Думаю, легко определить, какая часть сделана была ими.

Например, на сообщение «джейк» приходит гифка с известным персонажем из мультика Adventure Time.



Чтобы развивать бота дальше, подключать клавиатуру нужно смотреть примеры, например, отсюда

11. Как обновлять код и перезапускать бота

Не забывайте, что надо обновлять код не только на github, но и на сервере. Делать это просто — стопим бота (нажать ctrl+c),

— вводим в консоль, находясь в целевой папке, git pull
— вновь запускаем бота командой node index.js

END

Многие вещи, описанные в этом файле, будут супер очевидны для продвинутых программистов. Однако когда я сам пытался одним махом перепрыгнуть пропасть до мира ботов, мне очень не хватало подобного гайда. Гайда, в котором не пропускается очевидные и простые для любого IT-специалиста вещи.

В дальнейшем я планирую пост про то, как сделать свое первое приложение на ReactNative в таком же стиле, подписывайтесь!
Поделиться публикацией

Похожие публикации

Комментарии 35

    +1
    «После долгих поисков я понял, что команда 'npm' из картинки выше относится к командной строке.»

    Это реально боль для начинающих. Я два с половиной года назад начал изучать AngularJS, только из-за того что не понял как создать проект на React. Благо через время я встретил видеоуроки(вроде dojo) и там начали с установки NodeJS.
      +1

      Что не так в моем комментарии? Чтобы в дальнейшем не повторять ошибок.

      +7
      >три недели назад я даже не понимал синтаксиса HTML
      >пишу туториалы по JS
      Порог вхождения в IT пробил очередное дно.
        +1
        Мне кажется, что это очень хороший признак. Что порог вхождения снижается, хотя разрыв между самоделкиными типа меня и нормальным профессионалом все равно велик.

        К счастью, моего самомнения не достаточно для того чтобы считать себя разработчиком. Скорее я сам учусь в процессе и пытаюсь выходить из своей песочницы, чтобы получить ОС, пусть и жесткую. Далеко не все руководства ориентированы именно на этот базовый уровень. Поэтому и есть отношение к разработке как к чему-то сакральному, требующему долгих лет изучения теории, прежде чем полуится сделать что-то такое простое и работающее. Хоть как мой бот.

        Буду рад, если продолжите следить за моим становлением)
          0
          А мне кажется что это катастрофа! Хватит снижать уже порог вхождения, снизили так что я жду когда появится какая нибудь Белка со Стрелкой которые будут писать на JS. Вас самоделкиных уже девать некуда, и хорошо если это как лично у вас, в качестве хобби на выходные.
          Процесс разработки это не что то сакральное, тут вы правы, но на этом все. Разработка это то что требует знаний, ПОНИМАНИЯ и чуточку таланта с усидчивостью. Современные же самоделкины игнорируют все факторы кроме зарплаты. За которой в IT они собственно и лезут. И хрен бы с ним, что лезут, но ведь их берут… он ведь что то может. Настал тот момент когда рынок начинает подстраиваться под толку, привет электрону. Далеко за примерами ходить не надо Скайп. Самый яркий из них.
          Извините, не буду. У меня есть своя жизнь, и я не считаю правильным ее тратить на анонимов из интернета, достаточно того что я уже дважды потратил время на комменты.
        +2
        DevOps который мы заслужили
          +6

          Увы, мне крайне не понравился ваш "гайд". Он малополезен. Его проблема в том, что он ничего не объясняет. Вы пишете какие-то команды, но не объясняете ничего:


          • что такое и как работать в командной строке
          • что такое node
          • что такое npm
          • что такое ssh
          • что такое github
          • что такое git
          • как работает screen
          • как работает ваша схема деплоя
          • принцип работы кода вашего бота

          Если кто-то попытается повторять ваш "гайд", и например, у него какая-то команда не сработает, он или она даже не смогут понять, почему, так как у вас дана просто последовательность инструкций без объяснений. Новых знаний она не даст, если только человек сам не отправится изучать мануалы.


          Или вот эта фраза:


          библиотеку (сторонний код в формате модуля)

          явно скопирована откуда-то, а не написана своими словами и потому непонятна.


          Также, вы описываете команды, которые надо выполнить, но ведь их выполнение зависит от того, какая сейчас директория текущая. У вас про это не слова и новичку легко сделать ошибку и не понять, почему команда не работает. Это же важный момент, что все команды у вас зависят от текущей директории.


          Это как написать текст в Word и сохранить.

          Эта фраза сбивает с толку, так как люди могут подумать, что код можно писать в Word.


          В итоге, после долгих мытарств я понял, что проще будет создать файл на github, который позовляет обновлять код при помощи команды в консоли

          Нет объяснения, что такое github, как он будет использоваться, зачем тут вообще нужен git.


          Чтобы убедиться, что вы там, где нужно можно вбить команду, которая отобразит в консоли все файлы и папки, которые там лежат ls -a

          Есть команда pwd, печатающая текущую директорию. Для автозапуска бота на сервере нужно использовать сервисы systemd, иначе после перезагрузки сервера вам придется каждый раз запускать бота вручную.


          Также, как я понял, вы запускаете на сервере код из-под администратора, Это небезопасно, в случае уязвимости в приложении злоумышленник получит полный доступ к серверу, код надо запускать из-под непривилегированного пользователя.


          Это радует, что вы осваиваете программирование, но меня больше всего беспокоит, что вы не уделяете внимание безопасности. Вы планируете писать приложение, а это значит, что вы скорее всего на сервере сделаете API для приложения и будете писать серверный код, который обрабатывает запросы от приложения. И если вы не позаботитесь о безопасности, то злоумышленники смогут, например, украсть данные ваших пользователей. И по статье у меня ощущение, что в безопасности вы разбираетесь слабо.


          Увы, уже были случаи, когда разработчики, например, оставляли в открытом доступе базу данных с данными пользователей. Обращайте внимание на безопасность, разбирайтесь, как что работает, изучайте, что такое сокеты и TCP-порты, а не бездумно повторяйте прочитанные где-то команды, иначе вы можете попасть в число таких разработчиков.

            +1

            Кроме этого, к сожалению, не уделено внимание безопасности токена бота, ведь имея его, можно получить полный контроль над ботом.
            Кроме этого, токен оказался закоммичен в публичный репозиторий на github, где его видит любой желающий: https://github.com/b0tank/bot/blob/master/index.js На хабре совсем недавно была об этом статья.
            Нужно хранить токен отдельно, например в json файле конфигурации, который лежит вместе с ботом, но не коммитится в гит (gitignore в этом поможет) или хранить его в переменных среды, откуда просто считывать скриптом. Возможны другие варианты.

              0
              Спасибо, поскольку бот не планировался для использования в дальнейшем, даже не думал о более сложных путях, чем просто вставить в код. Сейчас осознал проблему с таким подходом. Убрал из общего доступа, попробую через json файл сделать в следующий раз.
                0
                Лучше переменные окружения, это более надёжно, т.к. ключ хранится на сервере, а не на машине разработчика.
              0
              Спасибо большое за такой развернутый комментарий. Действительно, писал текст скорее для того, чтобы систематизировать свое интуитивное понимание. Наверное, стоило сделать больше узких, но развернутых описаний той же работы с командной строкой и удаленным сервером.
              Данный код, конечно, не задумывался как качественное решение, что, однако, не оправдывает мое пренебрежение к вопросам безопасности. Постараюсь выправить эти вопросы в дальнейшем обучении.
              Еще раз спасибо за то что вчитались и вникли.
              0
              Всю энергетику энтузиазма статьи гасит полное отсутствие объяснений чтобы читающий понял.)
                0
                Будем исправляться)
                +1
                Важно — вместо BOT_TOKEN вставьте свой API-ключ из второго пункта.

                Вот это, кстати говоря, вредная рекомендация. В коде не должно храниться секретных ключей, поэтому в изначальном коде используется переменная окружения.


                Теперь ваш ключ виден всему миру здесь: https://github.com/b0tank/bot/blob/master/index.js#L14

                  0
                  Согласен, спасибо, убрал.
                    0
                    А вот и нет, гит все помнит)
                    github.com/b0tank/bot/commit/e4960e83c8f48a97135ac6979103db64f2c806f4
                      0
                      Ого, классно) А не подскажете, как затереть историю? С лету не получается сообразить.
                        0
                        Вообще менять историю очень плохо. Почитайте про git rebase а если точнее то про squash

                        P.s. я не советую применять или не применять, просто говорю про такую возможность.
                          +1
                          Скажите, а все те подводные камни, о которых вы с уважаемым Sabubu написали, вы тоже познали за 3 недели с начала изучения программирования? В начале статьи автор явно указал:
                          Скажу сразу, это статья для начинающих — чтобы просто понять, как делать элементарные вещи с самой нулевой точки.

                          А еще — для продвинутых программистов — просто чтобы их немного посмешить.

                          И, как по мне, статья с этой задачей справилась если не на 5, то на 4+ точно.

                          Лично мне, админу с многолетним стажем, но так и не познавшему сколько-то серьёзную разработку, эта статья реально дала понять многое. Конечно же в ней есть ошибки и про «необъяснение команд» и про «не ту папку», да даже про открытый токен. Но она даёт понять главное: с чего начать.
                          Я ради интереса начал идти по шагам (в приложении Linux Ubintu под Windows 10) и столкнулся с тем, что не ставится nodejs. Ну ладно, у меня есть опыт в linux, мне ясно, что не хватает репозиториев, но те, кто столкнуться с ошибками, легко найдут все ответы в сети или спросят тут, в комментах.
                          А вот понять с чего начать искать, вот для этого такие статьи и пишутся, жаль только, что их очень мало.

                          Когда я только-только сел за компьютер, интернет был очень дорогим и медленным, а гугла вообще не было. В то время всегда добивало то, что на любой твой вопрос, все эти гуру-самоучки, вместо того, чтобы внятно объяснить, называли тебя ламером и посылали к такому-то Гейтсу.

                          И очень замечательно, авторы, вроде shakhaninpavel, всё так разжёвывают (пусть и с явными ошибками и недочётами). Тем, кому действительно интересна тема разработки со временем сами во всём разберутся.

                            0
                            Спасибо большое, evtrifonoff, от ламера)
                            Уверен, что комментарии под статьей со временем (если уже не) станут ценнее самой статьи.
                              0
                              ИМХО. Вся статья написана в стиле:
                              Как сделать это — вот так.
                              Это конечно здорово, но непонятна аудитория. Для начинающих нужно разжевать каждое действие, каждую строку и примеры должны быть как делать надо, а не Токен в открытом доступе, Мертвый код, Возможно еще что-то, но признаюсь не просматривал дальше.
                              А для опытных и тем кому это реально нужно информации мало.

                              P.s. Статья не плохая, скорее даже хорошая, но на 3 из 5. Так что автор(shakhaninpavel) продолжай учиться и все получится. Желательно перед следующей публикацией, как я понял это не последняя статья, дай кому-то с опытом прочитать/проревьювить свою статью и код.
                  0
                  >> прочитал тонну статей на английском и русском языках
                  А среди этой тонны можно было б найти хотя бы пару килограмм best-practics с GIT, ubuntu, разработке.
                  Я думаю ТС лукавит, что прошел курс по JS: код писался после раздела «Introduction» — отсутствуют элементарные функции из третьего раздела.
                    0
                    Не лукавлю, 88% по JS — не успел закончить тему с Request`ами) Сейчас пойду на второй круг, чтобы еще раз все устаканить. Параллельно еще брал курс по HTML, CSS, React (основная моя цель), Node.js. К сожалению, не те темы, которые легко взять нахрапом и сходу применять. Да и опыт в реальных проектах неоценим.
                    +1
                    const bot = new Telegraf(«Здесь куча букв»);

                    Разве ни в одном туториале не было написано, что этот код должен держаться в секрете?
                      0
                      Поправил, скорее для меня не важно было сохранить токен в секрете, но сейчас удалил из общего доступа.
                      0
                      Однако я решился поехать в IT-лагерь, для детей которого было бы неплохо сделать бота

                      Был опыт аналогичного преподавания основ программирования школьникам, тоже кстати в IT-лагере, и для них как по мне лучше всего подходит Scratch. У вас судя по истории на гитхабе все что делали ваши ученики — копипастили строку чтоб выдать картиночку в ответ на вопрос, что в принципе совсем бесполезно. Ну и вообще сам случай — что преподавать основы программирования берут человека который вообще ничего не умеет многое говорит о раздолбайстве и пофигизме руководства лагеря — человек с улицы за копейки расскажет что-то, детишки увидели hello world, а стоимость путевки ребенка покроет стоимость пары таких преподавателей. В итоге все счастливы, но никто ничему не научился
                        0
                        Очень важная для меня самого тема. Так получилось, что последние 10 лет я был как раз преподавателем и даже методистом, но не в сфере IT. Точно видел невероятно умных и подгтовленных детей в сфере IT, например, на проекте AI-Academy С ними можно не только про scratch говорить.

                        Однако в большинстве случаев сложно дать что-то серьезное за те 30 часов, которые у тебя есть. Если структурировать то, за чем дети едут в порядке приоритета:
                        1. Попробовать что-то новое и понять, стоить ли дальше этим заниматься (вдохновение и кругозор).
                        2. Попрактиковаться в знаниях, которые были получены преимущественно в формате теории (project-based learning).
                        3. Узнать какие-то новые фишки, приемы, которые не знали до этого (теория).

                        Телеграм-бот (как лишь одна из составляющих программы, которая заняла не более 5% от общего учебного времени) — это то, что ориентированно на 1 цель и на 2. Кроме этого были занятия по циклам, переменным, объектам, html разметке, скорости печати, принципам гибкой разработки и мн.др.

                        Не всегда, кстати, опытнейший практик может научить неофита. Гораздо проще, если проблемы, с которыми сталкивается начинающий, будут свежи в памяти преподавателя. Ну и в принципе неплохо, чтобы он шарил в педагогику.

                        Боюсь, что про раздолбайство и пофигизм в лагерях (да и в принципе во всей системе образования, частной и государственной) действительно можно писать оды. Но в этом случае вы ошибаетесь.
                        0
                        Я думаю что это очень плохо когда люди приступают к разработке чего либо и даже бота, при этом не зная фундаментальных основ, например работы с терминалом или хотя бы не научатся гуглить, например просто вбить в Гугл «что такое npm», я видел разработчиков с годом работы, не знающих что такое telnet или ping, путающих http и https, не знающих что такое DNS. Я не говорю что это все нужно знать на уровне системного администратора, но хотя бы знать для чего это и иметь возможность проверить открыт ли порт и отвечает ли по сети сервер нужно уметь. Я не разработчик, но могу сварганить CRUD на стеке MEAN, автоматизировал недавно на проекте кучу вещей с помощью Python, сейчас делаю бложик на Django вечерами, я хочу сказать, что когда есть какие то базовые знания ты экономишь много времени себе и другим, да и даётся все намного проще. Почему новички бегут изучать в первую очередь ангуляры и реакты, но банально забывают про CS (Computer Science). За труды конечно спасибо, но толку от статьи мало, как уже говорили многие выше новичкам вы мало помогли так как не объяснили что делает код. Я бы на месте автора начал изучение с CS и Python, имхо Python более универсальный и понятный, опять же код получается легко читаемый и короткий, можно писать и ботов и с системой взаимодействовать и десктоп приложения писать и мобильные Kivy, опять же Python дает вам возможность реализовать, то что задумано очень быстро и с минимальными знаниями. Если ваша цель не побыстрее войти в IT и устроиться веслать на галеру, то советую начать с CS, узнать как работает linux, что такое протоколы например тот же HTTP, не спешите ворваться в IT, сделайте ставку не на скорость а на качество знаний, тогда и вам будет комфортно и работодатель будет доволен.
                          0
                          Спасибо, все разумно. Единственное — как раз вбить в гугл «что такое npm» мне пришлось не раз. И порты открывать научился в процессе. Это как раз путь, который пришлось пройти, но в рамках статьи вряд ли бы получилось рассказать это хоть сколько-нибудь кратко.

                          Про Python тоже сейчас подумываю. Для fullstack так или иначе что-то из серверных хочется взять.
                          +1
                          я использовал команду screen

                          Делать это просто — стопим бота (нажать ctrl+c)

                          Если вы закрыли консольку со скрином, где потом нажимать ктрл+ц? :)
                            0
                            Хороший вопрос) Да, пропустил пункт, как заходить потом на нужный screen)
                            0
                            Похоже на нативную рекламу vscale, ибо автор сильно лукавит

                            Vscale предлагает сервера в МСК и СПБ. А вот ответ техподдержки по поводу размещения Telegram бота у них на VPS.

                            Здравствуйте.

                            К сожалению, данный ресурс недоступен по причине включения в «Единый реестр доменных имен, указателей страниц сайтов в сети «Интернет» и сетевых адресов, позволяющих идентифицировать сайты в сети «Интернет», содержащие информацию, распространение которой в Российской Федерации запрещено»; Федеральной службы по надзору в сфере связи, информационных технологий и массовых коммуникаций (http://eais.rkn.gov.ru/).

                            Надеемся на понимание и дальнейшее сотрудничество.


                            Собственно по этой причине и пришлось отказаться от сотрудничества с ними
                              0
                              К сожалению, нет, это не нативная реклама. К сожалению, потому что тогда мне бы заплатили)

                              vc.ru/selectel/22593-howto-bot-selectel — в процессе поиска нашел среди прочего такую статью. Это не значит, что это единственный вариант, но он точно рабочий.
                                0
                                но он точно рабочий

                                На локальном окружении с включенным VPN вполне может быть. А вот на vscale едва ли, т.к. с его серверов нет доступа к API Telegram, о чем собственно и говорит саппорт
                              +1
                              Для новичка для понимания процесса программирования очень рекомендую CS50 вот на русском, но очень рекомендую именно на английском.

                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.