删除特定频道中的某些文件类型附件?

时间:2019-08-10 04:08:56

标签: discord python-3.7 discord.py discord.py-rewrite

由于我们已为某些附件,剪辑,视频,音乐等指定了频道,因此我试图添加某些文件,使其不被发布到普通频道。我可以让机器人识别链接,但是,很难识别附件,尤其是.mp4附件。

我在数组中添加了可接受的附件的白名单,然后尝试检查消息作者附件,以查看是否可以发布,是否应删除.mp4。

try函数位于on_message事件装饰器中。

whiteList = ['bmp','jpeg','jpg','png']
    try:
        for attachment in message.attachments:
            #Get general channel ID
            channel = client.get_channel(521376573245358081)
            if message.channel is channel and attachment['filename'].split('.')[-1] not in whiteList:
                await message.delete()
                botsMessage = await channel.send("{0.mention} Please refrain from posting videos in General. You may post them in #videos".format(message.author))
                await asyncio.sleep(5)
                await botsMessage.delete()
    except:
        print('Unknown error')

不会出现任何错误,因为当我测试此附件时,该机器人会跳过该功能并打印控制台消息(用于调试以确保代码到达该范围)。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

attachment['filename'].split('.')[-1]

您将attachment视为具有名为filename的键的字典。
您应该将attachment视为具有filename属性的对象,如下所示:

attachment.filename.split('.')[-1]

此外,无论何时删除邮件,都应break循环

# ...
botsMessage = await channel.send("{0.mention} Please refrain from posting videos in General. You may post them in #videos".format(message.author))
await asyncio.sleep(5)
await botsMessage.delete()
break
# ...

如果用户发送了多个视频文件,则即使您删除了消息,循环仍将继续。这可能导致它尝试删除已删除的邮件
break语句可防止上述情况的发生。