Как запустить бота через командную строку
Перейти к содержимому

Как запустить бота через командную строку

  • автор:

Создаём бота в телеграмм. Выполняем команды на ПК. Уже делаем это прямо из Телеграмма. Часть вторая. ⁠ ⁠

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

Вообщем дальше делов минут на 9. примерно.

Первым делом нужно завести себе бота в Телеграмм. Если вы там не зарегистрированы, то регистрируйтесь. После этого нужно найти «человека» с именем @BotFather. Пишем ему «/newbot». После чего он просит придумать и ввести имя бота, а затем просит ввести и имя пользователя. От него нам нужно только то, что обведено красненьким на картинке ниже(token). Информация эта сугубо личная так, что сохраните и никому не показывайте)) Вот я завёл себе еще одного для примера.

Создаём бота в телеграмм. Выполняем команды на ПК. Уже делаем это прямо из Телеграмма. Часть вторая. Telegram бот, Рукожоп, Моё, Python, Быдлокодинг, Видео, Длиннопост

Вторым делом нам нужно установить страшную штуку под названием Python (на момент написания поста версия 3.6.2). Качаем, запускаем, ставим галочку, нажимаем инсталл. Всё)))

Создаём бота в телеграмм. Выполняем команды на ПК. Уже делаем это прямо из Телеграмма. Часть вторая. Telegram бот, Рукожоп, Моё, Python, Быдлокодинг, Видео, Длиннопост

Теперь нужно установить пакет для общения с Телеграмм.

Открываем командную строку. Для этого нужно открыть пуск, там есть строка для ввода буков. Пишем в неё «cmd» и нажимаем Enter. Либо Пуск —> Все программы —> Стандартные —> Командная строка. Щелкаем по ней правой кнопкой мыши и выбираем «Запуск от имени администратора». Так наверное будет даже лучше. Открыли и пишем туда «py -m pip install telepot» и нажимаем Enter. Увидите как будет появляться похожая картинка(она взята из просторов интернета ибо у меня уже стоит этот пакет).

Создаём бота в телеграмм. Выполняем команды на ПК. Уже делаем это прямо из Телеграмма. Часть вторая. Telegram бот, Рукожоп, Моё, Python, Быдлокодинг, Видео, Длиннопост

Ну, что же. Теперь нужно наговнокодить самого бота. Который будет выполнять какие-то действия, от каких-то команд написанных в Телеграмм. Сильно вникать не стоит, это ни к чему. Естественно вам нужно будет внести свои данные из первой части.

Создаём бота в телеграмм. Выполняем команды на ПК. Уже делаем это прямо из Телеграмма. Часть вторая. Telegram бот, Рукожоп, Моё, Python, Быдлокодинг, Видео, Длиннопост

ВАЖНО И ОЧЕНЬ ВАЖНО. Вот ВМЕСТО иксов, там где обведено красной линией, в строке №33, в скобочках промеж кавычек, нужно вставить как раз то, что нам дал «отец ботов» (@BotFather) — ваш token.

http://www.sublimetext.com/2 Программа для редактирования кода.

Ниже вписываете GUID своих схем электропитания. В принципе туда можно писать то, что вам нужно если вы знаете, что делаете. Это обычная команда для командной строки. В строке №36 такая же команда, но на выключение ПК. Потом идут адреса на смену устройства воспроизведения. На самом деле просто внимательно присмотритесь и вам всё станет понятно. Блин, написал и нарисовал как смог. Не художник я и в программирование не шарю).

if ‘/0’ in command: В кавычках команда которую мы будем писать в Телеграмм. Можно и слова и по русски но начинать нужно именно с косой палочки.

p = subprocess.Popen(cmd0, shell=True) А тут собственно выполняется команда которую мы задали для переменной «cmd0». Для понятности нарисовал длинную красную загогулину.

bot.sendMessage(chat_id, «Комп не уйдёт в спящий режим») А это ответ бота в чат.

Смотрите и читайте первую часть.

