예제 #1
0
    def run_forever(
            self,
            loop: Optional[AbstractEventLoop] = None
    ) -> NoReturn:  # type: ignore
        """Runs startup tasks and makes the loop running forever"""

        if not len(self.tasks):
            logger.warning("You ran loop with 0 tasks. Is it ok?")

        loop = loop or get_event_loop()

        try:
            [
                loop.run_until_complete(startup_task)
                for startup_task in self.on_startup
            ]

            if self.auto_reload:
                loop.create_task(watch_to_reload(self.auto_reload_dir))

            for task in self.tasks:
                loop.create_task(task)

            loop.run_forever()
        except KeyboardInterrupt:
            logger.info("Keyboard Interrupt")
        finally:
            [
                loop.run_until_complete(shutdown_task)
                for shutdown_task in self.on_shutdown
            ]
            if loop.is_running():
                loop.close()
예제 #2
0
 def mention(self) -> Optional[Mention]:
     """Returns `Mention` object if message contains mention,
     eg if message is `@username text` returns `Mention(id=123, text="text")`,
     also mention is automatically removes from message text"""
     if not self.replace_mention:
         logger.warning(
             "labeler.message_view.replace_mention is set to False, the mention will not be processed"
         )
         return None
     return self._mention
예제 #3
0
    async def send_message(
        self,
        message: Optional[str] = None,
        attachment: Optional[str] = None,
        random_id: Optional[int] = 0,
        lat: Optional[float] = None,
        long: Optional[float] = None,
        reply_to: Optional[int] = None,
        forward_messages: Optional[List[int]] = None,
        forward: Optional[str] = None,
        sticker_id: Optional[int] = None,
        keyboard: Optional[str] = None,
        template: Optional[str] = None,
        payload: Optional[str] = None,
        content_source: Optional[str] = None,
        dont_parse_links: Optional[bool] = None,
        disable_mentions: Optional[bool] = None,
        intent: Optional[str] = None,
        subscribe_id: Optional[int] = None,
        **kwargs,
    ) -> "MessagesSendUserIdsResponseItem":
        locals().update(kwargs)

        data = {
            k: v
            for k, v in locals().items()
            if k not in ("self", "kwargs") and v is not None
        }
        deprecated_params = ("peer_id", "user_id", "domain", "chat_id",
                             "user_ids")
        deprecated = [k for k in data if k in deprecated_params]
        if deprecated:
            logger.warning(
                "Params like peer_id or user_id is deprecated in MessageEvent.send_message()."
                "Use API.messages.send() instead")
            for k in deprecated:
                data.pop(k)
        if message is None:
            message = ""
        elif not isinstance(message, str):
            message = str(message)
        stream = StringIO(message)
        while True:
            msg = stream.read(4096)
            if msg:
                data["message"] = msg
            response = (await
                        self.ctx_api.messages.send(peer_ids=[self.peer_id],
                                                   **data))[0]  # type: ignore
            if stream.tell() == len(message or ""):
                break
        return response
예제 #4
0
 def get_attachment_strings(self) -> Optional[List[str]]:
     if self.attachments is None:
         return None
     if (not self.id and not self._is_full and any(
             getattr(attachment, attachment.type.value).access_key
             for attachment in self.attachments)):
         logger.warning((
             "Some attachments may does't work because of wrong access_key. "
             "Use .get_full_message() to update message and fix this issue."
         ))
     if self.is_cropped:
         logger.warning((
             "Some attachments may doesn't included because message is cropped. "
             "Use .get_full_message() to update message and fix this issue."
         ))
     return super().get_attachment_strings()