доделал работу с api yandex lyceum теперь без костылей
This commit is contained in:
@@ -1,14 +1,8 @@
|
|||||||
from aiogram.utils import executor
|
from aiogram.utils import executor
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
from aiogram import Bot, Dispatcher, types
|
from aiogram import Bot, Dispatcher, types
|
||||||
from functions import get_audio_messages_func, create_statistic, openai_answer
|
from functions import get_audio_messages_func, openai_answer, yandex
|
||||||
import json
|
import json
|
||||||
from selenium import webdriver
|
|
||||||
from selenium.webdriver.chrome.service import Service
|
|
||||||
from selenium.webdriver.common.by import By
|
|
||||||
from webdriver_manager.chrome import ChromeDriverManager
|
|
||||||
import requests
|
|
||||||
import time
|
|
||||||
|
|
||||||
bot = Bot(token="5941118321:AAG0g0keLrlnuH_9U9X6ehpFFAdOX38qeXI") # создаю объект бота
|
bot = Bot(token="5941118321:AAG0g0keLrlnuH_9U9X6ehpFFAdOX38qeXI") # создаю объект бота
|
||||||
dp = Dispatcher(bot) # создаю объект слушателя
|
dp = Dispatcher(bot) # создаю объект слушателя
|
||||||
@@ -29,24 +23,12 @@ async def start(message: types.Message):
|
|||||||
|
|
||||||
@dp.message_handler(commands=['statistic'])
|
@dp.message_handler(commands=['statistic'])
|
||||||
async def statistic(message: types.Message):
|
async def statistic(message: types.Message):
|
||||||
login = "Dmitrium12"
|
await yandex.statistic(message)
|
||||||
password = ""
|
|
||||||
options = webdriver.ChromeOptions()
|
|
||||||
options.add_argument("--headless")
|
@dp.message_handler(commands=['create_yandex'])
|
||||||
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
|
async def create_yandex(message: types.Message):
|
||||||
driver.get('https://passport.yandex.ru/auth/')
|
await yandex.create_yandex(message)
|
||||||
time.sleep(1)
|
|
||||||
driver.find_element(By.CLASS_NAME, "Button2").click()
|
|
||||||
time.sleep(1)
|
|
||||||
driver.find_element(By.XPATH, '//*[@id="passp-field-login"]').send_keys(login)
|
|
||||||
driver.find_element(By.XPATH, '//*[@id="passp:sign-in"]').click()
|
|
||||||
time.sleep(1)
|
|
||||||
driver.find_element(By.XPATH, '//*[@id="passp-field-passwd"]').send_keys(password)
|
|
||||||
driver.find_element(By.XPATH, '//*[@id="passp:sign-in"]').click()
|
|
||||||
time.sleep(5)
|
|
||||||
cookies = {"Session_id": [i["value"] for i in driver.get_cookies() if i["name"] == "Session_id"][0]}
|
|
||||||
response = requests.get("https://lyceum.yandex.ru/api/notifications?isRead=false&limit=20", cookies=cookies)
|
|
||||||
await message.reply(f'У вас {response.json()["unreadCount"]} уведомлений. Прочитайте хоть')
|
|
||||||
|
|
||||||
|
|
||||||
@dp.message_handler(commands=['r'])
|
@dp.message_handler(commands=['r'])
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ async def get_response_to_openai(message: types.Message, bot):
|
|||||||
message_send.append({"role": "user", "content": ' '.join(message.text.split()[1:])})
|
message_send.append({"role": "user", "content": ' '.join(message.text.split()[1:])})
|
||||||
except sqlite3.OperationalError:
|
except sqlite3.OperationalError:
|
||||||
message_send = [{"role": "user", "content": ' '.join(message.text.split()[1:])}]
|
message_send = [{"role": "user", "content": ' '.join(message.text.split()[1:])}]
|
||||||
print(message_sendко)
|
print(message_send)
|
||||||
response = openai.ChatCompletion.create(
|
response = openai.ChatCompletion.create(
|
||||||
model="gpt-3.5-turbo",
|
model="gpt-3.5-turbo",
|
||||||
messages=message_send,
|
messages=message_send,
|
||||||
|
|||||||
@@ -0,0 +1,51 @@
|
|||||||
|
import sqlite3
|
||||||
|
import time
|
||||||
|
import requests
|
||||||
|
from aiogram import types
|
||||||
|
from selenium import webdriver
|
||||||
|
from selenium.webdriver.chrome.service import Service
|
||||||
|
from selenium.webdriver.common.by import By
|
||||||
|
from webdriver_manager.chrome import ChromeDriverManager
|
||||||
|
|
||||||
|
|
||||||
|
async def create_yandex(message: types.Message):
|
||||||
|
conn = sqlite3.connect('db.sql')
|
||||||
|
cur = conn.cursor()
|
||||||
|
response = cur.execute("SELECT * FROM yandex WHERE user_id=?", (message.from_user.id, )).fetchall()
|
||||||
|
conn.close()
|
||||||
|
if response:
|
||||||
|
await message.reply("Ваш аккаунт уже добавлен")
|
||||||
|
options = webdriver.ChromeOptions()
|
||||||
|
options.add_argument("--headless")
|
||||||
|
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
|
||||||
|
driver.get('https://passport.yandex.ru/auth/')
|
||||||
|
time.sleep(1)
|
||||||
|
driver.find_element(By.CLASS_NAME, "Button2").click()
|
||||||
|
time.sleep(1)
|
||||||
|
driver.find_element(By.XPATH, '//*[@id="passp-field-login"]').send_keys(message.text.split()[1])
|
||||||
|
driver.find_element(By.XPATH, '//*[@id="passp:sign-in"]').click()
|
||||||
|
time.sleep(1)
|
||||||
|
driver.find_element(By.XPATH, '//*[@id="passp-field-passwd"]').send_keys(message.text.split()[2])
|
||||||
|
driver.find_element(By.XPATH, '//*[@id="passp:sign-in"]').click()
|
||||||
|
time.sleep(5)
|
||||||
|
try:
|
||||||
|
cookies = [i["value"] for i in driver.get_cookies() if i["name"] == "Session_id"][0]
|
||||||
|
conn = sqlite3.connect('db.sql')
|
||||||
|
cur = conn.cursor()
|
||||||
|
cur.execute("INSERT INTO yandex (user_id, Session_id) VALUES (?, ?)", (message.from_user.id, str(cookies)))
|
||||||
|
conn.commit()
|
||||||
|
conn.close()
|
||||||
|
await message.reply("Ваш аккаунт добавлен")
|
||||||
|
except IndexError:
|
||||||
|
await message.reply("Ошибка пароля или логина")
|
||||||
|
|
||||||
|
async def statistic(message: types.Message):
|
||||||
|
conn = sqlite3.connect('db.sql')
|
||||||
|
cur = conn.cursor()
|
||||||
|
response = cur.execute("SELECT * FROM yandex WHERE user_id=?", (message.from_user.id,)).fetchall()
|
||||||
|
conn.close()
|
||||||
|
if not response:
|
||||||
|
await message.reply("Сначала используйте /create_yandex с логином и паролем для добавление аккаунта")
|
||||||
|
cookies = {"Session_id": response[0][2]}
|
||||||
|
response = requests.get("https://lyceum.yandex.ru/api/notifications?isRead=false&limit=20", cookies=cookies)
|
||||||
|
await message.reply(f'У вас {response.json()["unreadCount"]} уведомлений. Прочитайте хоть')
|
||||||
@@ -0,0 +1,198 @@
|
|||||||
|
from flask import Flask, request, jsonify
|
||||||
|
import logging
|
||||||
|
import random
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
|
||||||
|
logging.basicConfig(level=logging.INFO)
|
||||||
|
|
||||||
|
cities = {
|
||||||
|
'москва': [['1540737/daa6e420d33102bf6947', '213044/7df73ae4cc715175059e'], "Россия"],
|
||||||
|
'нью-йорк': [['1652229/728d5c86707054d4745f', '1030494/aca7ed7acefde2606bdc']],
|
||||||
|
'париж': [["1652229/f77136c2364eb90a3ea8", '123494/aca7ed7acefd12e606bdc']]
|
||||||
|
}
|
||||||
|
|
||||||
|
sessionStorage = {}
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/post', methods=['POST'])
|
||||||
|
def main():
|
||||||
|
logging.info('Request: %r', request.json)
|
||||||
|
response = {
|
||||||
|
'session': request.json['session'],
|
||||||
|
'version': request.json['version'],
|
||||||
|
'response': {
|
||||||
|
'end_session': False
|
||||||
|
}
|
||||||
|
}
|
||||||
|
handle_dialog(response, request.json)
|
||||||
|
logging.info('Response: %r', response)
|
||||||
|
return jsonify(response)
|
||||||
|
|
||||||
|
|
||||||
|
def handle_dialog(res, req):
|
||||||
|
user_id = req['session']['user_id']
|
||||||
|
if req['session']['new']:
|
||||||
|
res['response']['text'] = 'Привет! Назови своё имя!'
|
||||||
|
sessionStorage[user_id] = {
|
||||||
|
'first_name': None,
|
||||||
|
'game_started': False
|
||||||
|
}
|
||||||
|
return
|
||||||
|
|
||||||
|
if sessionStorage[user_id]['first_name'] is None:
|
||||||
|
first_name = get_first_name(req)
|
||||||
|
if first_name is None:
|
||||||
|
res['response']['text'] = 'Не расслышала имя. Повтори, пожалуйста!'
|
||||||
|
else:
|
||||||
|
sessionStorage[user_id]['first_name'] = first_name
|
||||||
|
sessionStorage[user_id]['guessed_cities'] = []
|
||||||
|
res['response']['text'] = f'Приятно познакомиться, {first_name.title()}. Я Алиса. Отгадаешь город по фото?'
|
||||||
|
res['response']['buttons'] = [
|
||||||
|
{
|
||||||
|
'title': 'Да',
|
||||||
|
'hide': True
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'title': 'Нет',
|
||||||
|
'hide': True
|
||||||
|
}
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
if not sessionStorage[user_id]['game_started']:
|
||||||
|
if 'да' in req['request']['nlu']['tokens']:
|
||||||
|
if len(sessionStorage[user_id]['guessed_cities']) == 3:
|
||||||
|
res['response']['text'] = 'Ты отгадал все города!'
|
||||||
|
res['end_session'] = True
|
||||||
|
else:
|
||||||
|
sessionStorage[user_id]['game_started'] = True
|
||||||
|
sessionStorage[user_id]['attempt'] = 1
|
||||||
|
play_game(res, req)
|
||||||
|
elif 'нет' in req['request']['nlu']['tokens']:
|
||||||
|
res['response']['text'] = 'Ну и ладно!'
|
||||||
|
res['end_session'] = True
|
||||||
|
else:
|
||||||
|
res['response']['text'] = 'Не поняла ответа! Так да или нет?'
|
||||||
|
res['response']['buttons'] = [
|
||||||
|
{
|
||||||
|
'title': 'Да',
|
||||||
|
'hide': True
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'title': 'Нет',
|
||||||
|
'hide': True
|
||||||
|
}
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
play_game(res, req)
|
||||||
|
|
||||||
|
|
||||||
|
def play_game(res, req):
|
||||||
|
user_id = req['session']['user_id']
|
||||||
|
city = random.choice(list(cities.keys()))
|
||||||
|
while city in sessionStorage[user_id]['guessed_cities']:
|
||||||
|
city = random.choice(list(cities.keys()))
|
||||||
|
sessionStorage[user_id]['city'] = city
|
||||||
|
sessionStorage[user_id]['country'] = cities[city][1]
|
||||||
|
sessionStorage[user_id]['guessed_cities'].append(city)
|
||||||
|
images = cities[city][0]
|
||||||
|
res['response']['card'] = {}
|
||||||
|
res['response']['card']['type'] = 'BigImage'
|
||||||
|
res['response']['card']['title'] = 'Что это за город?'
|
||||||
|
res['response']['card']['image_id'] = random.choice(images)
|
||||||
|
res['response']['text'] = 'Тогда сыграем! Как называется этот город?'
|
||||||
|
|
||||||
|
|
||||||
|
def check_city(res, req):
|
||||||
|
user_id = req['session']['user_id']
|
||||||
|
if req['request']['original_utterance'].lower() == sessionStorage[user_id]['city']:
|
||||||
|
if len(sessionStorage[user_id]['guessed_cities']) == 3:
|
||||||
|
res['response']['text'] = f'Правильно! Ты отгадал все города!'
|
||||||
|
res['end_session'] = True
|
||||||
|
else:
|
||||||
|
res['response']['text'] = f'Правильно! Следующий город - {play_game(res, req)}'
|
||||||
|
sessionStorage[user_id]['game_started'] = False
|
||||||
|
del sessionStorage[user_id]['attempt']
|
||||||
|
|
||||||
|
# Добавляем вопрос о стране
|
||||||
|
res['response']['buttons'] = [
|
||||||
|
{
|
||||||
|
'title': 'Да',
|
||||||
|
'hide': True,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'title': 'Нет',
|
||||||
|
'hide': True,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
if sessionStorage[user_id]['attempt'] == 3:
|
||||||
|
res['response'][
|
||||||
|
'text'] = f'Вы проиграли! Правильный ответ - {sessionStorage[user_id]["city"]}. Сыграем еще?'
|
||||||
|
del sessionStorage[user_id]['attempt']
|
||||||
|
sessionStorage[user_id]['game_started'] = False
|
||||||
|
res['response']['buttons'] = [
|
||||||
|
{
|
||||||
|
'title': 'Да',
|
||||||
|
'hide': True,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'title': 'Нет',
|
||||||
|
'hide': True,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
sessionStorage[user_id]['attempt'] += 1
|
||||||
|
res['response']['text'] = f'Неправильно. Попробуй еще раз!'
|
||||||
|
|
||||||
|
|
||||||
|
def check_country(res, req):
|
||||||
|
user_id = req['session']['user_id']
|
||||||
|
if req['request']['original_utterance'].lower() == sessionStorage[user_id]['country']:
|
||||||
|
res['response']['text'] = f'Правильно! Следующий город - {play_game(res, req)}'
|
||||||
|
del sessionStorage[user_id]['attempt']
|
||||||
|
res['response']['buttons'] = [
|
||||||
|
{
|
||||||
|
'title': 'Да',
|
||||||
|
'hide': True,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'title': 'Нет',
|
||||||
|
'hide': True,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
if sessionStorage[user_id]['attempt'] == 3:
|
||||||
|
res['response'][
|
||||||
|
'text'] = f'Вы проиграли! Правильный ответ - {sessionStorage[user_id]["country"]}. Сыграем еще?'
|
||||||
|
del sessionStorage[user_id]['attempt']
|
||||||
|
sessionStorage[user_id]['game_started'] = False
|
||||||
|
res['response']['buttons'] = [
|
||||||
|
{
|
||||||
|
'title': 'Да',
|
||||||
|
'hide': True,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'title': 'Нет',
|
||||||
|
'hide': True,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
sessionStorage[user_id]['attempt'] += 1
|
||||||
|
res['response']['text'] = f'Неправильно. Попробуй еще раз!'
|
||||||
|
|
||||||
|
|
||||||
|
def get_city(req):
|
||||||
|
for entity in req['request']['nlu']['entities']:
|
||||||
|
if entity['type'] == 'YANDEX.GEO':
|
||||||
|
return entity['value'].get('city', None)
|
||||||
|
|
||||||
|
|
||||||
|
def get_first_name(req):
|
||||||
|
for entity in req['request']['nlu']['entities']:
|
||||||
|
if entity['type'] == 'YANDEX.FIO':
|
||||||
|
return entity['value'].get('first_name', None)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app.run(port=52520)
|
||||||
|
|||||||
Reference in New Issue
Block a user