Для создания статистики сообщений от пользователей в disnake за один день, вы можете использовать следующий подход:
1. Импортируйте необходимые модули:
```python
import disnake
from datetime import datetime, timedelta
```
2. Определите функцию для получения статистики сообщений за указанный период времени:
```python
async def get_message_stats(guild, start_date, end_date):
stats = {}
async for message in guild.history(limit=None, after=start_date, before=end_date):
if message.author.id not in stats:
stats[message.author.id] = 1
else:
stats[message.author.id] += 1
return stats
```
Функция принимает объект сервера `guild`, начальную и конечную даты `start_date` и `end_date` соответственно. Функция возвращает словарь, где ключ - это ID пользователя, а значение - количество сообщений данным пользователем за указанный период времени.
3. Получите сервер disnake, для которого вы хотите собрать статистику сообщений:
```python
guild_id = 1234567890 # замените на ID вашего сервера disnake
guild = disnake.get_guild(guild_id)
```
4. Определите требуемый период времени, за который вы хотите получить статистику сообщений:
```python
start_date = datetime.utcnow() - timedelta(days=1)
end_date = datetime.utcnow()
```
В примере выше мы выбираем период в один день от текущего времени.
5. Вызовите функцию `get_message_stats()` для получения статистики сообщений за указанный период времени:
```python
stats = await get_message_stats(guild, start_date, end_date)
```
6. Выведите полученную статистику на экран или сохраните ее в файл:
```python
for user_id, message_count in stats.items():
user = guild.get_member(user_id)
print(f"{user.display_name}: {message_count} сообщений")
```
Чтобы автоматизировать отправку статистики о количестве сообщений в определенном канале каждый день, вы можете использовать планировщик задач или cron задачи на своем сервере. Самый оптимальный способ зависит от вашей инфраструктуры и предпочтений.
Один из возможных способов автоматизации - использование библиотеки `apscheduler`, которая позволяет запускать функции по расписанию. Приведенный ниже код показывает, как использовать `apscheduler` для отправки статистики в определенный канал каждый день в 12:00 (по серверному времени):
```python
from apscheduler.schedulers.asyncio import AsyncIOScheduler
# Создание экземпляра планировщика
scheduler = AsyncIOScheduler()
async def send_message_stats():
# Получение статистики сообщений
stats = await get_message_stats(guild, start_date, end_date)
# Отправка статистики в канал
channel_id = 1234567890 # замените на ID канала, куда должна быть отправлена статистика
channel = guild.get_channel(channel_id)
message = '\n'.join([f"{guild.get_member(user_id).display_name}: {message_count} сообщений" for user_id, message_count in stats.items()])
await channel.send(message)
# Устанавливаем расписание задачи
scheduler.add_job(send_message_stats, 'cron', hour=12)
# Запуск планировщика
scheduler.start()
```
Оптимальное решение для вас будет зависеть от вашей инфраструктуры, окружения и требований к отправке статистики.