Exemplo n.º 1
0
def course_owner(call, lang):
    course_ = Course.Course(call.data['c_id'])

    text = msgs[lang]['teacher']['course_owner_full'].format(
        name=course_.name,
        num=len(course_.participants),
        lock=UI.to_dtime(course_.entry_restriction),
        desc=course_.description)
    c_text = msgs[lang]['confirm']['delete_course'].format(course_.name)
    markup = mkp.create(
        lang, [tbt.user_list(call.data['c_id'], lang)],
        [tbt.task_list(call.data['c_id'], lang)],
        [tbt.classwork_list(call.data['c_id'], lang)],
        [tbt.announce(call.data['c_id'], lang)], [
            tbt.switch_lock(call.data['c_id'],
                            True if course_.is_open else False, lang)
        ], [
            cbt.confirm_action(
                'delete_course',
                msgs[lang]['buttons']['confirm']['delete_course'],
                c_text,
                call.message.chat.id,
                call.message.message_id,
                c_id=course_.id)
        ])

    botHelper.edit_mes(text, call, markup=markup)
Exemplo n.º 2
0
def task(call, lang):
    course_ = Course.Course(call.data['c_id'])
    task_ = course_.task(call.data['t_id'])

    p = UI.Paging(course_.participants, sort_key='name')

    text = msgs[lang]['teacher']['management']['task'].format(name=task_.name, hmark=int(task_.highest_mark)) \
        + p.msg(call.data['page'], lang)

    c_text = msgs[lang]['confirm']['delete_task'].format(task_.name)

    markup = mkp.create_listed(
        lang,
        tbt.user_tasks_list(p.list(call.data['page']), call.data['c_id'],
                            call.data['t_id']), tbt.task, call.data['c_id'],
        call.data['t_id'], lang, call.data['page'])
    mkp.add_before_back(
        markup,
        cbt.confirm_action('del_task',
                           msgs[lang]['buttons']['confirm']['del_task'],
                           c_text,
                           call.message.chat.id,
                           call.message.message_id,
                           c_id=call.data['c_id'],
                           t_id=call.data['t_id']))

    botHelper.edit_mes(text, call, markup=markup)
Exemplo n.º 3
0
def course_list(call, lang):
    if call.data['type'] == 'all':  # TODO не добавлять закрытые курсы
        courses = [i for i in Course.fetch_all_courses()]
        text = msgs[lang]['common']['all']
    elif call.data['type'] == 'my':
        courses = [i for i in User.User(call.message.chat.id).participation]
        text = msgs[lang]['common']['my']
    elif call.data['type'] == 'teach':
        courses = [i for i in User.User(call.message.chat.id).possessions]
        text = msgs[lang]['common']['teach']
    else:
        botHelper.error(call=call)
        return
    page = call.data['page']

    p = UI.Paging(courses, sort_key='name')
    text += p.msg(call.data['page'], lang)
    if call.data['type'] == 'teach':
        markup = mkp.create_listed(lang, tbt.courses(p.list(page)),
                                   tbt.manage_list, lang, page)
    else:
        markup = mkp.create_listed(lang, cbt.courses(p.list(page)),
                                   cbt.course_list_of, call.data['type'], lang,
                                   page)
    botHelper.edit_mes(text, call, markup=markup)
Exemplo n.º 4
0
def cw(call, lang):
    course_ = Course.Course(call.data['c_id'])
    classwork = course_.classwork(call.data['cw_id'])

    p = UI.Paging(course_.participants, sort_key='name')

    text = msgs[lang]['teacher']['management']['classwork'].format(
        date=classwork.date) + p.msg(call.data['page'], lang)

    c_text = msgs[lang]['confirm']['delete_class'].format(classwork.name)

    markup = mkp.create_listed(
        lang,
        tbt.user_attendance_list(p.list(call.data['page']), call.data['c_id'],
                                 call.data['cw_id']), tbt.classwork,
        call.data['c_id'], call.data['cw_id'], lang, call.data['page'])
    mkp.add_before_back(
        markup,
        tbt.invert_attendance(call.data['c_id'], call.data['cw_id'], lang))
    mkp.add_before_back(
        markup, tbt.change_cw_date(call.data['c_id'], call.data['cw_id'],
                                   lang))
    mkp.add_before_back(
        markup,
        cbt.confirm_action('del_class',
                           msgs[lang]['buttons']['confirm']['del_class'],
                           c_text,
                           call.message.chat.id,
                           call.message.message_id,
                           c_id=call.data['c_id'],
                           cw_id=call.data['cw_id']))

    botHelper.edit_mes(text, call, markup=markup)
