文章目录
前几天部署了开源的浮墨笔记(flomo)替代品:Memos。这个项目已经有了 Android、iOS 客户端、浏览器拓展等等一系列生态。但是对比原版的浮墨笔记,少了 QQ / 微信的接入对于我来说不太方便。Memos 提供了简便的 API,我们可以自己动手,部署一个 QQ 机器人。
前置准备
- 服务器,最好是境内的。
- 搭建好的 Memos 实例(我的实例:memos.skywt.cn)。
- 一个可登录的闲置 QQ 账号。
运行 go-cqhttp
我们的机器人在服务端分为两个组件,这两个组件都要部署在我们的服务器上。
- go-cqhttp 负责与腾讯 QQ 服务器通信,管理我们的账号登录、消息收发等过程;
- NoneBot 负责将 go-cqhttp 收到的消息进行处理,控制发送消息的内容,运行我们想要的业务逻辑。
首先部署 go-cqhttp。前往 GitHub 上的 release 下载最新适合服务器架构的版本,下载解压之后是一个单文件程序。第一次运行,在提示选择通信方式时,选择「反向 Websocket 通信」,之后程序就会在相同目录下生成配置文件。
编辑配置文件,根据提示将 uin 和 password 字段分别改为自己的 QQ 和密码。虽然配置文件中说「密码为空时可以使用扫码登录」,但是经过实测只有在同一网络环境下 QQ 才会允许扫码登录。部署在服务器上扫码是无法登录的,只能使用密码。
除此之外,修改文件底部 servers 部分 ws-reverse 中 universal 的地址。我设定的是 ws://127.0.0.1:8989/ws/
。这个地址告诉 go-cqhttp,该从哪里与后端的 NoneBot 通信。
修改完毕后,再次启动 go-cqhttp,可能会提示需要扫码、滑块验证、手机验证之类,跟着程序的提示进行即可。
程序会提示,对于腾讯云的服务器需要修改 DNS 为 114.114.114.114
。编辑 /etc/resolv.conf
并修改就行。
出现以下消息就表明登录成功:
[INFO]: 登录成功 欢迎使用: SkyWT
此时可能会出现大量的「Connection Refused」消息,这是因为我们还没启动后端的 NoneBot。忽略他们即可。
[WARNING]: 连接到反向 WebSocket Universal 服务器 ws://127.0.0.1:8989/ws/ 时出现错误: dial tcp 127.0.0.1:8989: connect: connection refused
接下来,要将 go-cqhttp 放到后台运行,开始编写 NoneBot 的主程序。
编写运行 NoneBot
参阅 NoneBot 的官方指南编写主要的代码,包括 bot.py
和 config.py
。在后者中要指定与 go-cqhttp 的 config.yml
中配置一致的 HOST 和 PORT。我的配置分别是 127.0.0.1
和 8989
。
接下来,我们可以通过编写插件的方式使 QQ 机器人实现 Memo 备忘录的功能。
其实直接根据文档里的插件修改一下就可以了:
from nonebot import on_command, CommandSession
import requests
import json
__plugin_name__ = 'Memos'
__plugin_usage__ = r"""
memo [需要添加的 Memo 内容]
"""
MEMOS_API = 'https://memos.skywt.cn/api/memo?openId=************'
@on_command('memo', aliases=('note'))
async def memo(session: CommandSession):
memo_text = session.current_arg_text.strip()
if not memo_text:
await session.send('Memo 内容不能为空!')
return
ret = await send_memo(memo_text)
await session.send(ret)
async def send_memo(memo_text: str) -> str:
data_to_send = {'content': memo_text}
r = requests.post(MEMOS_API, data=json.dumps(data_to_send))
if r.status_code == 200:
return '添加成功'
else:
return '添加失败,请查阅日志'
回到 NoneBot 的主目录启动 bot.py 并放在后台,发送消息 memo 这是一条测试笔记
,可以看到正确的输出。
进入 Memos 可以看到成功添加了一条 memo。
参考资料
- go-cqhttp 使用指南
- NoneBot 使用指南:文档通俗易懂,强烈推荐