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()
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
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
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()