TypeError:令牌必须是 str 类型,而不是 NoneType

问题描述 投票:0回答:3

我正在尝试使用 python 制作一个 Discord 机器人,但是当我运行它时出现此错误:

TypeError: token must be of type str, not NoneType

如果你想查看我的代码,这里是:

import discord
import os
import random
from dotenv import load_dotenv

load_dotenv()

client = discord.Bot()
token = os.getenv('Token')

@client.event
async def on_ready():
    print("Logged in as a bot {0.user}".format(client))

@client.event
async def on_message(message):
    username = str(message.author).split("#")[0]
    channel = str(message.channel.name)
    user_message = str(message.content)

    print(f'Message {user_message} by {username} on {channel}')

    if message.author == client.user:
        return

    if channel == "random":
        if user_message.lower() == "hello" or user_message.lower() == "hi":
            await message.channel.send(f'Hello {username}')
            return
        elif user_message.lower() == "bye":
            await message.channel.send(f'Bye {username}')
        elif user_message.lower() == "tell me a joke":
            jokes = [" Can someone please shed more\
            light on how my lamp got stolen?",
                    "Why is she called llene? She\
                    stands on equal legs.",
                    "What do you call a gazelle in a \
                    lions territory? Denzel."]
            await message.channel.send(random.choice(jokes))

client.run(token)

我的机器人令牌是假的,因为我不想让任何人知道它是令牌。请帮我解决这个问题。非常感谢!

python discord bots
3个回答
0
投票

如果您的 Discord 机器人托管在本地,无需公开共享或在线托管,您只需将 token 变量直接设置为您的 token 字符串即可。

token = 'MTAwNjA1NTQ4NTg3MjUzNzcwMQ.GcPn03.xeIRE4c1W0OF8aNtkA4hj1Nl2V6mowLV1BqWuU'

如果您想利用环境变量来保证您的机器人令牌的安全(通常当您想在线运行您的不和谐机器人时),传递给 os.getenv() 的参数应该是您在环境变量。


0
投票

您的令牌值应该从环境变量名称中获取:

如果 token 为 None,那么不要做任何其他事情,因为你的程序没有 token 就无法运行

token = os.getenv('MY_TOKEN_VAR')
if not token:
    print('ERROR: Token var is missing: MY_TOKEN_VAR')
    sys.exit(-1)

0
投票

如果您有“load-dotenv”依赖项,请验证“pip list”, 如果没有安装: pip install load-dotenv

© www.soinside.com 2019 - 2024. All rights reserved.