Exemplo n.º 5
0
def announce(call):
    def return_to_menu():
        new_mes = botHelper.send_mes('empty', call.message.chat.id)
        botHelper.renew_menu(call, new_mes)
        back(call, True)

    def cancel():
        botHelper.send_mes(msgs[lang]['teacher']['announce']['cancel'])
        return_to_menu()

    def send():
        course_ = Course.Course(call.data['c_id'])

        for part in course_.participants:
            try:
                botHelper.send_mes(
                    msgs[lang]['teacher']['announce']['got_announce'].format(
                        course_.name), part.id)
                botHelper.send_mes(announce_info['text'], part.id)
                for file, caption in zip(announce_info['file'],
                                         announce_info['file_caption']):
                    bot.send_document(part.id, file, caption=caption)
            except TBotApiException:
                continue

        botHelper.send_mes(msgs[lang]['teacher']['announce']['sent'],
                           call.message.chat.id)

        return_to_menu()

    def get_file(message):
        if message.text == '/exit':
            cancel()
        elif message.text == '/send':
            send()
        else:
            if message.document:
                announce_info['file'].append(message.document.file_id)
                announce_info['file_caption'].append(message.caption)
                bot.register_next_step_handler(message, get_file)

    def get_text(message):
        if message.text == '/exit':
            cancel()
        else:
            announce_info['text'] = message.text

            botHelper.send_mes(msgs[lang]['teacher']['announce']['files'],
                               call.message.chat.id)
            bot.register_next_step_handler(message, get_file)

    call.data = json.loads(call.data)
    lang = get_lang(call.message.chat.id)
    announce_info = {'text': '', 'file': [], 'file_caption': []}

    botHelper.edit_mes(msgs[lang]['teacher']['announce']['begin'], call)
    botHelper.send_mes(msgs[lang]['teacher']['announce']['input_text'],
                       call.message.chat.id)
    bot.register_next_step_handler(call.message, get_text)
Exemplo n.º 6
0
def confirm(call):
    call.data = json.loads(call.data)

    text = botHelper.get_from_disc(get_confirm_message, call=call)
    if text:
        botHelper.edit_mes(text,
                           call,
                           markup=mkp.create_confirm(
                               get_lang(call.message.chat.id), call.data))
Exemplo n.º 7
0
def st_tsk(call, lang):
    task_ = Course.Task(call.data['c_id'], call.data['t_id'])
    text = msgs[lang]['student']['student_task'].format(
        name=task_.name,
        desc=task_.description,
        mark=task_.mark(call.message.chat.id).value,
        hmark=int(task_.highest_mark))

    botHelper.edit_mes(text, call, markup=mkp.create(lang))
Exemplo n.º 8
0
def st_task_list(call, lang):
    p = UI.Paging(Course.Course(call.data['c_id']).tasks, sort_key='name')

    text = msgs[lang]['student']['task_list'] + p.msg(call.data['page'], lang)

    markup = mkp.create_listed(lang, cbt.tasks(p.list(call.data['page'])),
                               cbt.task_list, call.data['c_id'], lang,
                               call.data['page'])

    botHelper.edit_mes(text, call, markup=markup)
Exemplo n.º 9
0
def user_list(call, lang):
    p = UI.Paging(Course.Course(call.data['c_id']).participants,
                  sort_key='name')

    text = msgs[lang]['teacher']['management']['user_list'] + p.msg(
        call.data['page'], lang)

    markup = mkp.create_listed(
        lang, tbt.users(p.list(call.data['page']), call.data['c_id']),
        tbt.user_list, call.data['c_id'], lang, call.data['page'])

    botHelper.edit_mes(text, call, markup=markup)
