Discord.py新手求教:如何在Task任务中获取Guild ID
在Discord.py定时任务中获取Guild ID
我是Discord.py的新手,希望在Task定时任务中使用Guild ID,请问该如何在任务中获取它?以下是我的代码实现:
from discord.ext import tasks, commands from discord.commands import slash_command, Option import aiosqlite class Test(commands.Cog): def __init__(self, bot): self.bot = bot self.DB = "database.db" self.count_channel_task.start() @commands.Cog.listener() async def on_ready(self,): async with aiosqlite.connect(self.DB) as db: await db.execute( """ CREATE TABLE IF NOT EXISTS count_channels ( guild_id INTEGER PRIMARY KEY, channel_id INTEGER, channel_name TEXT )""" ) @tasks.loop(seconds=30) async def count_channel_task(self): for guild in self.guilds: print(guild) def setup(bot): bot.add_cog(Test(bot))
问题修正与解决方案
你的代码核心问题在于调用了self.guilds——Cog类本身没有guilds属性,需要通过初始化时保存的self.bot实例来访问机器人已加入的所有服务器。
关键修正部分
@tasks.loop(seconds=30) async def count_channel_task(self): # 遍历机器人加入的所有服务器 for guild in self.bot.guilds: # 获取当前服务器的Guild ID guild_id = guild.id print(f"服务器ID: {guild_id}")
完整修正后代码
from discord.ext import tasks, commands from discord.commands import slash_command, Option import aiosqlite class Test(commands.Cog): def __init__(self, bot): self.bot = bot self.DB = "database.db" self.count_channel_task.start() @commands.Cog.listener() async def on_ready(self,): async with aiosqlite.connect(self.DB) as db: await db.execute( """ CREATE TABLE IF NOT EXISTS count_channels ( guild_id INTEGER PRIMARY KEY, channel_id INTEGER, channel_name TEXT )""" ) await db.commit() # 补充提交操作,确保表创建生效 @tasks.loop(seconds=30) async def count_channel_task(self): for guild in self.bot.guilds: guild_id = guild.id print(f"服务器ID: {guild_id}") # 此处可添加业务逻辑,例如读写数据库等 def setup(bot): bot.add_cog(Test(bot))
补充说明
self.bot.guilds返回机器人当前已加入的所有Guild对象列表- 每个
Guild对象的id属性即为所需的Guild ID - 额外补充
await db.commit(),确保表创建操作正确写入数据库
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

