今天就是要來講Discord.py中定時指令的用法,事不宜遲讓我們直接進主題。
如何在Discord.py中運行定時任務或指令:
首先,需要導入以下模組:
import discord
from discord.ext import tasks, commands
然後創建一個Discord bot並定義一個async函數來執行您想要的定時任務內容:
intents= discord.Intents.all()
bot = commands.Bot(command_prefix='^^',
intents=intents)
@tasks.loop(hours=24) # 這裡可以是 seconds,minutes,hours 等參數設置間隔時間
async def called_once_a_day():
# 您的程式碼
print("這個任務每天執行一次")
@called_once_a_day.before_loop
async def before():
await bot.wait_until_ready()
print("準備開始每日任務")
在這裡,我使用 @tasks.loop 裝飾器來創建一個每天執行一次的任務。可以通過傳入不同的時間參數來設置任務的執行頻率。
然後 @called_once_a_day.before_loop
裝飾器用來在任務開始前執行初始化操作。
最後需要啟動任務:
called_once_a_day.start()
現在這個任務會每天在bot啟動時自動運行一次。
也可以創建另一個指令來手動啟動/停止任務:
@bot.command()
async def start_task(ctx):
called_once_a_day.start()
await ctx.send("已開始每日任務")
@bot.command()
async def stop_task(ctx):
called_once_a_day.stop()
await ctx.send("已停止每日任務")
這樣就可以基於discord.py實現定時任務了,可以根據實際需求調整時間間隔和任務內容。
如果要在Cog檔中實現discord.py的定時任務,步驟如下:
from discord.ext import tasks
class MyCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
self.my_task.start() # 啟動任務
async def cog_unload(self):
self.my_task.stop()# 停止任務
@tasks.loop(hours=1)
async def my_task(self):
# 任務內容
print('任務執行中...')
這裡要注意async def cog_unload
這個函式是為了當Cog檔被卸載時也將任務進行停止的動作,否則任務會繼續執行。
@my_task.before_loop
async def before_my_task(self):
await self.bot.wait_until_ready()
@commands.command()
async def start_task(self, ctx):
self.my_task.start()
await ctx.send('任務已開始')
@commands.command()
async def stop_task(self, ctx):
self.my_task.stop()
await ctx.send('任務已停止')
當然你也可以使用cancel()
方法來停止任務,但與stop()
不同的是用一旦使用cancel()
方法來停止任務後就無法再被開啟(start)。
async def setup(bot):
await bot.add_cog(MyCog(bot))
這樣就可以在Cog中實現自定義的定時任務了。整體流程與在主檔案中定義任務類似,只是將內容寫入了Cog類中。
discord.py中的@tasks.loop裝飾器還提供了以下一些方法可以使用:
這些方法可以讓我們更方便的控制任務的運行狀態和行為。通過組合使用,可以實現比較複雜的任務邏輯。
詳細可以參考 https://discordpy.readthedocs.io/en/stable/ext/tasks/index.html