首页 > 解决方案 > Pycharm IDE 中 Python 3.8 上的 Discord Bot

问题描述

我想写一个 Discord 机器人来回答乒乓球。但我总是收到一条错误消息。我的代码:

import discord

client = discord.Client()

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith('$hello'):
        await message.channel.send('Hello!')

client.run('Nzk4ODEyMDc5NTgxNTYwODgz.X_6duA.3tjXCaFqhSuj59rbpzB6EEl7C6s')

结果:

Traceback (most recent call last):
  File "/Users/kyilmaz/Documents/Phyton/Discord/venv/lib/python3.8/site-packages/aiohttp/connector.py", line 969, in _wrap_create_connection
    return await self._loop.create_connection(*args, **kwargs)  # type: ignore  # noqa
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/asyncio/base_events.py", line 1050, in create_connection
    transport, protocol = await self._create_connection_transport(
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/asyncio/base_events.py", line 1080, in _create_connection_transport
    await waiter
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/asyncio/sslproto.py", line 529, in data_received
    ssldata, appdata = self._sslpipe.feed_ssldata(data)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/asyncio/sslproto.py", line 189, in feed_ssldata
    self._sslobj.do_handshake()
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/ssl.py", line 944, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/kyilmaz/Documents/Phyton/Discord/rpgbot.py", line 17, in <module>
    client.run('Nzk4ODEyMDc5NTgxNTYwODgz.X_6duA.3tjXCaFqhSuj59rbpzB6EEl7C6s')
  File "/Users/kyilmaz/Documents/Phyton/Discord/venv/lib/python3.8/site-packages/discord/client.py", line 718, in run
    return future.result()
  File "/Users/kyilmaz/Documents/Phyton/Discord/venv/lib/python3.8/site-packages/discord/client.py", line 697, in runner
    await self.start(*args, **kwargs)
  File "/Users/kyilmaz/Documents/Phyton/Discord/venv/lib/python3.8/site-packages/discord/client.py", line 660, in start
    await self.login(*args, bot=bot)
  File "/Users/kyilmaz/Documents/Phyton/Discord/venv/lib/python3.8/site-packages/discord/client.py", line 509, in login
    await self.http.static_login(token.strip(), bot=bot)
  File "/Users/kyilmaz/Documents/Phyton/Discord/venv/lib/python3.8/site-packages/discord/http.py", line 293, in static_login
    data = await self.request(Route('GET', '/users/@me'))
  File "/Users/kyilmaz/Documents/Phyton/Discord/venv/lib/python3.8/site-packages/discord/http.py", line 185, in request
    async with self.__session.request(method, url, **kwargs) as r:
  File "/Users/kyilmaz/Documents/Phyton/Discord/venv/lib/python3.8/site-packages/aiohttp/client.py", line 1117, in __aenter__
    self._resp = await self._coro
  File "/Users/kyilmaz/Documents/Phyton/Discord/venv/lib/python3.8/site-packages/aiohttp/client.py", line 520, in _request
    conn = await self._connector.connect(
  File "/Users/kyilmaz/Documents/Phyton/Discord/venv/lib/python3.8/site-packages/aiohttp/connector.py", line 535, in connect
    proto = await self._create_connection(req, traces, timeout)
  File "/Users/kyilmaz/Documents/Phyton/Discord/venv/lib/python3.8/site-packages/aiohttp/connector.py", line 892, in _create_connection
    _, proto = await self._create_direct_connection(req, traces, timeout)
  File "/Users/kyilmaz/Documents/Phyton/Discord/venv/lib/python3.8/site-packages/aiohttp/connector.py", line 1051, in _create_direct_connection
    raise last_exc
  File "/Users/kyilmaz/Documents/Phyton/Discord/venv/lib/python3.8/site-packages/aiohttp/connector.py", line 1020, in _create_direct_connection
    transp, proto = await self._wrap_create_connection(
  File "/Users/kyilmaz/Documents/Phyton/Discord/venv/lib/python3.8/site-packages/aiohttp/connector.py", line 971, in _wrap_create_connection
    raise ClientConnectorCertificateError(req.connection_key, exc) from exc
aiohttp.client_exceptions.ClientConnectorCertificateError: Cannot connect to host discord.com:443 ssl:True [SSLCertVerificationError: (1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed:unable to get local issuer certificate (_ssl.c:1108)')]

针对航海者 42 号的回答进行了编辑。我检查了我的 Discord 令牌是否正确(由于安全性我重新生成了),并且一切都很好。

提前感谢您的帮助!

标签: pythondiscordbotspython-3.8

解决方案


您没有正确使用 API。

client = MyClient() # without any argument

您必须在 client.run() 调用中传递令牌:

client.run('your token here')

请参阅此处的不和谐文档


推荐阅读