def wiki_summary(msg, no=2):
    """ This function will reply the summary of the given text"""

    # print("wiki_summary")
    got_error = 'no data available'
    try:
        import wikipediaapi
    except Exception as e:
        logger.info(e)
        return got_error

    key_msg = wiki_string(msg)
    logger.info("After string process : " + key_msg)
    msg = make_wiki_key(key_msg)

    logger.info("Wiki key : " + str(msg))

    key_msg = str(key_msg)
    msg = str(msg)

    matched = is_matched(key_msg, msg, need=75)
    logger.info("Matched : " + str(matched))
    if not matched:
        return got_error
    wiki_wiki = wikipediaapi.Wikipedia('en')

    page_py = wiki_wiki.page(msg)
    logger.info(page_py.exists())
    summary = get_summary(page_py.summary, no)

    # cprint(summary,'yellow')

    return summary
Ejemplo n.º 2
0
def get_incomplete_assignments_and_quizzes(course=""):
    """
    map all the courses with their incomplete quiz and assignment
    @param course: Course name
    @type course: str
    @return: map of course to incomplete ass and quizzes
    @rtype: dict
    """
    report = {}
    try:
        path = helper.get_directory('assignment_attachment')
        path = str(path.absolute())
        driver = helper.getWebDriver(path)
        driver.get("http://lms.galgotiasuniversity.edu.in/")

        login(driver)

        time.sleep(5)

        all_courses = get_all_courses(driver)
        try:
            all_courses.remove("Student Center")
        except ValueError as e:
            logger.error(e)

        if course != "":
            for c in all_courses:
                if is_matched(course, c.lower(), need=70):
                    report[c] = create_report(c, driver)
                    break
        else:
            for course in all_courses:
                report[course] = create_report(course, driver)
        driver.close()
    except NoSuchWindowException as e:
        logger.error(e.msg)
    except Exception as e:
        logger.error(
            f"Some error while collecting incomplete quiz/Assignment data {e}")

    finally:
        # msg = helper.beautify_dict(report)
        # msg_box("Incomplete assignment or quizes co")
        quiz_assignment_table(report)
        return report
def ai(msg, orginal_path):
    """ Little ai for reacting to the msg.
        Written by Saurav-Paul"""
    logger.debug('Processing with ai')
    msg = msg.replace('  ', ' ')
    msg = msg.replace(bot['name'], '')
    msg = msg.replace(bot['name'].lower(), '')
    msg = msg.replace(bot['name'].capitalize(), '')
    reply = "I don't know what to do, sir ."
    # print('you said ' , msg, bot['name'])
    if if_cp_type(msg):
        return 'Good luck sir.'
    if if_config_type(msg):
        return 'Good luck sir.'
    if if_shell_type(msg):
        return 'Good luck sir.'
    if if_run_type(msg):
        return 'Good luck sir.'
    if if_credit_type(msg):
        return 'Good luck sir.'
    else:
        try:
            msg = msg.strip().lower()
            for line in data:
                if is_matched(msg, line, 95):
                    reply = data[line]
                    return reply
            # logger.info('Not found in common data')
            # from history
            try:
                f = getpath(__file__) + '.learnt'
                history = JsonManager.json_read(f)
                for line in history:
                    if is_matched(msg, line, 95):
                        logging.info('Learnt this before')
                        return history[line]

            except:
                logging.error("Can't read history file")
            if (check(msg, ['change dir', 'change directory', 'chdir', '-cd'],
                      100)):
                # print(os.getcwd())
                cprint('Enter the path: ', 'cyan', end='')
                path = input()
                os.chdir(path)
                return 'Directory changed.'
            if check(msg, youtube_play):
                msg = rep(msg, youtube_play)
                logger.info(msg)
                find_goto_address(msg)
                reply = 'Enjoy sir. :D'
            elif check(msg, goto_keys):
                msg = rep(msg, goto_keys)
                find_goto_address(msg)
                reply = 'check browser'
                notify('Check Browser', ':D', t=5)
            elif check(msg, youtube):
                msg = rep(msg, youtube)
                search_youtube(msg)
                reply = 'check browser.'
                notify('Check Browser', ':D', t=5)
            elif check(msg, wiki):
                msg = rep(msg, wiki)
                # search_wiki(msg)
                msg = 'en.wikipedia.org ' + msg
                find_goto_address(msg)
                reply = 'check browser.'
                notify('Check Browser', ':D', t=5)
            elif msg == 'download':
                cprint('Enter the url : ', 'cyan', end='')
                url = input()
                wget_downloader(url)
                reply = 'Done.'
            elif check(msg, google):
                msg = rep(msg, google)
                # print('here = ',msg)
                search_google(msg)
                reply = 'check browser.'
                notify('Check Browser', ':D', t=5)
            elif check(msg, install_keys):
                msg = rep(msg, install_keys)
                reply = install(msg)
            elif check(msg, calc_keys):
                msg = rep(msg, calc_keys)
                reply = google_calculation(msg)
                if reply == "sorry":
                    search_google(msg)
                    reply = "check browser"
                    notify('Check Browser', ':D', t=5)
            else:
                if 0 and 'cmd:' in msg or '-s' in msg:
                    msg = rep(msg, {'cmd:'})
                    msg = rep(msg, {'-s'})
                    command_sep()
                    command(msg.lower())
                    command_sep()
                    reply = 'done sir'
                else:
                    try:
                        f = train_path
                        history = JsonManager.json_read(f)
                        for line in history:
                            if is_matched(msg, line, 95):
                                logging.info('You have trained this before.')
                                return history[line]

                    except:
                        logger.info("Can't read trained data")

                    t = time.time()
                    reply = ask_question(msg)
                    t = time.time() - t
                    logger.info(str(t) + ' sec')
                    # cprint(t,'red')
                    ok = True
                    for word in should_not_learn:
                        if word in msg.lower() or word in reply.lower():
                            ok = False
                            break

                    if ok:
                        logger.info('reply -> ' + reply)
                        if LEARN == False:
                            cprint(
                                "(Automatically LEARN MODE is disable)Enter y to learn : ",
                                'red',
                                attrs=['bold'],
                                end='')
                            learn = input('')
                        else:
                            learn = 'y'
                        if learn.lower() == 'y':
                            try:
                                history.update({msg: reply})
                                JsonManager.json_write(f, history)
                                logger.info('Learnt')
                            except Exception as e:
                                logger.info(
                                    "Exception while writing learnt : " + e)
            return reply
        except Exception as e:
            logger.info('Getting some error in ai')
            logger.info(e)
            return reply