Exemplo n.º 10
0
def task_list(call, lang):
    tasks = Course.Course(call.data['c_id']).tasks

    p = UI.Paging(tasks, sort_key='name')

    text = msgs[lang]['teacher']['management']['task_list'] + p.msg(
        call.data['page'], lang)

    markup = mkp.create_listed(lang, tbt.tasks(p.list(call.data['page'])),
                               tbt.task_list, call.data['c_id'], lang,
                               call.data['page'])
    mkp.add_before_back(markup, tbt.new_task(call.data['c_id'], lang))

    botHelper.edit_mes(text, call, markup=markup)
Exemplo n.º 11
0
def usr_mng(call, lang):
    course_ = Course.Course(call.data['c_id'])
    tasks = course_.tasks
    user = User.User(call.data['u_id'])
    cws = course_.classworks

    if tasks:
        total_mark = sum(
            filter(None, map(lambda x: x.mark(call.data['u_id']).value,
                             tasks)))
        mean_mark = total_mark / len(tasks)
    else:
        total_mark = None
        mean_mark = None

    if cws:
        overall = len(cws)
        att = sum(map(lambda cw_: cw_.attendance(call.data['u_id']).value,
                      cws))
    else:
        overall = None
        att = None

    text = msgs[lang]['teacher']['management']['user'].format(
        course=course_.name,
        name=user.name,
        email='',
        mean=mean_mark,
        total=total_mark,
        attend=att,
        attend_tot=overall)

    c_text = msgs[lang]['confirm']['kick'].format(user.name)

    markup = mkp.create(lang, [
        cbt.confirm_action('kick',
                           msgs[lang]['buttons']['confirm']['kick'],
                           c_text,
                           call.message.chat.id,
                           call.message.message_id,
                           c_id=call.data['c_id'],
                           u_id=call.data['u_id'])
    ])

    botHelper.edit_mes(text, call, markup=markup)
Exemplo n.º 12
0
def menu(call):
    lang = get_lang(call.message.chat.id)

    if User.User(call.message.chat.id).type_u == 'student':
        markup = mkp.create(
            lang,
            [cbt.course_list_of('all', lang),
             cbt.course_list_of('my', lang)],
            include_back=False)

        botHelper.edit_mes(msgs[lang]['common']['menu'], call, markup=markup)
    else:
        markup = mkp.create(
            lang,
            [cbt.course_list_of('all', lang),
             cbt.course_list_of('my', lang)], [tbt.manage_list(lang)],
            [tbt.new_course(lang)],
            include_back=False)

        botHelper.edit_mes(msgs[lang]['common']['menu'], call, markup=markup)
Exemplo n.º 13
0
def cw_date(call):
    def return_to_menu():
        new_mes = botHelper.send_mes('empty', call.message.chat.id)
        botHelper.renew_menu(call, new_mes)
        back(call, True)

    def get_date(message):
        if message.text == '/exit':
            return_to_menu()
        elif re.fullmatch(r'\d{1,2}\s\d{1,2}\s\d{1,2}', message.text):
            in_date = message.text.split()
            cw_ = Course.Classwork(call.data['c_id'], call.data['cw_id'])

            try:
                date = datetime.date(2000 + int(in_date[0]), int(in_date[1]),
                                     int(in_date[2])).strftime('%d %b %Y')
            except ValueError:
                botHelper.send_mes(
                    msgs[get_lang(call.message.chat.id)]['teacher']
                    ['management']['wrong_input'], message.messasge_id)
                bot.register_next_step_handler(message, get_date)
            else:
                cw_.date = date
                cw_.name = date

                return_to_menu()
        else:
            botHelper.send_mes(
                msgs[get_lang(call.message.chat.id)]['teacher']['management']
                ['wrong_input'], message.messasge_id)
            bot.register_next_step_handler(message, get_date)

    call.data = json.loads(call.data)

    botHelper.edit_mes(
        msgs[get_lang(
            call.message.chat.id)]['teacher']['management']['input_date'],
        call)
    bot.register_next_step_handler(call.message, get_date)
