簡體   English   中英

異步 - 等待 Discord.py 函數問題

[英]Async - Await Discord.py Function Problem

我想讓 Discord bot 做一些事情,等待 1 分鍾,然后做一些事情,之后,循環(while 循環)將繼續做同樣的事情,直到我停止程序。

這是我的代碼:

import discord
from discord.ext import commands
import requests
from bs4 import BeautifulSoup
import time

TOKEN = "MyToken!"
bot = commands.Bot(command_prefix='!')

@bot.event
async def on_ready():
    print("Started!")

@bot.command(pass_context=True)
async def start_bot():
    isAlreadyLive = False
    print("Let's get it started! :D")
    url = 'someLink'
    while True:
        soup = BeautifulSoup(requests.get(url).content, 'html.parser')
        varName = soup.find('span', {'class': 'firstClass secondClass'})
        if varName != None and boolVarName == False:
            await bot.say("SAY THIS! :D ")
            boolVarName = True
        if varName == None:
            await bot.say("SAY THIS #2! :D")
            boolVarName = False
        await time.sleep(60)
        print("Refreshed")

bot.run(TOKEN)

為了更清楚:我希望它檢查 varName(來自刮取)是否不等於 None(這意味着它刮取了一些東西)並檢查 boolVar 是否為 True,因為如果為真,它不會發送如果頁面上仍有內容,則每分鍾都會顯示相同的消息。 它每 60 秒刮一次頁面,所以我可以說它正在頁面上尋找一些“更改”。 好吧,我啟動了機器人,它打印了消息……但隨后出現了這個錯誤:

Ignoring exception in command start_bot
Traceback (most recent call last):
  File "C:\Users\WiMAX\PycharmProjects\KockarBot\venv\lib\site-packages\discord\ext\commands\core.py", line 50, in wrapped
    ret = yield from coro(*args, **kwargs)
  File "LiveBot.py", line 27, in start_bot
    await time.sleep(60)
TypeError: object NoneType can't be used in 'await' expression

先感謝您!

要使用異步方式睡眠,請執行以下操作:

await asyncio.sleep(60)

如果您正在談論制作循環,那么 discord 對此有一些幫助。 discord.py 有一個名為 tasks 的內置模塊,其中包括循環。 你可以用

from discord.ext import tasks

然后把它放在你的命令定義之前

@tasks.loop(seconds=some_float)

然后,您可以通過將其放入 on_ready 函數來啟動循環

function_name.start()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM