#python #discord #discord.py
#python #Discord #discord.py
Вопрос:
Я пытаюсь создать простой отправитель для встраивания, который состоит из частей: Заголовок, Описание и нижний колонтитул.
Вот мой код:
@bot.command()
async def embed(ctx, *, title, desc, footer):
embed = discord.Embed(title=f"{title}", description=f"{desc}", color=0x00ff00)
embed.set_footer(text=f"{footer}")
await ctx.send(embed=embed)
Ошибка, с которой я сталкиваюсь, заключается в следующем:
Traceback (most recent call last):
File "C:UsersRyzenAppDataRoamingPythonPython37site-packagesdiscordextcommandsbot.py", line 892, in invoke
await ctx.command.invoke(ctx)
File "C:UsersRyzenAppDataRoamingPythonPython37site-packagesdiscordextcommandscore.py", line 797, in invoke
await injected(*ctx.args, **ctx.kwargs)
File "C:UsersRyzenAppDataRoamingPythonPython37site-packagesdiscordextcommandscore.py", line 92, in wrapped
raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: TypeError: embed() missing 2 required keyword-only arguments: 'desc' and 'footer'
Спасибо за помощь.
Ответ №1:
Вы также можете передать длинную строку в свою переменную, используя кавычки:
async def embed(ctx, title, desc, footer):
embed = discord.Embed(title=title, description=desc, color=0x00ff00)
embed.set_footer(text=footer)
await ctx.send(embed=embed)
Использование: {prefix}embed "title here" "desc here" "footer here"
Комментарии:
1. Спасибо, брат. Вы мне очень помогли
Ответ №2:
Команды In *
получат все после него, использование переменных превратит его в одно слово.
Используя *
, чтобы получить все данные как одну переменную. Вы должны каким-то образом разделить данные, я сделал это здесь, используя -
которые, чтобы составить список индексов укусов, которые комментируются в коде.
Используйте это так {prefix}embed title here - desc here - footer here
@bot.command()
async def embed(ctx, *, data):
data = data.split('-') # title = 0, desc = 1, footer=2
embed = discord.Embed(
title=f"{data[0]}", description=f"{data[1]}", color=0x00ff00)
embed.set_footer(text=f"{data[2]}")
await ctx.send(embed=embed)
Ответ №3:
У вас может быть только один аргумент после *
, и все остальные данные будут переданы в этом одном аргументе.
Например: async def embed(ctx, title, desc, *, footer)
Если вы передадите следующую команду: !embed Lorem ipsum dolor sit amet
Вы получите переменные, которые выглядят как:
title = "Lorem"
desc = "ipsum"
footer = "dolor sit amet"
Ответ №4:
Дополнительно
@bot.command()
async def embed(ctx, *, data):
await ctx.message.delete()
data = data.split('-')
embed=discord.Embed(
title=f"{data[0]}", url=f"{data[1]}", description=f"{data[2]}", color=0x00ff00)
embed.set_author(
name=f"{data[3]}", url=f"{data[4]}", icon_url=f"{data[5]}")
embed.set_thumbnail(
url=f"{data[6]}")
embed.add_field(name=f"{data[7]}", value=f"{data[8]}", inline=True)
embed.add_field(name=f"{data[9]}", value=f"{data[10]}", inline=True)
embed.set_footer(text=f"{data[11]}")
await ctx.send(embed=embed)
# title = 0
# title url = 1
# description = 2
# name = 3
# name url = 4
# icon url = 5
# mini icon url = 6
# name = 7
# vaule = 8
# name = 9
# vaule = 10
# footer = 11
Комментарии:
1. Было бы чрезвычайно полезно, если бы вы могли улучшить ответ комментарием, объясняющим, как работает ваш код