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

Как запустить бота через консоль python

  • автор:

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

Разместить можно и не на хостинге, а локально, но тогда бот будет работать только тогда, когда у тебя запущен бот (aka включен комп). Например, можешь скопировать код бота в любой редактор кода (например, PyCharm или VS Code) и в консоли пишешь python3 namebot.py , заменив namebot.py на название файла бота. Перед этим нужно установить на ПК библиотеки, которые указаны в начале кода.

На хостинге флоу по запуску примерно такой же, но для запуска бота нужно будет создать screen (модуль, который создаёт параллельные рабочие столы) – тут уже погугли.

Самый полный стартовый гайд по ботам Telegram (python)

QQ Хабр! В этом гайде мы пройдемся по каждому шагу создания ботов в Telegram — от регистрации бота до публикации репозитория на GitHub. Некоторым может показаться, что все разжевано и слишком много элементарной информации, но этот гайд создан для новичков, хотя будет интересен и для тех, кто уже занимался разработкой в Telegram. Сегодня мы будем делать бота, который отвечает на заданные вопросы.

I. Регистрация бота

Прежде всего нужно зарегать бота. Для этого пишем боту @BotFather команду /newbot , после этого даем боту имя и тэг. После этих действий бот отправит нам токен, который никому давать нельзя.

На этом процесс регистрации бота завершен, можно приступать к самому интересному — кодингу

II. Кодинг

Итак, бота мы будем писать на python. Для начала установим библиотеку pytelegrambotapi. Для этого в командной строке (или в терминале, если у вас MacOS) пишем:

pip3 install pytelegrambotapi

После этого можно приступать, импортируем библиотеки и вводим токен:

import telebot bot = telebot.TeleBot('BOT-TOKEN')

Вместо BOT-TOKEN пишем токен, который получили от BotFather

Сейчас можно уже и поговорить о кнопках

Кнопки

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

from telebot import types

Бывает два вида кнопок, это:

  • Inline-кнопки
  • Keyboard-кнопки

Inline-кнопки

Для создания таких кнопок используется метод InlineKeyboardMarkup, например, сделаем кнопку, которая ведет на сайт Хабра

@bot.message_handler(commands = ['start']) def url(message): markup = types.InlineKeyboardMarkup() btn1 = types.InlineKeyboardButton(text='Наш сайт', url='https://habr.com/ru/all/') markup.add(btn1) bot.send_message(message.from_user.id, "По кнопке ниже можно перейти на сайт хабра", reply_markup = markup) 

Выглядит это так

Более подробно про такие кнопки можно почитать в этой статье

Keyboard-кнопки

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

@bot.message_handler(commands=['start']) def start(message): markup = types.ReplyKeyboardMarkup(resize_keyboard=True) btn1 = types.KeyboardButton("���� Русский") btn2 = types.KeyboardButton('���� English') markup.add(btn1, btn2) bot.send_message(message.from_user.id, "���� Выберите язык / ���� Choose your language", reply_markup=markup)

Вот как это выглядит

Обратно к коду

Теперь уже точно можно вернуться к кодингу, давайте добавим стартовую команду и кнопку

@bot.message_handler(commands=['start']) def start(message): markup = types.ReplyKeyboardMarkup(resize_keyboard=True) btn1 = types.KeyboardButton("�� Поздороваться") markup.add(btn1) bot.send_message(message.from_user.id, "�� Привет! Я твой бот-помошник!", reply_markup=markup)

Далее делаем реакцию бота на кнопки (здесь то уже есть комментарии)

@bot.message_handler(content_types=['text']) def get_text_messages(message): if message.text == '�� Поздороваться': markup = types.ReplyKeyboardMarkup(resize_keyboard=True) #создание новых кнопок btn1 = types.KeyboardButton('Как стать автором на Хабре?') btn2 = types.KeyboardButton('Правила сайта') btn3 = types.KeyboardButton('Советы по оформлению публикации') markup.add(btn1, btn2, btn3) bot.send_message(message.from_user.id, '❓ Задайте интересующий вопрос', reply_markup=markup) #ответ бота

Теперь по этому примеру продолжаем плодить бота

elif message.text == 'Как стать автором на Хабре?': bot.send_message(message.from_user.id, 'Вы пишете первый пост, его проверяют модераторы, и, если всё хорошо, отправляют в основную ленту Хабра, где он набирает просмотры, комментарии и рейтинг. В дальнейшем премодерация уже не понадобится. Если с постом что-то не так, вас попросят его доработать.\n \nПолный текст можно прочитать по ' + '[ссылке](https://habr.com/ru/sandbox/start/)', parse_mode='Markdown') elif message.text == 'Правила сайта': bot.send_message(message.from_user.id, 'Прочитать правила сайта вы можете по ' + '[ссылке](https://habr.com/ru/docs/help/rules/)', parse_mode='Markdown') elif message.text == 'Советы по оформлению публикации': bot.send_message(message.from_user.id, 'Подробно про советы по оформлению публикаций прочитать по ' + '[ссылке](https://habr.com/ru/docs/companies/design/)', parse_mode='Markdown')

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

