Example #1
0
def addToQueue(id, num_in_shopList=None, shop_id=None):
    global userList, shopList
    if not shop_id:
        j = 0
        for g_id, shop_json in shopList.items():
            if shop_json.isActive:
                j += 1
            if j == num_in_shopList:
                shop_id = g_id
                break
    if (shop_id
            in userList[id].myQueue.keys()) or (id in shopList[shop_id].queue):
        bot.send_message(
            id,
            f"Вы уже были добавлены в {shopList[shop_id].name}, Ваш номер {userList[id].myQueue[shop_id]}"
        )
        userList[id].flag = "home"
        return answer_maker(id, "")
    shopList[shop_id].queue.append(id)
    userList[id].myQueue[shop_id] = len(shopList[shop_id].queue)
    bot.send_message(
        id,
        f"Мы Вас записали в {shopList[shop_id].name} на место {len(shopList[shop_id].queue)}"
    )
    notification(shopList[shop_id].id,
                 f"В ваш магазин записался {userList[id].user_login} ", "shop")
    userList[id].flag = "home"
    return answer_maker(id, "")
Example #2
0
def notification(id, message, type):
    try:

        if (userList[id].notification_client
                and type == "client") or (userList[id].notification_shop
                                          and type == "shop"):
            bot.send_message(id, message)
    except Exception as e:
        print("error nitification")
Example #3
0
def getMyPosition(id):
    global userList, shopList
    if userList[id].myQueue == {}:
        bot.send_message(id, f"У вас нет записей")
        userList[id].flag = "home"
        return answer_maker(id, "")
    else:
        mes = ""
        j = 0
        for shop_id, num in userList[id].myQueue.items():
            j += 1
            mes += f"{j}.{shopList[shop_id].name} // Вы {num} из {len(shopList[shop_id].queue)}  \n"
        bot.send_message(id, mes)
        userList[id].flag = "home"
        return answer_maker(id, "")
Example #4
0
def printShopList(id):
    global userList, shopList
    j = 0
    mes = ""
    for shop_id, shopObject in shopList.items():
        if shopObject.isActive:
            j += 1
            if shop_id in userList[id].myQueue:
                mes = mes + f"{j}: {shopObject.name} // Вы {userList[id].myQueue[shop_id]} из {len(shopObject.queue)} человек\n"
            else:
                mes = mes + f"{j}: {shopObject.name} // Всего {len(shopObject.queue)} человек\n"
    if (len(shopList) == 0) or (j == 0):
        bot.send_message(id, "Магазины еще не добавлены")
        return False
    bot.send_message(id, mes)
    return True
Example #5
0
def delTalonByNumber(id, number):
    global userList, shopList
    j = 0
    for shop_id, num in userList[id].myQueue.items():
        j += 1
        if number == str(j):
            place = userList[id].myQueue[shop_id]
            del userList[id].myQueue[shop_id]
            del shopList[shop_id].queue[get_number(shopList[shop_id].queue,
                                                   id)]
            bot.send_message(
                id, f"Ваш талон в {shopList[shop_id].name } был удален")
            notification(
                shopList[shop_id].id,
                f"Пользователь {userList[id].user_login} отменил запись\nЕго место было номер {place}",
                "shop")
            userList[id].flag = "home"
            return answer_maker(id, "")
    userList[id].flag = "cancel_talon"
    bot.send_message(id, "Ошибка ввода")
    return answer_maker(id, "")
Example #6
0
def adminMessage(id, message):
    if not id:
        for user_id in userList.keys():
            bot.send_message(user_id, f"Сообщение от админа:\n{message}")
    else:
        bot.send_message(id, message)
Example #7
0
def printData(id):
    global userList, shopList, shopNames, quickTalon
    bot.send_message(
        id,
        f"Пользователи:\n{printDic(userList)}\n\nМагазины\n{printDic(shopList)}\n\nНазвани магазинов\n{printList(shopNames)}\n\nСписок талонов\n{printTalons(quickTalon)}"
    )
