Проблема с командой для бота на discord.py
В общем я пишу бота и столкнулся с довольно страной проблемой. Я написал команду, которая выводит аватар выбранного пользователя в Embed сообщении
@bot.command(pass_context=True)
async def Avatar(ctx, *member: discord.Member):
if member:
embedVar = discord.Embed(title = "Аватар участника " + member.name, color = 0x9932cc)
embedVar.set_image(url = member.avatar)
else:
user = ctx.message.author
embedVar = discord.Embed(title = "Аватар участника " + ctx.author.name, color = 0x9932cc)
embedVar.set_image(url = user.avatar)
await ctx.send(embed = embedVar)
В этой команде можно указать пользователя, но это не обязательно. Если этого не делать, то команда выводит аватар автора сообщения. Если указать пользователя, то соответственно выведет его аватар. Но когда я пытаюсь вызвать эту команду с указанием пользователя - мне говорят что в кортеже member нет элемента name.
File "c:\Users\Сергей\Desktop\AbsoluteSolver\bot.py", line 78, in Avatar
embedVar = discord.Embed(title = "Аватар участника " + member.name, color = 0x9932cc)
^^^^^^^^^^^
AttributeError: 'tuple' object has no attribute 'name'
При этом если я из кода убираю звезду(которая делает аргумент не обязательным), то ошибка исчезает, но, понятное дело, команда не будет работать без аргументов. Мне бы хотелось что бы работало и то, и другое. Я пробовал так же поменять в списке аргументов Member на User, но ошибка не исчезла
Ответы (1 шт):
Т.к. в определение вашей функции не member, а *member, то значение переменной member будет кортеж с одним элементом.
Примените команду (запятая в ней важнa)
member, = member
после if, чтобы в переменной member получить сам объект (типа discord.Member) т.е.
if member:
member, = member
embedVar = discord.Embed(title = "Аватар участника " + member.name, color = 0x9932cc)
embedVar.set_image(url = member.avatar)