作者 | 原文传送 |
---|---|
littley | www.littley.top |
NoneBot 是一个基于 酷Q 的 Python 异步 QQ 机器人框架,它会对 QQ 机器人收到的消息进行解析和处理,并以插件化的形式,分发给消息所对应的命令处理器和自然语言处理器,来完成具体的功能。
pip install nonebot
nonebot 的官方文档地址:https://none.rclab.tk/guide/getting-started.html,
下面我们先跑一下官网上的基础例子,
import nonebot
if __name__ == "__main__":
nonebot.init()
nonebot.load_builtin_plugins()
nonebot.run(host='127.0.0.1', port=8080)
可以看到现在程序运行在了本地的 8080 端口,而且本地的 4081和 4080 端口也连接到了本服务,就是我们在 HTTP API 插件的配置文件中做的配置
"ws_reverse_api_url": "ws://127.0.0.1:8080/ws/api/",
"ws_reverse_event_url": "ws://127.0.0.1:8080/ws/event/",
现在我们通过另一个qq向酷q登录的qq号发送如下内容:
/echo 你好
增加 config.py 文件,输入内容如下:
from nonebot.default_config import *
SUPERUSERS = {123456}#1
COMMAND_START = {'', '/', '!', '/', '!'}
HOST = '0.0.0.0'
PORT = 8080
SUPERUSERS:是配置一个超级 QQ 用户,我们可以为这个超级用户配置一些特殊的操作;
COMMAND_START:是配置命令起始字符,我们增加了空字符串,所以不需要任何起始字符也能调用命令;
另外就是配置了 host 和 端口 port。
然后我们就可以修改原来的文件为:
import nonebot
import config
if __name__ == "__main__":
nonebot.init(config)
nonebot.load_builtin_plugins()
nonebot.run()
我们使用金山词霸的 API 获取每日一句内容,http://open.iciba.com/dsapi/
def get_content():
url = 'http://open.iciba.com/dsapi/'
res = requests.get(url)
content_e = res.json()['content']
content_c = res.json()['note']
return [content_c, content_e]
这样就获取到一个”每日一句“的列表了。
创建一个 plugins 文件夹,在里面创建 daily.py 文件,编写如下代码:
from nonebot import on_command, CommandSession
2from utils import getdata
@on_command('daily', aliases=('每日一句',))
async def daily(session: CommandSession):
daily_send = await get_daily()
await session.send(daily_send[0])
await session.send(daily_send[1])
async def get_daily():
daily_sentence = getdata.get_content()
return daily_sentence
使用 on_command 装饰器声明一个命令处理器,声明两个命令,分别是 ”daily“ 和 ”每日一句“,当用户向本机器人发送这两个命令时,就会自动调用 daily 这个函数,并且发送对应的消息。
而 get_daily 函数,就是调用金山词霸的 API 函数,来获取内容。
最后修改主文件内容,加载自己编写的插件
import nonebot
import config
from os import path
if __name__ == "__main__":
nonebot.init(config)
nonebot.load_plugins(path.join(path.dirname(__file__), 'plugins'), 'plugins')
nonebot.run()
bot.py
import nonebot
import config
from os import path
if __name__ == '__main__':
nonebot.init(config)
nonebot.load_plugins(path.join(path.dirname(__file__), 'plugins'), 'plugins')
nonebot.run()
#nonebot.run(host='127.0.0.1', port=8080)
config.py
#!/usr/bin/env python
# encoding: utf-8
from nonebot.default_config import *
SUPERUSERS = {317xxxxx67}#qq号
COMMAND_START = {'', '/', '!', '/', '!'}
HOST = '0.0.0.0'
PORT = 8080
/plugins/daily
#!/usr/bin/env python
# encoding: utf-8
from nonebot import on_command, CommandSession
import requests
@on_command('daily', aliases=('每日一句',))
async def daily(session: CommandSession):
daily_send = await get_daily()
await session.send(daily_send[0])
await session.send(daily_send[1])
async def get_daily():
daily_sentence = get_content()
return daily_sentence
def get_content():
url = 'http://open.iciba.com/dsapi/'
res = requests.get(url)
content_e = res.json()['content']
content_c = res.json()['note']
return [content_c, content_e]
文章参照: https://cloud.tencent.com/developer/article/1465242
作者 | 原文传送 |
---|---|
littley | www.littley.top |