【问题标题】:Trouble connecting bot to Discord无法将机器人连接到 Discord
【发布时间】:2020-12-08 05:59:30
【问题描述】:

我最近决定要开始更多地了解真实世界的 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

好的,我认为这涵盖了所有内容。如果有人需要对此的任何部分进行澄清,我很乐意提供。提前致谢。

【问题讨论】:

  • 如果你print(TOKEN)会输出什么?

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


【解决方案1】:

现在,我假设我确实应该运行 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”。

【讨论】:

    【解决方案2】:

    您应该在 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"
    

    【讨论】:

      猜你喜欢
      • 2021-02-19
      • 2022-01-23
      • 2021-04-21
      • 2021-08-24
      • 2020-09-23
      • 2020-06-07
      • 2018-12-29
      • 1970-01-01
      • 2023-03-18
      相关资源
      最近更新 更多