Exemple #1
0
def allresults(bot, updater):
    time.sleep(random.uniform(0, 0.7))
    if 'callback_query' in str(updater):
        id = updater.callback_query.message.chat.id
    else:
        id = updater.message.chat.id
    try:
        players = wr.read_results()
        players = calc(id, players)
        wr.write_results(players)
        resus = players[str(id)][2]
        for resu in resus:
            if resu[1]:
                text = 'Ваш финальный результат на {} '.format(
                    str(resu[0])[:-7])
                if resu[3][:11] != 'not contest':
                    text += 'на Карусели :\n'
                else:
                    text += 'на Дорешке :\n'
                for res in list(str(i) for i in range(1, 7)):
                    text += '№{} - {} |'.format(res, resu[1][res][0]) + ' '
                text = text[:-2] + '\n'
                for res in list(str(i) for i in range(7, 13)):
                    text += '№{} - {} |'.format(res, resu[1][res][0]) + ' '
                text = text[:-2] + '\n'
                if resu[3][:11] != 'not contest':
                    text += 'И сумма ваших очков: ' + \
                        str(sum(resu[1][i][0] for i in resu[1].keys())) + '.'
                else:
                    text += 'И количество решённых вами задач: ' + \
                        str(sum(resu[1][i][0] for i in resu[1].keys())) + '.'
                bot.send_message(chat_id=id, text=text)
    except KeyError:
        bot.send_message(chat_id=id, text='Ты ещё не начал.')
Exemple #2
0
def print_problem(bot, updater, *args):
    time.sleep(random.uniform(0, 0.7))
    num = args[0]
    if 'callback_query' in str(updater):
        message = updater.callback_query.message
    else:
        message = updater.message
    markup = telegram.ForceReply()
    players = wr.read_results()
    if players[str(message.chat.id)][2][len(players[str(message.chat.id)][2]) - 1][2] == 'started':
        bot.send_message(chat_id=message.chat.id, text=problems[num - 1][0])
        if num == 12:
            bot.send_photo(chat_id=message.chat.id, photo=open('12.jpg', 'rb'))
        bot.send_message(chat_id=message.chat.id, text='Ваш ответ к задаче {} :'.format(num), reply_markup=markup)
    else:
        try:
            ass = players[str(message.chat.id)][2][len(players[str(message.chat.id)][2]) - 1][1][str(num)]
            if len(ass) == 1:
                bot.send_message(chat_id=message.chat.id, text=problems[num - 1][0])
                if num == 12:
                    bot.send_photo(chat_id=message.chat.id, photo=open('12.jpg', 'rb'))
                bot.send_message(
                    chat_id=message.chat.id,
                    text='Ваш ответ к задаче {} :'.format(num),
                    reply_markup=markup)
            else:
                bot.send_message(
                    chat_id=message.chat.id,
                    text='Ты уже решил эту задачу)\nИ ответ был {}.'.format(
                        ass[1]))
        except KeyError:
            bot.send_message(chat_id=message.chat.id, text='Всё плохо.')