Всё, больше ничего делать не нужно. Запускаем бота и начинаем с ним общаться.

Создаём бота в телеграмм. Выполняем команды на ПК. Уже делаем это прямо из Телеграмма. Часть вторая. Telegram бот, Рукожоп, Моё, Python, Быдлокодинг, Видео, Длиннопост

Файлик с говнокодом нашего бота нужно положить в папку своего пользователя ПК. У меня это «C:\Users\naykob». Ну либо полностью пишите путь до того места, где он у вас будет жить. Вот так выглядит переписка с ботом.

Создаём бота в телеграмм. Выполняем команды на ПК. Уже делаем это прямо из Телеграмма. Часть вторая. Telegram бот, Рукожоп, Моё, Python, Быдлокодинг, Видео, Длиннопост

Вот вообщем-то и всё. Подключайте фантазию. Можно наделать всяких прикольных штук, вплоть до выключения утюга. Посмотрите другие мои посты. Там есть над чем поржать)))

6 лет назад

Согласен. Полезная штука. С первого раза по крайней мере инструкций по запуску бота на винде я не нашел. Спасибо!

раскрыть ветку
6 лет назад

Подскажи, что я делаю не так: написал код в PyCharm, подставил свои данные, но при запуске бота у меня вылезает ошибка. Гуглятина мне не помогла,а в программировании я разбираюсь, как свинья в апельсинах

Иллюстрация к комментарию

раскрыть ветку
3 года назад

Есть проблема, когда закрываю cmd бот перестает работать, можно его сделать постоянным даже когда комп выключен а я сижу с телефона, сомневаюсь что все ботов так запускают

3 года назад

Возможно некропостинг, но я немного модифицировал скрипт ТС.
Добавил клавиатуру, управление громкостью системы, воспроизведением медиа, яркостью дисплея. И еще решил вопрос с автозагрузкой бота. Может кому-то пригодится.
https://github.com/DevCreel/RemoteControlBot

4 года назад

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

раскрыть ветку
Похожие посты
1 год назад
Подписаться

Ответ на пост «Я сделал приложение для разумных трат»⁠ ⁠

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

Еще до введения соответствующего платного функционала в телеграм премиум, я разработал бота, преднозначенного для распознавания и\или модификации речи в голосовых сообщениях. Да, прямо как в ВК. Хотя скорее, как в ВК образца 2017 года, т.к. в угоду бесплатности, а так-же в силу ограниченности аппаратных возможностей сервера, бот использует не самые совершенные технологии распознавания, но тем не менее. Хочется быстро пробежать глазами длинное голосовое? Или в силу физических особенностей, нет возможности слушать голосовые? А может нужно отправить голосовое сообщение не «засветив» голос? (И зачем это вам. ) О том, как реализовать все это (и немного более) при помощи моего бота, я расскажу ниже!

Как это работает? На самом деле просто. Заходим в бота по ссылке: https://t.me/Soulcatcher_voice_changer_bot или вбиваем в поиск тг «Soulcatcher».

Ответ на пост «Я сделал приложение для разумных трат» Разработка, Python, Telegram, Telegram бот, Общение, Анонимность, Распознавание голоса, Ответ на пост, Длиннопост

Переходим в бота, тыкаем Start.

Ответ на пост «Я сделал приложение для разумных трат» Разработка, Python, Telegram, Telegram бот, Общение, Анонимность, Распознавание голоса, Ответ на пост, Длиннопост

Кликаем help, для выбора режима работы

Ответ на пост «Я сделал приложение для разумных трат» Разработка, Python, Telegram, Telegram бот, Общение, Анонимность, Распознавание голоса, Ответ на пост, Длиннопост

На данный момент, реализовано три режима, представленные на скрине. Все предельно просто. Суть первого режима понятна из названия — бот принимает входящее голосовое, распознает речь и возвращает ответ в текстовом формате. Машинная переозвучка работает по тому же принципу, за исключением того, что в качестве ответа, бот пришлет голосовое сообщение с синтетически переозвученным текстом. Изменение тональности вернет исходное голосовое, с измененной на случайнуюю величину (внезапно!) тональностью, прямо как в фильмах про шпиёнов.

