Бот для обратной связи на Python для Telegram

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

Предисловие

Чтобы бот работал, необходимо установить библиотеку PyTelegramBotAPI (с предварительно установленным на ПК Python-ом) на свой компьютер. Зайдите в командую строку и выполните следующее:

cd <путь, куда вы установили Python/scripts>. Далее пишем pip install pytelegrambotapi. Начнется установка.

Пишем код

Писать код буду в Sublime Text. Чтобы не заливать постоянно бота на сервер, для теста буду локально запускать его у себя на ПК.

Если вы живете в России, надо установить VPN. Для себя выбрал WindScribe, так как там дают большое количество трафика, которое обновляется каждый месяц. (Для этого надо подтвердить почту).

В папке создадим файл config.py, чтобы не захламлять наш основной файл. В config мы вынесем все значение, например токен бота и ID хозяина. Код:

token = '680628223:AAHf-k32Uoas41uLj1i_mznUa1wKzCJviRI' #Даже не пытайтесь, токен сбросил ;D

owner = 468437664 #Ваш ID

Предлагаю сделать для начала очень простую команду — /ping. Она будет показывать, жив ли бот. Код:

@bot.message_handler(commands=["ping"]) #Создаем команду

def start(message):

try: #Заворачиваем все в try

bot.send_message(message.chat.id, "<b>PONG!</b>" , parse_mode="HTML") # Будет отсылать ответ

except:

bot.send_message(config.owner, 'Что-то пошло не так!') #Данная система (оборачивание в try и except позволит продолжить выполнение кода, даже если будут ошибки)

Обратная связь

Обратную связь решил сделать с командой /send. Для этого, нам понадобится написать код приема и для ответа на сообщения.

Принимаем сообщения

Потребуется написать немного кода:

@bot.message_handler(content_types=["text"])

def messages(message):

if int(message.chat.id) == config.owner:

try:

bot.send_message(message.chat.id, 'Сообщение от администратора было получено')

except:

bot.send_message(config.owner, 'Что-то пошло не так! Бот продолжил свою работу.' + ' Ошибка произошла в блоке кода:\n\n <code>@bot.message_handler(content_types=["text"])</code>', parse_mode='HTML')

else:

pass

try:

bot.forward_message(config.owner, message.chat.id, message.message_id)

bot.send_message(message.chat.id, str(message.from_user.first_name) + ',' +' я получил сообщение и очень скоро на него отвечу :)')

except:

bot.send_message(config.owner, 'Что-то пошло не так! Бот продолжил свою работу.')

Давайте разберем это. Первый блок кода (до else) смотрит, кто ему пишет: если ID совпадает с ID, который указан в файле config , то сообщение будет присылать этому человеку (owner).

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

Отправка

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

@bot.message_handler(commands=['send'])

def process_start(message):

if int(message.chat.id) == config.owner:

try:

bot.send_message(message.chat.id, 'Для отправки сообщения сделай реплей')

bot.forward_message(config.owner, message.chat.id, message.message_id)

bot.register_next_step_handler(message, process_mind)

except:

bot.send_message(message.chat.id, "Что-то пошло не так! Ошибка возникла в блоке кода:\n<code>@bot.message_handler(commands=['send_message'])</code>", parse_mode='HTML')

else:

bot.send_message(message.chat.id, 'Вы не являетесь администратором для выполнения этой команды!')

def process_mind(message):

if int(message.chat.id) == config.owner:

try:

text = 'Сообщение было отправлено пользователю ' + str(message.reply_to_message.forward_from.first_name)

bot.forward_message(message.reply_to_message.forward_from.id, config.owner, message.message_id)

bot.send_message(config.owner, text)

except:

bot.send_message(message.chat.id, 'Что-то пошло не так! Бот продолжил свою работу.' + ' Ошибка произошла в блоке кода:\n\n <code>def process_mind(message)</code>', parse_mode='HTML')

else:

bot.send_message(message.chat.id, 'Вы не являетесь администратором для выполнения этой команды!')

Итак, первая часть кода требует от вас написания команды /send. После этого, бот попросит вас сделать реплей на сообщение, пересланное о другого пользователя. Если вы просто так напишите сообщение, бот сообщит об ошибке. Если с реплеем, то бот скажет, что сообщение было отправлено и отправит сообщение

Полный код бота находится здесь

Если тебе понравилась статья, обязательно подпишись и поставь лайк. Остались вопросы? Смело спрашивай о них в комментариях – обязательно отвечу. :)