bot.send_message(message.from_user.id, 'Подробно про советы по оформлению публикаций прочитать по ' + '[ссылке](https://habr.com/ru/docs/companies/design/)', parse_mode='Markdown')

Как мы видим, чтобы сделать гиперссылку мы берем в квадратные скобки слово, которое будет ссылкой, а саму ссылку берем в круглые. В конце строки добавляем parse_mode=’Markdown’

Когда мы дописали основной код нужно вставить важную строку

bot.polling(none_stop=True, interval=0) #обязательная для работы бота часть

Как сказано в комментарии, это строка обязательна для работы бота, чтобы он не отключался и работал постоянно.

Полностью наш код выглядит так:

import telebot from telebot import types bot = telebot.TeleBot('BOT-TOKEN') @bot.message_handler(commands=['start']) def start(message): markup = types.ReplyKeyboardMarkup(resize_keyboard=True) btn1 = types.KeyboardButton("�� Поздороваться") markup.add(btn1) bot.send_message(message.from_user.id, "�� Привет! Я твой бот-помошник!", reply_markup=markup) @bot.message_handler(content_types=['text']) def get_text_messages(message): if message.text == '�� Поздороваться': markup = types.ReplyKeyboardMarkup(resize_keyboard=True) #создание новых кнопок btn1 = types.KeyboardButton('Как стать автором на Хабре?') btn2 = types.KeyboardButton('Правила сайта') btn3 = types.KeyboardButton('Советы по оформлению публикации') markup.add(btn1, btn2, btn3) bot.send_message(message.from_user.id, '❓ Задайте интересующий вас вопрос', reply_markup=markup) #ответ бота elif message.text == 'Как стать автором на Хабре?': bot.send_message(message.from_user.id, 'Вы пишете первый пост, его проверяют модераторы, и, если всё хорошо, отправляют в основную ленту Хабра, где он набирает просмотры, комментарии и рейтинг. В дальнейшем премодерация уже не понадобится. Если с постом что-то не так, вас попросят его доработать.\n \nПолный текст можно прочитать по ' + '[ссылке](https://habr.com/ru/sandbox/start/)', parse_mode='Markdown') elif message.text == 'Правила сайта': bot.send_message(message.from_user.id, 'Прочитать правила сайта вы можете по ' + '[ссылке](https://habr.com/ru/docs/help/rules/)', parse_mode='Markdown') elif message.text == 'Советы по оформлению публикации': bot.send_message(message.from_user.id, 'Подробно про советы по оформлению публикаций прочитать по ' + '[ссылке](https://habr.com/ru/docs/companies/design/)', parse_mode='Markdown') bot.polling(none_stop=True, interval=0) #обязательная для работы бота часть

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

Важно: если вы делаете полноценного бота, которого будете куда-то публиковать, очень стоит добавить в него эмодзи: кнопки, сообщения — все должно включать в себя эмодзи, это важно для красоты

III. Публикация репозитория на GitHub

Для этого на потребуется приложение GitHub Desktop

Создаем новый репозиторий, после этого в папке по умолчанию появится папка с названием вашего проекта. В нее закидываем файлы проекта и в приложении нажимаем кнопку Commit to main. После этого нажимаем на кнопку Publish Repository. Готово! При желании, можно создать Readme.md

IV. Заключение

Здесь я расписал все, что я вспомнил о разработке ботов для telegram, если есть, что предложить — комментарии открыты для вас. Надеюсь, вам это было полезно.

PyTelegramBotAPI на примере проекта сбора обратной связи #5. Деплой

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

Данная статья НЕ является рекламой компании Timeweb, она НЕ содержит реферальных ссылок т.д.

Всем привет! Сегодня заканчивается цикл статей, посвящённых разработке телеграм бота на PyTelegramBotAPI.

Нам осталось лишь выложить нашего бота на сервер и запустить его.

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

Что же такое виртуальный сервер? Если просто — обычный компьютер, только содержащий большое кол-во ядер, оперативки и т.д., а также разбитый на много маленьких серверов. Скажем один большой сервер бьётся на 32 маленьких. Именно эту маленькую часть мы и будем арендовывать.

Есть много компаний которые позволяет вам арендовать сервер, я буду показывать на примере одного из самых доступных хостингов Timeweb (хостинг-компания — компания занимающаяся продажей/арендой серверов, доменов, сетей и т.д.).

