Ошибка говорит вам, что в какой-то момент discord.py
получил объект JpegImageFile
, ожидая объект, который поддерживает .startswith(b'\x89\x50\x4E\x47\x0D\x0A\x1A\x0A')
. Это, как вы уже догадались, байтовоподобный объект.
Таким образом, вы должны использовать объект bytes
вместо объекта PIL; и это даже делает ваш код проще, потому что у вас был байтовый объект с самого начала:
response = requests.get(url)
img = response.content
await message.guild.create_custom_emoji(name=emoji_name, image=img)
Используйте перегрузку конструктора, которая берет a Comparator<? super E> comparator
и передача в компараторе, который выдерживает сравнение соответствующим способом к Вашему порядку сортировки. Если Вы даете пример того, как Вы хотите отсортировать, мы можем предоставить некоторый код кода для реализации компаратора, если Вы не уверены. (Это довольно просто все же.)
Как был сказан в другом месте: offer
и add
просто различные реализации метода интерфейса. В источнике JDK я имею, add
вызовы offer
. Хотя add
и offer
имейте потенциально другое поведение в целом из-за способности к offer
чтобы указать, что значение не может быть добавлено из-за ограничений размера, это различие не важно в PriorityQueue
который неограничен.
Вот пример приоритетной сортировки очереди по длине строки:
// Test.java
import java.util.Comparator;
import java.util.PriorityQueue;
public class Test {
public static void main(String[] args) {
Comparator<String> comparator = new StringLengthComparator();
PriorityQueue<String> queue = new PriorityQueue<String>(10, comparator);
queue.add("short");
queue.add("very long indeed");
queue.add("medium");
while (queue.size() != 0) {
System.out.println(queue.remove());
}
}
}
// StringLengthComparator.java
import java.util.Comparator;
public class StringLengthComparator implements Comparator<String> {
@Override
public int compare(String x, String y) {
// Assume neither string is null. Real code should
// probably be more robust
// You could also just return x.length() - y.length(),
// which would be more efficient.
if (x.length() < y.length()) {
return -1;
}
if (x.length() > y.length()) {
return 1;
}
return 0;
}
}
Вот вывод:
короткий
носитель
очень долго действительно
Просто соответствующая передача Comparator
конструктору:
PriorityQueue(int initialCapacity, Comparator<? super E> comparator)
Единственная разница между offer
и add
интерфейс, которому они принадлежат. offer
принадлежит Queue<E>
, тогда как add
первоначально замечен в Collection<E>
интерфейс. Кроме этого оба метода делают точно, то же самое - вставляет указанный элемент в приоритетную очередь.