我要做的是使不和谐的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时,总是会显示错误消息,期望它发送所需的消息。
答案 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)
但是我可能会误解您要做什么。