Exemple #1
0
 def send(self, balance, bot=None):
     bot = bot or get_bot()
     if self.user and self.forward_message_id:
         message = bot.forward_message(chat_id=config.CHANNEL_NAME,
                                       from_chat_id=self.user,
                                       message_id=self.forward_message_id)
     else:
         if self.content.type == consts.CONTENT_PHOTO:
             message = bot.send_photo(config.CHANNEL_NAME,
                                      photo=self.content.file_id)
         elif self.content.type == consts.CONTENT_AUDIO:
             message = bot.send_audio(config.CHANNEL_NAME,
                                      audio=self.content.file_id)
         elif self.content.type == consts.CONTENT_VOICE:
             message = bot.send_voice(config.CHANNEL_NAME,
                                      voice=self.content.file_id)
         elif self.content.type == consts.CONTENT_VIDEO:
             message = bot.send_video(config.CHANNEL_NAME,
                                      video=self.content.file_id)
         elif self.content.type == consts.CONTENT_STICKER:
             message = bot.send_sticker(config.CHANNEL_NAME,
                                        sticker=self.content.file_id)
         else:
             message = bot.send_message(config.CHANNEL_NAME,
                                        text=self.content.text,
                                        parse_mode='Markdown')
     self.balance = balance
     self.message_id = message.message_id
     self.save()
     if self.user:
         send_message(bot, int(self.user), text='your message was posted')
Exemple #2
0
    def send(amount, bot=None):
        bot = bot or get_bot()
        name = 'like' if self.is_like else 'dislike'
        self.amount = amount
        self.save()
        if self.is_like:
            self.post.balance += amount
        else:
            self.post.balance -= amount
        if self.post.balance <= 0:
            self.post.is_deleted = True
        self.post.save()
        if self.user:
            send_message(bot,
                         int(self.user),
                         text='your {} accepted'.format(name))
        if self.post.user:
            send_message(bot,
                         int(self.post.user),
                         text='your post received {} for {}ETH'.format(
                             name, self.amount))


# TODO: what if delete return error, but db already changed
        if self.post.balance <= 0:
            bot.delete_message(chat_id=config.CHANNEL_NAME,
                               message_id=self.post.message_id)
            if self.post.user:
                send_message(bot,
                             int(self.post.user),
                             text='your post was deleted')
Exemple #3
0
def main(user_data, chat_id):
    user_data['scrp_info'] = []
    for lines in user_data['first_info']:
        ostad = re.search(r'\t{2}\(\(\((?P<ostad>.*$)', lines).group('ostad')
        dars = re.search(r'\t{3}(?P<dars>.*?)\t', lines).group('dars')
        lines = lines[0:lines.find('\t\t\t')]
        lines = list(filter(lambda x: x != '', lines.split('**')))
        p = r'(?P<first_comment>.*?)\s*(?P<day>چهارشنبه|سه شنبه|دوشنبه|يکشنبه|پنج شنبه|شنبه)\s*(?P<second_comment>.*?)\s*(?P<start>\d{2}\:\d{2})\s+\-\s+(?P<end>\d{2}\:\d{2})\s*(?P<last_comment>.*)'
        for line in lines:
            try:
                res = re.search(p, line)
                if res.group('day') == '' or res.group(
                        'start') == '' or res.group('end') == '':
                    raise ValueError
                user_data['scrp_info'].append(
                    res.group('day') + '\t' + res.group('start') + '\t' +
                    res.group('end') + '\t' + ' '.join([
                        res.group('first_comment'),
                        res.group('second_comment'),
                        res.group('last_comment')
                    ]) + '\t' + dars + '\t' + ostad)

            except Exception as e:
                logger.info(dars)
                logger.info(str(e.args))
                logger.info(str(user_data))

                bot = helpers.get_bot()
                bot.send_message(
                    chat_id=chat_id,
                    text='درس ' + dars + ' : \"' + line + ' ' + ostad + ' \"' +
                    'یه مشکلی داره نتونستم بیارم تو برنامه. اگه خواستی میتونی با '
                    'استفاده از (ویرایش برنامه) دستی یه بخش جدید به برنامه اضافه کنی',
                    reply_markup=markup)
                continue
    logger.info('110')
    del user_data['first_info']
    if 'info' not in user_data:
        user_data['info'] = user_data['scrp_info']