Exemplo n.º 14
0
def do_tsk(call):
    def return_to_menu():
        new_mes = botHelper.send_mes('empty', call.message.chat.id)
        botHelper.renew_menu(call, new_mes)
        back(call, True)

    def get_mark(message):
        if message.text == '/exit':
            return_to_menu()
        elif message.text == '-1':
            mark.value = None
        elif re.fullmatch(r'\d+', message.text):
            if int(message.text) <= task_.highest_mark:
                mark.value = int(message.text)

                return_to_menu()
            else:
                botHelper.send_mes(msgs[get_lang(call.message.chat.id)]
                                   ['teacher']['management']['error_mark'])
                bot.register_next_step_handler(message, get_mark)
        else:
            botHelper.send_mes(msgs[get_lang(
                call.message.chat.id)]['teacher']['management']['wrong_input'])
            bot.register_next_step_handler(message, get_mark)

    call.data = json.loads(call.data)
    task_ = Course.Task(call.data['c_id'], call.data['t_id'])
    mark = Course.Mark(call.data['c_id'], call.data['t_id'], call.data['u_id'])

    text = msgs['mark_one'].format(task=task_.name,
                                   user=User.User(call.data['u_id']).name,
                                   mark=mark.value,
                                   max=task_.highest_mark)

    botHelper.edit_mes(text, call)
    bot.register_next_step_handler(call.message, get_mark)
Exemplo n.º 15
0
def course(call, lang):
    course_ = Course.Course(call.data['c_id'])
    num_par = len(course_.participants)
    owner = course_.owner

    if owner.id == call.message.chat.id:  # owner
        if course_.is_open:
            lock = msgs[lang]['teacher']['lock_open']
        else:
            lock = msgs[lang]['teacher']['lock_close']
        desc = course_.description
        if len(desc) > UI.constants.COURSE_INFO_DESC_LENGTH:
            desc = botHelper.remove_danger(
                desc[:UI.constants.COURSE_INFO_DESC_LENGTH]) + '...'

        botHelper.edit_mes(
            msgs[lang]['teacher']['course_owner_min'].format(name=course_.name,
                                                             num=num_par,
                                                             lock=lock,
                                                             desc=desc),
            call,
            markup=mkp.create(lang, [tbt.manage(call.data['c_id'], lang)]))
    elif course_.id in (c.id
                        for c in User.User(call.message.chat.id).participation
                        ):  # enrolled
        cws = course_.classworks
        attend_text = ''
        overall = len(cws)
        if overall:
            att = sum(
                map(lambda cw_: cw_.attendance(call.message.chat.id).value,
                    cws))
            attend_text = msgs[lang]['student']['attendance'].format(
                count=att, overall=overall, ratio=int(att / overall * 100))

        tasks = course_.tasks
        if tasks:
            total_mark = sum(
                map(lambda task_: task_.mark(call.message.chat.id).value,
                    tasks))
            mean_mark = total_mark / len(tasks)
            mark_text = msgs[lang]['student']['marks'].format(
                total_mark, round(mean_mark, 2))
        else:
            mark_text = ''

        text = msgs[lang]['student']['course'].format(name=course_.name,
                                                      fio=owner.name,
                                                      num=num_par,
                                                      mail='',
                                                      marks=mark_text,
                                                      attend=attend_text)

        c_text = msgs[lang]['confirm']['leave_course'].format(course_.name)
        if not course_.is_open:
            c_text += msgs[lang]['confirm']['leave_course_append']

        markup = mkp.create(lang, [cbt.task_list(call.data['c_id'], lang)], [
            cbt.confirm_action('leave',
                               msgs[lang]['buttons']['confirm']['leave'],
                               c_text,
                               call.message.chat.id,
                               call.message.message_id,
                               c_id=course_.id)
        ])

        botHelper.edit_mes(text, call, markup=markup)
    else:  # not enrolled
        locked = '' if course_.is_open else msgs[lang]['student'][
            'course_closed']
        end_entry = course_.entry_restriction
        lock = UI.to_dtime(
            end_entry) if end_entry else msgs[lang]['student']['lock_absent']

        text = msgs[lang]['student']['course_not_enroll'].format(
            name=course_.name,
            fio=owner.name,
            desc=course_.description,
            num=num_par,
            lock=lock,
            mail='',
            locked=locked)  # TODO mail

        c_text = msgs[lang]['confirm']['enroll_course'].format(course_.name)

        if locked:
            markup = mkp.create(lang)
        else:
            markup = mkp.create(lang, [
                cbt.confirm_action('enroll',
                                   msgs[lang]['buttons']['confirm']['enroll'],
                                   c_text,
                                   call.message.chat.id,
                                   call.message.message_id,
                                   c_id=course_.id)
            ])

        botHelper.edit_mes(text, call, markup=markup)
