我正在尝试编写一个从邮件附件中添加自定义表情符号的机器人,但出现以下错误:
Traceback (most recent call last):
File "C:\Users\PC\AppData\Roaming\Python\Python37\site-packages\discord\client.py", line 218, in _run_event
await coro(*args, **kwargs)
File "D:\Documents\python projects\votingbot.py", line 84, in on_message
await message.guild.create_custom_emoji(name=emoji_name, image=img)
File "C:\Users\PC\AppData\Roaming\Python\Python37\site-packages\discord\guild.py", line 1202, in create_custom_emoji
img = utils._bytes_to_base64_data(image)
File "C:\Users\PC\AppData\Roaming\Python\Python37\site-packages\discord\utils.py", line 264, in _bytes_to_base64_data
mime = _get_mime_type_for_image(data)
File "C:\Users\PC\AppData\Roaming\Python\Python37\site-packages\discord\utils.py", line 251, in _get_mime_type_for_image
if data.startswith(b'\x89\x50\x4E\x47\x0D\x0A\x1A\x0A'):
AttributeError: 'JpegImageFile' object has no attribute 'startswith'
这是我的代码:
import discord
import asyncio
from urllib.request import urlretrieve
from PIL import Image
import requests
from io import BytesIO
# obviously the setup stuff like def on_message is cut out for brevity
url = message.attachments[0].url
response = requests.get(url)
img = Image.open(BytesIO(response.content))
emoji_name = message.content.replace("!addemojipoll ","")
await message.guild.create_custom_emoji(name=emoji_name, image=img)
是因为img
不是create_custom_emoji
所要求的类似字节的对象吗?
答案 0 :(得分:0)
该错误告诉您,在某个时候,discord.py
得到了一个JpegImageFile
对象,同时期望一个支持.startswith(b'\x89\x50\x4E\x47\x0D\x0A\x1A\x0A')
的对象。如您所料,这是一个类似字节的对象。
因此,您应该使用bytes
对象而不是PIL对象;而且这甚至使您的代码更简单,因为从一开始就有一个byte对象:
response = requests.get(url)
img = response.content
await message.guild.create_custom_emoji(name=emoji_name, image=img)