Как настроить отправку сообщений только для тех, кто в данный момент онлайн?

Как можно сделать так, чтобы сообщение отправлялось только тем пользователям, которые находятся в сети? Я пытался реализовать это самостоятельно, но у меня не получилось. Вот мой код: <br/> <br/> <pre><code class="python">import disnake
from disnake.ext import commands

bot = commands.Bot(command_prefix=",", help_command=None, intents=disnake.Intents.all())

@bot.event
async def on_ready():
    print(f"bot {bot.user} ready")
@bot.command(name = 'start')
async def test(ctx: commands.Context, message: str):
    for member.status is not discord.status.offline in ctx.guild.members:
        try:
            await member.send(f'{member.mention}\n**Поздравляю!**, вы получили **__Ночной Подарок__**')
        except:
            pass

bot.run("")</code></pre>
  • 24 октября 2024 г. 16:12
Ответы на вопрос 2
Чтобы отправлять сообщения только тем пользователям, которые в данный момент онлайн, нужно правильно проверить статус каждого участника. В вашем текущем коде есть несколько ошибок. Во-первых, использование выражения `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`).

Теперь код будет отправлять сообщения только тем пользователям, которые находятся в онлайн-режиме.
в for нельзя условие добавлять 
for member in ctx.guild.members:
    if member.status != discord.status.offline:
       ...
Похожие вопросы