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='Ты ещё не начал.')
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='Всё плохо.')
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')
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)
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)
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)
def repost(bot, updater): for id in wr.read_results(): try: bot.send_message(chat_id=id, text='''''') except telegram.error.Unauthorized: pass
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
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='Ты ещё не начал.')
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='Ты уже начал контест!')
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())