Exemple #3
0
def totable():
    wb = openpyxl.Workbook()
    ws = wb.active
    results = wr.read_results()
    ids = list(results.keys())
    al = openpyxl.styles.Alignment(horizontal="center", vertical="center")
    for row in ws['A1:ZZ100']:
        for cell in row:
            cell.alignment = al
    ws.column_dimensions['A'].width = 18
    for i in range(2, 1000):
        ws.column_dimensions[let(i)].width = 5
    i = 0
    for id in ids:
        ws.cell(row=2 + 3 * i, column=1, value=results[ids[i]][1])
        ws.cell(row=3 + 3 * i, column=1, value=ids[i])
        i += 1
    index = 0
    for id in ids:
        for j in range(0, len(results[id][2])):
            a = ws.cell(row=1 + index * 3,
                        column=2 + 13 * j,
                        value=results[id][2][j][0])
            a = ws.merge_cells(start_row=1 + index * 3,
                               start_column=2 + 13 * j,
                               end_row=1 + index * 3,
                               end_column=14 + 13 * j)
            cells = [{}, {}]
            for i in range(1, 13):
                cells[0][i] = ws.cell(row=2 + index * 3,
                                      column=1 + int(i) + j * 13,
                                      value=results[id][2][j][1][str(i)][0])
            for i in range(1, 13):
                try:
                    cells[1][i] = ws.cell(
                        row=3 + index * 3,
                        column=1 + int(i) + j * 13,
                        value=results[id][2][j][1][str(i)][1])
                except IndexError:
                    cells[1][i] = ws.cell(row=3 + index * 3,
                                          column=1 + int(i) + j * 13,
                                          value=0)
            ws.cell(row=2 + index * 3,
                    column=14 + j * 13,
                    value=results[id][2][j][2])
            ws.cell(row=3 + index * 3,
                    column=14 + j * 13,
                    value=results[id][2][j][3])

        index += 1

    wb.save('res.xlsx')
Exemple #4
0
def start_carousel(bot, updater, compete, job_queue):
    time.sleep(random.uniform(0, 0.7))
    today = pidr_cd(bot, updater)[1]
    players = wr.read_results()
    name = str(updater.callback_query.message.chat.username) + '  ' + str(updater.callback_query.message.chat.first_name) + '  ' + str(updater.callback_query.message.chat.last_name)
    if str(updater.callback_query.message.chat.id) in players:
        players[str(updater.callback_query.message.chat.id)][2].append([today.strftime("%Y-%m-%d %H:%M:%S.%f"),
                                         {'1': [0],
                                          '2': [0],
                                          '3': [0],
                                          '4': [0],
                                          '5': [0],
                                          '6': [0],
                                          '7': [0],
                                          '8': [0],
                                          '9': [0],
                                          '10': [0],
                                          '11': [0],
                                          '12': [0]},
                                         compete,
                                         'started'])
    else:
        players[str(updater.callback_query.message.chat.id)] = [updater.callback_query.message.chat.id,
                                 '@' + name,
                                 [[today.strftime("%Y-%m-%d %H:%M:%S.%f"),
                                   {'1': [0],
                                    '2': [0],
                                    '3': [0],
                                    '4': [0],
                                    '5': [0],
                                    '6': [0],
                                    '7': [0],
                                    '8': [0],
                                    '9': [0],
                                    '10': [0],
                                    '11': [0],
                                    '12': [0]},
                                   compete,
                                   'started']]]
    wr.write_results(players)
    time.sleep(random.uniform(0, 0.7))
    bot.send_message(
        chat_id=updater.callback_query.message.chat.id,
        text='Тур стартует! Решайте внимательно и осторожно...')
    time.sleep(random.uniform(0, 0.7))
    print_problem(bot, updater, 1)
    if pidr_cd(bot, updater):
        end = dt.datetime(2019, 3, 6, 1, tzinfo=pytz.timezone('Europe/Moscow'))
        job_queue.run_once(timer, (end-today).total_seconds(), context=updater.callback_query.message.chat.id)
Exemple #5
0
def timer(bot, job):
    players = wr.read_results()
    if players[str(job.context)][2][len(
        players[str(job.context)][2]) - 1][3] == 'started':
        bot.send_message(chat_id=job.context, text='ВРЕМЯ ИСТЕКЛО!')
        players[str(job.context)][2][len(
            players[str(job.context)][2]) - 1][3] = 'ended'
        wr.write_results(players)
        bot.send_message(
            chat_id=job.context,
            text='Ура! Тур завершён!\nРезультаты будут опубликованы в боте и на странице: vk.com/sashashivarov')
        result(bot, job.context)
        bot.send_message(
            chat_id=job.context,
            text='А сейчас вы сможете оставить свой комментарий/пожелания, например, какая задача вам понравилась больше всего, какая меньше.\nСпасибо большое, за то что приняли участие в проекты, если вы хотите поддержать нас, то ')
        donate(bot, job.context)
        select_problems(bot, updater)
