'NoneType'对象没有属性'send'-Discord Bot

时间:2019-08-04 04:22:56

标签: discord.py

我要做的是使不和谐的bot在通过DM向其提供“!say”命令时向服务器中的通道发送消息。

我尝试了很多不同的代码,但通常会出现“属性错误“ X对象没有属性Y”

from discord.ext import commands

bot = commands.Bot(command_prefix='!')

@bot.command()
async def say(ctx):
    channel = bot.get_channel('584307345065246725')
    await channel.send(ctx)

当我向机器人发送DM时,总是会显示错误消息,期望它发送所需的消息。

2 个答案:

答案 0 :(得分:1)

您的代码段中发生了一件非常简单的事情,它需要先进行纠正,然后才能执行您要尝试执行的操作。

首先,看看Client.get_channel(您正在呼叫)的API section

get_channel(id)
Returns a channel with the given ID.

Parameters
id (int) – The ID to search for.

Returns
The returned channel or None if not found.

Return type
Optional[Union[abc.GuildChannel, abc.PrivateChannel]]

因此,当您执行以下操作:channel = bot.get_channel('584307345065246725')时,您传递的参数不正确。根据API,唯一的参数必须是int,但是您要传递字符串。只需除去单引号就可以了。

Protip::在“返回”下,API指出,如果未找到频道,则可以返回None,因为您正在通过频道在一个字符串中。因此,channel成为您在错误中看到的NoneType对象。因此,当您执行channel.send ...时,您会得到图片。

答案 1 :(得分:1)

频道ID是一个整数,而不是字符串

@bot.command()
async def say(ctx):
    channel = bot.get_channel(584307345065246725)
    await channel.send(ctx)

我不太了解的是为什么你不能做:

from discord.ext import commands

bot = commands.Bot(command_prefix='!')

@bot.command(pass_context=True)
async def say(ctx):
    await ctx.send(ctx)

但是我可能会误解您要做什么。