由于Go-CQHTTP的更新,老版的yes酱存在诸多问题(若还是想使用以前的yes酱请移步博客),让新手望而却步,因此,这里开源自己魔改的yes酱,希望能够造福群友和大家一起交流学习Python
新版yes酱说明
魔改后的yes酱生存的环境如下:
- Python 3.7+
- Go-CQHTTP 1.0.0.4 beta
新版yes酱在原有基础上基本保持不变,改动如下:
- 通信方式改为正向websocket
- 兼容最新版Go-CQHTTP
- 更改协议为nonebot
- 新增添加好友自动处理函数
- 封装了合并转发功能
- 封装了私聊功能
- 修复原yes酱猫猫图发送失败问题
- 新增了几个禁言的字段
准备工作
QQ号注册
一个手机号能够绑定十个QQ号,所以直接在官方网站注册QQ即可,注册完之后记得马上登陆并记下QQ号,最好保持活跃,否则会被收回
程序下载
在github下载go-cqhttp,windows 64位选择go-cqhttp_windows_amd64.exe,linux选择go-cqhttp_1.0.0-beta4_linux_amd64.deb:
在github下载新版Yes酱源码,可以使用Git下载,也可以直接网页下载解压即可:
在cmd窗口输入命令安装python的websocket库:
pip install websocket
pip install websocket-client
新版yes酱配置
go-cqhttp配置
Windows的话直接双击运行下载好的EXE程序,会出现如图所示界面:
输入数字2,按下回车:
然后就可以看到本地多了个文件config.yml
:
Linux的话直接sudo dpkg -i go-cqhttp_0.9.40-fix5_linux_amd64.deb
安装框架,然后在任意处使用命令go-cqhttp
启动程序,重复上述操作即可
编辑该文件,更改QQ号、密码(初始设置建议为空,登录成功的几率更高)、以及server
下的ws
下的address
(改为0.0.0.0:6700
,表示绑定本地的6700端口),其他都不用改。看一下注释就能明白,这里不做赘述。更改完成后的文件内容如下所示:
# go-cqhttp 默认配置文件
account: # 账号相关
uin: 123456789 # QQ账号
password: '' # 密码为空时使用扫码登录
encrypt: false # 是否开启密码加密
status: 0 # 在线状态 请参考 https://docs.go-cqhttp.org/guide/config.html#在线状态
relogin: # 重连设置
delay: 3 # 首次重连延迟, 单位秒
interval: 3 # 重连间隔
max-times: 0 # 最大重连次数, 0为无限制
# 是否使用服务器下发的新地址进行重连
# 注意, 此设置可能导致在海外服务器上连接情况更差
use-sso-address: true
# 是否允许发送临时会话消息
allow-temp-session: false
heartbeat:
# 心跳频率, 单位秒
# -1 为关闭心跳
interval: 5
message:
# 上报数据类型
# 可选: string,array
post-format: string
# 是否忽略无效的CQ码, 如果为假将原样发送
ignore-invalid-cqcode: false
# 是否强制分片发送消息
# 分片发送将会带来更快的速度
# 但是兼容性会有些问题
force-fragment: false
# 是否将url分片发送
fix-url: false
# 下载图片等请求网络代理
proxy-rewrite: ''
# 是否上报自身消息
report-self-message: false
# 移除服务端的Reply附带的At
remove-reply-at: false
# 为Reply附加更多信息
extra-reply-data: false
# 跳过 Mime 扫描, 忽略错误数据
skip-mime-scan: false
output:
# 日志等级 trace,debug,info,warn,error
log-level: warn
# 日志时效 单位天. 超过这个时间之前的日志将会被自动删除. 设置为 0 表示永久保留.
log-aging: 15
# 是否在每次启动时强制创建全新的文件储存日志. 为 false 的情况下将会在上次启动时创建的日志文件续写
log-force-new: true
# 是否启用日志颜色
log-colorful: true
# 是否启用 DEBUG
debug: false # 开启调试模式
# 默认中间件锚点
default-middlewares: &default
# 访问密钥, 强烈推荐在公网的服务器设置
access-token: ''
# 事件过滤器文件目录
filter: ''
# API限速设置
# 该设置为全局生效
# 原 cqhttp 虽然启用了 rate_limit 后缀, 但是基本没插件适配
# 目前该限速设置为令牌桶算法, 请参考:
# https://baike.baidu.com/item/%E4%BB%A4%E7%89%8C%E6%A1%B6%E7%AE%97%E6%B3%95/6597000?fr=aladdin
rate-limit:
enabled: false # 是否启用限速
frequency: 1 # 令牌回复频率, 单位秒
bucket: 1 # 令牌桶大小
database: # 数据库相关设置
leveldb:
# 是否启用内置leveldb数据库
# 启用将会增加10-20MB的内存占用和一定的磁盘空间
# 关闭将无法使用 撤回 回复 get_msg 等上下文相关功能
enable: true
sqlite3:
# 是否启用内置sqlite3数据库
# 启用将会增加一定的内存占用和一定的磁盘空间
# 关闭将无法使用 撤回 回复 get_msg 等上下文相关功能
enable: false
cachettl: 3600000000000 # 1h
# 连接服务列表
servers:
# 添加方式,同一连接方式可添加多个,具体配置说明请查看文档
#- http: # http 通信
#- ws: # 正向 Websocket
#- ws-reverse: # 反向 Websocket
#- pprof: #性能分析服务器
- http: # HTTP 通信设置
address: 0.0.0.0:5700 # HTTP监听地址
timeout: 5 # 反向 HTTP 超时时间, 单位秒,<5 时将被忽略
long-polling: # 长轮询拓展
enabled: false # 是否开启
max-queue-size: 2000 # 消息队列大小,0 表示不限制队列大小,谨慎使用
middlewares:
<<: *default # 引用默认中间件
post: # 反向HTTP POST地址列表
#- url: '' # 地址
# secret: '' # 密钥
# max-retries: 3 # 最大重试,0 时禁用
# retries-interval: 1500 # 重试时间,单位毫秒,0 时立即
#- url: http://127.0.0.1:5701/ # 地址
# secret: '' # 密钥
# max-retries: 10 # 最大重试,0 时禁用
# retries-interval: 1000 # 重试时间,单位毫秒,0 时立即
# LambdaServer 配置
- lambda:
type: scf # scf: 腾讯云函数 aws: aws Lambda
middlewares:
<<: *default # 引用默认中间件
# 正向WS设置
- ws:
# 正向WS服务器监听地址
address: 0.0.0.0:6700
middlewares:
<<: *default # 引用默认中间件
# 反向WS设置
- ws-reverse:
# 反向WS Universal 地址
# 注意 设置了此项地址后下面两项将会被忽略
# universal: ws://127.0.0.1:6700/ws
# 反向WS API 地址
# api: ws://127.0.0.1:6700/ws
# 反向WS Event 地址
# event: ws://127.0.0.1:6700/ws
# 重连间隔 单位毫秒
reconnect-interval: 3000
middlewares:
<<: *default # 引用默认中间件
Yes酱配置
打开yes酱所在的文件夹,找到config.json
文件,配置如下:
{
"path":"/pic/mao/",
"ban_words":["科学上网","黑产","翻墙","huangse","@全体成员"],
"apikey":"",
"group":[123456789],
"self_qq":"987654321"
}
其中:
path
为项目文件夹下的pic
文件夹下的mao
文件夹地址,一般无需更改,除非你想换个地方存储ban_words
为想要yes酱禁言的关键词-
apikey
为yes酱调用的setuAPI,可以去申请一个,也可以不填,申请方式如图所示:
group
为想要yes酱管理的群号,可以填写多个,用英文逗号分隔即可self_qq
为之前注册申请想要用来当机器人的QQ号
程序运行
go-cqhttp运行
windows的话直接右键,以管理员权限运行即可:
Linux的话,使用命令nohup go-cqhttp &
后台运行:
然后的步骤和老版的Go-CQHTTP一样,大家看看之前的截图就行了。
初次运行会自动创建设备:
然后需要验证新设备以登录:
这里输入1
按下回车:
鼠标选中->
和<-
之间的网址,按下ctri+shift+C
复制链接,然后打开浏览器,在地址栏粘贴链接进入验证页面,在页面空白处右键单击检查
:
选择network
等候抓包:
然后手动拖动滑块,完成验证,查看右边抓到的包:
其中的ticket
即为需要在命令行输入的字符串。双击该字符串选中复制,随便找个地方粘贴出来看看再复制一遍,然后在命令行窗口单击鼠标右键即可粘贴进去,然后回车,即可看到登陆成功:
如果还是不行的话,就将config.yml
的配置文件中的密码字段留空,然后启动,之后选择扫码登录即可
yes酱启动
windows的话在yes酱根目录下启动cmd命令行窗口,输入命令启动:
python main.py
linux的话使用命令nohup python main.py &
启动,可后台运行
yes酱启动:
静等出现
连接成功
字样即可
程序效果
在群聊里艾特yes酱即可:
在群里艾特yes酱发送help即可获得菜单:
添加yes酱为好友之后,即可私聊开始调教(这里diy了一下yes酱回答的话语,原句是添加成功!
):
报错处理
这里列举一些常见的错误:
python程序报错
E1. 连接到服务器时出现错误:unexcepted EOF
检查go-cqhttp的配置文件的地址是否有误,端口需和程序里main函数填写的一致。例如:文中github开源代码内填写的端口为6700,则go-cqhttp的配置文件中对应的server.ws.address的端口需要配置为同样的6700
E2. 只出现start,没有出现连接成功
检查go-cqhttp启动时选择的连接方式和python程序是否一致。例如:文中github选择的连接方式为正向ws,则go-cqhttp在创建配置文件时也应选择正向ws,且端口一致(见E1)
E3. setu这个api调用几次之后就没有反应了
这是因为apikey为空的话每天可以调用的次数有限,按照setuAPI的申请方式申请一个apikey即可获得300次/天的调用次数
go-cqhttp报错
E4. No connection could be made because the target machine actively refused it
该错误表明没找到对应连接的python客户端,解决方法同E1E2
E5. 登录不上
请到github更新go-cqhttp到最新版(建议手机和电脑处于同一局域网(例如:连接同一WiFi、手机给电脑开热点、电脑给手机开WiFi等)使用扫码登录,成功率最高)
E6. 同样的配置换个环境(Linux)登录不上
先在本地使用go-cqhttp将账号保持在线大概一个星期,然后就可以顺利移植了