Exemplo n.º 16
0
def new_task(call):
    def return_to_menu():
        new_mes = botHelper.send_mes('empty', call.message.chat.id)
        botHelper.renew_menu(call, new_mes)
        back(call, True)

    def cancel():
        botHelper.send_mes(msgs[lang]['teacher']['task_create']['canceled'],
                           call.message.chat.id)
        return_to_menu()

    def create():
        name = task_info['name']
        if not name:
            name = msgs[lang]['teacher']['task_create']['name'] + str(
                len(Course.Course(call.data['c_id']).tasks) + 1)

        Course.Task(course_id=call.data['c_id'],
                    name=name,
                    description=task_info['desc'].format(task_info['hmark']),
                    highest_mark=task_info['hmark'])

        botHelper.send_mes(msgs[lang]['teacher']['task_create']['created'],
                           call.message.chat.id)
        return_to_menu()

    def get_hmark(message):
        if message.text == '/exit':
            cancel()
        else:
            if message.text != '0' and re.fullmatch(r'\d+', message.text):
                task_info['hmark'] = int(message.text)

                create()
            else:
                botHelper.send_mes(
                    msgs[lang]['teacher']['task_create']['error_max_mark'],
                    call.message.chat.id)
                bot.register_next_step_handler(message, get_hmark)

    def get_desc(message):
        if message.text == '/exit':
            cancel()
        else:
            if len(message.text) <= UI.constants.TASK_DESC_MAX_LENGTH:
                if message.text != '/no':
                    task_info['desc'] += message.text

                botHelper.send_mes(
                    msgs[lang]['teacher']['task_create']['input_max_mark'],
                    call.message.chat.id)
                bot.register_next_step_handler(message, get_hmark)
            else:
                botHelper.send_mes(
                    msgs[lang]['teacher']['task_create']
                    ['error_length'].format(UI.constants.TASK_DESC_MAX_LENGTH),
                    call.message.chat.id)
                bot.register_next_step_handler(message, get_desc)

    def get_name(message):
        if message.text == '/exit':
            cancel()
            return_to_menu()
        else:
            if len(message.text) <= UI.constants.TASK_NAME_MAX_LENGTH:
                if message.text != '/no':
                    task_info['name'] = message.text

                botHelper.send_mes(
                    msgs[lang]['teacher']['task_create']['input_desc'],
                    call.message.chat.id)
                bot.register_next_step_handler(message, get_desc)
            else:
                botHelper.send_mes(
                    msgs[lang]['teacher']['task_create']
                    ['error_length'].format(UI.constants.TASK_NAME_MAX_LENGTH),
                    call.message.chat.id)
                bot.register_next_step_handler(message, get_name)

    call.data = json.loads(call.data)
    lang = get_lang(call.message.chat.id)
    task_info = {
        'name': '',
        'desc': msgs[lang]['teacher']['task_create']['max_mark'],
        'hmark': 0
    }

    botHelper.edit_mes(msgs[lang]['teacher']['task_create']['begin'], call)
    botHelper.send_mes(msgs[lang]['teacher']['task_create']['input_name'],
                       call.message.chat.id)
    bot.register_next_step_handler(call.message, get_name)
Exemplo n.º 17
0
def new_course(call):
    botHelper.edit_mes(
        msgs[get_lang(
            call.message.chat.id)]['teacher']['course_create']['begin'], call)
    create_course(call.message.chat.id)