示例#1
0
def delete_message(user_id, bot):
    bot.delete_message(user_id, str(select_by_id(user_id, "msg_id")))
    pan, tilt, zoom = select_conf_by_id(user_id)
    pan = round(pan, 1)
    tilt = round(tilt, 1)
    zoom = round(zoom, 1)

    msg = bot.send_message(user_id, f"pan={pan},\ntilt={tilt},\nzoom={zoom}")
    update_by_id(user_id, "msg_id", msg.id)
    return msg
示例#2
0
def start_handler(message):
    try:
        user_id = message.from_user.id
        new_users(user_id, message.from_user.first_name, 0, -1)
        if not int(select_by_id(user_id, "isRunning")):
            update_by_id(user_id, "isRunning", 1)
            update_by_id(user_id, "email", "NULL")

            msg = bot.send_message(
                user_id,
                "Enter your email address to receive notifications",
                reply_markup=keyboard4,
            )
            bot.register_next_step_handler(msg, get_email)
    except sqlite3.IntegrityError as e:
        return
示例#3
0
def get_email(message):
    try:
        user_id = message.from_user.id
        text = message.text.lower()

        if text == "stop":
            bot.send_message(user_id, "stopped", reply_markup=markup)
            update_by_id(user_id, "isRunning", 0)
            return
        elif text == "skip":
            ...
        elif re.match(regex, text):
            send_by_email(text, "Test email from @incredible_ip_camera_bot")
            update_by_id(user_id, "email", text)
        else:
            raise ValueError("Invalid address")

        msg = bot.send_message(user_id, "Enter the camera ip address")
        bot.register_next_step_handler(msg, get_address)

    except cv2.error as e:
        msg = bot.reply_to(
            message,
            "Failed to upload photo\nTry again or send stop",
            reply_markup=keyboard4,
        )
        bot.register_next_step_handler(msg, get_email)

    except requests.exceptions.ConnectionError as e:
        msg = bot.reply_to(
            message,
            "Connection reset by peer\nTry again or send stop",
            reply_markup=keyboard4,
        )
        bot.register_next_step_handler(msg, get_email)

    except Exception as e:
        print(e)
        msg = bot.reply_to(message,
                           f"{e}\nTry again or send stop",
                           reply_markup=keyboard4)
        bot.register_next_step_handler(msg, get_email)
示例#4
0
def tracker_listener(message, controller, thread):
    print("tracker_listener")
    try:
        user_id = message.from_user.id
        user_name = message.from_user.username
        text = message.text.lower()
        msg = None
        if text == "stop":

            update_by_id(user_id, "isTracking", 0)
            thread.do_run = False
            thread.join()
            msg = bot.send_message(user_id,
                                   "Stopped tracking",
                                   reply_markup=keyboard1)
            bot.register_next_step_handler(
                msg, partial(move_camera, controller=controller))
            return

        elif text == "show":
            pan, tilt, zoom = select_conf_by_id(user_id)

            isok, conf = controller.get_configuration()

            if isok:
                conf["pan"] = round(pan, 1)
                conf["tilt"] = round(tilt, 1)
                conf["zoom"] = round(zoom, 1)
                controller.configure(conf)
            else:
                raise ValueError(conf)

            global model
            frame = get_frame(ip2url(str(select_by_id(user_id, "camera_ip"))))
            bboxes = model.predict(frame)
            frame = draw_bboxes(frame, bboxes)
            photo = Image.fromarray(frame)
            msg = bot.send_photo(user_id, photo)
        else:
            msg = bot.send_message(
                user_id,
                "Tracking mode is enabled.\nPress stop to exit the mode")
        bot.register_next_step_handler(
            msg, partial(tracker_listener,
                         controller=controller,
                         thread=thread))

    except cv2.error as e:
        msg = bot.reply_to(message,
                           "Failed to upload photo\nTry again or send stop")
        bot.register_next_step_handler(
            msg, partial(tracker_listener,
                         controller=controller,
                         thread=thread))
        return

    except requests.exceptions.ConnectionError as e:
        msg = bot.reply_to(message,
                           "Connection reset by peer\nTry again or send stop")
        bot.register_next_step_handler(
            msg, partial(tracker_listener,
                         controller=controller,
                         thread=thread))

    except Exception as e:
        print(e)
        user_id = message.from_user.id
        msg = bot.reply_to(message, f"{e}\nTry again or send stop")
        bot.register_next_step_handler(
            msg, partial(tracker_listener,
                         controller=controller,
                         thread=thread))
        return