Exemple #4
0
def main(user_data, chat_id, from_scrp=False):
    mpl.interactive(False)
    days = []
    starts = []
    ends = []
    coms = []
    darss = []
    if from_scrp:
        data_of_time_table = user_data['scrp_info']
        del user_data['scrp_info']
    else:
        data_of_time_table = user_data['info']
    colors = ['pink', 'lightgreen', 'lightblue', 'crimson', 'salmon', 'yellow', 'silver', 'yellowgreen', 'y', 'tan',
              'orchid', 'c', 'aqua', 'deeppink']

    for line in data_of_time_table:
        data = line.split('\t')
        days.append(get_display(persian_reshaper.reshape(data[0])))
        starts.append(float(data[1].split(':')[0]) + float(data[1].split(':')[1]) / 60)
        ends.append(float(data[2].split(':')[0]) + float(data[2].split(':')[1]) / 60)
        if len(data) == 6:
            coms.append(get_display(persian_reshaper.reshape(data[3])))
        darss.append(get_display(persian_reshaper.reshape(data[4])))
    days2 = set(days)
    prop = fm.FontProperties(fname=os.path.dirname(os.path.abspath(__file__))+'/fonts/XP_ZibaBd.ttf')  # os.path.abspath('app/fonts/XP_ZibaBd.ttf'))
    dd = dict((ds(x), x) for x in days2)
    sorted_days = []
    for key in sorted(dd):
        sorted_days.append(dd[key])

    darss = list(set(darss))
    nl = dict((darss[x], x) for x in range(len(darss)))
    mn = min(starts)
    mx = max(ends)
    fig = plt.figure(figsize=(16, 9))
    gc.collect()
    for i, line in zip(range(len(days)), data_of_time_table):
        data = line.split('\t')
        this_start = float(data[1].split(':')[0]) + float(data[1].split(':')[1]) / 60
        this_end = float(data[2].split(':')[0]) + float(data[2].split(':')[1]) / 60
        temp3 = []
        if len(data[3]) > 200 * (this_end - this_start) / (mx - mn):  # 300
            for iji in range(int(len(data[3]) / (213 * (this_end - this_start) / (mx - mn))) + 1):  # 32
                temp3.append(data[3][iji * int(213 * (this_end - this_start) / (mx - mn)):int(213 * (
                            this_end - this_start) / (mx - mn)) * (iji + 1)])  # 32
            data[3] = '\n'.join(temp3)
        temp5 = []
        if len(data[5]) > (213 * (this_end - this_start) / (mx - mn)):  # 32
            for ijl in range(int(len(data[5]) / (226 * (this_end - this_start) / (mx - mn))) + 1):  # 34
                temp5.append(data[5][ijl * int(226 * (this_end - this_start) / (mx - mn)):int(226 * (this_end - this_start) / (mx - mn)) * (ijl + 1)])  # 34
            data[5] = '\n'.join(temp5)

        plt.fill_between([starts[i] + 0.05, ends[i] - 0.05],
                         [sorted_days.index(days[i]) + 0.53, sorted_days.index(days[i]) + 0.53],
                         [sorted_days.index(days[i]) + 1.3, sorted_days.index(days[i]) + 1.43],
                         color=colors[nl[get_display(persian_reshaper.reshape(data[4]))]], edgecolor='red', linewidth=5)

        temp4 = []
        if len(data[4]) > (150 * (this_end - this_start) / (mx - mn)):  # 24
            for ijk in range(int(len(data[4]) / (180 * (this_end - this_start) / (mx - mn))) + 1):  # 27
                temp4.append(data[4][ijk * int(180 * (this_end - this_start) / (mx - mn)):int(180 * (this_end - this_start) / (mx - mn)) * (ijk + 1)])  # 27
            data[4] = '\n'.join(temp4)

        plt.text(starts[i] + 0.25, sorted_days.index(days[i]) + 0.55,
                 '{0}:{1:0>2}'.format(int(data[1].split(':')[0]), int(data[1].split(':')[1])), va='top', fontsize=7)
        plt.text(ends[i] - 0.05, sorted_days.index(days[i]) + 0.55,
                 '{0}:{1:0>2}'.format(int(data[2].split(':')[0]), int(data[2].split(':')[1])), va='top', fontsize=7)
        plt.text((starts[i] + ends[i]) * 0.5,
                 (sorted_days.index(days[i]) + 0.5 + sorted_days.index(days[i]) + 1.4) * 0.5 - 0.2,
                 get_display(persian_reshaper.reshape(data[4])), ha='center', va='center', fontproperties=prop,
                 fontsize=13 - 1.5 * len(temp4))

        plt.text((starts[i] + ends[i]) * 0.5,
                 (sorted_days.index(days[i]) + sorted_days.index(days[i]) + 2.05) * 0.5,
                 get_display(persian_reshaper.reshape(data[3])), ha='center', va='center', fontsize=9 - len(temp3))
        plt.text((starts[i] + ends[i]) * 0.5,
                 (sorted_days.index(days[i]) + sorted_days.index(days[i]) + 2) * 0.5 + 0.23,
                 get_display(persian_reshaper.reshape(data[5])), ha='center', va='center', fontsize=8 - len(temp5))
    gc.collect()
    examsb = []
    for line in user_data['exams']:
        pattern = r'^.*(?P<y>\d{4})\/(?P<m>\d{2})\/(?P<d>\d{2}).*از ((?P<h>\d{2})\:\d{2}) تا.*$'
        examsb.append(re.search(pattern, line))

    exams = dict(
        (int(k.group('h')) / 24 + int(k.group('d')) + (int(k.group('m')) - 1) * 31 + (int(k.group('y')) - 1) * 31 * 12,
         list()) for k in examsb
        if k is not None)

    [exams[int(k.group('h')) / 24 + int(k.group('d')) + (int(k.group('m')) - 1) * 31 + (
            int(k.group('y')) - 1) * 31 * 12].append(k.group()) for k
     in examsb if k is not None]

    mtermsb = []
    for line in user_data['midterm']:
        pattern = r'^.*(?P<y>\d{4})\/(?P<m>\d{1,2})\/(?P<d>\d{1,2}).*$'
        mtermsb.append(re.search(pattern, line))

    mterms = dict(
        (int(k.group('d')) + (int(k.group('m')) - 1) * 31 + (int(k.group('y')) - 1) * 31 * 12,
         list()) for k in mtermsb
        if k is not None)

    [mterms[int(k.group('d')) + (int(k.group('m')) - 1) * 31 + (
            int(k.group('y')) - 1) * 31 * 12].append(k.group()) for k
     in mtermsb if k is not None]

    jj = 0
    exx = mx
    plt.text(exx + 0.5, (1 + 5.5 * len(sorted_days)) * 0.2, get_display(persian_reshaper.reshape(':پایانترم')),
             fontsize=13)

    for key in sorted(exams):
        for j in exams[key]:
            if jj == 8:
                exx -= 4
                jj = 0
            plt.text(exx, (jj + 1.5 + 5.5 * len(sorted_days)) * 0.2, get_display(persian_reshaper.reshape(j)),
                     fontsize=11)
            jj += 1

    if from_scrp:
        mterms = []
    if not from_scrp:
        if 'midterm' in user_data:
            plt.text(mn - 0.05, (1 + 5.5 * len(sorted_days)) * 0.2, get_display(persian_reshaper.reshape('میانترم:')),
                     fontsize=11)
    jj2 = 0
    exx = mn + 3
    for key in sorted(mterms):
        for j in mterms[key]:
            if jj2 == 8:
                exx += 4
                jj2 = 0
            plt.text(exx, (jj2 + 1.5 + 5.5 * len(sorted_days)) * 0.2, get_display(persian_reshaper.reshape(j)),
                     fontsize=11)
            jj2 += 1

    ax = fig.add_subplot(111)

    ax.set_ylim(len(days2) + 2 / 4, 0.4)
    ax.set_xlim(mx, mn)
    ax.set_yticks(range(1, len(days2) + 1))
    ax.set_yticklabels(sorted_days)
    ax.xaxis.grid()
    ax2 = ax.twiny().twinx()
    ax2.set_ylim(ax.get_ylim())
    ax2.set_xlim(ax.get_xlim())
    ax2.set_yticks(ax.get_yticks())
    ax2.set_yticklabels(sorted_days, fontsize=13)
    plt.subplots_adjust(left=0.06, bottom=0.26, right=0.95, top=0.96, wspace=0.2, hspace=0.2)

    bot = helpers.get_bot()

    sent_message = bot.send_message(chat_id=chat_id, text='داره میاد!!')
    bot.send_chat_action(chat_id=chat_id, action=telegram.ChatAction.UPLOAD_DOCUMENT)
    
    
    plt.savefig('{0}.png'.format(user_data['username'] + 'barn'), dpi=120)
    
    time.sleep(0.5)

    plt.savefig('{0}.pdf'.format(user_data['username'] + 'barn'))
    
    
    plt.cla()
    plt.clf()
    ax.cla()
    ax2.cla()
    gc.collect()

    plt.close('all')
    time.sleep(0.5)
    with open('{0}.png'.format(user_data['username'] + 'barn'), 'rb') as file_to_send:
        bot.send_document(chat_id=chat_id, document=file_to_send)

    bot.delete_message(chat_id=chat_id, message_id=sent_message.message_id)
    
    bot.send_chat_action(chat_id=chat_id, action=telegram.ChatAction.UPLOAD_DOCUMENT)
    time.sleep(1)
    with open('{0}.pdf'.format(user_data['username'] + 'barn'), 'rb') as file_to_send:
        bot.send_document(chat_id=chat_id, document=file_to_send, reply_markup=markup)
    
    # plt.show()
    time.sleep(2)
    os.remove('{0}.png'.format(user_data['username'] + 'barn'))
    os.remove('{0}.pdf'.format(user_data['username'] + 'barn'))