Example #8
0
def client_answer_maker(_id, message=None):
    global userList, shopList, queue
    try:
        if userList[_id].flag == "show_shop_list":
            printShopList(_id)
            userList[_id].flag = "home"
            return answer_maker(_id, "")
        if userList[_id].flag == "notification":
            if userList[_id].notification_client:
                userList[_id].notification_client = False
                bot.send_message(_id, "Уведомления для клиента отключены")
            else:
                userList[_id].notification_client = True
                bot.send_message(_id, "Уведомления для клиента включены")
            userList[_id].flag = "home"
            return answer_maker(_id, "")
        if userList[_id].flag == "home":
            keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True)
            keyboard1.row("Быстрая запись")
            keyboard1.row("Cписок магазинов", "Встать в очередь",
                          "Какой я в очереди")
            if userList[_id].notification_client:
                notific = "Отключить уведомления"
            else:
                notific = "Включить уведомления"
            keyboard1.row("Отменить запись", notific, "Выйти")
            bot.send_message(_id, "Выбери действие", reply_markup=keyboard1)
            return "wait_choise"
        if userList[_id].flag == "get_talon":
            bool = printShopList(_id)
            if bool:
                keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True)
                keyboard1.row("1", "2", "3")
                keyboard1.row("4", "5", "6")
                keyboard1.row("7", "8", "Домой")
                bot.send_message(_id,
                                 "Выбери магазин в котором встать в очередь\n",
                                 reply_markup=keyboard1)
                return "wait_shop_num"
            else:
                bot.send_message(_id, f"Магазинов еще нет")
                userList[_id].flag = "home"
                return answer_maker(_id, "")
        if userList[_id].flag == "quick_talon_message":
            keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True)
            keyboard1.row("Домой", "Выйти")
            bot.send_message(_id, "Введите ваш талон", reply_markup=keyboard1)
            return "quick_talon_wait"
        if userList[_id].flag == "quick_talon_wait":
            shop_id = get_key(quickTalon, int(message))
            if not shop_id:
                keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True)
                keyboard1.row("Ввести талон", "Домой")
                bot.send_message(_id,
                                 f"Такого талона нет\n Что будем делать:",
                                 reply_markup=keyboard1)
                return "quick_talon_wait"
            else:
                return addToQueue(_id, None, int(shop_id))
        if userList[_id].flag == "wait_shop_num":
            try:
                num = int(message)
                return addToQueue(_id, num)
            except Exception as e:
                print("numer_error")
                bot.send_message(_id, "Введите корректный номер")
                keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True)
                keyboard1.row("1", "2", "3")
                keyboard1.row("4", "5", "6")
                keyboard1.row("7", "8", "Домой")
                bot.send_message(_id,
                                 "Выбери магазин в котором встать в очередь\n",
                                 reply_markup=keyboard1)
                printShopList(_id)
                return "wait_shop_num"
        if userList[_id].flag == "cancel_talon":
            if userList[_id].myQueue == {}:
                bot.send_message(_id, "У вас нет записей")
                userList[_id].flag = "home"
                return answer_maker(_id, message)
            else:
                keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True)
                keyboard1.row("1", "2", "3")
                keyboard1.row("4", "5", "6")
                keyboard1.row("7", "8", "Домой")
                bot.send_message(
                    _id,
                    f"Выбери какой талон отменить\n{printMyTalons(_id)}",
                    reply_markup=keyboard1)
                return "wait_talon_del"
        if userList[_id].flag == "wait_talon_del":
            return delTalonByNumber(_id, message)
        if userList[_id].flag == "my_position":
            return getMyPosition(_id)
    except Exception as e:
        print("user_answer_maker_error")
        bot.send_message(_id, "Попробуй выполнить команду еще раз")
        return userList[_id].flag
Example #9
0
def help_message_controller(message):

    bot.send_message(
        message.chat.id,
        f'Запишись онлайн в роли ‍Клиента, и мы пинганем когда будет подходить твой черёд.\nА если ты обслуживаешь эту очередь, спроецируй её в роли Магазина, и к тебе смогут записаться!\n\n\nЗамечания-предложения : @dudeisme ,@k_org '
    )
