Advertisement
Guest User

Untitled

a guest
Sep 2nd, 2017
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 25.12 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. import vk_api
  3. import time
  4. import random
  5. from datetime import datetime, timedelta
  6. from datetime import date
  7. from random import choice
  8. from string import ascii_lowercase
  9. scenario = {}
  10. vk = vk_api.VkApi(login = '89855231973', password ='Yagey123')
  11. vk_api.VkApi(token = '27f419a44edcf7a271492fa489d34aae82d95dd0871177794e20e7bc052b72f0006737cad9b6396aaf4d4')
  12. vk.auth()
  13. hash = {}
  14. limit = {}
  15. question = {}
  16. glist = []
  17.  
  18. def write_msg(user_id, s):
  19. vk.method('messages.send', {'user_id':user_id, 'message':s})
  20. #write_msg(352861469, 'automatically send msg')
  21. values = {'out': 0,'count': 100,'time_offset': 60}
  22. vk.method('messages.get', values)
  23. random.seed(version = 2)
  24. users = []
  25. admins = {}
  26. sudodate = datetime.strptime("21/11/22 16:30", "%d/%m/%y %H:%M")
  27. admins[337775081] = sudodate
  28. gamedates = []
  29.  
  30. uglist = []
  31. ulist = {}
  32. while True:
  33. response = None
  34. response = vk.method('messages.get', values)
  35. if response['items']:
  36. values['last_message_id'] = response['items'][0]['id']
  37. for item in response['items']:
  38. #переменная, необходимая для диалогов и прочей херни
  39. msg = item[u'body'].lower()
  40. if scenario.get(item[u'user_id']) == None:
  41. scenario[item[u'user_id']] = '0'
  42. s = 'added vk.com/id' + str(item[u'user_id'])
  43. write_msg(337775081, s)
  44. limit[item[u'user_id']] = datetime.strptime('17/08/2017', "%d/%m/%Y")
  45. write_msg(item[u'user_id'], 'Да, привет')
  46. else:
  47. if scenario[item[u'user_id']] == '0':
  48. if msg.startswith('я'):
  49. nick = item[u'body'][2:]
  50. scs = True
  51. ##возвращает фолз если записи нет и тру если она есть
  52. if scs:
  53.  
  54. write_msg(item[u'user_id'], 'Я тебя записал под ником '+nick)
  55. scenario[item[u'user_id']] = '0';
  56. f = open('Huy', 'r')
  57. s = ''
  58. text = []
  59. for line in f:
  60. l = line.split()
  61. if l[0] != str(item[u'user_id']):
  62. text.append(line)
  63. s+=l[2]
  64. s += ' '
  65. s+=l[3]
  66. f.close()
  67. f = open('Huy', 'w')
  68. for l in text:
  69. f.write(l +'\n')
  70.  
  71. f.write(str(item[u'user_id']) + ' '+ nick+ ' '+ s)
  72. f.close()
  73.  
  74. elif (msg.find('что ты умеешь')!=-1) | (msg.find('помощь')!=-1):
  75.  
  76. write_msg(item[u'user_id'],'Доброго времени суток, друг! \nВот актуальный список моих команд на сегодняшний день.\n———————————————————\n1)"помощь"/"что ты умеешь" - как ты уже понял, это сообщение возвращает тебе документацию.\n2) "Я - ..." - бот записывает вас в базу данных под данным вами ником, крайне желательная процедура в начале общения с ботом, дабы при записи на игры у вас не стоял дефолтный никнейм.\n3)"хочу играть" - одна из основных команд, после нее вам будет предложено несколько актуальных дат игр, на которых можно записаться, в случае если ближайших игр нет, бот оповестит об этом\n4)"не смогу играть" - если в каком-то случае ты не сможешь прийти на игру, на которую ты записан, то эта команда поможет тебе отменить запись.\n5)"auth" - авторизация посредством ввода защищенного ключа, сгенерированного в специально созданном мобильном приложении, позволяющая открыть доступ к командам администратора. Например добавлению или удалению игр.\n6)"Расскажи о себе"/"Информация"/"Инфо" - Если вы хотите поближе узнать о боте, как, кем, на чем и какими методами он создавался, вам сюда. Т.к бот сделан с душой из чистого косты... кода, а не бездушных конструкторов, то по поводу вопросов стабильности его работы, а так же с жалобами и предложениями, вам тоже сюда.\n7)"подписаться" - простая подписка на разного рода обновления и оповещения.\n8)"отписаться" - по аналогии с предыдущим пунктом, только отписка.\nВ будущем у бота могут появляться новые команды, которые будут сюда догружаться. Если у вас есть предложения по их поводу, то напишите боту "Информация".\n')
  77.  
  78. elif msg.find('кто играет?')!=-1:
  79. f = open('Her')
  80. s = ''
  81. for line in f:
  82. if line.find(msg[11:])!=-1:
  83. s = line
  84. f.close()
  85. if s == '':
  86. write_msg(item[u'user_id'],'Никто')
  87. else:
  88. s = s[9:]
  89. l = s.split()
  90. for i in l:
  91. write_msg(item[u'user_id'], 'vk.com/id'+i)
  92. elif msg.find('хочу играть')!=-1:
  93. f = open('zalupa', 'r')
  94. glist = []
  95. for line in f:
  96. l = line.split()
  97. glist.append(l[0])
  98. for i in glist:
  99. write_msg(item[u'user_id'], str(i))
  100. f.close()
  101. scs = True
  102. if scs:
  103. write_msg(item[u'user_id'], 'Введи номер')
  104. scenario[item[u'user_id']] = '2'
  105. else:
  106. write_msg(item[u'user_id'], 'В ближайшем будущем игр не предвидится')
  107.  
  108. elif msg.find('не смогу играть')!=-1:
  109. write_msg(item[u'user_id'], 'Нам очень жаль, что ты не сможешь принимать участия в наших играх((((\n Введи номер из списка, соответствующий дате, когда ты прийти к нам не сможешь')
  110. uglist = []
  111. text = []
  112. f = open('Her')
  113. for line in f:
  114. l = line.split()
  115. a = int(line.find(str(item[u'user_id'])))
  116. if int(a)>-1:
  117. uglist.append(l[0])
  118. else:
  119. text.append(line)
  120. ulist[item[u'user_id']] = uglist
  121. for i in uglist:
  122. write_msg(item[u'user_id'], i)
  123. scenario[item[u'user_id']] = '3'
  124. f.close()
  125.  
  126.  
  127.  
  128. elif msg.find('auth')!=-1:
  129. write_msg(item[u'user_id'], 'Введи свой уникальный код, полученный от председателя. Если ты получил код не от председателя клуба, вводить его строго не рекомендуется так как он может оказаться поддельным или уже использованным')
  130. scenario[item[u'user_id']] = '4'
  131.  
  132. elif msg.startswith('cmd#-g'):
  133. if admins.get(item[u'user_id']) != None:
  134. if datetime.now() < admins[item[u'user_id']]:
  135. write_msg(item[u'user_id'],'Введи дату, когда игра состояться не сможет в формате MMDDYYYY')
  136. scenario[item[u'user_id']] = '5'
  137. else:
  138. write_msg(item[u'user_id'], 'Недостаточно прав. Обратитесь к председателю для получения ключа доступа')
  139. else:
  140. write_msg(item[u'user'], 'Недостаточно прав. Обратитесь к председателю для получения ключа доступа')
  141.  
  142.  
  143.  
  144. elif msg.startswith('cmd#+g'):
  145. if admins.get(item[u'user_id']) != None:
  146. if datetime.now() < admins[item[u'user_id']]:
  147. write_msg(item[u'user_id'], 'Введи дату, когда игра должна будет состояться в формате MMDDYYYY')
  148. scenario[item[u'user_id']] = '6'
  149. else:
  150. write_msg(item[u'user_id'],
  151. 'Недостаточно прав. Обратитесь к председателю для получения ключа доступа')
  152. else:
  153. write_msg(item[u'user'],
  154. 'Недостаточно прав. Обратитесь к председателю для получения ключа доступа')
  155.  
  156. elif msg.find('подписаться')!=-1:
  157. if users.count(item[u'user_id'])!=0:
  158. write_msg(item[u'user_id'], 'Ты уже подписан на обновления')
  159. else:
  160. write_msg(item[u'user_id'], 'Ты успешно подписался на обновления в рамках этой сессии')
  161. users.append(item[u'user_id'])
  162. ###подгрузка в БД
  163.  
  164. elif msg.find('отписаться') != -1:
  165. if users.count(item[u'user_id']) == 0:
  166. write_msg(item[u'user_id'], 'Ты и не подписан')
  167. else:
  168. write_msg(item[u'user_id'], 'Ты успешно отписался от обновлений в рамках этой сессии. Когда бот будет перезапущен, ты снова получишь сообщение')
  169. users.remove(item[u'user_id'])
  170. ###подгрузка в БД
  171.  
  172. elif msg.startswith('cmd#-r'):
  173.  
  174. gethash = msg[6]+msg[7]
  175. ans = msg[8:]
  176. for i in hash:
  177. if gethash == hash[i]:
  178. write_msg(i, ans)
  179. hash.pop(i)
  180.  
  181. elif msg.startswith('cmd#-y'):
  182. try:
  183. if (admins[item[u'user_id']] > datetime.now()):
  184. f = open('Huy')
  185. for line in f:
  186. l = line.split()
  187. if l[3] == '1':
  188. write_msg(l[0], msg[6:])
  189. f.close()
  190. else:
  191. write_msg(item[u'user_id'], 'Недостаточно прав. Напишите председателю клуба для получения ключа')
  192.  
  193. except ValueError:
  194. write_msg(item[u'user_id'], 'команда не удовлетворяет требованиям к ней')
  195. elif msg.startswith('cmd#+l'):
  196. try:
  197. s = ''
  198. ms = ''
  199. l = []
  200. dt = msg[6:]
  201. f = open('Her')
  202. for line in f:
  203. if line.startswith(dt):
  204. s = line[7:]
  205. for i in l:
  206. ms+='vk.com/id'+l+'\n'
  207. write_msg(item[u'user_id'], ms)
  208. except:
  209. item[u'user_id'], 'введены некорректные данные'
  210. elif msg.startswith('cmd#-n'):
  211. try:
  212. if (admins[item[u'user_id']] > datetime.now()):
  213. msg = msg[6:]
  214. id = msg[:msg.find('/')]
  215. write_msg(id, msg[msg.find('/')+1:])
  216. write_msg(item[u'user_id'], 'доставлено')
  217. else:
  218. write_msg(item[u'user_id'], 'Недостаточно прав. Напишите председателю клуба для получения ключа')
  219. except ValueError:
  220. write_msg(item[u'user_id'], 'команда не удовлетворяет требованиям к ней')
  221.  
  222.  
  223. else:
  224. b = True
  225. for i in hash:
  226. if i == item[u'user_id']:
  227. b = False
  228. if b & (limit[item[u'user_id']] < datetime.now()):
  229. write_msg(item[u'user_id'],'Я не знаю, о чем ты. Давай я спрошу у человека, который должен это знать. Если ты ответишь мне да, я спрошу, любой другой ответ вернет диалог в начало')
  230. scenario[item[u'user_id']] = '7'
  231. question[item[u'user_id']] = item[u'body']
  232. else:
  233. write_msg(item[u'user_id'], ' Вам еще не ответили на предыдущее сообщение или вы недавно задали свой вопрос. Попробуйте позже')
  234.  
  235.  
  236.  
  237. ##################################################################################################################################
  238.  
  239.  
  240.  
  241.  
  242.  
  243. elif scenario.get(item[u'user_id']) == '1':
  244. if msg.startswith('!'):
  245. ## Запрос к БД
  246. scs = True #Если ника нет записывает и возвращает фолз, если есть возвращает тру
  247. if scs:
  248. write_msg(item[u'user_id'],'такой ник уже есть в нашей базе данных, выбери себе другой, напиши его опять начиная с восклицательного знака или что-либо другое, чтобы выйти')
  249. scenario[item[u'user_id']] = '1'
  250. else:
  251. scenario[item[u'user_id']] = '0'
  252.  
  253.  
  254.  
  255. elif scenario.get(item[u'user_id']) == '2':
  256. try:
  257. try:
  258. s = ''
  259. text = []
  260. f = open('Her')
  261. for line in f:
  262. l = line.split()
  263. if glist[int(msg)] == l[0]:
  264. s = line
  265. else:
  266. text.append(line)
  267. if s.find(str(item[u'user_id']))!= -1:
  268. write_msg(item[u'user_id'], 'Ты уже играешь в этот день')
  269. scenario[item[u'user_id']] = '0'
  270. else:
  271. if s == '':
  272. s+= glist[int(msg)]
  273. s += ' ' + str(item[u'user_id'])
  274. write_msg(item[u'user_id'])
  275. scenario[item[u'user_id']] = '0'
  276. f.close()
  277. f = open('Her', 'w')
  278. for i in text:
  279. f.write(i + '\n')
  280. f.write(s)
  281. f.close()
  282.  
  283. except TypeError:
  284. write_msg(item[u'user_id'], 'Ты ввел не число, выход в главное меню')
  285. scenario[item[u'user_id']] = '0'
  286. except LookupError:
  287. write_msg(item[u'user_id'], 'Ты вышел из сценария. Ты можешь записаться в любое удобное время введя корректную дату')
  288. scenario[item[u'user_id']] = '0'
  289.  
  290.  
  291. elif scenario.get(item[u'user_id']) == '3':
  292. try:
  293. try:
  294. uglist = ulist[item[u'user_id']]
  295. dt = uglist[int(msg)]
  296. f = open('Her')
  297. text = []
  298. s = ''
  299. for line in f:
  300. a = line.find(dt)
  301. if (a!=-1):
  302. s = line[0:a-1]+line[a+1:]
  303. else:
  304. text.append(line)
  305. f.close()
  306. f = open('Her', 'w')
  307. for i in text:
  308. f.write(i+'\n')
  309. f.write(s)
  310. write_msg(item[u'user_id'], 'success')
  311. scenario[item[u'user_id']] = '0'
  312. except LookupError:
  313. write_msg(item[u'user_id'], 'Incorrect input')
  314. scenario[item[u'user_id']] = '0'
  315. except ValueError:
  316. write_msg(item[u'user_id'], 'Incorrect input')
  317. scenario[item[u'user_id']] = '0'
  318. elif scenario.get(item[u'user_id']) == '4':
  319. if (len(msg) == 264) & (msg.find('0hkkgusj') != -1):
  320. f = open('kluchi')
  321. scs = True
  322. text = []
  323. for line in f:
  324. text.append(line)
  325. if line == msg:
  326. scs = False
  327. f.close()
  328. if scs:
  329. if item[u'user_id'] != 337775081:
  330. admins[item[u'user_id']] = datetime.now() + timedelta(minutes=10)
  331. f = open('kluchi', 'w')
  332. for i in text:
  333. f.write(i+'\n')
  334. f.write(msg)
  335. f.close()
  336. write_msg(item[u'user_id'], 'доступ разрешен до ' + str(admins[item[u'user_id']])[0:-7])
  337. write_msg(item[u'user_id'], 'Все команды, для которых нужны администраторские права, начинаются с cmd# \n cmd#+g добавит игру по указанной дате, дальнейшую информацию ты получишь в диалоге.\n cmd#-g удалит игру по аналогии.\n cmd#-y оповестит всех пользователей от имени бота.\n cmd#-n напишет сообщение выбранному пользователю от имени бота. например, команда cmd#-n315232757/Привет напишет сообщение с текстом привет пользователю vk.com/id315232757')
  338. write_msg(337775081, 'vk.com/id' + str(item[u'user_id']) + ' получил админские права')
  339. scenario[item[u'user_id']] = '0'
  340. else:
  341. write_msg(item[u'user_id'], 'Ключ уже был использован')
  342. else:
  343. write_msg(item[u'user_id'], 'ключ - подделка. выход в главное меню')
  344. scenario[item[u'user_id']] = '0'
  345.  
  346.  
  347. elif scenario[item[u'user_id']] == '5':
  348.  
  349. try:
  350.  
  351. f = open('zalupa')
  352. scs = False
  353. text = []
  354. for line in f:
  355. if line == msg:
  356. scs = True
  357. else:
  358. text.append(line)
  359. f.close()
  360. if scs:
  361. s = ''
  362. f = open('zalupa', 'w')
  363. for i in text:
  364. f.write(i+'\n')
  365. f.close()
  366. text = []
  367. f = open('Her')
  368. for line in f:
  369. dt = str(item[u'body'])
  370. if line.find(dt)!=-1:
  371. s = line[(line.find(dt)+1):]
  372. l = s.split()
  373. for i in l:
  374. write_msg(int(i), 'Игра в дату '+dt+' не сможет состояться. Ты можешь записаться на другую доступную игру в любое удобное тебе время')
  375. else:
  376. text.append(line)
  377. f.close()
  378. f = open('Her', 'w')
  379. for i in text:
  380. f.write(i+'\n')
  381. f.close()
  382. write_msg(item[u'user_id'],'Игра успешно удалена')
  383. else:
  384. write_msg(item[u'user_id'], 'Игра не найдена')
  385. except ValueError:
  386. write_msg(item[u'user_id'],'Введенная дата не соответствует предъявляемым к ней требованиям')
  387. scenario[item[u'user_id']] = '0'
  388. elif scenario[item[u'user_id']] == '6':
  389. try:
  390. udate = datetime.strptime(msg, '%m%d%Y')
  391. if 1:
  392.  
  393. scs = True
  394. text = []
  395. f = open('zalupa')
  396. for line in f:
  397. if line == msg:
  398. scs = False
  399. else:
  400. text.append(line)
  401. f.close()
  402. if scs:
  403. user = []
  404. f = open('zalupa', 'w')
  405. for i in text:
  406. f.write(i + '\n')
  407. f.write(msg)
  408. f.close()
  409. f = open('Huy')
  410. for line in f:
  411. try:
  412. l = line.split()
  413. write_msg(l[0], 'Тут новая игра намечается ' + datetime.isoformat(udate, sep = 'T')[0:-9])
  414. except LookupError:
  415. write_msg(item[u'user_id'], 'unexpected error occured')
  416. write_msg(337775081, 'строка в хуе не соответствует стандартам')
  417. write_msg(item[u'user_id'], 'Игра успешно добавлена')
  418. f.close()
  419. else:
  420. write_msg(item[u'user_id'], u'Введена некорректная дата')
  421. except ValueError:
  422. write_msg(item[u'user_id'], 'Введена некорректная дата')
  423.  
  424. elif scenario[item[u'user_id']] == '7':
  425. if msg.find('да')!=-1:
  426. b = True
  427.  
  428. while b:
  429. s = ''.join(choice(ascii_lowercase) for i in range(2))
  430. b = False
  431. for i in hash:
  432. if s == hash[i]:
  433. b = True
  434.  
  435.  
  436. hash[item[u'user_id']] = s
  437. write_msg(337775081, 'hashedid = '+ s + '\nquestion = ' + question[item[u'user_id']])
  438. limit[item[u'user_id']] = datetime.now() + timedelta(minutes = 60)
  439. scenario[item[u'user_id']] = '0'
  440. write_msg(item[u'user_id'], 'Сообщение отправлено')
  441. else:
  442. scenario[item[u'user_id']] = '0'
  443. write_msg(item[u'user_id'], 'Сообщение отправлено не было')
  444.  
  445. time.sleep(1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement