首页 > 解决方案 > Python Discord 机器人问题

问题描述

这是一篇很长的文章。所以基本上我试图编写一个基于哈利波特的 Python 机器人,在我的电脑上我使用 repl.it,在我的笔记本电脑上我使用 PyCharm CE。我的笔记本电脑没有检测到任何类型的不和谐(如导入不和谐),我的电脑出现错误“AttributeError:'NoneType'对象没有属性'strip'”。加上 repl.it 不允许我创建 .env 文件,我无法弄清楚如何使用 Secrets(环境变量)。我的笔记本电脑也不会让我重新安装/卸载不和谐,并出现很多错误(当我尝试强制重新安装时出现错误,权限被拒绝等。我不知道如何更改权限)以下是麻烦的代码。请注意,它们在两个平台上完全相同

import os

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(os.getenv('TOKEN'))'''

标签: python

解决方案


简短的回答:

在最后一行中,只需更改client.run(os.getenv('TOKEN'))为字符串格式的实际机器人令牌所在的client.run('<bot-token>')位置。'<bot-token>'(如果您不确定在哪里可以找到您的机器人的机器人令牌,此链接可能会有所帮助)

长答案:

client.run()函数需要您的机器人令牌作为字符串格式的参数。从您提到的错误消息来看,它似乎os.getenv('TOKEN')正在返回None值,并且似乎在内部它试图剥离给定的令牌并且未能剥离它,因为None值不像字符串值那样具有剥离属性。您是否将您的机器人令牌存储在字符串格式的密钥'TOKEN'中?os.environ除非你这样做,否则我认为你根本不应该使用os.getenv('TOKEN')。只需将机器人令牌作为字符串输入,直接作为client.run(). (如果您不确定在哪里可以找到您的机器人的机器人令牌,此链接可能会有所帮助)

顺便说一句,我假设'''最后是一个错字,如果不是,请删除它!

因此,新代码如下所示:

import os
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('<your bot token>')

推荐阅读