Запуск бота Запуск бота telegram bot python run

Запуск бота

Open in new window

Пытаемся импортнуть либы.

#!/usr/bin/env python
import sys
from telegram.ext import Updater
from telegram.ext import CommandHandler, CallbackContext
from telegram import Bot

No module named 'telegram'

Устанавливаем пакет

pip install python-telegram-bot==12.0.0b1

Стартуем бота

Запрашивем имя.

try:
    botname = sys.argv[1]
except:
    print("Введите в качестве аргумента имя бота например ./run.py my_bot")
    sys.exit()
print("Запускаю бота %s" % botname)

Считываем настройки из папки по имени бота.

bot_path = '%s/%s' % (DATA_DIR,botname)
print("Читаю настройки из %s" % bot_path)
f = open(bot_path+'/key','r')
key = f.read()
f.close()
print("Ключ: %s" % key)

Определим ф-цию обработчик команды /start.

def start(update: Updater, context: CallbackContext):
    print("Start command!")

start_handler = CommandHandler('start', start)


updater = Updater(token=key, use_context=True)
updater.dispatcher.add_handler(start_handler)
updater.start_polling()

Получаем идентификатор комнаты и имя пользователя.

username = update.message.from_user['username']
room_id = update.message.chat_id 
print("Username is %s room_id=%s" % (username,room_id))

Определяем глобально (для текущего модуля-файла) переменную bot для отправки сообщений.

bot = Bot(token=key)

Ему мы будем скармливать chat_id и полезную нагрузку.

Шлем сообщение

bot.send_message(room_id,'Hello. How are you?')

Шлем картинку

bot.send_photo(chat_id=room_id, photo=open('%s/%s/index/1.jpeg' % (DATA_DIR, botname), 'rb'))

Шлем кнопку

Создадим массив с кнопками.

from telegram import InlineKeyboardButton

....

button_list = []
button_list.append(InlineKeyboardButton('Test 1'))
button_list.append(InlineKeyboardButton('Test 2'))
print(button_list)


[<telegram.inline.inlinekeyboardbutton.InlineKeyboardButton object at 0x7fec8675bf98>, <telegram.inline.inlinekeyboardbutton.InlineKeyboardButton object at 0x7fec867840b8>]

Добавим к кнопкам полезную нагрузку, которую будем принимать новым обработчиком.

button_list.append(InlineKeyboardButton('Test 1',callback_data='one'))
button_list.append(InlineKeyboardButton('Test 2',callback_data='two'))

Для корректной отправки кнопки располагаются внутри вложенного массива, и его нужно преобразовать.

Функция преобразования массива.

def build_menu(buttons,n_cols):
    menu = [buttons[i:i + n_cols] for i in range(0, len(buttons), n_cols)]
    return menu

Преобразуем массив.

button_list = build_menu(button_list,n_cols=1)

Сформируем окончательный объект класса InlineKeyboardMarkup для отправки и отправим.

from telegram import InlineKeyboardButton, InlineKeyboardMarkup

button_list = InlineKeyboardMarkup(build_menu(button_list,n_cols=1))
bot.send_message(room_id, 'Buttons', reply_markup=button_list)
bot.send_message(room_id, 'Buttons', reply_markup=button_list)

telegram bot page

Other topics