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