Как можно установить задержку перед выполнением команды в библиотеке Disnake.py?

Как можно установить значение переменной `b` в `true` через 10 минут и выполнить при этом определенную функцию, не блокируя выполнение остального кода, как это делает `asyncio.sleep`?
  • 15 сентября 2024 г. 15:03
Ответы на вопрос 2
В библиотеке Disnake (как и в asyncio) вы можете использовать `asyncio.create_task` для выполнения асинхронной функции с задержкой, не блокируя основной поток выполнения. Для того чтобы установить значение переменной `b` в `True` через 10 минут и выполнить определенную функцию, вы можете комбинировать `asyncio.sleep` с `asyncio.create_task`.

Вот пример того, как это можно сделать:

```python
import disnake
import asyncio

b = False

# Функция, которую нужно выполнить через 10 минут
async def set_variable():
    global b
    await asyncio.sleep(600)  # Задержка 10 минут (600 секунд)
    b = True
    print("Переменная b установлена в True")

# Основная функция или событие, где вы хотите запустить задержку
async def main():
    # Запускаем задачу по установке переменной
    asyncio.create_task(set_variable())
    
    # Другой код может выполняться здесь
    while not b:  # Это просто для примера, чтобы показать, что код не блокирует
        print("Переменная b равна False")
        await asyncio.sleep(1)  # Имитация выполнения другого кода

# Для запуска события в Disnake
@disnake.client.event
async def on_ready():
    print(f'Logged in as {disnake.client.user}')
    await main()

# Запуск бота
client = disnake.Client()
client.run('YOUR_TOKEN')
```

### Что здесь происходит:
1. Определяется глобальная переменная `b`, которую мы будем изменять.
2. Функция `set_variable` устанавливает значение `b` в `True` через 10 минут.
3. Внутри функции `main`, задача `set_variable` запускается с помощью `asyncio.create_task`, что позволяет не блокировать выполнение основного кода.
4. Мы также добавили простую петлю, чтобы показать, что основной код продолжает выполняться, пока переменная `b` не будет изменена.

Таким образом, вы можете устанавливать задержки и выполнять функции асинхронно без блокировки выполнения остального кода.
но бот не должен переставать работать как это делает asyncio.sleep
asyncio.sleep как раз не блокирует eventloop и бот должен работать, так что тут ты что-то делаешь не так
Похожие вопросы