Exemple #5
0
def main(user_data, chat_id, proxy, protocol='s'):
    markup = helpers.markup
    score_markup = helpers.score_markup

    try:
        bot = helpers.get_bot()

        retry_strategy = Retry(
            total=5,
            status_forcelist=[429, 500, 502, 503, 504],
            method_whitelist=[
                "HEAD", "GET", "PUT", "DELETE", "OPTIONS", "TRACE", "POST"
            ],
            backoff_factor=1,
        )
        adapter = HTTPAdapter(max_retries=retry_strategy)
        http = requests.Session()
        http.mount("https://", adapter)
        http.mount("http://", adapter)

        data = {
            'Command': 'LOGIN',
            'username': user_data['username'],
            'password': user_data['password'],
            #'SSMUsername_txt': user_data['username'],
            #'SSMPassword_txt': user_data['password'],
        }
        sent_message = bot.send_message(chat_id=chat_id,
                                        text='وارد شدن با یوزرنیم و پسورد ...')
        sent_message = sent_message.message_id

        login_request = http.post(
            'http' + protocol +
            '://sada.guilan.ac.ir/SubSystem/Edari/PRelate/Site/SignIn.aspx',
            data=data,
            timeout=7,
            proxies=proxy)
        dashboard_param_search = re.search(
            r'\(\"http' + protocol +
            r'\:\/\/sada\.guilan\.ac\.ir\/Dashboard\.aspx\?param\=(?P<param>.*?)\"\)',
            login_request.text)

        if dashboard_param_search is None:
            if login_request.text.find(
                    'رمز عبور شما اشتباه ميباشد'
            ) >= 0 or login_request.text.find(
                    'نام کاربري يا کلمه عبور شما اشتباه ميباشد') >= 0:
                raise MyError('incorrect password_or_username',
                              'iup')  # incorrect username password
            else:
                raise Exception(
                    'dashbord_param or incorrect_password_or_username_message not found',
                    'dpnf')  # dashbord param not found

        dashboard_param = dashboard_param_search.group('param')

        bot.edit_message_text(chat_id=chat_id,
                              message_id=sent_message,
                              text='رفتن به قسمت فرم تثبیت انتخاب واحد ...')

        report_request = http.post('https://sada.guilan.ac.ir/Dashboard.aspx',
                                   params={'param': dashboard_param},
                                   data={'Command': 'GET_TAB_INFO:020203'},
                                   timeout=7,
                                   proxies=proxy)

        report_param_search = re.search(
            r'\/Subsystem\/Amozesh\/Sabtenam\/Tasbir\/Report\/Report\.aspx\?param\=(?P<param>.*)',
            report_request.text)
        if report_param_search is not None:
            raise MyError('evalList not found', 'not_eval')  # evalList

        else:
            if report_request.text.find('بدهکار') >= 0:
                raise MyError('report problem because of debt', 'd')  # debt
            elif 'eval' in report_request.text.lower():

                evalList_param_search = re.search(
                    r'\/SubSystem\/Amozesh\/Eval\/List\/EvalList\.aspx\?param\=(?P<param>.*)',
                    report_request.text)
                evalList_param = evalList_param_search.group('param')

                evalList_page = http.get(
                    'http' + protocol +
                    '://sada.guilan.ac.ir/SubSystem/Amozesh/Eval/List/EvalList.aspx',
                    params={'param': evalList_param},
                    timeout=7,
                    proxies=proxy)

                bot.edit_message_text(chat_id=chat_id,
                                      message_id=sent_message,
                                      text='استخراج لیست ارزشیابی‌ها ...')

                soup = BeautifulSoup(evalList_page.text, 'lxml')
                eval_list = soup.find_all('table')[-1].find_all('tr')
                while eval_list:
                    eval_elem = eval_list.pop()

                    Command_data = 'AnswerSubject♥' + eval_elem.find_all(
                        'td')[0].text + '♥' + eval_elem.find_all('td')[3].text

                    eval_request = http.post(
                        'http' + protocol +
                        '://sada.guilan.ac.ir/SubSystem/Amozesh/Eval/List/EvalList.aspx',
                        params={'param': evalList_param},
                        data={'Command': Command_data},
                        timeout=7,
                        proxies=proxy)
                    eval_param = eval_request.text
                    eval_page = http.get(
                        'http' + protocol +
                        '://sada.guilan.ac.ir/SubSystem/Amozesh/Eval/Answer/Subject/EvalAnswerSubject.aspx',
                        params={'param': eval_param},
                        timeout=7,
                        proxies=proxy)

                    bot.edit_message_text(chat_id=chat_id,
                                          message_id=sent_message,
                                          text='استخراج لیست استادها ...')

                    inner_soup = BeautifulSoup(eval_page.text, 'lxml')
                    professor_list = inner_soup.find_all('table')[-1].find_all(
                        'tr')

                    while professor_list:
                        professor_elem = professor_list[-1]
                        Command_data = 'Answer♥' + professor_elem.find_all('td')[0].text + '♥' + professor_elem.find_all('td')[1].text + '♥' + professor_elem.find_all('td')[2].text +\
                                        '♥' + professor_elem.find_all('td')[3].text + '♥' + professor_elem.find_all('td')[4].text + '♥' + professor_elem.find_all('td')[7].text

                        professor_request = http.post(
                            'http' + protocol +
                            '://sada.guilan.ac.ir/SubSystem/Amozesh/Eval/Answer/Subject/EvalAnswerSubject.aspx',
                            params={'param': eval_param},
                            data={'Command': Command_data},
                            timeout=7,
                            proxies=proxy)
                        questions_param = professor_request.text
                        questions_page = http.get(
                            'http' + protocol +
                            '://sada.guilan.ac.ir/SubSystem/Amozesh/Eval/Answer/ListItems.aspx',
                            params={'param': questions_param},
                            timeout=7,
                            proxies=proxy)
                        bot.send_message(
                            chat_id=chat_id,
                            text=professor_elem.find_all('td')[7].text +
                            '    ' + professor_elem.find_all('td')[8].text +
                            '\n نمره رو بزن:',
                            reply_markup=score_markup)
                        timer = 0
                        while timer <= 20:
                            if user_data['nomre'] == -1:
                                if timer == 20:
                                    bot.send_message(
                                        chat_id=chat_id,
                                        text='خب تایمت تموم شد! بای بای!',
                                        reply_markup=markup)
                                    return -1
                                sleep(1.1)
                                timer += 1
                            else:
                                break
                        score = user_data['nomre']
                        qs_soup = BeautifulSoup(questions_page.text, 'lxml')
                        qs = qs_soup.find_all('table')[-1].find_all('tr')
                        x = 'Insert:??*'
                        post_data = {}
                        one_random_q = randint(0, len(qs) - 1)
                        for q_i, q in enumerate(qs):
                            nomre = score
                            if len(q.find_all('td')) > 3:
                                x += q.find_all('td')[3].text
                            x += '?'
                            if q_i == one_random_q:
                                if nomre == 8:
                                    nomre -= 1
                                elif nomre == 0:
                                    nomre += 1
                                else:
                                    nomre = nomre + [1, -1][randint(0, 1)]
                            for inp_el in q.find_all('input'):
                                # nomre = 1 # means 19
                                if inp_el['id'][:3] == 'rb' + str(nomre):
                                    post_data[inp_el['id']] = 'true'
                                    x += inp_el['value']
                            x += '?'
                            x += q.find_all('td')[10].text
                            x += '*'
                        x += ':'
                        post_data['Command'] = x
                        logger.info('EVALLLLLLLL  ' + str(post_data))
                        professor_eval_request = http.post(
                            'http' + protocol +
                            '://sada.guilan.ac.ir/SubSystem/Amozesh/Eval/Answer/ListItems.aspx',
                            params={'param': questions_param},
                            data=post_data,
                            timeout=7,
                            proxies=proxy)
                        if 'ok' in professor_eval_request.text.lower():
                            professor_list.pop()
                        else:
                            bot.send_message(
                                chat_id=chat_id,
                                text='عه فکر کنم نمره ثبت نشد. دوباره !!')
                        user_data['nomre'] = -1
                bot.send_message(chat_id=chat_id,
                                 text='خب تموم شششددددد !!!!!',
                                 reply_markup=markup)
                del soup, qs_soup, inner_soup

    except MyError as e:
        logger.info(
            str(user_data['username'] + '  ||  ' + user_data['password']))
        logger.warning(str(e.args))
        error_code = e.args[-1]
        if error_code == 'iup':
            text_message = 'رمز عبور یا نام کاربری اشتباه'
            markup = helpers.markup
        elif error_code == 'd':
            text_message = 'نیاوردن فرم تثبیت انتخاب واحد بدلیل بدهکار بودن دانشجو'
            markup = helpers.markup
        elif error_code == 'not_eval':
            text_message = 'مثل اینکه فرم ارزیابی پیدا نشده.'
            markup = helpers.markup
        bot.send_message(chat_id=chat_id,
                         text='خب به ارور رسیدیم! : ' + text_message,
                         reply_markup=markup)

    except ConnectionError as e:
        logger.info(
            str(user_data['username'] + '  ||  ' + user_data['password']))
        logger.warning(str(e.args))
        logger.warning('CONECTION PROBLEM (WITH PROXY or maybe WITHOUT PROXY)')
        bot.send_message(
            chat_id=chat_id,
            text=
            'مشکل در ارتباط با سایت!!! شاید سایت خراب باشه یا شاید بازم سایت رو یه کاری کردن فقط با آیپی ایران بشه رفت و سرور این ربات هم خارج از ایرانه.'
            + ' اگه پراکسی ساکس۴ ایران داری ممنون میشم واسه این آیدی بفرستیش' +
            ': @ArmanG98\n' +
            'میتونی دوباره تست کنی. اگه سایت اوکی بود و بازم همین' +
            ' ارور رو دیدی چند ساعت دیگه دوباره امتحان کن. ',
            reply_markup=helpers.markup)
        from config import CHAT_ID_OF_ADMIN
        bot.send_message(chat_id=CHAT_ID_OF_ADMIN,
                         text='',
                         reply_markup=helpers.markup)

    except Exception as e:
        logger.info(
            str(user_data['username'] + '  ||  ' + user_data['password']))
        logger.warning(str(e.args))
        markup = helpers.markup
        bot.send_message(chat_id=chat_id,
                         text='خب به ارور عجیبی برخوردیم!',
                         reply_markup=markup)
