我一直在研究一些有关如何制作Discord Python Bot的示例,并且我发现client
和bot
几乎可以互换使用,而我找不到您何时会在何时使用哪个。
例如:
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
的情况。
有人可以澄清client
和bot
之间的区别吗?
答案 0 :(得分:3)
只需使用commands.Bot
。
Bot
是Client
的扩展版本(属于 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