testBot.py 7.5 KB

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