Exemple #6
0
def confirmation(bot, updater):
    time.sleep(random.uniform(0, 0.7))
    players = wr.read_results()
    if str(updater.message.chat.id) in players:
        bot.send_message(chat_id=updater.message.chat.id,
                         text='Йо, ты уже в системе. Просто используй команды.')
        show_menu(bot, updater)
    else:
        btnlist = [
            telegram.InlineKeyboardButton('Согласен.', callback_data='agree'),
            telegram.InlineKeyboardButton('Не согласен.', callback_data='disagree'),
        ]
        markup = telegram.InlineKeyboardMarkup(wr.build_menu(btnlist, n_cols=2))
        bot.send_message(chat_id=updater.message.chat.id,
                         text='Для начала необходимо согласиться с Согласием на обработку персональный данных.')
        bot.send_message(chat_id=updater.message.chat.id,
                         text='Я даю своё согласие на обработку и публикацию моих персональных данных, таких как: результат участия в Экономической Карусели и никнейм в телеграмм.',
                         reply_markup=markup)
Exemple #7
0
def repost(bot, updater):
    for id in wr.read_results():
        try:
            bot.send_message(chat_id=id, text='''''')
        except telegram.error.Unauthorized:
            pass
Exemple #8
0
def query_h(bot, updater, job_queue):
    time.sleep(random.uniform(0, 0.7))
    call = updater.callback_query
    if call.message:
        if call.data == "contest":
            players = wr.read_results()
            id = call.from_user.id
            try:
                if not pidr_cd(bot, updater)[0]:
                    bot.send_message(chat_id=id, text='Контест не сегодня!')
                elif players[str(id)][2][len(players[str(id)][2]) - 1][3] == 'not contestFalse' and pidr_cd(bot, updater)[0]:
                    bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=call.message.text)
                    start_carousel(bot, updater, 1, job_queue)
                else:
                    bot.send_message(chat_id=id, text='Ты уже писал контест!')
            except KeyError:
                bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,
                                      text=call.message.text)
                start_carousel(bot, updater, 1, job_queue)

    if call.data == 'agree':
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=call.message.text)
        send_welcome(bot, updater)
    if call.data == 'disagree':
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=call.message.text)
        bot.send_message(chat_id=call.message.chat.id, text='Если всё же передумаешь, то нажми старт ещё раз.')

    if call.data == 'want':
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=call.message.text)
        start_carousel(bot, updater, 1, job_queue)
    if call.data == 'not want':
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=call.message.text)
        start_carousel(bot, updater, 0, job_queue)

    if call.data == 'rules':
        if updater.callback_query.message.text != 'Меню:':
            bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=call.message.text)
        print_rules(bot, updater)

    if call.data == 'problems':
        if call.message.text != 'Меню:':
            bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=call.message.text )
        select_problems(bot, updater)

    if call.data[:3] == 'pr_':
        print_problem(bot, updater, int(call.data[3:]))

    if call.data == 'result':
        result(bot, updater)
    if call.data == 'allresults':
        allresults(bot, updater)

    if call.data == 'others':
        btnlist = [
        telegram.InlineKeyboardButton('Поддержать проект!', callback_data='donate'),
        telegram.InlineKeyboardButton('Отправить отзыв.', callback_data='feedback'),
            telegram.InlineKeyboardButton('Последний результат.', callback_data='result'),
            telegram.InlineKeyboardButton('Все результаты.', callback_data='allresults'),
            telegram.InlineKeyboardButton('Основное меню.', callback_data='menu')
        ]
        markup = telegram.InlineKeyboardMarkup(wr.build_menu(btnlist, n_cols=2))
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=call.message.text, reply_markup=markup)

    if call.data == 'menu':
        btnlist = [
            telegram.InlineKeyboardButton('Показать задачки.', callback_data='problems'),
            telegram.InlineKeyboardButton('Правила.', callback_data='rules'),
            telegram.InlineKeyboardButton('Другое.', callback_data='others')
        ]
        btn = telegram.InlineKeyboardButton('Начать Контест!', callback_data='contest')
        markup = telegram.InlineKeyboardMarkup(wr.build_menu(btnlist, n_cols=2, footer_buttons=[btn]))
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=call.message.text, reply_markup=markup)


    if call.data == 'donate':
        donate(bot, updater)

    if call.data == 'feedback':
        feedback(bot, updater)

    if call.data == 'yes':
        send_xlxs(bot, updater)

    return
