Я пытаюсь сделать команду -say #channel-name message
для своего бота в разногласиях, используя код:
@commands.command()
@commands.has_permissions(manage_messages=True)
async def say(self, ctx, channel, *, message):
channel = discord.
await channel.send(message)
И получил ошибкуdiscord.ext.commands.errors.CommandInvokeError: CommandAttributeError: 'str' object has no attribute 'send'
Насколько мне известно, этот код правильный и должен иметь возможность отправлять сообщение на указанный канал, но это не так и вместо этого выдает ошибку.
Что я делаю не так?
Что такое discord.
? Вероятно, вы можете просто полностью удалить этот параметр канала и изменить нижнюю строку на await ctx.send(message)
. Разве параметр канала не предназначен для ввода пользователем, чтобы направить выходное сообщение на другой канал, а не на тот, в котором он использовался?
если вы хотите, чтобы пользователь сам определял канал, используйте это: discord.utils.get(self.get_guild(ctx.guild.id).channels, name=channel)
также проверьте свой отступ. здесь это выглядит неправильно, но, возможно, это правильно в вашем реальном сценарии
channel
имеет тип str
, а не discord.TextChannel
. Чтобы преобразовать его в канал, вы можете сделать channel : discord.TextChannel
в аргументах:
@commands.command()
@commands.has_permissions(manage_messages=True)
async def say(self, ctx, channel : discord.TextChannel, *, message):
channel = discord.
await channel.send(message)
Вы пытаетесь отправить сообщение на канал, в котором была выполнена команда, или на канал, указанный пользователем?