Чтобы отправлять сообщения только тем пользователям, которые в данный момент онлайн, нужно правильно проверить статус каждого участника. В вашем текущем коде есть несколько ошибок. Во-первых, использование выражения `for member.status is not discord.status.offline in ctx.guild.members` является неправильным синтаксисом для цикла. Вместо этого вам следует использовать простой цикл `for` и проверять статус с помощью условия `if`.
В вашей программе также есть ошибка импорта модуля `discord` вместо `disnake`, который вы уже используете.
Вот исправленный вариант вашего кода:
```python
import disnake
from disnake.ext import commands
intents = disnake.Intents.default()
intents.members = True # Включаем разрешение на доступ к информации о членах сервера
bot = commands.Bot(command_prefix=",", help_command=None, intents=intents)
@bot.event
async def on_ready():
print(f"bot {bot.user} ready")
@bot.command(name='start')
async def send_message_to_online_members(ctx: commands.Context, message: str):
for member in ctx.guild.members:
if member.status != disnake.Status.offline: # Проверяем, что статус не offline
try:
await member.send(f'{member.mention}\n**Поздравляю!**, вы получили **__Ночной Подарок__**')
except Exception as e:
print(f"Не удалось отправить сообщение {member.mention}: {e}")
bot.run("Ваш_токен_здесь") # Замените своим токеном
```
Несколько моментов, на которые стоит обратить внимание:
1. **Проверка статуса**: Мы используем `if member.status != disnake.Status.offline`, чтобы убедиться, что пользователь онлайн.
2. **Обработка ошибок**: Мы добавили вывод сообщения об ошибках, чтобы легче отладить отправку сообщений.
3. **Импорт**: Удостоверьтесь, что используете правильные модификаторы для импорта и обеспечения разрешений для работы с членами сервера (`intents.members = True`).
Теперь код будет отправлять сообщения только тем пользователям, которые находятся в онлайн-режиме.