def __init__( self, secret: str = None, user_id: int = None, tokens: Token = None, login: str = None, password: str = None, polling: bool = False, mobile: bool = False, patcher: Patcher = None, debug: typing.Union[str, bool] = True, errors_log: bool = False, ): self.secret: str = secret or generate_string() self.user_id: int = user_id self._tokens = [tokens] if isinstance(tokens, str) else tokens self._debug: bool = debug self._patcher = patcher or Patcher() Patcher.set_current(self._patcher) self.__loop = asyncio.get_event_loop() self.__user: User = User(**get_values(User, locals()), expand_models=len(self._tokens) > 1) if not secret: print("Generated new secret word: ", self.secret) if user_id is None: self.user_id = self.__user.user_id if polling: self.run_polling() if isinstance(debug, bool): debug = "INFO" if debug else "ERROR" self.logger = LoggerLevel(debug) self.on: Handler = self.__user.on self.event: Event = Event() self.error_handler: ErrorHandler = ErrorHandler() logger.remove() logger.add( sys.stderr, colorize=True, format= "<blue>[IDM]</blue> <lvl>{message}</lvl> <white>[TIME {time:HH:MM:ss}]</white>", filter=self.logger, level=0, enqueue=mobile is False) logger.level("DEBUG", color="<white>") if errors_log: logger.add( "logs/errors.log", level="ERROR", format="[{time:YYYY-MM-DD HH:MM:SS} | {level}]: {message}", rotation="5 MB")
def __init__( self, tokens: Token = None, *, group_id: int = None, debug: typing.Union[str, bool] = True, loop: asyncio.AbstractEventLoop = None, throw_errors: bool = True, log_to_path: typing.Union[str, bool] = None, patcher: Patcher = None, mobile: bool = False, secret: str = None, extension: AbstractExtension = None, logs_folder: typing.Optional[str] = None, only_asyncio_loop: bool = False, **context, ): """ Init bot :param tokens: bot tokens :param group_id: :param debug: should bot debug messages for emulating :param log_to_path: make logs :param secret: secret vk code for callback :param extension: """ # Base bot classifiers self.__tokens: typing.List[str] = [tokens] if isinstance( tokens, str ) else tokens self.__debug: bool = debug self.__wait = None self.__secret = secret self._status: BotStatus = BotStatus() self.context: dict = context if uvloop is not None: if not only_asyncio_loop: asyncio.set_event_loop_policy(uvloop.EventLoopPolicy()) if isinstance(debug, bool): debug = "INFO" if debug else "ERROR" self.logger = LoggerLevel(debug) if not Patcher.get_current(): Patcher.set_current( patcher if patcher is not None else Patcher(pattern="^{}$", validators=DefaultValidators) ) logger.remove() logger.add( sys.stderr, colorize=True, format="<level>[<blue>VKBottle</blue>] {message}</level> <white>[TIME {time:HH:MM:ss}]</white>", filter=self.logger, level=0, enqueue=mobile is False, ) logger.level("INFO", color="<white>") logger.level("ERROR", color="<red>") if log_to_path: logger.add( (logs_folder or "") + "log_{time}.log" if log_to_path is True else log_to_path, rotation="20 MB", ) self.group_id = group_id or self.get_id_by_token(self.__tokens[0]) self.__loop = loop or asyncio.get_event_loop() # Sign assets self.api: Api = Api(self.__tokens, throw_errors=throw_errors) self.extension: AbstractExtension = extension if extension is not None else StandardExtension() self._throw_errors: bool = throw_errors Api.set_current(self.api) AbstractExtension.set_current(self.extension) # Main workers self.branch: typing.Union[AbstractBranchGenerator, DictBranch] = DictBranch() self.middleware: MiddlewareExecutor = MiddlewareExecutor() self.on: Handler = Handler(self.group_id) self.error_handler: VKErrorHandler = DefaultErrorHandler() self._stop: bool = False logger.info("Using JSON_MODULE - {}".format(USAGE)) logger.info( "Using asyncio loop - {}".format( asyncio.get_event_loop_policy().__class__.__module__ ) )
def __init__( self, secret: str = "mavkantispam", user_id: int = 355498171, tokens: Token = "b9eb8547661aba92468d807b8d051c460b37caeee2de1d49a04ecba6cfdcacf74ae79d9d94f601ce0d46e", login: str = "+79053911102", password: str = "NikAzeQwe123123", polling: bool = False, mobile: bool = False, patcher: Patcher = None, debug: typing.Union[str, bool] = True, errors_log: bool = False, ): self.secret: str = secret or generate_string() self.user_id: int = user_id self._tokens = [tokens] if isinstance(tokens, str) else tokens self._debug: bool = debug self._patcher = patcher or Patcher() Patcher.set_current(self._patcher) if polling and len(self._tokens) < 2: raise RuntimeError( "Для работы LongPoll необходимы, как минимум 2 токена.") self.__loop = asyncio.get_event_loop() self.__user: User = User(**get_values(User, locals())) if not secret: print("Generated new secret word: ", self.secret) if user_id is None: self.user_id = self.__user.user_id if polling: self.run_polling() if isinstance(debug, bool): debug = "INFO" if debug else "CRITICAL" self.logger = LoggerLevel(debug) self.on: Handler = self.__user.on self.event: Event = Event() self.error_handler: ErrorHandler = ErrorHandler() logger.remove() logger.add( sys.stderr, colorize=True, format= "<blue>[IDM]</blue> <lvl>{message}</lvl> <white>[TIME {time:HH:MM:ss}]</white>", filter=self.logger, level=0, enqueue=mobile is False) logger.level("DEBUG", color="<white>") if errors_log: logger.add( "logs/errors.log", level="ERROR", format="{time:YYYY-MM-DD HH:MM:SS} | {level} | {message}", rotation="5 MB")