Вот код:
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'
Почему выдает ошибку? И что нужно поменять?