Пример использования функции распознавания речи. Выбираем режим, отправляем боту голосовое сообщение, получаем ответ о начале обработки:

Ответ на пост «Я сделал приложение для разумных трат» Разработка, Python, Telegram, Telegram бот, Общение, Анонимность, Распознавание голоса, Ответ на пост, Длиннопост

По окончании обработки, которая обычно занимает несколько секунд, получаем ответ:

Ответ на пост «Я сделал приложение для разумных трат» Разработка, Python, Telegram, Telegram бот, Общение, Анонимность, Распознавание голоса, Ответ на пост, Длиннопост

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

Обращаю отдельное внимание на то, что обработка голосовых сообщений происходит на 3rd party сервере (на моем), что звучит как потенциальная угроза утечки информации. Я, разумеется, даю честное слово, что голосовые сообщения не остаются на сервере по окончании процесса обработки, но тем не менее, заклинаю вас не использовать Soulcatcher, для совершения противоправных действий, а так же, для обработки чувствительных данных, таких как пароли, логины и имена ваших котеек.

Благодарю вас за время, потраченное на чтение поста и надеюсь, что бот окажется кому-то полезным =)

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

Не запускается бот через командную строку

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

28 янв 2023 в 7:01

Мне нужно понять, почему не запускается бот, сделанный на бибилеотеке aiogram, командная строка не запускает бота, хотя в коде не выдает ошибку.

28 янв 2023 в 7:03

тебе нужно использовать использовать команду запуска интерпритатора а не просто указывать файл. python bot.py

28 янв 2023 в 8:16

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Используй команду запуска скриптов на python в терминале.

python bot.py 
python3 bot.py 

Отслеживать
ответ дан 28 янв 2023 в 13:09
Aliaksei Lz Aliaksei Lz
369 2 2 серебряных знака 4 4 бронзовых знака

  • python
  • aiogram
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

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

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.9.3159

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Глава 1 Создаём бота, и отправляем с его помощью сообщения в telegram

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

1.1 Создание телеграм бота

1.1.1 Видео урок о создании telegram бота через BotFather

1.1.2 Конспект о создании telegram бота через BotFather

Для начала нам необходимо создать бота. Делается это с помощью специального бота BotFather, переходим по ссылке и пишем боту /start .

После чего вы получите сообщение со списком команд:

I can help you create and manage Telegram bots. If you're new to the Bot API, please see the manual (https://core.telegram.org/bots). You can control me by sending these commands: /newbot - create a new bot /mybots - edit your bots [beta] Edit Bots /setname - change a bot's name /setdescription - change bot description /setabouttext - change bot about info /setuserpic - change bot profile photo /setcommands - change the list of commands /deletebot - delete a bot Bot Settings /token - generate authorization token /revoke - revoke bot access token /setinline - toggle inline mode (https://core.telegram.org/bots/inline) /setinlinegeo - toggle inline location requests (https://core.telegram.org/bots/inline#location-based-results) /setinlinefeedback - change inline feedback (https://core.telegram.org/bots/inline#collecting-feedback) settings /setjoingroups - can your bot be added to groups? /setprivacy - toggle privacy mode (https://core.telegram.org/bots#privacy-mode) in groups Games /mygames - edit your games (https://core.telegram.org/bots/games) [beta] /newgame - create a new game (https://core.telegram.org/bots/games) /listgames - get a list of your games /editgame - edit a game /deletegame - delete an existing game

Для создания нового бота отправляем команду /newbot .

BotFather попросит вас ввести имя и логин бота.

BotFather, [25.07.20 09:39] Alright, a new bot. How are we going to call it? Please choose a name for your bot. Alexey Seleznev, [25.07.20 09:40] My Test Bot BotFather, [25.07.20 09:40] Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot. Alexey Seleznev, [25.07.20 09:40] @my_test_bot

Имя вы можете ввести произвольное, а логин должен заканчиваться на bot .

Если вы всё сделали правильно, то получите следующее сообщение:

Done! Congratulations on your new bot. You will find it at t.me/my_test_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this. Use this token to access the HTTP API: 123456789:abcdefghijklmnopqrstuvwxyz For a description of the Bot API, see this page: https://core.telegram.org/bots/api

Далее вам понадобится полученный API токен, в моём примере это 123456789:abcdefghijklmnopqrstuvwxyz .

Более подробно о возможностях BotFather можно узнать из этой публикации. На этом шаге подготовительные работы по созданию бота завершены.

1.2 Установка пакета для работы с телеграм ботом на R

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

Для работы с Telegram Bot API мы будем использовать R пакет telegram.bot.

Установка пакетов в R осуществляется функцией install.packages() , поэтому для установки нужного нам пакета используйте команду install.packages(«telegram.bot») .

Более подробно узнать об установке различных пакетов можно из этого видео.

После установки пакета его необходимо подключить:

library(telegram.bot)

1.3 Отправка сообщений из R в Telegram

Созданного вами бота можно найти в Telegram по заданному при создании логину, в моём случае это @my_test_bot .

Отправьте боту любое сообщение, например “Привет бот”. На данный момент это нам надо для того, что бы получить id вашего с ботом чата.

Теперь в R пишем следующий код.

library(telegram.bot) # создаём экземпляр бота bot  Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz") # Запрашиваем информацию о боте print(bot$getMe()) # Получаем обновления бота, т.е. список отправленных ему сообщений updates  bot$getUpdates() # Запрашиваем идентификатор чата # Примечание: перед запросом обновлений вы должны отправить боту сообщение chat_id  updates[[1L]]$from_chat_id()

Изначально мы создаём экземпляр нашего бота функцией Bot() , в качестве аргумента в неё необходимо передать полученный ранее токен.

Хранить токен в коде считается не лучшей практикой, поэтому вы можете хранить его в переменной среды, и считывать его из неё. По умолчанию в пакете telegram.bot реализована поддержка переменных среды следующего наименования: R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА . Вместо ИМЯ_ВАШЕГО_БОТА подставьте имя которое вы задали при создании, в моём случае будет переменная R_TELEGRAM_BOT_My Test Bot .

Создать переменную среды можно несколькими способами, я расскажу о наиболее универсальном и кроссплатформенном. Создайте в вашей домашней директории (узнать её можно с помощью команды path.expand(«~») ) текстовый файл с названием .Renviron. Сделать это также можно с помощью команды file.edit(path.expand(file.path(«~», «.Renviron»))) .

И добавьте в него следующую строку.

R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА=123456789:abcdefghijklmnopqrstuvwxyz

Далее вы можете использовать сохранённый в переменной среды токен с помощью функции bot_token() , т.е. вот так:

bot  Bot(token = bot_token("My Test Bot"))

Метод getUpdates() позволяет нам получить обновления бота, т.е. сообщения которые были ему отправлены. Метод from_chat_id() , позволяет получить идентификатор чата, из которого было отправлено сообщение. Этот идентификатор нам нужен для отправки сообщений от бота.

Помимо id чата из объекта полученного методом getUpdates() вы получаете и некоторую другую полезную информацию. Например, информацию о пользователе, отправившем сообщение.

updates[[1L]]$message$from
$id [1] 000000000 $is_bot [1] FALSE $first_name [1] "Alexey" $last_name [1] "Seleznev" $username [1] "AlexeySeleznev" $language_code [1] "ru"

Итак, на данном этапе у нас уже есть всё, что необходимо для отправки сообщения от бота в телеграм. Воспользуемся методом sendMessage() , в который необходимо передать идентификатор чата, текст сообщения, и тип разметки текста сообщения. Тип разметки может быть Markdown или HTML и устанавливается аргументом parse_mode .

# Отправка сообщения bot$sendMessage(chat_id, text = "Привет, *жирный текст* _курсив_", parse_mode = "Markdown" )

Если вам необходимо отправить сообщение от бота не в чат, а в публичный канал, то в chat_id указывайте адрс вашего канала, например ‘@MyTGChannel’ .

При необходимости отправить сообщение в приватный канал, вам необходимо скопировать ссылку на любое сообщение данного канала, из ссылки получить его идентификатор, и к этому идентификатору добавить -100.

Соответвенно, к id 012345678 вам необходимо добавить -100, в таком случае в chat_id надо указать -100012345678.

Основы форматирования Markdown разметки:

  • Жирный шрифт выделяется с помощью знака *:
    • пример: *жирный шритф*
    • результат: жирный шритф
    • пример: _курсив_
    • результат: курсив
    • пример: `моноширинный шрифт`
    • результат: моноширинный шрифт

    Основы форматирования HTML разметки:

    В HTML вы заворачиваете часть текста, которую надо выделать, в теги, пример <тег>текст .

    • — открывающий тег — закрывающий тег

    Теги HTML разметки

    • — жирный шрифт
      • пример: жирный шрифт
      • результат жирный шрифт
      • пример: курсив
      • результат: курсив
      • пример: моноширинный шрифт
      • результат: моноширинный шрифт

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

      # Отправить изображение bot$sendPhoto(chat_id, photo = "https://telegram.org/img/t_logo.png" ) # Отправка голосового сообщения bot$sendAudio(chat_id, audio = "http://www.largesound.com/ashborytour/sound/brobob.mp3" ) # Отправить документ bot$sendDocument(chat_id, document = "https://github.com/ebeneditos/telegram.bot/raw/gh-pages/docs/telegram.bot.pdf" ) # Отправить стикер bot$sendSticker(chat_id, sticker = "https://www.gstatic.com/webp/gallery/1.webp" ) # Отправить видео bot$sendVideo(chat_id, video = "http://techslides.com/demos/sample-videos/small.mp4" ) # Отправить gif анимацию bot$sendAnimation(chat_id, animation = "https://media.giphy.com/media/sIIhZliB2McAo/giphy.gif" ) # Отправить локацию bot$sendLocation(chat_id, latitude = 51.521727, longitude = -0.117255 ) # Имитация действия в чате bot$sendChatAction(chat_id, action = "typing" )

      Т.е. например с помощью метода sendPhoto() вы можете отправить сохранённый в виде изображения график, который вы построили с помощью пакета ggplot2 .

      Помимо отправки данных бот имеет и ряд других методов:

      • deleteMessage() — Удалить сообщение
      • editMessageText() — Редактирвать текст сообщения
      • editMessageCaption() — Редактировать описание изображения, файла и т.д.
      • forwardMessage() — Переслать сообщение
      • getFile() — Подготовка файла к скачиванию
      • getMe() — Получить информацию о боте
      • getUpdates() — Получить список обновлений бота
      • getUserProfilePhotos() — Получить аватар пользователя
      • leaveChat() — Выйти из группы
      • clean_updates() — Очистить очередь обновлений

      1.4 Как отправить в telegram таблицу

      К сожалению на момент написания книги telegram не поддерживает полноценные таблицы в HTML или Markdown, но вы можете иметировать подобие таблицы. Для этого воспользуйтесь кодом представленной ниже функции to_tg_table() :

      library(purrr) library(tidyr) library(stringr) # функция для перевода data.frame в telegram таблицу  to_tg_table  function( table, align = NULL, indents = 3, parse_mode = 'Markdown' )  # если выравнивание не задано то выравниваем по левому краю if ( is.null(align) )  col_num  length(table) align  str_c( rep('l', col_num), collapse = '' ) > # проверяем правильно ли заданно выравнивание if ( length(table) != nchar(align) )  align  NULL > # новое выравнивание столбцов  side  sapply(1:nchar(align), function(x)   letter  substr(align, x, x) switch (letter, 'l' = 'right', 'r' = 'left', 'c' = 'both', 'left' ) >) # сохраняем имена t_names  names(table) # вычисляем ширину столбцов names_length  sapply(t_names, nchar)  value_length  sapply(table, function(x) max(nchar(as.character(x)))) max_length  ifelse(value_length > names_length, value_length, names_length) # подгоняем размер имён столбцов под их ширину + указанное в indents к-во пробелов  t_names  mapply(str_pad, string = t_names, width = max_length + indents, side = side) # объединяем названия столбцов str_names  str_c(t_names, collapse = '') # аргументы для фукнции str_pad rules  list(string = table, width = max_length + indents, side = side) # поочереди переводим каждый столбец к нужному виду t_str  pmap_df( rules, str_pad )%>% unite("data", everything(), remove = TRUE, sep = '') %>% unlist(data) %>% str_c(collapse = '\n')  # если таблица занимает более 4096 символов обрезаем её if ( nchar(t_str) >= 4021 )  warning('Таблица составляет более 4096 символов!') t_str  substr(t_str, 1, 4021) > # символы выделения блока кода согласно выбранной разметке code_block  switch(parse_mode, 'Markdown' = c('```', '```'), 'HTML' = c('', '')) # переводим в code res  str_c(code_block[1], str_names, t_str, code_block[2], sep = '\n') return(res) >

      С помощью этой функци вы можете преобразовать любой data.frame и отправить в telegram:

      # преобразуем таблицу iris  tg_table  to_tg_table( head(iris, 15) ) # отправляем таблицу в telegram bot$sendMessage(194336771, tg_table, "Markdown")

      В telegram это буедет выглядеть так:

      У функции to_tg_table() есть несколько дополнительных аргументов:

      • align — выравнивнивание столбцов, тектовая строка, каждая буква соответвует одному столбцу, пример ‘llrrc’ :
        • l — выравнивание по левой стороне
        • r — выравнивание по правой стороне
        • c — выравнивание по центру

        Пример с выравниванием столбцов:

        # преобразуем таблицу iris  tg_table  to_tg_table( head(iris, 15), align = 'llccr') # отправляем таблицу в telegram bot$sendMessage(194336771, tg_table, "Markdown")

        1.5 Как добавить в сообщение Emoji

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

        Получить полный список доступных смайлов можно по этой ссылке.

        Из таблицы нас интересует поле Unicode. Скопиройте код нужного вам смайла, и замените U+ на \U000 . Т.е. если вам необходимо отправить смайл, код котого в таблице U+1F601 , то в коде на R вам необходимо добавить его в текст сообщения вот так — \U0001F601 .

        bot$sendMessage(chat_id, 'Сообщение со смайлом \U0001F601 код которого в таблице U+1F601')

        Результат:

        1.6 Проверка планировщика задач Windows, и отправка уведомления о задачах, работа которых была завершена аварийно

        1.6.1 Видео урок о разработке бота для контроля планировщика заданий

        1.6.2 Конспект о разработке бота для контроля планировщика заданий

        Для работы с планировщиком заданий Windows вам необходимо установить пакет taskscheduleR , и для удобства работы с данными установим пакет dplyr .

        # Установка пакетов install.packages(c('taskscheduleR', 'dplyr')) # Подключение пакетов library(taskscheduleR) library(dplyr)

        Далее с помощью функции taskscheduler_ls() мы запрашиваем информацию о задачах из нашего планировщика. С помощью функции filter() из пакета dplyr мы убираем из списка задач те, которые были успешно выполненны и имеют статус последнего результата 0, и те, которые ещё ни разу не запускались и имеют статус 267011, выключенные задачи, и задачи которые выполняются в данный момент.

        # запрашиваем список задач task  task  taskscheduler_ls() %>% filter(! `Last Result` %in% c("0", "267011") &  `Scheduled Task State` == "Enabled" &  Status != "Running") %>% select(TaskName) %>% unique() %>% unlist() %>% paste0(., collapse = "\n")

        В объекте task у нас теперь список задач, работа которых завершилась ошибкой, этот список нам надо отправить в Telegram.

        Если рассмотреть каждую команду подробнее, то:

        • filter() — фильтрует список задач, по описанным выше условиям
        • select() — оставляет в таблице только одно поле с названием задач
        • unique() — убирает дубли названий
        • unlist() — переводит выбранный столбец таблицы в вектор
        • paste0() — соединяет названия задач в одну строку, и ставит в качестве разделителя знак перевода строки, т.е. \n .

        Всё что нам остаётся — отправить этот результат в телеграм.

        bot$sendMessage(chat_id, text = task, parse_mode = "Markdown" )

        Итак, на данный момент код бота выглядит вот так:

        # Подключение пакета library(telegram.bot) library(taskscheduleR) library(dplyr) # инициализируем бота bot  Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz") # идентификатор чата chat_id  123456789 # запрашиваем список задач task  taskscheduler_ls() %>% filter(! `Last Result` %in% c("0", "267011") & `Scheduled Task State` == "Enabled" &  Status != "Running") %>% select(TaskName) %>% unique() %>% unlist() %>% paste0(., collapse = "\n") # если есть проблемные задачи отправляем сообщение if ( task != "" )  bot$sendMessage(chat_id, text = task, parse_mode = "Markdown" ) >

        При использовании приведённого выше примера подставьте в код токен вашего бота и ваш идентификатор чата.

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

        Так же вы можете вынести различные настройки в отдельный файл конфигурации, и хранить в нём id чата и токен. Читать конфиг можно например с помощью пакета configr .

        [telegram_bot] ;настройки телеграм бота и чата, в который будут приходить уведомления chat_id=12345678 bot_token=123456789:abcdefghijklmnopqrstuvwxyz"
        library(configr) # чтение конфина config  read.config('C:/путь_к_конфигу/config.cfg', rcmd.parse = TRUE) bot_token  config$telegram_bot$bot_token chat_id  config$telegram_bot$chat_id

        1.7 Настраиваем расписание запуска проверки задач

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

        Предположим, что мы сохранили код нашего бота в файл check_bot.R . Для того, что бы запланировать регулярный запуск этого файла выполните следующие шаги:

        1. Пропишите в системную переменную Path путь к папке в которой установлен R, в Windows путь будет примерно таким: C:\Program Files\R\R-4.0.2\bin .
        2. Создайте исполняемый bat файл, в котором будет всего одна строка R CMD BATCH C:\rscripts\check_bot\check_bot.R . Замените C:\rscripts\check_bot\check_bot.R на полный путь к вашему R файлу.
        3. Далее настройте с помощью планировщика задач Windows расписание запуска, например на каждые пол часа.

        1.8 Заключение

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

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

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

        1.9 Тесты и задания

        1.9.1 Тесты

        Для закрепления материла рекомендую вам пройти тест доступный по ссылке.

        1.9.2 Задания

        1. Создайте с помощью BotFather бота.
        2. Перейдите к диалогу с ботом, и узнайте идентификатор вашего с ботом чата.
        3. Отправьте с помощью созданного бота в telegram первые 20 строк из встроенного в R набора данных ToothGrowth .

        Если вы всё сделали правильно то результат будет следующим:

        Запускаем Python-скрипт на сервере, чтобы он работал всё время

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

        Сейчас нам нужно такое решение, чтобы бот автоматически перезапускался при любых обстоятельствах. Этим и займёмся.

        Коротко — суть

        Чтобы было понятно, что тут происходит, вот короткая версия:

        1. Настраиваем удалённый доступ к серверу.
        2. Создаём папку и заливаем в неё скрипт, который в итоге должен будет работать всё время.
        3. Создаём у себя на компьютере файл службы — он управляет настройками автозапуска скрипта.
        4. Отправляем файл службы на сервер.
        5. Обновляем на сервере данные обо всех службах и запускаем нашу.

        Теперь подробно про каждый шаг.

        Предварительная работа

        Основное, что мы будем использовать, — это удалённый доступ к серверу по SSH. Для этого он должен быть включён на самом сервере, и там же можно сразу посмотреть параметры доступа. Например, для работы нашего учебного сервера мы пользуемся услугами SpaceWeb, где доступ по SSH включается из панели управления:

        Запускаем Python-скрипт на сервере, чтобы он работал всё время

        Запускаем SSH и проверяем, что соединение устанавливается. Чтобы соединиться, нужно написать в терминале команду ssh имя_пользователя@адрес_сервера, после чего нажать Enter. Сервер спросит пароль, и, если мы его правильно ввели, нас пустят.

        Запускаем Python-скрипт на сервере, чтобы он работал всё время

        Мы видим приветствие сервера, значит, всё прошло хорошо и мы можем управлять им со своего компьютера. Для этого нужно будет писать в терминал команды и реагировать на то, что тебе ответит сервер.

        Отправляем скрипт на сервер

        Чтобы не захламлять корневую папку на сервере, создадим новую папку bot. Вот эта команда:

        После этого открываем новую командную строку на компьютере, а не на сервере. Для этого нужно запустить ещё одно окно терминала. Там пишем такое:

        scp /Users/mihailpolanin/Downloads/bot.py mpolyanin@77.222.61.9:bot

        Вот что это означает:

        • scp — копирование файла по SSH;
        • /Users/mihailpolanin/Downloads/bot.py — это путь к нашему скрипту на компьютере. Его замените на то, что будет у вас;
        • mpolyanin@77.222.61.9 — адрес сервера и логин пользователя. Это тоже замените на ваши данные;
        • : — отделяет сервер от папки;
        • bot — название папки, которую мы только что создали на сервере.

        Лайфхак: чтобы не писать вручную пути до файлов на локальном компьютере, можно перед началом ввода пути просто перетащить файл в окно терминала. Терминал поймёт, что вы имели в виду «путь до этого файла», и подставит данные сам.

        После запуска у нас попросят пароль от сервера — вводим его и видим статистику отправки файла:

        Запускаем Python-скрипт на сервере, чтобы он работал всё время

        Переключаемся обратно в SSH-соединение и проверяем, что файл скопировался и лежит в папке. Для этого вводим две команды: первая перейдёт в эту папку, а вторая покажет её содержимое:

        Запускаем Python-скрипт на сервере, чтобы он работал всё время

        Готовим файл для работы службы

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

        Создаём на компьютере новый файл bot.service и вставляем туда такое:

        [Unit] Description=tg-bot After=multi-user.target [Service] User=root Group=root Type=simple Restart=always ExecStart=/usr/bin/python3 /bot/bot.py [Install] WantedBy=multi-user.target

        Два самых важных параметра — это путь к нашему скрипту (/bot/bot.py) и название службы: tg-bot. Название может быть любым, а вот путь к скрипту нужно указать точно.

        Теперь закидываем этот файл на сервер в папку /usr/lib/systemd/system. Для этого в командной строке компьютера пишем:

        scp /Users/mihailpolanin/Downloads/bot.service mpolyanin@77.222.61.9:/usr/lib/systemd/system

        Как и раньше, не забудьте заменить адрес до файла .service на вашем компьютере, а также имя пользователя и адрес сервера. Первый адрес можно не писать вручную, а перетащить файл в терминал сразу после набора команды scp.

        Запуск службы

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

        sudo systemctl daemon-reload

        И сразу включим наш сервис, чтобы он не отключался при перезагрузке сервера:

        sudo systemctl enable bot.service

        Всё, можно запускать наш телеграм-бот как службу. Вот основные команды для этого:

        • sudo systemctl start bot.service — запустить службу;
        • sudo systemctl stop bot.service — остановить службу;
        • sudo systemctl status bot.service — посмотреть статус, работает или нет.

        Что дальше

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

        Любишь Python? Зарабатывай на нём!
        Изучите самый модный язык программирования и станьте крутым бэкенд-разработчиком. Старт — бесплатно.

        Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём!

        Получите ИТ-профессию

        В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *