简介

Mirai 是一个在全平台下运行,提供 QQ 协议支持的高效率机器人库。mirai-console 是一个高效率 QQ 机器人框架,机器人核心来自 mirai

Nonebot是一个基于 OneBot 标准(原 CQHTTP) 的 Python 异步 QQ 机器人框架,它会对 QQ 机器人收到的消息进行解析和处理,并以插件化的形式,分发给消息所对应的命令处理器和自然语言处理器,来完成具体的功能。

通过 mirai-console 加载相关插件我们可以使用 ws 协议与 Mirai-console 通信,从而搭建使用 Nonebot 框架的QQ机器人。

搭建环境

本文仅实践了在 Windows 环境下搭建,至于 Linux 环境能否搭建成功本文概不介绍,也不负责。

Mirai-cosole 本身支持在 JRE 8+ / JDK 8+ 环境下手动运行,但是我们可以使用自启动工具来启动,这样运行较为方便。其中官方文档推荐自动启动工具有两款:

官方: https://github.com/iTXTech/mirai-console-loader
第三方: https://github.com/LXY1226/MiraiOK

由于第三方这款近半年没有维护了,所以这里我们使用 mirai-console-loader。

mirai-console-loader 需要 Java 版本大于等于 11,所以我们需要前往 Oracle 官网下载 Java。官网下载时可能需要登录 Oracle 账号才能下载。这种行为十分恶心。于是在某 404 网站找到了相应解决办法。

例如我们安装 JDK 11,打开网址 https://www.oracle.com/java/technologies/javase-jdk11-downloads.html,选择 Windows x64 安装包,点击下载,弹出以下对话框。

勾选同意后,右键复制红框处的下载地址。

image-20210118101822639

格式类似下面:

https://www.oracle.com/webapps/redirect/signon?nexturl=https://download.oracle.com/otn/java/jdk/11.0.9%2B7/<key>/jdk-11.0.9_windows-x64_bin.exe

将其编辑修改为:

https://download.oracle.com/otn-pub/java/jdk/11.0.9%2B7/<key>/jdk-11.0.9_windows-x64_bin.exe

即将 nexturl= 后面复制,并将原来的 otn 修改为 otn-pub ,这样就无需登录可以直接下载了。

如果你的电脑上安装了其他版本的 Java 而你又不想卸载,那么可能产生冲突。默认 Java 应该不会设置环境变量。所以我们可以使用虚拟环境的方式来启动 Java。查询了网上一些介绍可以使用 Conda 或者 jenv 来管理。前者不知道能不能支持 Java 11,示例给的 Java 7 和 Java 8,后者则是在 Linux 和 Macos 上运行。

这里我们使用虚拟环境脚本的方式来使用 Java 11,当然读者如果有更好的方法欢迎留言。

新建一个 bat 脚本,命名为 activate.bat (本脚本来源于 Python 的 virtualenv 的环境激活脚本,并略作修改)

注意请将 VIRTUAL_ENV 替换为你的 Java 的 bin 路径, PROMPT=(JDK 11) 括号中的内容替换为你想要的提示词。

@echo off

set "VIRTUAL_ENV=C:\Program Files\Java\jdk-11.0.9\bin"

if defined _OLD_VIRTUAL_PROMPT (
    set "PROMPT=%_OLD_VIRTUAL_PROMPT%"
) else (
    if not defined PROMPT (
        set "PROMPT=$P$G"
    )
    if not defined VIRTUAL_ENV_DISABLE_PROMPT (
        set "_OLD_VIRTUAL_PROMPT=%PROMPT%"
    )
)
if not defined VIRTUAL_ENV_DISABLE_PROMPT (
    set "PROMPT=(JDK 11) %PROMPT%"
)

