theycallmenazar
@theycallmenazar

Ошибка: 'NoneType' object has no attribute 'name'?

Вот код:
import discord
from discord.ext import commands , tasks
from discord.utils import get
from PIL import Image, ImageDraw, ImageFont, ImageOps
from time import sleep
import requests
import io
import datetime

bot = commands.Bot(
    command_prefix = '.',
    intents = discord.Intents.all(), 
    )
bot.remove_command('help')

@bot.event
async def on_ready():
    print(f'бот активирован!')
    await bot.change_presence(status = discord.Status.online, activity = discord.Game('test'))

    banner.start()
    


@tasks.loop(seconds = 10)
async def banner():
    guild = bot.get_guild(814473687578705980)
    members = guild.members

    with Image.open('C:/Users/User/Documents/дс/banner.jpg') as image:
        # Создание объекта ImageDraw для рисования на изображении
        draw = ImageDraw.Draw(image)

        # получаем время, которое было 2 часа назад
        two_hours_ago = datetime.datetime.utcnow() - datetime.timedelta(minutes= 2)


        # создаем словарь для хранения количества сообщений каждого участника
        message_count = {}

        # перебираем все текстовые каналы на сервере
        for channel in guild.text_channels:
            # перебираем все сообщения в канале, опубликованные за последние 2 часа
            async for message in channel.history(after=two_hours_ago):
                # проверяем, что сообщение было отправлено участником сервера
                if message.author in members:
                    # увеличиваем количество сообщений для данного участника
                    if message.author in message_count:
                        message_count[message.author] += 1
                    else:
                        message_count[message.author] = 1

    most_active_member = max(message_count, key=message_count.get)

    activity = most_active_member.activity

    font = ImageFont.truetype('C:/Users/User/Documents/дс/Montserrat-Regular.ttf', size = 59)
    draw.text((1077, 555), f' {len(members)}', fill='white', font=font)

    font = ImageFont.truetype('C:/Users/User/Documents/дс/Montserrat-Regular.ttf', size = 60)
    draw.text((627, 776), f'{activity.name}'[:20], fill='gray', font=font)

    if isinstance(most_active_member, discord.Member):
        font = ImageFont.truetype('C:/Users/User/Documents/дс/Montserrat-Regular.ttf', size = 100)
        draw.text((627, 662), f'{most_active_member.name}'[:8], fill='white', font=font)
    else:
        font = ImageFont.truetype('C:/Users/User/Documents/дс/Montserrat-Regular.ttf', size = 100)
        draw.text((627, 662), f'{most_active_member}'[:8], fill='white', font=font)
        
    url = str(most_active_member.avatar_url)[:-10]

    response = requests.get(url, stream=True)
    response = Image.open(io.BytesIO(response.content))
    response = response.convert('RGBA')

    # Обрезка изображения до круга
    response = ImageOps.fit(response, (315, 315), method=Image.LANCZOS, centering=(0.5, 0.5))
    mask = Image.new('L', (315, 315), 0)
    draw = ImageDraw.Draw(mask)
    draw.ellipse((0, 0, 315, 315), fill=255)
    response.putalpha(mask)

        # Вставка изображения
    image.paste(response, (222, 601), response)

    image.save('C:/Users/User/Documents/с/stats_banner.png')
    await guild.edit(file=discord.File('C:/Users/User/Documents/дс/stats_banner.png'))

bot.run("<токен>")

Через 2 минуты после запуска кода (он запускается), выдает ошибку:
Unhandled exception in internal background task 'banner'.
Traceback (most recent call last):
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\tasks\__init__.py", line 101, in _loop
    await self.coro(*args, **kwargs)
  File "c:\Users\User\Documents\дс\main.py", line 63, in banner
    draw.text((627, 776), f'{activity.name}'[:20], fill='gray', font=font)
AttributeError: 'NoneType' object has no attribute 'name'

Почему выдает ошибку? И что нужно поменять?
  • Вопрос задан
  • 116 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Нужно включить голову и подумать.
activity у пользователя есть не всегда. Если её нет, поле activity вернёт значение None.
Перед тем, как обращаться к свойствам activity (например, name), нужно проверить, что оно не None.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы