Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- import vk_api
- import time
- import random
- from datetime import datetime, timedelta
- from datetime import date
- from random import choice
- from string import ascii_lowercase
- scenario = {}
- vk = vk_api.VkApi(login = '89855231973', password ='Yagey123')
- vk_api.VkApi(token = '27f419a44edcf7a271492fa489d34aae82d95dd0871177794e20e7bc052b72f0006737cad9b6396aaf4d4')
- vk.auth()
- hash = {}
- limit = {}
- question = {}
- glist = []
- def write_msg(user_id, s):
- vk.method('messages.send', {'user_id':user_id, 'message':s})
- #write_msg(352861469, 'automatically send msg')
- values = {'out': 0,'count': 100,'time_offset': 60}
- vk.method('messages.get', values)
- random.seed(version = 2)
- users = []
- admins = {}
- sudodate = datetime.strptime("21/11/22 16:30", "%d/%m/%y %H:%M")
- admins[337775081] = sudodate
- gamedates = []
- uglist = []
- ulist = {}
- while True:
- response = None
- response = vk.method('messages.get', values)
- if response['items']:
- values['last_message_id'] = response['items'][0]['id']
- for item in response['items']:
- #переменная, необходимая для диалогов и прочей херни
- msg = item[u'body'].lower()
- if scenario.get(item[u'user_id']) == None:
- scenario[item[u'user_id']] = '0'
- s = 'added vk.com/id' + str(item[u'user_id'])
- write_msg(337775081, s)
- limit[item[u'user_id']] = datetime.strptime('17/08/2017', "%d/%m/%Y")
- write_msg(item[u'user_id'], 'Да, привет')
- else:
- if scenario[item[u'user_id']] == '0':
- if msg.startswith('я'):
- nick = item[u'body'][2:]
- scs = True
- ##возвращает фолз если записи нет и тру если она есть
- if scs:
- write_msg(item[u'user_id'], 'Я тебя записал под ником '+nick)
- scenario[item[u'user_id']] = '0';
- f = open('Huy', 'r')
- s = ''
- text = []
- for line in f:
- l = line.split()
- if l[0] != str(item[u'user_id']):
- text.append(line)
- s+=l[2]
- s += ' '
- s+=l[3]
- f.close()
- f = open('Huy', 'w')
- for l in text:
- f.write(l +'\n')
- f.write(str(item[u'user_id']) + ' '+ nick+ ' '+ s)
- f.close()
- elif (msg.find('что ты умеешь')!=-1) | (msg.find('помощь')!=-1):
- write_msg(item[u'user_id'],'Доброго времени суток, друг! \nВот актуальный список моих команд на сегодняшний день.\n———————————————————\n1)"помощь"/"что ты умеешь" - как ты уже понял, это сообщение возвращает тебе документацию.\n2) "Я - ..." - бот записывает вас в базу данных под данным вами ником, крайне желательная процедура в начале общения с ботом, дабы при записи на игры у вас не стоял дефолтный никнейм.\n3)"хочу играть" - одна из основных команд, после нее вам будет предложено несколько актуальных дат игр, на которых можно записаться, в случае если ближайших игр нет, бот оповестит об этом\n4)"не смогу играть" - если в каком-то случае ты не сможешь прийти на игру, на которую ты записан, то эта команда поможет тебе отменить запись.\n5)"auth" - авторизация посредством ввода защищенного ключа, сгенерированного в специально созданном мобильном приложении, позволяющая открыть доступ к командам администратора. Например добавлению или удалению игр.\n6)"Расскажи о себе"/"Информация"/"Инфо" - Если вы хотите поближе узнать о боте, как, кем, на чем и какими методами он создавался, вам сюда. Т.к бот сделан с душой из чистого косты... кода, а не бездушных конструкторов, то по поводу вопросов стабильности его работы, а так же с жалобами и предложениями, вам тоже сюда.\n7)"подписаться" - простая подписка на разного рода обновления и оповещения.\n8)"отписаться" - по аналогии с предыдущим пунктом, только отписка.\nВ будущем у бота могут появляться новые команды, которые будут сюда догружаться. Если у вас есть предложения по их поводу, то напишите боту "Информация".\n')
- elif msg.find('кто играет?')!=-1:
- f = open('Her')
- s = ''
- for line in f:
- if line.find(msg[11:])!=-1:
- s = line
- f.close()
- if s == '':
- write_msg(item[u'user_id'],'Никто')
- else:
- s = s[9:]
- l = s.split()
- for i in l:
- write_msg(item[u'user_id'], 'vk.com/id'+i)
- elif msg.find('хочу играть')!=-1:
- f = open('zalupa', 'r')
- glist = []
- for line in f:
- l = line.split()
- glist.append(l[0])
- for i in glist:
- write_msg(item[u'user_id'], str(i))
- f.close()
- scs = True
- if scs:
- write_msg(item[u'user_id'], 'Введи номер')
- scenario[item[u'user_id']] = '2'
- else:
- write_msg(item[u'user_id'], 'В ближайшем будущем игр не предвидится')
- elif msg.find('не смогу играть')!=-1:
- write_msg(item[u'user_id'], 'Нам очень жаль, что ты не сможешь принимать участия в наших играх((((\n Введи номер из списка, соответствующий дате, когда ты прийти к нам не сможешь')
- uglist = []
- text = []
- f = open('Her')
- for line in f:
- l = line.split()
- a = int(line.find(str(item[u'user_id'])))
- if int(a)>-1:
- uglist.append(l[0])
- else:
- text.append(line)
- ulist[item[u'user_id']] = uglist
- for i in uglist:
- write_msg(item[u'user_id'], i)
- scenario[item[u'user_id']] = '3'
- f.close()
- elif msg.find('auth')!=-1:
- write_msg(item[u'user_id'], 'Введи свой уникальный код, полученный от председателя. Если ты получил код не от председателя клуба, вводить его строго не рекомендуется так как он может оказаться поддельным или уже использованным')
- scenario[item[u'user_id']] = '4'
- elif msg.startswith('cmd#-g'):
- if admins.get(item[u'user_id']) != None:
- if datetime.now() < admins[item[u'user_id']]:
- write_msg(item[u'user_id'],'Введи дату, когда игра состояться не сможет в формате MMDDYYYY')
- scenario[item[u'user_id']] = '5'
- else:
- write_msg(item[u'user_id'], 'Недостаточно прав. Обратитесь к председателю для получения ключа доступа')
- else:
- write_msg(item[u'user'], 'Недостаточно прав. Обратитесь к председателю для получения ключа доступа')
- elif msg.startswith('cmd#+g'):
- if admins.get(item[u'user_id']) != None:
- if datetime.now() < admins[item[u'user_id']]:
- write_msg(item[u'user_id'], 'Введи дату, когда игра должна будет состояться в формате MMDDYYYY')
- scenario[item[u'user_id']] = '6'
- else:
- write_msg(item[u'user_id'],
- 'Недостаточно прав. Обратитесь к председателю для получения ключа доступа')
- else:
- write_msg(item[u'user'],
- 'Недостаточно прав. Обратитесь к председателю для получения ключа доступа')
- elif msg.find('подписаться')!=-1:
- if users.count(item[u'user_id'])!=0:
- write_msg(item[u'user_id'], 'Ты уже подписан на обновления')
- else:
- write_msg(item[u'user_id'], 'Ты успешно подписался на обновления в рамках этой сессии')
- users.append(item[u'user_id'])
- ###подгрузка в БД
- elif msg.find('отписаться') != -1:
- if users.count(item[u'user_id']) == 0:
- write_msg(item[u'user_id'], 'Ты и не подписан')
- else:
- write_msg(item[u'user_id'], 'Ты успешно отписался от обновлений в рамках этой сессии. Когда бот будет перезапущен, ты снова получишь сообщение')
- users.remove(item[u'user_id'])
- ###подгрузка в БД
- elif msg.startswith('cmd#-r'):
- gethash = msg[6]+msg[7]
- ans = msg[8:]
- for i in hash:
- if gethash == hash[i]:
- write_msg(i, ans)
- hash.pop(i)
- elif msg.startswith('cmd#-y'):
- try:
- if (admins[item[u'user_id']] > datetime.now()):
- f = open('Huy')
- for line in f:
- l = line.split()
- if l[3] == '1':
- write_msg(l[0], msg[6:])
- f.close()
- else:
- write_msg(item[u'user_id'], 'Недостаточно прав. Напишите председателю клуба для получения ключа')
- except ValueError:
- write_msg(item[u'user_id'], 'команда не удовлетворяет требованиям к ней')
- elif msg.startswith('cmd#+l'):
- try:
- s = ''
- ms = ''
- l = []
- dt = msg[6:]
- f = open('Her')
- for line in f:
- if line.startswith(dt):
- s = line[7:]
- for i in l:
- ms+='vk.com/id'+l+'\n'
- write_msg(item[u'user_id'], ms)
- except:
- item[u'user_id'], 'введены некорректные данные'
- elif msg.startswith('cmd#-n'):
- try:
- if (admins[item[u'user_id']] > datetime.now()):
- msg = msg[6:]
- id = msg[:msg.find('/')]
- write_msg(id, msg[msg.find('/')+1:])
- write_msg(item[u'user_id'], 'доставлено')
- else:
- write_msg(item[u'user_id'], 'Недостаточно прав. Напишите председателю клуба для получения ключа')
- except ValueError:
- write_msg(item[u'user_id'], 'команда не удовлетворяет требованиям к ней')
- else:
- b = True
- for i in hash:
- if i == item[u'user_id']:
- b = False
- if b & (limit[item[u'user_id']] < datetime.now()):
- write_msg(item[u'user_id'],'Я не знаю, о чем ты. Давай я спрошу у человека, который должен это знать. Если ты ответишь мне да, я спрошу, любой другой ответ вернет диалог в начало')
- scenario[item[u'user_id']] = '7'
- question[item[u'user_id']] = item[u'body']
- else:
- write_msg(item[u'user_id'], ' Вам еще не ответили на предыдущее сообщение или вы недавно задали свой вопрос. Попробуйте позже')
- ##################################################################################################################################
- elif scenario.get(item[u'user_id']) == '1':
- if msg.startswith('!'):
- ## Запрос к БД
- scs = True #Если ника нет записывает и возвращает фолз, если есть возвращает тру
- if scs:
- write_msg(item[u'user_id'],'такой ник уже есть в нашей базе данных, выбери себе другой, напиши его опять начиная с восклицательного знака или что-либо другое, чтобы выйти')
- scenario[item[u'user_id']] = '1'
- else:
- scenario[item[u'user_id']] = '0'
- elif scenario.get(item[u'user_id']) == '2':
- try:
- try:
- s = ''
- text = []
- f = open('Her')
- for line in f:
- l = line.split()
- if glist[int(msg)] == l[0]:
- s = line
- else:
- text.append(line)
- if s.find(str(item[u'user_id']))!= -1:
- write_msg(item[u'user_id'], 'Ты уже играешь в этот день')
- scenario[item[u'user_id']] = '0'
- else:
- if s == '':
- s+= glist[int(msg)]
- s += ' ' + str(item[u'user_id'])
- write_msg(item[u'user_id'])
- scenario[item[u'user_id']] = '0'
- f.close()
- f = open('Her', 'w')
- for i in text:
- f.write(i + '\n')
- f.write(s)
- f.close()
- except TypeError:
- write_msg(item[u'user_id'], 'Ты ввел не число, выход в главное меню')
- scenario[item[u'user_id']] = '0'
- except LookupError:
- write_msg(item[u'user_id'], 'Ты вышел из сценария. Ты можешь записаться в любое удобное время введя корректную дату')
- scenario[item[u'user_id']] = '0'
- elif scenario.get(item[u'user_id']) == '3':
- try:
- try:
- uglist = ulist[item[u'user_id']]
- dt = uglist[int(msg)]
- f = open('Her')
- text = []
- s = ''
- for line in f:
- a = line.find(dt)
- if (a!=-1):
- s = line[0:a-1]+line[a+1:]
- else:
- text.append(line)
- f.close()
- f = open('Her', 'w')
- for i in text:
- f.write(i+'\n')
- f.write(s)
- write_msg(item[u'user_id'], 'success')
- scenario[item[u'user_id']] = '0'
- except LookupError:
- write_msg(item[u'user_id'], 'Incorrect input')
- scenario[item[u'user_id']] = '0'
- except ValueError:
- write_msg(item[u'user_id'], 'Incorrect input')
- scenario[item[u'user_id']] = '0'
- elif scenario.get(item[u'user_id']) == '4':
- if (len(msg) == 264) & (msg.find('0hkkgusj') != -1):
- f = open('kluchi')
- scs = True
- text = []
- for line in f:
- text.append(line)
- if line == msg:
- scs = False
- f.close()
- if scs:
- if item[u'user_id'] != 337775081:
- admins[item[u'user_id']] = datetime.now() + timedelta(minutes=10)
- f = open('kluchi', 'w')
- for i in text:
- f.write(i+'\n')
- f.write(msg)
- f.close()
- write_msg(item[u'user_id'], 'доступ разрешен до ' + str(admins[item[u'user_id']])[0:-7])
- write_msg(item[u'user_id'], 'Все команды, для которых нужны администраторские права, начинаются с cmd# \n cmd#+g добавит игру по указанной дате, дальнейшую информацию ты получишь в диалоге.\n cmd#-g удалит игру по аналогии.\n cmd#-y оповестит всех пользователей от имени бота.\n cmd#-n напишет сообщение выбранному пользователю от имени бота. например, команда cmd#-n315232757/Привет напишет сообщение с текстом привет пользователю vk.com/id315232757')
- write_msg(337775081, 'vk.com/id' + str(item[u'user_id']) + ' получил админские права')
- scenario[item[u'user_id']] = '0'
- else:
- write_msg(item[u'user_id'], 'Ключ уже был использован')
- else:
- write_msg(item[u'user_id'], 'ключ - подделка. выход в главное меню')
- scenario[item[u'user_id']] = '0'
- elif scenario[item[u'user_id']] == '5':
- try:
- f = open('zalupa')
- scs = False
- text = []
- for line in f:
- if line == msg:
- scs = True
- else:
- text.append(line)
- f.close()
- if scs:
- s = ''
- f = open('zalupa', 'w')
- for i in text:
- f.write(i+'\n')
- f.close()
- text = []
- f = open('Her')
- for line in f:
- dt = str(item[u'body'])
- if line.find(dt)!=-1:
- s = line[(line.find(dt)+1):]
- l = s.split()
- for i in l:
- write_msg(int(i), 'Игра в дату '+dt+' не сможет состояться. Ты можешь записаться на другую доступную игру в любое удобное тебе время')
- else:
- text.append(line)
- f.close()
- f = open('Her', 'w')
- for i in text:
- f.write(i+'\n')
- f.close()
- write_msg(item[u'user_id'],'Игра успешно удалена')
- else:
- write_msg(item[u'user_id'], 'Игра не найдена')
- except ValueError:
- write_msg(item[u'user_id'],'Введенная дата не соответствует предъявляемым к ней требованиям')
- scenario[item[u'user_id']] = '0'
- elif scenario[item[u'user_id']] == '6':
- try:
- udate = datetime.strptime(msg, '%m%d%Y')
- if 1:
- scs = True
- text = []
- f = open('zalupa')
- for line in f:
- if line == msg:
- scs = False
- else:
- text.append(line)
- f.close()
- if scs:
- user = []
- f = open('zalupa', 'w')
- for i in text:
- f.write(i + '\n')
- f.write(msg)
- f.close()
- f = open('Huy')
- for line in f:
- try:
- l = line.split()
- write_msg(l[0], 'Тут новая игра намечается ' + datetime.isoformat(udate, sep = 'T')[0:-9])
- except LookupError:
- write_msg(item[u'user_id'], 'unexpected error occured')
- write_msg(337775081, 'строка в хуе не соответствует стандартам')
- write_msg(item[u'user_id'], 'Игра успешно добавлена')
- f.close()
- else:
- write_msg(item[u'user_id'], u'Введена некорректная дата')
- except ValueError:
- write_msg(item[u'user_id'], 'Введена некорректная дата')
- elif scenario[item[u'user_id']] == '7':
- if msg.find('да')!=-1:
- b = True
- while b:
- s = ''.join(choice(ascii_lowercase) for i in range(2))
- b = False
- for i in hash:
- if s == hash[i]:
- b = True
- hash[item[u'user_id']] = s
- write_msg(337775081, 'hashedid = '+ s + '\nquestion = ' + question[item[u'user_id']])
- limit[item[u'user_id']] = datetime.now() + timedelta(minutes = 60)
- scenario[item[u'user_id']] = '0'
- write_msg(item[u'user_id'], 'Сообщение отправлено')
- else:
- scenario[item[u'user_id']] = '0'
- write_msg(item[u'user_id'], 'Сообщение отправлено не было')
- time.sleep(1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement