Отправить сообщение на канал с помощью команды discord.py

Я пытаюсь сделать команду -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'
Насколько мне известно, этот код правильный и должен иметь возможность отправлять сообщение на указанный канал, но это не так и вместо этого выдает ошибку.

Что я делаю не так?

Вы пытаетесь отправить сообщение на канал, в котором была выполнена команда, или на канал, указанный пользователем?

Eric Jin 13.12.2020 03:36

Что такое discord.? Вероятно, вы можете просто полностью удалить этот параметр канала и изменить нижнюю строку на await ctx.send(message). Разве параметр канала не предназначен для ввода пользователем, чтобы направить выходное сообщение на другой канал, а не на тот, в котором он использовался?

Break 13.12.2020 03:58

если вы хотите, чтобы пользователь сам определял канал, используйте это: discord.utils.get(self.get_guild(ctx.guild.id).channels, name=channel) также проверьте свой отступ. здесь это выглядит неправильно, но, возможно, это правильно в вашем реальном сценарии

Break 13.12.2020 03:59
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
1 802
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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)

Другие вопросы по теме