Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import asyncio
- import logging
- import aiohttp
- import sqlite3
- from aiogram.types import ReplyKeyboardMarkup, KeyboardButton
- from aiogram import Bot
- from aiogram.dispatcher import Dispatcher
- from aiogram.utils.executor import start_polling
- #токен бота
- API_TOKEN = '557867522:AAFYFp1K2ZAbIqIUTPDnPKlJxyqoLVEH-R4'
- #прокси
- PROXY_URL = 'http://54.38.137.173:8080'
- #вроде тоже для прокси
- logging.basicConfig(level=logging.INFO)
- loop = asyncio.get_event_loop()
- #необходимо для более удобной работы с ботов
- bbot = Bot(token=API_TOKEN, loop=loop, proxy=PROXY_URL)
- dp = Dispatcher(bbot)
- #создаётся база данных и курсор (необходим для работы с таблицей)
- conn = sqlite3.connect("bd.db")
- cursor = conn.cursor()
- #создаётся столбцы в таблице и таблица try необходим тк при повторном создании таблицы выдаётся ошибка (можешь заменить Exception)
- try:
- cursor.execute("CREATE TABLE bd (id integer, clas integer)")
- except Exception:
- pass
- #присоединение к прокси
- async def fetch(url, proxy=None, proxy_auth=None):
- async with aiohttp.ClientSession() as session:
- async with session.get(url, proxy=proxy, proxy_auth=proxy_auth) as response:
- return await response.text()
- #что надо делать боту при команде start
- @dp.message_handler(commands=['start'])
- async def cmd_start(message):
- #создание клавиатуры
- klava = ReplyKeyboardMarkup()
- #создание кнопок для клавы
- kl_7 = KeyboardButton('7 класс')
- kl_8 = KeyboardButton('8 класс')
- kl_9 = KeyboardButton('9 класс')
- kl_10 = KeyboardButton('10 класс')
- kl_11 = KeyboardButton('11 класс')
- #добавление кнопок к клаве
- klava.add(kl_7,kl_8,kl_9,kl_10,kl_11)
- #отправка сообщения человеку и отправка клавы(для более удобной работы человека
- await bbot.send_message(message.chat.id,text="в каком вы классе?",reply_markup=klava)
- #можно сделать карутину и тогда можно будет уменьшить и украсить код, но это по желанию
- # отсоединение от базы
- conn.close()
- #обработка остальных сообщений
- @dp.message_handler()
- async def cats(message):
- #берём id из сообшения
- id_user = message['from'].id
- #берём такст сообщения
- fraza = str(message.text)
- #разбиваем фразу по пробемам при желании можно через запятую добавить другие символы
- fraza = fraza.split(' ')
- #создание клавы как при команде старт осталось добавить кнопки и добавить в тест
- klava = ReplyKeyboardMarkup()
- #дальше идут костыли и говнокод, но я не особо знаю как его исправить
- #поиск в таблице по id класс человека (тут создание такста запроса)
- sql = "SELECT clas FROM bd WHERE id=?"
- #сам запрос
- cursor.execute(sql, [(id_user)])
- #сохранение результатов запроса
- clas = cursor.fetchone()
- #если класса по id нет (человека нет в базе)
- if clas == None:
- #ждём пока 1 слово фразы человека будет числом (пробует преобразовать в число и если это не цифры то получаем ошибку)
- try:
- #если у нас тут возникае ошибка (1 слово не число), то мы переходим к исключению, иначе смотрим что за класс он написал
- if (int(fraza[0]) == 7) or (int(fraza[0]) == 8) or (int(fraza[0]) == 9) or (int(fraza[0]) == 10) or (int(fraza[0]) == 11):
- #если класс соответствует нашим запросам, то добавляем человеку в базу
- cursor.execute("INSERT INTO bd VALUES ('%i', '%i')" % (id_user, int(fraza[0])))
- #созраняем изменения в базе
- conn.commit()
- #чисто для красоты пишем человеку
- await bbot.send_message(message.chat.id, text="запомнил")
- #что мы делаем если человк вписал не нужное нам число
- else:
- #просим ввести в каком он классе (суда надо добавит отправку клавы)
- await bbot.send_message(message.chat.id, text="в каком вы классе? (7-11)")
- #если это не число, то возникает ошибка и в таком случае мы снова просим ввести в каком он классе (сюда надо добавит клавиатуру как после start)
- except Exception:
- await bbot.send_message(message.chat.id, text="в каком вы классе? (7-11)")
- #что мы делаем если человек есть в базе
- else:
- #тк по 1 id может быть только 1 человек мы берём из списка только 1 значение (оно там и так 1)
- clas = clas[0]
- #создаём переменнум максимум для того что-бы потом опредилить какая из теорем собрала больше совпадений
- maximum = None
- #количество совпадений по каждой из теорем
- sovp_teorema_1 = 0
- sovp_teorema_2 = 0
- sovp_teorema_3 = 0
- #ключевые слова по теоремам
- teorema_1 = ["q", "r", "1"]
- teorema_2 = ["t", "f", "o", "2"]
- teorema_3 = ["0", "e", "i", "3"]
- #в цикле for смотрим сколько совкадений в между ключевыми словами каждой теоремы и словами которые мы получили при разбиении фразы
- for i in fraza:
- for ss in teorema_1:
- if ss == i:
- sovp_teorema_1 += 1
- for ss in teorema_2:
- if ss == i:
- sovp_teorema_2 += 1
- for ss in teorema_3:
- if ss == i:
- sovp_teorema_3 += 1
- #пример проверки на превыение класса(запрет на показ теорем которые превышают его класс)
- if clas < 10:
- sovp_teorema_3 = 0
- #тут начинается трэшь, а именно проверка на случай если количество совпадений окажется одинакомым (в теории это можно сделать в цикле for, но это как мне кажется трудновато)
- #проверка на случай если совпадений нет, надо заменить на "какая теорема вам нужна?" естественно с клавой где 1 кнопка это 1 теорема
- if sovp_teorema_1 == 0 and sovp_teorema_2 == 0 and sovp_teorema_3 == 0:
- await bbot.send_message(message.chat.id, text="не коректный запрос")
- #тут и дальше надо в фразы добавить клаву где человек сможет выбрать 1 из 2 теорем
- elif (sovp_teorema_1 == sovp_teorema_2) and (sovp_teorema_1 != 0):
- await bbot.send_message(message.chat.id, text="вам нужна 1 или 2 теорема?")
- elif (sovp_teorema_3 == sovp_teorema_2) and (sovp_teorema_3 != 0):
- await bbot.send_message(message.chat.id, text="вам нужна 3 или 2 теорема?")
- elif (sovp_teorema_1 == sovp_teorema_3) and (sovp_teorema_1 != 0):
- await bbot.send_message(message.chat.id, text="вам нужна 1 или 3 теорема?")
- elif (sovp_teorema_1 == sovp_teorema_3) and (sovp_teorema_3 == sovp_teorema_2) and (sovp_teorema_1 != 0):
- await bbot.send_message(message.chat.id, text="вам нужна 1, 2 или 3 теорема?")
- #если совпадений не одинаковое количество, то мы находим максимум
- else:
- maximum = max(sovp_teorema_1, sovp_teorema_2, sovp_teorema_3)
- #отправляем текст теорем
- if maximum == sovp_teorema_1:
- await bbot.send_message(message.chat.id, text="вот вам 1 теорема")
- elif maximum == sovp_teorema_2:
- await bbot.send_message(message.chat.id, text="вот вам 2 теорема")
- elif maximum == sovp_teorema_3:
- await bbot.send_message(message.chat.id, text="вот вам 3 теорема")
- # отсоединение от базы
- conn.close()
- if __name__ == '__main__':
- start_polling(dp, loop=loop, skip_updates=True)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement