gpt4 book ai didi

python - 为多个机器人加载齿轮

转载 作者:太空狗 更新时间:2023-10-29 21:10:33 28 4
gpt4 key购买 nike

使用 discord.py,我可以从一段代码运行多个机器人,但我正在寻找一种方法来将 cog 或扩展加载到多个机器人中。对于测试用例,我有 bot.pycog.py,它负责加载 cog 和启动 bot,而 cog.py 是一个简单的 cog,它将 1柜台

bot.py

from discord.ext import commands
import asyncio

client1 = commands.Bot(command_prefix='!')
client2 = commands.Bot(command_prefix='~')

client1.load_extension('cog')
client2.load_extension('cog')

@client1.event
async def on_ready():
print('client1 ready')

@client1.command()
async def ping():
await client1.say('Pong')

@client2.event
async def on_ready():
print('client2 ready')

@client2.command()
async def ping():
await client2.say('Pong')

loop = asyncio.get_event_loop()
loop.create_task(client1.start('TOKEN1'))
loop.create_task(client2.start('TOKEN2'))
loop.run_forever()

cog.py

from discord.ext import commands

class TestCog:

def __init__(self, bot):
self.bot = bot
self.counter = 0

@commands.command()
async def add(self):
self.counter += 1
await self.bot.say('Counter is now %d' % self.counter)


def setup(bot):
bot.add_cog(TestCog(bot))

使用 !ping 将使 client1 响应 Pong,而使用 ~ping 将使 client2 响应Pong,这是预期的行为。

但是,只有一个机器人会同时响应 !add~add,并且计数器会随着任一命令的增加而增加。这似乎取决于最后加载 cog 的机器人。

有没有办法让正确的机器人响应正确的命令,同时使用任一命令增加计数器?我知道我可以将它分成两个齿轮并将结果保存到一个文件中,但是是否可以在不将计数器保存到磁盘的情况下做到这一点?

最佳答案

这是因为 @commands.command() 只加载了一次。因此,两个机器人共享同一个 Command 实例。您需要的是在实例级别添加命令,而不是通过 @commands.command() 装饰器。

class TestCog:
counter = 0

def __init__(self, bot):
self.bot = bot
self.bot.add_command(commands.Command('add', self.add))

async def add(self):
TestCog.counter += 1
await self.bot.say('Counter is now %d' % TestCog.counter)

或:

class TestCog:
counter = 0

def __init__(self, bot):
self.bot = bot
self.bot.command()(self.add)

async def add(self):
TestCog.counter += 1
await self.bot.say('Counter is now %d' % TestCog.counter)

为了使两个机器人共享相同的属性。您需要类属性,而不是实例属性。

关于python - 为多个机器人加载齿轮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49302170/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com