Первое что необходимо сделать — перейти на их сайт и зарегистрироваться.

Пример регистрации

Далее вы указываете ваш пароль.

После этого уже можно переходить к аренде сервера. Нажмите на кнопку Облачные серверы , далее кнопка Добавить .

Переход в панель заказа облачных серверов

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

Если у вас нет чёткого понимания какую перационную систему вам взять, то просто ничего не меняйте, пусть будет стандартная (Ubuntu).

Регион также не меняйте (если нет понимания зачем именно вам другой регион).

Конфигурация. Здесь всё зависит от вашего бюджета и размера проекта. Для проекта который я писал (обратная связь) нам будет достаточно базового тарифа (1 ядро, 1ГБ оперативки, 15ГБ NVMe). Стоит такая конфигурация всего 188р в месяц. Деньги будут плавно списываться с вашего счёта timeweb, сервер можно в любой момент выключить/удалить.

Пункт 4 — сеть мы не трогаем, оставляем какой есть. В дополнительных услугах можно выключить Бэкапы (для этого нажмите на услугу).

Пункт 6, 7 — пропускаем.

В 8 пункте указываем имя сервера (может быть любым, это просто название сервера).

Итоговая сумма всего 188р в месяц.

Итоговая сумма

После оплаты подождите некоторое время. Timeweb готовит и настраивает сервер.

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

Нажмём на консоль

После перехода в консоль, напиши команду для клонирования репозитория с вашим проектом с GitHub:

git clone https://github.com/Ryize/CollectClientsFeedbackBot.git

Вместо CollectClientsFeedbackBot.git вставьте ссылку на репозиторий вашего проекта.

Нажмите Enter и дождитесь окончания скачивания.

Перейдите в скачанную директорию:

Установите необходимые библиотеки:

Если у вас есть файл requirements.txt

pip3 install -r requirements.txt

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

pip3 install pytelegrambotapi

Теперь надо указать токен для ТГ бота. В моём проекте он находился в файле config.py. Откроем его с помощью vim и добавим корректный токен. Чтобы выйти из vim и сохранить изменения надо нажать ESC и ввести :wq

После ввода команда нажимаем ESC и вводим :wq

Запуск бота

Бот успешно запущен!

Теперь перейдём в телеграм и протестируем.

Бот работает

Отлично, всё прекрасно работает. Теперь можем спокойно закрыть окно с консолью, бот продолжит работу. Иногда ваш бот может закрываться (при перезагрузках, или если ресурсы кончились) в этом случае вам надо будет опять зайти в консоль и повторить процедуру запуска, или прописать Cloud-init, скрипт который будет отрабатывать пр и запуске сервера и автоматически запускать ваш проект.

Эх. ну вот и закончился цикл статей. За это время мы:

1) Получили токен через BotFather

2) Сделали отправку сообщений

3) Разобрали различные декораторы

4) Добавили два вида клавиатур

5) Напили полноценного бота для сбора обратной связи

6) Запустили бота на сервере

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

Если остались вопросы — всех жду в комментариях и ЛС, стараюсь отвечать на всё.

Увидимся в следующих статьях!

Простой Telegram-бот на Python за 30 минут

На Хабре, да и не только, про ботов рассказано уже так много, что даже слишком. Но заинтересовавшись пару недель назад данной темой, найти нормальный материал у меня так и не вышло: все статьи были либо для совсем чайников и ограничивались отправкой сообщения в ответ на сообщение пользователя, либо были неактуальны. Это и подтолкнуло меня на написание статьи, которая бы объяснила такому же новичку, как я, как написать и запустить более-менее осмысленного бота (с возможностью расширения функциональности).

Часть 1: Регистрация бота

Самая простая и описанная часть. Очень коротко: нужно найти бота @BotFather, написать ему /start, или /newbot, заполнить поля, которые он спросит (название бота и его короткое имя), и получить сообщение с токеном бота и ссылкой на документацию. Токен нужно сохранить, желательно надёжно, так как это единственный ключ для авторизации бота и взаимодействия с ним.

Часть 2: Подготовка к написанию кода

Как уже было сказано в заголовке, писать бота мы будем на Python’е. В данной статье будет описана работа с библиотекой PyTelegramBotAPI (Telebot). Если у вас не установлен Python, то сперва нужно сделать это: в терминале Linux нужно ввести

sudo apt-get install python python-pip

Если же вы пользуетесь Windows, то нужно скачать Python с официального сайта .

После, в терминале Linux, или командной строке Windows вводим

pip install pytelegrambotapi

Теперь все готово для написания кода.

Часть 3: Получаем сообщения и говорим «Привет»

