如何通过代理连接Discord机器人 [英] how to connect a discord bot through proxy

查看:1375
本文介绍了如何通过代理连接Discord机器人的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用discord.py并通过代理来运行discord机器人。 与此相关的discordpy文档非常稀缺 。 p>

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)

跟踪

 跟踪(最近一次通话):
文件 C:/Users/airiau/PycharmProjects/pronostics/main.py,第50行,在< module>中
main()
文件 C:/Users/airiau/PycharmProjects/pronostics/main.py,第46行,位于主
bot.run(config ['token'])
文件 C:\用户\airiau\PycharmProjects\pronostics\sample\DiscordBot.py,行352,运行中
self.client.run(self.token)
文件 C:\\ Users \\ airiau \\ venv-3.6 \\ lib \\ site-packages \\ discord \\ client.py,行519,运行中
self.loop.run_until_complete( self.start(* args,** kwargs))
文件 C:\程序文件(x86)Python36-32\lib\asyncio\base_events.py,行468,在run_until_complete中
return future.result()
文件 C:\Users\airiau\venv-3.6\lib\site-packages\discord\client.py,第491行,在开始时
从self.connect()获得的收益
文件 C:\Users\airiau\venv-3.6\lib\site-packages\discord\client.py,连接中的第444行,
self.ws = DiscordWebSocket.from_client(self)
File C:\Users\airiau\venv-3.6\lib\site-packages\ discord\gateway.py,第207行,位于from_client中
timeout = 60,loop = client.loop)
文件 C:\Program Files(x86)\Python36-32\lib\asyncio\tasks.py,第358行,在wait_for
中,返回fut.result()
文件 C:\Users\airiau\venv-3.6\lib\site-packages\discord\gateway.py,行65,在_ensure_coroutine_connect
ws = websockets.connect的收益(网关,循环=循环,克拉斯=克拉斯)$​​ b $ b文件 C:\Users\airiau\venv-3.6-lib\ site-packages\websockets\py35\client.py,第19行,位于__await__
返回(来自self.client的收益)
文件 C:\Users\airiau\venv -3.6\lib\site-packages\websockets\client.py,第210行,在connect
工厂,wsuri.host,wsuri.port,** kwds)中
文件 C :\Program Files(x86)\Python36-32\lib\asyncio\base_events.py,行787,在create_connection
','.join(str(exc)中排除例外) ))
OSError:多个异常:[Errno 10060]连接呼叫失败('104.16.59.37',443),[Errno 10060]连接呼叫失败('104.16.60.37',443)


解决方案

通过不断的研究,我发现了链接与此答案:


discord.py使用的WebSocket不支持HTTP
代理。这将可以神奇地与HTTPS一起使用,但是由于
代理是HTTP,因此不能使用。这意味着,如果没有使用HTTP代理支持重写
discord.py(通过使用websocket-client,例如支持HTTP代理的
),我们可能就不走运了。


似乎不可能完全做到这一点。


I am trying to run a discord bot using discord.py and through a proxy. The discordpy doc on this is pretty scarce on the subject and not up to date with aiohttp implementation.

discordpy doc basically says to use a ProxyConnector and pass it as an argument when the client is created. But in aiohttp, this way is deprecated and client.ClientSession().get is recommended instead. Problem is, client.ClientSession().get asks me to provide a URL.

I also tried with ProxyConnector anyway, but it doesn't work when I finally run the bot (can't connect to the discord API). I'm not sure what's wrong with it, as the proxy itself works fine with any other HTTPS services.


Code with recommended way

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

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


Code with deprecated way

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)

解决方案

From continuing research, I found this link with this answer:

It appears that WebSockets used by discord.py do not support HTTP proxies. This would just magically work with HTTPS, but since the proxy is HTTP it doesn't. That means that, short of rewriting discord.py with HTTP proxy support (by using websocket-client, for example, which supports HTTP proxies), we may be out of luck.

It looks like it might not be possible to do it altogether.

这篇关于如何通过代理连接Discord机器人的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