Exemple #9
0
def answer_problem(bot, updater):
    time.sleep(random.uniform(0, 0.7))
    message = updater.message
    players = wr.read_results()
    try:
        if players[str(message.from_user.id)][2][len(
                players[str(message.from_user.id)][2]) - 1][3] == 'ended':
            bot.send_message(chat_id=message.chat.id, text='Уже всё(')
        else:
            res = players[str(message.from_user.id)][2][len(
                players[str(message.from_user.id)][2]) - 1][1]
            markup = telegram.ReplyKeyboardRemove(selective=False)
            ans = message.text
            rep = message.reply_to_message.text
            num = int(rep[19:-2])
            try:
                a = float(ans)
                if len(res[str(num)]) == 2:
                    bot.send_message(
                        chat_id=message.chat.id,
                        text='Ты уже ответил на этот вопрос!')
                else:
                    if players[str(message.chat.id)][2][len(players[str(message.chat.id)][2]) - 1][3] == 'started':
                        res[str(num)].append(ans)
                        if ans == problems[num-1][1]:
                            bot.send_message(chat_id=message.chat.id, text='Ответ верный!')
                        else:
                            bot.send_message(chat_id=message.chat.id, text='Ответ неверный!')
                        if num == len(problems):
                            players[str(message.from_user.id)][2][len(
                                players[str(message.from_user.id)][2]) - 1][3] = "ended"
                            wr.write_results(players)
                            bot.send_message(
                                chat_id=message.chat.id,
                                text='Ура! Тур завершён!\nРезультаты будут опубликованы в группе:\nvk.com/economic_carousel')
                            result(bot, updater)
                            bot.send_message(
                                chat_id=message.chat.id,
                                text='А сейчас вы сможете оставить свой комментарий/пожелания, например, какая задача вам понравилась больше всего, какая меньше.\nhttps://goo.gl/forms/XBIyXoYEEQUrB9IB2\nСпасибо большое, за то что приняли участие в проекты, если вы хотите поддержать нас, то ')
                            donate(bot, updater)
                            select_problems(bot, updater)
                        else:
                            wr.write_results(players)
                            print_problem(bot, updater, num + 1)
                    else:
                        if problems[num - 1][1] == ans:
                            if len(res[str(num)]) == 1:
                                res[str(num)].append(ans)
                            else:
                                res[str(num)][1] = ans
                            wr.write_results(players)
                            bot.send_message(
                                chat_id=message.chat.id,
                                text="Верно!",
                                reply_markup=markup)
                        else:
                            bot.send_message(
                                chat_id=message.chat.id,
                                text="Неправильно(\nПопробуй еще!",
                                reply_markup=markup)
                            markup = telegram.ForceReply(selective=False)
                            bot.send_message(
                                chat_id=message.chat.id,
                                text='Ваш ответ к задаче {} :'.format(num),
                                reply_markup=markup)
            except ValueError:
                bot.send_message(
                    chat_id=message.chat.id,
                    text="Неправильный формат ответа!\nПопробуй еще!",
                    reply_markup=markup)
                markup = telegram.ForceReply(selective=False)
                bot.send_message(
                    chat_id=message.chat.id,
                    text='Ваш ответ к задаче {} :'.format(num),
                    reply_markup=markup)
    except KeyError:
        bot.send_message(chat_id=message.chat.id, text='Ты ещё не начал.')
