Файл: Лабораторная работа посвящена созданию бота для мессенджера Telegram. Для ее выполнения вам понадобится зарегистрироваться в telegram.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.01.2024
Просмотров: 393
Скачиваний: 9
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Лабораторная работа: Создание бота для Telegram.Эта лабораторная работа посвящена созданию бота для мессенджера Telegram. Для ее выполнения вам понадобится зарегистрироваться в telegram.Telegram − кроссплатформенная система мгновенного обмена сообщениями (мессенджер) с функциями VoIP, позволяющая обмениваться текстовыми, голосовыми и видеосообщениями, стикерами и фотографиями, файлами многих форматов.Архитектура бота включает в себя 2 части: Frontend и Backend.Frontend – Пользовательский интерфейс и функции, которые работаютнепосредственно на клиентской стороне.Backend – серверная часть проект (Работа с базой данных, сохранения, загрузка данных пользователя)API — это способ обмена информацией между сайтами, программами и приложениями. Можно также сказать, что это набор правил, по которым осуществляется такой обмен.Пользователями программ и сайтов могут быть не только люди, их также используют другие сайты и приложения. Они могут обмениваться данными между собой без участия человека. Это удобно, когда позаимствовать готовое решение проще, чем создавать с нуля собственное.Предварительные требования перед разработкой telegram – бота:
Далее уже можно нажать кнопку “Install Now” и ждем завершения работы инсталлятора.Вместе с сообщением об успешной установке вам предложат увеличить стандартный лимит длины PATH. Хуже от этого точно не будет, так что вполне можете это сделать.Установка VisualStudioCodeПри использовании VS Code в качестве текстового редактора или интегрированной среды разработки (IDE) вам доступны IntelliSense (помощь в завершении кода), анализ кода (помогает избежать ошибок в коде), поддержка отладки (помогает находить ошибки в коде после запуска), фрагменты кода (шаблоны для небольших повторно используемых блоков кода) и модульное тестирование (тестирование интерфейса кода с различными типами входных данных).VS Code также содержит встроенный терминал, который позволяет открывать командную строку Python с помощью командной строки Windows, PowerShell или любой другой, создавая простой рабочий процесс между редактором кода и командной строкой.
Командная строка Python в VSCodeЧтобы открыть терминал в VS Code, выберите Просмотр> Терминал или используйте клавиши CTRL+` (символ обратного апострофа). Терминалом по умолчанию является PowerShell.Создание файла проектаДля того чтобы создать новый файл с расширением .py необходимо выполнить следующие действия: Файл> Создать файл и далее выбрать из выпадающего списка «Файл python».Далее появится пустое окно созданного файла нашего будущего бота.Разработка telegram – бота в VS CodeПеред тем как создать telegram – бота нам необходимо подключить перечень нужных нам библиотек для того, чтобы наш бот заработал:from matplotlib.pyplot import connectimport telebotimport sqlite3from telebot import typesmatplotlib - это основная библиотека для построения научных графиков в Python. Включает функции для создания высококачественны визуализаций: линейных диаграмм, гистограмм и т.д. Визуализация данных и результатов - цель использования библиотеки matplotlib.Для установки matplotlib необходимо в терминале VS Code прописать следующее: pip install matplotlibtelebot (pyTelegramBotAPI) хорошая и лёгкая библиотека для создания бота на python для telegram.Для установки telebot (pyTelegramBotAPI) на Windows вам надо написать в терминале VS Code: pip install telebot.SQLite3 (часто говорят просто SQLite) — это часть стандартного пакета Python 3, поэтому ничего дополнительно устанавливать не придется.Далее необходимо прописать token API для того чтобы связать нашу программу с созданным telegram – ботом:bot = telebot.TeleBot('Прописать ваш token API')Создание telegram – бота в мессенджереСоздадим бота и придумаем ему название:1. Откройте в Telegram бота @BotFather.2. Напишите ему /newbot.3. Придумайте и напишите название бота. Оно будет отображаться в контактах и чатах. Например, «Hello, bot».4. Придумайте и напишите юзернейм. Он используется для упоминания бота и в ссылках. Юзернейм должен быть на латинице и обязательно заканчиваться на «bot». Например, «botmother_hello_bot».Теперь нужно подключить бота в Telegram к вашему аккаунту разработчика:1. Снова откройте @BotFather.2. Скопируйте токен бота и добавьте его в следующую строчку кода:bot = telebot.TeleBot('Прописать ваш token API')
Далее мы соединимся с уже ранее созданной нами базы данных в SQLite:def connecting(): conn = sqlite3.connect("Имя вашей БД.db") return connДля рассылки сообщений пользователям вашего бота необходимо создать функцию, которая будет брать id пользователя бота и осуществлять рассылку сообщений:#функция для рассылки сообщения пользователям в БД users.db@bot.message_handler(commands=['sendall'])def sendall(message): conn = connecting() cursor = conn.cursor() cursor.execute("SELECT id FROM user_id") #id – название столбца, user_id – название таблицы results = cursor.fetchall() for result in results: bot.send_message(result[0], message.text[message.text.find(' '):]) conn.close()commands=['sendall'] – это команда для активации данной рассылки в telegram – боте. Для того чтобы ее активировать и осуществить рассылку вам необходимо открыть мессенджер telegram, зайти в ваш бот и ввести следующую команду: /sendall.Далее пропишем основную команду start для нашего бота. Для того чтобы записать нашего пользователя в БД при команде start пропишите следующий код:@bot.message_handler(commands=['start'])def start(message): #функция для записи id пользователей в БД users.db connect = sqlite3.connect("users.db") # user.db – название вашей БД cursor = connect.cursor() cursor.execute("""CREATE TABLE IF NOT EXISTS user_id( id INTEGER )""") connect.commit() people_id = message.chat.id cursor.execute(f"SELECT id FROM user_id WHERE id = {people_id}") data = cursor.fetchone() if data is None: user_id = [message.chat.id] cursor.execute("INSERT INTO user_id VALUES (?);",user_id) connect.commit() else: bot.send_message(message.chat.id,'Такой пользователь уже существует')Далее приступи к созданию меню для нашего бота: #Меню чат-бота markup = types.ReplyKeyboardMarkup(resize_keyboard=True) item1 = types.KeyboardButton('???? Прайс услуг') item2 = types.KeyboardButton('⚜ Premium услуги') item3 = types.KeyboardButton('❗ Акции') item4 = types.KeyboardButton('???? Запись') item5 = types.KeyboardButton('✆ Контакты') markup.add(item1,item2,item3,item4,item5) bot.send_message(message.chat.id,'Привет, {0.first_name}'.format(message.from_user),reply_markup=markup)name = ''time = ''tel = ''Теперь, когда мы прописали код для создания нашего меню, то, когда вы запустите вашего бота можно увидеть только что созданное вами программно меню в самом низу бота.Для того, чтобы при нажатии на кнопки нашего меню происходили какие-либо действия, например, вывод каких-либо сообщений необходимо прописать следующее:
@bot.message_handler(content_types=['text'])def bot_message(message): if message.chat.type == 'private': if message.text == '???? Прайс услуг': markup = types.ReplyKeyboardMarkup(resize_keyboard=True) item1 = types.KeyboardButton('Седан') item2 = types.KeyboardButton('Кроссовер') item3 = types.KeyboardButton('Универсал') item4 = types.KeyboardButton('Джип') item5 = types.KeyboardButton('Минивен') back = types.KeyboardButton('◀ Назад') markup.add(item1,item2,item3,item4,item5,back) bot.send_message(message.chat.id, '????Прайс услуг', reply_markup= markup) elif message.text == '❗ Акции': bot.send_message(message.chat.id, 'Скидка 10% для такси на все виды мойки с 00:00 до 06:00 утра!') elif message.text == '✆ Контакты': bot.send_message(message.chat.id, 'Автомойка находится по адресу ул. Петра Подзолкова 28/1\nГрафик работы: с Пн по Вс (Без выходных)\nВремя рабоы: с 09:00 до 22:00\nТелефон для связи: 214-50-50') elif message.text == '???? Запись': global name name = message.text bot.send_message(message.chat.id, 'Введите ФИО:',reply_markup=types.ReplyKeyboardRemove()) bot.register_next_step_handler(message, get_time) elif message.text == '⚜ Premium услуги': markup = types.ReplyKeyboardMarkup(resize_keyboard=True) item1 = types.KeyboardButton('★Седан★') item2 = types.KeyboardButton('★Кроссовер★') item3 = types.KeyboardButton('★Универсал★') item4 = types.KeyboardButton('★Джип★') item5 = types.KeyboardButton('★Минивен★') back = types.KeyboardButton('◀ Назад') markup.add(item1,item2,item3,item4,item5,back) bot.send_message(message.chat.id, '⚜ Premium услуги', reply_markup= markup) elif message.text == '◀ Назад': markup = types.ReplyKeyboardMarkup(resize_keyboard=True) item1 = types.KeyboardButton('???? Прайс услуг') item2 = types.KeyboardButton('⚜ Premium услуги') item3 = types.KeyboardButton('❗ Акции') item4 = types.KeyboardButton('???? Запись') item5 = types.KeyboardButton('✆ Контакты') markup.add(item1,item2,item3,item4,item5) bot.send_message(message.chat.id,'◀ Назад',reply_markup=markup) elif message.text == 'Кроссовер': bot.send_message(message.chat.id,'✅ Комплексная мойка (верх салона) - 600 руб.\n✅ Мойка кузова (с пеной и протиркой) - 300 руб.\ \n✅ Отбить (без пены и протирки) - 120 руб.\n✅ Отбить с пеной (без протирки) - 200 руб.\n✅ Двигатель - 500 руб.\ \n✅ Багажник - 100 руб.\n✅ Полироль пластика - 200 руб.\n✅ Кондиционер кожи - 400 руб.\n✅ Мойка стекол - 100 руб.\ \n✅ Пылесос салона - 150 руб.\n✅ Стирка ковров - 100 руб.\n✅ Мойка резиновых ковров - 100 руб.(4 шт.)\ \n✅ Воск - 150 руб.\n✅ Чернение резины - 100 руб.\n✅ Удаление насекомых - 100 руб.\n✅ Полимер дял кузова - 500 руб.\ \n✅ Удаление битума(скотч) - от 100 руб. за элемент\n✅ Удаление тонировки: 150 руб. - боковые, 300 руб - лобовое\ \n✅ Стирка ковров: синтетика - 100 руб.; натуральный - 120 руб.; длинный ворс - 150 руб.') elif message.text == 'Седан': bot.send_message(message.chat.id,'✅ Комплексная мойка (верх салона) - 700 руб.\n✅ Мойка кузова (с пеной и протиркой) - 400 руб.\
-
Перед началом разработки нужно выбрать язык программирования. В рамках этой лабораторной работы выбираем Python версии 3.11.1.Ссылка для скачивания: https://www.python.org/downloads/release/python-3111/.
-
Далее необходимо определиться со средой для разработки вашего telegram - бота. В качестве среды для разработки в рамках этой лабораторной работы выбираем Visual Studio Code.
Далее уже можно нажать кнопку “Install Now” и ждем завершения работы инсталлятора.Вместе с сообщением об успешной установке вам предложат увеличить стандартный лимит длины PATH. Хуже от этого точно не будет, так что вполне можете это сделать.Установка VisualStudioCodeПри использовании VS Code в качестве текстового редактора или интегрированной среды разработки (IDE) вам доступны IntelliSense (помощь в завершении кода), анализ кода (помогает избежать ошибок в коде), поддержка отладки (помогает находить ошибки в коде после запуска), фрагменты кода (шаблоны для небольших повторно используемых блоков кода) и модульное тестирование (тестирование интерфейса кода с различными типами входных данных).VS Code также содержит встроенный терминал, который позволяет открывать командную строку Python с помощью командной строки Windows, PowerShell или любой другой, создавая простой рабочий процесс между редактором кода и командной строкой.
-
Чтобы установить VS Code, скачайте VS Code для Windows: https://code.visualstudio.com/. -
Установив VS Code, необходимо также установить расширение Python. Для установки расширения Python открыть VS Code и выполнить поиск по фразе Python в меню расширений (Ctrl+Shift+X).
Командная строка Python в VSCodeЧтобы открыть терминал в VS Code, выберите Просмотр> Терминал или используйте клавиши CTRL+` (символ обратного апострофа). Терминалом по умолчанию является PowerShell.Создание файла проектаДля того чтобы создать новый файл с расширением .py необходимо выполнить следующие действия: Файл> Создать файл и далее выбрать из выпадающего списка «Файл python».Далее появится пустое окно созданного файла нашего будущего бота.Разработка telegram – бота в VS CodeПеред тем как создать telegram – бота нам необходимо подключить перечень нужных нам библиотек для того, чтобы наш бот заработал:from matplotlib.pyplot import connectimport telebotimport sqlite3from telebot import typesmatplotlib - это основная библиотека для построения научных графиков в Python. Включает функции для создания высококачественны визуализаций: линейных диаграмм, гистограмм и т.д. Визуализация данных и результатов - цель использования библиотеки matplotlib.Для установки matplotlib необходимо в терминале VS Code прописать следующее: pip install matplotlibtelebot (pyTelegramBotAPI) хорошая и лёгкая библиотека для создания бота на python для telegram.Для установки telebot (pyTelegramBotAPI) на Windows вам надо написать в терминале VS Code: pip install telebot.SQLite3 (часто говорят просто SQLite) — это часть стандартного пакета Python 3, поэтому ничего дополнительно устанавливать не придется.Далее необходимо прописать token API для того чтобы связать нашу программу с созданным telegram – ботом:bot = telebot.TeleBot('Прописать ваш token API')Создание telegram – бота в мессенджереСоздадим бота и придумаем ему название:1. Откройте в Telegram бота @BotFather.2. Напишите ему /newbot.3. Придумайте и напишите название бота. Оно будет отображаться в контактах и чатах. Например, «Hello, bot».4. Придумайте и напишите юзернейм. Он используется для упоминания бота и в ссылках. Юзернейм должен быть на латинице и обязательно заканчиваться на «bot». Например, «botmother_hello_bot».Теперь нужно подключить бота в Telegram к вашему аккаунту разработчика:1. Снова откройте @BotFather.2. Скопируйте токен бота и добавьте его в следующую строчку кода:bot = telebot.TeleBot('Прописать ваш token API')
Далее мы соединимся с уже ранее созданной нами базы данных в SQLite:def connecting(): conn = sqlite3.connect("Имя вашей БД.db") return connДля рассылки сообщений пользователям вашего бота необходимо создать функцию, которая будет брать id пользователя бота и осуществлять рассылку сообщений:#функция для рассылки сообщения пользователям в БД users.db@bot.message_handler(commands=['sendall'])def sendall(message): conn = connecting() cursor = conn.cursor() cursor.execute("SELECT id FROM user_id") #id – название столбца, user_id – название таблицы results = cursor.fetchall() for result in results: bot.send_message(result[0], message.text[message.text.find(' '):]) conn.close()commands=['sendall'] – это команда для активации данной рассылки в telegram – боте. Для того чтобы ее активировать и осуществить рассылку вам необходимо открыть мессенджер telegram, зайти в ваш бот и ввести следующую команду: /sendall.Далее пропишем основную команду start для нашего бота. Для того чтобы записать нашего пользователя в БД при команде start пропишите следующий код:@bot.message_handler(commands=['start'])def start(message): #функция для записи id пользователей в БД users.db connect = sqlite3.connect("users.db") # user.db – название вашей БД cursor = connect.cursor() cursor.execute("""CREATE TABLE IF NOT EXISTS user_id( id INTEGER )""") connect.commit() people_id = message.chat.id cursor.execute(f"SELECT id FROM user_id WHERE id = {people_id}") data = cursor.fetchone() if data is None: user_id = [message.chat.id] cursor.execute("INSERT INTO user_id VALUES (?);",user_id) connect.commit() else: bot.send_message(message.chat.id,'Такой пользователь уже существует')Далее приступи к созданию меню для нашего бота: #Меню чат-бота markup = types.ReplyKeyboardMarkup(resize_keyboard=True) item1 = types.KeyboardButton('???? Прайс услуг') item2 = types.KeyboardButton('⚜ Premium услуги') item3 = types.KeyboardButton('❗ Акции') item4 = types.KeyboardButton('???? Запись') item5 = types.KeyboardButton('✆ Контакты') markup.add(item1,item2,item3,item4,item5) bot.send_message(message.chat.id,'Привет, {0.first_name}'.format(message.from_user),reply_markup=markup)name = ''time = ''tel = ''Теперь, когда мы прописали код для создания нашего меню, то, когда вы запустите вашего бота можно увидеть только что созданное вами программно меню в самом низу бота.Для того, чтобы при нажатии на кнопки нашего меню происходили какие-либо действия, например, вывод каких-либо сообщений необходимо прописать следующее:
@bot.message_handler(content_types=['text'])def bot_message(message): if message.chat.type == 'private': if message.text == '???? Прайс услуг': markup = types.ReplyKeyboardMarkup(resize_keyboard=True) item1 = types.KeyboardButton('Седан') item2 = types.KeyboardButton('Кроссовер') item3 = types.KeyboardButton('Универсал') item4 = types.KeyboardButton('Джип') item5 = types.KeyboardButton('Минивен') back = types.KeyboardButton('◀ Назад') markup.add(item1,item2,item3,item4,item5,back) bot.send_message(message.chat.id, '????Прайс услуг', reply_markup= markup) elif message.text == '❗ Акции': bot.send_message(message.chat.id, 'Скидка 10% для такси на все виды мойки с 00:00 до 06:00 утра!') elif message.text == '✆ Контакты': bot.send_message(message.chat.id, 'Автомойка находится по адресу ул. Петра Подзолкова 28/1\nГрафик работы: с Пн по Вс (Без выходных)\nВремя рабоы: с 09:00 до 22:00\nТелефон для связи: 214-50-50') elif message.text == '???? Запись': global name name = message.text bot.send_message(message.chat.id, 'Введите ФИО:',reply_markup=types.ReplyKeyboardRemove()) bot.register_next_step_handler(message, get_time) elif message.text == '⚜ Premium услуги': markup = types.ReplyKeyboardMarkup(resize_keyboard=True) item1 = types.KeyboardButton('★Седан★') item2 = types.KeyboardButton('★Кроссовер★') item3 = types.KeyboardButton('★Универсал★') item4 = types.KeyboardButton('★Джип★') item5 = types.KeyboardButton('★Минивен★') back = types.KeyboardButton('◀ Назад') markup.add(item1,item2,item3,item4,item5,back) bot.send_message(message.chat.id, '⚜ Premium услуги', reply_markup= markup) elif message.text == '◀ Назад': markup = types.ReplyKeyboardMarkup(resize_keyboard=True) item1 = types.KeyboardButton('???? Прайс услуг') item2 = types.KeyboardButton('⚜ Premium услуги') item3 = types.KeyboardButton('❗ Акции') item4 = types.KeyboardButton('???? Запись') item5 = types.KeyboardButton('✆ Контакты') markup.add(item1,item2,item3,item4,item5) bot.send_message(message.chat.id,'◀ Назад',reply_markup=markup) elif message.text == 'Кроссовер': bot.send_message(message.chat.id,'✅ Комплексная мойка (верх салона) - 600 руб.\n✅ Мойка кузова (с пеной и протиркой) - 300 руб.\ \n✅ Отбить (без пены и протирки) - 120 руб.\n✅ Отбить с пеной (без протирки) - 200 руб.\n✅ Двигатель - 500 руб.\ \n✅ Багажник - 100 руб.\n✅ Полироль пластика - 200 руб.\n✅ Кондиционер кожи - 400 руб.\n✅ Мойка стекол - 100 руб.\ \n✅ Пылесос салона - 150 руб.\n✅ Стирка ковров - 100 руб.\n✅ Мойка резиновых ковров - 100 руб.(4 шт.)\ \n✅ Воск - 150 руб.\n✅ Чернение резины - 100 руб.\n✅ Удаление насекомых - 100 руб.\n✅ Полимер дял кузова - 500 руб.\ \n✅ Удаление битума(скотч) - от 100 руб. за элемент\n✅ Удаление тонировки: 150 руб. - боковые, 300 руб - лобовое\ \n✅ Стирка ковров: синтетика - 100 руб.; натуральный - 120 руб.; длинный ворс - 150 руб.') elif message.text == 'Седан': bot.send_message(message.chat.id,'✅ Комплексная мойка (верх салона) - 700 руб.\n✅ Мойка кузова (с пеной и протиркой) - 400 руб.\