无法将机器人连接到Discord

时间:2020-08-19 02:01:12

标签: python python-3.x api discord discord.py

我最近决定,我想开始学习更多有关真实Python及其相关应用程序的知识。为此,我尝试编写一个简单的Discord机器人。但是,我遇到的问题不同于在任何平台上看到的任何其他问题-包括以下问题:can't find '__main__' module in 'bot'。我在命令提示符中运行python bot时收到此错误。现在,我假设我确实应该运行python bot而不是python bot.py,因为.py仅表示bot是一个Python文件。我之所以这么认为是因为,当我运行python bot.py时,会收到以下消息:python: can't open file 'bot.py': [Errno 2] No such file or directory。这是bot.py:

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(client.user(), "has connected to Discord!")


client.run(TOKEN)

此外,当我在Python Shell中运行bot.py时,还会收到以下消息:

Traceback (most recent call last):
  File "C:\Users\me\AppData\Local\Programs\Python\Python38-32\bot.py", line 17, in <module>
    client.run(TOKEN)
  File "C:\Users\me\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\client.py", line 640, in run
    return future.result()
  File "C:\Users\me\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\client.py", line 621, in runner
    await self.start(*args, **kwargs)
  File "C:\Users\me\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\client.py", line 584, in start
    await self.login(*args, bot=bot)
  File "C:\Users\me\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\client.py", line 442, in login
    await self.http.static_login(token.strip(), bot=bot)
AttributeError: 'NoneType' object has no attribute 'strip'

而且,我不确定代码中的哪一个(甚至哪一个)已解决该问题,但这是.env.txt:

#.env
DISCORD_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

好的,我认为这涵盖了所有内容。如果有人需要澄清任何部分,我很乐意提供。预先感谢。

2 个答案:

答案 0 :(得分:0)

现在,我认为我确实应该运行python bot而不是python bot.py,因为.py仅表示bot是一个Python文件

除非正在运行模块,否则在运行python文件时应始终使用“ .py”结尾。 “ python bot.py”是正确的。

在'bot'中找不到'__main__'模块

如果您直接调用模块,则需要在模块中有一个名为“ __main__.py”的python文件,该文件可以执行您希望模块执行的操作。

AttributeError:'NoneType'对象没有属性'strip'

因此TOKEN返回了程序未检查的“ None”,因此在尝试执行strip方法时无法执行,因为“ None”对象没有方法“ strip”。

答案 1 :(得分:0)

您应该在load_dotenv内传递.env文件的路径。因为目前您的TOKEN返回None

import os

import discord
from dotenv import load_dotenv

load_dotenv("myenvfile.env") # <-- you can enter your .env file like so
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(client.user(), "has connected to Discord!")


client.run(TOKEN)

.env

DISCORD_TOKEN = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"