как подключить дискорд бот через прокси - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь запустить бот-диск, используя discord.py и через прокси. дискордный документ по этому довольно скуден по теме и не соответствует современной реализации aiohttp.

discordpy doc в основном говорит, что нужно использовать ProxyConnector и передавать его в качестве аргумента при создании клиента. Но в aiohttp этот способ устарел, и вместо него рекомендуется client.ClientSession (). Get. Проблема в том, что client.ClientSession (). Get запрашивает у меня URL.

В любом случае я также пробовал использовать ProxyConnector, но он не работает, когда я наконец запускаю бота (не могу подключиться к Discord API). Я не уверен, что с ним не так, так как сам прокси работает нормально с любыми другими службами HTTPS.


Код с рекомендуемым способом

conn = client.ClientSession().get(proxy='<proxy_url>', proxy_auth=BasicAuth(<proxy_auth>))

self.client = discord.Client(connector=conn)

Код с устаревшим способом

conn = ProxyConnector(proxy='<proxy_url>', proxy_auth=BasicAuth(<proxy_auth>))

self.client = discord.Client(connector=conn)

Traceback

Traceback (most recent call last):
  File "C:/Users/airiau/PycharmProjects/pronostics/main.py", line 50, in <module>
    main()
  File "C:/Users/airiau/PycharmProjects/pronostics/main.py", line 46, in main
    bot.run(config['token'])
  File "C:\Users\airiau\PycharmProjects\pronostics\sample\DiscordBot.py", line 352, in run
    self.client.run(self.token)
  File "C:\Users\airiau\venv-3.6\lib\site-packages\discord\client.py", line 519, in run
    self.loop.run_until_complete(self.start(*args, **kwargs))
  File "C:\Program Files (x86)\Python36-32\lib\asyncio\base_events.py", line 468, in run_until_complete
    return future.result()
  File "C:\Users\airiau\venv-3.6\lib\site-packages\discord\client.py", line 491, in start
    yield from self.connect()
  File "C:\Users\airiau\venv-3.6\lib\site-packages\discord\client.py", line 444, in connect
    self.ws = yield from DiscordWebSocket.from_client(self)
  File "C:\Users\airiau\venv-3.6\lib\site-packages\discord\gateway.py", line 207, in from_client
    timeout=60, loop=client.loop)
  File "C:\Program Files (x86)\Python36-32\lib\asyncio\tasks.py", line 358, in wait_for
    return fut.result()
  File "C:\Users\airiau\venv-3.6\lib\site-packages\discord\gateway.py", line 65, in _ensure_coroutine_connect
    ws = yield from websockets.connect(gateway, loop=loop, klass=klass)
  File "C:\Users\airiau\venv-3.6\lib\site-packages\websockets\py35\client.py", line 19, in __await__
    return (yield from self.client)
  File "C:\Users\airiau\venv-3.6\lib\site-packages\websockets\client.py", line 210, in connect
    factory, wsuri.host, wsuri.port, **kwds)
  File "C:\Program Files (x86)\Python36-32\lib\asyncio\base_events.py", line 787, in create_connection
    ', '.join(str(exc) for exc in exceptions)))
OSError: Multiple exceptions: [Errno 10060] Connect call failed ('104.16.59.37', 443), [Errno 10060] Connect call failed ('104.16.60.37', 443)

1 Ответ

0 голосов
/ 03 июля 2018

В результате продолжающихся исследований я нашел эту ссылку с таким ответом:

Похоже, что WebSockets, используемый discord.py, не поддерживает HTTP прокси. Это было бы просто волшебно работать с HTTPS, но так как прокси HTTP это не так. Это означает, что, если не считать переписывания discord.py с поддержкой HTTP-прокси (с помощью websocket-клиента, для пример, который поддерживает HTTP прокси), нам может не повезти.

Похоже, что это вообще невозможно сделать.

...