Как стать автором
Обновить

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

Время на прочтение5 мин
Количество просмотров53K
Всего голосов 27: ↑15 и ↓12+3
Комментарии35

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

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

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

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

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

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

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

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


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

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


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


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

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


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


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

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


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

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


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

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


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


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


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

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

Спасибо, поскольку бот не планировался для использования в дальнейшем, даже не думал о более сложных путях, чем просто вставить в код. Сейчас осознал проблему с таким подходом. Убрал из общего доступа, попробую через json файл сделать в следующий раз.
Лучше переменные окружения, это более надёжно, т.к. ключ хранится на сервере, а не на машине разработчика.
Спасибо большое за такой развернутый комментарий. Действительно, писал текст скорее для того, чтобы систематизировать свое интуитивное понимание. Наверное, стоило сделать больше узких, но развернутых описаний той же работы с командной строкой и удаленным сервером.
Данный код, конечно, не задумывался как качественное решение, что, однако, не оправдывает мое пренебрежение к вопросам безопасности. Постараюсь выправить эти вопросы в дальнейшем обучении.
Еще раз спасибо за то что вчитались и вникли.
Всю энергетику энтузиазма статьи гасит полное отсутствие объяснений чтобы читающий понял.)
Будем исправляться)
НЛО прилетело и опубликовало эту надпись здесь
Согласен, спасибо, убрал.
Ого, классно) А не подскажете, как затереть историю? С лету не получается сообразить.
Вообще менять историю очень плохо. Почитайте про git rebase а если точнее то про squash

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

Публикации

Истории