REM if defined _OLD_VIRTUAL_PATH (
if not defined _OLD_VIRTUAL_PATH goto ENDIFVPATH1
    set "PATH=%_OLD_VIRTUAL_PATH%"
:ENDIFVPATH1
REM ) else (
if defined _OLD_VIRTUAL_PATH goto ENDIFVPATH2
    set "_OLD_VIRTUAL_PATH=%PATH%"
:ENDIFVPATH2

set "PATH=%VIRTUAL_ENV%;%PATH%"

然后shift + right-click打开 powershell 或者 cmd。前者按照下图操作即可,后者无需再启动 cmd。当然你也可以自行修改virtualenv 的 ps1 脚本达到直接在 powershell 启动的目的。

image-20210118103621339

现在我们的 Java 环境已经安装完毕,接下来就是启动 mirai-console 了。

启动mirai-console

首先前往 releases 下载 mirai-console-loader 。我们下载最新版 mcl-1.0.3 并解压。

image-20210118142751052.png

之后进入解压目录,并运行.\mcl.cmd。首次运行他会自动下载一些运行所必须的文件,并生成一些文件和文件夹,运行结果展示如下:

10:43:34 [INFO] Mirai Console Loader version 1.0.3-6e34f43
10:43:34 [INFO] https://github.com/iTXTech/mirai-console-loader
10:43:34 [INFO] This program is licensed under GNU AGPL v3
10:43:34 [DEBUG] Loading script: boot.js
10:43:34 [DEBUG] Loading script: config.js
10:43:34 [DEBUG] Loading script: repo.js
10:43:34 [DEBUG] Loading script: updater.js
10:43:35 [INFO] Verifying "net.mamoe:mirai-console" version
10:43:35 [INFO] "net.mamoe:mirai-console:" is corrupted. Start downloading...
Downloading mirai-console-2.0.0.jar [==============================] 1.68 MB
Downloading mirai-console-2.0.0.sha1 [==============================] 40 B
10:43:40 [INFO] Verifying "net.mamoe:mirai-console-terminal" version
10:43:40 [INFO] "net.mamoe:mirai-console-terminal:" is corrupted. Start downloading...
Downloading mirai-console-terminal-2.0.0.jar [==============================] 1.24 MB
Downloading mirai-console-terminal-2.0.0.sha1 [==============================] 40 B
10:43:41 [INFO] Verifying "net.mamoe:mirai-core-all" version
10:43:41 [INFO] "net.mamoe:mirai-core-all:" is corrupted. Start downloading...
Downloading mirai-core-all-2.0.0.jar [==============================] 28.79 MB
Downloading mirai-core-all-2.0.0.sha1 [==============================] 40 B
2021-01-18 10:43:54 I/main: Starting mirai-console...
2021-01-18 10:43:54 I/main: Backend: version 2.0.0, built on 2021-01-15 18:20:03.
2021-01-18 10:43:54 I/main: Frontend Terminal: version 2.0.0, provided by Mamoe Technologies
2021-01-18 10:43:55 I/main: Prepared built-in commands: autoLogin, help, login, permission, status, stop
2021-01-18 10:43:55 I/main: 0 plugin(s) enabled.
2021-01-18 10:43:55 I/main: mirai-console started successfully.

当你看到 mirai-console started successfully 说明已经 mirai-console 成功启动了。

接下来你可以使用 /help 查看相关命令,更多命令介绍请查看 https://github.com/mamoe/mirai-console/blob/master/docs/BuiltInCommands.md#mirai-console---builtin-commands

你可以使用/autologin命令来设置自动登录。

/autoLogin add <qq> <passwd>

image-20210118104937051.png

首次登录可能需要如图的设备锁验证,点击设备锁验证然后扫码即可验证,成功后关闭弹窗即可。

image-20210118105137438.png

之后便是登录成功字样。后续登录可能会遇到调用浏览器输入验证码。

OneBot Mirai 插件安装

mirai 为我们提供了很多可供选择的插件,这里我们选用 OneBot Mirai (原cqhttp-mirai)来与 nonebot 通信。

CQHTTP 插件在 2020 年 8 月后已经无法使用。目前推荐使用功能和配置方式类似的 go-cqhttp 来与 NoneBot 协同工作。

其余支持 OneBot (旧 CQHTTP) 的方式有:

此表并不完整,你可以选择合适的替代并且按照相应文档完成配置。

OneBot Mirai releases 页面下载 onebot-mirai-0.3.4-all.jar 。下载完成后将其置于 mcl 的 plugins 文件夹中,之后运行重新 mirai-console , 此后 mirai-console 将在 config/OneBot 文件夹中自动生成样本配置文件 settings.yml 。编辑配置文件, 按照以下配置给出的注释修改保存。注意修改时请关闭 mirai-console ,否则 mirai-console 退出后,配置文件将还原为运行时加载的配置文件。修改完成后,再次启动配置文件即可加载。具体的配置文件介绍可以查看这里

下面给出一个示例:

proxy: ''
bots: 
  # 将下面这个替换为你的机器人的 QQ 号。
  1234567890: 
    cacheImage: false
    cacheRecord: false
    heartbeat: 
      enable: false
      interval: 1500
    http: 
      enable: false
      host: 0.0.0.0
      port: 5700
      accessToken: ''
      postUrl: ''
      postMessageFormat: string
      secret: ''
      # 上报超时时间, 单位毫秒, 须大于 0 才会生效
      timeout: 0
    ws_reverse: 
      # 将这里改为 true
      - enable: true
        postMessageFormat: string
        reverseHost: 127.0.0.1
        reversePort: 8080
        accessToken: ''
        reversePath: '/ws'
        reverseApiPath: '/api'
        reverseEventPath: '/event'
        useUniversal: true
        useTLS: false
        reconnectInterval: 3000
    ws: 
      enable: false
      postMessageFormat: string
      wsHost: 0.0.0.0
      wsPort: 6700
      accessToken: ''

修改完配置文件,再次启动(首次启动也会显示),注意我们可以看到插件已经加载完毕,如果你已经登录了 QQ ,到这里你就无需再对 mirai-console 修改。

2021-01-18 10:59:37 I/plugin: Successfully loaded plugin OneBot
2021-01-18 10:59:38 I/main: Prepared built-in commands: autoLogin, help, login, permission, status, stop
2021-01-18 10:59:38 I/OneBot: Plugin loaded! 0.3.4
2021-01-18 10:59:38 I/OneBot: 插件当前Commit 版本: 75a84ee
2021-01-18 10:59:38 I/main: 1 plugin(s) enabled.

Nonebot

接下来我们来配置 Nonebot。事实上,官方的 docs 已经很具体详尽,此处就做个简单说明。

首先你需要确保你的 Python 版本 >= 3.7。然后运行如下命令即可,建议使用 virtualenv 、poetry 或者 Conda 等工具来管理依赖包或者虚拟环境。

pip install nonebot

如果你需要使用最新的(可能尚未发布的)特性,可以克隆 Git 仓库后手动安装:

git clone https://github.com/nonebot/nonebot.git
cd nonebot
python setup.py install

以上命令中的 pippython 可能需要根据情况换成 pip3python3

之后安装官方文档的介绍,我们需要配置 CQHTTP 插件。事实上,我们刚才配置的 OneBot Mirai 就是这个插件。不过配置到这里,我发现好像还可以用基于 MiraiGogo-cqhttp 似乎简单些,有兴趣的读者可以尝试。

最后,你只需要按照官方文档给出的教程就可以编写自己的机器人了,这里就不再赘述了。

更新

2021.1.21

发现已经有新版的 nonebot2 了,官方文档可以在这里找到。
需要注意的是,你需要将 onebot 的 settings.yml 中的 reversePath: '/ws' 改为 reversePath: 'cqhttp/ws'

这几天在折腾学习PYNQ-Z2,然后看到官方文档中介绍了如何安装板卡文件。[1]

Vivado board files contain the configuration for a board that is required when creating a new project in Vivado.

Installing these files in Vivado, allows the board to be selected when creating a new project. This will configure the Zynq PS settings.

To install the board files, extract, and copy the board files folder to:

<Xilinx installation directory>\Vivado\<version>\data\boards

If Vivado is open, it must be restart to load in the new project files before a new project can be created.

然而,我将解压的文件夹直接放入boards之后,在Vivado并不能选取pynq-z2,然后经过一番搜索找到一篇教程——Vivado Version 2015.1 and Later Board File Installation (Legacy)[2]。这个教程介绍的较为完整,意思是新的板卡文件需要放入下一层目录,即board_files中去。

事实上,pynq-z2板卡文件应该放置于boards\board_files中,即最后解压出来的文件夹pynq-z2放置在里面,这样在Vivado中创建项目时,选择板卡,就能够找到pynq-z2了。

参考链接

前言

  在此前,我为自己的一些站点加上 HTTPS ,但总是提示 ERR_TOO_MANY_REDIRECTS (重定向次数过多)。起初,我以为是自己 Nginx 的配置除了问题,但是在查阅了很多资料,并对配置文件进行修改后还是没有效果,遂放弃了折腾。一段时间后,重新想起此事,然后再使用 Google 并且用关键词 ERR_TOO_MANY_REDIRECTS 查询了一些资料(百度和 CSDN 全是复读机),终于找到一篇很详细的文章讲解了各种可能的情况。在浏览文章的过程中,我发现了由 Cloudflare 引起的重定向次数过多,这时我才恍然大悟,我 TM 确实设置的是他那样的。阅读这部分文章后,发现原来是 Cloudflare 的 SSL/TLS(Crypto) 设置导致的。

原因

  因为在 Cloudflare 的 SSL/TLS 设置选项中,如果你选择了 Flexible ,那么所有对你的服务器的请求都是通过 HTTP 发送的,而如果服务器上已经设置了将 HTTP 重定向到 HTTPS 的话,就会发生重定向循环。

解决方法

  由此,想要解决这个问题,只需要将 SSL/TLS 设置中的选项,从 Flexible 更换到 Full 或者 Full(strict) 即可。

将 SSL/TLS 加密模式修改为 FULL

将 SSL/TLS 加密模式修改为 FULL

  当然,你也可以选择创建 Always Use HTTPS 页面规则,来解决这个问题,而不会导致循环。

参考链接

背景

  前不久旧手机接近报废,由于贫穷更换了OPPO手机。总体来说还行(可能是新机吧),然而前不久发现在使用Chrome的时候,点击Chrome中的一些链接,比如知乎的,总是会跳转到系统的自带浏览器。而我早已经将默认浏览器设置为了Chrome,居然还会发生这样的事。
  在经过一番资料的查找以及群友的帮助后,决定使用ADB来禁用系统自带的浏览,以便解决这个问题。

解决方法

  首先前往官网下载ADB,或者点击这里platform-tools_r29.0.6-windows.zip下载旧版。下载完成后解压。
  然后用数据线将手机连接到电脑。注意,如果是第一次连接电脑,请暂时不要开启USB调试模式,这样可能会导致驱动安装失败。然后选择使用文件传输等模式,让电脑自动将驱动安装完成。
  接下来打开手机“设置-关于手机”,并点击版本号多次,系统就会提示你已经开启开发者模式。再到“设置-其他设置”中进入开发者选项,打开它并开启USB调试。在下载好的adb目录打开命令提示符即cmd,输入.\adb shell进入shell,然后输入pm list packages | grep browser,在列出的包名中找到系统浏览器的。再将浏览器的包名<package>选中复制,最后输入pm disable-user <package>即可。

问题

  由于不是使用的root权限,可能随着系统的更新浏览器会自己出现,需要再次禁用。

介绍

ikoula其独立服务器支持IPv6,但是需要用户自己手动设置。

配置IPv6

ikoula给定的IPv6地址格式为
2a00:c70:1:XXX:XXX:XXX:XXX:YYYY/96
其中
XXX:XXX:XXX:XXX为你当前服务器的IPv4地址
YYYY为任意的合法十六进制数,范围从0000到FFFF

例如:
服务器IP213.246.56.94
那么可以设置你的IPv6地址为2a00:c70:1:213:246:56:94:2333
而其对应的网关地址为2a00:c70:213:246:56:94::1

编辑文件/etc/network/interfaces

iface eth0 inet6 static
        address 2a00:c70:1:213:246:56:94:2333/96
        gateway 2a00:c70:1:213:246:56::1
        dns-nameservers 213.246.33.228 213.246.33.229 80.93.83.25
        dns-search ikoula.com

然后重启网络即可生效。

Ubuntu 18.04

因为Ubuntu 18.04开始使用netplan进行网络设置,所以设置方法有所不同。

nano /etc/netplan/01-netcfg.yaml

配置如下:

network:
        version: 2
        renderer: networkd
        ethernets:
                eth0:
                        dhcp4: no
                        dhcp6: no
                        addresses: [213.246.56.94/24, '2a00:c70:1:213:246:56:94:2333/96']
                        gateway4: 213.246.15.1
                        gateway6: 2a00:c70:1:213:246:56::1
                        nameservers:
                                addresses: [213.246.36.14,213.246.33.144,80.93.83.11]

编辑完成后输入netplan apply即可

参考文章:

https://fr-wiki.ikoula.com/fr/Comment_calculer_mon_IPV6
https://npchk.info/ikoula-ipv6/