Discord.py пытается найти автора сообщения во встраивании - PullRequest
0 голосов
/ 07 мая 2020

Я занимаюсь кодированием своего собственного бота Discord с использованием Discord.py в Thonny, используя python версию 3.7.6. Я хочу иметь встраивание при вводе определенной команды (! Submit), чтобы имя пользователя было заголовком, а содержимое сообщения - описанием. У меня все в порядке с! Submit '' в моем встраивании, но если есть какой-либо способ удалить это и иметь только содержимое сообщения без! Submit, я был бы очень признателен. Прямо сейчас с моим кодом я получаю две ошибки, одна из которых заключается в том, что client.user.name - это имя бота (отправить бота), а не автора (старый код), и я получаю это сообщение `` Команда вызвала исключение : TypeError: Объект типа Member не является JSON сериализуемым 'с моим новым кодом (см. Ниже), если кто-нибудь может предложить понимание, пожалуйста, ответьте с соответствующими исправлениями!

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

@client.event
async def on_ready():
 print ("bot online")


@client.command()
async def submit(message):
 embed = discord.Embed(
    title = message.message.author,
    description = message.message.content,
    colour = discord.Colour.dark_purple()
 )
 channel = client.get_channel(707110628254285835)
 await channel.send(embed=embed)





client.run('TOKEN')

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Вы очень близки ...

Следующие пункты должны помочь:

  1. Работая с командами, вы обычно определяете контекст команды как «ctx», то есть первый и когда-то единственный аргумент. "message" обычно используется в событиях сообщения, таких как async def on_message(message):.
  2. Чтобы отделить сообщение от самой команды, вы добавляете аргументы в определение функции.
  3. Чтобы получить имя пользователя вам нужно преобразовать в строку, чтобы избежать ошибки TypeError.
  4. Чтобы отправить сообщение обратно в тот же канал, в котором было введено! submit, вы можете использовать await ctx.send(embed=embed)

Попробуйте :

@client.command()
async def submit(ctx, *, extra=None):
    embed = discord.Embed(
        title=str(ctx.author.display_name),
        description=extra,
        colour=discord.Colour.dark_purple()
    )
    await ctx.send(embed=embed)

Результат:

enter image description here

0 голосов
/ 07 мая 2020
client = commands.Bot(command_prefix = '!')
#got rid of the old channel variable here
@client.event
async def on_ready():
 print ("bot online")

@client.command()
async def submit(ctx, *, message): #the `*` makes it so that the message can include spaces
 embed = discord.Embed(        
    title = ctx.author, #author is an instance of the context class
    description = message, #No need to get the content of a message object
    colour = discord.Colour.dark_purple()
 )
 channel = client.get_channel(707110628254285835)
 await channel.send(embed=embed)

client.run('TOKEN')

Проблемы : 1. channel определяется дважды, 2. функциональные команды в discord.py принимают неявный аргумент context , обычно называемый ctx. В целом, похоже, что вы не понимаете основополагающих концепций OOP, которые может предложить discord.py. Может быть полезно освежить sh свою память онлайн-уроком или статьей.

...