Bot和Client有什么区别?

时间:2018-07-08 18:09:57

标签: python discord discord.py

我一直在研究一些有关如何制作Discord Python Bot的示例,并且我发现clientbot几乎可以互换使用,而我找不到您何时会在何时使用哪个。

例如:

client = discord.Client()
@client.event
async def on_message(message):
    # we do not want the bot to reply to itself
    if message.author == client.user:
        return

    if message.content.startswith('$guess'):
        await client.send_message(message.channel, 'Guess a number between 1 to 10')

    def guess_check(m):
        return m.content.isdigit()

@client.event
async def on_ready():
    print('Logged in as')
    print(client.user.name)
    print(client.user.id)
    print('------')

client.run('token')

vs。

bot = commands.Bot(command_prefix='?', description=description)
@bot.event
async def on_ready():
    print('Logged in as')
    print(bot.user.name)
    print(bot.user.id)
    print('------')

@bot.command()
async def add(left : int, right : int):
    """Adds two numbers together."""
    await bot.say(left + right)

bot.run('token')

我开始认为它们具有非常相似的特质,可以做相同的事情,但是个人偏好与客户端还是机器人一起使用。但是,它们之间确实存在差异,即客户端拥有on_message而机器人等待prefix command的情况。

有人可以澄清clientbot之间的区别吗?

1 个答案:

答案 0 :(得分:3)

Tl; dr

只需使用commands.Bot


BotClient的扩展版本(属于 subclass 关系)。就是它是启用了命令的Client的扩展,因此是子目录ext/commands的名称。

Bot类继承了Client的所有功能,这意味着您可以使用Client做的一切,Bot也可以做到。最引人注目的增加是成为命令驱动(@bot.command()),而在使用Client时,您将不得不手动处理事件。 Bot的缺点是您将不得不通过查看示例或源代码来学习其他功能,因为命令扩展没有太多文档说明。

如果您只是希望机器人接受命令并处理它们,那么Bot的使用会容易得多,因为所有的处理和预处理工作都是为您完成的。但是,如果您渴望编写自己的句柄并使用discord.py做疯狂的特技,则一定要使用基本的Client


万一您难以选择,我建议您使用commands.Bot,因为它使用起来容易得多,而且Client已经可以做所有事情。并且请记住,您不需要两者

错误:

client = discord.Client()
bot = commands.Bot(".")

# do stuff with bot

正确:

bot = commands.Bot(".")

# do stuff with bot