Как отправить сообщение на указанный канал c? Раздор / Python - PullRequest
0 голосов
/ 02 апреля 2020

Как отправить сообщение на указанный c канал? Почему я получаю эту ошибку? Мой ChannelID прав

Код:

from discord.ext import commands


client = commands.Bot(command_prefix='!')
channel = client.get_channel('693503765059338280')



@client.event
async def on_ready():
    print('Bot wurde gestartet: ' + client.user.name)
#wts        
@client.command()
async def test(ctx,name_schuh,preis,festpreis):
    await channel.send(discord.Object(id='693503765059338280'),"Name:" + name_schuh +"\n Preis: " + preis +"\n Festpreis: " + festpreis)

Ошибка:

raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'NoneType' object has no attribute 'send'



Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Причина ошибки в том, что channel = client.get_channel() вызывается до того, как бот подключен, то есть он всегда будет возвращать None, поскольку он не может видеть никаких каналов (не подключен).

Переместить это внутрь ваша командная функция должна получить объект channel в качестве вызываемой команды.

Также обратите внимание, что с версии 1.0 снежинки не являются int типом вместо str тип, Это означает, что вам нужно использовать client.get_channel(693503765059338280) вместо client.get_channel('693503765059338280').

from discord.ext import commands


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


@client.event
async def on_ready():
    print('Bot wurde gestartet: ' + client.user.name)

@client.command()
async def test(ctx,name_schuh,preis,festpreis):
    channel = client.get_channel(693503765059338280)
    await channel.send("Name:" + name_schuh +"\n Preis: " + preis +"\n Festpreis: " + festpreis)

client.run('token')
0 голосов
/ 02 апреля 2020

client и channel находятся вне области видимости. Вы можете использовать ключевое слово global для грязного взлома:

from discord.ext import commands

client = commands.Bot(command_prefix='!')
channel = client.get_channel(693503765059338280)

@client.event
async def on_ready():
    global client
    print('Bot wurde gestartet: ' + client.user.name)

#wts        
@client.command()
async def test(ctx,name_schuh,preis,festpreis):
    global client
    global channel
    await channel.send(discord.Object(id=693503765059338280),"Name:" + name_schuh +"\n Preis: " + preis +"\n Festpreis: " + festpreis)

Но лучшей альтернативой будет класс-обработчик, содержащий экземпляры.

...