Пример #1
0
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
Пример #2
0
def addEvent(message):
    """
    Функция для создания мероприятия.
    С возможностью выбора даты и добавления времени.

    Parameters
    ----------
    message
        Объект message.
    """

    markup = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True)
    goBackButton = types.KeyboardButton(config.goBack)
    markup.add(goBackButton)
    botMessage = "<b>Как мы назовем это мероприятие?</b>\n\n"
    botMessage += "Формат ввода (hh.mm dd.mm.yy event name)"
    bot.send_message(message.chat.id,
                     botMessage,
                     reply_markup=markup,
                     parse_mode='html')

    # working with json
    currentChatId = message.chat.id
    prevID = config.IDaddEvent
    status = 2
    databaseHelper.save(currentChatId, 'prevMenuId', prevID)
    databaseHelper.save(currentChatId, 'status', status)
    pass
Пример #3
0
def computer_move(chat_id, field):
    for n in range(3):
        if can_win(field, '❌', chat_id, col=[n, n, n]):
            return
        if can_win(field, '❌', chat_id, row=[n, n, n]):
            return
    if can_win(field, '❌', chat_id):
        return
    if can_win(field, '❌', chat_id, col=[2, 1, 0], row=[0, 1, 2]):
        return
    for n in range(3):
        if can_win(field, '⭕️', chat_id, col=[n, n, n]):
            return
        if can_win(field, '⭕️', chat_id, row=[n, n, n]):
            return
    if can_win(field, '⭕️', chat_id):
        return
    if can_win(field, '⭕️', chat_id, col=[2, 1, 0], row=[0, 1, 2]):
        return
    while True:
        row = random.randint(0, 2)
        col = random.randint(0, 2)
        if field[row][col] == '⬜️':
            field[row][col] = '⭕️'
            databaseHelper.save(chat_id, 'field', field)
            break
Пример #4
0
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)
Пример #5
0
def showEmptyTimetable(chatId, messageId, date):
    """
    Просмотр пустого расписание.

    Parameters
    ----------
    chatId
        id чата.
    messageId
        id сообщения.
    date
        дата дд.мм.гггг
    """
    databaseHelper.save(chatId, 'date', date)

    markup = telebot.types.InlineKeyboardMarkup(row_width=2)
    buttonTimetableCreator = telebot.types.InlineKeyboardButton(
        'Создать расписание', callback_data='new')
    buttonPattern = telebot.types.InlineKeyboardButton('Применить шаблон',
                                                       callback_data='pattern')
    markup.row(buttonTimetableCreator)
    markup.row(buttonPattern)
    bot.edit_message_text(chat_id=chatId,
                          message_id=messageId,
                          text='Расписание отсутствует',
                          reply_markup=markup)
Пример #6
0
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
Пример #7
0
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
Пример #8
0
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)
Пример #9
0
def startTTT(message):
    status = 12
    databaseHelper.save(message.chat.id, 'status', status)
    markup = telebot.types.ReplyKeyboardMarkup(resize_keyboard=True,
                                               row_width=1)
    buttonNewGame = telebot.types.KeyboardButton('Новая игра')
    goMainMenu = telebot.types.KeyboardButton(config.goMainMenu)
    markup.add(buttonNewGame, goMainMenu)
    bot.send_message(
        chat_id=message.chat.id,
        text=
        'Добро пожаловать в игру "крестики-нолики"\nПравила просты:\n1.Ты - ❌, соперник - ⭕️\n2.Соберешь три-в-ряд и ты победил\nНажми на кнопку "Новая игра" и играй',
        reply_markup=markup)
Пример #10
0
def goMainMenu(message):
    """
    Функция возврата в главное меню

    Parameters
    ----------
    message
        Объект message
    """
    # working with json
    currentChatId = message.chat.id
    databaseHelper.save(currentChatId, 'prevMenuId', 0)
    databaseHelper.save(currentChatId, 'status', 0)
    # call mm
    showMainMenu(message)
Пример #11
0
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)
Пример #12
0
def showTimetable(chatId, messageId, timetables, date, variant=0):
    """
    Просмотр расписание.

    Parameters
    ----------
    chatId
        id чата.
    messageId
        id сообщения.
    date
        дата дд.мм.гггг
    timetables
        Объект timetable
    variant
        Вариант работы функции
    """
    timetable = ishas(timetables, date)

    markup = telebot.types.InlineKeyboardMarkup(row_width=2)

    for i in range(len(timetable[1])):
        row = []
        time = timetable[1][i]
        subject = str(timetable[2][i])
        row.append(
            telebot.types.InlineKeyboardButton(
                time, callback_data=createCallbackData('time', el=time)))
        row.append(
            telebot.types.InlineKeyboardButton(
                subject,
                callback_data=createCallbackData('subject', el=subject)))
        markup.add(*row)

    markup.row(
        telebot.types.InlineKeyboardButton('Добавить', callback_data='add'))

    if variant == 0:
        bot.edit_message_text(chat_id=chatId,
                              message_id=messageId,
                              text=date,
                              reply_markup=markup)
    elif variant == 1:
        bot.send_message(chat_id=chatId, text=date, reply_markup=markup)

    databaseHelper.save(chatId, 'date', date)
