Advertisement
Guest User

Untitled

a guest
Dec 18th, 2018
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 34.45 KB | None | 0 0
  1. import asyncio
  2. import logging
  3. import aiohttp
  4. import sqlite3
  5. from aiogram.types import ReplyKeyboardMarkup, KeyboardButton
  6. from aiogram import Bot
  7. from aiogram.dispatcher import Dispatcher
  8. from aiogram.utils.executor import start_polling
  9.  
  10. # токен бота
  11. API_TOKEN = "557867522:AAEjA7-GQoT4NROcYx4N-Z3scI-28i8Kxl8"
  12.  
  13. # прокси
  14. PROXY_URL = 'http://51.15.69.7:3128'
  15.  
  16. # вроде тоже для прокси
  17. logging.basicConfig(level=logging.INFO)
  18. loop = asyncio.get_event_loop()
  19.  
  20. # необходимо для более удобной работы с ботом
  21. bot = Bot(token=API_TOKEN, loop=loop, proxy=PROXY_URL)
  22. dp = Dispatcher(bot)
  23.  
  24. # создаётся база данных и курсор (необходим для работы с базой)
  25. conn = sqlite3.connect("bd.db")
  26. cursor = conn.cursor()
  27.  
  28. # создаётся столбцы в таблице и таблица
  29. # try необходим тк при повторном создании таблицы выдаётся ошибка
  30. # можно заменить Exception на реальную ошибку тк Exception ловит все ошибки
  31. try:
  32. cursor.execute("CREATE TABLE database (id integer, classes integer)")
  33. except Exception:
  34. pass
  35.  
  36.  
  37. # присоединение к прокси
  38. async def fetch(url, proxy=None, proxy_auth=None):
  39. async with aiohttp.ClientSession() as session:
  40. async with session.get(url, proxy=proxy, proxy_auth=proxy_auth) as response:
  41. return await response.text()
  42.  
  43.  
  44. # что надо делать боту при команде start
  45. @dp.message_handler(commands=['start'])
  46. async def crutch(message):
  47. # создание клавиатуры
  48. keyboard = ReplyKeyboardMarkup()
  49.  
  50. # создание кнопок для клавы
  51. kl_7 = KeyboardButton('7 класс')
  52. kl_8 = KeyboardButton('8 класс')
  53. kl_9 = KeyboardButton('9 класс')
  54. kl_10 = KeyboardButton('10 класс')
  55. kl_11 = KeyboardButton('11 класс')
  56.  
  57. # добавление кнопок к клаве
  58. keyboard.add(kl_7, kl_8, kl_9, kl_10, kl_11)
  59.  
  60. # отправка сообщения человеку и отправка клавы(для более удобной работы человека
  61. await bot.send_message(message.chat.id, text="В каком вы классе?", reply_markup=keyboard)
  62. # можно сделать карутину и тогда можно будет уменьшить и украсить код, но это по желанию
  63. # update работает и ладно, костыль, но из-за него придётся придумать работающую структуру и переписать уюму кода
  64. # ДЭДЛАЙН БЛИЗКО не до этого
  65.  
  66.  
  67. async def change_class(nam, from_id, id_chat):
  68. # берём id из сообшения
  69. id_user = from_id
  70.  
  71. # поиск в таблице по id класс человека (тут создание текста запроса)
  72. sql = "SELECT classes FROM database WHERE id=?"
  73.  
  74. # сам запрос
  75. cursor.execute(sql, [id_user])
  76.  
  77. # сохранение результатов запроса
  78. class_fetchone = cursor.fetchone()
  79. if class_fetchone is None:
  80.  
  81. # обработка исключения если класс ещё не введён
  82. await bot.send_message(id_chat, text="Вы ещё не ввели свой класс")
  83.  
  84. else:
  85. if class_fetchone[0] == nam:
  86.  
  87. # обработка исключения если класс и так какой он просит
  88. await bot.send_message(id_chat, text="Ваш класс и так %s" % nam)
  89.  
  90. else:
  91.  
  92. # даём человеку знать что его класс изменён (для красоты)
  93. await bot.send_message(id_chat, text="Ваш класс изменён на %s" % nam)
  94.  
  95. # изменение класса человека на тот что он просит
  96. sql = """UPDATE database SET classes = %d WHERE id = '%s'""" % (nam, from_id)
  97. cursor.execute(sql)
  98. conn.commit()
  99.  
  100.  
  101. # для этой и последующих детырёх функций вфполняем действия описанные в функции change_class
  102. @dp.message_handler(commands=['7_class'])
  103. async def change_class_7(message):
  104. await change_class(nam=7, from_id=message['from'].id, id_chat=message.chat.id)
  105.  
  106.  
  107. @dp.message_handler(commands=['8_class'])
  108. async def change_class_8(message):
  109. await change_class(nam=8, from_id=message['from'].id, id_chat=message.chat.id)
  110.  
  111.  
  112. @dp.message_handler(commands=['9_class'])
  113. async def change_class_9(message):
  114. await change_class(nam=9, from_id=message['from'].id, id_chat=message.chat.id)
  115.  
  116.  
  117. @dp.message_handler(commands=['10_class'])
  118. async def change_class_10(message):
  119. await change_class(nam=10, from_id=message['from'].id, id_chat=message.chat.id)
  120.  
  121.  
  122. @dp.message_handler(commands=['11_class'])
  123. async def change_class_11(message):
  124. await change_class(nam=11, from_id=message['from'].id, id_chat=message.chat.id)
  125.  
  126.  
  127. # обработка остальных сообщений (отличных от команд)
  128. @dp.message_handler()
  129. async def foundation(message):
  130. # для примерного представления кто написал
  131. print(message)
  132.  
  133. # создаём список где находится вся информация по теоремам
  134. theorems = [["аксиома", 7, 0, ["прям", "перпендикуляр", "аксиома"],
  135. "Две прямые, перпендикулярные третьей, не пересекаются"],
  136. ["теорема", 7, 0, ["прям", "точк", "перпендикуляр", "провести"],
  137. """Из точки,
  138. не лежащей на данной прямой можно провести перпендикуляр к этой прямой и притом только один"""],
  139. ["теорема", 7, 0,
  140. ["прям", "секущ", "углы", "накрест лежащие", "соответственные", "пересеч", "параллель", "угол"],
  141. """Если при пересечении двух прямых секущей накрест лежащие/
  142. соответственные углы равны, то такие прямые параллельны"""],
  143. ["теорема", 7, 0, ["односторонни", "угол", "углы", "пересеч", "секущ", "сумма", "параллель"],
  144. """Если при пересечении двух прямых секущей сумма односторонних углов
  145. равна 180 градусов, то прямые параллельны"""],
  146. ["аксиома", 7, 0, ["точк", "прямая", "проходит", "одна", "любые"],
  147. "Через любые две точки проходит прямая, и притом только одна"],
  148. ["аксиома", 7, 0, ["отрезок", "луч", "равный", "люб", "равный"],
  149. "На любом луче можно отложить отрезок, равный данному, и притом только один"],
  150. ["аксиома", 7, 0, ["луч", "сторон", "угол", "равный", "неразвёрнут"],
  151. """От любого луча в заданную сторону можно отложить угол,
  152. равный данному неразвёрнутому углу, и притом только один"""],
  153. ["аксиома", 7, 0, ["точк", "параллель", "прям", "равноудален"],
  154. "Все точки каждой из двух параллельных прямых равноудалены от другой прямой"],
  155. ["аксиома", 7, 0, ["точк", "прям", "проходит", "параллель", "следствие", "пересека"],
  156. """"Через точку, не лежащую на данной прямой, проходит только одна прямая, параллельная данной.
  157. Следствия: 1. Если прямая пересекает одну из параллельных прямых, тона пересекает и другую.
  158. 2. Если две прямые параллельны третьей прямой, то они параллельны"""],
  159. ["теорема", 7, 0, ["вертикальн", "равн", "угл", "угол"], "Вертикальные углы равны"],
  160. ["теорема", 7, 0, ["точк", "биссектрис", "неразвёрнут", "сторон", "равноудал"],
  161. "Каждая точка биссектрисы неразвёрнутого угла равноудалена от его сторон"],
  162. ["другое", 7, 0, ["сумм", "смежны", "градус", "180", "угол", "угл"],
  163. "Сумма смежных углов равна 180 градусов"],
  164. ["теорема", 7, 0, ["первый", "признак", "сторон", "угол", "угл", "треугольник", "рав", "катет"],
  165. """Если две стороны и угол между ними одного треугольника соответственно равны двум сторонам
  166. и углу между ними другого треугольника, то такие треугольники равны.
  167. Если катеты одного прямоугольного треугольника соответственно равны катетам другого,
  168. то такие треугольники равны"""],
  169. ["теорема", 7, 0, ["второй", "признак", "рав", "треугольник", "сторон", "угл"],
  170. """Если сторона и два прилежащих к ней угла одного треугольника соответственно равны
  171. стороне и двум прилежащим к ней углам другого треугольника, то такие треугольники равны"""],
  172. ["теорема", 7, 0, ["третий", "признак", "рав", "треугольник", "три", "сторон"],
  173. """Если три стороны одного треугольника соответственно равны
  174. трём сторонам другого треугольника, то такие треугольники равны"""],
  175. ["теорема", 7, 0, ["ервый", "признак", "подоб", "треугольник", "угл", "равн"],
  176. """Если два угла одного треугольника соответственно равны
  177. двум углам другого треугольника, то такие треугольники равны"""],
  178. ["теорема", 7, 0, ["торой", "признак", "подоб", "треугольник", "пропорци", "угл"],
  179. """Если две стороны одного треугольника пропорциональны двум сторонам другого треугольника и углы,
  180. заключённые между этими сторонами, равны, то такие треугольники подобны"""],
  181. ["теорема", 7, 0, ["третий", "признак", "подоб", "треугольник", "три", "пропорци"],
  182. """Если три стороны одного треугольника пропорциональны трём сторонам другого,
  183. то такие треугольники подобны"""],
  184. ["теорема", 7, 0, ["треугольник", "равнобедренн", "углы", "основани"],
  185. "В равнобедренном треугольнике углы при основании равны"],
  186. ["теорема", 7, 0, ["равнобедренн", "биссектрисс", "основани", "медиан", "высот", "треугольник"],
  187. "В равнобедренном треугольнике биссектриса, проведённая к основанию, является медианой и высотой"],
  188. ["теорема", 7, 0, ["треугольник", "медиан", "пересек", "точк", "отношен", "высот", "биссектрис"],
  189. """В любом треугольнике медианы пересекаются в одной точке и этой точкой делятся в отношении 2:1,
  190. считая от вершины; биссектрисы пересекаются в одной точке и каждая из них делит его стороны на части,
  191. пропорциональные двум другим сторонам; высоты или их продолжения пересекаются в одной точке"""],
  192. ["теорема", 7, 0, ["биссектрис", "угл", "сторон", "неразвёрнут", "угл"],
  193. "Каждая точка биссектрисы неразвёрнутого угла равноудалена от его сторон"],
  194. ["теорема", 7, 0, ["угл", "треугольник", "остр", "тупой", "прямой"],
  195. "В любом треугольнике либо все углы острые, либо два угла острые , а третий угол тупой или прямой"],
  196. ["теорема", 8, 0, ["треугольник"], "угол", "угл", "внешн", "сумм", "смежн",
  197. "Внешний угол треугольника равен сумме двух углов треугольника, не смежных с ним"],
  198. ["теорема", 9, 0, ["срединн", "перпендикуляр", "отрез", "кон", "следствие", "треугольник", "пересек"],
  199. """Каждая точка срединного перпендикуляра к отрезку равноудалена от концов этого отрезка.
  200. Следствие: Срединные перпендикуляры к сторонам треугольника пересекаются в одной точке"""],
  201. ["теорема", 7, 0, ["Теорема о соотношении между сторонами и углами прямоугольного треугольника"],
  202. """В треугольнике против большей стороны лежит больший угол.
  203. Следствия: 1) В прямоугольном треугольнике гипотенуза больше катета
  204. 2) Если два треугольника равны, то треугольник равнобедренный"""],
  205. ["теорема", 7, 0, ["сторон", "сумм", "треугольник"],
  206. "Каждая сторона треугольника меньше суммЫ двух других сторон"],
  207. ["теорема", 9, 0, ["Теорема синусов", "сторон", "треугольник", "синус", "угл", "пропорци"],
  208. "Стороны треуольника пропорциональны синусам противолежащих углов"],
  209. ["теорема", 9, 0, ["Теорема косинусов"],
  210. """Квадрат стороны треугольника равен сумме квадратов двух других сторон
  211. минус удвоенное произведение этих сторон на косинус угла между ними"""],
  212. ["теорема", 8, 0, ["гипотенуз", "катет", "сумм", "треугольник"],
  213. "Катет прямоугольного треугольника, лежащий против угла в 30 градусов, равен половие гипотенузы"],
  214. ["теорема", 8, 0, ["уг", "треугольник", "синус", "косинус", "тангенс", "котангенс"],
  215. """Если острый угол одного треугольника равен острому углу другого треугольника,
  216. то синусы, косинусы, тангенсы и котангенсы этих углов равны"""],
  217. ["теорема", 7, 0, ["теорема", "Пифагора", "квадрат", "гипотенуз", "катет", "сумм", "треугольник"],
  218. "В прямоугольном треугольнике квадрат гипотенузы равен сумме квадратов катетов"],
  219. ["другое", 8, 0, ["средняя", "линия", "трапец", "основан", "полусумм"],
  220. "Средняя линия трапеции параллельна основаниям и равна их полусумме"],
  221. ["другое", 8, 0, ["средняя", "линия", "треугольник", "основан", "половин"],
  222. "Средняя линия треугольника параллельна основанию и равна его половине"],
  223. ["другое", 8, 0, ["диагонал", "прямоугольник", "параллелограмм", "биссектрис"],
  224. """Диагонали прямоугольника равны, взаимно перпендикулярны и точкой пересечения делятся пополам.
  225. Диагональ параллелограмма является биссектрисой для углов, из которых исходит"""],
  226. ["теорема", 8, 0, ["высот", "треугольник", "площад", "основани", "равн", "относ"],
  227. "Если высоты двух треугольников равны, то их площади относятся как основания"],
  228. ["теорема", 8, 0, ["равен", "треугольник", "уг", "площад", "относятся", "произведен", "заключающ"],
  229. """Если угол одного треугольника равен углу другого треугольника,
  230. то площади этих треугольников относятся как произведения сторон заключающих равные углы"""],
  231. ["теорема", 8, 0, ["отношение", "площад", "подоб", "треугольник", "квадрат", "коэффициент"],
  232. "Отношение площадей двух подобных треугольников равно квадрату коэффициента подобия"],
  233. ["теорема", 9, 0, ["касательн", "окружност", "перпендикуляр", "радиус", "точк", "отрез"],
  234. """Касательная к окружности перпендикулярна радиусу, проведённому в точку касания.
  235. Следствие: Отрезки касательных к окружности, проведённые из одной точки ,
  236. равны и составляют равные углы с прямой, проходящей через эту точку и центр окружности"""],
  237. ["теорема", 9, 0, ["вписанн", "угол", "половин", "дуг", "опирает", "полуокружност", "прямой"],
  238. """Вписанный угол измеряется половиной дуги,
  239. на которую он опирается. Вписанный угол, опирающийся на полуокружность – прямой"""],
  240. ["теорема", 9, 0, ["вписанн", "угл", "опира", "дуг"],
  241. "Вписанные углы, опирающиеся на одну и ту же дугу, равны"],
  242. ["теорема", 10, 0, ["произведен", "отрез", "хорд", "произведен", "пересекающ"],
  243. "Произведение отрезков одной из двух пересекающихся хорд равно произведению отрезков другой хорды"],
  244. ["теорема", 9, 0, ["угол", "кас", "хорд", "точк", "половин", "дуг", "заключ"],
  245. """Угол между касательной и хордой, проходящей через точку касания,
  246. измеряется половиной заключённой в нём дуги"""],
  247. ["теорема", 9, 0, ["квадрат", "касательн", "произведен", "отрез", "секущ"],
  248. "Квадрат касательной равен произведению отрезков секущей"],
  249. ["теорема", 10, 0, ["угол", "хорд", "полусумм", "дуг", "пересек", "заключ"],
  250. "Угол между пресекающимися хордами равен полусумме заключённых в них дуг"],
  251. ["теорема", 10, 0, ["угол", "полуразност", "дуг", "секущ", "заключ"],
  252. "Угол между секущими равен полуразности е заключённых в нём дуг"],
  253. ["теорема", 10, 0, ["угол", "касательн", "секущ", "полуразност", "дуг", "заключен"],
  254. "Угол между касательной и секущей равен полуразности заключённых в нём дуг"],
  255. ["теорема", 10, 0, ["угол", "касательн", "полуразност", "заключ", "дуг"],
  256. "Угол между касательными равен полуразности заключённых в нём дуг"],
  257. ["теорема", 10, 0,
  258. ["теорема", "Птолемея", "произведени", "диагонал", "вписанн", "четырёхугольник", "сумм",
  259. "противоположн", "сторон"],
  260. "Произведение диагоналей вписанного четырёхугольника равно сумме произведений противоположных сторон"],
  261. ["другое", 9, 0, ["треугольник", "вписать", "окружност", "люб"],
  262. "В любой треугольник можно вписать окружность "],
  263. ["другое", 9, 0, ["около", "люб", "треугольник", "описать", "окружност"],
  264. "Около любого треугольника можно описать окружность "],
  265. ["другое", 9, 0, ["описанн", "четырёхугольник", "сумм", "противоположн", "сторон", "равн"],
  266. "В любом описанном четырёхугольнике суммы противоположных сторон равны"],
  267. ["теорема", 9, 0, ["люб", "четырёхугольник", "сумм", "угл", "равн", "180"],
  268. "В любом вписанном четырёхугольнике сумма противоположных углов равна 180 градусов"],
  269. ["аксиома", 9, 0, ["около", "правильн", "многоугольник", "описать", "окружность", "люб"],
  270. "Около любого правильного многоугольника можно описать окружность, и притом только одну"],
  271. ["аксиома", 9, 0, ["правильн", "многоугольнк", "вписать", "окружност"],
  272. "В любой правильный многоугольник можно вписать окружность, и притом только одну"],
  273. ["другое", 9, 0, ["окружност", "вписанн", "правильн", "многоугольник", "касается", "сторон", "середин"],
  274. "Окружность, вписанная в правильный многоугольник, касается сторон многоугольника в их серединах"],
  275. ["теорема", 9, 0,
  276. ["центр", "окружност", "вписанн", "правильн", "многоугольник", "совпадает", "вписанн", "описанн"],
  277. """Центр окружности, вписанной в правильный многоугольник,
  278. совпадает с центром окружности, описанной вокруг этого же многоугольника"""],
  279. ["аксиома", 10, 0, ["аксиома", "а1", "плоскость", "определ", "точк", "прям", "лежащ"],
  280. """Любая плоскость определяется 3мя точками, не лежащими на данной прямой
  281. / прямой и не лежащей на ней точкой / двумя пересекающимися прямыми / двумя параллельными прямыми"""],
  282. ["аксиома", 10, 0, ["2", "точк", "прям", "лежат", "плоскост", "аксиома", "а2"],
  283. "Если 2 точки прямой лежат в одной плоскости, то все точки лежат в этой плоскости"],
  284. ["аксиома", 10, 0, ["плоскост", "пересек", "прям", "аксиома", "а3"],
  285. "Две плоскости пересекаются по прямой"],
  286. ["теорема", 10, 0, ["прям", "плоскость", "параллель", "пересек", "лемма"],
  287. "Если одна из двух параллельных прямых пересекает плоскость, то и другая прямая её пересекает"]]
  288.  
  289. # берём id из сообшения
  290. id_user = message['from'].id
  291.  
  292. # берём такст сообщения
  293. phrase = str(message.text)
  294.  
  295. # разбиваем фразу по пробемам при желании можно через запятую добавить другие символы
  296. phrase = phrase.split(' ')
  297.  
  298. # создание клавы как при команде старт
  299. keyboard = ReplyKeyboardMarkup()
  300.  
  301. # поиск в таблице по id класс человека (тут создание такста запроса)
  302. sql = "SELECT classes FROM database WHERE id=?"
  303.  
  304. # сам запрос
  305. cursor.execute(sql, [id_user])
  306.  
  307. # сохранение результатов запроса
  308. class_fetchone = cursor.fetchone()
  309.  
  310. # если класса по id нет (человека нет в базе)
  311. if class_fetchone is None:
  312.  
  313. # ждём пока 1 слово фразы человека будет числом
  314. # (пробует преобразовать в число и если это не цифры то получаем ошибку)
  315. try:
  316.  
  317. # если у нас тут возникае ошибка (1 слово не число),
  318. # то мы переходим к исключению, иначе смотрим что за класс он написал
  319. if (int(phrase[0]) == 7) or (int(phrase[0]) == 8) or (int(phrase[0]) == 9) or (int(phrase[0]) == 10) or (
  320. int(phrase[0]) == 11):
  321.  
  322. # если класс соответствует нашим запросам, то добавляем человеку в базу
  323. cursor.execute("INSERT INTO database VALUES ('%i', '%i')" % (id_user, int(phrase[0])))
  324.  
  325. # созраняем изменения в базе
  326. conn.commit()
  327.  
  328. # чисто для красоты пишем человеку
  329. await bot.send_message(message.chat.id, text="Запомнил")
  330. # добавляем кнопки в клаву
  331. kl_1 = KeyboardButton("аксиомы")
  332. kl_2 = KeyboardButton("теоремы")
  333. kl_3 = KeyboardButton("другое")
  334. keyboard.add(kl_1, kl_2, kl_3)
  335. # говорим человеку о возможностях бота
  336. await bot.send_message(message.chat.id,
  337. text="""Что вам надо?\n
  338. Вы можете выбрать кнопками и тогда вам отправится весь доступный вам материал
  339. или вы можите ввести вручную что вы ищите""",
  340. reply_markup=keyboard)
  341.  
  342. # что мы делаем если человк вписал не нужное нам число
  343. else:
  344.  
  345. # создание кнопок для клавы
  346. kl_7 = KeyboardButton('7 класс')
  347. kl_8 = KeyboardButton('8 класс')
  348. kl_9 = KeyboardButton('9 класс')
  349. kl_10 = KeyboardButton('10 класс')
  350. kl_11 = KeyboardButton('11 класс')
  351.  
  352. # добавление кнопок к клаве
  353. keyboard.add(kl_7, kl_8, kl_9, kl_10, kl_11)
  354.  
  355. # просим ввести в каком он классе
  356. await bot.send_message(message.chat.id, text="В каком вы классе? (7-11)", reply_markup=keyboard)
  357.  
  358. # если это не число, то возникает ошибка и в таком случае мы снова просим ввести в каком он классе
  359. except Exception:
  360.  
  361. # аналог команде старт
  362. kl_7 = KeyboardButton('7 класс')
  363. kl_8 = KeyboardButton('8 класс')
  364. kl_9 = KeyboardButton('9 класс')
  365. kl_10 = KeyboardButton('10 класс')
  366. kl_11 = KeyboardButton('11 класс')
  367. keyboard.add(kl_7, kl_8, kl_9, kl_10, kl_11)
  368. await bot.send_message(message.chat.id, text="В каком вы классе? (7-11)", reply_markup=keyboard)
  369.  
  370. # что мы делаем если человек есть в базе
  371. else:
  372.  
  373. # добавляем в клаву 3 кнопки предварительно создав их
  374. kl_1 = KeyboardButton("аксиомы")
  375. kl_2 = KeyboardButton("теоремы")
  376. kl_3 = KeyboardButton("другое")
  377. keyboard.add(kl_1, kl_2, kl_3)
  378.  
  379. # тк по 1 id может быть только 1 человек мы берём из списка только 1 значение (оно там и так 1)
  380. class_fetchone = class_fetchone[0]
  381.  
  382. # отправляем текст теорем/аксиом/другого
  383. # в зависимости от того что человек попросит
  384. if len(phrase) == 1:
  385. if phrase[0] == "аксиомы":
  386. for i in theorems:
  387. if i[0] == "аксиома" and i[1] <= class_fetchone:
  388. await bot.send_message(message.chat.id, text=i[4])
  389. elif phrase[0] == "теоремы":
  390. for i in theorems:
  391. if i[0] == "теорема" and i[1] <= class_fetchone:
  392. await bot.send_message(message.chat.id, text=i[4])
  393. elif phrase[0] == "другое":
  394. for i in theorems:
  395. if i[0] == "другое" and i[1] <= class_fetchone:
  396. await bot.send_message(message.chat.id, text=i[4])
  397.  
  398. # смотрим количество совпадений фразы и ключевых слов и записываем это в переменную
  399. for i in theorems:
  400. for q in phrase:
  401. for r in i[3]:
  402. if r in q:
  403. i[2] += 1
  404.  
  405. # убираем возможность узнать человеку темы из класса привосходящего его класс
  406. # (Например: так человек из 8 класса не может узнать аксиому из 10)
  407. for i in theorems:
  408. if i[1] > class_fetchone:
  409. i[2] = 0
  410.  
  411. # отправляем текст каждой теоремы где совпадениё больше 1
  412. for i in theorems:
  413. if i[2] >= 2:
  414. await bot.send_message(message.chat.id, text=i[4])
  415.  
  416.  
  417. if __name__ == '__main__':
  418. start_polling(dp, loop=loop, skip_updates=True)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement