RuntimeError: цикл обработки событий остановлен до завершения Future - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь настроить расписание для запуска подпрограммы. Я пытаюсь использовать пример подпрограммы, чтобы отправить сообщение на канал разногласий при запуске расписания. Сначала я попытался просто отправить сообщение, но получил ошибку. Затем я попытался выяснить, как решить эту проблему, и попробовал различные способы, используя asyncio, но все они не сработали.

Если кто-нибудь сможет дать мне какие-либо указания на то, как я могу это сделать, тогда будет очень признателен.

import discord
import asyncio
import time
import schedule # pip install schedule

client = discord.Client()
@client.event
async def on_ready():
    print("Connected!")

async def example(message):
    await client.get_channel(CHANNEL ID).send(message)

client.run(SECRET KEY)

def scheduledEvent():
    loop = asyncio.get_event_loop()
    loop.run_until_complete(example("Test Message"))
    loop.close()

schedule.every().minute.do(scheduledEvent)

while True:
    schedule.run_pending()
    time.sleep(1)

1 Ответ

0 голосов
/ 29 октября 2019

Вы не можете запустить блокирующий код schedule в том же потоке, что и ваш асинхронный цикл обработки событий (ваш текущий код даже не будет пытаться планировать задачи, пока бот уже не отключится). Вместо этого вы должны использовать встроенное расширение tasks, которое позволяет планировать задачи.

import discord
from discord.ext import tasks, commands

CHANNEL_ID = 1234
TOKEN = 'abc'

client = discord.Client()

@client.event
async def on_ready():
    print("Connected!")

@tasks.loop(minutes=1)
async def example():
    await client.get_channel(CHANNEL_ID).send("Test Message")

@example.before_loop
async def before_example():
    await client.wait_until_ready()

example.start()

clinet.run(TOKEN)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...