Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Problema tentando criar um bot para Discord

Olá, estava tentando criar um bot para discord para treinar meus conhecimentos de NLP em uma interação com usuários reais. Como tudo tem um começo estava escrevendo as primeiras linhas de código quando me deparei com esse erro:

C:\Python38\python.exe C:/Users/evers/PycharmProjects/ValForDiscord/main.py
Traceback (most recent call last):
  File "C:\Python38\lib\site-packages\discord\http.py", line 291, in static_login
    data = await self.request(Route('GET', '/users/@me'))
  File "C:\Python38\lib\site-packages\discord\http.py", line 245, in request
    raise HTTPException(r, data)
discord.errors.HTTPException: 401 Unauthorized (error code: 0): 401: Unauthorized

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

Traceback (most recent call last):
  File "C:/Users/evers/PycharmProjects/ValForDiscord/main.py", line 15, in <module>
    client.run(TOKEN)
  File "C:\Python38\lib\site-packages\discord\client.py", line 708, in run
    return future.result()
  File "C:\Python38\lib\site-packages\discord\client.py", line 687, in runner
    await self.start(*args, **kwargs)
  File "C:\Python38\lib\site-packages\discord\client.py", line 650, in start
    await self.login(*args, bot=bot)
  File "C:\Python38\lib\site-packages\discord\client.py", line 499, in login
    await self.http.static_login(token.strip(), bot=bot)
  File "C:\Python38\lib\site-packages\discord\http.py", line 295, in static_login
    raise LoginFailure('Improper token has been passed.') from exc
discord.errors.LoginFailure: Improper token has been passed.
Exception ignored in: <function _ProactorBasePipeTransport.__del__ at 0x000001DFD2C5F4C0>
Traceback (most recent call last):
  File "C:\Python38\lib\asyncio\proactor_events.py", line 116, in __del__
    self.close()
  File "C:\Python38\lib\asyncio\proactor_events.py", line 108, in close
    self._loop.call_soon(self._call_connection_lost, None)
  File "C:\Python38\lib\asyncio\base_events.py", line 719, in call_soon
    self._check_closed()
  File "C:\Python38\lib\asyncio\base_events.py", line 508, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed

Meu código está assim:

import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)

Verifiquei e o Token estava correto. Ao pesquisar no Stack Overflow, descobri que o problema seria no async, mas como não tenho nenhum conhecimento nesse elemento da linguagem, não consegui resolver meu problema. Alguém poderia me explicar o que aconteceu e como eu poderia resolver?

2 respostas
solução!

Eeeeaiii Cauê, como você está?

Testei o seu código e ocorreu como esperado, o bot foi conectado com sucesso.

Segundo o log de erro que você mostrou, você não tem permissão de acesso. E isso pode ser algum problema com seu token.

  • Vá até a página de desenvolvedor do discord e em My Applications escolha a aplicação que possui seu bot.

  • Agora, vá em Bot e clique para criar um bot caso não tenha criado.

  • Após isso, copie o Token que estará do lado do ícone do seu bot:

image

  • Volte ao seu arquivo .env e cole seu token na variável DISCORD_TOKEN:
    DISCORD_TOKEN=cole_o_seu_token_aqui

Por fim, execute o código novamente e veja se obtém o resultado esperado.

Qualquer dúvida estou por aqui, tá bom?

Grande abraço!

Bom Dia Nádia, tudo que você mencionou eu já havia feito, token, bot, etc. Fiquei um tempão quebrando a cabeça e não consegui, foi só depois de descansar um pouco que percebi que no exemplo onde eu vi, estava DISCORD_TOKEN={YOUR_TOKEN} e eu pensei que as chaves deveriam ser colocadas nesse tipo de arquivo .env, por isso não funcionou, o token era interpretado como {token} e não como token, assim lançando uma exceção. Obrigado por fazer eu notar do deslize que havia cometido!