コード例 #1
0
    async def run(self, skip_updates: bool, wait: int = DEFAULT_WAIT):
        """ Run bot polling forever
        Can be manually stopped with:
        bot.stop()
        """
        self.__wait = wait
        logger.debug("Polling will be started. Is it OK?")
        if self.__secret is not None:
            logger.warning("You set up secret and started polling. Removing secret")
            self.__secret = None

        if not self.status.dispatched:
            self.middleware.add_middleware(self.on.pre)
            await self.on.dispatch(self.get_current_rest)
            self.status.dispatched = True

        if not skip_updates:
            await self.get_updates()

        await self.get_server()
        logger.info("Polling successfully started. Press Ctrl+C to stop it")

        while not self._stop:
            event = await self.make_long_request(self.long_poll_server)
            if isinstance(event, dict) and event.get("ts"):
                self.loop.create_task(self.emulate(event))
                self.long_poll_server["ts"] = event["ts"]
            else:
                await self.get_server()

        logger.error("Polling was stopped")
コード例 #2
0
    async def run(self, wait: int = DEFAULT_WAIT):
        """ Run user polling forever
        Can be manually stopped with:
        >> user.stop()
        """
        self.__wait = wait
        logger.info("Polling will be started. Is it OK?")

        await self.get_server()
        self.on.dispatch()
        logger.debug("User Polling successfully started")

        while not self._stop:
            try:
                event = await self.make_long_request(self.long_poll_server)
                if isinstance(event, dict) and event.get("ts"):
                    self.__loop.create_task(self.emulate(event))
                    self.long_poll_server["ts"] = event["ts"]
                else:
                    await self.get_server()

            except (
                    aiohttp.ClientConnectionError,
                    aiohttp.ServerTimeoutError,
                    TimeoutError,
            ):
                # No internet connection
                logger.warning("Server Timeout Error!")

            except:
                logger.error(
                    "While user lp was running error occurred \n\n{}".format(
                        traceback.format_exc()))

        logger.error("Polling was stopped")
コード例 #3
0
ファイル: checks.py プロジェクト: GetWebochka/GetWebLP
 def check(self):
     for key in self.database.__all_fields__:
         if key not in self.database:
             if key in self.fix_database:
                 logger.warning(
                     f"[DATABASE]: Поле {key} отсутствовало. Использую стандартное значение."
                 )
                 self.database.update({key: self.fix_database[key]})
                 self.database.save()
             else:
                 raise DatabaseError(
                     name='Нет поля',
                     description=f'В базе данных не хватает поля "{key}"')
コード例 #4
0
ファイル: processor.py プロジェクト: LouisPython217/vkbottle
 async def _processor(self, update: dict, update_code: int, update_fields: list):
     try:
         data = update, update_code, update_fields
         if update_code not in list(map(int, UserEvents)):
             logger.warning("Undefined event {}", update_code)
             return
         event = UserEvents(update_code)
         logger.debug("New event: {} {}", event, update)
         if event is UserEvents.new_message:
             return await self._message_processor(*data)
         return await self._event_processor(*data)
     except VKError as e:
         await self.error_handler.handle_error(e)
     except:
         logger.error(
             "While user polling worked error occurred \n\n{traceback}",
             traceback=traceback.format_exc(),
         )
コード例 #5
0
    async def parent_processor(
        self, update: dict, update_code: int, update_fields: typing.List[int],
    ) -> bool:
        """ Classify and distribute user polling events as message and not message
        #TODO Reduce difference
        :param update: full event
        :param update_code: first element from update
        :param update_fields: fields stack
        """
        data = update, update_code, update_fields

        if update_code not in list(map(int, UserEvents)):
            logger.warning("Undefined event {}", update_code)
            return

        event = UserEvents(update_code)
        logger.debug("New event: {} {}", event, update)

        if event is UserEvents.new_message:
            return await self.message_processor(*data)
        return await self.event_processor(*data)
コード例 #6
0
    async def get_updates(self):
        # noqa
        logger.info("Receiving updates from conversations")
        updates = []
        close, offset = False, 0

        while not close:
            conversations = await self.api.messages.get_conversations(
                offset, 200, filter="unanswered"
            )
            if offset == 0:
                logger.info(f"Conversation count - {conversations.count}")
                if conversations.count == 0:
                    return
            offset += 200

            updates.extend([item.conversation.out_read for item in conversations.items])
            if len(conversations.items) < 200:
                close = True

        logger.warning("Answering...")

        chunk = list(chunks(updates, 100))
        for mid in chunk:
            try:
                messages = await self.api.messages.get_by_id(mid)
                await self.emulate(
                    {
                        "updates": [
                            {
                                "type": "message_new",
                                "object": {"message": m.dict(), "client_info": {}},
                            }
                            for m in messages.items
                        ]
                    }
                )
            except VKError:
                continue