Пример #13
0
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
Пример #14
0
def addTimetables(message):
    """
    Добавления расписания.

    Parameters
    ----------
    message
        Объект message.
    """
    prevID = config.IDshowTasksMenu
    chatId = message.chat.id
    status = 3

    databaseHelper.save(chatId, 'prevMenuId', prevID)
    databaseHelper.save(chatId, 'status', status)

    bot.send_message(chatId,
                     'Введите: время(16 00) и предмет(Программная инженерия)',
                     reply_markup=None)
Пример #15
0
def showHelp(message):
    """
    Функция вывода сообщения для команды /help

    Parameters
    ----------
    message
        Объект message
    """
    botMessage = f"<b>{message.from_user.first_name}</b>, {config.helpMessage}"
    bot.send_message(message.chat.id,
                     botMessage,
                     reply_markup=None,
                     parse_mode='html')
    helpSticker = open('static/img/nobodycares.tgs', 'rb')
    bot.send_sticker(message.chat.id, helpSticker)
    # working with json
    currentChatId = message.chat.id
    databaseHelper.save(currentChatId, 'prevMenuId', 0)
    databaseHelper.save(currentChatId, 'status', 0)
Пример #16
0
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
Пример #17
0
def messageTimetableMenu(message):
    """
    Выводит календарь.

    Parameters
    ----------
    message
        Объект message.
    """
    prevID = config.IDmainMenu
    chatId = message.chat.id

    databaseHelper.save(chatId, 'prevMenuId', prevID)

    markup = telebot.types.ReplyKeyboardMarkup(resize_keyboard=True,
                                               row_width=1)
    buttonTimetableBack = telebot.types.KeyboardButton('Назад')
    markup.add(buttonTimetableBack)
    bot.send_message(chatId, '.', reply_markup=markup)
    markup = createCalendar()
    bot.send_message(chatId, config.selectDate, reply_markup=markup)
Пример #18
0
def getNextDate(chatId, date, day):
    """
    Функция для получения следующей даты.

    Parameters
    ----------
    date
        дата дд.мм.гггг
    day
        Номер шага
    chatId
        id чата.
    """
    nextDate = date + datetime.timedelta(days=day)
    nextDate = str(nextDate).split('-')
    for i in range(0, len(nextDate)):
        nextDate[i] = str(int(nextDate[i]))

    nextDate = '.'.join(nextDate)
    databaseHelper.save(chatId, 'date', nextDate)
    return nextDate
Пример #19
0
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)
Пример #20
0
def addTask(message):
    """
    Задает статус для добавления задачи
    В базу данных, а также создает клавиатуру.

    Parameters
    ----------
    message
        Объект message
    
    """
    markup = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True)
    goBackButton = types.KeyboardButton(config.goBack)
    markup.add(goBackButton)
    bot.send_message(message.chat.id,
                     config.whatDoYouWantAdd,
                     reply_markup=markup)
    # working with json
    currentChatId = message.chat.id
    prevID = config.IDshowTasksMenu
    status = 1
    databaseHelper.save(currentChatId, 'prevMenuId', prevID)
    databaseHelper.save(currentChatId, 'status', status)
Пример #21
0
def new_game(message):
    field = []
    listCol = []
    for row in range(3):
        for col in range(3):
            listCol.append('⬜️')
        field.append(listCol)
        listCol = []
    databaseHelper.save(message.chat.id, 'game_run', True)
    databaseHelper.save(message.chat.id, 'cross_count', 0)
    databaseHelper.save(message.chat.id, 'field', field)
    return field
Пример #22
0
def can_win(field, smb, chat_id, col=[0, 1, 2], row=[0, 1, 2]):
    res = False
    if field[col[0]][row[0]] == smb and field[col[1]][row[1]] == smb and field[
            col[2]][row[2]] == ' ':
        field[col[2]][row[2]] = '⭕️'
        databaseHelper.save(chat_id, 'field', field)
        res = True
    if field[col[0]][row[0]] == smb and field[col[1]][row[1]] == ' ' and field[
            col[2]][row[2]] == smb:
        field[col[1]][row[1]] = '⭕️'
        databaseHelper.save(chat_id, 'field', field)
        res = True
    if field[col[0]][row[0]] == ' ' and field[col[1]][row[1]] == smb and field[
            col[2]][row[2]] == smb:
        field[col[0]][row[0]] = '⭕️'
        databaseHelper.save(chat_id, 'field', field)
        res = True
    return res
Пример #23
0
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
Пример #24
0
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
Пример #25
0
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
Пример #26
0
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
Пример #27
0
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
Пример #28
0
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)