Exemple #10
0
def select_problems(bot, updater):
    time.sleep(random.uniform(0, 0.7))
    if 'callback_query' in str(updater):
        message = updater.callback_query.message
    else:
        message = updater.message
    players = wr.read_results()
    today = pidr_cd(bot, updater)[1]
    state = pidr_cd(bot, updater)[0]
    name = str(message.chat.username) + '  ' + str(message.chat.first_name) + '  ' + str(message.chat.last_name)
    contest = players[str(message.chat.id)][2][len(players[str(message.chat.id)][2])-1][3]
    if str(message.chat.id) not in players:
        players[str(message.chat.id)] = [message.chat.id,
                                         '@' + name,
                                         [[today.strftime("%Y-%m-%d %H:%M:%S.%f"),
                                           {'1': [0],
                                            '2': [0],
                                            '3': [0],
                                            '4': [0],
                                            '5': [0],
                                            '6': [0],
                                            '7': [0],
                                            '8': [0],
                                            '9': [0],
                                            '10': [0],
                                            '11': [0],
                                            '12': [0]},
                                           2,
                                           'not contest{}'.format(state)]]]
        wr.write_results(players)
    elif contest[:11] != 'not contest':
        players[str(message.chat.id)][2].append([today.strftime("%Y-%m-%d %H:%M:%S.%f"),
                                           {'1': [0],
                                            '2': [0],
                                            '3': [0],
                                            '4': [0],
                                            '5': [0],
                                            '6': [0],
                                            '7': [0],
                                            '8': [0],
                                            '9': [0],
                                            '10': [0],
                                            '11': [0],
                                            '12': [0]},
                                           2,
                                           'not contest{}'.format(state)])
        wr.write_results(players)
    if contest[:11] == 'not contest':
        btnlist = []
        for i in range(1, 8, 6):
            btnlist.append(telegram.InlineKeyboardButton(
                str(i), callback_data='pr_{}'.format(i)))
            btnlist.append(telegram.InlineKeyboardButton(
                str(i + 1), callback_data='pr_{}'.format(i + 1)))
            btnlist.append(telegram.InlineKeyboardButton(
                str(i + 2), callback_data='pr_{}'.format(i + 2)))
            btnlist.append(telegram.InlineKeyboardButton(
                str(i + 3), callback_data='pr_{}'.format(i + 3)))
            btnlist.append(telegram.InlineKeyboardButton(
                str(i + 4), callback_data='pr_{}'.format(i + 4)))
            btnlist.append(telegram.InlineKeyboardButton(
                str(i + 5), callback_data='pr_{}'.format(i + 5)))
            markup = telegram.InlineKeyboardMarkup(wr.build_menu(btnlist, n_cols=6))
        bot.send_message(
            chat_id=message.chat.id,
            text='Выбери задачу из списка!',
            reply_markup=markup)
    else:
        bot.send_message(chat_id=message.chat.id, text='Ты уже начал контест!')
Exemple #11
0
def read_feedback():
    file_feedback = find_file('feedback.json')
    return json.loads(file_feedback.GetContentString())


def write_feedback(feedback):
    file_feedback = find_file('feedback.json')
    file_feedback.SetContentString(
        json.dumps(feedback, indent=4, sort_keys=True, ensure_ascii=False))
    file_feedback.Upload()


# f_pr = find_file('problems1.json')
# f_pr.SetContentString(
#     json.dumps(
#         wr.read_problems(),
#         indent=4,
#         ensure_ascii=False
#     )
# )
# f_pr.Upload()

# file_list = drive.ListFile(
# {'q': "'root' in parents and trashed=false"}).GetList()
# for file1 in file_list:
#     print(file1['title'], file1['id'])

write_results(wr.read_results())
write_feedback(wr.read_feedback())