标签 QQ Bot 下的文章
基于 Nonebot2 的 QQ 群 OIDC 认证程序,支持 NewAPI
Lonely 自己私下里有一个公益站(怕扛不住所以没公开),但是呢… 对于用户(在 qq 群内)留存率有点苦恼,所以想出来了通过 Nonebot2 QQ Adapter 在 QQ 群内认证并遵循 OAuth2.0 标准
先掏源码:
archive.zip
NewAPI 中的配置:
配置
Well-Known URL<不用填这个 这个目前不支持>
Client ID:<QQ群ID,Bot只会受理指定群的消息>
Client Secret:<你oauth_secrets.json中的密钥>
Authorization Endpoint:https://<domain>/oauth/authorize
Token Endpoint:https://<domain>/oauth/token
User Info Endpoint:https://<domain>/oauth/userinfo
使用教程:
- 解压
- 使用
uv sync命令同步环境,没有 uv 的请看 uv 官方文档 安装 - 配置.env.prod,记得随机生成一个 JWT_SECRET,这个绝对不能给别人!!给了别人就能解码 JWT 了,注意在文件中添加一行
ONEBOT_ACCESS_TOKEN=你的访问令牌,生产环境需要添加 - 打开 data 目录,复制文件 oauth_secrets.json.example 为 oauth_secrets.json,并编辑键值对,键是群号,值(列表)是(多个)OAuth 密钥,可以只配置一个
- 接下来回到项目根目录,通过
uv run bot.py运行项目,记得反代为 HTTPS 协议,不然凭据容易被(中间人)盗取
如何接入 QQ 机器人
在服务器安装 Napcat
使用 docker logs <容器名字,默认napcat> 查看容器日志,打开服务器地址:6099/webui,从日志中找到 token 并登录 Napcat 以及登录 Napcat 上的 QQ
接下来添加连接配置,选择客户端 Websocket,地址填写 ws://<服务器地址>:5800/onebot/v11/ws(因为 NGINX 反代不好用,所以连接),密钥填写你在第三步 配置的连接 Token,不是 secret
接下来确保 Napcat 和 Nonebot 启动后,打开你要应用的 QQ 群,发送登录 123456 测试机器人是否有反应,有反应则代表成功
【脚本】在 QQ 发送系统提示
最近 QQ 又可以发送系统提示了,如图
还是发送 Pb 包实现的
这是一个来自天如大佬写的 Trss-Yunzai 发送 Pb 包的插件
使用 NapCat + TrssYunzai 使用这个插件,就可以在你的 QQ 里发送系统提示了喵!ww
在任意一个机器人所在群发送 #hz内容就可以得到一个 “内容” 的系统提示 #hz 和内容之间没有空格
由于大佬的版本是需要在发送灰字所在群发送云崽指令,很不美观(骗不到人)
我基于这个版本弄了一个二改版本(
在任意群内发送 #hz 内容 群号可以把灰字发送到指定群内(需要机器人在群)
二改
import plugin from '../../lib/plugins/plugin.js' export class GreyText extends plugin {
constructor () {
super({
name: '灰字发送',
dsc: 'Raw PB 灰字(指定群)',
event: 'message',
priority: 500,
rule: [
{
reg: '^#hz\\s+(.+?)\\s+(\\d+)$',
fnc: 'sendGrey'
}
]
})
}
async sendGrey (e) {
const match = e.msg.match(/^#hz\s+(.+?)\s+(\d+)$/)
if (!match) return const content = match[1]
const groupId = Number(match[2])
/** 灰字 PB(保持原可用结构,仅替换必要字段) */ const packet = {
25: {
1: {
1: 11,
50: "3573715425",
20: {
2: ,
3: ,
4:
},
5: 8,
0: {
1: 1
},
28: {
1: 2,
2: content,
3: ,
4: {
1: "",
2: 0
}
},
30: 2,
14: 1
}
}
}
await Packet.Long(
{
...e,
group_id: groupId
},
packet
)
return true
}
}
请注意,这个版本并没有写鉴权,建议修改触发指令
请合理使用,不要拿来刷屏哦,只要安装模块或者使用 NapCat 还是可以看见发送者的 ww!
坏喵喵
