testBot.py 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. #Библиотеки
  2. from multiprocessing import connection
  3. import xmpp
  4. import pymysql
  5. from config import host, user, password, db_name, jid, jidpassword
  6. from BotClass import JabberBot
  7. #Проверка соединения и само соединение
  8. try:
  9. connection = pymysql.connect(
  10. host=host,
  11. port=3306,
  12. user=user,
  13. password=password,
  14. database=db_name,
  15. cursorclass=pymysql.cursors.DictCursor
  16. )
  17. class OrderS:
  18. Name = ""
  19. Description = ""
  20. Price = float(0)
  21. idUser = int(0)
  22. User = ""
  23. def __init__(self, User, Name, IdUser):
  24. self.Name = Name
  25. self.Description = ""
  26. self.Price = float(0)
  27. self.idUser = IdUser
  28. self.User = User
  29. def display_info(self):
  30. print(self.Name + self.Description + self.Price + self.User + self.idUser)
  31. print("Successfully connection...")
  32. except Exception as ex:
  33. print("Error connection to database...")
  34. print(ex)
  35. #Конфиг для авторизации бота
  36. #config = {
  37. # 'jid': '',
  38. # 'pass': ''
  39. #}
  40. #Добавление пользователя в базу данных
  41. def add_user(userName):
  42. with connection.cursor() as cursor:
  43. select_all_rows = "SELECT * FROM `user`"
  44. cursor.execute(select_all_rows)
  45. rows = cursor.fetchall()
  46. i = 0
  47. stringUser = str(userName).split("/")[0]
  48. for row in rows:
  49. if str(row['FullName']).split("/")[0] == stringUser:
  50. i += 1
  51. if i == 0:
  52. insert_user = "INSERT INTO testbotdb.user (FullName, IdStatus) VALUES(%s, %s)"
  53. val = (stringUser, 1)
  54. cursor.execute(insert_user, val)
  55. connection.commit()
  56. return True
  57. else:
  58. i = 0
  59. return False
  60. IDORDER = 0
  61. mylist = set()
  62. #Основной метод для обработки сообщинй от пользователя
  63. def message_handler(conn, mess):
  64. text = mess.getBody()
  65. user = mess.getFrom()
  66. #Проверка статуса пользователя
  67. with connection.cursor() as cursor:
  68. sqlproverka = "SELECT * FROM testbotdb.user WHERE Fullname = %s"
  69. cursor.execute(sqlproverka, user)
  70. status = cursor.fetchone()
  71. if add_user(user):
  72. conn.send(xmpp.Message(user, 'Вас приветствует тестовый бот для создания, просмотра и управления заказами.\nВоспользуйтесь коммандой help для ознокомления с моим функционалом.'))
  73. elif status['IdStatus'] == 2 and status['FullName'] == user and text != 'cancel':
  74. InsertOderName(text, status['idUser'], user)
  75. conn.send(xmpp.Message(user, 'Укажите описание заказа:'))
  76. elif status['IdStatus'] == 3 and status['FullName'] == user and text != 'cancel':
  77. InsertOderDescription(text, IDORDER, user)
  78. print(IDORDER)
  79. conn.send(xmpp.Message(user, 'Укажите цену:'))
  80. elif status['IdStatus'] == 4 and status['FullName'] == user and text != 'cancel':
  81. InsertOderPrice(text, IDORDER, user)
  82. print(IDORDER)
  83. conn.send(xmpp.Message(user, 'Вы точно хотите добавить заказ[y/n]:'))
  84. elif status['IdStatus'] == 5 and status['FullName'] == user and text != 'cancel':
  85. if text == 'y':
  86. conn.send(xmpp.Message(user, 'Заказ успешно добавлен!'))
  87. else:
  88. changeOrderStatus(1, user)
  89. conn.send(xmpp.Message(user, 'Отменено.'))
  90. else:
  91. if text == "help":
  92. conn.send(xmpp.Message(user, '\nhelp - предоставляет список доступных комманд\ncancel - отмена любой из операций\naddorder - добавить заказ\ndeleteorder - удалить заказ\nlistorder - показывает список заказов\nwheather - показывает погоду'))
  93. elif text == "cancel":
  94. changeOrderStatus(1, user)
  95. conn.send(xmpp.Message(user, 'Отменено.'))
  96. elif text == "addorder":
  97. changeOrderStatus(2, user)
  98. conn.send(xmpp.Message(user, 'Укажите имя заказа:'))
  99. else:
  100. conn.send(xmpp.Message(user, 'Комманда не определена. Воспользуйтесь командой help.'))
  101. #Изменения статуса
  102. def changeOrderStatus(statusId, user):
  103. with connection.cursor() as cursor:
  104. sql = "UPDATE testbotdb.user SET IdStatus = %s WHERE FullName = %s"
  105. val = (statusId, user)
  106. cursor.execute(sql, val)
  107. connection.commit()
  108. #Метод для добавления имени и пользователя
  109. def InsertOderName(ordername, orderiduser, user):
  110. try:
  111. with connection.cursor() as cursor:
  112. sqlidUser = "SELECT idUser FROM testbotdb.user WHERE Fullname = %s"
  113. cursor.execute(sqlidUser, user)
  114. idUser = cursor.fetchone()
  115. print(idUser['idUser'])
  116. sql = "INSERT INTO testbotdb.order (NameOrder, IdUser) VALUES (%s, %s)"
  117. val = (ordername, idUser['idUser'])
  118. #orderss.append(OrderS(user, ordername, idUser['idUser']))
  119. order = OrderS(user, ordername, idUser['idUser'])
  120. orders = [order]
  121. resultorder = sorted(orders, key=lambda ord: ord.User)
  122. mylist.add(OrderS(user, ordername, idUser['idUser']))
  123. for item in resultorder:
  124. if user == item.User:
  125. print(item.Name)
  126. #cursor.execute(sql, val)
  127. #connection.commit()
  128. #global IDORDER
  129. #IDORDER = cursor.lastrowid
  130. #changeOrderStatus(3, user)
  131. except Exception as ex:
  132. print(ex)
  133. #Метод для добавления описания
  134. def InsertOderDescription(orderdescription, idOrder, user):
  135. try:
  136. with connection.cursor() as cursor:
  137. sql = "UPDATE testbotdb.order SET Description = %s WHERE idOrder = %s"
  138. val = (orderdescription, idOrder)
  139. cursor.execute(sql, val)
  140. connection.commit()
  141. changeOrderStatus(4, user)
  142. except Exception as ex:
  143. print(ex)
  144. #Метод для добавления цены
  145. def InsertOderPrice(orderprice, idOrder, user):
  146. try:
  147. with connection.cursor() as cursor:
  148. sql = "UPDATE testbotdb.order SET Price = %s WHERE idOrder = %s"
  149. val = (float(orderprice), idOrder)
  150. cursor.execute(sql, val)
  151. connection.commit()
  152. changeOrderStatus(5, user)
  153. except Exception as ex:
  154. print(ex)
  155. #Авторизация и запуск бота
  156. bot = JabberBot(jid, jidpassword)
  157. bot.register_handler('message', message_handler)
  158. bot.start()