因此,在我的bot.py
主文件中,我有:
class Bot(commands.Bot):
# BOT ATTRIBUTES
class default_cooldown:
maxcommands = ...
seconds = ...
mode = ...
class my_exception(commmands.CommandError): pass
def my_check(self):
def predicate(ctx):
if ctx.author in a_list: return True
raise self.my_exception
bot = Bot(...)
现在我还有一个cog文件,我想在其中使用Bot().my_check()
检查和我的Bot().default_cooldown()
类:
class Cog(commands.Cog):
def __init__(self, bot):
self.bot = bot
@commands.command()
@self.bot.my_check()
@commands.cooldown(self.bot.default_cooldown().maxcommands, self.bot.default_cooldown().seconds, self.bot.default_cooldown().mode)
async def a_command(self, ctx):
pass
但是我得到一个错误,说我的检查和冷却时间未定义self
。谁能帮我解决这个问题?
答案 0 :(得分:1)
方法在创建类对象时创建一次,而不是为每个实例单独创建。您有两种选择:
Bot
的定义移至与执行机器人程序不同的模块中,并将my_check
设为staticmethod
。然后,您可以通过Bot.my_check
而不是通过特定实例来访问它。setup
内定义齿轮,以使类在创建bot
实例时就知道。答案 1 :(得分:0)
好的,谢谢。因此,如果我在另一个文件中写入支票,它会像这样:
class Checks:
def __init__(self, bot):
self.bot = bot
def my_check(self):
def predicate(ctx):
if ctx.author.id in self.bot.a_list: return True
raise self.bot.my_exception
然后如何访问齿轮中的my_check()
?