def check(msg, mp, need=90):
    logger.debug('check->' + msg)
    for word in mp:
        if is_matched(word, msg, need):
            return True
    return False
Ejemplo n.º 5
0
def check(msg, mp, need=90):
    for word in mp:
        if is_matched(word, msg, need):
            return True
Ejemplo n.º 6
0
def ai(msg):
    """
    config, setting
    basic questions
    lms_keys
    wiki, youtube, google
    goto
    install, calculate
    screenshot
    calendar
    time, date
    login lms
    get incomp ass / quiz data
    play game (rock paper)
    toss a coin

    """
    logger.debug("called assistant")
    msg = msg.replace('  ', ' ').strip().lower()
    msg.replace(bot['name'], '')
    reply = 'don\'t know what to do sir'

    if if_config_type(msg):
        return 'Good luck sir.'
    try:
        for line in data:
            if is_matched(msg, line, 100):
                reply = data[line]
                return reply
        if check(msg, youtube_play):
            msg = rep(msg, youtube_play)
            logger.info(msg)
            url = "https://www.youtube.com/results?search_query=" + msg
            webbrowser.get().open(url)
            reply = 'Enjoy sir. '

        elif check(msg, goto_keys):
            msg = rep(msg, goto_keys)
            url = "https://" + msg
            webbrowser.get().open(url)
            reply = "Here is what I found for " + msg + "on google"
        elif check(msg, youtube):
            msg = rep(msg, youtube_play)
            logger.info(msg)
            url = "https://www.youtube.com/results?search_query=" + msg
            webbrowser.get().open(url)
            reply = 'Enjoy sir. '
        elif check(msg, wiki):
            msg = rep(msg, wiki)
            reply = tell_me_about(msg)
        elif check(msg, google):
            msg = rep(msg, google)
            url = "https://google.com/search?q=" + msg
            webbrowser.get().open(url)
            reply = "Here is what I found for" + msg + "on google"
        elif check(msg, install_keys):
            msg = rep(msg, install_keys)
            reply = install(msg)
        elif check(msg, ["capture", "my screen", "screenshot"]):
            try:
                myScreenshot = pyautogui.screenshot()
                path = get_directory(
                    'screenshot'
                ) / f'{datetime.datetime.now().timestamp()}-screenshot.png'
                myScreenshot.save(path)  # todo get proper directory
                reply = 'screen shot saved'
            except Exception as e:
                print(e)
        elif check(msg, CALENDAR_STRS):
            # print("calendar")
            date = get_date(msg)
            if date:
                for event in g_calendar.get_events(date):
                    reply = event
                return reply

            else:
                reply = "Sorry sir, didn't get that"
                return reply
        elif check(msg, calc_keys):
            msg = rep(msg, calc_keys)
            opr = msg.split()[1]
            if opr == '+' or opr == 'plus':
                reply = str(int(msg.split()[0]) + int(msg.split()[2]))
            elif opr == '-' or opr == "minus":
                reply = str(int(msg.split()[0]) - int(msg.split()[2]))
            elif opr == 'multiply' or 'x':
                reply = str(int(msg.split()[0]) * int(msg.split()[2]))
            elif opr == 'divide':
                reply = str(int(msg.split()[0]) / int(msg.split()[2]))
            elif opr == 'power':
                reply = str(int(msg.split()[0])**int(msg.split()[2]))
            else:
                reply = "Wrong Operator"
        elif check(msg, TIME_STRS):

            t = time.ctime().split(" ")[3].split(":")[0:2]
            hours = str(abs(12 - int(t[0])))
            minutes = t[1]
            am_pm = "AM" if int(t[0]) < 12 else "PM"
            t = hours + ":" + minutes + " " + am_pm
            reply = f"Sir, time is {t}"
        elif check(msg, DATE_STRS):

            t = time.ctime().split(" ")

            date = t[2]
            month = datetime.date.today().month

            reply = f"Sir, today is {date} {MONTHS[month - 1]}"
        elif check(msg, ["where am i", "my location"]):
            try:
                Ip_info = requests.get(
                    'https://geolocation-db.com/json/').json()
                loc = Ip_info['state']
                reply = f"You must be somewhere in {loc}, {Ip_info['country_name']}"
            except Exception:
                reply = "Unable to get your location"

        elif check(msg, ["send email", "send an email"
                         "email to ", "mail to"]):
            reply = "Email feature is not setup yet"
            pass

        elif check(msg, ['launch', 'run']):
            msg = rep(msg, ['launch', 'run'])
            print(msg)
            if CurrentOs == "Linux":
                subprocess.Popen(msg)
            else:
                subprocess.Popen(f'{msg}.exe')
            reply = f"Launching {msg}"

        # specials cases

        elif check(msg, lms_keys):
            d = threading.Thread(name='login_lms',
                                 target=VisitLms.login_to_lms)
            d.setDaemon(True)
            d.start()
            reply = "Logging in to lms "

        elif check(msg, incomp_ass_quiz_keys, need=50):

            if msg.find('of') != -1 or msg.find('for') != -1:
                if msg.find('of') != -1:
                    course = msg.split('of')[1].strip()
                else:
                    course = msg.split('for')[1].strip()
                    cprint(
                        f"Sir, Fetching all Incomplete assignments and quizzes of {course}",
                        'blue')

                VisitLms.get_incomplete_assignments_and_quizzes(course)
                reply = "Done."

            else:
                VisitLms.get_incomplete_assignments_and_quizzes()
                cprint(
                    f"Sir, Fetching all Incomplete assignments and quizzes from lms",
                    'blue')
                reply = "Done"

        elif check(msg, ["play game", "rock paper", "start game"]):
            speak("Choose among rock, paper and scissor")
            choice = get_input()
            moves = ["rock", "paper", "scissor"]
            cmove = random.choice(moves)
            pmove = choice

            speak("The computer chose " + cmove)
            speak("You chose " + pmove)

            if pmove == cmove:
                reply = "the match is draw"
            elif pmove == "rock" and cmove == "scissor":
                reply = "Player wins"
            elif pmove == "rock" and cmove == "paper":
                reply = "Computer wins"
            elif pmove == "paper" and cmove == "rock":
                reply = "Player wins"
            elif pmove == "paper" and cmove == "scissor":
                reply = "Computer wins"
            elif pmove == "scissor" and cmove == "paper":
                reply = "Player wins"
            elif pmove == "scissor" and cmove == "rock":
                reply = "Computer wins"

        elif check(msg, ["toss a coin", "flip a coin"]):
            moves = ["head", "tails"]
            cmove = random.choice(moves)
            reply = f"Its {cmove.title()}"

        else:
            """ run with arguments """
            if 'cmd:' in msg or '-s' in msg:
                msg = rep(msg, {'cmd:'})
                msg = rep(msg, {'-s'})
                command_sep()
                command(msg.lower())
                command_sep()
                reply = 'done sir'
            else:
                f = None

                try:
                    f = getpath(__file__) + '.learnt'
                    history = JsonManager.json_read(f)
                    for line in history:
                        if is_matched(msg, line, 95):
                            logger.info('Learnt this before')
                            return history[line]

                except FileNotFoundError:
                    logger.error("Can't read history file")

                try:
                    ft = train_path
                    history = JsonManager.json_read(ft)
                    for line in history:
                        if is_matched(msg, line, 95):
                            logger.info('You have trained this before.')
                            return history[line]

                except FileNotFoundError:
                    logger.info("Can't read trained data")
                t = time.time()
                reply = assistant.ask_question(msg)
                t = time.time() - t
                logger.info(str(t) + ' sec')

                ok = True
                for word in should_not_learn:
                    if word in msg.lower() or word in reply.lower():
                        ok = False
                        break
                if ok:
                    logger.info('reply -> ' + reply)
                    if not LEARN:
                        cprint(
                            "(Automatically LEARN MODE is disable)Enter y to learn : ",
                            'red',
                            attrs=['bold'],
                            end='')
                        learn = input('')
                    else:
                        learn = 'y'
                    if learn.lower() == 'y':
                        try:
                            history = JsonManager.json_read(f)
                            history.update({msg: reply})
                            JsonManager.json_write(f, history)
                            logger.info('Learnt')
                        except Exception as e:
                            logger.info("Exception while writing learnt : " +
                                        str(e))
        return reply
    except Exception as e:
        logger.error(f"getting some error in ai {e}")
        logger.info('Getting some error in ai')
        logger.info(str(e))
        return reply