示例#5
0
def move_camera(message, controller):
    try:
        user_id = message.from_user.id
        user_name = message.from_user.username
        text = message.text.lower()
        if text == "stop":
            bot.send_message(user_id, "stopped", reply_markup=markup)
            update_by_id(user_id, "isRunning", 0)
            update_by_id(user_id, "msg_id", -1)
            return
        elif text == "show":
            pan, tilt, zoom = select_conf_by_id(user_id)

            isok, conf = controller.get_configuration()

            if isok:
                conf["pan"] = round(pan, 1)
                conf["tilt"] = round(tilt, 1)
                conf["zoom"] = round(zoom, 1)
                controller.configure(conf)
            else:
                raise ValueError(conf)

            photo = photo_by_url(
                ip2url(str(select_by_id(user_id, "camera_ip"))))
            bot.send_photo(user_id, photo, reply_markup=keyboard1)

            msg = delete_message(user_id, bot)
            bot.register_next_step_handler(
                msg, partial(move_camera, controller=controller))
            return
        elif text == "track":

            print(text, user_id, user_name,
                  select_by_id(user_id, "isTracking"))
            if not select_by_id(user_id, "isTracking"):

                msg = bot.send_message(user_id,
                                       "started tracking",
                                       reply_markup=keyboard3)
                thread = Thread(target=track_loop, args=(user_id, controller))
                update_by_id(user_id, "isTracking", 1)
                bot.register_next_step_handler(
                    msg,
                    partial(tracker_listener,
                            controller=controller,
                            thread=thread))
                thread.start()
                return

        elif text == "zoom in":
            print(text, user_id, user_name)
            update_by_id(user_id, "zoom",
                         float(select_by_id(user_id, "zoom")) + d_zoom)
        elif text == "zoom out":
            print(text, user_id, user_name)
            update_by_id(user_id, "zoom",
                         float(select_by_id(user_id, "zoom")) - d_zoom)
        elif text == "right":
            print(text, user_id, user_name)
            update_by_id(user_id, "pan",
                         float(select_by_id(user_id, "pan")) + d_pan)
        elif text == "left":
            print(text, user_id, user_name)
            update_by_id(user_id, "pan",
                         float(select_by_id(user_id, "pan")) - d_pan)
        elif text == "up":
            print(text, user_id, user_name)
            update_by_id(user_id, "tilt",
                         float(select_by_id(user_id, "tilt")) + d_tilt)
        elif text == "down":
            print(text, user_id, user_name)
            update_by_id(user_id, "tilt",
                         float(select_by_id(user_id, "tilt")) - d_tilt)
        elif text.split()[0] == "preset":
            print(text, user_id, user_name)
            text_lst = text.split()
            if len(text_lst) > 1:
                isok, conf = controller.load_preset(text_lst[1])
            else:
                isok, conf = controller.load_preset("")

            if not isok:
                raise ValueError(conf)

            pan, tilt, zoom = conf["pan"], conf["tilt"], conf["zoom"]
            update_by_id(user_id, "pan", pan)
            update_by_id(user_id, "tilt", tilt)
            update_by_id(user_id, "zoom", zoom)

        else:
            bot.send_message(user_id,
                             "Invalid operation.\nTry again or send stop")
            msg = delete_message(user_id, bot)
            bot.register_next_step_handler(
                msg, partial(move_camera, controller=controller))
            return

        msg = delete_message(user_id, bot)
        bot.register_next_step_handler(
            msg, partial(move_camera, controller=controller))

    except cv2.error as e:
        msg = bot.reply_to(message,
                           "Failed to upload photo\nTry again or send stop")
        bot.register_next_step_handler(
            msg, partial(move_camera, controller=controller))

    except requests.exceptions.ConnectionError as e:
        msg = bot.reply_to(message,
                           "Connection reset by peer\nTry again or send stop")
        bot.register_next_step_handler(
            msg, partial(move_camera, controller=controller))

    except Exception as e:
        print(e)
        user_id = message.from_user.id
        bot.reply_to(message, f"{e}\nTry again or send stop")

        msg = delete_message(user_id, bot)
        bot.register_next_step_handler(
            msg, partial(move_camera, controller=controller))
示例#6
0
def get_address(message):
    try:
        user_id = message.from_user.id
        text = message.text

        if text == "stop":
            bot.send_message(user_id, "stopped", reply_markup=markup)
            update_by_id(user_id, "isRunning", 0)
            return

        camera_ip = text
        if not check_ip(camera_ip):
            raise ValueError("Invalid address")

        photo = photo_by_url(ip2url(camera_ip))

        update_by_id(user_id, "camera_ip", camera_ip)

        controller = AXISCameraController(camera_ip)
        isok, conf = controller.get_configuration()

        if not isok:
            raise ValueError(conf)

        pan, tilt, zoom = conf["pan"], conf["tilt"], conf["zoom"]
        update_by_id(user_id, "pan", round(pan, 1))
        update_by_id(user_id, "tilt", round(tilt, 1))
        update_by_id(user_id, "zoom", round(zoom, 1))

        bot.send_photo(user_id, photo, reply_markup=keyboard1)
        msg = bot.send_message(user_id,
                               f"pan={pan},\ntilt={tilt},\nzoom={zoom}")
        update_by_id(user_id, "msg_id", msg.id)
        bot.register_next_step_handler(
            msg, partial(move_camera, controller=controller))

    except cv2.error as e:
        msg = bot.reply_to(
            message,
            "Failed to upload photo\nTry again or send stop",
            reply_markup=keyboard2,
        )
        bot.register_next_step_handler(msg, get_address)

    except requests.exceptions.ConnectionError as e:
        msg = bot.reply_to(
            message,
            "Connection reset by peer\nTry again or send stop",
            reply_markup=keyboard2,
        )
        bot.register_next_step_handler(msg, get_address)

    except Exception as e:
        print(e)
        msg = bot.reply_to(message,
                           f"{e}\nTry again or send stop",
                           reply_markup=keyboard2)
        bot.register_next_step_handler(msg, get_address)
示例#7
0
def start_handler(message):
    user_id = message.from_user.id
    new_users(user_id, message.from_user.first_name, 0, -1)
    update_by_id(user_id, "isRunning", 0)
    update_by_id(user_id, "msg_id", -1)
    bot.send_message(user_id, "Rebooted")