我需要在多个扩展(cogs)中使用相同的对象。如何编辑我的简单bot示例来实现这一点?
我可以在我的www.example.com或cog文件中启动SHARED_OBJECTmain.py。主要是在COG1和COG2扩展中使用相同的对象。重要的是要考虑到每个扩展都可以在程序启动后重新加载。
我正在使用discord.py rewrite lib
main.py
client = Bot(description="Bot", command_prefix="!")
client.run(__token__)
SHARED_OBJECT = SomeObject()
@client.event
async def on_ready():
client.dev = True
print('[Discord] Logged in as {} (ID:{}) | Connected to {} servers'.format(client.user.name,client.user.id,1))
client.load_extension('COG1')
client.load_extension('COG2')
字符串
COG1.PY类
class COG1():
def __init__(self, bot):
self.bot = bot
@commands.command()
async def test(self):
print()
def setup(bot):
bot.add_cog(COG1(bot))
型
COG1.PY类
class COG2():
def __init__(self, bot):
self.bot = bot
@commands.command()
async def test(self):
print("test")
def setup(bot):
bot.add_cog(COG2(bot))
型
2条答案
按热度按时间8ehkhllq1#
一个简单的方法是将其设置为bot上的属性。范例:
字符串
您确实可以访问每个扩展中的机器人。
8zzbczxx2#
如果你的齿轮都依赖于这个共享对象,那么你应该问问自己,它们的功能是否真的足够独立,可以分成不同的模块。
也就是说,如果你编写了自己的
load_extension
,那么你可以编写setup
方法来获取这个共享对象并将其传递给__init__
类。我从实际实现中摘录了以下内容,为了简洁起见,删除了一些验证。cog1.py:(与cog2相同的更改)
字符串
main.py
型