123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- #Библиотеки
- from multiprocessing import connection
- import xmpp
- import pymysql
- from config import host, user, password, db_name, jid, jidpassword
- from BotClass import JabberBot
- #Проверка соединения и само соединение
- try:
- connection = pymysql.connect(
- host=host,
- port=3306,
- user=user,
- password=password,
- database=db_name,
- cursorclass=pymysql.cursors.DictCursor
- )
- class OrderS:
- Name = ""
- Description = ""
- Price = float(0)
- idUser = int(0)
- User = ""
- def __init__(self, User, Name, IdUser):
- self.Name = Name
- self.Description = ""
- self.Price = float(0)
- self.idUser = IdUser
- self.User = User
- def display_info(self):
- print(self.Name + self.Description + self.Price + self.User + self.idUser)
- print("Successfully connection...")
- except Exception as ex:
- print("Error connection to database...")
- print(ex)
- #Конфиг для авторизации бота
- #config = {
- # 'jid': '',
- # 'pass': ''
- #}
- #Добавление пользователя в базу данных
- def add_user(userName):
- with connection.cursor() as cursor:
- select_all_rows = "SELECT * FROM `user`"
- cursor.execute(select_all_rows)
- rows = cursor.fetchall()
- i = 0
- stringUser = str(userName).split("/")[0]
- for row in rows:
- if str(row['FullName']).split("/")[0] == stringUser:
- i += 1
- if i == 0:
- insert_user = "INSERT INTO testbotdb.user (FullName, IdStatus) VALUES(%s, %s)"
- val = (stringUser, 1)
- cursor.execute(insert_user, val)
- connection.commit()
- return True
- else:
- i = 0
- return False
- IDORDER = 0
- mylist = set()
- #Основной метод для обработки сообщинй от пользователя
- def message_handler(conn, mess):
-
- text = mess.getBody()
- user = mess.getFrom()
- #Проверка статуса пользователя
- with connection.cursor() as cursor:
- sqlproverka = "SELECT * FROM testbotdb.user WHERE Fullname = %s"
- cursor.execute(sqlproverka, user)
- status = cursor.fetchone()
- if add_user(user):
- conn.send(xmpp.Message(user, 'Вас приветствует тестовый бот для создания, просмотра и управления заказами.\nВоспользуйтесь коммандой help для ознокомления с моим функционалом.'))
- elif status['IdStatus'] == 2 and status['FullName'] == user and text != 'cancel':
- InsertOderName(text, status['idUser'], user)
- conn.send(xmpp.Message(user, 'Укажите описание заказа:'))
- elif status['IdStatus'] == 3 and status['FullName'] == user and text != 'cancel':
- InsertOderDescription(text, IDORDER, user)
- print(IDORDER)
- conn.send(xmpp.Message(user, 'Укажите цену:'))
- elif status['IdStatus'] == 4 and status['FullName'] == user and text != 'cancel':
- InsertOderPrice(text, IDORDER, user)
- print(IDORDER)
- conn.send(xmpp.Message(user, 'Вы точно хотите добавить заказ[y/n]:'))
- elif status['IdStatus'] == 5 and status['FullName'] == user and text != 'cancel':
- if text == 'y':
- conn.send(xmpp.Message(user, 'Заказ успешно добавлен!'))
- else:
- changeOrderStatus(1, user)
- conn.send(xmpp.Message(user, 'Отменено.'))
- else:
- if text == "help":
- conn.send(xmpp.Message(user, '\nhelp - предоставляет список доступных комманд\ncancel - отмена любой из операций\naddorder - добавить заказ\ndeleteorder - удалить заказ\nlistorder - показывает список заказов\nwheather - показывает погоду'))
- elif text == "cancel":
- changeOrderStatus(1, user)
- conn.send(xmpp.Message(user, 'Отменено.'))
- elif text == "addorder":
- changeOrderStatus(2, user)
- conn.send(xmpp.Message(user, 'Укажите имя заказа:'))
- else:
- conn.send(xmpp.Message(user, 'Комманда не определена. Воспользуйтесь командой help.'))
- #Изменения статуса
- def changeOrderStatus(statusId, user):
- with connection.cursor() as cursor:
- sql = "UPDATE testbotdb.user SET IdStatus = %s WHERE FullName = %s"
- val = (statusId, user)
- cursor.execute(sql, val)
- connection.commit()
- #Метод для добавления имени и пользователя
- def InsertOderName(ordername, orderiduser, user):
- try:
- with connection.cursor() as cursor:
- sqlidUser = "SELECT idUser FROM testbotdb.user WHERE Fullname = %s"
- cursor.execute(sqlidUser, user)
- idUser = cursor.fetchone()
- print(idUser['idUser'])
- sql = "INSERT INTO testbotdb.order (NameOrder, IdUser) VALUES (%s, %s)"
- val = (ordername, idUser['idUser'])
- #orderss.append(OrderS(user, ordername, idUser['idUser']))
- order = OrderS(user, ordername, idUser['idUser'])
- orders = [order]
- resultorder = sorted(orders, key=lambda ord: ord.User)
- mylist.add(OrderS(user, ordername, idUser['idUser']))
- for item in resultorder:
- if user == item.User:
- print(item.Name)
- #cursor.execute(sql, val)
- #connection.commit()
- #global IDORDER
- #IDORDER = cursor.lastrowid
- #changeOrderStatus(3, user)
- except Exception as ex:
- print(ex)
- #Метод для добавления описания
- def InsertOderDescription(orderdescription, idOrder, user):
- try:
- with connection.cursor() as cursor:
- sql = "UPDATE testbotdb.order SET Description = %s WHERE idOrder = %s"
- val = (orderdescription, idOrder)
- cursor.execute(sql, val)
- connection.commit()
- changeOrderStatus(4, user)
- except Exception as ex:
- print(ex)
- #Метод для добавления цены
- def InsertOderPrice(orderprice, idOrder, user):
- try:
- with connection.cursor() as cursor:
- sql = "UPDATE testbotdb.order SET Price = %s WHERE idOrder = %s"
- val = (float(orderprice), idOrder)
- cursor.execute(sql, val)
- connection.commit()
- changeOrderStatus(5, user)
- except Exception as ex:
- print(ex)
- #Авторизация и запуск бота
- bot = JabberBot(jid, jidpassword)
- bot.register_handler('message', message_handler)
- bot.start()
|