mirror of
https://github.com/house-of-vanity/fesmoo_perdoliq.git
synced 2025-07-06 21:54:07 +00:00
Added dryrun mode. Also tg bot key has been moved to tg_settings file
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,5 +1,6 @@
|
|||||||
# configs
|
# configs
|
||||||
creds.ini
|
creds.ini
|
||||||
|
tg_settings.py
|
||||||
|
|
||||||
# Byte-compiled / optimized / DLL files
|
# Byte-compiled / optimized / DLL files
|
||||||
__pycache__/
|
__pycache__/
|
||||||
|
10
baraban.py
10
baraban.py
@ -10,7 +10,7 @@ import logging
|
|||||||
import telegram
|
import telegram
|
||||||
from telegram.error import NetworkError, Unauthorized
|
from telegram.error import NetworkError, Unauthorized
|
||||||
from time import sleep
|
from time import sleep
|
||||||
from main import Perdoliq
|
import tg_settings
|
||||||
|
|
||||||
update_id = None
|
update_id = None
|
||||||
|
|
||||||
@ -19,7 +19,12 @@ def main():
|
|||||||
"""Run the bot."""
|
"""Run the bot."""
|
||||||
global update_id
|
global update_id
|
||||||
# Telegram Bot Authorization Token
|
# Telegram Bot Authorization Token
|
||||||
TOKEN = os.environ["TG_TOKEN"]
|
TOKEN = tg_settings.TG_TOKEN
|
||||||
|
try:
|
||||||
|
if os.environ["DRYRUN"]:
|
||||||
|
from dryrun import Perdoliq
|
||||||
|
except:
|
||||||
|
from main import Perdoliq
|
||||||
bot = telegram.Bot(TOKEN)
|
bot = telegram.Bot(TOKEN)
|
||||||
|
|
||||||
# get the first pending update_id,
|
# get the first pending update_id,
|
||||||
@ -112,6 +117,7 @@ def echo(bot):
|
|||||||
return False
|
return False
|
||||||
msg = "Here is an available tests:\n``` "
|
msg = "Here is an available tests:\n``` "
|
||||||
i = 0
|
i = 0
|
||||||
|
print(tests)
|
||||||
for subj in tests:
|
for subj in tests:
|
||||||
msg = msg + (" [%s] %s\n" % (i, subj))
|
msg = msg + (" [%s] %s\n" % (i, subj))
|
||||||
i += 1
|
i += 1
|
||||||
|
132
dryrun.py
Normal file
132
dryrun.py
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
import requests
|
||||||
|
import settings
|
||||||
|
import logging
|
||||||
|
import re
|
||||||
|
from bs4 import BeautifulSoup
|
||||||
|
from random import randint
|
||||||
|
import time
|
||||||
|
|
||||||
|
logging.basicConfig(level=logging.INFO)
|
||||||
|
|
||||||
|
|
||||||
|
class Perdoliq:
|
||||||
|
def __init__(self, username, password):
|
||||||
|
self.password = password
|
||||||
|
self.username = username
|
||||||
|
self.SessionId = ''
|
||||||
|
self.name = ''
|
||||||
|
self.subjects = {}
|
||||||
|
|
||||||
|
# make auth
|
||||||
|
def auth(self):
|
||||||
|
self.SessionId = '** DRY_RUN_ASP.NET_SessionId **'
|
||||||
|
return self.SessionId
|
||||||
|
|
||||||
|
# update and return list of subjs and tests
|
||||||
|
def get_tests(self):
|
||||||
|
self.subjects = {
|
||||||
|
'Аналитическая химия': [
|
||||||
|
'броматометрическое титрование',
|
||||||
|
'Качественный анализ. Теоретические основы. Итоговый',
|
||||||
|
'Химический количественный анализ. Итоговый', 'Йодометрия',
|
||||||
|
'редоксиметрия. нитритометрия',
|
||||||
|
'Количественный анализ. Протолитометрия.'
|
||||||
|
],
|
||||||
|
'Безопасность жизнедеятельности, медицина катастроф': [
|
||||||
|
'Мобилизационная подготовка здравоохранения',
|
||||||
|
'Медицина катастроф', 'Гражданская оборона'
|
||||||
|
],
|
||||||
|
'Биологическая химия': [
|
||||||
|
'Химия белков', 'Ферменты', 'Витамины',
|
||||||
|
'Нуклеиновые кислоты и матричные биосинтезы',
|
||||||
|
'Обмен углеводов', 'Энергетический обмен'
|
||||||
|
],
|
||||||
|
'Дисциплины по выбору Ф-04-1':
|
||||||
|
['физико-химические методы анализа'],
|
||||||
|
'Иностранный язык': [
|
||||||
|
'лексико-грамматический 9', 'Лексико-грамматический 8',
|
||||||
|
'лексико-грамматический 10', 'лексико-грамматический 3а'
|
||||||
|
],
|
||||||
|
'Органическая химия': [
|
||||||
|
'Аминокислоты', 'Углеводы',
|
||||||
|
'Карбоновые кислоты, гетерофункуциональные соединения',
|
||||||
|
'Омыляемые липиды', 'Неомыляемые липиды',
|
||||||
|
'Гетероциклические соединения'
|
||||||
|
],
|
||||||
|
'Патология': [
|
||||||
|
'Аллергия', 'Патология системы иммунобиологического надзора',
|
||||||
|
'Нозология', 'Патология белкового обмена',
|
||||||
|
'Патология обмена жиров', 'Патология углеводного обмена',
|
||||||
|
'Патология водного и ионного обменов. Нарушение КОС.',
|
||||||
|
'ЛИХОРАДКА', 'Кислородное голодание',
|
||||||
|
'Патофизиология периферического кровобращения. Воспаление.'
|
||||||
|
],
|
||||||
|
'Первая доврачебная помощь': ['Первая доврачебная помощь'],
|
||||||
|
'Физическая культура': [
|
||||||
|
'Методы контроля за функциональным и физическим состоянием организма человека'
|
||||||
|
],
|
||||||
|
'Философия': [
|
||||||
|
'Онтология. Гносеология', 'Западная философия 19-20вв-2',
|
||||||
|
'Западная философия 19-20вв - 3', 'Онтология',
|
||||||
|
'Научное познание - 2', 'Западная философия 19-20вв',
|
||||||
|
'Философия истории', 'Философия человека - 1',
|
||||||
|
'Философия человека - 2', 'Бытие и сознание',
|
||||||
|
'Социальная философия - 1', 'Научное познание',
|
||||||
|
'Философия человека', 'Онтология - 2',
|
||||||
|
'Философия общества и глобальные проблемы человечества',
|
||||||
|
'Русская философия'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
return self.subjects
|
||||||
|
|
||||||
|
def start_test(self, pred, test):
|
||||||
|
|
||||||
|
return 30
|
||||||
|
|
||||||
|
# predict answers for any question
|
||||||
|
def predict(self, q_number):
|
||||||
|
|
||||||
|
return ['2']
|
||||||
|
|
||||||
|
# mark answers into requested question
|
||||||
|
def answer(self, q_number, answers):
|
||||||
|
return 0
|
||||||
|
|
||||||
|
# commit test
|
||||||
|
def finish_test(self):
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def resolve(self, subj, test, accuracy, is_delayed=False):
|
||||||
|
# renew auth
|
||||||
|
self.auth()
|
||||||
|
# get count of questions
|
||||||
|
q_count = self.start_test(subj, test)
|
||||||
|
|
||||||
|
def sleep_rand():
|
||||||
|
delay = randint(20, 40)
|
||||||
|
logging.info("Going to wait %s sec for this question." % delay)
|
||||||
|
time.sleep(delay)
|
||||||
|
|
||||||
|
accuracy = int(accuracy)
|
||||||
|
# applying accuracy here. trying to make resulting
|
||||||
|
# accuracy NO LESSthan requested.
|
||||||
|
spoil_count = int(q_count - q_count * (accuracy / 100))
|
||||||
|
if int(spoil_count / q_count * (-100) + 100) < accuracy:
|
||||||
|
spoil_count -= 1
|
||||||
|
# skip random `spoil_count` questions.
|
||||||
|
# Choose questions which going to be skipped
|
||||||
|
skip_this = []
|
||||||
|
for i in range(0, spoil_count):
|
||||||
|
skip_this.append(randint(1, q_count + 1))
|
||||||
|
|
||||||
|
# start resolve test
|
||||||
|
for i in range(1, q_count + 1):
|
||||||
|
if is_delayed == True:
|
||||||
|
sleep_rand()
|
||||||
|
if i not in skip_this:
|
||||||
|
prediction = self.predict(i)
|
||||||
|
self.answer(i, prediction)
|
||||||
|
|
||||||
|
# make autocommit
|
||||||
|
if is_delayed == True:
|
||||||
|
self.finish_test()
|
8
reqs.txt
8
reqs.txt
@ -1,5 +1,7 @@
|
|||||||
python3
|
# python3 only
|
||||||
|
pip install requests
|
||||||
|
|
||||||
py -m pip install requests
|
pip install beautifulsoup4
|
||||||
|
|
||||||
|
pip install python-telegram-bot
|
||||||
|
|
||||||
py -m pip install beautifulsoup4
|
|
1
tg_settings.py.example
Normal file
1
tg_settings.py.example
Normal file
@ -0,0 +1 @@
|
|||||||
|
TG_TOKEN = '4712707:329GqTj222i8unS23367sXqeMsyE'
|
Reference in New Issue
Block a user