Я видел несколько сообщений по этой теме, но они мне не особо помогли.
Я хочу проверить событие on_member_join, является ли аватар пользователя default или нет. Если это default, то пользователя следует забанить, если нет, то нет.
Я уже разработал код, но он блокирует участника, даже если изображение профиля не по умолчанию:
@client.event
async def on_member_join(member):
has_avatar = client.check(lambda ctx: ctx.avatar_url != ctx.author.default_avatar_url) # Seen from another post
if has_avatar:
await member.ban(reason = "Default avatar")
else:
channel1 = client.get_channel(ChannelID)
await channel1.send("No default avatar")
Я также пытался сравнить member.avatar с аватаром default, но это не сработало.
Что я делаю неправильно?





Я огляделся в поисках тебя. Я проверил документацию по членам и пользовательским классам. Я ничего не нашла на аватарке. Я не уверен, возможно ли это.
Это невозможно с помощью обычной библиотеки discord.py, но я бы предложил альтернативу. Используйте PIL для сравнения аватара пользователя (с помощью discord.py вы действительно можете загрузить аватар).
Что я имею в виду? Допустим, у вас есть папка «Аватары по умолчанию» со всеми аватарами по умолчанию. Вы сравниваете аватар пользователя с каждым файлом в папке, если он соответствует любому из изображений, аватар используется по умолчанию, в противном случае - пользовательский.
Я никогда не работал с PIL, но нашел вот что: Сравнить изображения Python PIL может быть, и, может быть, это поможет вам с вашей проблемой. Я бы посоветовал подробнее изучить PIL, поскольку это интересная библиотека.
Неужели невозможно? Я нашел еще один вопрос, который немного устарел, но имел это как решение для команды, и, похоже, он работал. Однако я просто хочу это как event
Есть возможность проверить, есть ли у пользователя аватар. Для этого вам понадобится только member.avatar.
Вы можете построить свой код на основе этого:
@client.event
async def on_member_join(member):
channel1 = client.get_channel(YourChannelID)
if not member.avatar: # If there is no avatar
await member.ban(reason = "No avatar!")
else:
await channel1.send("Avatar!")
Ознакомьтесь с документы для получения дополнительной информации.
Спасибо, это помогло!
вопрос, на который я смотрел, имел это как решение. Однако это для команды, а не для события. Вот почему я подумал, что это возможно.