TypeError: аргумент format () после ** должен быть отображением, а не вложением - PullRequest
0 голосов
/ 04 октября 2018

Привет. Я пытаюсь решить проблему с модулем журнала с моим ботом разногласий.Я получаю сообщение об ошибке TypeError: format() argument after ** must be a mapping, not Attachment

cogs\core.py", line 351, in on_message_delete delmessage.add_field(name='**Attachment**', value='[{filename}]({url})'.format(**attachment), inline=True) TypeError: format() argument after ** must be a mapping, not Attachment

Я не уверен, что вызывает это.

Вот с чем я работаю:

async def on_message_delete(self, message):
    guild = message.guild
    author = message.author
    bot_member = guild.me
    time = dt.datetime.utcnow()
    now = dt.datetime.utcnow()
    if author.bot:
        return
    if not guild:
        return
    cleanmsg = message.content
    for i in message.mentions:
        cleanmsg = cleanmsg.replace(i.mention, str(i))
    name = author
    name = " ~ ".join((name.name, name.nick)) if name.nick else name.name
    changes = True
    if author.id != self.bot.user.id:
        infomessage = "A message by {} was deleted.".format(message.author.mention, message.channel.mention)
        delmessage = discord.Embed(description=infomessage, colour=discord.Color.purple(), timestamp=time)
        delmessage.add_field(name="Message:", value=cleanmsg)
        delmessage.set_footer(text="ID: {}".format(message.author.id))
        delmessage.set_author(name=name + "'s message was deleted.", icon_url=message.author.avatar_url)
        if message.attachments:
            for attachment in message.attachments:
                delmessage.add_field(name='**Attachment**', value='[{filename}]({url})'.format(**attachment), inline=True)
        await self.bot.send_log_message(guild, embed=delmessage)

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Некоторая информация для ОП.Доступ к любым ссылкам таким способом не будет работать.Недавно раздор изменил способ кэширования изображений.Если вы получите доступ к изображению до того, как оно будет удалено, вы сможете получить кэшированную копию, в противном случае, если оно будет удалено до того, как вы получите к нему доступ, оно пропадет навсегда.

Встраивание ссылки и доступ к ней приведет только к ошибке 403.

0 голосов
/ 04 октября 2018

Вы не можете распаковать объекты, чтобы получить их атрибуты (если объект специально не предназначен для этого).Вместо этого вы можете написать строку формата для доступа к атрибутам через точечную запись:

delmessage.add_field(name='**Attachment**', value='[{0.filename}]({0.url})'.format(attachment), inline=True)
...