Example #10
0
def admin_answer_maker(_id, message=None):
    global userList, shopList, shopNames
    try:
        if userList[_id].flag == "home":
            keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True)
            keyboard1.row("Активация магазина", "Удалить магазин")
            keyboard1.row("Данные", "Сообщение админа", "Выйти")
            bot.send_message(_id, "Выбери действие", reply_markup=keyboard1)
            return "wait_choise"
        if userList[_id].flag == "admin_message":
            keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True)
            keyboard1.row("По id пользователя", "Всем пользователям")
            bot.send_message(_id,
                             "Кому отправить сообщение",
                             reply_markup=keyboard1)
            return "admin_message_wait_choise"
        if userList[_id].flag == "admin_message_wait_choise":
            if message.lower() == "по id пользователя".lower():
                bot.send_message(
                    _id, f"Введите айди пользователя\n{adminUserList()}")
                return "admin_wait_id"
            userList[_id].memory = None
            bot.send_message(_id, "Введите ваше сообщение")
            return "admin_message_wait"
        if userList[_id].flag == "admin_wait_id":
            try:
                int(message)
            except Exception as e:
                bot.send_message(_id, "Вы ввели не число, попробуйте еще")
                return "admin_wait_id"
            if int(message) not in userList.keys():
                bot.send_message(
                    _id,
                    f"Такого пользователя нет, Введи другой айди или домой\n{adminUserList()}"
                )
                return "admin_wait_id"
            userList[_id].memory = message
            bot.send_message(_id, f"Введите сообщение для {message}")
            return "admin_message_wait"
        if userList[_id].flag == "admin_message_wait":
            adminMessage(userList[_id].memory, message)
            bot.send_message(_id, "Сообщение отправлено")
            userList[_id].flag = "home"
            return answer_maker(_id, "")
        if userList[_id].flag == "admin_show_data":
            printData(_id)
            userList[_id].flag = "home"
            return answer_maker(_id, "")
        if userList[_id].flag == "admin_del_shop":
            mes = adminShopList()
            if not mes:
                bot.send_message(_id, "Нечего удалять")
                userList[_id].flag = "home"
                return answer_maker(_id, "")
            bot.send_message(_id, f"Введи id магазина для удаления\n{mes}")
            return "admin_wait_del_id"
        try:
            if userList[_id].flag == "admin_wait_del_id":
                bool = delShop(message)
                if not bool:
                    bot.send_message(_id, "Такого магазина нет")
                    bot.send_message(
                        _id,
                        f"Введи id магазина для удаления или можно ВЫЙТИ\n{adminShopList()}"
                    )
                    return "admin_wait_del_id"
                if bool:
                    bot.send_message(_id, f"Магазин {message} успешно удален")
                userList[_id].flag = "home"
                return answer_maker(_id, "")
        except Exception as e:
            bot.send_message(
                _id,
                "Ошибка ввода, попробуй еще или напиши ВЫЙТИ\nВозможно Вы ввели не число"
            )
            bot.send_message(
                _id, f"Введи id магазина для удаления\n{adminShopList()}")
            return "admin_wait_del_id"

        if userList[_id].flag == "admin_active_shop":
            mes = adminShopList()
            if not mes:
                bot.send_message(_id, "Список магазинов пуст")
                userList[_id].flag = "home"
                return answer_maker(_id, "")
            bot.send_message(_id, f"Введи id магазина для активации\n{mes}")
            return "admin_wait_activetion_id"
        try:
            if userList[_id].flag == "admin_wait_activetion_id":
                bool = activeShop(message)
                shop_id = int(message)
                if not bool:
                    bot.send_message(_id, "Такого магазина нет")
                    keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True)
                    keyboard1.row("Домой", "Выйти")
                    bot.send_message(
                        _id,
                        f"Введи id магазина для активации\n{adminShopList()}",
                        reply_markup=keyboard1)
                    return "admin_wait_activetion_id"
                if bool:
                    keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True)
                    keyboard1.row("Активировать магазин", "Сделать неактивным")
                    bot.send_message(
                        _id,
                        f"Что сделать с магазином {shopList[shop_id].name}?\nСейчас его статус isActive={shopList[shop_id].isActive}",
                        reply_markup=keyboard1)
                    print(f"Наш статус {shopList[shop_id].isActive }")
                    userList[_id].memory = shop_id
                    return "admin_wait_activetion_submit"
        except Exception as e:
            bot.send_message(
                _id,
                "Ошибка ввода, попробуй еще или напиши ВЫЙТИ\nВозможно Вы ввели не число"
            )
            keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True)
            keyboard1.row("Домой", "Выйти")
            bot.send_message(
                _id,
                f"Введи id магазина для активации\n{adminShopList()}",
                reply_markup=keyboard1)
            return "admin_wait_activetion_id"
        if userList[_id].flag == "admin_wait_activetion_submit":
            shop_id = userList[_id].memory
            if message.lower() == "активировать магазин":
                shopList[shop_id].isActive = True
                print(f"Наш статус {shopList[shop_id].isActive }")
                userList[_id].flag = "home"
                bot.send_message(
                    _id,
                    f"Магазин {shopList[shop_id].name} успешно активирован")
                return answer_maker(_id, "")
            if message.lower() == "сделать неактивным":
                shopList[shop_id].isActive = False
                print(f"Наш статус {shopList[shop_id].isActive }")
                userList[_id].flag = "home"
                bot.send_message(
                    _id, f"Магазин {shopList[shop_id].name} теперь неактивен")
                return answer_maker(_id, "")

    except Exception as e:
        print("admin_answer_maker_error")
        bot.send_message(_id, "Попробуй выполнить команду еще раз")
        return userList[_id].flag
