-
-
Save iNerV/992319e93a5bfe3cb304 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
__author__ = 'NerV' | |
import urllib | |
import json | |
import os | |
import sqlite3 | |
import time | |
import urllib.request | |
import urllib.parse | |
import re | |
from grab import Grab | |
from urllib.request import urlretrieve | |
import subprocess | |
from vkbot_option import token | |
def send_message(id, message): | |
req = "https://api.vk.com/method/messages.send?" | |
data = urllib.parse.urlencode({ | |
'access_token': token, | |
'user_id': id, | |
'message': message, | |
'v': 5.25}) | |
binary_data = data.encode('utf8') | |
req2 = urllib.request.Request(req, binary_data) | |
params = urllib.request.urlopen(req2) | |
return json.loads(params.read().decode()) | |
def search_subs(kageid, translator): | |
g = Grab() | |
g.go('http://fansubs.ru/base.php?id=' + str(kageid)) | |
try: | |
i = 2 | |
i2 = g.doc.select('//table[contains(@width, "750")]').count() | |
i3 = i + 4 | |
link_srt = None | |
authors_list = [] | |
while True: | |
link_srt = 'http://fansubs.ru/base.php?srt=' + g.doc.select('//table[contains(@width, "750")]')[i].select('.//input[contains(@name, "srt")]').attr('value') | |
while True: | |
try: | |
authors = g.doc.select('//table[contains(@width, "100%")]')[i3].select('.//td[contains(@valign, "middle")]').text() | |
try: | |
authors_list.append(authors.split(':')[1].split('[')[0].lower().strip()) | |
except IndexError: | |
authors_list.append(authors.split('[')[0].lower().strip()) | |
i3 += 1 | |
print(authors) | |
except IndexError: | |
print(i3) | |
i3 += 1 | |
break | |
if translator.lower() in authors_list: | |
break | |
else: | |
i += 1 | |
print(i2) | |
return link_srt | |
except IndexError: | |
print(i) | |
print('no subs') | |
return 'Ошибка: указанный переводчик не переводил данное аниме.' | |
def get_rows(conn, message): | |
c = conn.cursor() | |
ms_words = message.split(' | ') | |
try: | |
if 'по названию' in message: | |
title = ms_words[2] | |
ani_type = ms_words[3] | |
c.execute("SELECT * FROM kage WHERE (title LIKE ? AND ani_type LIKE ?)", (title, ani_type)) | |
elif 'по id' in message: | |
kageid = ms_words[2] | |
c.execute("SELECT * FROM kage WHERE (kageid = ?)", (kageid,)) | |
else: | |
return 'test' | |
return c.fetchall() | |
except IndexError: | |
pass | |
# def get_rows2(conn, message): | |
# c = conn.cursor() | |
# pass | |
def get_user_messages(user_id, conn): | |
"""Получаем список новых сообщений от заданного пользователя""" | |
c = conn.cursor() | |
print('get_user_messages') | |
req = "https://api.vk.com/method/messages.getHistory?" | |
data = urllib.parse.urlencode({ | |
'access_token': token, | |
'v': 5.25, | |
'user_id': user_id, | |
'count': 1, | |
}) | |
binary_data = data.encode('utf8') | |
req2 = urllib.request.Request(req, binary_data) | |
params = urllib.request.urlopen(req2) | |
response = json.loads(params.read().decode())['response']['items'] | |
# print('chtoto') | |
# print(response) | |
for msg in response: | |
print('db2') | |
if msg['from_id'] == msg['user_id']: | |
print('db3') | |
c.execute("SELECT * FROM messages WHERE (msg_id LIKE ?)", (msg['id'],)) | |
db = c.fetchall() | |
print(db) | |
if len(db) == 0: | |
print('in db') | |
print(msg['id']) | |
c.execute('INSERT INTO messages (msg_id) VALUES (?)', (msg['id'],)) | |
print('db') | |
return msg | |
else: | |
print('aaaaaaaaaaaaaaaa') | |
else: | |
time.sleep(1) | |
get_user_messages(user_id, conn) | |
print('db4') | |
print('db5') | |
def make_active(conn, user_id): | |
print('make_active') | |
response = get_user_messages(user_id, conn) | |
c = conn.cursor() | |
if not response['body'].lower().find('стоп'): | |
c.execute('DELETE FROM queue WHERE (user_id LIKE ?)', (user_id,)) | |
conn.commit() | |
send_message(user_id, 'Вы отменили своё решение. Чтобы попрбовать снова, напишите "скачать"') | |
else: | |
c.execute('UPDATE queue SET active=1 WHERE (user_id LIKE ?)', (user_id,)) | |
conn.commit() | |
def get_series(conn, user_id): | |
print('get_series') | |
response = get_user_messages(user_id, conn) | |
c = conn.cursor() | |
if not response['body'].lower().find('стоп'): | |
c.execute('DELETE FROM queue WHERE (user_id LIKE ?)', (user_id,)) | |
conn.commit() | |
send_message(user_id, 'Вы отменили своё решение. Чтобы попрбовать снова, напишите "скачать"') | |
else: | |
c.execute("UPDATE queue SET series=? WHERE user_id=?", (response['body'], user_id,)) | |
conn.commit() | |
make_active(conn, user_id) | |
def get_end_watermark(conn, user_id): | |
print('get_end_watermark') | |
response = get_user_messages(user_id, conn) | |
c = conn.cursor() | |
if not response['body'].lower().find('стоп'): | |
c.execute('DELETE FROM queue WHERE (user_id LIKE ?)', (user_id,)) | |
conn.commit() | |
send_message(user_id, 'Вы отменили своё решение. Чтобы попрбовать снова, напишите "скачать"') | |
else: | |
c.execute("UPDATE queue SET end_watermark=? WHERE user_id=?", (response['body'], user_id,)) | |
conn.commit() | |
get_series(conn, user_id) | |
def get_watermark(conn, user_id): | |
print('get_watermark') | |
response = get_user_messages(user_id, conn) | |
c = conn.cursor() | |
if not response['body'].lower().find('стоп'): | |
c.execute('DELETE FROM queue WHERE (user_id LIKE ?)', (user_id,)) | |
conn.commit() | |
send_message(user_id, 'Вы отменили своё решение. Чтобы попрбовать снова, напишите "скачать"') | |
else: | |
c.execute("UPDATE queue SET watermark=? WHERE user_id=?", (response['body'], user_id,)) | |
conn.commit() | |
get_end_watermark(conn, user_id) | |
def get_start_watermark(conn, user_id): | |
print('get_start_watermark') | |
response = get_user_messages(user_id, conn) | |
c = conn.cursor() | |
if not response['body'].lower().find('стоп'): | |
c.execute('DELETE FROM queue WHERE (user_id LIKE ?)', (user_id,)) | |
conn.commit() | |
send_message(user_id, 'Вы отменили своё решение. Чтобы попрбовать снова, напишите "скачать"') | |
else: | |
c.execute("UPDATE queue SET start_watermark=? WHERE user_id=?", (response['body'], user_id,)) | |
conn.commit() | |
get_watermark(conn, user_id) | |
def get_desc(conn, user_id): | |
print('get_desc') | |
response = get_user_messages(user_id, conn) | |
c = conn.cursor() | |
if not response['body'].lower().find('стоп'): | |
c.execute('DELETE FROM queue WHERE (user_id LIKE ?)', (user_id,)) | |
conn.commit() | |
send_message(user_id, 'Вы отменили своё решение. Чтобы попрбовать снова, напишите "скачать"') | |
else: | |
c.execute("UPDATE queue SET description=? WHERE user_id=?", (response['body'], user_id,)) | |
conn.commit() | |
get_start_watermark(conn, user_id) | |
def get_translator(conn, user_id): | |
print('get_translator') | |
response = get_user_messages(user_id, conn) | |
c = conn.cursor() | |
if not response['body'].lower().find('стоп'): | |
c.execute('DELETE FROM queue WHERE (user_id LIKE ?)', (user_id,)) | |
conn.commit() | |
send_message(user_id, 'Вы отменили своё решение. Чтобы попрбовать снова, напишите "скачать"') | |
else: | |
c.execute("UPDATE queue SET translator=? WHERE user_id=?", (response['body'], user_id,)) | |
conn.commit() | |
get_desc(conn, user_id) | |
def get_ani_type(conn, user_id): | |
print('get_ani_type') | |
response = get_user_messages(user_id, conn) | |
c = conn.cursor() | |
print('get_ani_type2') | |
print(response['body']) | |
if not response['body'].lower().find('стоп'): | |
c.execute('DELETE FROM queue WHERE (user_id LIKE ?)', (user_id,)) | |
conn.commit() | |
send_message(user_id, 'Вы отменили своё решение. Чтобы попрбовать снова, напишите "скачать"') | |
else: | |
print('get_ani_type3') | |
c.execute("UPDATE queue SET ani_type=? WHERE user_id=?", (response['body'], user_id,)) | |
conn.commit() | |
print('get_ani_type4') | |
get_translator(conn, user_id) | |
def get_anime_name(conn, user_id): | |
print('get_anime_name') | |
response = get_user_messages(user_id, conn) | |
c = conn.cursor() | |
if not response['body'].lower().find('стоп'): | |
print('test2') | |
c.execute('DELETE FROM queue WHERE (user_id LIKE ?)', (user_id,)) | |
conn.commit() | |
send_message(user_id, 'Вы отменили своё решение. Чтобы попрбовать снова, напишите "скачать"') | |
else: | |
print('test1test') | |
print(response['body']) | |
c.execute("UPDATE queue SET anime_name=? WHERE user_id=?", (response['body'], user_id,)) | |
conn.commit() | |
send_message(user_id, 'Впишите тип аниме ТВ или ОВА') | |
get_ani_type(conn, user_id) | |
def get_page_id(nic): | |
req = "https://api.vk.com/method/users.get?" | |
data = urllib.parse.urlencode({ | |
'access_token': token, | |
'user_ids': nic, | |
'v': 5.25}) | |
binary_data = data.encode('utf8') | |
req2 = urllib.request.Request(req, binary_data) | |
params = urllib.request.urlopen(req2) | |
return json.loads(params.read().decode())['response'][0]['id'] | |
def get_message_text(response, num): | |
for item in response: | |
if num == item['id']: | |
return item['body'] | |
def get_message_profile(response, num): # переименовать потом | |
for item in response: | |
if num == item['id']: | |
return item['user_id'] | |
def reply_to_message2(message, user_id, conn): | |
rows = get_rows(conn, message) | |
if not message.lower().find('скачать'): | |
ms_words = message.split(' | ') | |
try: | |
if 'по названию' in message: | |
for row in rows: | |
print('test') | |
print(row[1]) | |
print(ms_words[4]) | |
send_message(user_id, search_subs(row[1], ms_words[4])) | |
elif 'по id' in message: | |
for row in rows: | |
print(row[1]) | |
print(ms_words[3]) | |
send_message(user_id, search_subs(row[1], ms_words[3])) | |
except (IndexError, TypeError): | |
send_message(user_id, 'Простите, вы где-то ошиблись. Для справки напишите "помогите"') | |
elif not message.lower().find('помоги'): | |
send_message(user_id, 'Здравствуйте, это справочное сообщение. на даный момент поддерживаются следующие команды: «скачать | по названию | Bleach | ТВ | Advokat» (без кавычек), или «скачать | по id | 3735 | Мария Гостюхина» (опять таки без кавычек. Команда «анекдот» и команда «ня». Это только тестовые команды, со временем они поменяются и станут проще. вы можете оставить свои пожелания в комментариях к этой записи: https://vk.com/wall-43342147_57515 или в группе http://vk.com/giseki') | |
elif not message.lower().find('привет'): | |
send_message(user_id, 'Привет, спасибо, что ты написал мне. Я обязательно помогу тебе сделать хардсаб нужного аниме. Для справки напиши "помоги"') | |
elif not message.lower().find('ня'): | |
send_message(user_id, 'Ня кавай, ня кавай, Нас по звукам узнавай, Мы орём на весь трамвай. Ня кавай, ня кавай, лучше к нам не приставай, а то будет ня кавай!') | |
elif not message.lower().find('анекдот'): | |
g = Grab() | |
g.go('http://www.anekdot.ru/rss/slices/random.html') | |
joke = g.doc.select('//td[contains(@class, "anek_content")]').select('.//div').text() | |
send_message(user_id, joke) | |
else: | |
print('I obey, my lord') | |
send_message(user_id, 'Простите, данная команда не поддерживается. Но если вы напишите "анекдот" я расскажу вам шутку! А для справки напишите "помоги"') | |
def reply_to_message(message, user_id, conn): | |
print('reply_to_message') | |
c = conn.cursor() | |
if not message.lower().find('скачать'): # проверять сообщение на взождение слова "скачать", если оно есть выполнячть этот кусок кода. | |
c.execute("SELECT * FROM queue WHERE (user_id LIKE ?)", (user_id,)) | |
db = c.fetchall() | |
if len(db) > 0: | |
print('test1') | |
get_anime_name(conn, user_id) | |
else: | |
c.execute('INSERT INTO queue (user_id) VALUES (?)', (user_id,)) | |
conn.commit() | |
get_anime_name(conn, user_id) | |
else: # если слово "скачать" не найдено, выплнять этот кусок кода. | |
if not message.lower().find('помоги'): | |
send_message(user_id, 'Здравствуйте, это справочное сообщение. на даный момент поддерживаются следующие команды: «скачать | по названию | Bleach | ТВ | Advokat» (без кавычек), или «скачать | по id | 3735 | Мария Гостюхина» (опять таки без кавычек. Команда «анекдот» и команда «ня». Это только тестовые команды, со временем они поменяются и станут проще. вы можете оставить свои пожелания в комментариях к этой записи: https://vk.com/wall-43342147_57515 или в группе http://vk.com/giseki') | |
elif not message.lower().find('привет'): | |
send_message(user_id, 'Привет, спасибо, что ты написал мне. Я обязательно помогу тебе сделать хардсаб нужного аниме. Для справки напиши "помоги"') | |
elif not message.lower().find('ня'): | |
send_message(user_id, 'Ня кавай, ня кавай, Нас по звукам узнавай, Мы орём на весь трамвай. Ня кавай, ня кавай, лучше к нам не приставай, а то будет ня кавай!') | |
elif not message.lower().find('анекдот'): | |
g = Grab() | |
g.go('http://www.anekdot.ru/rss/slices/random.html') | |
joke = g.doc.select('//td[contains(@class, "anek_content")]').select('.//div').text() | |
send_message(user_id, joke) | |
else: | |
print('I obey, my lord') | |
send_message(user_id, 'Простите, данная команда не поддерживается. Но если вы напишите "анекдот" я расскажу вам шутку! А для справки напишите "помоги"') | |
# if len(message.split(' ')) >= 2: | |
# send_message(user_id, 'Простите, данная команда не поддерживается. Но если вы напишите "анекдот" я расскажу вам шутку! А для справки напишите "помоги"') | |
# else: | |
# c.execute('INSERT INTO queue (user_id) VALUES (?)', (user_id,)) | |
def play_with_messages(response): | |
print('play_with_messages') | |
conn = sqlite3.connect('kage.db') | |
c = conn.cursor() | |
for msg in response: | |
c.execute("SELECT * FROM messages WHERE (msg_id LIKE ?)", (msg['id'],)) | |
db = c.fetchall() | |
if len(db) > 0: | |
pass | |
else: | |
reply_to_message(get_message_text(response, msg['id']), get_message_profile(response, msg['id']), conn) | |
c.execute('INSERT INTO messages (msg_id) VALUES (?)', (msg['id'],)) | |
conn.commit() | |
def get_messages(): | |
req = "https://api.vk.com/method/messages.get?" | |
data = urllib.parse.urlencode({ | |
'access_token': token, | |
'v': 5.25}) | |
binary_data = data.encode('utf8') | |
req2 = urllib.request.Request(req, binary_data) | |
params = urllib.request.urlopen(req2) | |
return json.loads(params.read().decode()) | |
while True: | |
try: | |
params = get_messages() | |
play_with_messages(params['response']['items']) | |
time.sleep(5) | |
except Exception: | |
continue |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment