从命令中访问类属性或方法。Command

问题描述 投票:0回答:1

我正在构建一个 Discord 机器人。机器人应该将一些信息存储到一些内部变量中以便稍后访问。 为此,我将其构建为一个类(与许多命令位于

class
定义之外的示例相反)。但是,我发现当您使用
@commands.command(name='test')
装饰器时,该方法变成了一种“静态”方法,并且不再接收对象作为第一个输入。

鉴于此,有什么方法可以访问类属性(例如下面示例中的

an_instance_property
)和/或类方法(例如下面示例中的
a_class_method
)?

如果这是错误的方法,那么对于具有内部状态的机器人来说,更好的方法是什么?

import discord
from discord.ext import commands

with open('TOKEN', 'r') as f:
    TOKEN = f.read()

class mybot(commands.Bot):
    def __init__(self):
        intents = discord.Intents.default()
        super().__init__(command_prefix="!", intents=intents)
        self.add_command(self.test)

        self.an_instance_property = [] # <----

    def a_class_method(x): # <----
        return x

    @commands.command(name='test')
    async def test(ctx, *args):
        # How can I access self.an_instance_property from here?
        # How can I call self.a_class_method from here?
        return

bot = mybot()
bot.run(TOKEN)
python discord.py
1个回答
0
投票

我的建议是避免在机器人类中定义命令。有一个更合适的方法来做到这一点,那就是使用

cogs/extensions

请参阅此主题,其中命令是在单独的文件中创建的 (

extension
) 并且仅加载到机器人类中:https://stackoverflow.com/a/78166456/14307703

© www.soinside.com 2019 - 2024. All rights reserved.