Example #11
0
def answer_maker(_id, message=None):
    global userList, shopList
    noneKey = telebot.types.ReplyKeyboardMarkup(True, True)
    noneKey.row("Домой", "Выйти")
    try:
        if userList[_id].flag == "admin":
            userList[_id].type_user = "******"
            userList[_id].flag = "home"
            return answer_maker(_id, "")
        if userList[_id].flag == "start":
            keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True)
            keyboard1.row("Клиент", "Магазин")
            bot.send_message(_id, "Выбери свою роль", reply_markup=keyboard1)
            return "wait_type"
        if userList[_id].flag == "exit":
            userList[_id].type_user = ""
            userList[_id].flag = "start"
            return answer_maker(_id, "")
        if userList[_id].flag == "wait_type":
            if message.lower() == "клиент":
                userList[_id].type_user = "******"
                userList[_id].flag = "home"
                return answer_maker(_id, message)
            elif message.lower() == "магазин":
                if _id not in shopList.keys():
                    bot.send_message(_id, f"Создаем Ваш магазин...")
                    bot.send_message(_id,
                                     f"Введите название",
                                     reply_markup=noneKey)
                    return "wait_shop_name"
                userList[_id].type_user = "******"
                bot.send_message(
                    _id, f"Вы вошли в свой магазин {shopList[_id].name}")
                userList[_id].flag = "home"
                return answer_maker(_id, message)
            else:
                bot.send_message(_id, "Вы ввели что-то странное")
                userList[_id].flag = "start"
                return answer_maker(_id, message)
        if userList[_id].flag == "wait_shop_name":
            if message.lower() in shopNames:
                keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True)
                keyboard1.row("Выйти")
                bot.send_message(
                    _id,
                    f"{message} - это имя уже занято, придумайте другое",
                    reply_markup=keyboard1)
                return "wait_shop_name"
            shopList[_id] = Shop(_id, message, isActive=True)
            quickTalon[_id] = shopList[_id].talon
            shopNames.append(message.lower())
            userList[_id].type_user = "******"
            userList[_id].flag = "home"
            bot.send_message(
                _id,
                f"Поздравляю, вы открыли свой магазин {message}\nВаш талон для быстрой записи {shopList[_id].talon}"
            )
            return answer_maker(_id, "")

        if userList[_id].type_user == "client":
            return client_answer_maker(_id, message)
        elif userList[_id].type_user == "shop":
            return shop_answer_maker(_id, message)
        elif userList[_id].type_user == "admin":
            return admin_answer_maker(_id, message)
        else:
            userList[_id].flag = "start"
            return answer_maker(_id, message)
    except Exception as e:
        print("answer_maker_error")
        bot.send_message(_id, "Попробуй выполнить команду еще раз")
        return userList[_id].flag
