예제 #1
0
파일: utils.py 프로젝트: mental32/ep
async def http_probe(token: str, config: "ep.Config") -> bool:
    """Probe a discord socket channel for a presence."""
    channel_id: int = config["ep"]["socket_channel"]
    superusers: List[int] = config["ep"]["superusers"]

    http = HTTPClient()

    try:
        user = await http.static_login(token, bot=False)

        assert "id" in user, f"User object has no 'id' field ({user!r})"

        if int(user["id"]) not in superusers:
            return False

        channel = await http.get_channel(channel_id)

        if channel.get("topic", "") == "alive":
            return True
    finally:
        await http.close()
    return False
예제 #2
0
        async def __aenter__(self):
            self._http = HTTPClient()
            self._http._HTTPClient__session = aiohttp.ClientSession(
                connector=self._http.connector)
            self._http.token = f"Bearer {self.access_token}"
            orig_request = self._http.request

            async def request(route, *args, **kwargs):
                try:
                    return await orig_request(route, **kwargs)
                except HTTPException as e:
                    if e.response.status == 401:
                        json_data = await self._create_from_refresh_token(
                            self.refresh_token, self.redirect_uri)
                        if "access_token" not in json_data:
                            raise InvalidTokenError()
                        self.access_token = json_data["access_token"]
                        self._http.token = f"Bearer {self.access_token}"
                        return await orig_request(route, *args, **kwargs)
                    raise

            self._http.request = request

            return self._http
예제 #3
0
    async def __aenter__(self):
        self.http = HTTPClient(None)
        self.http.token = self.access_token

        orig_request = self.http.request

        async def request(route, *, header_bypass_delay=None, **kwargs):
            try:
                return await orig_request(
                    route, header_bypass_delay=header_bypass_delay, **kwargs)
            except HTTPException as e:
                if e.response.status == 401:
                    self.refresh_token, self.access_token = await self.oauth2.refresh_token(
                        self.refresh_token)
                    self.http.token = "Bearer " + self.access_token
                    return await orig_request(
                        route,
                        header_bypass_delay=header_bypass_delay,
                        **kwargs)
                raise

        self.http.request = request

        return self.http
예제 #4
0
    client.redis.delete('discord:channels:%s' % data['id'])


@client.event('GUILD_CREATE')
def guild_create(data):
    client.redis.set('discord:guilds:%s' % data['id'], json.dumps(data))
    for channel in data['channels']:
        client.redis.set('discord:channels:%s' % channel['id'],
                         json.dumps(channel))


# Commands
me = None
prefix = ''

http = HTTPClient()


@client.event('MESSAGE_CREATE')
def message(data):
    channel = json.loads(
        client.redis.get('discord:channels:%s' % data['channel_id']))
    print("%s in %s: %s" %
          (data['author']['username'], channel['name'], data['content']))


@client.event('MESSAGE_CREATE')
async def command(data):
    global me
    global prefix