第一个机器人

这篇文章主要讲解一段最简代码的含义,而我假定你已安装QQ.py
如果你还没有安装,请前往 安装 的部分。

一个最小的机器人

让我们制作一个响应特定消息的机器人,代码看起来像这样:

example_bot.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import qq

client = qq.Client()

@client.event
async def on_ready():
print(f'我们使用 {client.user} 成功登陆了')

@client.event
async def on_message(message):
if message.author == client.user:
return

if '$你好' in message.content:
await message.channel.send('你好!')

client.run(token='your token here')

文件命名为 example_bot.py
请确保不要命名任何文件为 qq.py ,因为那会和库导入冲突。

导入库

example_bot.py
1
import qq

如果这引发了 ModuleNotFoundErrorImportError ,请转到 安装 部分来安装。

Client示例

example_bot.py mark:1
1
client = qq.Client()

这个客户端代表我们与 QQ 的连接。

注册事件

然后我们使用 Client.event 装饰器来注册一个事件。QQ.py 有很多事件可以给你选择。
由于这个库是异步的,我们以 回调 风格的方式做事。

example_bot.py mark:1,5
1
2
3
4
5
6
7
8
9
10
11
@client.event
async def on_ready():
print(f'我们使用 {client.user} 成功登陆了')

@client.event
async def on_message(message):
if message.author == client.user:
return

if '$你好' in message.content:
await message.channel.send('你好!')

回调是一个在发生某些事情时调用的函数。
在我们的案例中,当机器人完成登录时触发 on_ready, 并且当机器人收到消息时调用事件时候触发 on_message
要注意的是注册的事件是根据函数名所决定的,需要更多事件可以前往 文档

排除自己

由于 on_message 接收到的 每条消息 都会触发事件, 我们必须确保忽略来自机器人自己的信息。
我们通过检查Message.author 是否和Client.user 是一样的来判定。

example_bot.py mark:3,4
1
2
3
4
5
6
7
@client.event
async def on_message(message):
if message.author == client.user:
return

if '$你好' in message.content:
await message.channel.send('你好!')

检查并发送消息

之后,我们检查 $你好 是否在 Message.content 内。
如果是,那么我们在它使用的子频道中发送一条消息 '你好!'
这是处理命令的基本方法,以后可以使用 qq.ext.commands 指令拓展。

登陆并运行机器人

example_bot.py mark:1
1
client.run(token='your token here')

最后,我们使用登录令牌运行机器人。

运行机器人

现在我们已经制作了一个机器人,我们必须 运行 机器人。
幸运的是,这很简单,因为这只是一个 Python 脚本,我们可以直接运行它。

命令指示符
1
python3 example_bot.py