Example #12
0
def shop_answer_maker(_id, message=None):
    global userList, shopList, shopNames
    try:
        if userList[_id].flag == "home":
            keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True)
            if userList[_id].notification_shop:
                notific = "Отключить уведомления"
            else:
                notific = "Включить уведомления"
            keyboard1.row("Позвать следующего", "Первые 5 клиентов",
                          "Сообщение для очереди")
            keyboard1.row("Название магазина", notific, "Выйти")
            bot.send_message(_id, "Выбери действие", reply_markup=keyboard1)
            return "wait_choise"
        if userList[_id].flag == "shop_message":
            keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True)
            keyboard1.row("Домой", "Выйти")
            bot.send_message(_id,
                             "Введите ваше сообщение",
                             reply_markup=keyboard1)
            return "shop_message_wait"
        if userList[_id].flag == "shop_message_wait":
            shopMessage(_id, f"Сообщение из {shopList[_id].name}:\n{message}")
            userList[_id].flag = "home"
            bot.send_message(_id, "Сообщение отправлено всем клинтам")
            return answer_maker(_id, "")
        if userList[_id].flag == "notification":
            if userList[_id].notification_shop:
                userList[_id].notification_shop = False
                bot.send_message(_id, "Уведомления для магазина отключены ")
            else:
                userList[_id].notification_shop = True
                bot.send_message(_id, "Уведомления для магазина включены ")
            userList[_id].flag = "home"
            return answer_maker(_id, "")
        if userList[_id].flag == "next_client":
            if len(shopList[_id].queue) == 0:
                bot.send_message(_id, "Очередь пустая")
                userList[_id].flag = "home"
                return answer_maker(_id, "")
            else:
                us = shopList[_id].queue[0]
                del userList[us].myQueue[_id]
                del shopList[_id].queue[0]
                decreaseClients(_id, 1)
                if len(shopList[_id].queue) == 0:
                    bot.send_message(
                        _id,
                        f"Пользователь {userList[us].user_login} удален, очерель пустая"
                    )
                else:
                    bot.send_message(
                        _id,
                        f"Пользователь {userList[us].user_login} удален, следующий {userList[shopList[_id].queue[0]].user_login}"
                    )
                    notification(
                        userList[shopList[_id].queue[0]].id,
                        f"Сейчас Ваша очередь в {shopList[_id].name}, можете подходить",
                        "client")
                    if len(shopList[_id].queue) >= 2:
                        notification(
                            userList[shopList[_id].queue[2]].id,
                            f"Перед Вами осталься один человек в {shopList[_id].name}",
                            "client")
                    if len(shopList[_id].queue) >= 3:
                        notification(
                            userList[shopList[_id].queue[1]].id,
                            f"Готовьтесь, вы третий в {shopList[_id].name}",
                            "client")
                notification(
                    userList[shopList[_id].queue[0]].id,
                    f"Спасибо, что восспользовались {shopList[_id].name},\nмы Вас убрали из очереди, Ваш сеанс окончен",
                    "client")
                userList[_id].flag = "home"
                return answer_maker(_id, "")
        if userList[_id].flag == "head_queue":
            n = 5
            k, mes = headQueue(_id, n)
            if k != 0:
                bot.send_message(_id, f'Списко первых {k} клиентов:\n{mes}')
            if k != n:
                bot.send_message(_id, "\n Больше клиентов нет")
            userList[_id].flag = "home"
            return answer_maker(_id, "")
        if userList[_id].flag == "set_shop_name":
            keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True)
            keyboard1.row("Поменять название", "Вернуться")
            bot.send_message(
                _id,
                f"Сейчас магазин называется {shopList[_id].name}\nЧто вы хотите сделать",
                reply_markup=keyboard1)
        if userList[_id].flag == "print_new_shop_name":
            keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True)
            keyboard1.row("Поменять название", "Вернуться")
            bot.send_message(_id, "Введите новое имя", reply_markup=keyboard1)
            return "wait_new_shop_name"
        if userList[_id].flag == "wait_new_shop_name":
            if message.lower() in shopNames:
                keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True)
                keyboard1.row("Домой", "Выйти")
                bot.send_message(_id,
                                 f"{message} уже занято, введи другое",
                                 reply_markup=keyboard1)
                return "wait_new_shop_name"
            else:
                shopNames.append(message.lower())
                shopList[_id].name = message
                bot.send_message(_id,
                                 f"Ваш магазин теперь называется {message}")
                userList[_id].flag = "home"
                return answer_maker(_id, "")
    except Exception as e:
        print("shop_answer_maker_error")
        bot.send_message(_id, "Попробуй выполнить команду еще раз")
        return userList[_id].flag