def click(row, col, chat_id, message_id): field = databaseHelper.get(chat_id, 'field') game_run = databaseHelper.get(chat_id, 'game_run') if game_run and field[row][col] == '⬜️': field[row][col] = '❌' databaseHelper.save(chat_id, 'field', field) cross_count = databaseHelper.get(chat_id, 'cross_count') cross_count += 1 databaseHelper.save(chat_id, 'cross_count', cross_count) check_win('❌', chat_id) game_run = databaseHelper.get(chat_id, 'game_run') if game_run and cross_count < 5: computer_move(chat_id, field) check_win('⭕️', chat_id) if cross_count >= 5: bot.send_message( chat_id=chat_id, text='Ничья ' + '\nНажми на кнопку "Новая игра", если ночешь сыкрать еще раз\nИли на кнопку "Назад", если хочешь вернутся в гланое меню', reply_markup=None) databaseHelper.save(chat_id, 'field', field) showField(chat_id, message_id)
def goBack(message): """ Функция возврата в предыдущее состояние На один пункт Parameters ---------- message Объект message """ # working with json currentChatId = message.chat.id databaseHelper.save(currentChatId, 'status', 0) # gobacking prevID = databaseHelper.get(currentChatId, 'prevMenuId') if prevID == config.IDmainMenu: showMainMenu(message) elif prevID == config.IDshowTasksMenu: showTasks(message) elif prevID == config.IDshowEventMenu: showMainMenu(message) elif prevID == config.IDaddEvent: showEvents(message) elif prevID == config.IDshowTimetableMenu: messageTimetableMenu(message) elif prevID == config.IDaddEvent: showEvents(message) else: pass
def showMainMenu(message): """ Функция показа главного меню. Отображает стикер и приветственное сообщение. Устанавливает в базу необходимые значения. Parameters ---------- message Объект message """ # working with json currentChatId = message.chat.id databaseHelper.save(currentChatId, 'prevMenuId', 0) databaseHelper.save(currentChatId, 'status', 0) remindsStatus = databaseHelper.get(currentChatId, 'reminds') # keyboard markup = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True) tasksListButton = types.KeyboardButton(config.tasksListLabel) timeTableButton = types.KeyboardButton(config.timeTableLabel) eventsButton = types.KeyboardButton(config.eventsLabel) game = types.KeyboardButton("Крестики-нолики") turnRemindsBtn = types.KeyboardButton( f"{config.remindsLabel} {remindsStatus}") markup.add(tasksListButton, timeTableButton, eventsButton, turnRemindsBtn, game) # sending sticker = open(random.choice(config.stickers), 'rb') bot.send_sticker(message.chat.id, sticker) bot.send_message(message.chat.id, config.mainMenuMessage, reply_markup=markup)
def getListPattern(el, chatId): """ Функция для получения элементов шаблона Parameters ---------- el шаблон chatId id чата. """ listPattern = [] patterns = databaseHelper.get(chatId, 'patterns') pattern = '' for i in range(0, len(patterns)): if patterns[i][0] == el: pattern = patterns[i] break for i in pattern[1]: listPattern.append( types.InlineKeyboardButton(i, callback_data=createCallbackData( 'patternItem', el=(str(i) + ';' + str(el))))) return listPattern
def check_win(smb, chat_id): field = databaseHelper.get(chat_id, 'field') for n in range(3): check_line(field[n][0], field[n][1], field[n][2], smb, chat_id) check_line(field[0][n], field[1][n], field[2][n], smb, chat_id) check_line(field[0][0], field[1][1], field[2][2], smb, chat_id) check_line(field[2][0], field[1][1], field[0][2], smb, chat_id)
def check_tasks(current_chat_id): """ Функция вывода напоминания Parameters ---------- current_chat_id id текущего пользователя """ tasks = databaseHelper.get(current_chat_id, 'tasks') tasksMessage = "" if len(tasks) > 0: for number, task in enumerate(tasks, 1): task_days = get_days_task(task) if task_days is not None and task_days <= 1: tasksMessage += "<b><i>%s.</i></b> %s\n" % ( number, task["description"]) tasksMessage += "🥵 Напоминание! До дедлайна этих задач осталось меньше дня!" bot.send_message(current_chat_id, tasksMessage, reply_markup=None, parse_mode='html')
def showEvents(message): """ Функция для показа списка мероприятий, и клавиатуры, С возможностью добавления мероприятий, а также инлайн-клавиатуры Для возможности удаления мероприятий. Parameters ---------- message Объект message. """ # keyboard markup = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True) addEventButton = types.KeyboardButton(config.addEventLabel) goMainMenuButton = types.KeyboardButton(config.goMainMenu) markup.add(addEventButton, goMainMenuButton) # working with json currentChatId = message.chat.id databaseHelper.save(currentChatId, 'prevMenuId', 0) databaseHelper.save(currentChatId, 'status', 0) # sending events = databaseHelper.get(currentChatId, 'events') botMessage = "" if len(events) <= 0: botMessage = "<b>Добро пожаловоть в мероприятия.</b>\n\n" botMessage += "<i>Здесь мы будем создавать события,</i>" botMessage += "<i>про которые мы не хотим забыть</i>" botMessage += "<i>(нажмите кнопку добавить мероприятие)</i>" elif len(events) <= 5: botMessage = "<b>Вот список твоих мероприятий:</b>\n" botMessage += "<i>(сегодняшние мероприятия помечены значком 💣)</i>" else: botMessage = "<b>Вот список твоих мероприятий:📋😥:</b>\n" botMessage += "<i>(сегодняшние мероприятия помечены значком 💣)</i>" bot.send_message(message.chat.id, botMessage, reply_markup=markup, parse_mode='html') if len(events) > 0: eventsMessage = "" for number, event in enumerate(events, 1): if event["date"] == "29.04.2020": eventsMessage += "💣<b><i>%s.</i></b> %s %s %s \n" % ( number, event["date"], event["time"], event["eventsName"]) else: eventsMessage += "<b><i>%s.</i></b> %s %s %s \n" % ( number, event["date"], event["time"], event["eventsName"]) inlineMarkup = types.InlineKeyboardMarkup(row_width=1) crumbButton = types.InlineKeyboardButton('☰', callback_data='editevents') inlineMarkup.add(crumbButton) bot.send_message(message.chat.id, eventsMessage, reply_markup=inlineMarkup, parse_mode='html') else: pass
def start_new_game(message): chat_id = message.chat.id message_id = message.message_id status = databaseHelper.get(chat_id, 'status') if status == 12: field = new_game(message) showField(chat_id, message_id, var=1) return True
def duplication(date, message, var, chatId): """ Дублирование элементов расписание. Parameters ---------- date дата дд.мм.гггг message Объект message. var Вариант работы функции chatId id чата. """ listDate = date.split('.') listNumDate = [] for i in listDate: listNumDate.append(int(i)) pass date = datetime.date(listNumDate[0], listNumDate[1], listNumDate[2]) if var == 1: nextDate = getNextDate(chatId, date, 7) if ishas(databaseHelper.get(chatId, 'timetable'), nextDate) == False: addTimetableItem(chatId, message, var=1, vardup=1) else: addTimetableItem(chatId, message, var=0, vardup=1) elif var == 2: nextDate = getNextDate(chatId, date, 14) if ishas(databaseHelper.get(chatId, 'timetable'), nextDate) == False: addTimetableItem(chatId, message, var=1, vardup=1) else: addTimetableItem(chatId, message, var=0, vardup=1) elif var == 3: listDay = [7, 14, 21, 28] for i in listDay: nextDate = getNextDate(chatId, date, i) if ishas(databaseHelper.get(chatId, 'timetable'), nextDate) == False: addTimetableItem(chatId, message, var=1, vardup=1) else: addTimetableItem(chatId, message, var=0, vardup=1) return True
def addTaskDone(message): """ Добавляет задачу в список дел пользователя Если активен статус добавления, т.е. status == 1 Parameters ---------- message Объект message """ # working with json currentChatId = message.chat.id status = databaseHelper.get(currentChatId, 'status') if status == 1: tasks = databaseHelper.get(currentChatId, 'tasks') task = message.text # if task.find("*") != -1: # taskDescription = task.split("*")[0] # taskDate = task.split("*")[1] # try: # taskDate = str(dt.datetime.strptime(taskDate, '%d.%m.%Y').date()) # except Exception: # print("Date error.") # else: # taskDate = "no date" # if task.find("[") != -1: # taskPrior = int(task.split("[")[1][:-1]) # else: # taskPrior = 3 # taskDescription = task.split("*")[0].split("[")[0] newTask = {"description": task, "date": "no date", "taskPrior": 3} tasks.insert(0, newTask) databaseHelper.save(currentChatId, 'tasks', tasks) bot.send_message(message.chat.id, config.isAddedTask, reply_markup=None) showTasks(message) return True else: return False
def showTasks(message): """ Функция для показа списка дел, и клавиатуры, С возможностью добавления задач, а также инлайн-клавиатуры Для возможности удаления задач. Parameters ---------- message Объект message """ # keyboard markup = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True) addTaskButton = types.KeyboardButton(config.addTaskLabel) goMainMenuButton = types.KeyboardButton(config.goMainMenu) markup.add(addTaskButton, goMainMenuButton) # working with json currentChatId = message.chat.id databaseHelper.save(currentChatId, 'prevMenuId', 0) databaseHelper.save(currentChatId, 'status', 0) # sending tasks = databaseHelper.get(currentChatId, 'tasks') botMessage = "" if len(tasks) <= 0: botMessage = "<b>Вот твой список дел 📋😎:</b>\n\n" botMessage += "<i>Ты тоже заметил, что он пуст?</i>" elif len(tasks) <= 5: botMessage = "<b>Вот твой список дел 📋😎:</b>\n" else: botMessage = "<b>Вот твой список дел 📋😥:</b>\n" bot.send_message(message.chat.id, botMessage, reply_markup=markup, parse_mode='html') # tasks.sort(key=itemgetter('taskPrior')) # print(tasks) if len(tasks) > 0: tasksMessage = "" for number, task in enumerate(tasks, 1): tasksMessage += "<b><i>%s.</i></b> %s" % (number, task["description"]) # print(task) # print(generateDeadline(task)) tasksMessage += generateDeadline(task) inlineMarkup = types.InlineKeyboardMarkup(row_width=1) crumbButton = types.InlineKeyboardButton('☰', callback_data='editTasks') inlineMarkup.add(crumbButton) bot.send_message(message.chat.id, tasksMessage, reply_markup=inlineMarkup, parse_mode='html') else: pass
def check_line(a1, a2, a3, smb, chat_id): if a1 == smb and a2 == smb and a3 == smb: game_run = databaseHelper.get(chat_id, 'game_run') game_run = False databaseHelper.save(chat_id, 'game_run', game_run) bot.send_message( chat_id=chat_id, text='Победил ' + smb + '\nНажми на кнопку "Новая игра", если ночешь сыкрать еще раз\nИли на кнопку "Назад", если хочешь вернутся в гланое меню', reply_markup=None)
def addEventDone(message): """ Добавляет задачу в список дел пользователя Если активен статус добавления, т.е. status == 2 Parameters ---------- message Объект message. """ # working with json currentChatId = message.chat.id status = databaseHelper.get(currentChatId, 'status') if status == 2: events = databaseHelper.get(currentChatId, 'events') eventMessage = message.text eventMessageList = eventMessage.split() eventTime = eventMessageList[0] eventDate = eventMessageList[1] eventsName = eventMessageList[2] newEvent = { "time": eventTime, "date": eventDate, "eventsName": eventsName } events.append(newEvent) databaseHelper.save(currentChatId, 'events', events) bot.send_message(message.chat.id, "Мероприятие добавлено", reply_markup=None) # if validate_iso(eventTime) ==True or validate_iso(eventDate)==True: # else: # bot.send_message(message.chat.id, "Некоректный ввод", reply_markup=None) # pass return True else: return False
def set_reminds_status(message): """ Функция включения/выключения напоминаний Parameters ---------- message Объект message """ current_chat_id = message.chat.id remind_status = databaseHelper.get(current_chat_id, 'reminds') new_status = "ON" if remind_status == "OFF" else "OFF" databaseHelper.save(current_chat_id, 'reminds', new_status) showMainMenu(message)
def showField(chat_id, message_id=0, var=0): field = databaseHelper.get(chat_id, 'field') markup = types.InlineKeyboardMarkup(row_width=3) row = [] for i in range(3): for j in range(3): row.append( telebot.types.InlineKeyboardButton( field[i][j], callback_data='btn_click' + ';' + str(i) + ';' + str(j) + ';' + field[i][j])) markup.row(*row) row = [] if var == 0: bot.edit_message_text(chat_id=chat_id, message_id=message_id, text='Ваш ход', reply_markup=markup) elif var == 1: bot.send_message(chat_id=chat_id, text='Ваш ход', reply_markup=markup)
def tasksCallback(call): """ Функция-обработчик инлайн событий Для задач: вывод задач и иконки, Удаление задач и возвращение назад к списку. Parameters ---------- call Объект call """ # working with json currentChatId = call.message.chat.id tasks = databaseHelper.get(currentChatId, 'tasks') checkData = "" try: checkData = separateCallbackData(call.data) except Exception: checkData = "error" print("Error separating...") if checkData[0] == "XDAY": taskDate = checkData[3] + '.' + '0' + checkData[2] + '.' + checkData[1] id = checkData[4] # print(id) taskDate = str(dt.datetime.strptime(taskDate, '%d.%m.%Y').date()) newTasks = tasks task = tasks[int(id) - 1] newTask = { "description": task["description"], "date": taskDate, "taskPrior": task["taskPrior"] } newTasks.pop(int(id) - 1) newTasks.insert(0, newTask) databaseHelper.save(currentChatId, 'tasks', newTasks) createTasksDoneMarkup(call, newTasks) elif (checkData[0] == 'XPREV-MONTH'): if (int(checkData[2]) == 1): markup = createCalendar(int(checkData[1]) - 1, 12, id=checkData[4]) else: markup = createCalendar(int(checkData[1]), int(checkData[2]) - 1, id=checkData[4]) bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="Пожалуйста, выберите дату", reply_markup=markup) elif (checkData[0] == 'XNEXT-MONTH'): if (int(checkData[2]) == 12): markup = createCalendar(int(checkData[1]) + 1, 1, id=checkData[4]) else: markup = createCalendar(int(checkData[1]), int(checkData[2]) + 1, id=checkData[4]) bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="Пожалуйста, выберите дату", reply_markup=markup) elif call.data == 'editTasks': # sending createTasksDoneMarkup(call, tasks) elif call.data == 'tasksEditDone': # tasks.sort(key=itemgetter('taskPrior')) if len(tasks) > 0: tasksMessage = "" for number, task in enumerate(tasks, 1): tasksMessage += f"<b><i>{number}.</i></b> {task['description']}" tasksMessage += generateDeadline(task) inlineMarkup = types.InlineKeyboardMarkup(row_width=1) crumbButton = types.InlineKeyboardButton('☰', callback_data='editTasks') inlineMarkup.add(crumbButton) bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=tasksMessage, reply_markup=inlineMarkup, parse_mode='html') else: botMessage = "<i>Ты тоже заметил, что он пуст?</i>" bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=botMessage, reply_markup=None, parse_mode='html') elif call.data.find('EditTaskID=') != -1: newTasks = tasks for number, task in enumerate(tasks, 1): EditTaskId = "EditTaskID=" + str(number) delTaskId = "" setDeadLineId = "" setPriorId = "" if call.data == EditTaskId: delTaskId = "DelTaskID=" + str(number) setDeadLineId = "DeadLineTaskID=" + str(number) setPriorId = "PriorTaskID=" + str(number) setDeadlineButton = types.InlineKeyboardButton( "Установить дедлайн", callback_data=setDeadLineId) setPriorButton = types.InlineKeyboardButton( "Поставить приоритет", callback_data=setPriorId) deleteButton = types.InlineKeyboardButton( "Удалить задачу", callback_data=delTaskId) doneButton = types.InlineKeyboardButton( config.doneLabel, callback_data='editTasks') markup = types.InlineKeyboardMarkup(row_width=2) markup.add(setDeadlineButton, setPriorButton, deleteButton) markup.row(doneButton) bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="Настрой задачу под себя!", reply_markup=markup) break elif call.data.find('DeadLineTaskID=') != -1: newTasks = tasks for number, task in enumerate(tasks, 1): deadlineTaskId = "DeadLineTaskID=" + str(number) EditTaskId = "EditTaskID=" + str(number) if call.data == deadlineTaskId: markup = createCalendar(id=str(number)) doneButton = types.InlineKeyboardButton( config.doneLabel, callback_data=EditTaskId) clearDeadline = types.InlineKeyboardButton( "Убрать дедлайн", callback_data=f'CleadDeadLineID={number}') markup.row(clearDeadline) markup.row(doneButton) bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=config.selectDate, reply_markup=markup) break elif call.data.find('CleadDeadLineID=') != -1: newTasks = tasks for number, task in enumerate(tasks, 1): cleardeadlineTaskId = "CleadDeadLineID=" + str(number) EditTaskId = "EditTaskID=" + str(number) if call.data == cleardeadlineTaskId: task = newTasks[int(number) - 1] newTask = { "description": task["description"], "date": "no date", "taskPrior": task["taskPrior"] } newTasks.pop(int(number) - 1) newTasks.insert(0, newTask) databaseHelper.save(currentChatId, 'tasks', newTasks) createTasksDoneMarkup(call, newTasks) break elif call.data.find('PriorTaskID=') != -1: newTasks = tasks for number, task in enumerate(tasks, 1): priorTaskId = "PriorTaskID=" + str(number) EditTaskId = "EditTaskID=" + str(number) if call.data == priorTaskId: doneButton = types.InlineKeyboardButton( config.doneLabel, callback_data=EditTaskId) markup = types.InlineKeyboardMarkup(row_width=3) oneBtn = types.InlineKeyboardButton( "1", callback_data=f'setPriorID={number}=1') twoBtn = types.InlineKeyboardButton( "2", callback_data=f'setPriorID={number}=2') threeBtn = types.InlineKeyboardButton( "3", callback_data=f'setPriorID={number}=3') markup.add(oneBtn, twoBtn, threeBtn) markup.row(doneButton) bot.edit_message_text( chat_id=call.message.chat.id, message_id=call.message.message_id, text="1 - Очень важно, 2 - важно, 3 - наименее важно", reply_markup=markup) break elif call.data.find('setPriorID=') != -1: newTasks = tasks for number, task in enumerate(tasks, 1): priorTaskId = "setPriorID=" + str(number) if call.data[:-2] == priorTaskId: prior = call.data[len(call.data) - 1] task = newTasks[number - 1] newTask = { "description": task["description"], "date": task["date"], "taskPrior": int(prior) } newTasks.pop(number - 1) newTasks.insert(0, newTask) databaseHelper.save(currentChatId, 'tasks', newTasks) createTasksDoneMarkup(call, newTasks) break elif call.data.find('DelTaskID=') != -1: newTasks = tasks for number, task in enumerate(tasks, 1): delTaskId = "DelTaskID=" + str(number) if call.data == delTaskId: # delete task newTasks.pop(number - 1) databaseHelper.save(currentChatId, 'tasks', newTasks) # sending tasks = databaseHelper.get(currentChatId, 'tasks') if len(tasks) > 0: createTasksDoneMarkup(call, tasks) else: doneButton = types.InlineKeyboardButton( config.doneLabel, callback_data='tasksEditDone') markup = types.InlineKeyboardMarkup(row_width=2) markup.add(doneButton) bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=config.nothingForDelete, reply_markup=markup) break else: pass
def addPatternDone(message): """ Функция для работы с созданием, добавление, изменение, удаление шаблонов. Parameters ---------- message Объект message. """ сhatId = message.chat.id messageId = message.chat.id status = databaseHelper.get(сhatId, 'status') if status == 6: #создание шаблона patterns = databaseHelper.get(сhatId, 'patterns') if valid(message.text, 1, message.chat.id): return True patterns.append([message.text]) databaseHelper.save(сhatId, 'patterns', patterns) bot.send_message( chat_id=сhatId, text= 'Отличное название.\nДавайте теперь его заполнил)\nПример ввода:8 00 9 00 10 00 11 00 ...\nВведите время', reply_markup=None) status = 7 databaseHelper.save(сhatId, 'status', status) return True if status == 7: #заполнение шаблона patterns = databaseHelper.get(сhatId, 'patterns') allTime = message.text.split(" ") time = [] sub = [] listFullTime = [] for i in range(0, len(allTime), 2): if len(allTime) % 2 != 0: bot.send_message(сhatId, 'Некорректное время\nВведите еще раз)', reply_markup=None) return True if valid([allTime[i], allTime[i + 1]], 0, message.chat.id): return True for i in range(0, len(allTime), 2): listFullTime.append(allTime[i] + ':' + allTime[i + 1]) for i in range(0, len(listFullTime)): for j in range(i + 1, len(listFullTime)): if listFullTime[i] == listFullTime[j]: bot.send_message(сhatId, 'Время повторяется\nВведите еще раз)', reply_markup=None) return True for i in range(0, len(allTime), 2): if len(allTime) % 2 != 0: bot.send_message(сhatId, 'Некорректное время\nВведите еще раз)', reply_markup=None) return True if valid([allTime[i], allTime[i + 1]], 0, message.chat.id): return True time.append(allTime[i] + ':' + allTime[i + 1]) if i == len(allTime) - 2: break for i in time: sub.append(' ') index = getIndexForSorting(time) patterns[len(patterns) - 1].append(sorting(time, index, how=2)) patterns[len(patterns) - 1].append(sub) databaseHelper.save(сhatId, 'patterns', patterns) bot.send_message(chat_id=сhatId, text='Шаблон создан', reply_markup=None) showPatterns(patterns, сhatId, messageId, variant=1) return True if status == 8: #изменение названия шаблона patterns = databaseHelper.get(сhatId, 'patterns') el = databaseHelper.get(сhatId, 'el') for i in range(0, len(patterns)): if patterns[i][0] == el: patterns[i][0] = message.text break databaseHelper.save(сhatId, 'patterns', patterns) showPatterns(patterns, сhatId, messageId, variant=1) return True if status == 9: # изменение элемента шаблона patterns = databaseHelper.get(сhatId, 'patterns') el = databaseHelper.get(сhatId, 'el') name = el.split(';')[1] time = el.split(';')[0] allTime = message.text.split(" ") for i in range(0, len(allTime), 2): if len(allTime) % 2 != 0: bot.send_message(сhatId, 'Некорректное время\nВведите еще раз)', reply_markup=None) return True if valid([allTime[i], allTime[i + 1]], 0, message.chat.id): return True if valid([message.text.split(" ")[0], message.text.split(" ")[1]], 0, message.chat.id): return True newTime = message.text.split(" ")[0] + ':' + message.text.split(" ")[1] patterns = databaseHelper.get(сhatId, 'patterns') pattern = '' for i in range(0, len(patterns)): if patterns[i][0] == name: pattern = patterns[i] for j in range(0, len(pattern[1])): if pattern[1][j] == time: pattern[1][j] = newTime index = getIndexForSorting(pattern[1]) pattern[1] = sorting(pattern, index, how=0) break break databaseHelper.save(сhatId, 'patterns', patterns) showPatterns(patterns, сhatId, messageId, variant=1) return True return True
def addTimetableItem(chatId, message, var=0, vardup=0): """ Добавление элемента расписание Parameters ---------- chatId id чата. message Объект message. var Вариант работы функции vardup Вариант работы функции """ date = databaseHelper.get(chatId, 'date') timetable = ishas(databaseHelper.get(chatId, 'timetable'), date) timetables = databaseHelper.get(chatId, 'timetable') if (var == 0): timetables.remove(timetable) if (vardup == 0): text = message.text.split(" ") else: text = message.split(" ") if valid(text, 0, chatId): return True fullTime = text[0] + ':' + text[1] if var == 0 and valid(timetable[1], 2, chatId, tmpif=fullTime): return True if (var == 0): timetable[1].append(fullTime.strip()) fullSub = ' ' for i in range(2, len(text)): fullSub += text[i] + ' ' if valid(fullSub, 1, chatId): return True if (var == 0): timetable[2].append(fullSub) index = getIndexForSorting(timetable[1]) timetable[1] = sorting(timetable, index, how=0) timetable[2] = sorting(timetable, index, how=1) timetables.append(timetable) elif (var == 1): time = [] time.append(fullTime.strip()) sub = [] sub.append(fullSub) timetables.append([date, time, sub]) databaseHelper.save(chatId, 'timetable', timetables) if vardup == 0: status = 10 databaseHelper.save(chatId, 'el', message.text) databaseHelper.save(chatId, 'status', status) bot.send_message( chatId, 'Дублирование:\n0 - нет\n 1 - на следующую неделю\n 2 - через неделю\n 3 - на 4 недели вперед', reply_markup=None) return True
def addTimetableDone(message): """ Функция для работы с созданием, добавление, изменение, удаление расписание. Parameters ---------- message Объект message. """ currentChatId = message.chat.id status = databaseHelper.get(currentChatId, 'status') if status == 3: #Создание расписания addTimetableItem(currentChatId, message, var=1) elif status == 4: #Добавление нового элемента к расписанию addTimetableItem(currentChatId, message) elif status == 5: #Изменение предмета\время timetables = databaseHelper.get(currentChatId, 'timetable') date = databaseHelper.get(currentChatId, 'date') whence = databaseHelper.get(currentChatId, 'el').split(";")[ 0] #переменная от которой зависит, что будет изменено el = databaseHelper.get(currentChatId, 'el').split(";")[1] timetable = ishas(timetables, date) timetables.remove(timetable) index = 0 if (whence == 'time'): index = timetable[1].index(el) text = message.text.split(" ") if valid(text, 0, message.chat.id): return True fullTime = text[0] + ':' + text[1] if valid( timetable[1], 2, message.chat.id, tmpif=fullTime, ): return True timetable[1][index] = fullTime if (whence == 'subject'): index = timetable[2].index(el) timetable[2][index] = message.text index = getIndexForSorting(timetable[1]) timetable[1] = sorting(timetable, index, how=0) timetable[2] = sorting(timetable, index, how=1) timetables.append(timetable) databaseHelper.save(currentChatId, 'timetable', timetables) timetable = ishas(timetables, date) showTimetable(currentChatId, message.chat.id, timetables, date, variant=1) return True elif status == 10: #Обработка вариантов дублирования if not (message.text.isnumeric()) or int(message.text) < 0 or int( message.text) > 3: bot.send_message(message.chat.id, 'Выбранного варианта не существует', reply_markup=None) return True date = databaseHelper.get(currentChatId, 'date') msg = databaseHelper.get(currentChatId, 'el') timetables = databaseHelper.get(currentChatId, 'timetable') var = int(message.text) if var == 0: showTimetable(currentChatId, message.chat.id, timetables, date, variant=1) return True elif var == 1: duplication(date, msg, var, currentChatId) showTimetable(currentChatId, message.chat.id, timetables, date, variant=1) return True elif var == 2: duplication(date, msg, var, currentChatId) showTimetable(currentChatId, message.chat.id, timetables, date, variant=1) return True elif var == 3: duplication(date, msg, var, currentChatId) showTimetable(currentChatId, message.chat.id, timetables, date, variant=1) return True return True
def calendarCallback(call): """ Колбеки для всего модуля timetable. Parameters ---------- call Объект call. """ chatId = call.message.chat.id messageId = call.message.message_id markup = telebot.types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=1) buttonTimetableBack = telebot.types.KeyboardButton('Назад') markup.add(buttonTimetableBack) data = separateCallbackData(call.data) if call.data == 'new': prevID = config.IDshowTimetableMenu status = 3 databaseHelper.save(chatId, 'prevMenuId', prevID) databaseHelper.save(chatId, 'status', status) bot.send_message(chatId, config.enterTimeSubject, reply_markup=None) elif call.data == 'add': prevID = config.IDshowTimetableMenu status = 4 databaseHelper.save(chatId, 'prevMenuId', prevID) databaseHelper.save(chatId, 'status', status) bot.send_message(chatId, config.enterTimeSubject, reply_markup=None) elif call.data == 'edit': # изменение выбранного элемента расписания prevID = config.IDshowTimetableMenu status = 5 databaseHelper.save(chatId, 'prevMenuId', prevID) databaseHelper.save(chatId, 'status', status) bot.send_message(chatId, 'Введите:', reply_markup=None) elif call.data == 'del': # удаление всей строчки расписания timetables = databaseHelper.get(chatId, 'timetable') date = databaseHelper.get(chatId, 'date') whence = databaseHelper.get(chatId, 'el').split(";")[0] el = databaseHelper.get(chatId, 'el').split(";")[1] timetable = ishas(timetables, date) timetables.remove(timetable) index = 0 if (whence == 'time'): index = timetable[1].index(el) if (whence == 'subject'): index = timetable[2].index(el) timetable[1].pop(index) timetable[2].pop(index) if (len(timetable[1]) != 0): timetables.append(timetable) showTimetable(chatId, messageId, timetables, date) else: showEmptyTimetable(chatId, messageId, date) databaseHelper.save(chatId, 'timetable', timetables) elif call.data == 'pattern': #Вывод всех шаблонов prevID = 5 patterns = databaseHelper.get(chatId, 'patterns') if len(patterns) == 0: showEmptyPattern(chatId, messageId) else: markup = telebot.types.InlineKeyboardMarkup(row_width=2) for i in range(len(patterns)): row = [] name = patterns[i][0] row.append( telebot.types.InlineKeyboardButton( name, callback_data=createCallbackData('thisPattern', el=name))) markup.add(*row) markup.row( telebot.types.InlineKeyboardButton('Добавить', callback_data='addPattern')) bot.edit_message_text(chat_id=chatId, message_id=messageId, text='Шаблоны', reply_markup=markup) elif call.data == 'addPattern': #добавление шаблона prevID = 5 status = 6 databaseHelper.save(chatId, 'prevMenuId', prevID) databaseHelper.save(chatId, 'status', status) bot.send_message(chat_id=chatId, text='Введите название шаблона', reply_markup=None) elif data[0] == 'thisPattern': #работа с выбранным шаблонам prevID = config.IDshowTimetableMenu databaseHelper.save(chatId, 'el', data[4]) delButton = types.InlineKeyboardButton('Удалить шаблон', callback_data='delPattern') editButton = types.InlineKeyboardButton('Изменить название', callback_data='editPattern') applyButton = types.InlineKeyboardButton('Применить', callback_data='applyPattern') markup = types.InlineKeyboardMarkup(row_width=1) markup.add(*getListPattern(data[4], chatId)) markup.row(delButton, editButton, applyButton) bot.edit_message_text(chat_id=chatId, message_id=messageId, text='Шаблоны', reply_markup=markup) elif call.data == 'delPattern': #Удаление шаблона prevID = config.IDshowTimetableMenu patterns = databaseHelper.get(chatId, 'patterns') el = databaseHelper.get(chatId, 'el') for i in range(0, len(patterns)): if patterns[i][0] == el: patterns.pop(i) break pass pass if (len(patterns) != 0): showPatterns(patterns, chatId, messageId) else: showEmptyPattern(chatId, messageId) databaseHelper.save(chatId, 'patterns', patterns) elif call.data == 'editPattern': #Изменение названия шаблона prevID = config.IDshowTimetableMenu status = 8 databaseHelper.save(chatId, 'prevMenuId', prevID) databaseHelper.save(chatId, 'status', status) bot.send_message(chatId, 'Введите новое название', reply_markup=None) elif call.data == 'applyPattern': #Применение шаблона date = databaseHelper.get(chatId, 'date') timetable = [] timetables = databaseHelper.get(chatId, 'timetable') patterns = databaseHelper.get(chatId, 'patterns') el = databaseHelper.get(chatId, 'el') index = 0 for i in range(0, len(patterns)): if patterns[i][0] == el: index = i break pass pass fullSub = ' ' fullTime = ' ' timetable = [date, patterns[index][1], patterns[index][2]] timetables.append(timetable) databaseHelper.save(chatId, 'timetable', timetables) bot.send_message(chatId, 'Шаблон применен', reply_markup=None) showTimetable(chatId, chatId, timetables, date, variant=1) elif data[0] == 'patternItem': #работа с теккущим элементом шаблона prevID = config.IDshowTimetableMenu databaseHelper.save(chatId, 'prevMenuId', prevID) databaseHelper.save(chatId, 'el', data[4] + ';' + data[5]) markup = types.InlineKeyboardMarkup(row_width=2) delButton = types.InlineKeyboardButton('Удалить', callback_data='delItem') editButton = types.InlineKeyboardButton('Изменить', callback_data='editItem') markup.add(delButton, editButton) bot.edit_message_text(chat_id=chatId, message_id=messageId, text='Ваши действия', reply_markup=markup) elif call.data == 'delItem': #удаление элемента шаблона patterns = databaseHelper.get(chatId, 'patterns') el = databaseHelper.get(chatId, 'el') name = el.split(';')[1] time = el.split(';')[0] patterns = databaseHelper.get(chatId, 'patterns') pattern = '' for i in range(0, len(patterns)): if patterns[i][0] == name: pattern = patterns[i] patterns.pop(i) break for i in range(0, len(pattern[1])): if pattern[1][i] == time: pattern[1].pop(i) pattern[2].pop(i) patterns.append(pattern) break databaseHelper.save(chatId, 'patterns', patterns) showPatterns(patterns, chatId, messageId) elif call.data == 'editItem': # изменение выбранного элемента расписания prevID = config.IDshowTimetableMenu status = 9 databaseHelper.save(chatId, 'prevMenuId', prevID) databaseHelper.save(chatId, 'status', status) bot.send_message(chatId, 'Введите:', reply_markup=None) pass elif data[0] == 'time' or data[0] == 'subject': prevID = config.IDshowTimetableMenu databaseHelper.save(chatId, 'prevMenuId', prevID) databaseHelper.save(chatId, 'el', data[0] + ";" + data[4]) delButton = types.InlineKeyboardButton(config.delete, callback_data='del') editButton = types.InlineKeyboardButton(config.change, callback_data='edit') markup = types.InlineKeyboardMarkup(row_width=2) markup.add(delButton, editButton) bot.edit_message_text(chat_id=chatId, message_id=messageId, text=config.whatToDo, reply_markup=markup) elif data[0] == 'DAY': prevID = config.IDshowTimetableMenu databaseHelper.save(chatId, 'prevMenuId', prevID) date = data[1] + '.' + data[2] + '.' + data[3] timetables = databaseHelper.get(chatId, 'timetable') if ishas(timetables, date) != False: showTimetable(chatId, messageId, timetables, date) else: showEmptyTimetable(chatId, messageId, date) elif data[0] == 'PREV-MONTH': if (int(data[2]) == 1): markup = createCalendar(int(data[1]) - 1, 12) else: markup = createCalendar(int(data[1]), int(data[2]) - 1) bot.edit_message_text(chat_id=chatId, message_id=messageId, text="Пожалуйста, выберите дату", reply_markup=markup) elif data[0] == 'NEXT-MONTH': if (int(data[2]) == 12): markup = createCalendar(int(data[1]) + 1, 1) else: markup = createCalendar(int(data[1]), int(data[2]) + 1) bot.edit_message_text(chat_id=chatId, message_id=messageId, text="Пожалуйста, выберите дату", reply_markup=markup)
id текущего пользователя """ tasks = databaseHelper.get(current_chat_id, 'tasks') tasksMessage = "" if len(tasks) > 0: for number, task in enumerate(tasks, 1): task_days = get_days_task(task) if task_days is not None and task_days <= 1: tasksMessage += "<b><i>%s.</i></b> %s\n" % ( number, task["description"]) tasksMessage += "🥵 Напоминание! До дедлайна этих задач осталось меньше дня!" bot.send_message(current_chat_id, tasksMessage, reply_markup=None, parse_mode='html') if __name__ == '__main__': user_id_list = get_user_id_list() for user_id in user_id_list: remind_status = databaseHelper.get(user_id, 'reminds') print(remind_status) if remind_status == "ON": check_tasks(user_id) else: pass
def eventsCallback(call): """ Функция-обработчик инлайн событий Для задач: вывод задач и иконки, Удаление задач и возвращение назад к списку. Parameters ---------- call Объект call. """ # working with json currentChatId = call.message.chat.id events = databaseHelper.get(currentChatId, 'events') if call.data == 'editevents': # sending createEventsDoneMarkup(call, events) elif call.data == 'eventsEditDone': if len(events) > 0: eventsMessage = "" for number, event in enumerate(events, 1): eventsMessage += f"<b><i>{number}.</i></b> {event['eventsName']}" inlineMarkup = types.InlineKeyboardMarkup(row_width=1) crumbButton = types.InlineKeyboardButton( '☰', callback_data='editevents') inlineMarkup.add(crumbButton) bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=eventsMessage, reply_markup=inlineMarkup, parse_mode='html') else: botMessage = "<i>Ты тоже заметил, что он пуст?</i>" bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=botMessage, reply_markup=None, parse_mode='html') elif call.data.find('DeleventID=') != -1: newevents = events for number, event in enumerate(events, 1): deleventId = "DeleventID=" + str(number) if call.data == deleventId: # delete event newevents.pop(number - 1) databaseHelper.save(currentChatId, 'events', newevents) # sending events = databaseHelper.get(currentChatId, 'events') if len(events) > 0: createEventsDoneMarkup(call, events) else: doneButton = types.InlineKeyboardButton( config.doneLabel, callback_data='eventsEditDone') markup = types.InlineKeyboardMarkup(row_width=2) markup.add(doneButton) bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=config.nothingForDelete, reply_markup=markup) break else: pass