コード例 #1
0
ファイル: base.py プロジェクト: nulledBIT/casino_bot
    def __init__(self,
                 token: base.String,
                 loop: Optional[Union[asyncio.BaseEventLoop,
                                      asyncio.AbstractEventLoop]] = None,
                 connections_limit: Optional[base.Integer] = None,
                 proxy: Optional[base.String] = None,
                 proxy_auth: Optional[aiohttp.BasicAuth] = None,
                 validate_token: Optional[base.Boolean] = True,
                 parse_mode: typing.Optional[base.String] = None,
                 timeout: typing.Optional[typing.Union[base.Integer,
                                                       base.Float]] = None):
        """
        Instructions how to get Bot token is found here: https://core.telegram.org/bots#3-how-do-i-create-a-bot

        :param token: token from @BotFather
        :type token: :obj:`str`
        :param loop: event loop
        :type loop: Optional Union :obj:`asyncio.BaseEventLoop`, :obj:`asyncio.AbstractEventLoop`
        :param connections_limit: connections limit for aiohttp.ClientSession
        :type connections_limit: :obj:`int`
        :param proxy: HTTP proxy URL
        :type proxy: :obj:`str`
        :param proxy_auth: Authentication information
        :type proxy_auth: Optional :obj:`aiohttp.BasicAuth`
        :param validate_token: Validate token.
        :type validate_token: :obj:`bool`
        :param parse_mode: You can set default parse mode
        :type parse_mode: :obj:`str`
        :param timeout: Request timeout
        :type timeout: :obj:`typing.Optional[typing.Union[base.Integer, base.Float]]`
        :raise: when token is invalid throw an :obj:`aiogram.utils.exceptions.ValidationError`
        """
        # Authentication
        if validate_token:
            api.check_token(token)
        self.__token = token

        self.proxy = proxy
        self.proxy_auth = proxy_auth

        # Asyncio loop instance
        if loop is None:
            loop = asyncio.get_event_loop()
        self.loop = loop

        # aiohttp main session
        ssl_context = ssl.create_default_context(cafile=certifi.where())

        if isinstance(proxy, str) and (proxy.startswith('socks5://')
                                       or proxy.startswith('socks4://')):
            from aiohttp_socks import SocksConnector
            from aiohttp_socks.helpers import parse_socks_url

            socks_ver, host, port, username, password = parse_socks_url(proxy)
            if proxy_auth:
                if not username:
                    username = proxy_auth.login
                if not password:
                    password = proxy_auth.password

            connector = SocksConnector(socks_ver=socks_ver,
                                       host=host,
                                       port=port,
                                       username=username,
                                       password=password,
                                       limit=connections_limit,
                                       ssl_context=ssl_context,
                                       rdns=True,
                                       loop=self.loop)

            self.proxy = None
            self.proxy_auth = None
        else:
            connector = aiohttp.TCPConnector(limit=connections_limit,
                                             ssl=ssl_context,
                                             loop=self.loop)
        self._timeout = None
        self.timeout = timeout

        self.session = aiohttp.ClientSession(connector=connector,
                                             loop=self.loop,
                                             json_serialize=json.dumps)

        self.parse_mode = parse_mode
コード例 #2
0
    def __init__(self,
                 token: Optional[str] = None,
                 service_url: str = SERVICE_URL,
                 connections_limit: Optional[int] = None,
                 proxy: Optional[str] = None, proxy_auth: Optional[aiohttp.BasicAuth] = None,
                 loop: asyncio.AbstractEventLoop = None,
                 json_serialize: callable = None, json_deserialize: callable = None):
        # Asyncio loop instance
        if loop is None:
            loop = asyncio.get_event_loop()
        self.loop = loop

        # JSON
        if not json_serialize or not json_deserialize:
            try:
                import ujson as json
            except ImportError:
                import json

            if json_serialize is None:
                json_serialize = json.dumps
            if json_deserialize is None:
                json_deserialize = json.loads
        self._json_serialize = json_serialize
        self._json_deserialize = json_deserialize

        # URL's
        self._service = None
        self._api_url = None
        self._service_url = None
        self.service = service_url

        # Proxy settings
        self.proxy = proxy
        self.proxy_auth = proxy_auth

        # aiohttp main session
        ssl_context = ssl.create_default_context(cafile=certifi.where())

        if isinstance(proxy, str) and (proxy.startswith('socks5://') or proxy.startswith('socks4://')):
            from aiohttp_socks import SocksConnector
            from aiohttp_socks.helpers import parse_socks_url

            socks_ver, host, port, username, password = parse_socks_url(proxy)
            if proxy_auth:
                if not username:
                    username = proxy_auth.login
                if not password:
                    password = proxy_auth.password

            connector = SocksConnector(socks_ver=socks_ver, host=host, port=port,
                                       username=username, password=password,
                                       limit=connections_limit, ssl_context=ssl_context,
                                       rdns=True, loop=self.loop)

            self.proxy = None
            self.proxy_auth = None
        else:
            connector = aiohttp.TCPConnector(limit=connections_limit, ssl=ssl_context,
                                             loop=self.loop)

        self.session = aiohttp.ClientSession(connector=connector, loop=self.loop, json_serialize=json_serialize)

        self._token = token