Разработка Telegram-бота на языке программирования Python для учета продаж
Заказать уникальную курсовую работу- 40 40 страниц
- 6 + 6 источников
- Добавлена 20.02.2024
- Содержание
- Часть работы
- Список литературы
1. Постановка задачи 8
1.1 Цели и задачи 8
2. Разработка блок-схемы 9
3. Разработка программы 13
3.1 Описание программы 13
3.2 Текст программы 15
3.3 Тестирование 33
3.3.1 Тестирование режима администрирования 33
3.3.2 Тестирование режима пользователя 35
Заключение 39
Список используемой литературы 40
message_handler(commands=["adm"]) defenterAdm(msg): if not checkRights(msg): return global AdmMode AdmMode=msg.chat.idbot.send_message(msg.chat.id,f"Режимадминистрирования {AdmMode}")# --------------------------------------------------- EXIT ADM@bot.message_handler(commands=["exit"]) defexitAdm(msg): if not checkRights(msg): return global AdmMode if AdmMode==None:bot.reply_to(msg,"Не в режиме администрирования")returnAdmMode=Nonebot.send_message(msg.chat.id,f"Выход из режима администрирования")# ------------------------------------------------ MESSAGE ADMdefparseAdm(msg):cmd=msg.text.split(";") if cmd[0]=="бронь":rs=dbm.getReserv()bot.reply_to(msg,f"{rs}") returnelifcmd[0]=="города":rs=dbm.getCities("","")bot.reply_to(msg,f"{rs}") returnelifcmd[0]=="отели":rs=dbm.getHotels("",-1)bot.reply_to(msg,f"{rs}") return if len(cmd)<2 or cmd[1]=="":bot.send_message(msg.chat.id,f"неверное число параметров")returnparams=cmd[1].split(",") if cmd[0]=="город" and len(params)>1: if dbm.addCity(params[0],params[1])!=-1:bot.send_message(msg.chat.id,f"город {params[0]} ({params[1]}) добавлен") else:bot.send_message(msg.chat.id,f"город {params[0]} ({params[1]}) ужевбазе")elifcmd[0]=="отель" and len(params)>2: if dbm.addHotel(params[0],params[1],params[2])!=-1:bot.send_message(msg.chat.id,f"отель {params[0]} добавлен") else:bot.send_message(msg.chat.id,f"отель {params[0]} ({params[1]}) ужевбазе")elifcmd[0]=="тип" and len(params)>2: if dbm.addRoom(params[0],params[1],params[2])!=-1:bot.send_message(msg.chat.id,f"типномера {params[0]} ({params[1]}) добавлен") else:bot.send_message(msg.chat.id,f"типномера {params[0]} ({params[1]}) ужевбазе") else:bot.reply_to(msg,f"Команда {cmd} неопознана")# ---------------------------------------------------------------- MESSAGE@bot.message_handler()defgetmsg(msg): if AdmMode!=None: # РежимадиминстрированияparseAdm(msg) returnreq=msg.text.split(" ") # Запросипараметырreq[0]=req[0].lower()req+=["",""] # Добавить пустые параметры если не хватает# global requests # +D+ if req[0]=="id": bot.reply_to(msg,f"id: {msg.from_user.id}")elifreq[0]=="сброс": x=requests.pop(msg.chat.id,"NO") #Сбросзапросаbot.reply_to(msg,"Запросочищен")elifreq[0]=="запрос" orreq[0]=="?": # Что на данный момент выбраноif msg.chat.id not in requests: bot.reply_to(msg,"Запроспуст") return data=requests[msg.chat.id] city=dbm.getCityById(data.idCity)bot.reply_to(msg,f"Город: {city[0]}") if data.idHotel!=-1: hotel=dbm.getHotelById(data.idHotel)bot.send_message(msg.chat.id,f"Отель: {hotel[1]}") if data.idRoom!=-1: room=dbm.getRoomById(data.idRoom)bot.send_message(msg.chat.id,f"Типномера: {room[0]}")bot.send_message(msg.chat.id,f"Датыброни {data.inDate} по {data.outDate}")bot.send_message(msg.chat.id,f"""Дополнительно: {data.note}""")elifreq[0]=="города": # список городовrs=dbm.getCities(req[1],req[2])cityList="\n".join(map(lambda p:p[1],rs)) if cityList=="": cityList="ненайдено" bot.reply_to(msg,f"{cityList}")elif msg.chat.id not in requests: # первыйзапрос - город id=dbm.getCity(req[0],req[1]) if id>-1: # найдено data=ctxData()data.idCity=id requests[msg.chat.id]=data city=dbm.getCityById(id)bot.reply_to(msg,f"Выбран {city[0]}")else:bot.reply_to(msg,f"Город не найден ('города' для списка)")elifreq[0]=="отели": data=requests[msg.chat.id]rs=dbm.getHotels(req[1],data.idCity)hotelList="\n".join(map(lambda p:p[1],rs)) if hotelList=="": hotelList="ненайдено" bot.reply_to(msg,f"{hotelList}")elifreq[0]=="отель": data=requests[msg.chat.id] id=dbm.getHotel(req[1],data.idCity) if id>-1: # найденоdata.idHotel=id requests[msg.chat.id]=data hotel=dbm.getHotelById(id)bot.reply_to(msg,f"Выбран {hotel[1]}")else:bot.reply_to(msg,f"Отель не найден ('отели' для списка)")elifreq[0]=="номера": data=requests[msg.chat.id]rs=dbm.getRooms(data.idHotel)roomList=", ".join(map(lambda p:p[1],rs)) if roomList=="": roomList="ненайдено" bot.reply_to(msg,f"Типыномеров {roomList}")elifreq[0]=="тип": data=requests[msg.chat.id] id=dbm.getRoom(req[1],data.idHotel) if id>-1: # найденоdata.idRoom=id requests[msg.chat.id]=data room=dbm.getRoomById(id)bot.reply_to(msg,f"Номертипа {room[0]}")else:bot.reply_to(msg,f"Тип не найден ('номера' для списка)")elifreq[0]=="доп": data=requests[msg.chat.id]data.note=msg.text[3:] requests[msg.chat.id]=databot.send_message(msg.chat.id,"данныедобалены")elifreq[0]=="дата": data=requests[msg.chat.id]data.inDate=req[1]data.outDate=req[2] requests[msg.chat.id]=databot.send_message(msg.chat.id,f"Датыброни {data.inDate} по {data.outDate}")elifreq[0]=="фио": data=requests[msg.chat.id]data.fio=msg.text[3:] requests[msg.chat.id]=databot.send_message(msg.chat.id,"ФИОзадано")elifreq[0]=="бронь": # забронировать data=requests[msg.chat.id] if data.idHotel==-1:bot.send_message(msg.chat.id,"невыбранотель") returnelifdata.idRoom==-1:bot.send_message(msg.chat.id,"невыбрантипномера") returncid=dbm.getClient(msg.chat.id) if cid==None:dbm.setClient(msg.chat.id,data.fio if data.fio!="" else msg.from_user.first_name)cid=dbm.getClient(msg.chat.id)dbm.reserv(cid[0],data.idRoom,data.inDate,data.outDate,data.note)bot.reply_to(msg,"забронировано")else: # часть запроса сформированаdata=requests[msg.chat.id]bot.send_message(msg.chat.id,"""Распознаваемые команды: запрос отели отель <имя отеля> номера тип <тип номера> сбросфио <ФИО>доп <пожелания> дата <начало> <окончание>""")# --------------------------------------------------------------print("Init DB")dbm.initdb()print("On air")try:bot.polling()except Exception as e: print(e)print("Done")3.3 Тестирование3.3.1 Тестирование режима администрированияПереход в режим администрирования и добавление города в базу данных представлен на рисунке 5.Рисунок 5 – Добавление городаАналогичным образом производится добавление отелей и типов номеров, как показано на рисунках 6 и 7.Рисунок 6 – Добавление данныхРисунок 7 – Типы номеровВход в режим администратора и выполнение команд требующих повышенных привилегий возможно только при подключении от имени пользователей, внесенных в список привилегированных. В случае обычного пользователя данные действия недоступны, о чем выводится соответствующее сообщение (рисунок 8).Рисунок 8 – Ограничение доступаИз режима администратора так же можно посмотреть список работающих в данный момент пользователей с помощью команды “/list”.3.3.2 Тестирование режима пользователяВ режиме пользователя сначала необходимо выбрать город, затем отель города и затем тип номера из имеющихся в отеле, который предполагается забронировать. Выбор города, отеля и типа номера и дат бронирования, а также внесение пожеланий представлены на рисунках 9,10.Рисунок 9 – Выбор города и отеляРисунок 10 – Выбор типа номера и дополнительных данныхПо команде “запрос” можно проверить внесенные данные и командой “бронь” осуществить бронирование, как показано на рисунке 11.Рисунок 11 – Осуществление бронированияКоманда “сброс” позволяет очистить заказ и ввести данные заново, начиная с города.После бронирования данные заносятся в базу данных,где администратор может посмотреть список бронирований (рисунок 12).Рисунок 12 – Список бронированийЗаключениеВ ходе работы был создан telegram-бот, реализующий сервис бронирования отеля. Ведение базы данных реализовано в среде СУБД sqlite3 и включает в себя создание БД, реализацию запросов на выборку, добавление и изменение данных в соответствии с запросами пользователя.В ходе работыбыли закреплены навыки использования алгоритмов для решения поставленных в рамках разработки телеграмм-бота задач, программированию на языке Pythonи работы с СУБД sqlite3. Также в ходе работы были использованы навыки оформления кода в соответствии с PEP8 и освоены правила написания и оформления курсовых работ по техническим предметам в соответствии с ГОСТ.Тестирование программы показало корректность выполнения ее функций и работы ее компонентов.СписокиспользуемойлитературыГОСТ 7.32-2017 Система стандартов по информации, библиотечному и издательскому делу. Отчет по научно-исследовательской работе.Структура и правила оформления. Telegram – обзор сервиса. [Электронный ресурс]URL: https://startpack.ru/application/telegram-messenger (дата обращения 12.01.2024)Роботы вошли в чат: какие бывают Телеграм‑боты и для чего они нужны [Электронный ресурс]URL: https://practicum.yandex.ru/blog/telegram-boty-kak-rabotayut-i-kak-nastroit/(дата обращения 12.01.2024)Сущности и связи: как и для чего системные аналитики создают ER-диаграммы. [Электронный ресурс]URL: https://practicum.yandex.ru/blog/chto-takoe-er-diagramma/(дата обращения 12.01.2024)Основы программирования на Python : учебное пособие для вузов / С. А. Чернышев. — Москва : Издательство Юрайт, 2021. — 286 с.Телеграм. [Электронный ресурс]URL:https://core.telegram.org/api(дата обращения 12.01.2024)
2. Telegram – обзор сервиса. [Электронный ресурс] URL: https://startpack.ru/application/telegram-messenger (дата обращения 12.01.2024)
3. Роботы вошли в чат: какие бывают Телеграм‑боты и для чего они нужны [Электронный ресурс] URL: https://practicum.yandex.ru/blog/telegram-boty-kak-rabotayut-i-kak-nastroit/ (дата обращения 12.01.2024)
4. Сущности и связи: как и для чего системные аналитики создают ER-диаграммы. [Электронный ресурс] URL: https://practicum.yandex.ru/blog/chto-takoe-er-diagramma/ (дата обращения 12.01.2024)
5. Основы программирования на Python : учебное пособие для вузов / С. А. Чернышев. — Москва : Издательство Юрайт, 2021. — 286 с.
6. Телеграм. [Электронный ресурс] URL: https://core.telegram.org/api (дата обращения 12.01.2024)