Небольшое отступление. Телеграмм умеет сообщать боту о действиях пользователя двумя способами: через ответ на запрос сервера (Long Poll), и через Webhook, когда сервер Телеграмма сам присылает сообщение о том, что кто-то написал боту. Второй способ явно выглядит лучше, но требует выделенного IP-адреса, и установленного SSL на сервере. В этой статье я хочу рассказать о написании бота, а не настройке сервера, поэтому пользоваться мы будем Long Poll’ом.

Открывайте ваш любимый текстовый редактор, и давайте писать код бота!

Первое, что нужно сделать это импортировать нашу библиотеку и подключить токен бота:

import telebot; bot = telebot.TeleBot('%ваш токен%');

Теперь объявим метод для получения текстовых сообщений:

@bot.message_handler(content_types=['text']) def get_text_messages(message):

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

@bot.message_handler(content_types=['text', 'document', 'audio'])

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

Теперь добавим в наш метод немного функционала: если пользователь напишет нам «Привет», то скажем ему «Привет, чем я могу помочь?», а если нам напишут команду «/help», то скажем пользователю написать «Привет»:

if message.text == "Привет": bot.send_message(message.from_user.id, "Привет, чем я могу тебе помочь?") elif message.text == "/help": bot.send_message(message.from_user.id, "Напиши привет") else: bot.send_message(message.from_user.id, "Я тебя не понимаю. Напиши /help.")

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

bot.polling(none_stop=True, interval=0)

Теперь наш бот будет постоянно спрашивать у сервера Телеграмма «Мне кто-нибудь написал?», и если мы напишем нашему боту, то Телеграмм передаст ему наше сообщение. Сохраняем весь файл, и пишем в консоли

python bot.py

Где bot.py – имя нашего файла.

Теперь можно написать боту и посмотреть на результат:

image

Часть 4: Кнопки и ветки сообщений

Отправлять сообщения это несомненно весело, но ещё веселее вести с пользователем диалог: задавать ему вопросы и получать на них ответы. Допустим, теперь наш бот будет спрашивать у пользователя по очереди его имя, фамилию и возраст. Для этого мы будем использовать метод register_next_step_handler бота:

name = ''; surname = ''; age = 0; @bot.message_handler(content_types=['text']) def start(message): if message.text == '/reg': bot.send_message(message.from_user.id, "Как тебя зовут?"); bot.register_next_step_handler(message, get_name); #следующий шаг – функция get_name else: bot.send_message(message.from_user.id, 'Напиши /reg'); def get_name(message): #получаем фамилию global name; name = message.text; bot.send_message(message.from_user.id, 'Какая у тебя фамилия?'); bot.register_next_step_handler(message, get_surnme); def get_surname(message): global surname; surname = message.text; bot.send_message('Сколько тебе лет?'); bot.register_next_step_handler(message, get_age); def get_age(message): global age; while age == 0: #проверяем что возраст изменился try: age = int(message.text) #проверяем, что возраст введен корректно except Exception: bot.send_message(message.from_user.id, 'Цифрами, пожалуйста'); bot.send_message(message.from_user.id, 'Тебе '+str(age)+' лет, тебя зовут '+name+' '+surname+'?') 

И так, данные пользователя мы записали. В этом примере показан очень упрощённый пример, по хорошему, хранить промежуточные данные и состояния пользователя нужно в БД, но мы сегодня работаем с ботом, а не с базами данных. Последний штрих – запросим у пользователей подтверждение того, что все введено верно, да не просто так, а с кнопками! Для этого немного отредактируем код метода get_age

def get_age(message): global age; while age == 0: #проверяем что возраст изменился try: age = int(message.text) #проверяем, что возраст введен корректно except Exception: bot.send_message(message.from_user.id, 'Цифрами, пожалуйста'); keyboard = types.InlineKeyboardMarkup(); #наша клавиатура key_yes = types.InlineKeyboardButton(text='Да', callback_data='yes'); #кнопка «Да» keyboard.add(key_yes); #добавляем кнопку в клавиатуру key_no= types.InlineKeyboardButton(text='Нет', callback_data='no'); keyboard.add(key_no); question = 'Тебе '+str(age)+' лет, тебя зовут '+name+' '+surname+'?'; bot.send_message(message.from_user.id, text=question, reply_markup=keyboard) 

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

@bot.callback_query_handler(func=lambda call: True) def callback_worker(call): if call.data == "yes": #call.data это callback_data, которую мы указали при объявлении кнопки . #код сохранения данных, или их обработки bot.send_message(call.message.chat.id, 'Запомню : )'); elif call.data == "no": . #переспрашиваем 

Остаётся только дописать в начало файла одну строку:

from telebot import types

Вот и всё, сохраняем и запускаем нашего бота:

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

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