Exemple #6
0
def main(user_data,
         chat_id,
         proxy,
         protocol='s',
         way='report',
         prev_term=False,
         number_of_term=-1):
    try:
        bot = helpers.get_bot()
        scrapper = ScrapperUsingRequest(protocol=protocol, proxy=proxy)

        sent_message = bot.send_message(chat_id=chat_id,
                                        text='وارد شدن با یوزرنیم و پسورد ...')
        sent_message = sent_message.message_id

        # dash_param = scrapper.login(user_data['username'], user_data['password'])
        dashboard = scrapper.login(user_data['username'],
                                   user_data['password'])
        dashboard_access_token = dashboard['accessToken']
        if way == 'eval':
            from time import sleep
            score_markup = helpers.score_markup
            bot.edit_message_text(chat_id=chat_id,
                                  message_id=sent_message,
                                  text='استخراج لیست ارزشیابی‌ها ...')
            eval_list_url = dashboard['linkInfo']['url']
            if not 'eval' in eval_list_url.lower():
                raise MyError('مثل اینکه فرم ارزیابی پیدا نشده.', 'not_eval')
            eval_list, evalList_param = scrapper.get_eval_list(eval_list_url)
            while eval_list:
                eval_elem = eval_list.pop()
                bot.edit_message_text(chat_id=chat_id,
                                      message_id=sent_message,
                                      text='استخراج لیست استادها ...')
                professor_list, eval_param = scrapper.get_professor_list(
                    eval_elem, evalList_param)
                while professor_list:
                    professor_elem = professor_list[-1]
                    qs, questions_param = scrapper.get_questions(
                        professor_elem, eval_param)
                    bot.send_message(
                        chat_id=chat_id,
                        text=professor_elem.find_all('td')[7].text + '    ' +
                        professor_elem.find_all('td')[8].text +
                        '\n نمره رو بزن:',
                        reply_markup=score_markup)
                    timer = 0
                    while timer <= 20:
                        if user_data['nomre'] == -1:
                            if timer == 20:
                                bot.send_message(
                                    chat_id=chat_id,
                                    text='خب تایمت تموم شد! بای بای!',
                                    reply_markup=markup)
                                return -1
                            sleep(1.1)
                            timer += 1
                        else:
                            break
                    score = user_data['nomre']
                    answer_result = scrapper.answer_qs_professor(
                        qs, score, questions_param)
                    if answer_result:
                        professor_list.pop()
                    else:
                        bot.send_message(
                            chat_id=chat_id,
                            text='عه فکر کنم نمره ثبت نشد. دوباره !!')
                    user_data['nomre'] = -1
            bot.send_message(chat_id=chat_id,
                             text='خب تموم شششددددد !!!!!',
                             reply_markup=markup)
            return 11

        elif way == 'report':
            bot.edit_message_text(chat_id=chat_id,
                                  message_id=sent_message,
                                  text='گرفتن فرم تثبیت انتخاب واحد ...')

            report_page = scrapper.get_report(dashboard_access_token)

            bot.edit_message_text(chat_id=chat_id,
                                  message_id=sent_message,
                                  text='استخراج اطلاعات از سایت ...')

            infos = scrapper.get_infos_from_report_page(report_page.text)
        elif way == 'workbook':
            bot.edit_message_text(chat_id=chat_id,
                                  message_id=sent_message,
                                  text='رفتن به قسمت کارنامه ترمی ...')

            workbook_param = scrapper.get_workbook(dashboard_access_token)

            bot.edit_message_text(chat_id=chat_id,
                                  message_id=sent_message,
                                  text='گرفتن فرم انتخاب واحد ترم ' +
                                  ('موردنظر' if prev_term else 'آخر') + ' ...')
            if prev_term and number_of_term == -1:
                from telegram import ReplyKeyboardMarkup
                terms_keyboard = scrapper.get_term(workbook_param, prev_term,
                                                   number_of_term)
                terms_markup = ReplyKeyboardMarkup(terms_keyboard,
                                                   one_time_keyboard=True)
                bot.send_message(chat_id=chat_id,
                                 text='برنامه کدوم ترم:؟',
                                 reply_markup=terms_markup)
                return 11
            term_page = scrapper.get_term(workbook_param, prev_term,
                                          number_of_term)

            bot.edit_message_text(chat_id=chat_id,
                                  message_id=sent_message,
                                  text='استخراج اطلاعات از سایت ...')
            infos = scrapper.get_infos_from_term_page(term_page.text)

        user_data['first_info'] = infos['tabel']
        user_data['midterm'] = infos['midterm']
        user_data['exams'] = infos['exams']

        bot.edit_message_text(chat_id=chat_id,
                              message_id=sent_message,
                              text='پردازش روی اطلاعات بدست اومده ...')
        text_process.main(user_data, chat_id)
        gc.collect()
        bot.edit_message_text(chat_id=chat_id,
                              message_id=sent_message,
                              text='ساختن تصویر برنامه ...')
        helpers.ProcessManager.run_join(target=time_table_file.main,
                                        args=(user_data, chat_id, True))

    except MyError as e:
        logger.info(
            str(user_data['username'] + '  ||  ' + user_data['password']))
        logger.warning(str(e.args))
        error_code = e.args[-1]
        if error_code == 'fs':
            text_message = e.args[0]
        elif error_code == 'rpne':
            text_message = e.args[0]
        elif error_code == 'not_eval':
            text_message = e.args[0]
        # elif error_code == 'iup':
        #     text_message = 'رمز عبور یا نام کاربری اشتباه'
        #     markup = helpers.markup
        # elif error_code == 'empty':
        #     text_message = 'جدول این ترم خالیه شاید تو ترم تابستون باشی و واحد نداشته باشی' + '\nمیتونی واسه ترمهای قبل رو بگیری'
        #     markup = helpers.markup
        # elif error_code == 'd':
        #     text_message = 'نیاوردن فرم تثبیت انتخاب واحد بدلیل بدهکار بودن دانشجو' + '\n'
        #     text_message += 'چون فرم تثبیت کار نکرده از یه راه دیگه میشه رفت الان یه دکمه دیگه اضافه کردم واست اونو میتونی امتحان کنی. منتها امتحانا رو نمیتونم واست لیست کنم.'

        #     reply_keyboard = [x.copy() for x in helpers.reply_keyboard]
        #     reply_keyboard[1].append('👈گرفتن برنامه از یه راه دیگه واسه دانشجوهایی که بدهی دارن')
        #     from telegram import ReplyKeyboardMarkup
        #     markup = ReplyKeyboardMarkup(reply_keyboard, one_time_keyboard=True)
        elif error_code == 'eval':
            text_message = e.args[0] + '\n'
            text_message += 'اگه حال نداری همه‌ی سوالای ارزشیابی رو جواب بدی میتونی از دکمه پیچوندن فرم ارزیابی استفاده کنی!'
        bot.send_message(chat_id=chat_id,
                         text='خب به ارور رسیدیم! : ' + text_message,
                         reply_markup=markup)

    except ConnectionError as e:
        logger.info(
            str(user_data['username'] + '  ||  ' + user_data['password']))
        logger.warning(str(e.args))
        logger.warning('CONECTION PROBLEM (WITH PROXY or maybe WITHOUT PROXY)')
        bot.send_message(
            chat_id=chat_id,
            text=
            'مشکل در ارتباط با سایت!!! شاید سایت خراب باشه یا شاید بازم سایت رو یه کاری کردن فقط با آیپی ایران بشه رفت و سرور این ربات هم خارج از ایرانه.'
            + ' اگه پراکسی ساکس۴ ایران داری ممنون میشم واسه این آیدی بفرستیش' +
            ': @ArmanG98\n' +
            'میتونی دوباره تست کنی. اگه سایت اوکی بود و بازم همین' +
            ' ارور رو دیدی چند ساعت دیگه دوباره امتحان کن. ',
            reply_markup=helpers.markup)
        from config import CHAT_ID_OF_ADMIN
        bot.send_message(chat_id=CHAT_ID_OF_ADMIN,
                         text='hi admin! fix connection problem please!',
                         reply_markup=helpers.markup)

    except Exception as e:
        logger.info(
            str(user_data['username'] + '  ||  ' + user_data['password']))
        logger.warning(str(e.args))
        traceback.print_exc()
        bot.send_message(chat_id=chat_id,
                         text='خب به ارور عجیبی برخوردیم!',
                         reply_markup=helpers.markup)