簡體   English   中英

如何在discord.py中的cogs中使用調度庫?

[英]How to use schedule library in cogs in discord.py?

我希望機器人每天在特定時間完成一項工作,我知道我可以按計划完成這項工作,而且這也非常簡單。 我試過了,那行得通,但現在我試圖把它安排成齒輪並反復出錯。

齒輪:

import discord
from discord.ext import commands, tasks
import discord.utils
from discord.utils import get
import schedule
import asyncio
import time

class SmanageCog(commands.Cog, name='Manager') :

    def __init__(self,bot):
        self.bot = bot

    def job(self):
        print("HEY IT'S TIME!")

    schedule.every().day.at("10:00").do(job)

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


def setup(bot):
    bot.add_cog(SmanageCog(bot))
    print("Manager is loaded!")

根據上面的代碼,bot 會在每天上午 10 點打印嘿它的時間。 但這不起作用。 它在上午 10 點讓我出錯。 錯誤會是這樣的:

File "C:\Users\Rohit\AppData\Roaming\Python\Python37\site-packages\discord\ext\commands\bot.py", line 653, in load_extension
    self._load_from_module_spec(spec, name)
  File "C:\Users\Rohit\AppData\Roaming\Python\Python37\site-packages\discord\ext\commands\bot.py", line 599, in _load_from_module_spec
    raise errors.ExtensionFailed(key, e) from e
discord.ext.commands.errors.ExtensionFailed: Extension 'cogs.smanage' raised an error: TypeError: job() missing 1 required positional arguments: 'self'

我不知道我應該從def job傳遞什么參數,我不能在 cog 中留空,而 self 也會出錯,所以我真的不知道要傳遞什么。

你的問題在這一行:

schedule.every().day.at("10:00").do(job)

您將函數/方法job傳遞到調度程序中,但沒有綁定對象。 因此,當作業運行時,調度程序將該函數稱為“裸方法”,因此它不會為該方法提供self參數。

我不確定您在 SmanageCog 定義的類級別擁有代碼是怎么回事,但是如果您的代碼在類定義之外,您可以執行以下操作:

schedule.every().day.at("10:00").do(SmanageCog(bot).job)

然后你會為調度程序提供一個綁定方法,它會有一個對象作為self傳遞給該方法。

你可能想要在你的構造函數中調用 schedule 嗎?,所以:

def __init__(self,bot):
    self.bot = bot
    schedule.every().day.at("10:00").do(self.job)

我打賭主循環:

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

也不屬於類定義。

暫無
暫無

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

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